source: ProjectBuilder/devel/pb/t/pbtest@ 1606

Last change on this file since 1606 was 1606, checked in by Bruno Cornec, 12 years ago
  • Adds pbstoponerr option in conf file to allow to overwrite the default which is back to not stopping on errors as it perturbates VE and VM build for themoment, as not all commands are expected to succeed systematically.
  • Property svn:executable set to *
File size: 12.6 KB
RevLine 
[1564]1#!/bin/bash
2#
3# Project Builder test suite
4#
5# $Id$
6#
7# Copyright B. Cornec 2007-2012
8# Provided under the GPL v2
9
10# First create a dummy account for testing
[1587]11# In order for this script to run well, you should have sudo access
[1564]12
13# You may have multiple distros here
[1604]14TESTVEDIST="debian-6.0-x86_64 ubuntu-12.04-i386 fedora-16-x86_64 opensuse-12.1-x86_64 mageia-2-i386 mandriva-2010.1-i386"
[1564]15# Only one VM is tested for now.
16TESTVMDIST="fedora-16-i386"
17TESTVMISO="/users/bruno/iso/Fedora-16-i386-DVD.iso"
[1597]18PBUSER=pbtest
19PBTEST="/home/$PBUSER"
[1587]20export PBPROJ=afio
[1564]21
[1587]22# Sub function to handle execution as pbtest
23# doesn't change to the home dir of the user as su - can't be used to get env var correct
[1581]24sudopbtest() {
25
26cmd=$1
[1587]27msg=$2
[1581]28
[1603]29echo " "
[1587]30if [ _"$cmd" == _"/tmp/pbtestcmd" ]; then
[1597]31 echo "INFO (as $PBUSER): Now running `head -1 $cmd` [$msg]"
[1587]32else
[1597]33 echo "INFO (as $PBUSER): Now running $cmd [$msg]"
[1587]34fi
[1597]35sudo -n -E su - $PBUSER -c "$cmd"
[1587]36ret=$?
37if [ $ret -ne 0 ] && [ _"$msg" == _"" ]; then
38 echo "================================"
39 echo "ERROR: Command $cmd failed: $ret"
40 echo "================================"
41fi
[1581]42}
43
[1587]44sudocmd() {
45cmd=$1
[1581]46
[1603]47echo " "
[1587]48echo "INFO (as root): Now running $cmd"
[1590]49sudo -n $cmd
[1587]50ret=$?
51if [ $ret -ne 0 ]; then
52 echo "================================"
53 echo "ERROR: Command $cmd failed: $ret"
54 echo "================================"
55fi
56}
57
58
[1603]59for d in $TESTVEDIST; do
60 # umount /proc in VE in case
61 dd=`echo $d | cut -d'-' -f1`
62 vv=`echo $d | cut -d'-' -f2`
63 aa=`echo $d | cut -d'-' -f3`
64 if [ -f "$PBTEST/ve/$dd/$vv/$aa/proc/cpuinfo" ]; then
65 sudocmd "umount $PBTEST/ve/$dd/$vv/$aa/proc"
66 fi
67done
[1587]68sudocmd "rm -rf $PBTEST/* $PBTEST/.??*"
[1603]69sudocmd "rmdir $PBTEST"
[1597]70sudocmd "killall -u $PBUSER"
71sudocmd "userdel $PBUSER"
72#sudocmd "groupdel $PBUSER" 1
73sudocmd "useradd $PBUSER"
74sudocmd "grep -q $PBUSER /etc/sudoers"
[1565]75if [ $? -ne 0 ]; then
[1577]76 cat > /tmp/sudoers << EOF
[1587]77Defaults env_keep += "PBPROJ"
[1604]78# This is for the $PBUSER account for the VE and VM only
[1597]79$PBUSER ALL=NOPASSWD:/usr/sbin/chroot
80$PBUSER ALL=NOPASSWD:/usr/bin/rpmbootstrap
81$PBUSER ALL=NOPASSWD:/usr/sbin/debootstrap
82$PBUSER ALL=NOPASSWD:/bin/chmod
83$PBUSER ALL=NOPASSWD:/bin/cp
84$PBUSER ALL=NOPASSWD:/bin/rm
85$PBUSER ALL=NOPASSWD:/bin/tar
86$PBUSER ALL=NOPASSWD:/bin/mkdir
[1604]87$PBUSER ALL=NOPASSWD:/usr/bin/qemu-kvm
[1564]88EOF
[1587]89 sudocmd "cat /etc/sudoers /tmp/sudoers > /tmp/sudoers2"
90 sudocmd "chmod 440 /tmp/sudoers2"
91 sudocmd "chown root:root /tmp/sudoers2"
92 sudocmd "mv /tmp/sudoers2 /etc/sudoers"
[1567]93 rm -f /tmp/sudoers /tmp/sudoers2
[1565]94fi
[1599]95# Force $PBUSER (for now pbuser hardcoded!) account passwd is $PBUSER
96sudocmd "perl -pi -e 's|^pbtest:.*|pbtest:$2a$08$2Q.tEty4v/fU0RyPeDelk.AjLAtXUXU3DpSs/l/8YrFmau1LJRCqC:15483:0:99999:7:::|' /etc/shadow"
[1594]97sudopbtest "echo export PBPROJ=$PBPROJ >> $PBTEST/.bash_profile"
[1587]98sudopbtest "env | grep PBPROJ"
[1564]99
[1565]100#Taken from Lab document originally
101# SVN repo setup
[1580]102sudopbtest "svnadmin create $PBTEST/svn"
[1577]103cat > /tmp/authz << EOF
[1565]104[/]
[1597]105$PBUSER = rw
[1565]106* = r
107EOF
[1587]108sudocmd "mv /tmp/authz $PBTEST/svn/conf/authz"
[1577]109cat > /tmp/passwd << EOF
[1574]110[users]
[1597]111$PBUSER = $PBUSER
[1565]112EOF
[1587]113sudocmd "mv /tmp/passwd $PBTEST/svn/conf/passwd"
[1567]114cat > /tmp/svnserve.conf << EOF
[1565]115[general]
[1573]116password-db = $PBTEST/svn/conf/passwd
[1565]117authz-db = authz
[1573]118anon-access = read
119auth-access = write
[1575]120realm = pb
[1565]121EOF
[1587]122sudocmd "mv /tmp/svnserve.conf $PBTEST/svn/conf/svnserve.conf"
[1597]123sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/svn/conf/authz $PBTEST/svn/conf/passwd $PBTEST/svn/conf/svnserve.conf"
[1587]124sudopbtest "killall svnserve" 1
125sudopbtest "svnserve -d -r $PBTEST/svn"
126sudopbtest "mkdir -p $PBTEST/{ftp,ve,vm,.ssh,pb}"
127sudopbtest "chmod 700 $PBTEST/.ssh"
[1565]128
[1587]129sudopbtest "pb -h"
[1580]130sudopbtest "pbdistrocheck"
[1587]131sudopbtest "pb clean 2>&1 > /dev/null" 1
[1577]132
[1567]133cat > /tmp/.pbrc << EOF
[1564]134# Projects
[1565]135pbconfurl afio = svn://localhost/pb/afio/pbconf
[1567]136pbdefdir default = \$ENV{'HOME'}/pb
[1580]137pbconfurl pb = svn://svn.project-builder.org/pb/pbconf
[1567]138pbconfdir pb = \$ENV{'HOME'}/pb/pbconf
[1580]139pburl pb = svn://svn.project-builder.org/pb
[1565]140pburl mondorescue = svn://svn.mondorescue.org/mondorescue/branches
[1587]141sshhost pb = localhost
[1597]142sshlogin pb = $PBUSER
[1587]143sshdir pb = \$ENV{'HOME'}/ftp
[1564]144#
[1565]145pbpackager default = Big Chief <bigchief@hp.com>
[1564]146vmport pb = 2200
147pbparallel pb = 6
[1593]148vepath default = $PBTEST/ve
[1594]149vmpath default = $PBTEST/vm
[1587]150EOF
151sudocmd "mv /tmp/.pbrc $PBTEST/.pbrc"
152
153cat > /tmp/.pbrc << EOF
[1565]154vmtype default = kvm
155vmcmd default = qemu-kvm
[1564]156vmsize fedora = 10G
[1565]157vmmonport default = 4000
[1604]158vmlogin default = $PBUSER
[1564]159EOF
[1594]160echo "vmlist default = `echo $TESTVMDIST | sed 's/ /,/g'`" >> /tmp/.pbrc
[1587]161sudocmd "mv /tmp/.pbrc $PBTEST/vm/.pbrc"
[1564]162
[1567]163cat > /tmp/.pbrc << EOF
[1565]164vetype default = chroot
165verpmtype default = rpmbootstrap
166vedebtype default = debootstrap
167verebuild default = false
168veopt default =
169vesnap default = false
[1597]170velogin default = $PBUSER
[1565]171EOF
[1587]172echo "velist default = `echo $TESTVEDIST | sed 's/ /,/g'`" >> /tmp/.pbrc
173sudocmd "mv /tmp/.pbrc $PBTEST/ve/.pbrc"
[1597]174sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/.pbrc $PBTEST/ve/.pbrc $PBTEST/vm/.pbrc"
[1565]175
[1587]176sudopbtest "ssh-keygen -f $PBTEST/.ssh/id_rsa -t rsa -b 768 -v -N ''"
177sudopbtest "cp $PBTEST/.ssh/id_rsa.pub $PBTEST/.ssh/authorized_keys"
178sudopbtest "chmod 600 $PBTEST/.ssh/authorized_keys $PBTEST/.ssh/id_rsa.pub"
179sudopbtest "ssh localhost touch $PBTEST/ftp/README"
[1574]180
[1577]181# Create SVN conf files - doesn't work fully as it asks for a password - solved with PBVCSOPT
[1587]182sudopbtest "svn info 2>&1 > /dev/null" 1
[1574]183cat > /tmp/servers << EOF
[1575]184[global]
[1574]185store-passwords = yes
186store-plaintext-passwords = yes
[1575]187store-auth-creds = yes
[1574]188EOF
[1587]189sudocmd "mv /tmp/servers $PBTEST/.subversion/servers"
[1597]190sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/.subversion/servers"
[1574]191
[1599]192VCSOPT="--username $PBUSER --password $PBUSER"
[1577]193
[1587]194sudopbtest "svn import $PBTEST/pb svn://localhost/pb -m 'Initial creation of pb repo' $VCSOPT"
195sudopbtest "svn co svn://localhost/pb $PBTEST/pb"
196sudopbtest "touch $PBTEST/pb/README"
197sudopbtest "svn add $PBTEST/pb/README"
[1590]198sudopbtest "svn ci $VCSOPT -m 'add readme' $PBTEST/pb/README"
[1587]199sudopbtest "PBVCSOPT=\"$VCSOPT\" pb -r 2.5 newproj afio"
[1577]200
[1587]201grep -vE '^defpkgdir|^projver|^projtag|^pburl|^pbrepo|^shh' $PBTEST/pb/afio/pbconf/2.5/afio.pb > /tmp/afio.pb
[1567]202cat >> /tmp/afio.pb << EOF
[1565]203defpkgdir afio = dummy
204projver afio = 2.5
205projtag afio = 1
206pburl afio = ftp://ftp.project-builder.org/src/afio-2.5.tar.gz
207pbrepo afio = ftp://ftp.project-builder.org
208sshhost afio = localhost
[1597]209sshlogin afio = $PBUSER
[1567]210sshdir afio = \$ENV{'HOME'}/ftp
[1565]211EOF
[1587]212sudocmd "mv /tmp/afio.pb $PBTEST/pb/afio/pbconf/2.5/afio.pb"
[1597]213sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio.pb"
[1587]214cat > /tmp/pbtestcmd << EOF
215perl -pi -e 's|testver\s+afio\s+=\s+true|testver\ afio\ =\ false|' $PBTEST/pb/afio/pbconf/2.5/afio.pb
216EOF
217chmod 755 /tmp/pbtestcmd
218sudopbtest /tmp/pbtestcmd
[1565]219
[1587]220grep -vE 'PBSRC|PBDESC|PBSUMMARY|PBURL|PBLOG' $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf > /tmp/all.pbf
[1567]221cat >> /tmp/all.pbf << EOF
[1565]222filter PBSRC = src/%{name}-%{version}.tar.gz
223filter PBDESC = afio is a cpio compatible archiver with extended features$/It can compress on a file by file basis.
224filter PBSUMMARY = afio is a cpio compatible archiver with extended features
225filter PBURL = http://www.boutell.com/lsm/lsmbyid.cgi/000462
226filter PBLOG = no
227EOF
[1587]228sudocmd "mv /tmp/all.pbf $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf"
[1597]229sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/pbfilter/all.pbf"
[1577]230
[1587]231grep -vE 'PBGRP|PBLIC' $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf > /tmp/rpm.pbf
[1567]232cat >> /tmp/rpm.pbf << EOF
[1565]233filter PBGRP = Applications/Archiving
234filter PBLIC = Afio
[1601]235filter PBBDEP = gcc
[1565]236EOF
[1587]237sudocmd "mv /tmp/rpm.pbf $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf"
[1597]238sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/pbfilter/rpm.pbf "
[1577]239
[1601]240cat > /tmp/deb.pbf << EOF
[1597]241filter PBGRP = utils
242filter PBLIC = Afio
[1603]243filter PBBDEP = gcc
[1597]244EOF
245sudocmd "mv /tmp/deb.pbf $PBTEST/pb/afio/pbconf/2.5/pbfilter/deb.pbf"
[1599]246sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/pbfilter/deb.pbf "
[1597]247
[1577]248# First build
[1587]249sudopbtest "pb -r 2.5 sbx2build"
[1565]250
[1587]251cat > /tmp/pbtestcmd << EOF
252# Filtering $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
253perl -pi -e 's|%configure||' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
254perl -pi -e 's|make %{\?_smp_mflags}|make %{\?_smp_mflags}\nchmod 644 script*/*|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
[1590]255perl -pi -e 's|make DESTDIR=.*|mkdir -p %{buildroot}%{_bindir}\nmkdir -p %{buildroot}%{_mandir}/man1\ninstall -p -m 755 afio %{buildroot}%{_bindir}\ninstall -p -m 644 afio.1 %{buildroot}%{_mandir}/man1|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
[1587]256perl -pi -e 's|%doc ChangeLog|%doc HISTORY PORTING README SCRIPTS ANNOUNCE-2.5 perl.artistic.license|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
257perl -pi -e 's|%doc INSTALL COPYING README AUTHORS NEWS|%doc afio.lsm script1 script2 script3 script4\n%{_bindir}/%{name}\n%{_mandir}/man1/%{name}.1*|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
[1601]258perl -pi -e 's|^#BuildRequires:|BuildRequires:|' $PBTEST/pb/afio/pbconf/2.5/afio/rpm/afio.spec
[1587]259EOF
260chmod 755 /tmp/pbtestcmd
261sudopbtest /tmp/pbtestcmd
[1565]262
[1577]263cat > /tmp/pbcl << EOF
[1565]264# $Id$
[1564]265
[1565]266AFIO CHANGES
267
2682.5 (2009-12-03)
269- First packages created
270EOF
[1587]271sudocmd "mv /tmp/pbcl $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
[1597]272sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
[1587]273sudopbtest "svn add $PBTEST/pb/afio/pbconf/2.5/afio/pbcl"
274sudopbtest "svn ci -m 'Adding pbcl for afio' $VCSOPT $PBTEST/pb"
[1565]275
[1587]276sudopbtest "pb sbx2pkg"
277rpm -qilvp $PBTEST/pb/afio/build/RPMS/x86_64/afio-2.5*
278
279cat > /tmp/pbtestcmd << EOF
280# Filtering $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
281perl -pi -e 's|,\s*PBDEP||' $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
[1597]282sed -i '/Recommends: PBREC/d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
283sed -i '/Suggests: PBSUG/d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/control
[1587]284EOF
285chmod 755 /tmp/pbtestcmd
286sudopbtest /tmp/pbtestcmd
287
[1567]288cat > /tmp/afio.docs << EOF
[1565]289HISTORY
290PORTING
291README
292SCRIPTS
293ANNOUNCE-2.5
294perl.artistic.license
295afio.lsm
296script1
297script2
298script3
299script4
300EOF
[1587]301sudocmd "mv /tmp/afio.docs $PBTEST/pb/afio/pbconf/2.5/afio/deb/afio.docs"
[1597]302sudocmd "chown ${PBUSER}:$PBUSER $PBTEST/pb/afio/pbconf/2.5/afio/deb/afio.docs "
[1567]303
[1587]304cat > /tmp/pbtestcmd << EOF
305# Filtering $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
306perl -pi -e 's|config.status: configure|config.status: Makefile|' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
307perl -pi -e 's|dh_installchangelogs ChangeLog|dh_installchangelogs debian/changelog|' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
[1601]308perl -pi -e 's|# - copy html manual to temporary location for renaming|mkdir -p \\\$(CURDIR)/debian/\\\$(PACKAGE_NAME)/usr/bin \\\$(CURDIR)/debian/\\\$(PACKAGE_NAME)/usr/share/man/man1 ; install -p -m 755 afio \\\$(CURDIR)/debian/\\\$(PACKAGE_NAME)/usr/bin ; install -p -m 644 afio.1 \\\$(CURDIR)/debian/\\\$(PACKAGE_NAME)/usr/share/man/man1|' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
[1587]309sed -i -e '/\.\/configure /d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
[1601]310sed -i -e '/ install prefix=/d' $PBTEST/pb/afio/pbconf/2.5/afio/deb/rules
[1587]311EOF
312chmod 755 /tmp/pbtestcmd
313sudopbtest /tmp/pbtestcmd
[1565]314
[1587]315
[1565]316#dpkg -I ~ftp/pub/afio/test/debian/5.0/afio_2.5-0.20091204131057_i386.deb
317#dpkg -x ~ftp/pub/afio/test/debian/5.0/afio_2.5-0.20091204131057_i386.deb /tmp/x ; ls -lR /tmp/x
318
[1587]319sudopbtest "pb getconf"
320# test also with pb
321sudopbtest "pb -p pb -r devel getconf"
322sudopbtest "pb -p pb -r devel sbx2pkg"
323sudopbtest "pb -p pb build2ssh"
324sudopbtest "pb -p pb pkg2ssh"
325
[1564]326for d in $TESTVEDIST; do
[1593]327 sudopbtest "PATH=${PATH}:/sbin:/usr/sbin pb -p pb -m $d newve"
[1580]328 sudopbtest "pb -p pb -m $d sbx2setupve"
329 sudopbtest "pb -p pb -m $d snapve"
[1587]330 sudopbtest "pb -m $d sbx2ve"
[1564]331 # Cleaning VE to use the snapshot
332 dd=`echo $d | cut -d'-' -f1`
[1596]333 vv=`echo $d | cut -d'-' -f2`
334 aa=`echo $d | cut -d'-' -f3`
[1597]335 if [ -f "$PBTEST/ve/$dd/$vv/$aa/proc/cpuinfo" ]; then
[1596]336 sudocmd "umount $PBTEST/ve/$dd/$vv/$aa/proc"
337 fi
338 sudocmd "rm -rf $PBTEST/ve/$dd/$vv/$aa"
[1587]339 sudopbtest "pb -S -m $d sbx2ve"
[1564]340done
341
[1590]342sudopbtest "svn ci $VCSOPT -m 'sync before newver' $PBTEST/pb"
343sudopbtest "PBVCSOPT=\"$VCSOPT\" pb -r 2.5 -V 2.6 newver"
[1604]344# We now need to adapt tar file,log ... to a 2.6 content
345#sudopbtest "pb -r 2.6 sbx2pkg"
[1565]346
[1597]347# need tobe part of group video for KVM
[1606]348sudocmd "grep -Eq '^video:' /etc/group" | grep $PBUSER
[1597]349if [ $? -ne 0 ]; then
[1604]350 sudocmd "perl -pi -e 's|^(video:.*)$|$1,$ENV{'PBUSER'}|' /etc/shadow"
[1597]351fi
352d=mageia-2-i386
353sudopbtest "qemu-img create -f qcow2 $PBTEST/vm/$d.qemu 72G"
[1604]354sudopbtest "sudo qemu-kvm -m 1024 -kernel /pub/mageia/distrib/2/i586/isolinux/alt0/vmlinuz -initrd /pub/mageia/distrib/2/i586/isolinux/alt0/all.rdz -append "ramdisk_size=128000 root=/dev/ram3 kickstart=http://192.168.8.55/pub/ks/guerrero/ks.pl automatic=method:http,server:192.168.8.55,directory:/pub/mageia/distrib/2/i586,network:dhcp" -drive file=$PBTEST/vm/$d.qemu,if=virtio,media=disk -redir tcp:2200:10.0.2.15:22"
[1601]355sudopbtest "pb -p pb -r devel -m $d sbx2setupvm"
[1597]356sudopbtest "pb -p pb -m $d snapvm"
357sudopbtest "pb -m $d sbx2vm"
[1580]358
[1601]359# test also with MondoRescue
[1577]360pb -p mondorescue -r branches/3.0 cms2pkg
361
[1580]362# cleanup
[1604]363sudopbtest "pb clean"
[1587]364sudopbtest "killall svnserve" 1
[1605]365exit
Note: See TracBrowser for help on using the repository browser.