MAINTENANCE DU PAQUET DEB SDLMAME
Préparation des sources
NOTE1: Cette documentation risque fort d'être illisible car elle est en constante évolution au fur et à mesure de mes découvertes et des changements du code source de SDLMAME. Si vous aussi découvrez certaines méthodes ou outils et/ou voulez plus d'informations n'hésitez pas à me contacter. Pour obtenir directement le paquet Debian à jour, rendez-vous sur le dépôt http://apt.ludomatic.fr/
NOTE2: Installer au préalable les paquets suivants
# aptitude install build-essential autoconf automake dh-make debhelper devscripts fakeroot gnupg lintian linda quilt pbuilder debian-policy developers-reference
NOTE3: La série GCC 4.3 ne compile pas bien MAME, utiliser la 4.2 ou la 4.4 par exemple
# aptitude install gcc-4.2 g++-4.2
# make CC=/usr/bin/gcc-4.2
# make CC=/usr/bin/gcc-4.2
NOTE232: MAME publie une nouvelle version officielle à peu près tous les mois. Pour symboliser le numéro de version (par exemple 0132) j'utiliserai la variable $VERSION.
$ export VERSION=0132
Télécharger le zip depuis http://rbelmont.mameworld.info/?page_id=163 :
$ wget --user-agent="Mozilla (ludomatic.fr)" "http://rbelmont.mameworld.info/sdlmame$VERSION.zip"
et le décompresser dans le dossier ~/dev/deb/sdlmame/$VERSION/
$ unzip ./sdlmame*.zip
Dans le dossier courant [VERSION], renommer le dossier sdlmame[VERSION] fraichement obtenu en format "paquet-version":
$ mv ./sdlmame$VERSION ./sdlmame-$VERSION
Note: Lors de la debianisation initiale des sources, j'ai utilisé les commandes suivantes
cd sdlmame-$VERSION dh_make -e ludomatic@gmail.com -f ../sdlmame-$VERSION.tar.gz
Créer le tgz "original" avant toute modification:
$ tar czvf sdlmame_$VERSION.orig.tar.gz ./sdlmame-$VERSION
Recopier le dossier "./debian" depuis la version précédente [N-1] du paquet:
$ cp -vr ../[N-1]/sdlmame-[N-1]/debian ./sdlmame-$VERSION/
Passer dans le dossier des sources:
$ cd ./sdlmame-$VERSION/
Vérifier la $DISTRIB dans ./debian/changelog puis...
- nouvelle stable: $ dch -v $VERSION-1${DISTRIB}1
- mise à jour mineure (sans mise à jour des sources en amont) : $ dch -i
sdlmame ([VERSION]-1[DISTRIB]1) stable; urgency=low * MAME changelog available at http://mamedev.org/releases/whatsnew_0124.txt : "After a long development cycle, MAME 0.124 is now ready for release." * Original sources available at http://rbelmont.mameworld.info/?page_id=163 : "The latest version is 0.124. Unlike Windows we got it right the first time, so no “a” is necessary ;)" * Packaging notes : This sdlmame package for debian is out nearly one year after my last build. I apologize and hope to offer you the next release a bit more faster ;) Free ROMs included : Robby Roto (Bally/Midway), Gridlee (Videa), Alien Arena (Duncan Brown), Teeter Torture (Exidy), Circus (Exidy), Robot Bowl (Exidy), Car Polo (Exidy), Rip Cord (Exidy), Fire One (Exidy), Crash (Exidy), Star Fire (Exidy), Side Track (Exidy), Spectar (Exidy), Targ (Exidy). Enjoy ! -- Ludovic Lechapt <ludomatic@gmail.com> Thu, 27 Mar 2007 14:08:54 +1100
$ quilt new link_zlib_expat.patch (quilt pop link_zlib_expat.patch OU quilt push link_zlib_expat.patch pour modifier selon la position du patch dans la liste) $ quilt edit makefile $ quilt refresh $ quilt new make_install.patch [etc...] ($ quilt applied)
Au besoin
- utiliser $HOME/.quiltrc pour forcer le dossier des patches dans debian/patches
- supprimer le .pc dans le dossier des sources (après retour aux fichiers non patchés d'origine avec $ quilt pop -a)
Toujours dans "debian", vérifier dans le fichier "postinst" la liste des ROMs libres à télécharger et la taille totale annoncée.
Empaquetage des sources
Mettre à jour l'environnement de compilation (chroot) de pbuilder :
$ pbuilder-[DISTRIB]-i386 update (ex: [DISTRIB]=lenny)
Enregistrer ces variables d'environnent pour que debbuild puisse utiliser la clé gpg pour signer les sources:
$ export DEBNAME=Ludovic Lechapt
$ export DEBEMAIL=ludomatic@gmail.com
$ export EMAIL=ludomatic@gmail.com
$ export DEBFULLNAME=Ludovic Lechapt
Dans le dossier ./sdlmame-[VERSION], suppression des anciens builds, recompilation des sources puis du .deb:
$ rm -f ../*diff.gz ../*.dsc ../*.build ../*.changes && debuild -S -sa && pbuilder-[DISTRIB]-[ARCH] build ../*.dsc (ex: [ARCH]=i386, [DISTRIB]=lenny)
- rajouter "-us -uc" aux options de debbuild pour ne pas signer avec la clé gpg (empêche l'ajout au dépôt sécurisé)
- debuild va créer les archives suivantes dans le dossier parent:
- pbuilder doit compiler grâce aux sources et aux archives créées les fichiers suivants dans "/var/cache/pbuilder/[DISTRIB]-[ARCH]/result/":
sdlmame_[VERSION]-1(UBUNTU).diff.gz
sdlmame_[VERSION]-1(UBUNTU).dsc
sdlmame_[VERSION]-1(UBUNTU)_source.build
sdlmame_[VERSION]-1(UBUNTU)_source.changes
sdlmame_[VERSION]-1(UBUNTU).dsc
sdlmame_[VERSION]-1(UBUNTU)_source.build
sdlmame_[VERSION]-1(UBUNTU)_source.changes
sdlmame_[VERSION]-1(UBUNTU).diff.gz
sdlmame_[VERSION]-1(UBUNTU).dsc
sdlmame_[VERSION]-1(UBUNTU)_[ARCH].changes
sdlmame_[VERSION]-1(UBUNTU)_[ARCH].deb
sdlmame_[VERSION].orig.tar.gz
sdlmame_[VERSION]-1(UBUNTU).dsc
sdlmame_[VERSION]-1(UBUNTU)_[ARCH].changes
sdlmame_[VERSION]-1(UBUNTU)_[ARCH].deb
sdlmame_[VERSION].orig.tar.gz
Signer les sources (au besoin changer les droits avec "chown ludo:ludo /var/cache/pbuilder/[DISTRIB]-[ARCH]/result/") du dossier "result":
$ debsign -S /var/cache/pbuilder/[DISTRIB]-[ARCH]/result/sdlmame_[VERSION]-1(UBUNTU)_[ARCH].changes
Mise à jour du catalogue
Dans "~/dev/apt/repository", mettre à jour le numéro de version pour sdlmame dans le fichier "includedeb.sh":
(...)
echo -e "\n-- sdlmame (deb src) lenny";
reprepro --ask-passphrase -VV -b . -C contrib include lenny /var/cache/pbuilder/lenny-i386/result/lenny-i386/result/sdlmame_0124-1.1_i386.changes
(...)
Et effectuer les mises à jour avec "reprepro" par l'exécution du fichier:
$ ./includedeb.sh
Vérifier que tout est à sa place avec la commande:
$ reprepro dumpreferences
etch|contrib|amd64 pool/contrib/e/ekd/ekd_1.3-1-1_all.deb etch|contrib|i386 pool/contrib/e/ekd/ekd_1.3-1-1_all.deb dapper|contrib|amd64 pool/contrib/e/ekd/ekd_1.3-1-1ubuntu1_all.deb dapper|contrib|i386 pool/contrib/e/ekd/ekd_1.3-1-1ubuntu1_all.deb edgy|contrib|amd64 pool/contrib/e/ekd/ekd_1.3-1-1ubuntu1_all.deb edgy|contrib|i386 pool/contrib/e/ekd/ekd_1.3-1-1ubuntu1_all.deb feisty|contrib|amd64 pool/contrib/e/ekd/ekd_1.3-1-1ubuntu1_all.deb feisty|contrib|i386 pool/contrib/e/ekd/ekd_1.3-1-1ubuntu1_all.deb lenny|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1.1.diff.gz lenny|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1.1.dsc lenny|contrib|i386 pool/contrib/s/sdlmame/sdlmame_0124-1.1_i386.deb etch|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1.diff.gz etch|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1.dsc etch|contrib|i386 pool/contrib/s/sdlmame/sdlmame_0124-1_i386.deb edgy|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.0.diff.gz edgy|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.0.dsc edgy|contrib|i386 pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.0_i386.deb feisty|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.1.diff.gz feisty|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.1.dsc feisty|contrib|i386 pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.1_i386.deb gutsy|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.2.diff.gz gutsy|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.2.dsc gutsy|contrib|i386 pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.2_i386.deb hardy|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.3.diff.gz hardy|contrib|source pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.3.dsc hardy|contrib|i386 pool/contrib/s/sdlmame/sdlmame_0124-1ubuntu1.3_i386.deb edgy|contrib|source pool/contrib/s/sdlmame/sdlmame_0124.orig.tar.gz etch|contrib|source pool/contrib/s/sdlmame/sdlmame_0124.orig.tar.gz feisty|contrib|source pool/contrib/s/sdlmame/sdlmame_0124.orig.tar.gz gutsy|contrib|source pool/contrib/s/sdlmame/sdlmame_0124.orig.tar.gz hardy|contrib|source pool/contrib/s/sdlmame/sdlmame_0124.orig.tar.gz lenny|contrib|source pool/contrib/s/sdlmame/sdlmame_0124.orig.tar.gz
Ok, lancer la commande suivante qui effectuera un rsync sur le dépôt apt.ludomatic.fr:
$ ./updatesrv.sh
Rendez-vous sur apt.ludomatic.fr http://apt.ludomatic.fr :)
Compilation sur un amd64 émulé depuis mon i386 hôte via qemu/pbuilder
Création de la machine après avoir correctement lié "~/bin/@qemubuilder-lenny-amd64" et configuré "~/dev/deb/pbuilder/lenny-amd64/qemubuilder.lenny-amd64.config":
$ qemubuilder-lenny-amd64 create
Login avec sauvegarde à la sortie en ajoutant les principaux outils de compilation et utilitaires (mettre le minimum):
$ qemubuilder-lenny-amd64 login --save-after-login
amd64# aptitude install autoconf automake fakeroot dh-make debhelper devscripts gnupg lintian quilt sudo vim mc
amd64# adduser ludo
amd64# exit
amd64# aptitude install autoconf automake fakeroot dh-make debhelper devscripts gnupg lintian quilt sudo vim mc
amd64# adduser ludo
amd64# exit
Chrooter dans le fichier Qemu:
$ sudo mount -o loop ~/dev/deb/pbuilder/lenny-amd64/base-amd64.qemu ~/dev/deb/pbuilder/mount.qemu
Copier dans l'environnement amd64 les scripts pbuilders perso:
/bin/@pbuilder-etch-amd64
/bin/@pbuilder-lenny-amd64
/bin/@pbuilder-squeeze-amd64
/bin/pbuilder/pbuilder-dist-arch
/bin/@pbuilder-lenny-amd64
/bin/@pbuilder-squeeze-amd64
/bin/pbuilder/pbuilder-dist-arch
PATH="$HOME/bin:$PATH"
alias ll='ls -la'
alias lh='ls -lah'
export EDITOR='mcedit'
export DEBNAME='Ludovic Lechapt'
export DEBEMAIL=ludomatic@gmail.com
export EMAIL=ludomatic@gmail.com
export DEBFULLNAME='Ludovic Lechapt'
alias ll='ls -la'
alias lh='ls -lah'
export EDITOR='mcedit'
export DEBNAME='Ludovic Lechapt'
export DEBEMAIL=ludomatic@gmail.com
export EMAIL=ludomatic@gmail.com
export DEBFULLNAME='Ludovic Lechapt'
Copier les fichiers et dossiers précédemment crées (lors du paquet i386) dans "~/dev/deb/pbuilder/mount.qemu/root/dev/deb/sdlmame/[VERSION]":
sdlmame-[VERSION]/
build.sh
sdlmame_[0132].orig.tar.gz
Copier la clé gnupg (dossier des clés gpg)build.sh
sdlmame_[0132].orig.tar.gz
Penser à démonter avant de lancer la machine virtuelle:
$ sudo umount ~/dev/deb/pbuilder/mount.qemu
On se lance l'environnement Qemu ainsi préparé:
$ qemubuilder-lenny-amd64 login
amd64# su - ludo
amd64# su - ludo
Et on construit le paquet sdlmame pour etch amd64 (aciennement /mnt/bridge/0132/sdlmame-0132# dpkg-buildpackage -b) avec ce script exécuté depuis le dossier contenant le orig.tar.gz:
ludo@amd64$ cd ~/dev/deb/sdlmame/[VERSION]/
ludo@amd64$ ./build.sh
ludo@amd64$ ./build.sh
Fichier ~/dev/deb/sdlmame/[VERSION]/build.sh
#!/bin/bash
export PTR64=1
export OPTIMIZE=0
VER="0132";
DIST="etch";
#DIST="lenny";
#DIST="squeeze";
PACKVER="1"; # a incrémenter si modifs sur le package
SUBVER="1"; # a incrémenter si update des sources upstream sans changer le packaging
#ARCH="i386";
ARCH="amd64";
rm -f ./*diff.gz ./*.dsc ./*.build ./*.changes
cd sdlmame-$VER
debuild -S -sa -us -uc && pbuilder-$DIST-$ARCH build ../sdlmame_$VER-${PACKVER}${DIST}${SUBVER}.dsc && lintian -iv /var/cache/pbuilder/$DIST-$ARCH/result/sdlmame_$VER-${PACKVER}${DIST}${SUBVER}_$ARCH.changes
debsign -S /var/cache/pbuilder/$DIST-$ARCH/result/sdlmame_$VER-$PACKVER${DIST}${SUBVER}_$ARCH.changes
export PTR64=1
export OPTIMIZE=0
VER="0132";
DIST="etch";
#DIST="lenny";
#DIST="squeeze";
PACKVER="1"; # a incrémenter si modifs sur le package
SUBVER="1"; # a incrémenter si update des sources upstream sans changer le packaging
#ARCH="i386";
ARCH="amd64";
rm -f ./*diff.gz ./*.dsc ./*.build ./*.changes
cd sdlmame-$VER
debuild -S -sa -us -uc && pbuilder-$DIST-$ARCH build ../sdlmame_$VER-${PACKVER}${DIST}${SUBVER}.dsc && lintian -iv /var/cache/pbuilder/$DIST-$ARCH/result/sdlmame_$VER-${PACKVER}${DIST}${SUBVER}_$ARCH.changes
debsign -S /var/cache/pbuilder/$DIST-$ARCH/result/sdlmame_$VER-$PACKVER${DIST}${SUBVER}_$ARCH.changes