[ anterior ] [ Continguts ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ següent ]


APT HOWTO
Capítol 5 - Building from source


5.1 Descàrrega de paquets font

És molt comú en el món de programari lliure l'estudi del codi font o fer correccions a codi erroni. Per a fer això, necessitareu descarregar la font del programa. El sistema APT proveeix d'una senzilla manera per a obtenir el codi font de la majoria de programes continguts en la distribució, inclosos tots els fitxers necessaris per a crear un .deb per al programa.

Un altre ús comú de les fonts de Debian és el d'adaptar una versió més recent d'un programa, des de la distribució unstable, per exemple, per a usar-lo amb la distribució stable. La compilació d'un paquet dintre de stable generarà fitxers .deb amb les dependències ajustades per a coincidir amb els paquets disponibles en dita distribució.

Per aconseguir això, l'entrada deb-src en el vostre /etc/apt/sources.list haurà d'apuntar cap a unstable. Aquesta haurà d'estar habilitada (sense comentar). Consultar la secció El fitxer /etc/apt/sources.list, Secció 3.1.

Aptitude, the Debian Package Manager is mainly targeted at binary packages. To use source packages we'll need to use apt-get instead. To download a source package, you would use the following command:

     $ apt-get source nom_paquet

Això us descarregarà tres fitxers: Un .orig.tar.gz, un .dsc i un .diff.gz. En el cas de paquets fets específicament per Debian, l'últim d'aquests fitxers no serà descarregat i el primer usualment no tindrà "orig" en el nom.

El fitxer .dsc és usat per dpkg-source per a desempaquetar la font del paquet en el directori nompaquet-versió. Amb cada paquet font descarregat existeix un directori debian/ que conté els fitxers necessaris per a la creació del paquet .deb corresponent.

Per a construir automàticament el paquet que s'està descarregant, tan sols heu d'afegir -b a la línia de comandaments, d'aquesta manera:

     $ apt-get -b source nom_paquet

Si decidiu no crear el .deb en temps de descàrrega, podreu crear-lo més tard executant:

     $ dpkg-buildpackage -rfakeroot -uc -b

Notice that to build most packages you'll need at least the following packages: devscripts, dpkg-dev, debhelper, fakeroot, take a look at Instal·lació de paquets, Secció 4.4 and install them before proceeding. Most packages will also depend on compilation tools, so it may be useful to install the build-essential package as well. Other packages may be needed, take a look at Paquets necessaris per a compilar un paquet font, Secció 5.2 for more information.

To install the package built by the commands above one must use the package manager directly. Take a look at Installing manually downloaded or locally created debian packages, Secció 4.5. A useful tool is provided by the devscripts package: debi. If you run debi from inside the source package directory it will look for the .changes file at the parent directory to discover what are the binary packages the package produces and will run dpkg to install all of them. While this is not very useful if your source package produces conflicting packages, it might be in most circunstances. Of course you need root powers in order to perform this.

Hi ha una diferència entre el mètode apt-get source i les seves altres opcions. El mètode source pot ser usat per usuaris normals, sense necessitar poders especials de root. Els fitxers són descarregats al directori des del que es crida al comandament apt-get source package.


5.2 Paquets necessaris per a compilar un paquet font

Normalment, és necessària la presència de capçaleres o biblioteques compartides per a que un paquet font siga compilat. Tots els paquets font tenen un camp en els seu fitxer de control anomenat "Build-Depends:" el qual indica quins paquets addicionals són necessaris per a que el paquet siga construït des de la font.

APT té un mode simple de descarregar aquests paquets. Simplement executeu apt-get build-dep paquet, a on "paquet" serà el nom del paquet que aneu a construir. Per exemple:

     # apt-get build-dep gmc
     Reading Package Lists... Done
     Building Dependency Tree... Done
     The following NEW packages will be installed:
       comerr-dev e2fslibs-dev gdk-imlib-dev imlib-progs libgnome-dev libgnorba-dev
       libgpmg1-dev
     0 packages upgraded, 7 newly installed, 0 to remove and 1  not upgraded.
     Need to get 1069kB of archives. After unpacking 3514kB will be used.
     Do you want to continue? [Y/n]

Els paquets que seran instal·lats són els necessaris per a construir gmc correctament. És important fer notar que aquest comandament no cerca el paquet font del programa per a ser compilat. Per a obtenir-lo, llavors necessitareu executar apt-get source per separat.

Si tot el que voleu és comprovar quins paquets són necessaris per a construir un paquet en concret, hi ha una variant del comandament apt-cache show (consultar Obtenir informació quant als paquets., Capítol 6, el qual mostra, entre d'altre informació, la línia Build-Depends que està llistada en aquests paquets.

     # apt-cache showsrc paquet

5.3 Tracte amb els paquets

If you want to build a package for debuging purposes to, for example, report a bug -- or fix one, you can use simple environment variables that are supported by most Debian packages.

To build a package which contains unstriped binaries[6] all you need to do is prefix it with DEB_BUILD_OPTIONS=nostrip. Optimizations can also make debuging harder, so you can disable them by adding the noopt string to the DEB_BUILD_OPTIONS variable too. Example:

     $ dpkg-buildpackage -rfakeroot -uc -b

5.4 Customizing package build options

If what you want is to customize the way the package is built you'll have to go about editing the debian/rules file. This means: inside the main directory created when the source package is extracted there will be a debian directory, which contains many files. One of them is special: the rules file.

This file is usually a Makefile that has targets to configure, build, install and create the package. For example, if I want to have the luola[7] built without sound I can, after downloading and extracting its source edit the debian/rules file that looks like this:

     [...]
     configure: configure-stamp
     configure-stamp:
     	dh_testdir
     	# Add here commands to configure the package.
     	./configure $(confflags) \
     		--prefix=/usr \
     		--mandir=share/man \
     		--infodir=share/info \
     		--datadir=share/games \
     		--bindir=games \
     		--enable-sound
     #		 --enable-sdl-gfx	
     
     	touch configure-stamp
     [...]

See the --enable-sound switch? If I remove it or replace it with --disable-sound and then rebuild the package using the technique described on Descàrrega de paquets font, Secció 5.1 I'll have a luola package that is built with no sound.

If you really want to work with source packages on a daily basis I would suggest reading the Debian New Maintainers Guide and the Debian Policy, mainly. Other documentation available from the Debian Developers Corner may be useful too.


5.5 But hey, I do not want to use the Debian stuff!

Sometimes, people want to use a specific version of a program available only on source code, with no Debian package. But the packaging system can be a trouble when doing this. Suppose you want to compile a new version of your email server. All is fine, but many packages in Debian depend on an MTA (Mail Transfer Agent). Since you installed something you compiled by yourself, the packaging system doesn't know about it.

Aquí és a on equivs entra en escena. Per a usar-lo, instal·leu el paquet amb aquest nom. El que fa és crear un paquet buit que possibilita el satisfer totes les dependències, fent que el sistema de paquets doni per satisfetes dites dependències.

Abans de començar és una bona cosa el recordar-vos que hi ha maneres més segures de compilar un programa que ja està empaquetat per a Debian amb diferents opcions i que no hauríeu d'usar equivs per a reemplaçar dependències sinó sabeu el que esteu fent. Per a més informació consulteu la secció Building from source, Capítol 5.

Ara continuem amb l'exemple del MTA, tot just acabeu d'instal·lar el vostre nou postfix compilat i aneu a instal·lar mutt. De sobte descobriu que mutt vol instal·lar un altre MTA. Però ja teniu llest el vostre.

Aneu a algun directori (/tmp, per exemple) i executeu:

     # equivs-control nom

Substituïu nom pel nom del fitxer de control que voleu crear. El fitxer serà cerat de la següent manera:

     Section: misc
     Priority: optional
     Standards-Version: 3.0.1
     
     Package: <Introduir el nom del paquet; per defecte a equivs-dummy>
     Version: <Introduir la versió aquí; per defecte a 1.0>
     Maintainer: <El vostre nom in adreça de correu electrònic; per defecte al nom d'usuari>
     Pre-Depends: <Paquets>
     Depends: <Paquets>
     Recommends: <Paquets>
     Suggests: <Paquet>
     Provides: <Paquet (virtual)>
     Architecture: all
     Copyright: <Fitxer de copyright; per defecte a GPL2>
     Changelog: <Fitxer de canvis; per defecte al genèric changelog>
     Readme: <Fitxer README.Debian; per defecte a un de genèric>
     Extra-Files: <Fitxers addicionals per al directori doc, separats per comes>
     Description: <Descripció curta; per defecte a algunes paraules sabies>
      Descripció llarga i informació rellevant.
      .
      Segon paràgraf.

Nosaltres tan sols necessitarem modificar això per a fer el que vulguem. Feu un cop d'ull al format del camp i a les seves descripcions, no hi ha necessitat d'explicar-les una a una, anem a fer el que requerim:

     Section: misc
     Priority: optional
     Standards-Version: 3.0.1
     
     Package: mta-local
     Provides: mail-transport-agent

Sí, això és tot. mutt depèn de mail-transport-agent, que és un paquet virtual proveït per tots els MTA, aquí podria simplement anomenar al paquet mail-transport-agent, però prefereixo usar l'esquema de paquets virtuals, usant Provides.

The Conflicts and Replaces fields are needed, too, so that APT and dpkg will understand they should remove the currently installed MTA package in favour of the new one you're installing.

Ara només necessitareu construir el paquet:

     # equivs-build nom
     dh_testdir
     touch build-stamp
     dh_testdir
     dh_testroot
     dh_clean -k
     # Add here commands to install the package into debian/tmp.
     touch install-stamp
     dh_testdir
     dh_testroot
     dh_installdocs
     dh_installchangelogs
     dh_compress
     dh_fixperms
     dh_installdeb
     dh_gencontrol
     dh_md5sums
     dh_builddeb
     dpkg-deb: building package `nom' en `../nom_1.0_all.deb'.
     
     The package has been created.
     Attention, the package has been created in the current directory,

I instal·lar el .deb resultant.

Tal com podeu veure, hi ha molts usos per a equivs. Es pot crear un paquet els-meus-favorits, el qual dependrà dels programes que instal·leu normalment, per exemple. Simplement deixeu volar la imaginació, però amb cura.

És important apuntar que hi ha fitxers de control en /usr/share/doc/equivs/examples. Comproveu-los.


[ anterior ] [ Continguts ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ següent ]


APT HOWTO

2.0.2 - October 2006

Gustavo Noronha Silva kov@debian.org

Traduït per: Antoni Bella Perez bella5 AT teleline DOT es
Revisat per: Orestes Mas orestes AT tsc.upc DOT es