commit
899a7d35df
5 changed files with 155 additions and 0 deletions
@ -0,0 +1,39 @@ |
||||
#!/bin/bash |
||||
|
||||
[ -e /etc/buildwatcher/watcher.conf ] && . /etc/buildwatcher/watcher.conf |
||||
|
||||
TOP_DIR=${TOP_DIR:-/var/lib/build/} |
||||
WATCHED_DIR=$TOP_DIR/uploads |
||||
PLAGUE_SERVER=${PLAGUE_SERVER:-http://localhost:8887} |
||||
|
||||
inotifywait -e moved_to -r -m --format %w%f $WATCHED_DIR | while read SRPM; do |
||||
echo "new file arrived: $SRPM" |
||||
NAME=$(rpm -qp $SRPM --qf %{NAME}) |
||||
if [ -z $NAME ]; then |
||||
echo "Error, $SRPM is not a valid srpm file. Notifying the admin ($ADMIN_EMAIL)" |
||||
mv $SRPM $TOP_DIR/errors/ |
||||
echo "An error occurred with file $SRPM which wasn't recognized as a valid srpm file. It's been moved to $TOP_DIR/errors/" | \ |
||||
mail -s "Build sys error" $ADMIN_EMAIL |
||||
else |
||||
DIST=$(basename $(dirname $SRPM)) |
||||
OWNER=$(stat --format %U $SRPM) |
||||
# Lookup in LDAP if we have an email for this user |
||||
echo "Looking up email of user $OWNER: ldapsearch -x -LLL -H $LDAP_URI -b $LDAP_USER_BASE uid=$OWNER mail" |
||||
EMAIL=$(ldapsearch -x -LLL -H $LDAP_URI -b $LDAP_USER_BASE uid=$OWNER mail | grep mail: | head -1 | awk '{print $2}') |
||||
[ -z $EMAIL ] && EMAIL=$ADMIN_EMAIL |
||||
PLAGUE_CONF=$(mktemp) |
||||
# TODO: make the plague client config file templated |
||||
cat <<_EOF > $PLAGUE_CONF |
||||
[Server] |
||||
use_ssl = no |
||||
address = $PLAGUE_SERVER |
||||
allow_uploads = yes |
||||
|
||||
[User] |
||||
email = $EMAIL |
||||
_EOF |
||||
|
||||
PLAGUE_CLIENT_CONFIG=$PLAGUE_CONF plague-client build $NAME $SRPM $DIST |
||||
rm -f $SRPM $PLAGUE_CONF |
||||
fi |
||||
done |
@ -0,0 +1,12 @@ |
||||
#!/bin/bash |
||||
|
||||
set -e |
||||
|
||||
if [ ! -d ~/.ssh ]; then |
||||
mkdir ~/.ssh |
||||
chmod 700 ~/.ssh |
||||
ssh-keygen -t rsa -b 4096 -N "" -q -f ~/.ssh/id_rsa |
||||
ssh-keyscan localhost >> ~/.ssh/known_hosts |
||||
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys |
||||
chmod 600 ~/.ssh/authorized_keys |
||||
fi |
@ -0,0 +1,88 @@ |
||||
Summary: Plague buildsystem helper |
||||
Name: buildwatcher |
||||
Version: 0.0.8 |
||||
Release: 1.beta2 |
||||
Source0: %{name}-%{version}.tar.gz |
||||
BuildArch: noarch |
||||
License: MIT |
||||
Group: System |
||||
|
||||
Requires: openldap-clients |
||||
Requires: plague-client |
||||
Requires: plague |
||||
Requires: inotify-tools |
||||
%if 0%{?rhel} >= 7 |
||||
BuildRequires: systemd |
||||
%{?systemd_requires} |
||||
%endif |
||||
|
||||
%description |
||||
Provides a daemon which will watch a specified directory, and when an SRPM is moved |
||||
into this directory, it'll submit the build automatically to plague server |
||||
|
||||
%prep |
||||
%setup -q |
||||
|
||||
%build |
||||
|
||||
%install |
||||
|
||||
%{__rm} -rf $RPM_BUILD_ROOT |
||||
%{__install} -d -m 750 $RPM_BUILD_ROOT%{_bindir} |
||||
%{__install} -m 0755 bin/* $RPM_BUILD_ROOT%{_bindir} |
||||
%{__install} -d $RPM_BUILD_ROOT%{_sysconfdir}/%{name} |
||||
%{__install} -d $RPM_BUILD_ROOT%{_unitdir} |
||||
%{__install} -d $RPM_BUILD_ROOT%{_localstatedir}/lib/build/uploads |
||||
%{__install} -d $RPM_BUILD_ROOT%{_localstatedir}/lib/build/errors |
||||
%{__install} -d $RPM_BUILD_ROOT%{_localstatedir}/lib/build/work/srpm_upload_dir/ |
||||
%{__install} -m 0644 conf/* $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/ |
||||
%{__install} -m 0644 systemd/buildwatcher.service $RPM_BUILD_ROOT%{_unitdir} |
||||
|
||||
%clean |
||||
%{__rm} -rf $RPM_BUILD_ROOT |
||||
|
||||
%pre |
||||
# Add the "zabbix" user |
||||
/usr/sbin/useradd -c "Build watcher user" \ |
||||
-s /sbin/nologin -r -d %{_localstatedir}/lib/build/home buildwatcher 2> /dev/null || : |
||||
|
||||
%preun |
||||
%systemd_preun buildwatcher.service |
||||
|
||||
%post |
||||
|
||||
%systemd_post buildwatcher.service |
||||
|
||||
%files |
||||
%defattr(-,root,root,-) |
||||
%{_bindir}/* |
||||
%{_localstatedir}/lib/build/uploads |
||||
%{_localstatedir}/lib/build/errors |
||||
%attr(0775,root,buildwatcher) %{_localstatedir}/lib/build/work/srpm_upload_dir/ |
||||
%config(noreplace) %attr(0644,root,root) %{_sysconfdir}/%{name}/* |
||||
%{_unitdir}/*.service |
||||
|
||||
%changelog |
||||
* Sat Nov 11 2017 Daniel Berteaud <daniel@firewall-services.com> 0.0.8-1.beta2 |
||||
- FIx binary path in service unit (daniel@firewall-services.com) |
||||
|
||||
* Sat Nov 11 2017 Daniel Berteaud <daniel@firewall-services.com> 0.0.7-1.beta2 |
||||
- Add systemd BuildRequires |
||||
|
||||
* Sat Nov 11 2017 Daniel Berteaud <daniel@firewall-services.com> 0.0.6-1.beta2 |
||||
- Install systemd unit |
||||
|
||||
* Sat Nov 11 2017 Daniel Berteaud <daniel@firewall-services.com> 0.0.5-1.beta2 |
||||
- Requires ldap clients not servers |
||||
|
||||
* Sat Nov 11 2017 Daniel Berteaud <daniel@firewall-services.com> 0.0.4-1.beta2 |
||||
- Add simple systemd unit (daniel@firewall-services.com) |
||||
|
||||
* Thu Nov 09 2017 Daniel Berteaud <daniel@firewall-services.com> 0.0.3-1.beta2 |
||||
- Fix %files |
||||
|
||||
* Sat Nov 04 2017 Daniel Berteaud <daniel@firewall-services.com> 0.0.2-1.beta1 |
||||
- new package built with tito |
||||
|
||||
* Sat Nov 4 2017 Daniel Berteaud <daniel@firewall-services.com> - 0.0.1-1 |
||||
- Initial release |
@ -0,0 +1,5 @@ |
||||
TOP_DIR=/var/lib/build |
||||
LDAP_URI=ldap://directory.domain.com/ |
||||
LDAP_USER_BASE=ou=Users,dc=domain,dc=com |
||||
ADMIN_EMAIL=admin@domain.com |
||||
PLAGUE_SERVER=http://localhost:8887 |
@ -0,0 +1,11 @@ |
||||
[Unit] |
||||
Description=Monitor an upload dir and submit content to plague buildsys |
||||
|
||||
[Service] |
||||
Type=simple |
||||
ExecStart=/usr/bin/buildwatcher |
||||
ExecStartPre=/usr/bin/buildwatcher_ssh_setup |
||||
User=buildwatcher |
||||
|
||||
[Install] |
||||
WantedBy=multi-user.target |
Loading…
Reference in new issue