[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ next ]


APT HOWTO
Chapter 5 - Building from source


5.1 Κατεβάζοντας πακέτα κώδικα

Στο ελεύθερο λογισμικό συνηθίζεται η μελέτη πηγαίου κώδικα ή και η διόρθωση προβληματικού κώδικα. Για να το κάνετε, θα πρέπει να κατεβάσετε τον πηγαίο κώδικα του προγράμματος. Το σύστημα APT παρέχει έναν εύκολο τρόπο για να αποκτήσετε τον πηγαίο κώδικα των προγραμμάτων που περιέχονται στη διανομή, συμπεριλαμβάνοντας όλα τα αρχεία που χρειάζονται για τη δημιουργία ενός αρχείου .deb για το πρόγραμμα.

Επίσης συνηθισμένη χρήση των πηγαίων κωδικών του Debian είναι η προσαρμογή μιας πιο πρόσφατης έκδοσης ενός προγράμματος, από την ασταθή διανομή, για παράδειγμα, για χρήση με την σταθερή διανομή. Η μεταγλώττιση ενός πακέτου που δεν ανήκει στην σταθερή διανομή θα δημιουργήσει πακέτα .deb με εξαρτήσεις προσαρμοσμένες ώστε να ταιριάζουν τα διαθέσιμα πακέτα της διανομής αυτής.

Για να το πετύχετε αυτό, η καταχώρηση deb-src στο αρχείο σας /etc/apt/sources.list θα πρέπει να κατευθυνθεί στην ασταθή, καθώς και να είναι ενεργοποιημένη (να μην αποτελεί σχόλιο). Δείτε τον τομέα Το αρχείο /etc/apt/sources.list, Section 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 packagename

Αυτή θα κατεβάσει τρία αρχεία: ένα .orig.tar.gz, ένα .dsc και ένα .diff.gz. Σε περίπτωση που έχετε πακέτα που έχουν δημιουργηθεί ειδικά για το Debian, το τελευταίο αυτών των αρχείων δεν κατεβάζεται και το πρώτο συνήθως δε θα έχει το "orig" στο όνομά του.

Το .dsc αρχείο χρησιμοποιείται από το dpkg-source για το ξεπακετάρισμα του πηγαίου πακέτου στον κατάλογο packagename-version. Μέσα σε κάθε κατεβασμένο πηγαίο πακέτο υπάρχει ένας κατάλογος debian/ που περιέχει τα αρχεία που είναι απαραίτητα για τη δημιουργία του πακέτου .deb.

Για να χτίσετε αυτόματα το πακέτο όταν έχει κατέβει, απλά προσθέστε την παράμετρο -b στην γραμμή εντολής,ως εξής:

     # apt-get -b source packagename

Αν αποφασίσετε να μην δημιουργήσετε το πακέτο .deb την ώρα του κατεβάσματος, μπορείτε να το δημιουργήσετε αργότερα εκτελώντας:

     # 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 Εγκαθιστώντας πακέτα, Section 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 Πακέτα απαραίτητα για τη μεταγλώττιση ενός πηγαίου πακέτου, Section 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, Section 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.

Υπάρχει διαφορά ανάμεσα στη μέθοδο source του apt-get και τις άλλες μεθόδους του. Η μέθοδος source μπορεί να χρησιμοποιηθεί από απλούς χρήστες, χωρίς να απαιτεί κάτι ιδιαίτερο από πλευράς διαχειριστή. Τα αρχεία κατεβάζονται στον κατάλογο από τον οποίο εκτελέστηκε η εντολή apt-get source package.


5.2 Πακέτα απαραίτητα για τη μεταγλώττιση ενός πηγαίου πακέτου

Φυσιολογικά, συγκεκριμένες επικεφαλίδες και κοινόχρηστες βιβλιοθήκες πρέπει να είναι διαθέσιμες ώστε να είναι δυνατή η μεταγλώττιση ενός πηγαίου πακέτου. Όλα τα πηγαία πακέτα έχουν ένα πεδίο στα αρχεία ελέγχου τους που ονομάζεται 'Build-Depends:' το οποίο δηλώνει ποια επιπλέον πακέτα χρειάζονται ώστε να χτιστεί το πακέτο από τον πηγαίο κώδικα.

Το APT έχει έναν απλό τρόπο για να κατεβάζει αυτά τα πακέτα. Απλώς εκτελέστε την εντολή apt-get build-dep package, όπου `package' είναι το όνομα του πακέτου που που θα χτίσετε. Για παράδειγμα:

     # 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]

Τα πακέτα που θα εγκατασταθούν είναι τα πακέτα που χρειάζονται ώστε το πακέτο gmc να χτιστεί σωστά. Είναι σημαντικό να παρατηρήσετε ότι η εντολή αυτή δεν ψάχνει για το πηγαίο πακέτο του προγράμματος προς μεταγλώττιση. Επομένως θα χρειαστεί να εκτελέσετε την εντολή apt-get source ξεχωριστά για να το αποκτήσετε.

Αν το μόνο που θέλετε είναι να ελέγξετε ποια πακέτα χρειάζονται για να χτίσετε ένα δοθέν πακέτο, υπάρχει μια παραλλαγή της εντολής apt-cache show (δείτε τον τομέα Παίρνοντας πληροφορίες για πακέτα., Chapter 6), η οποία θα παρουσιάσει, ανάμεσα σε άλλες πληροφορίες, την γραμμή Build-Depends που παρουσιάζει τα πακέτα αυτά σε λίστα.

     # apt-cache showsrc package

5.3 Διαχείριση Πακέτων

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 Κατεβάζοντας πακέτα κώδικα, Section 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.

Εδώ μπαίνει στο παιγνίδι η εντολή equivs. Για να τη χρησιμοποιήσετε, εγκαταστήστε το πακέτο με αυτό το όνομα. Αυτό που κάνει είναι να δημιουργεί ένα άδειο πακέτο που έχει τη δυνατότητα να ικανοποιεί τις εξαρτήσεις, κάνοντας το σύστημα πακέτων να πιστεύει ότι οι εξαρτήσεις είναι ικανοποιημένες.

Πριν αρχίσουμε, είναι καλό να σας θυμήσουμε ότι υπάρχουν ασφαλέστεροι τρόποι να μεταγλωττίσετε ένα πρόγραμμα, ήδη πακεταρισμένο, για το Debian με διαφορετικές παραμέτρους, και δεν θα πρέπει να χρησιμοποιείτε την εντολή equivs για να αντικαταστήσετε τις εξαρτήσεις εαν δεν ξέρετε. Δείτε τον τομέα Building from source, Chapter 5 για περισσότερες πληροφορίες.

Ας συνεχίσουμε με το παράδειγμα του MTA. Μόλις εγκαταστήσατε το νέο μεταγλωττισμένο postfix, το οποίο συνεχίζει με την εγκατάσταση του πακέτου mutt. Ξαφνικά αντιλαμβάνεστε ότι το mutt θέλει να εγκαταστήσει ένα άλλο MTA. Αλλά εσείς έχετε ήδη το δικό σας.

Πηγαίνετε σε κάποιο φάκελο (/tmp, για παράδειγμα) και εκτελέστε:

     # equivs-control name

Αντικαταστήστε το name με το όνομα του αρχείου ελέγχου που θέλετε να δημιουργήσετε. Το αρχείο θα δημιουργηθεί ώς εξής:

     Section: misc
     Priority: optional
     Standards-Version: 3.0.1
     
     Package: <enter package name; defaults to equivs-dummy>
     Version: <enter version here; defaults to 1.0>
     Maintainer: <your name and email address; defaults to username>
     Pre-Depends: <packages>
     Depends: <packages>
     Recommends: <packages>
     Suggests: <package>
     Provides: <(virtual)package>
     Architecture: all
     Copyright: <copyright file; defaults to GPL2>
     Changelog: <changelog file; defaults to a generic changelog>
     Readme: <README.Debian file; defaults to a generic one>
     Extra-Files: <additional files for the doc directory, comma separated>
     Description: <short description; defaults to some wise words>
      long description and info
      .
      second paragraph

Για να κάνουμε αυτό που θέλουμε πρέπει να το τροποποιήσουμε. Ρίξτε μια ματιά στη διαμόρφωση των πεδίων και στις περιγραφές τους, δεν υπάρχει λόγος να εξηγήσουμε το καθετί εδώ, ας κάνουμε ότι χρειάζεται:

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

Ναι, αυτό είναι όλο. Το πακέτο mutt εξαρτάται από το πακέτο mail-transport-agent, που είναι ένα εικονικό πακέτο παρεχόμενο από όλους τους MTA, μπορούσαμε απλά να ονομάσουμε το πακέτο mail-transport-agent, αλλά προτιμήσαμε να χρησιμοποιήσουμε το σχήμα του εικονικού πακέτου, χρησιμοποιώντας την εντολή 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.

Τώρα μένει μόνο να χτίσετε το πακέτο:

     # equivs-build name
     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 `name' in `../name_1.0_all.deb'.
     
     The package has been created.
     Attention, the package has been created in the current directory,

Και εγκαταστήστε το αρχείο .deb που προκύπτει.

Όπως μπορείτε να δείτε, υπάρχουν αρκετοί τρόποι χρήσης της equivs. Μπορείτε να δημιουργήσετε ακόμα και ένα πακέτο my-favorites, που εξαρτάται από τα προγράμματα που συνήθως κάνετε εγκατάσταση, για παράδειγμα. Απλά ελευθερώστε τη φαντασία σας, αλλά να είστε προσεκτικοί.

Είναι σημαντικό να σημειώσετε ότι υπάρχουν παραδείγματα αρχείων ελέγχου στο αρχείο /usr/share/doc/equivs/examples. Δείτε τα.


[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ next ]


APT HOWTO

2.0.2 - October 2006

Gustavo Noronha Silva kov@debian.org
Aπόδοση στα Ελληνικά Στεφανάτος Κώστας costas@step.gr