Home > Linux, Multimedia, Ubuntu > Geautomatiseerde smplayer compilatie met Bash en chroots

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 :)

Konsole (Bash)

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
VN:F [1.6.3_896]
Rating: 0 (from 0 votes)
Share and Enjoy:
  • Print this article!
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • StumbleUpon
  • Twitter
Categories: Linux, Multimedia, Ubuntu
  1. June 9th, 2007 at 11:46 | #1

    Wat ne beest, zou ik zo zeggen ;)

  2. gnilor
    June 9th, 2007 at 21:47 | #2

    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

  3. gnilor
    June 9th, 2007 at 21:49 | #3

    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 )

  4. June 10th, 2007 at 10:26 | #4

    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 ;)

  1. No trackbacks yet.