ReferencePlatforms/Linux-CentOS-5.0: Difference between revisions
(136 intermediate revisions by 15 users not shown) | |||
Line 1: | Line 1: | ||
This procedure will re-create the CentOS 5.0-based reference VM image. | This procedure will re-create the CentOS 5.0-based reference VM image. Internally, this VM is named '''CentOS-5.0-ref-tools-vm'''. | ||
== Install CentOS 5.0 from CDs == | = Things Done For You = | ||
== Version 2 == | |||
=== Install CentOS 5.0 from CDs === | |||
f749d7e17fa01604b9956304efba2333 CentOS-5.0-i386-bin-1of6.iso | f749d7e17fa01604b9956304efba2333 CentOS-5.0-i386-bin-1of6.iso | ||
Line 10: | Line 12: | ||
9e6f91a5292f46b02777133765fc03fe CentOS-5.0-i386-bin-6of6.iso | 9e6f91a5292f46b02777133765fc03fe CentOS-5.0-i386-bin-6of6.iso | ||
TB: Thunderbird build clients use a separate /buildbot partition of 80GB. Now that we reboot after each build, be sure to "tune2fs -c 0" the buildbot partition to avoid an fsck of it every 20 reboots. | |||
= Package Selection = | === Package Selection === | ||
'''The Easy Way''': the installer kickstart file. | '''The Easy Way''': the [https://bugzilla.mozilla.org/attachment.cgi?id=306233 installer kickstart] file (stored in internal repo). | ||
'''The Hard Way''': | '''The Hard Way''': | ||
Line 23: | Line 26: | ||
* '''Applications''' | * '''Applications''' | ||
** Editors | ** Editors | ||
** | ** Text-based internet | ||
*** Add lynx | *** Add lynx | ||
* '''Development''' | * '''Development''' | ||
Line 37: | Line 40: | ||
** Turn ''on'' System Tools | ** Turn ''on'' System Tools | ||
== Some Sys-prepping | === Some Sys-prepping === | ||
We have some scripts that do some of this: [https://bugzilla.mozilla.org/attachment.cgi?id=306232 root], [https://bugzilla.mozilla.org/attachment.cgi?id=306231 cltbld] | |||
On first boot, CentOS will ask some questions: | |||
* Turn the firewall off (we run our build machines on their own network, behind a firewall) | |||
* Disable SELinux | |||
* Enable NTP | |||
# Login; install VMwareTools-3.0.1-32039.rpm | # Login; install VMwareTools-3.0.1-32039.rpm | ||
# vmware-config-tools.pl | # vmware-config-tools.pl | ||
# add clock=pit | # add clock=pit and vdso=no lines to /boot/grub/grub.conf | ||
# turn on syncTime in VMware config | # turn on syncTime in VMware config | ||
# for s in auditd avahi-daemon acpid bluetooth cpuspeed hplip hidd mcstrans pcscd ntpd cups cups-config-daemon mdmonitor openibd smartd pcmcia isdn atd gpm anacron autofs apmd kudzu yum-updated; do chkconfig $s off; done | # for s in auditd avahi-daemon acpid bluetooth cpuspeed hplip hidd mcstrans pcscd ntpd cups cups-config-daemon mdmonitor openibd smartd pcmcia isdn atd gpm anacron autofs apmd kudzu yum-updated; do chkconfig $s off; done | ||
Line 55: | Line 66: | ||
export TBOX_CLIENT_CVS_DIR="/builds/tinderbox/mozilla/tools" | export TBOX_CLIENT_CVS_DIR="/builds/tinderbox/mozilla/tools" | ||
== Install Sun Java JDK == | === Install Sun Java JDK === | ||
Note: we should archive this binary somewhere | Note: we should archive this binary somewhere | ||
Line 73: | Line 84: | ||
ln -s jdk1.5.0_10/ jdk | ln -s jdk1.5.0_10/ jdk | ||
== Make GCC 4.1 (redhat branch) == | === Make GCC 4.1 (redhat branch) === | ||
md5sum gcc-4.1.1-30.src.rpm | md5sum gcc-4.1.1-30.src.rpm | ||
# 555b8cb95d3d7d851b2ebd5c3cec7837 | # 555b8cb95d3d7d851b2ebd5c3cec7837 | ||
Line 86: | Line 96: | ||
make install 2>&1 | tee ../gcc-4.1.1-make_install.log | make install 2>&1 | tee ../gcc-4.1.1-make_install.log | ||
= Build Python 2.5 = | === Build Python 2.5.1 === | ||
(Some VMs use Python 2.5 or Python 2.4.4 but this is what is on the ref platform.) | |||
wget http:// | wget http://python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2 | ||
tar xfvj dist/Python-2.5.1.tar.bz2 | |||
cd Python-2.5.1/ | |||
tar xfvj dist/Python-2.5.tar.bz2 | ./configure --prefix=/tools/python-2.5.1 2>&1 | tee /tools/dist/logs/python2.5.1-configure.log | ||
cd Python-2.5/ | make 2>&1 | tee /tools/dist/logs/python2.5.1-make.log | ||
./configure --prefix=/tools/python-2.5. | make install 2>&1 | tee /tools/dist/logs/python2.5.1-make_install.log | ||
make 2>&1 | tee /tools/dist/logs/python2.5. | |||
make install 2>&1 | tee /tools/dist/logs/python2.5. | |||
cd /tools/ | cd /tools/ | ||
ln -s python2.5.0/ python | ln -s python-2.5.1 python | ||
== Version 3 == | |||
=== Make directories === | |||
mkdir -p /tools/dist/logs | |||
mkdir -p /builds/logs | |||
=== Initial Setup Steps === | |||
export PYTHONHOME="/tools/python" | |||
export PATH="/tools/python/bin:$PATH" | |||
=== Installing Zope Interface === | |||
cd /tools/dist/ | |||
wget http://www.zope.org/Products/ZopeInterface/3.3.0/zope.interface-3.3.0.tar.gz | |||
tar xfvz zope.interface-3.3.0.tar.gz | |||
cd zope.interface-3.3.0/ | |||
python setup.py install --prefix=/tools/zope-interface-3.3.0 | |||
cd /tools; ln -s zope-interface-3.3.0 zope-interface | |||
export PYTHONPATH="/tools/zope-interface/lib/python2.5/site-packages:$PYTHONPATH" | |||
=== Installing Twisted === | |||
cd /tools/dist/ | |||
wget http://tmrc.mit.edu/mirror/twisted/Twisted/2.4/TwistedCore-2.4.0.tar.bz2 | |||
wget http://tmrc.mit.edu/mirror/twisted/Twisted/2.4/Twisted-2.4.0.tar.bz2 | |||
tar xfvj TwistedCore-2.4.0.tar.bz2 | |||
tar xfvj Twisted-2.4.0.tar.bz2 | |||
cd TwistedCore-2.4.0 | |||
python setup.py install --prefix=/tools/twisted-core-2.4.0 | |||
pushd /tools/; ln -s twisted-core-2.4.0 twisted-core; popd | |||
export PYTHONPATH="/tools/twisted-core/lib/python2.5/site-packages:$PYTHONPATH" | |||
cd /tools/dist/Twisted-2.4.0/ | |||
python setup.py install --prefix=/tools/twisted-2.4.0 | |||
cd /tools; ln -s twisted-2.4.0 twisted | |||
export PYTHONPATH="/tools/twisted/lib/python2.5/site-packages/:$PYTHONPATH" | |||
== Version 4 == | |||
=== Installing Mercurial === | |||
wget http://www.selenic.com/mercurial/release/mercurial-0.9.5.tar.gz | |||
tar -zvxf mercurial-0.9.5.tar.gz | |||
cd mercurial-0.9.5 | |||
export PYTHONHOME="/tools/python" | |||
export PATH="/tools/python/bin:$PATH" | |||
python setup.py install | |||
=== Installing Scratchbox === | |||
As root:<br /> | |||
wget http://repository.maemo.org/stable/chinook/maemo-scratchbox-install_4.0.1.sh | |||
chmod a+x ./maemo-scratchbox-install_4.0.1.sh | |||
./maemo-scratchbox-install_4.0.1.sh -s /scratchbox | |||
/scratchbox/sbin/sbox_adduser cltbld yes | |||
As cltbld:<br /> | |||
Comment out the PYTHONHOME and PATH entries in ~/.bash_profile. | |||
source ~/.bash_profile | |||
wget http://tablets-dev.nokia.com/chinook/maemo-sdk-install_4.0.1.sh | |||
chmod +x maemo-sdk-install_4.0.1.sh | |||
bash maemo-sdk-install_4.0.1.sh | |||
/scratchbox/login | |||
wget http://ftp.gnome.org/pub/gnome/sources/libIDL/0.8/libIDL-0.8.9.tar.gz | |||
tar -xzvf libIDL-0.8.9.tar.gz | |||
cd libIDL-0.8.9 | |||
./configure --prefix=/usr | |||
make | |||
make install | |||
Remove the comments from the PYTHONHOME and PATH entries in ~/.bash_profile and source it again. | |||
=== Installing Nagios NRPE Daemon === | |||
wget http://dag.wieers.com/rpm/packages/nagios-plugins/nagios-plugins-1.4.9-1.el5.rf.i386.rpm | |||
wget http://dag.wieers.com/rpm/packages/nagios-nrpe/nagios-nrpe-2.5.2-1.el5.rf.i386.rpm | |||
wget http://dag.wieers.com/rpm/packages/nagios-nrpe/nagios-plugins-nrpe-2.5.2-1.el5.rf.i386.rpm | |||
rpm --nodeps -i *.rpm | |||
chkconfig --level 235 nrpe on | |||
# todo: make sure this is right after configs get checked in | |||
cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -d nagios mozilla/tools/nagios | |||
mv nagios/nrpe-linux.cfg /etc/nagios/nrpe.cfg | |||
=== ''Installing Autoconf 2.13'' === | |||
{{bug|433492}} added autoconf 2.13 on 30/June/2008, which puts it somewhere between version 4 and 5. | |||
sudo yum install autoconf213 | |||
== Version 5 == | |||
=== Fixup Scratchbox Install === | |||
On Centos5, need to make the following changes to sysctl.conf | |||
<code><pre> | |||
$ su | |||
# vi /etc/sysctl.conf | |||
...and append | |||
vm.vdso_enabled = 0 | |||
vm.mmap_min_addr = 4096 | |||
# | |||
# /sbin/sysctl -p | |||
... | |||
vm.vdso_enabled = 0 | |||
vm.mmap_min_addr = 4096 | |||
# exit | |||
</pre> | |||
</code> | |||
...there is no need to reboot. | |||
<code><pre> | |||
su - | |||
cd ~ | |||
wget http://scratchbox.org/download/files/sbox-releases/stable/tarball/scratchbox-toolchain-cs2007q3-glibc2.5-arm6-1.0.7-3-i386.tar.gz | |||
wget http://scratchbox.org/download/files/sbox-releases/stable/tarball/scratchbox-devkit-cputransp-1.0.7-i386.tar.gz | |||
cd / | |||
tar zxvf ~/scratchbox-toolchain-cs2007q3-glibc2.5-arm6-1.0.7-3-i386.tar.gz | |||
tar zxvf ~/scratchbox-devkit-cputransp-1.0.7-i386.tar.gz | |||
cd /scratchbox | |||
wget https://bugzilla.mozilla.org/attachment.cgi?id=334232 | |||
chmod a+x moz_scratchbox | |||
cd /scratchbox/etc | |||
mv resolv.conf resolv.conf.orig | |||
cp /etc/resolv.conf . | |||
# exit from running as root, now back to cltbld account. | |||
/scratchbox/moz_scratchbox | |||
sb-conf setup CHINOOK-ARMEL-2007 -c cs2007q3-glibc2.5-arm6 -d cputransp:debian-etch:doctools:maemo3-tools:perl -t /scratchbox/devkits/cputransp/bin/qemu-arm-cvs-m | |||
sb-conf rootstrap CHINOOK-ARMEL-2007 http://repository.maemo.org/stable/4.0.1/armel/maemo-sdk-rootstrap_4.0.1_armel.tgz | |||
sb-conf install CHINOOK-ARMEL-2007 -cedFGS | |||
sb-conf select CHINOOK-ARMEL-2007 | |||
exit | |||
wget http://repository.maemo.org/stable/chinook/maemo-sdk-nokia-binaries_4.0.1.sh | |||
chmod +x maemo-sdk-nokia-binaries_4.0.1.sh | |||
## following line failed out with permission errors | |||
## sh ./maemo-sdk-nokia-binaries_4.0.1.sh | |||
## so did the following instead: | |||
$ su - | |||
# cd /scratchbox | |||
# sh /home/cltbld/maemo-sdk-nokia-binaries_4.0.1.sh | |||
</pre></code> | |||
Note: you'll have to space/more to the end of the EULA, and then enter 'I accept' | |||
<code><pre> | |||
/scratchbox/login | |||
wget http://people.mozilla.com/~vladimir/misc/execstack.armel | |||
chmod a+x execstack.armel | |||
fakeroot mv execstack.armel /usr/bin/execstack | |||
execstack -c `find /lib/ -name \*.so.\* -type f` | |||
execstack -c `find /usr/lib/ -name \*.so.\* -type f` | |||
fakeroot echo "deb http://repository.maemo.org/extras-devel chinook free non-free" >> /etc/apt/sources.list | |||
fakeroot echo "deb file:/home/$USER/maemo-sdk-nokia-binaries_4.0.1 chinook explicit" >> /etc/apt/sources.list | |||
fakeroot apt-get update | |||
fakeroot apt-get install libgtk2.0-dev libxaw7-dev libfreetype6-dev libxi-dev libhildonmime-dev libosso-dev libidl-dev liblocation-dev libasound2-dev | |||
exit | |||
</pre></code> | |||
=== Path Setup === | |||
Add the appropriate paths to the cltbld user's .bash_profile | |||
export PYTHONHOME="/tools/python" | |||
export PYTHONPATH="/tools/buildbotcustom:/tools/buildbot/lib/python2.5/site-packages:/tools/twisted/lib/python2.5/site-packages:/tools/twisted-core/lib/python2.5/site-packages:/tools/zope-interface/lib/python2.5/site-packages/" | |||
export PATH="/opt/local/bin:/tools/buildbot/bin:/tools/twisted/bin:/tools/twisted-core/bin:$PYTHONHOME/bin:$PATH" | |||
=== Compiler Setup === | |||
Symlink gcc-4.1.1 to gcc in /tools: | |||
cd /tools | |||
ln -s gcc-4.1.1 gcc | |||
== Version 6 == | |||
=== Move scratchbox === | |||
You should have a /builds drive added to the VM before completing this section. | |||
All of this should be run as root. | |||
Move scratchbox off root partition. Scratchbox takes up a non-trivial amount of space and should be moved to a different partition. | |||
<code><pre> | |||
# as root | |||
/etc/init.d/sbox stop | |||
umount /scratchbox/users/cltbld/dev/* | |||
umount /scratchbox/users/cltbld/* | |||
mv /scratchbox /builds/scratchbox | |||
# scratchbox needs this symlink to function properly | |||
# | |||
ln -s /builds/scratchbox /scratchbox | |||
/etc/init.d/sbox start | |||
</pre></code> | |||
To verify that scratchbox is working, do: | |||
<code><pre> | |||
$ moz_scratchbox | |||
> ls | |||
... | |||
> exit | |||
$ | |||
</pre></code> | |||
== Version 7 == | |||
20090112 16:30 PST | |||
=== metacity / Xvfb crontabs === | |||
Add the following to cltbld's crontab: | |||
<pre> | |||
# Make sure Xvfb is running on :2 | |||
@reboot ps -C Xvfb | grep -q Xvfb || exec Xvfb :2 -screen 0 1280x1024x24 & | |||
*/5 * * * * ps -C Xvfb | grep -q Xvfb || exec Xvfb :2 -screen 0 1280x1024x24 & | |||
# Make sure metacity is running on :2 | |||
@reboot ps -C metacity -f | grep -q :2 || exec metacity --display :2 --replace & | |||
*/5 * * * * ps -C metacity -f | grep -q :2 || exec metacity --display :2 --replace & | |||
</pre> | |||
== Version 8 == | |||
20090122 9:30 PST | |||
=== upgraded mercurial to 1.1.2 === | |||
Updating to newer mercurial version using this script: | |||
<pre> | |||
#!/bin/sh | |||
pushd /tools | |||
wget http://www.selenic.com/mercurial/release/mercurial-1.1.2.tar.gz | |||
tar -zxvf mercurial-1.1.2.tar.gz | |||
cd mercurial-1.1.2 | |||
export PYTHONHOME="/tools/python" | |||
export PATH="/tools/python/bin:$PATH" | |||
python setup.py install | |||
rm -rf /tools/mercurial-1.1.2* | |||
echo "Hg update complete" | |||
</pre> | |||
== Version 9 == | |||
20090128 18:15 PST | |||
=== install libnotify-devel rpm === | |||
If yum-utils are not installed yet, do the following: | |||
wget http://vault.centos.org/5.1/os/i386/CentOS/yum-utils-1.0.4-3.el5.centos.2.noarch.rpm | |||
rpm -ivh yum-utils-1.0.4-3.el5.centos.2.noarch.rpm | |||
Developer requested devel package for libnotify {{bug|473831}} | |||
# root | |||
yumdownloader libnotify-devel-0.4.2-6.el5 | |||
rpm -ivh libnotify-devel-0.4.2-6.el5.i386.rpm | |||
yum list installed | grep libnotify | |||
libnotify.i386 0.4.2-6.el5 installed | |||
libnotify-devel.i386 0.4.2-6.el5 installed | |||
== Version 10 == | |||
=== Buildbot init scripts === | |||
cd /builds | |||
mkdir slave | |||
su - | |||
cd /etc/default | |||
wget -Obuildbot https://bugzilla.mozilla.org/attachment.cgi?id=359078 | |||
cd /etc/init.d | |||
wget -Obuildbot https://bugzilla.mozilla.org/attachment.cgi?id=359080 | |||
chmod +x buildbot | |||
chkconfig --add buildbot | |||
/etc/init.d/buildbot start | |||
sudo -e /etc/sudoers | |||
# Add 'cltbld ALL=NOPASSWD: /usr/bin/reboot' as the last line, save and exit | |||
=== Update scratchbox mercurial and python === | |||
First, fix the DNS in scratchbox. | |||
cp /etc/resolv.conf /scratchbox/users/cltbld/targets/CHINOOK_X86/etc/resolv.conf | |||
cp /etc/resolv.conf /scratchbox/users/cltbld/targets/CHINOOK_ARMEL/etc/resolv.conf | |||
cp /etc/resolv.conf /scratchbox/users/cltbld/targets/CHINOOK-ARMEL-2007/etc/resolv.conf | |||
Allow cltbld to write to the tool areas | |||
su - | |||
chown -R cltbld /scratchbox/devkits/maemo3-tools | |||
exit | |||
Initial setup | |||
/scratchbox/moz_scratchbox | |||
wget http://people.mozilla.org/~asasaki/mercurial-1.1.2.tar.gz | |||
tar zxvf mercurial-1.1.2.tar.gz | |||
echo 'export PYTHONPATH=/usr/lib/python2.5/site-packages:$PYTHONPATH' >> .bashrc | |||
Do the following for CHINOOK_X86, while still running <tt>/scratchbox/moz_scratchbox</tt>: | |||
sb-conf select CHINOOK_X86 | |||
echo 'deb http://repository.maemo.org/extras/ bora free' >> /etc/apt/sources.list | |||
apt-get update | |||
yes | apt-get install python2.5 python2.5-dev python2.5-xml | |||
cd /usr/bin | |||
rm python; ln -s python2.5 python | |||
cd ~/mercurial-1.1.2 | |||
python2.5 setup.py install | |||
cd /scratchbox/devkits/maemo3-tools/bin | |||
mv hg hg.old | |||
mv hgmerge hgmerge.old | |||
ln -s /usr/bin/hg . | |||
hg --version | |||
The <tt>hg --version</tt> should give you no errors. | |||
Repeat for CHINOOK_ARMEL... but I was unsuccessful getting hg 1.1.2 installed/working there. | |||
sb-conf select CHINOOK_ARMEL | |||
echo 'deb http://repository.maemo.org/extras/ bora free' >> /etc/apt/sources.list | |||
apt-get update | |||
yes | apt-get install python2.5 python2.5-dev python2.5-xml | |||
cd /usr/bin | |||
rm python; ln -s python2.5 python | |||
Repeat for CHINOOK-ARMEL-2007. | |||
sb-conf select CHINOOK-ARMEL-2007 | |||
echo 'deb http://repository.maemo.org/extras/ bora free' >> /etc/apt/sources.list | |||
apt-get update | |||
yes | apt-get install python2.5 python2.5-dev python2.5-xml | |||
cd /usr/bin | |||
rm python; ln -s python2.5 python | |||
cd ~/mercurial-1.1.2 | |||
python2.5 setup.py install | |||
cd | |||
hg --version | |||
rm -rf mercurial-1.1.2* | |||
== Version 11 == | |||
=== ESD Wrapper script === | |||
Because of {{bug|469635}} we need to wrap the esd binary to toss out stderr. | |||
cd /usr/bin | |||
mv esd esd.real | |||
wget -Oesd https://bug469635.bugzilla.mozilla.org/attachment.cgi?id=363722 | |||
chmod +x esd | |||
== Version 12 == | |||
=== Install libxdamage-dev and libxcomposite-dev in Scratchbox === | |||
/scratchbox/moz_scratchbox | |||
sb-conf select CHINOOK_X86 | |||
apt-get install --force-yes -y libxdamage-dev libxcomposite-dev | |||
sb-conf select CHINOOK_ARMEL | |||
apt-get install --force-yes -y libxdamage-dev libxcomposite-dev | |||
sb-conf select CHINOOK-ARMEL-2007 | |||
apt-get install --force-yes -y libxdamage-dev libxcomposite-dev | |||
== Version 13 == | |||
=== Install libhildon1-dev to scratchbox === | |||
/scratchbox/moz_scratchbox | |||
apt-get install --force-yes -y libhildon1-dev | |||
== Version 14 == | |||
=== Disable Xvnc and some cronjobs === | |||
The updatedb cronjob manages the 'locate' database, which we do not use, and causes increased load every night at 4am PDT. The 'prelink' cronjob prelinks binaries for faster loading. This probably doesn't help build times in any significant way because we call the same binaries over and over during the build process. The Xvnc session is totally unused. To disable them, do the following: | |||
# as root | |||
chkconfig vncserver off | |||
cd /etc/cron.daily | |||
mv mlocate.cron ~/ | |||
mv prelink ~/ | |||
== Version 15 == | |||
=== Install code coverage tools === | |||
Installed lcov from http://downloads.sourceforge.net/ltp/lcov-1.7-1.noarch.rpm | |||
# as root | |||
wget http://downloads.sourceforge.net/ltp/lcov-1.7-1.noarch.rpm | |||
rpm -i lcov-1.7-1.noarch.rpm | |||
Copied genhtml and geninfo from /usr/bin into /usr/local/bin, and replaced all instances of 'die' with 'print' | |||
# as root | |||
cp /usr/bin/genhtml /usr/bin/geninfo /usr/local/bin | |||
sed -i 's,die,print,g' /usr/local/bin/genhtml | |||
sed -i 's,die,print,g' /usr/local/bin/geninfo | |||
Install jscoverage into /usr/local/bin | |||
# as root | |||
wget http://siliconforks.com/jscoverage/download/jscoverage-0.4.tar.bz2 | |||
tar jxf jscoverage-0.4.tar.bz2 | |||
cd jscoverage-0.4 | |||
./configure | |||
make | |||
cp jscoverage jscoverage-server /usr/local/bin | |||
== Version 16 == | |||
=== Install wireless tools === | |||
As root, | |||
yum -y install wireless-tools-devel | |||
== Version 17 == | |||
=== Add noatime option === | |||
Edit /etc/fstab so that the mount options for / and /builds are 'defaults,noatime'. | |||
You don't have to reboot for these changes to take effect, instead you can do, | |||
mount / -o remount,noatime | |||
mount /builds -o remount,noatime | |||
== Version 18 == | |||
=== Install libnotify for scratchbox === | |||
/scratchbox/moz_scratchbox | |||
apt-get install --force-yes -y libnotify-dev | |||
== Version 19 == | |||
=== Fix scratchbox wireless devel === | |||
/scratchbox/moz_scratchbox -p 'apt-get install --force-yes -y libiw-dev' | |||
== Version 20 == | |||
=== Install Puppet === | |||
==== Install EPEL ==== | |||
As root, | |||
rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm | |||
==== Move the JDK ==== | |||
To make the Puppet manifests a bit easier to manage we need to move the JDK to be in the same format as the other tools dirs (/tools/$name-$version): | |||
# as root | |||
cd /tools | |||
mv jdk1.5.0_10 jdk-1.5.0_10 | |||
rm -f jdk | |||
ln -s jdk-1.5.0_10 jdk | |||
==== Mount the file share ==== | |||
Mount the puppet-files directory by adding an entry to fstab: | |||
# IP is 10.2.71.136 for regular build slaves and 10.2.76.136 for try | |||
$IP:/export/buildlogs/puppet-files /N nfs ro 0 0 | |||
And then run, | |||
mkdir /N | |||
mount -a | |||
to mount it. | |||
==== Install Puppet ==== | |||
yum install ruby facter puppet ruby-shadow augeas-libs ruby-augeas | |||
Now, we need to run puppet once and sign its cert on the puppetmaster | |||
# On the client | |||
# $hostname == staging-puppet or production-puppet | |||
puppetd --test --server $hostname.build.mozilla.org | |||
You should get a message like "notice: Set to run 'one time'; exiting with no certificate". Sign it on the puppetmaster as follows: | |||
# root @ staging-puppet or production-puppet | |||
puppetca --sign $hostname.build.mozilla.org | |||
Setup the sysconfig file: | |||
* Open /etc/sysconfig/puppet in an editor | |||
* replace 'puppet' with production-puppet.build.mozilla.org | |||
== Post-puppet packages == | |||
Since the deployment of Puppet, future changes to the ref platform are management by it. Because of this, providing _exact_ installation instructions can be tricky. All of the packages listed below are installed on the ref platform and some installation guidelines are provided. Looking at [http://hg.mozilla.org/build/puppet-manifests the puppet-manifests repository] may help if you are having trouble. | |||
=== jscoverage === | |||
* Build from revision 453 of [http://svn.siliconforks.com/jscoverage/trunk/ the jscoverage SVN repository] | |||
* 'jscoverage' and 'jscoverage-server' binaries installed to /usr/local/bin | |||
=== GCC 4.3.3 === | |||
GCC 4.3.3 was installed alongside the other GCC for use on newer branches: | |||
* Get http://ftp.gnu.org/gnu/gcc/gcc-4.3.3/gcc-4.3.3.tar.bz2 and unpack it to /tools/gcc-4.3.3/source | |||
* Pull the patch series from http://hg.mozilla.org/users/tglek_mozilla.com/gcc-moz-plugin-mq/ | |||
* Apply the following patches to the GCC sources using git-apply (patch -p1 will probably work as well): | |||
** gty.diff | |||
** plugin.diff | |||
** parm_attrs.diff | |||
** c_process_decl.diff | |||
* mkdir /tools/gcc-4.3.3/build | |||
* cd /tools/gcc-4.3.3/build | |||
* /tools/gcc-4.3.3/source/configure --prefix=/tools/gcc-4.3.3/installed --enable-__cxa_atexit --enable-languages=c,c++ | |||
* make install | |||
* The static analysis will require all of /tools/gcc-4.3.3 including the source/build/installed subdirectories | |||
=== libhildonfm2-dev === | |||
Installed inside of scratchbox with the following command: | |||
su - cltbld -c '/scratchbox/moz_scratchbox -p apt-get --yes --force-yes install libhildonfm2-dev | |||
=== libconic0-dev === | |||
Installed inside of scratchbox with the following command: | |||
su - cltbld -c '/scratchbox/moz_scratchbox -p apt-get --yes --force-yes install libconic0-dev' | |||
=== access keys from within scratchbox === | |||
/bin/mount --bind /scratchbox/users/cltbld/home/cltbld/.ssh /home/cltbld/.ssh/ | |||
=== Upgrade Scratchbox === | |||
Roughly, the Scratchbox upgrade was done with the following set of commands: | |||
su - | |||
unset PYTHONHOME | |||
unset PYTHONPATH | |||
export PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/cltbld/bin | |||
umount /home/cltbld/.ssh #until no longer mounted | |||
umount /builds/slave #might not be mounted | |||
/scratchbox/sbin/sbox stop | |||
/scratchbox/sbin/sbox_umount_all | |||
sh maemo-scratchbox-install_5.0.sh -U -s /scratchbox | |||
/etc/init.d/sbox start | |||
exit | |||
sh maemo-sdk-install_5.0.sh -y -d -s /scratchbox | |||
/scratchbox/login | |||
echo deb http://repository.maemo.org/fremantle/<token> nokia-binaries >> /etc/apt/sources.list | |||
fakeroot apt-get install autoconf2.13 libnotify-dev libIDL-dev libqt4-dev | |||
exit | |||
/scratchbox/moz_scratchbox | |||
sb-conf select FREMANTLE_ARMEL | |||
wget http://www.python.org/ftp/python/2.5.5/Python-2.5.5.tar.bz2 | |||
tar jxf Python-2.5.5.tar.bz2 | |||
cd Python-2.5.5 | |||
CC='host-gcc' --prefix=/usr/local | |||
make -j4 | |||
/scratchbox/moz_scratchbox | |||
openssl md5 openssl-0.9.8m.tar.gz Python-2.5.5.tar.bz2 | |||
#MD5(openssl-0.9.8m.tar.gz)= 898bf125370926d5f692a2201124f8ec | |||
#MD5(Python-2.5.5.tar.bz2)= 1d00e2fb19418e486c30b850df625aa3 | |||
tar jxf Python-2.5.5.tar.bz2 | |||
tar zxf openssl-0.9.8m.tar.gz | |||
cd openssl-0.9.8m | |||
CC=host-gcc CXX=host-g++ ./config shared --prefix=/usr/local | |||
make -j4 | |||
make install | |||
cd Python-2.5.5 | |||
CC=host-gcc CXX=host-g++ ./configure --prefix=/host_usr | |||
make -j4 | |||
make altinstall | |||
find /usr/local -name "*.so*" -exec ldd {} \; | grep "not found" # should have no output | |||
= Post-Install Setup = | |||
Post-install instructions are written for the latest version.<br /> | |||
== Add slave(s) to configuration files == | |||
The following files need to be updated with new slaves (note that the production Buildbot config is explicitly not updated here, it will be done later): | |||
* [http://hg.mozilla.org/build/buildbot-configs/file/tip/mozilla2-staging/config.py buildbot-configs/mozilla2-staging/config.py] | |||
* [http://hg.mozilla.org/build/puppet-manifests/file/tip/site-production.pp puppet-manifests/site-production.pp] (or site-staging.pp for slaves that will be in staging permanently). | |||
* For a permanent staging slave - edit /etc/sysconfig/puppet to staging-puppet | |||
Once your patches have landed, you need to update the following checkouts: | |||
* On staging-master: | |||
# as cltbld | |||
cd /builds/buildbot/user-configs/clean-configs | |||
hg pull && hg up | |||
cd ../../user-configs2/clean-configs | |||
hg pull && hg up | |||
* On production-puppet (or staging-puppet if you updated site-staging.pp): | |||
# as root | |||
cd /etc/puppet/manifests | |||
hg pull && hg up | |||
* If a machine has been recloned/replaced then you also do this as root@production-puppet | |||
puppetca --clean moz2-linux-slaveNN.build.mozilla.org | |||
The | == Buildbot Setup == | ||
The buildbot.tac file will automatically be generated to send the slave to the correct staging master (staging-master or sm-staging-try-master). | |||
===Run the slave through staging=== | |||
see [[ReleaseEngineering:BuildSlaveSetup]] |
Latest revision as of 14:32, 10 April 2012
This procedure will re-create the CentOS 5.0-based reference VM image. Internally, this VM is named CentOS-5.0-ref-tools-vm.
Things Done For You
Version 2
Install CentOS 5.0 from CDs
f749d7e17fa01604b9956304efba2333 CentOS-5.0-i386-bin-1of6.iso 963258ceafda5c5e6f79be86028b6b3d CentOS-5.0-i386-bin-2of6.iso a08ec9ccfdc89c24f3d6567219f90c42 CentOS-5.0-i386-bin-3of6.iso b31c239009b780d1c89c311c192e43be CentOS-5.0-i386-bin-4of6.iso 0c3990be2271bf44c1495aa0003b5552 CentOS-5.0-i386-bin-5of6.iso 9e6f91a5292f46b02777133765fc03fe CentOS-5.0-i386-bin-6of6.iso
TB: Thunderbird build clients use a separate /buildbot partition of 80GB. Now that we reboot after each build, be sure to "tune2fs -c 0" the buildbot partition to avoid an fsck of it every 20 reboots.
Package Selection
The Easy Way: the installer kickstart file (stored in internal repo).
The Hard Way:
While installing, select a the GNOME Desktop and then select Custom package development; the following categories were selected:
- Desktop Environments
- Gnome Desktop Environment
- Applications
- Editors
- Text-based internet
- Add lynx
- Development
- Development Tools
- Development Libraries
- X Software Development
- GNOME Software Development
- Legacy Software Development
- Servers
- Turn all off, except for "Printing Support
- Base System
- Turn off Dialup Networking
- Turn on System Tools
Some Sys-prepping
We have some scripts that do some of this: root, cltbld
On first boot, CentOS will ask some questions:
- Turn the firewall off (we run our build machines on their own network, behind a firewall)
- Disable SELinux
- Enable NTP
- Login; install VMwareTools-3.0.1-32039.rpm
- vmware-config-tools.pl
- add clock=pit and vdso=no lines to /boot/grub/grub.conf
- turn on syncTime in VMware config
- for s in auditd avahi-daemon acpid bluetooth cpuspeed hplip hidd mcstrans pcscd ntpd cups cups-config-daemon mdmonitor openibd smartd pcmcia isdn atd gpm anacron autofs apmd kudzu yum-updated; do chkconfig $s off; done
- chkconfig vncserver on
- Copy over cltbld's ssh keys from another tinderbox
- Edit /etc/mail/sendmail.cf and add mail.build.mozilla.org as the "Smart Relay"
- rm /etc/sshd/ssh_host_*
Add the following lines to ~/.bash_profile
export CVS_RSH=ssh export JAVA_HOME=/builds/jdk export TBOX_CLIENT_CVS_DIR="/builds/tinderbox/mozilla/tools"
Install Sun Java JDK
Note: we should archive this binary somewhere
- Go to http://java.sun.com/javase/downloads/
- Click through to JDK 5.0 Update 10
- Download the "Linux self-extracting file"... not the RPM
d916c24bed9eef7aebc2626115e14a11 jdk-1_5_0_10-linux-i586.bin
- Save to /tools
cd /tools chmod 0755 ./dist/jdk-1_5_0_10-linux-i586.bin ./dist/jdk-1_5_0_10-linux-i586.bin # type 'yes' to accept the license ln -s jdk1.5.0_10/ jdk
Make GCC 4.1 (redhat branch)
md5sum gcc-4.1.1-30.src.rpm # 555b8cb95d3d7d851b2ebd5c3cec7837 rpm2cpio gcc-4.1.1-30.src.rpm | cpio -i gcc-4.1.1-20061011.tar.bz2 tar xfvj gcc-4.1.1-20061011.tar.bz2 mkdir gcc-obj-release cd gcc-obj-release/ ../gcc-4.1.1-20061011/configure --enable-long-long --enable-threads=posix --enable-__cxa_atexit --enable-languages=c,c++ --with-system-zlib --prefix=/tools/gcc-4.1.1 2>&1 | tee ../gcc-4.1.1-configure.log make 2>&1 | tee ../gcc-4.1.1-make.log make install 2>&1 | tee ../gcc-4.1.1-make_install.log
Build Python 2.5.1
(Some VMs use Python 2.5 or Python 2.4.4 but this is what is on the ref platform.)
wget http://python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2 tar xfvj dist/Python-2.5.1.tar.bz2 cd Python-2.5.1/ ./configure --prefix=/tools/python-2.5.1 2>&1 | tee /tools/dist/logs/python2.5.1-configure.log make 2>&1 | tee /tools/dist/logs/python2.5.1-make.log make install 2>&1 | tee /tools/dist/logs/python2.5.1-make_install.log cd /tools/ ln -s python-2.5.1 python
Version 3
Make directories
mkdir -p /tools/dist/logs mkdir -p /builds/logs
Initial Setup Steps
export PYTHONHOME="/tools/python" export PATH="/tools/python/bin:$PATH"
Installing Zope Interface
cd /tools/dist/ wget http://www.zope.org/Products/ZopeInterface/3.3.0/zope.interface-3.3.0.tar.gz tar xfvz zope.interface-3.3.0.tar.gz cd zope.interface-3.3.0/ python setup.py install --prefix=/tools/zope-interface-3.3.0 cd /tools; ln -s zope-interface-3.3.0 zope-interface export PYTHONPATH="/tools/zope-interface/lib/python2.5/site-packages:$PYTHONPATH"
Installing Twisted
cd /tools/dist/ wget http://tmrc.mit.edu/mirror/twisted/Twisted/2.4/TwistedCore-2.4.0.tar.bz2 wget http://tmrc.mit.edu/mirror/twisted/Twisted/2.4/Twisted-2.4.0.tar.bz2 tar xfvj TwistedCore-2.4.0.tar.bz2 tar xfvj Twisted-2.4.0.tar.bz2 cd TwistedCore-2.4.0 python setup.py install --prefix=/tools/twisted-core-2.4.0 pushd /tools/; ln -s twisted-core-2.4.0 twisted-core; popd export PYTHONPATH="/tools/twisted-core/lib/python2.5/site-packages:$PYTHONPATH" cd /tools/dist/Twisted-2.4.0/ python setup.py install --prefix=/tools/twisted-2.4.0 cd /tools; ln -s twisted-2.4.0 twisted export PYTHONPATH="/tools/twisted/lib/python2.5/site-packages/:$PYTHONPATH"
Version 4
Installing Mercurial
wget http://www.selenic.com/mercurial/release/mercurial-0.9.5.tar.gz tar -zvxf mercurial-0.9.5.tar.gz cd mercurial-0.9.5 export PYTHONHOME="/tools/python" export PATH="/tools/python/bin:$PATH" python setup.py install
Installing Scratchbox
As root:
wget http://repository.maemo.org/stable/chinook/maemo-scratchbox-install_4.0.1.sh chmod a+x ./maemo-scratchbox-install_4.0.1.sh ./maemo-scratchbox-install_4.0.1.sh -s /scratchbox /scratchbox/sbin/sbox_adduser cltbld yes
As cltbld:
Comment out the PYTHONHOME and PATH entries in ~/.bash_profile.
source ~/.bash_profile wget http://tablets-dev.nokia.com/chinook/maemo-sdk-install_4.0.1.sh chmod +x maemo-sdk-install_4.0.1.sh bash maemo-sdk-install_4.0.1.sh /scratchbox/login wget http://ftp.gnome.org/pub/gnome/sources/libIDL/0.8/libIDL-0.8.9.tar.gz tar -xzvf libIDL-0.8.9.tar.gz cd libIDL-0.8.9 ./configure --prefix=/usr make make install
Remove the comments from the PYTHONHOME and PATH entries in ~/.bash_profile and source it again.
Installing Nagios NRPE Daemon
wget http://dag.wieers.com/rpm/packages/nagios-plugins/nagios-plugins-1.4.9-1.el5.rf.i386.rpm wget http://dag.wieers.com/rpm/packages/nagios-nrpe/nagios-nrpe-2.5.2-1.el5.rf.i386.rpm wget http://dag.wieers.com/rpm/packages/nagios-nrpe/nagios-plugins-nrpe-2.5.2-1.el5.rf.i386.rpm rpm --nodeps -i *.rpm chkconfig --level 235 nrpe on # todo: make sure this is right after configs get checked in cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -d nagios mozilla/tools/nagios mv nagios/nrpe-linux.cfg /etc/nagios/nrpe.cfg
Installing Autoconf 2.13
bug 433492 added autoconf 2.13 on 30/June/2008, which puts it somewhere between version 4 and 5.
sudo yum install autoconf213
Version 5
Fixup Scratchbox Install
On Centos5, need to make the following changes to sysctl.conf
$ su
# vi /etc/sysctl.conf
...and append
vm.vdso_enabled = 0
vm.mmap_min_addr = 4096
#
# /sbin/sysctl -p
...
vm.vdso_enabled = 0
vm.mmap_min_addr = 4096
# exit
...there is no need to reboot.
su -
cd ~
wget http://scratchbox.org/download/files/sbox-releases/stable/tarball/scratchbox-toolchain-cs2007q3-glibc2.5-arm6-1.0.7-3-i386.tar.gz
wget http://scratchbox.org/download/files/sbox-releases/stable/tarball/scratchbox-devkit-cputransp-1.0.7-i386.tar.gz
cd /
tar zxvf ~/scratchbox-toolchain-cs2007q3-glibc2.5-arm6-1.0.7-3-i386.tar.gz
tar zxvf ~/scratchbox-devkit-cputransp-1.0.7-i386.tar.gz
cd /scratchbox
wget https://bugzilla.mozilla.org/attachment.cgi?id=334232
chmod a+x moz_scratchbox
cd /scratchbox/etc
mv resolv.conf resolv.conf.orig
cp /etc/resolv.conf .
# exit from running as root, now back to cltbld account.
/scratchbox/moz_scratchbox
sb-conf setup CHINOOK-ARMEL-2007 -c cs2007q3-glibc2.5-arm6 -d cputransp:debian-etch:doctools:maemo3-tools:perl -t /scratchbox/devkits/cputransp/bin/qemu-arm-cvs-m
sb-conf rootstrap CHINOOK-ARMEL-2007 http://repository.maemo.org/stable/4.0.1/armel/maemo-sdk-rootstrap_4.0.1_armel.tgz
sb-conf install CHINOOK-ARMEL-2007 -cedFGS
sb-conf select CHINOOK-ARMEL-2007
exit
wget http://repository.maemo.org/stable/chinook/maemo-sdk-nokia-binaries_4.0.1.sh
chmod +x maemo-sdk-nokia-binaries_4.0.1.sh
## following line failed out with permission errors
## sh ./maemo-sdk-nokia-binaries_4.0.1.sh
## so did the following instead:
$ su -
# cd /scratchbox
# sh /home/cltbld/maemo-sdk-nokia-binaries_4.0.1.sh
Note: you'll have to space/more to the end of the EULA, and then enter 'I accept'
/scratchbox/login
wget http://people.mozilla.com/~vladimir/misc/execstack.armel
chmod a+x execstack.armel
fakeroot mv execstack.armel /usr/bin/execstack
execstack -c `find /lib/ -name \*.so.\* -type f`
execstack -c `find /usr/lib/ -name \*.so.\* -type f`
fakeroot echo "deb http://repository.maemo.org/extras-devel chinook free non-free" >> /etc/apt/sources.list
fakeroot echo "deb file:/home/$USER/maemo-sdk-nokia-binaries_4.0.1 chinook explicit" >> /etc/apt/sources.list
fakeroot apt-get update
fakeroot apt-get install libgtk2.0-dev libxaw7-dev libfreetype6-dev libxi-dev libhildonmime-dev libosso-dev libidl-dev liblocation-dev libasound2-dev
exit
Path Setup
Add the appropriate paths to the cltbld user's .bash_profile
export PYTHONHOME="/tools/python" export PYTHONPATH="/tools/buildbotcustom:/tools/buildbot/lib/python2.5/site-packages:/tools/twisted/lib/python2.5/site-packages:/tools/twisted-core/lib/python2.5/site-packages:/tools/zope-interface/lib/python2.5/site-packages/" export PATH="/opt/local/bin:/tools/buildbot/bin:/tools/twisted/bin:/tools/twisted-core/bin:$PYTHONHOME/bin:$PATH"
Compiler Setup
Symlink gcc-4.1.1 to gcc in /tools:
cd /tools ln -s gcc-4.1.1 gcc
Version 6
Move scratchbox
You should have a /builds drive added to the VM before completing this section. All of this should be run as root.
Move scratchbox off root partition. Scratchbox takes up a non-trivial amount of space and should be moved to a different partition.
# as root
/etc/init.d/sbox stop
umount /scratchbox/users/cltbld/dev/*
umount /scratchbox/users/cltbld/*
mv /scratchbox /builds/scratchbox
# scratchbox needs this symlink to function properly
#
ln -s /builds/scratchbox /scratchbox
/etc/init.d/sbox start
To verify that scratchbox is working, do:
$ moz_scratchbox
> ls
...
> exit
$
Version 7
20090112 16:30 PST
metacity / Xvfb crontabs
Add the following to cltbld's crontab:
# Make sure Xvfb is running on :2 @reboot ps -C Xvfb | grep -q Xvfb || exec Xvfb :2 -screen 0 1280x1024x24 & */5 * * * * ps -C Xvfb | grep -q Xvfb || exec Xvfb :2 -screen 0 1280x1024x24 & # Make sure metacity is running on :2 @reboot ps -C metacity -f | grep -q :2 || exec metacity --display :2 --replace & */5 * * * * ps -C metacity -f | grep -q :2 || exec metacity --display :2 --replace &
Version 8
20090122 9:30 PST
upgraded mercurial to 1.1.2
Updating to newer mercurial version using this script:
#!/bin/sh pushd /tools wget http://www.selenic.com/mercurial/release/mercurial-1.1.2.tar.gz tar -zxvf mercurial-1.1.2.tar.gz cd mercurial-1.1.2 export PYTHONHOME="/tools/python" export PATH="/tools/python/bin:$PATH" python setup.py install rm -rf /tools/mercurial-1.1.2* echo "Hg update complete"
Version 9
20090128 18:15 PST
install libnotify-devel rpm
If yum-utils are not installed yet, do the following:
wget http://vault.centos.org/5.1/os/i386/CentOS/yum-utils-1.0.4-3.el5.centos.2.noarch.rpm rpm -ivh yum-utils-1.0.4-3.el5.centos.2.noarch.rpm
Developer requested devel package for libnotify bug 473831
# root yumdownloader libnotify-devel-0.4.2-6.el5 rpm -ivh libnotify-devel-0.4.2-6.el5.i386.rpm yum list installed | grep libnotify libnotify.i386 0.4.2-6.el5 installed libnotify-devel.i386 0.4.2-6.el5 installed
Version 10
Buildbot init scripts
cd /builds mkdir slave su - cd /etc/default wget -Obuildbot https://bugzilla.mozilla.org/attachment.cgi?id=359078 cd /etc/init.d wget -Obuildbot https://bugzilla.mozilla.org/attachment.cgi?id=359080 chmod +x buildbot chkconfig --add buildbot /etc/init.d/buildbot start sudo -e /etc/sudoers # Add 'cltbld ALL=NOPASSWD: /usr/bin/reboot' as the last line, save and exit
Update scratchbox mercurial and python
First, fix the DNS in scratchbox.
cp /etc/resolv.conf /scratchbox/users/cltbld/targets/CHINOOK_X86/etc/resolv.conf cp /etc/resolv.conf /scratchbox/users/cltbld/targets/CHINOOK_ARMEL/etc/resolv.conf cp /etc/resolv.conf /scratchbox/users/cltbld/targets/CHINOOK-ARMEL-2007/etc/resolv.conf
Allow cltbld to write to the tool areas
su - chown -R cltbld /scratchbox/devkits/maemo3-tools exit
Initial setup
/scratchbox/moz_scratchbox wget http://people.mozilla.org/~asasaki/mercurial-1.1.2.tar.gz tar zxvf mercurial-1.1.2.tar.gz echo 'export PYTHONPATH=/usr/lib/python2.5/site-packages:$PYTHONPATH' >> .bashrc
Do the following for CHINOOK_X86, while still running /scratchbox/moz_scratchbox:
sb-conf select CHINOOK_X86 echo 'deb http://repository.maemo.org/extras/ bora free' >> /etc/apt/sources.list apt-get update yes | apt-get install python2.5 python2.5-dev python2.5-xml cd /usr/bin rm python; ln -s python2.5 python cd ~/mercurial-1.1.2 python2.5 setup.py install cd /scratchbox/devkits/maemo3-tools/bin mv hg hg.old mv hgmerge hgmerge.old ln -s /usr/bin/hg . hg --version
The hg --version should give you no errors.
Repeat for CHINOOK_ARMEL... but I was unsuccessful getting hg 1.1.2 installed/working there.
sb-conf select CHINOOK_ARMEL echo 'deb http://repository.maemo.org/extras/ bora free' >> /etc/apt/sources.list apt-get update yes | apt-get install python2.5 python2.5-dev python2.5-xml cd /usr/bin rm python; ln -s python2.5 python
Repeat for CHINOOK-ARMEL-2007.
sb-conf select CHINOOK-ARMEL-2007 echo 'deb http://repository.maemo.org/extras/ bora free' >> /etc/apt/sources.list apt-get update yes | apt-get install python2.5 python2.5-dev python2.5-xml cd /usr/bin rm python; ln -s python2.5 python cd ~/mercurial-1.1.2 python2.5 setup.py install cd hg --version rm -rf mercurial-1.1.2*
Version 11
ESD Wrapper script
Because of bug 469635 we need to wrap the esd binary to toss out stderr.
cd /usr/bin mv esd esd.real wget -Oesd https://bug469635.bugzilla.mozilla.org/attachment.cgi?id=363722 chmod +x esd
Version 12
Install libxdamage-dev and libxcomposite-dev in Scratchbox
/scratchbox/moz_scratchbox sb-conf select CHINOOK_X86 apt-get install --force-yes -y libxdamage-dev libxcomposite-dev sb-conf select CHINOOK_ARMEL apt-get install --force-yes -y libxdamage-dev libxcomposite-dev sb-conf select CHINOOK-ARMEL-2007 apt-get install --force-yes -y libxdamage-dev libxcomposite-dev
Version 13
Install libhildon1-dev to scratchbox
/scratchbox/moz_scratchbox apt-get install --force-yes -y libhildon1-dev
Version 14
Disable Xvnc and some cronjobs
The updatedb cronjob manages the 'locate' database, which we do not use, and causes increased load every night at 4am PDT. The 'prelink' cronjob prelinks binaries for faster loading. This probably doesn't help build times in any significant way because we call the same binaries over and over during the build process. The Xvnc session is totally unused. To disable them, do the following:
# as root chkconfig vncserver off cd /etc/cron.daily mv mlocate.cron ~/ mv prelink ~/
Version 15
Install code coverage tools
Installed lcov from http://downloads.sourceforge.net/ltp/lcov-1.7-1.noarch.rpm
# as root wget http://downloads.sourceforge.net/ltp/lcov-1.7-1.noarch.rpm rpm -i lcov-1.7-1.noarch.rpm
Copied genhtml and geninfo from /usr/bin into /usr/local/bin, and replaced all instances of 'die' with 'print'
# as root cp /usr/bin/genhtml /usr/bin/geninfo /usr/local/bin sed -i 's,die,print,g' /usr/local/bin/genhtml sed -i 's,die,print,g' /usr/local/bin/geninfo
Install jscoverage into /usr/local/bin
# as root wget http://siliconforks.com/jscoverage/download/jscoverage-0.4.tar.bz2 tar jxf jscoverage-0.4.tar.bz2 cd jscoverage-0.4 ./configure make cp jscoverage jscoverage-server /usr/local/bin
Version 16
Install wireless tools
As root,
yum -y install wireless-tools-devel
Version 17
Add noatime option
Edit /etc/fstab so that the mount options for / and /builds are 'defaults,noatime'.
You don't have to reboot for these changes to take effect, instead you can do,
mount / -o remount,noatime mount /builds -o remount,noatime
Version 18
Install libnotify for scratchbox
/scratchbox/moz_scratchbox apt-get install --force-yes -y libnotify-dev
Version 19
Fix scratchbox wireless devel
/scratchbox/moz_scratchbox -p 'apt-get install --force-yes -y libiw-dev'
Version 20
Install Puppet
Install EPEL
As root,
rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
Move the JDK
To make the Puppet manifests a bit easier to manage we need to move the JDK to be in the same format as the other tools dirs (/tools/$name-$version):
# as root cd /tools mv jdk1.5.0_10 jdk-1.5.0_10 rm -f jdk ln -s jdk-1.5.0_10 jdk
Mount the puppet-files directory by adding an entry to fstab:
# IP is 10.2.71.136 for regular build slaves and 10.2.76.136 for try $IP:/export/buildlogs/puppet-files /N nfs ro 0 0
And then run,
mkdir /N mount -a
to mount it.
Install Puppet
yum install ruby facter puppet ruby-shadow augeas-libs ruby-augeas
Now, we need to run puppet once and sign its cert on the puppetmaster
# On the client # $hostname == staging-puppet or production-puppet puppetd --test --server $hostname.build.mozilla.org
You should get a message like "notice: Set to run 'one time'; exiting with no certificate". Sign it on the puppetmaster as follows:
# root @ staging-puppet or production-puppet puppetca --sign $hostname.build.mozilla.org
Setup the sysconfig file:
- Open /etc/sysconfig/puppet in an editor
- replace 'puppet' with production-puppet.build.mozilla.org
Post-puppet packages
Since the deployment of Puppet, future changes to the ref platform are management by it. Because of this, providing _exact_ installation instructions can be tricky. All of the packages listed below are installed on the ref platform and some installation guidelines are provided. Looking at the puppet-manifests repository may help if you are having trouble.
jscoverage
- Build from revision 453 of the jscoverage SVN repository
- 'jscoverage' and 'jscoverage-server' binaries installed to /usr/local/bin
GCC 4.3.3
GCC 4.3.3 was installed alongside the other GCC for use on newer branches:
- Get http://ftp.gnu.org/gnu/gcc/gcc-4.3.3/gcc-4.3.3.tar.bz2 and unpack it to /tools/gcc-4.3.3/source
- Pull the patch series from http://hg.mozilla.org/users/tglek_mozilla.com/gcc-moz-plugin-mq/
- Apply the following patches to the GCC sources using git-apply (patch -p1 will probably work as well):
- gty.diff
- plugin.diff
- parm_attrs.diff
- c_process_decl.diff
- mkdir /tools/gcc-4.3.3/build
- cd /tools/gcc-4.3.3/build
- /tools/gcc-4.3.3/source/configure --prefix=/tools/gcc-4.3.3/installed --enable-__cxa_atexit --enable-languages=c,c++
- make install
- The static analysis will require all of /tools/gcc-4.3.3 including the source/build/installed subdirectories
libhildonfm2-dev
Installed inside of scratchbox with the following command:
su - cltbld -c '/scratchbox/moz_scratchbox -p apt-get --yes --force-yes install libhildonfm2-dev
libconic0-dev
Installed inside of scratchbox with the following command:
su - cltbld -c '/scratchbox/moz_scratchbox -p apt-get --yes --force-yes install libconic0-dev'
access keys from within scratchbox
/bin/mount --bind /scratchbox/users/cltbld/home/cltbld/.ssh /home/cltbld/.ssh/
Upgrade Scratchbox
Roughly, the Scratchbox upgrade was done with the following set of commands:
su - unset PYTHONHOME unset PYTHONPATH export PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/cltbld/bin umount /home/cltbld/.ssh #until no longer mounted umount /builds/slave #might not be mounted /scratchbox/sbin/sbox stop /scratchbox/sbin/sbox_umount_all sh maemo-scratchbox-install_5.0.sh -U -s /scratchbox /etc/init.d/sbox start exit sh maemo-sdk-install_5.0.sh -y -d -s /scratchbox /scratchbox/login echo deb http://repository.maemo.org/fremantle/<token> nokia-binaries >> /etc/apt/sources.list fakeroot apt-get install autoconf2.13 libnotify-dev libIDL-dev libqt4-dev exit /scratchbox/moz_scratchbox sb-conf select FREMANTLE_ARMEL wget http://www.python.org/ftp/python/2.5.5/Python-2.5.5.tar.bz2 tar jxf Python-2.5.5.tar.bz2 cd Python-2.5.5 CC='host-gcc' --prefix=/usr/local make -j4 /scratchbox/moz_scratchbox openssl md5 openssl-0.9.8m.tar.gz Python-2.5.5.tar.bz2 #MD5(openssl-0.9.8m.tar.gz)= 898bf125370926d5f692a2201124f8ec #MD5(Python-2.5.5.tar.bz2)= 1d00e2fb19418e486c30b850df625aa3 tar jxf Python-2.5.5.tar.bz2 tar zxf openssl-0.9.8m.tar.gz cd openssl-0.9.8m CC=host-gcc CXX=host-g++ ./config shared --prefix=/usr/local make -j4 make install cd Python-2.5.5 CC=host-gcc CXX=host-g++ ./configure --prefix=/host_usr make -j4 make altinstall find /usr/local -name "*.so*" -exec ldd {} \; | grep "not found" # should have no output
Post-Install Setup
Post-install instructions are written for the latest version.
Add slave(s) to configuration files
The following files need to be updated with new slaves (note that the production Buildbot config is explicitly not updated here, it will be done later):
- buildbot-configs/mozilla2-staging/config.py
- puppet-manifests/site-production.pp (or site-staging.pp for slaves that will be in staging permanently).
- For a permanent staging slave - edit /etc/sysconfig/puppet to staging-puppet
Once your patches have landed, you need to update the following checkouts:
- On staging-master:
# as cltbld cd /builds/buildbot/user-configs/clean-configs hg pull && hg up cd ../../user-configs2/clean-configs hg pull && hg up
- On production-puppet (or staging-puppet if you updated site-staging.pp):
# as root cd /etc/puppet/manifests hg pull && hg up
- If a machine has been recloned/replaced then you also do this as root@production-puppet
puppetca --clean moz2-linux-slaveNN.build.mozilla.org
Buildbot Setup
The buildbot.tac file will automatically be generated to send the slave to the correct staging master (staging-master or sm-staging-try-master).