# $Id: debian-backporting.txt 25049 2008-07-07 11:07:07Z thijs $ # $URL: https://infix.uvt.nl/its-id/trunk/sources/uvt-unix-doc/debian-backporting.txt $ Hoe maak je een backport van een Debian package door Roland van Hout en Joost van Baal Auteursrecht ------------ Copyright (C) 2006 Tilburg University http://www.uvt.nl/ . Dit document is vrij; je mag het verspreiden en/of wijzigen onder de voorwaarden van de GNU GPL, zie http://www.gnu.org/copyleft/gpl.html. Er is GEEN GARANTIE. This document is free; you can redistribute it and/or modify it under the terms of the GNU GPL, see http://www.gnu.org/copyleft/gpl.html . There is NO WARRANTY. Inleiding --------- We gaan een package uit testing of unstable of experimental backporten naar stable (sarge). We nemen aan dat je systeem een clean "stable" systeem is. Dit document wordt gepubliceerd op http://non-gnu.uvt.nl/pub/uvt-unix-doc/debian-backporting.txt . Voorwerk -------- Zoek eerst op welke versies van je package (we gebruiken hier courier als voorbeeld) in Debian zitten. Gebruik hier http://packages.debian.org/ voor; bijv http://packages.debian.org/courier . Verder ga je ook na welke versies door upstream aangeboden worden. In dit geval op de site http://www.courier-mta.org/. Vervolgens zie je op packages.debian.org in welke debian releases welke versie zit; in dit geval zie je dit door http://pdo.debian.net/cgi-bin/search_packages.pl?exact=0&searchon=names&suite=all&case=insensitive§ion=all&keywords=courier&arch=any te browsen. Haal de originel Debian source op --------------------------------- Dan verander je je /etc/apt/sources.list en voegt de debian release toe; in dit geval "experimental". Dus: # echo deb-src http://ftp.surfnet.nl/os/Linux/distr/debian experimental main >> /etc/apt/sources.list . Maak je systeem bewust van deze nieuwe source packages: # aptitude update Maak een playground $ mkdir courier $ cd courier En download de originele Debian sources $ apt-get source courier-authlib-ldap Deze haalt dan automagisch het courier-authlib Debian sourcepackage op waaruit het Debian binary package courier-authlib-ldap gemaakt kan worden. Je krijgt dan iets als: $ ls -l total 3316 drwxr-xr-x 16 rvhout rvhout 8192 2006-02-09 15:56 courier-authlib-0.58/ -rw-r--r-- 1 rvhout rvhout 34389 2006-01-11 11:47 courier-authlib_0.58-0.3.diff.gz -rw-r--r-- 1 rvhout rvhout 954 2006-01-11 11:47 courier-authlib_0.58-0.3.dsc -rw-r--r-- 1 rvhout rvhout 3342115 2006-01-05 15:17 courier-authlib_0.58.orig.tar.gz in je directory waarbij opgemerkt dient te worden dat a) de diff.gz de wijzigingen van de debian maintainer bevat, b) de dsc een beschrijving van het pakket bevat en c) de orig.tar.gz de orginele upstream tarball is en last but not least d) de directory courier-authlib-0.58/ de uitgepakte tarball bevat waarin reeds alle diffs aangebracht. Installeer buildtools --------------------- OK, nu kun je wat minimale aanpassingen aan het sourcepackage gaan maken. Maar eerst nog ff wat tooltjes installeren. We zullen "debchange" en, voor het echte bouwen, "debuild" gebruiken. $ apt-cache search debchange Het blijkt dat debchange (en ook debuild) door "devscripts" geleverd worden; dus: # aptitude install devscripts (En nu we toch bezig zijn is het zinvol ook meteen "lintian" te installeren: # aptitude install lintian .) Documenteer je backport-poging in het package --------------------------------------------- Nu: $ cd courier-authlib-0.58/ $ debchange -i Verander het versienummer, zet de reden achter het * en verbeter evt je email adres; dus iets als courier-authlib (0.58-0.3a0.sarge.1) experimental; urgency=low * Backport to sarge. -- Roland van Hout Thu, 9 Feb 2006 16:09:57 +0100 Je houdt het versienummer gelijk aan die van het source package maar voegt er iets aan toe als a0.sarge.1. Houdt deze file precies zoals ie was tot op de spatie nauwkeurig want de tools zijn hier kritisch op. Bouw! ----- Nu kunnen we kijken of we het binary package kunnen bouwen: Draai het build script $ debuild -us -uc dpkg-buildpackage: source package is courier-authlib dpkg-buildpackage: source version is 0.58-0.3a0.sarge.1 dpkg-buildpackage: source maintainer is Roland van Hout dpkg-buildpackage: host architecture is i386 dpkg-checkbuilddeps: Unmet build dependencies: libmysqlclient-dev | libmysqlclient14-dev libpam0g-dev libgdbm-dev | libgdbmg1-dev libldap-dev libsasl2-dev | libsasl-dev libpq-dev | postgresql-dev libtool libltdl3-dev dpkg-buildpackage: Build dependencies/conflicts unsatisfied; aborting. dpkg-buildpackage: (Use -d flag to override.) debuild: fatal error at line 765: dpkg-buildpackage failed! OK, we missen een stel build-dependencies. Het |-teken betekent dat je de één of de andere library kan installeren. Voer dus uit: # aptitude install libmysqlclient-dev libpam0g-dev libgdbm-dev debhelper libldap-dev libsasl-dev libpq-dev libtool libltdl3-dev procps Reading Package Lists... Done Building Dependency Tree... Done Package libmysqlclient-dev is a virtual package provided by: libmysqlclient12-dev 4.0.24-10sarge1 libmysqlclient10-dev 3.23.56-3 You should explicitly select one to install. E: Package libmysqlclient-dev has no installation candidate Omdat de mysql versie ook 4.0.24 is onder sarge nemen we die mysql client. Hij blijft zeuren dus doen we eerst effe de libpg-dev eruit en de libsasl-dev # apt-get install libmysqlclient12-dev libpam0g-dev libgdbm-dev debhelper libldap-dev libtool libltdl3-dev procps Reading Package Lists... Done Building Dependency Tree... Done debhelper is already the newest version. Note, selecting libldap2-dev instead of libldap-dev procps is already the newest version. Suggested packages: libtool-doc g77 fortran77-compiler gcj The following NEW packages will be installed: libgdbm-dev libldap2-dev libltdl3-dev libmysqlclient12-dev libpam0g-dev libtool 0 upgraded, 6 newly installed, 0 to remove and 3 not upgraded. Need to get 3932kB of archives. After unpacking 12.1MB of additional disk space will be used. Get:1 http://ftp.nl.debian.org stable/main libgdbm-dev 1.8.3-2 [47.5kB] Get:2 http://ftp.nl.debian.org stable/main libltdl3-dev 1.5.6-6 [17.5kB] Get:3 http://ftp.nl.debian.org stable/main libpam0g-dev 0.76-22 [113kB] Get:4 http://ftp.nl.debian.org stable/main libtool 1.5.6-6 [607kB] Get:5 http://ftp.nl.debian.org stable/main libldap2-dev 2.1.30-8 [226kB] Get:6 http://ftp.nl.debian.org stable/main libmysqlclient12-dev 4.0.24-10sarge1 [2921kB] Fetched 3932kB in 20s (191kB/s) Selecting previously deselected package libgdbm-dev. (Reading database ... 92740 files and directories currently installed.) Unpacking libgdbm-dev (from .../libgdbm-dev_1.8.3-2_i386.deb) ... Selecting previously deselected package libltdl3-dev. [...] Setting up libgdbm-dev (1.8.3-2) ... [...] Setting up libmysqlclient12-dev (4.0.24-10sarge1) ... Dan de alternatieven voor libsasl-dev en libpq-dev # apt-get install postgresql-dev libsasl2-dev Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: libssl-dev Suggested packages: postgresql-doc postgresql pgdocs libpqxx-dev libpgeasy-dev heimdal-dev Recommended packages: libkrb5-dev The following NEW packages will be installed: libsasl2-dev libssl-dev postgresql-dev 0 upgraded, 3 newly installed, 0 to remove and 3 not upgraded. Need to get 3311kB of archives. After unpacking 10.5MB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://ftp.nl.debian.org stable/main libsasl2-dev 2.1.19-1.5 [246kB] Get:2 http://ftp.nl.debian.org stable/main libssl-dev 0.9.7e-3sarge1 [2552kB] Get:3 http://ftp.nl.debian.org stable/main postgresql-dev 7.4.7-6sarge1 [513kB] Fetched 3311kB in 9s (362kB/s) Selecting previously deselected package libsasl2-dev. (Reading database ... 93082 files and directories currently installed.) Unpacking libsasl2-dev (from .../libsasl2-dev_2.1.19-1.5_i386.deb) ... [...] Setting up postgresql-dev (7.4.7-6sarge1) ... Het kan natuurlijk zijn dat de gewenste libraries in jouw versie van Debian niet aanwezig zijn; dan moet je dit hele verhaal herhalen met die library als de te bouwen target, dit is natuurlijk een recursief process het kan dus altijd dieper gaan, we hopen dat we niet de C library hoeven te bouwen. Dan gaan we opnieuw een bouw-poging doen: $ debuild -us -uc De output zal ik jullie besparen, de build lijkt helemaal goed te gaan; als dit fout gaat wordt het echt harig, wat dan te doen weet ik (nog) niet. Check je binary packages ------------------------ Dan $ ls -ltr .. Als het goed is zie je een hele reeks van debjes (misschien ook maar 1 dat ligt aan wat je aan het bouwen bent). Ook is er een nieuwe .dsc en nieuwe .diff ontstaan waar in vergelijking met de oude .diff alleen de wijziging aan de changelog in staat. Bekijk je build output en eventuele lintian warnings goed. Misschien kun je er een paar wel zelf fixen. Je kunt de hele output nalezen in het ../*.build file. Draai ook effe $ debc | less Dan zie je de dependencies van je nieuwe debjes en de inhoud. Gebruik en/of publiceer je backport ----------------------------------- Je mooie nieuwe debjes kun je met dpkg -i installeren; in ons geval b.v. # dpkg -i courier-authlib-pipe_0.58-0.3a0.sarge.1_i386.deb . (Het kan nu zijn dat dpkg -i niet wil omdat een ander binary package niet geïnstalleerd is.) Nu kun je de .diff.gz, .dsc en .deb's naar een apt-able archive uploaden, als je die eentje hebt. Hieronder volgt later een stuk om eea op non-gnu.uvt.nl te zetten waardoor je het spul met apt-get of aptitude kan installeren; deze pakt automagisch de dependancies mee. Meer informatie --------------- Uiteraard is er vreselijk veel informatie over hoe Debian packages aan te passen, te backporten en ook over hoe ze helemaal zelf te maken. Hier wat links. Sylvain Beucler's notes on Debian Backports http://doc.cliss21.com/index.php?title=Backports a HOWTO on customizing Debian packages http://familiasanchez.net/~roberto/howtos/debcustomize Andreas Tille's presentation on Debian package development (in German) http://people.debian.org/~tille/talks/200609_mpi/ Debian New Maintainers' Guide http://www.debian.org/doc/maint-guide/ Debian Developer's Reference http://www.debian.org/doc/developers-reference/ Debian Women PackagingTutorial http://women.alioth.debian.org/wiki/index.php/English/PackagingTutorial Matthew Palmer's Debian Mentors FAQ http://people.debian.org/~mpalmer/debian-mentors_FAQ.html Debian Women notes on MaintainerScripts http://women.alioth.debian.org/wiki/index.php/English/MaintainerScripts Als je je dieper in dit onderwerp wil verdiepen, kun je nog kijken naar: Debian Policy Manual http://www.debian.org/doc/debian-policy/ CDBS Documentation https://perso.duckcorp.org/duck/cdbs-doc/cdbs-doc.xhtml The debhelper package http://packages.debian.org/debhelper http://doc.mdcc.cx/cgi-bin/dwww?type=man&location=/usr/share/man/man7/debhelper.7.gz Miriam Ruiz's instructions on how to build a package without using a helper http://women.alioth.debian.org/wiki/index.php/English/BuildingWithoutHelper En als je er dan _nog_ niet genoeg van hebt, kijk dan ook nog even naar: More (links to Developer Resources), from Ubuntu https://wiki.ubuntu.com/DeveloperResources