Geautomatiseerde smplayer compilatie met Bash en chroots
Vollen bak examens! En daardoor heb ik beseft dat het te lang duurt om elke week zeven nieuwe smplayer pakketten te compileren (zeven verschillende versies) Het is echt geen pretje om dit handmatig te doen. Er moeten telkens heel wat files aangepast/verplaatst worden etc. En een menselijke fout is ook nogal snel gemaakt

Dus wat doe je dan als oplossing?
- Je stelt chroots in voor een dapper en edgy compileeromgeving zodat je geen andere computers (of een reboot naar een andere installatie) nodig hebt om pakketten voor dapper en edgy te compileren. (dit had ik al vanaf het begin gedaan, maar voor de volledigheid vermeld ik het nog een keer)
- Je maakt een krachtig Bash script om de pakketten te compileren in jouw plaats.
Chroots
Een chroot is een map op je systeem waarin je kan chrooten, dat wil zeggen dat je als root directory dan die bepaalde map gebruikt. Chroots worden vaak gebruikt als een effectieve sandbox methode (om bijvoorbeeld een server optimaal te beveiligen door de webserver op die server te chrooten; hierdoor kan de webserver niets doen wat buiten de chroot omgeving ligt)
In mijn geval heb ik een hele lichte basisversie van Ubuntu Dapper Drake en Ubuntu Edgy Eft in een chroot gestoken, en daarna in elke installatie de nodige libraries (softwarebibliotheken) en compileerprogramma’s geïnstalleerd. Hierdoor kan ik software compileren voor Dapper Drake en Edgy Eft op een Feisty Fawn systeem.
Bash script
Hieronder bevindt zich het bash script dat ik gebruik om mijn pakketten te compileren. Het is maar heel snel in elkaar geflanst, maar het doet zijn werk goed genoeg
#!/bin/bash
## Little custom hacked together bash script to compile
## SMPlayer in every possible way for Ubuntu
##
## - Feisty: qt3; qt3/kde; qt4
## - Edgy: qt3; qt3/kde (needs chroot)
## - Dapper: qt3; qt3/kde (needs chroot)
##
## Usage: create-smplayer-packages sourcecode.tar.gz
##
## -- Wesley Stessens (wesley@ubuntu.com)
echo -e "\e[1;34mPREPARING SCRIPT...\e[0m"
p="$@"
# strip .tar.gz extension
d=${p:0:${#p}-7}
# figure out deb package names
deb=`echo $d|sed 's/-/_/'`_i386.deb
kdeb=`echo $d|sed 's/-/-kde_/'`_i386.deb
q4deb=`echo $d|sed 's/-/-qt4_/'`_i386.deb
echo -e "\e[1;34mCOPYING PACKAGES...\e[0m"
# copy package to dev dirs
cp $p /media/exthome/dev/$p
cp $p /media/exthome/dapper/media/dev/$p
cp $p /media/exthome/edgy/media/dev/$p
echo -e "\e[1;34mEXTRACTING PACKAGES...\e[0m"
# extract packages
cd /media/exthome/dev
tar zxf /media/exthome/dev/$p
cd /media/exthome/dapper/media/dev
tar zxf /media/exthome/dapper/media/dev/$p
cd /media/exthome/edgy/media/dev
tar zxf /media/exthome/edgy/media/dev/$p
# cd + rename debian directory
cd /media/exthome/dev/$d
mv debian-rvm debian
echo -e "\e[1;34mBUILDING SMPLAYER FOR FEISTY/QT3...\e[0m"
if [ -e "/media/exthome/dev/packages/feisty/$deb" ]; then
echo -e "\e[1;31mFile $deb already exists in /media/exthome/dev/packages/feisty... Skipping.\e[0m"
else
# build feisty: qt3
debian/rules binary > /dev/null
mv /media/exthome/dev/$deb /media/exthome/dev/packages/feisty/$deb
fi
echo -e "\e[1;34mBUILDING SMPLAYER FOR FEISTY/QT3/KDE...\e[0m"
if [ -e "/media/exthome/dev/packages/feisty/$kdeb" ]; then
echo -e "\e[1;31mFile $kdeb already exists in /media/exthome/dev/packages/feisty... Skipping.\e[0m"
else
# build feisty: qt3/kde
cd /media/exthome/dev/$d
# backup rules file to rules.orig
cp debian/rules ../rules.orig
# remove old compile files
rm -Rf src/.moc src/.obj src/.ui
cd src
make clean
cd ..
make clean
# add kde support to rules file
sed 's/$(MAKE) PREFIX=\/usr/$(MAKE) PREFIX=\/usr KDE_SUPPORT=1 KDE_INCLUDE_PATH=\/usr\/include\/kde/' < ../rules.orig > debian/rules
debian/rules binary > /dev/null
mv /media/exthome/dev/$deb /media/exthome/dev/packages/feisty/$kdeb
fi
echo -e "\e[1;34mBUILDING SMPLAYER FOR FEISTY/QT4...\e[0m"
if [ -e "/media/exthome/dev/packages/feisty/$q4deb" ]; then
echo -e "\e[1;31mFile $q4deb already exists in /media/exthome/dev/packages/feisty... Skipping.\e[0m"
else
# build feisty: qt4
cd /media/exthome/dev/$d
# remove old compile files
rm -Rf src/.moc src/.obj src/.ui
cd src
make clean
cd ..
make clean
# add qt4 support to rules file; remove qt3 support
sed 's/# Qt 3/$(MAKE) prep/' < ../rules.orig > debian/rules
sed -i 's/$(MAKE) PREFIX=\/usr/$(MAKE) PREFIX=\/usr QMAKE=qmake-qt4/' debian/rules
debian/rules binary > /dev/null
mv /media/exthome/dev/$deb /media/exthome/dev/packages/feisty/$q4deb
fi
echo -e "\e[1;34mBUILDING SMPLAYER FOR EDGY/QT3...\e[0m"
# Fix directory names
mv /media/exthome/edgy/media/dev/$d/debian-rvm /media/exthome/edgy/media/dev/$d/debian
mv /media/exthome/dapper/media/dev/$d/debian-rvm /media/exthome/dapper/media/dev/$d/debian
if [ -e "/media/exthome/dev/packages/edgy/$deb" ]; then
echo -e "\e[1;31mFile $deb already exists in /media/exthome/dev/packages/edgy... Skipping.\e[0m"
else
# build edgy: qt3
# prepare script for chroot
echo "cd /media/dev/$d" > /media/exthome/edgy/usr/local/bin/bsmplayerqt3
echo "debian/rules binary > /dev/null" >> /media/exthome/edgy/usr/local/bin/bsmplayerqt3
echo "exit 0" >> /media/exthome/edgy/usr/local/bin/bsmplayerqt3
# do chroot
chroot /media/exthome/edgy /bin/bash bsmplayerqt3
# move package out of chroot
mv /media/exthome/edgy/media/dev/$deb /media/exthome/dev/packages/edgy/$deb
fi
echo -e "\e[1;34mBUILDING SMPLAYER FOR EDGY/QT3/KDE...\e[0m"
if [ -e "/media/exthome/dev/packages/edgy/$kdeb" ]; then
echo -e "\e[1;31mFile $kdeb already exists in /media/exthome/dev/packages/edgy... Skipping.\e[0m"
else
# build edgy: qt3/kde
# prepare script for chroot
echo "cd /media/dev/$d" > /media/exthome/edgy/usr/local/bin/bsmplayerqt3kde
echo "cp debian/rules ../rules.orig" >> /media/exthome/edgy/usr/local/bin/bsmplayerqt3kde
echo "rm -Rf src/.moc src/.obj src/.ui; cd src; make clean; cd ..; make clean" >> /media/exthome/edgy/usr/local/bin/bsmplayerqt3kde
echo "sed 's/\$(MAKE) PREFIX=\/usr/\$(MAKE) PREFIX=\/usr KDE_SUPPORT=1 KDE_INCLUDE_PATH=\/usr\/include\/kde/' < ../rules.orig > debian/rules" >> /media/exthome/edgy/usr/local/bin/bsmplayerqt3kde
echo "debian/rules binary > /dev/null" >> /media/exthome/edgy/usr/local/bin/bsmplayerqt3kde
echo "exit 0" >> /media/exthome/edgy/usr/local/bin/bsmplayerqt3kde
# do chroot
chroot /media/exthome/edgy /bin/bash bsmplayerqt3kde
# move package out of chroot
mv /media/exthome/edgy/media/dev/$deb /media/exthome/dev/packages/edgy/$kdeb
fi
echo -e "\e[1;34mBUILDING SMPLAYER FOR DAPPER/QT3...\e[0m"
if [ -e "/media/exthome/dev/packages/dapper/$deb" ]; then
echo -e "\e[1;31mFile $deb already exists in /media/exthome/dev/packages/dapper... Skipping.\e[0m"
else
# build dapper: qt3
# prepare script for chroot
echo "cd /media/dev/$d" > /media/exthome/dapper/usr/local/bin/bsmplayerqt3
echo "debian/rules binary > /dev/null" >> /media/exthome/dapper/usr/local/bin/bsmplayerqt3
echo "exit 0" >> /media/exthome/dapper/usr/local/bin/bsmplayerqt3
# do chroot
chroot /media/exthome/dapper /bin/bash bsmplayerqt3
# move package out of chroot
mv /media/exthome/dapper/media/dev/$deb /media/exthome/dev/packages/dapper/$deb
fi
echo -e "\e[1;34mBUILDING SMPLAYER FOR DAPPER/QT3/KDE...\e[0m"
if [ -e "/media/exthome/dev/packages/dapper/$kdeb" ]; then
echo -e "\e[1;31mFile $kdeb already exists in /media/exthome/dev/packages/dapper... Skipping.\e[0m"
else
# build dapper: qt3/kde
# prepare script for chroot
echo "cd /media/dev/$d" > /media/exthome/dapper/usr/local/bin/bsmplayerqt3kde
echo "cp debian/rules ../rules.orig" >> /media/exthome/dapper/usr/local/bin/bsmplayerqt3kde
echo "rm -Rf src/.moc src/.obj src/.ui; cd src; make clean; cd ..; make clean" >> /media/exthome/dapper/usr/local/bin/bsmplayerqt3kde
echo "sed 's/\$(MAKE) PREFIX=\/usr/\$(MAKE) PREFIX=\/usr KDE_SUPPORT=1 KDE_INCLUDE_PATH=\/usr\/include\/kde/' < ../rules.orig > debian/rules" >> /media/exthome/dapper/usr/local/bin/bsmplayerqt3kde
echo "debian/rules binary > /dev/null" >> /media/exthome/dapper/usr/local/bin/bsmplayerqt3kde
echo "exit 0" >> /media/exthome/dapper/usr/local/bin/bsmplayerqt3kde
# do chroot
chroot /media/exthome/dapper /bin/bash bsmplayerqt3kde
# move package out of chroot
mv /media/exthome/dapper/media/dev/$deb /media/exthome/dev/packages/dapper/$kdeb
fi
echo -e "\e[1;34m -- ThE EnD -- \e[0m"
exit 0








Wat ne beest, zou ik zo zeggen
hehe, weten we ineens weer zeker waarom je kwam vragen over terug te keren uit chroot in shell script
enkele opmerkingen op bash script, omdat ik denk dat je ze mss nog niet kent.
deb=`echo $d|sed ’s/-/_/’`_i386.deb
zou ik persoonlijk zo geschreven hebben denk ik
deb=”${d/-/_}_i386.deb”
en zo van die multi line echo into file spullen als dit
echo “cd /media/dev/” > /media/exthome/dapper/usr/local/bin/bsmplayerqt3
echo “debian/rules binary > /dev/null” >> /media/exthome/dapper/usr/local/bin/bsmplayerqt3
kan je “properder” doen met cat
cat > /media/exthome/dapper/usr/local/bin/bsmplayerqt3
cd /media/dev/$d
debian/rules binary > /dev/null
EOF
cheers
ik weet niet wat er met post gebeurt is maar dat laatste moet deze structuur hebben
cat > filename
…. stuff dat in file moet
eventueel over een hoop regels
EOF
Ik ben eens benieuwd of het deze keer wel lukt.
(strutuur is cat lt lt EOFmarker gt gt filename )
gnilor: ah zonder echo en sed
dat wist ik niet.. en dat van cat wist ik wel, maar wist de precieze syntax niet en heb toen dus maar snel even echo gebruikt