update_jdn.sh 6.38 KB
Newer Older
1
2
#!/bin/bash

3
# Copyright 2012-2014 Holger Levsen <holger@layer-acht.org>
4
5
# released under the GPLv=2

Holger Levsen's avatar
Holger Levsen committed
6
BASEDIR=/root/jenkins.debian.net
7
8
PVNAME=/dev/vdb      # LVM physical volume for jobs
VGNAME=jenkins01     # LVM volume group
Holger Levsen's avatar
Holger Levsen committed
9

Holger Levsen's avatar
Holger Levsen committed
10
11
explain() {
	echo
Holger Levsen's avatar
Holger Levsen committed
12
	echo $1
Holger Levsen's avatar
Holger Levsen committed
13
14
15
	echo
}

16
17
mkdir -p /srv/workspace

18
if ! grep -q '^tmpfs\s\+/srv/workspace\s' /etc/fstab; then
19
20
21
22
23
24
25
26
27
28
29
	echo "tmpfs		/srv/workspace	tmpfs	defaults,size=60g	0	0" >> /etc/fstab
fi

if ! mountpoint -q /srv/workspace; then
	if test -z "$(ls -A /srv/workspace)"; then
		mount /srv/workspace
	else
		echo "mountpoint /srv/workspace is non-empty"
	fi
fi

30
# make sure needed directories exists
31
for directory in  /srv/jenkins /schroots /srv/reproducible-results /srv/d-i ; do
32
33
34
35
36
37
	if [ ! -d $directory ] ; then
		sudo mkdir $directory
		sudo chown jenkins.jenkins $directory
	fi
done

38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
if ! test -h /chroots; then
	rmdir /chroots || rm -f /chroots # do not recurse
	if test -e /chroots; then
		echo could not clear /chroots
	else
		ln -s /srv/workspace/chroots /chroots
	fi
fi

if ! test -h /var/cache/pbuilder/build; then
	rmdir /var/cache/pbuilder/build || rm -f /var/cache/pbuilder/build
	if test -e /var/cache/pbuilder/build; then
		echo could not clear /var/cache/pbuilder/build
	else
		ln -s /srv/workspace/pbuilder /var/cache/pbuilder/build
	fi
fi

56
57
58
59
#
# install packages we need
# (more or less grouped into more-then-nice-to-have, needed-while-things-are-new, needed)
#
Holger Levsen's avatar
Holger Levsen committed
60
sudo apt-get install vim screen less etckeeper moreutils curl mtr-tiny dstat devscripts bash-completion shorewall shorewall6 cron-apt apt-listchanges munin munin-plugins-extra calamaris visitors procmail libjson-rpc-perl libfile-touch-perl zutils ip2host pigz \
Holger Levsen's avatar
Holger Levsen committed
61
	build-essential python-setuptools molly-guard \
62
	debootstrap sudo figlet graphviz apache2 python-yaml python-pip mr subversion subversion-tools vnstat poxml vncsnapshot imagemagick libav-tools python-twisted python-imaging gocr guestmount schroot sqlite3 dose-extra apt-file \
63
	unzip python-hachoir-metadata ghc python-rpy2 libsoap-lite-perl haveged postgresql-client-9.1
64
65
# debootstrap is affected by #766459 in wheezy
sudo apt-get install -t wheezy-backports qemu debootstrap
Holger Levsen's avatar
Holger Levsen committed
66
explain "Packages installed."
67
68
69
70

#
# deploy package configuration in /etc
#
Holger Levsen's avatar
Holger Levsen committed
71
cd $BASEDIR
72
sudo cp -r etc/* /etc
73
74
75
76
77
78
79

#
# more configuration than a simple cp can do
#
if [ ! -e /etc/apache2/mods-enabled/proxy.load ] ; then
	sudo a2enmod proxy
	sudo a2enmod proxy_http
80
	sudo a2enmod rewrite
Holger Levsen's avatar
use SSL    
Holger Levsen committed
81
	sudo a2enmod ssl
82
	sudo a2enmod headers
83
84
85
86
fi
sudo chown root.root /etc/sudoers.d/jenkins ; sudo chmod 700 /etc/sudoers.d/jenkins
sudo ln -sf /etc/apache2/sites-available/jenkins.debian.net /etc/apache2/sites-enabled/000-default
sudo service apache2 reload
87
cd /etc/munin/plugins ; sudo rm -f postfix_* open_inodes df_inode interrupts irqstats threads proc_pri vmstat if_err_eth0 fw_forwarded_local fw_packets forks open_files users 2>/dev/null
Holger Levsen's avatar
Holger Levsen committed
88
[ -L apache_accesses ] || for i in apache_accesses apache_volume ; do ln -s /usr/share/munin/plugins/$i $i ; done
Holger Levsen's avatar
Holger Levsen committed
89
explain "Packages configured."
Helmut Grohne's avatar
Helmut Grohne committed
90
sudo service munin-node force-reload
Holger Levsen's avatar
Holger Levsen committed
91
92
93
94

#
# install the heart of jenkins.debian.net
#
Holger Levsen's avatar
Holger Levsen committed
95
cd $BASEDIR
Holger Levsen's avatar
Holger Levsen committed
96
cp -r bin logparse job-cfg /srv/jenkins/
97
cp procmailrc /var/lib/jenkins/.procmailrc
Holger Levsen's avatar
Holger Levsen committed
98
explain "Jenkins updated."
Holger Levsen's avatar
Holger Levsen committed
99
100
cp -pr README INSTALL TODO d-i-preseed-cfgs /var/lib/jenkins/userContent/
cp -pr userContent /var/lib/jenkins/
101
cd /var/lib/jenkins/userContent/
102
ASCIIDOC_PARAMS="-a numbered -a data-uri -a iconsdir=/etc/asciidoc/images/icons -a scriptsdir=/etc/asciidoc/javascripts -b html5 -a toc -a toclevels=4 -a icons -a stylesheet=$(pwd)/theme/debian-asciidoc.css"
Holger Levsen's avatar
Holger Levsen committed
103
104
105
[ about.html -nt README ] || asciidoc $ASCIIDOC_PARAMS -o about.html README
[ todo.html -nt TODO ] || asciidoc $ASCIIDOC_PARAMS -o todo.html TODO
[ setup.html -nt INSTALL ] || asciidoc $ASCIIDOC_PARAMS -o setup.html INSTALL
106
rm TODO README INSTALL
Holger Levsen's avatar
Holger Levsen committed
107
chown -R jenkins.jenkins /var/lib/jenkins/userContent
Holger Levsen's avatar
Holger Levsen committed
108
explain "Updated user content for Jenkins."
109

110
111
112
113
#
# run jenkins-job-builder to update jobs if needed
#     (using sudo because /etc/jenkins_jobs is root:root 700)
#
114
cd /srv/jenkins/job-cfg
115
116
117
for metaconfig in *.yaml.py ; do
	python $metaconfig > ${metaconfig%.py}
done
118
119
120
for config in *.yaml ; do
	sudo jenkins-jobs update $config
done
Holger Levsen's avatar
Holger Levsen committed
121
explain "Jenkins jobs updated."
122

123
124
125
#
# crappy tests for checking that jenkins-job-builder works correctly
#
Holger Levsen's avatar
Holger Levsen committed
126
#wc -m counts one byte too many, so we substract one
127
let DEFINED_MY_TRIGGERS=$(grep my_trigger: *.yaml|wc -l)+$(grep my_trigger: *.yaml|grep , |xargs -r echo | sed 's/[^,]//g'| wc -m)-1
Holger Levsen's avatar
Holger Levsen committed
128
DEFINED_DI_TRIGGERS=$(grep "defaults: d-i-manual-html" d-i.yaml|wc -l)
129
#DEFINED_REPRODUCIBLE_TRIGGERS=$(grep "^    defaults: reproducible$" reproducible.yaml|wc -l)
Holger Levsen's avatar
Holger Levsen committed
130
let DEFINED_TRIGGERS=DEFINED_MY_TRIGGERS+DEFINED_DI_TRIGGERS
131
#let DEFINED_TRIGGERS=DEFINED_TRIGGERS+DEFINED_REPRODUCIBLE_TRIGGERS
132
let CONFIGURED_TRIGGERS=$(grep \<childProjects /var/lib/jenkins/jobs/*/config.xml|wc -l)+$(grep  \<childProjects /var/lib/jenkins/jobs/*/config.xml |grep , |xargs -r echo | sed 's/[^,]//g'| wc -m)-1
133
if [ "$DEFINED_TRIGGERS" != "$CONFIGURED_TRIGGERS" ] ; then
Holger Levsen's avatar
Holger Levsen committed
134
	figlet -f banner Warning
Holger Levsen's avatar
Holger Levsen committed
135
	explain "Number of defined triggers ($DEFINED_TRIGGERS) differs from currently configured triggers ($CONFIGURED_TRIGGERS), please investigate."
136
137
fi

138
#
Holger Levsen's avatar
Holger Levsen committed
139
# configure git for jenkins
140
#
Holger Levsen's avatar
Holger Levsen committed
141
142
143
144
if [ "$(sudo su - jenkins -c 'git config --get user.email')" != "jenkins@jenkins.debian.net" ] ; then
	sudo su - jenkins -c "git config --global user.email jenkins@jenkins.debian.net"
	sudo su - jenkins -c "git config --global user.name Jenkins"
fi
Holger Levsen's avatar
Holger Levsen committed
145
146
#
# FIXME: file a bug against pbuilder
Holger Levsen's avatar
Holger Levsen committed
147
148
#	else you have https://jenkins.debian.net/view/debian-installer/job/d-i_build_partman-ext3/4/console
#	with this you have: https://jenkins.debian.net/view/debian-installer/job/d-i_build_partman-ext3/5/console
Holger Levsen's avatar
Holger Levsen committed
149
150
151
152
#	and this asks for a password: pdebuild --use-pdebuild-internal --pbuilder '/sbin/sudo /usr/sbin/pbuilder'
#	despites the jenkins user cam run "sudo pbuilder" without it just fine...??!
#
sudo chown jenkins /var/cache/pbuilder/result
153
154
155

#
# There's always some work left...
Holger Levsen's avatar
Holger Levsen committed
156
#	echo FIXME is ignored so check-jobs scripts can output templates requiring manual work
157
158
#
echo
Holger Levsen's avatar
Holger Levsen committed
159
rgrep FIXME $BASEDIR/* | grep -v "rgrep FIXME" | grep -v echo
160

161
162
163
164
#
# creating LVM volume group for jobs
#
if [ "$PVNAME" = "" ]; then
Holger Levsen's avatar
Holger Levsen committed
165
    figlet -f banner Error
166
167
168
169
170
    explain "Set \$PVNAME to physical volume pathname."
    exit 1
else
    if ! sudo pvs $PVNAME >/dev/null 2>&1; then
        sudo pvcreate $PVNAME
Gabriele Giacone's avatar
Gabriele Giacone committed
171
172
    fi
    if ! sudo vgs $VGNAME >/dev/null 2>&1; then
173
174
175
        sudo vgcreate $VGNAME $PVNAME
    fi
fi