ABS - Το σύστημα δόμησης πακέτων στον Arch

Panayiotis | Πέμ, 04/17/2008 - 14:37 | 19' | 2

ABS - Arch Build System

Τι είναι το ABS. Το ABS είναι το σύστημα χτισίματος πακέτων στον Arch. Είναι ένα "ports-like" σύστημα για τη δημιουργία λογισμικού από πηγαίο κώδικα. Ενώ ο pacman είναι το εξειδικευμένο εργαλείο του Arch για την διαχείριση των δυαδικών πακέτων (συμπεριλαμβανομένων και των χτισμένων με ABS), το ABS είναι το εξειδικευμένο εργαλείο του Arch για την μετατροπή κώδικα σε εγκαταστάσιμο πακέτο (Pkg.tar.gz).

Τι είναι το ports-like σύστημα. Τα "Ports" είναι ένα σύστημα που χρησιμοποιείται από το FreeBSD, το οποίο επιτρέπει σε πηγαία πακέτα να μεταφορτώνονται, αποσυμπιέζονται, μετατρέπονται και εγκαθίστανται. Ένα "Port" είναι ένας μικρός κατάλογος στον υπολογιστή του χρήστη, που παίρνει το όνομα του από το αντίστοιχο λογισμικό που θα εγκατασταθεί, το οποίο περιέχει μερικά αρχεία με οδηγίες για τη λήψη και την εγκατάσταση ενός πακέτου από πηγαίο κώδικα, συνήθως με την πλοήγηση στον κατάλογο ή στο Port, όπου και κάνει "make" και "make install". Έτσι το σύστημα κατεβάζει, μετατρέπει και εγκαθιστά το επιθυμητό λογισμικό.

Το ABS είναι μια παρόμοια ιδέα. Το ABS αποτελείται από ένα κατάλογο σε σχήμα δέντρου (το ABS Tree), που βρίσκεται στο /var/abs, το οποίο περιέχει πολλούς υποκαταλόγους, ανά κατηγορία, και με ονόματα από τα αντίστοιχα προς χτίσιμο πακέτα. Αυτό το δέντρο αντιπροσωπεύει (αλλά δεν περιέχει) όλο το επίσημο λογισμικό του Arch που διατίθεται μέσω του συστήματος svn. Μπορούμε να αναφερόμαστε σε κάθε πακέτο-υποκατάλογο σαν "ABS", αλλά και σαν "port". Αυτά τα ABS, ή οι υποκατάλογοι, δεν περιέχουν το πακέτο λογισμικού, ούτε την πηγή, αλλά ένα PKGBUILD αρχείο, (μερικές φορές και κάποια άλλα αρχεία). Ένα PKGBUILD είναι μια απλή δέσμη ενεργειών - ένα αρχείο κειμένου που περιέχει τις οδηγίες επεξεργασίας και συσκευασίας καθώς και το URL του κατάλληλου κώδικα tarball που πρέπει να μεταφορτωθεί. Το σημαντικότερο συστατικό των ABS είναι τα PKGBUILDs.

Μια σύντομη ματιά. Δίνοντας την εντολή "abs" σαν root δημιουργούμε το δέντρο ABS, σε συγχρονισμό με το σύστημα svn. Έτσι αν θελήσουμε για παράδειγμα να χτίσουμε το nano από τη πηγή του, αντιγράφουμε το /var/abs/core/base/nano σε έναν κατάλογο κατασκευής, πηγαίνουμε στον κατάλογο κατασκευής και κάνουμε makepkg. Είναι τόσο απλό. Στη συνέχεια το makepkg θα προσπαθήσει να διαβάσει και να εκτελέσει τις οδηγίες που περιλαμβάνονται μέσα στο PKGBUILD. Η κατάλληλη πηγή tarball αυτόματα μεταφορτώνεται, αποσυμπιέζεται, μετατρέπεται, σύμφωνα με τις CFLAGS που διευκρινίζονται στο /etc/makepkg.conf και τέλος συμπιέζεται σε ένα πακέτο με επέκταση .pkg.tar.gz όπως ορίζεται στο PKGBUILD. Η εγκατάσταση γίνεται εύκολα με pacman -U nano.pkg.tar.gz. (ο pacman αναλαμβάνει επίσης και την απομάκρυνση του πακέτου). Το PKGBUILD και κάποια άλλα αρχεία, μπορούν να προσαρμοστούν για να ανταποκρίνονται στις ανάγκες μας, μπορούμε επίσης να επιλέξουμε να χρησιμοποιούμε τη λειτουργία ABS makepkg για να κάνουμε τα δικά μας πακέτα από εξωτερικές πηγές. (Δείτε το πρωτότυπο PKGBUILD και εγκαταστήστε τα αρχεία στο /var/abs/core/). Με το δέντρο ABS ενεργοποιημένο, έχουμε όλο το διαθέσιμο λογισμικό του Arch στα χέρια μας, για να δημιουργήσουμε από την πηγή τους και αυτόματα πακέτα της μορφής .pkg.tar.gz.

Επισκόπηση ABS. Ο όρος "ABS" μπορεί να χρησιμοποιηθεί σαν όρος ομπρέλα, δεδομένου ότι περιλαμβάνει και στηρίζεται σε αρκετά άλλα συστατικά. Επομένως, αν και όχι τεχνικά ακριβές, το "ABS" μπορεί να αναφέρεται με την ακόλουθη δομή σαν ένα πλήρες σετ εργαλείων:

* Το δέντρο ABS: Η δομή του καταλόγου ABS στο /var/abs/. Περιέχει πολλούς υποκαταλόγους, με ονόματα για όλο το διαθέσιμο λογισμικό του Arch svn, αλλά όχι και τα πακέτα.

* ABS: Ένα σύνολο εργαλείων για την ανάκτηση και το χτίσιμο των επίσημων Arch Linux PKGBUILDs.

* PKGBUILDs: Αρχεία κειμένων που βρίσκονται στους καταλόγους ABS, ή που είναι custom made, με οδηγίες για την δόμηση πακέτων και του URL των πηγών.

* makepkg: Εργαλείο εντολής κελύφους ABS που διαβάζει το PKGBUILDs, συντάσσει τις πηγές και δημιουργεί ένα .pkg.tar.gz.

* Pacman: Ο Pacman είναι απολύτως ανεξάρτητος, αλλά εμπλέκεται είτε από το makepkg είτε με το χέρι, για να εγκαταστήσει ή αφαιρέσει πακέτα και εξαρτήσεις.

* AUR: Η κοινοτική αποθήκη των χρηστών είναι ανεξάρτητη από το ABS αλλά τα AUR [unsupported] PKGBUILDs μπορούν να χρησιμοποιηθούν μέσω του εργαλείου ABS makepkg, για να δομηθεί λογισμικό. Το AUR περιέχει πάνω από 8000 PKGBUILDs χρηστών για το λογισμικό που δεν είναι διαθέσιμο σε επίσημα πακέτα. Εάν χρειαστεί να δημιουργήσουμε ένα πακέτο έξω από το επίσημο δέντρο του Arch, οι πιθανότητες είναι αυτό να είναι στο AUR.

Πότε πρέπει να χρησιμοποιούμε το σύστημα ABS. Το ABS χρησιμοποιείται για :

* Δημιουργία νέων πακέτων από την πηγή τους για λογισμικό το οποίο δεν είναι ακόμα διαθέσιμο.

* Προσαρμογή υπαρχόντων πακέτων ώστε να ταιριάζουν στις ανάγκες μας (με ενεργοποίηση ή απενεργοποίηση επιλογών).

* Αναδόμηση ολόκληρου του συστήματος χρησιμοποιώντας δικό μας compiler flags, "a la FreeBSD"

* Εξ αρχής δημιουργία και εγκατάσταση δικού μας πυρήνα. (Βλέπε Kernel Compilation).

Το ABS δεν είναι απαραίτητο για τη λειτουργία του Arch Linux, αλλά είναι χρήσιμο για την αυτοματοποίηση ορισμένων ενεργειών μεταγλώττισης από πηγαίο κώδικα.

Αυτό το how-to προσπαθεί να μας δώσει μια γενική γνώση σχετικά με το ABS και την μορφή των πακέτων του Arch αν και δεν είναι ένας πλήρης οδηγός. Για περισσότερες πληροφορίες πρέπει να διαβάσετε τις man pages.

Ας ξεκινήσουμε :

Εγκατάσταση Πακέτων. Για να χρησιμοποιήσουμε το ABS, πρέπει αρχικά το εγκαταστήσουμε από το core repository δίνοντας απλά :

pacman -Sy abs

Αυτό θα τραβήξει και οποιεσδήποτε απαραίτητες εξαρτήσεις.

/etc/abs/abs.conf. Διορθώνουμε το /etc/abs/abs.conf για να περιλάβουμε τα επιθυμητά repositories:

nano /etc/abs/abs.conf

Αφαιρώντας το ! μπροστά από το κατάλληλο repos, πχ :
SUPFILES=(core extra unstable community !testing)

Δημιουργούμε το δέντρο ABS. Σαν root, δίνουμε:

abs

Το ABS δέντρο μας δημιουργείται τώρα στο /var/abs. Τα κλαδιά του δέντρου ABS υπάρχουν πλέον και αντιστοιχούν σε όσα καθορίζονται στο /etc/abs/abs.conf.

Την εντολή abs θα πρέπει να την χρησιμοποιούμε περιοδικά για την ενημέρωση και τον συγχρονισμό του ABS δέντρου μας.

Το δέντρο ABS. Όταν τρέχουμε abs για πρώτη φορά, θα συγχρονίσουμε το δέντρο ABS με τον Arch server χρησιμοποιώντας το σύστημα cvs. Τι ακριβώς είναι το δέντρο ABS; Βρίσκεται στο /var/abs και μοιάζει με το παρακάτω:

| -- core/
|     || -- base/
|     ||     || -- acl/
|     ||     ||     || -- PKGBUILD
|     ||     || -- attr/
|     ||     ||     || -- PKGBUILD
|     ||     || -- ...
|     || -- devel/
|     ||     || -- abs/
|     ||     ||     || -- PKGBUILD
|     ||     || -- autoconf/
|     ||     ||     || -- PKGBUILD
|     ||     || -- ...
|     || -- ...
| -- extra/
|     || -- daemons/
|     ||     || -- acpid/
|     ||     ||     || -- PKGBUILD
|     ||     ||     || -- ...
|     ||     || -- apache/
|     ||     ||     || -- ...
|     ||     || -- ...
|     || -- ...
| -- community/
|     || -- ...

Έτσι το δέντρο ABS έχει ακριβώς την ίδια δομή με τη βάση δεδομένων πακέτων:

* first-level ο κατάλογος αντιπροσωπεύει τις κατηγορίες

* οι κατάλογοι δεύτερου επιπέδου αντιπροσωπεύουν τα ίδια τα ABS, τα ονόματα των οποίων αντιστοιχούν πραγματικά στα πακέτα που θέλουμε να δημιουργήσουμε

* Τα αρχεία PKGBUILD που περιέχουν όλες τις πληροφορίες που απαιτούνται σχετικά με το πακέτο

* Ακόμα ένας κατάλογος ABS μπορεί να περιέχει τα patches ή και άλλα αρχεία που απαιτούνται για την δημιουργία του πακέτου.

Είναι σημαντικό να γνωρίζουμε ότι ο πηγαίος κώδικας του πακέτου δεν βρίσκεται στον κατάλογο ABS. Αντί αυτού, το αρχείο PKGBUILD περιέχει ένα URL από το οποίο τα ABS θα τον μεταφορτώσουν αυτόματα.

Δημιουργούμε ένα Build Directory. Πρέπει να δημιουργήσουμε έναν κατάλογο όπου θα πραγματοποιούμε τη διαδικασία. Σε αυτό τον κατάλογο θα κάνουμε τα πάντα και ποτέ δεν πρέπει να τροποποιήσουμε το δέντρο ABS με την δημιουργία πακέτου μέσα σε αυτό. Μια ορθή πρακτική είναι να χρησιμοποιηθεί ο /home κατάλογός μας, αν και μερικοί χρήστες προτιμούν να δημιουργούν ένα "τοπικό" κατάλογο στο /var/abs/, με τα δικαιώματα του απλού χρήστη. Αντιγράφουμε τα ABS από το δέντρο (var/abs/branch/category/pkgname) στον νέο κατάλογο κατασκευής, /path/to/build/dir.

Δημιουργούμε τον κατάλογο κατασκευής μας πχ :

mkdir -p /home/yourusername/abs/local/

ΣΗΜΕΙΩΣΗ: Η πρώτη μεταφόρτωση του δέντρου ABS είναι και η μεγαλύτερη, κατόπιν λαμβάνονται μόνο οι απαιτούμενες ενημερώσεις.

Τώρα που ξέρουμε τι είναι το δέντρο ABS πώς μπορούμε να το χρησιμοποιήσουμε ;

Η παραδοσιακή μέθοδος δημιουργίας πακέτων. Αν δεν είμαστε εξοικειωμένοι με την δημιουργία πακέτου από πηγαίο κώδικα, πρέπει να ξέρουμε ότι τα περισσότερα πακέτα (αλλά όχι όλα) μπορούν να χτιστούν από την πηγή τους με αυτόν τον παραδοσιακό τρόπο:

* Κατεβάζουμε το source tarball από το απομακρυσμένο server, με τη χρήση web browser, ftp, wget ή άλλο τρόπο.

* Αποσυμπιέζουμε το αρχείο:

tar -xzf foo-0.99.tar.gz
tar -xjf foo-0.99.tar.bz2

* Μπαίνουμε στον κατάλογο

cd foo-0.99 

* Διαμορφώνουμε το πακέτο: γενικά, υπάρχει ένα μικρό script που ονομάζεται configure στον κατάλογο πηγής που χρησιμοποιείται για να διαμορφώσει το πακέτο (προσθέτει ή αφαιρεί την υποστήριξη για τα πράγματα, επιλέγει τον προορισμό εγκατάστασης, κλπ) και ελέγχει ότι ο υπολογιστής μας έχει όλο το απαιτούμενο λογισμικό για το πακέτο. Μπορεί να τρέξει δίνοντας:

./configure [[option]]

Ίσως πρέπει πρώτα να δοκιμάσουμε τη βοήθεια για να καταλάβουμε καλύτερα πώς λειτουργεί:

./configure --help 

Εάν μέσα στο script δεν υπάρχει μια -- prefix επιλογή, τα περισσότερα scripts θα χρησιμοποιήσουν την διαδρομή /usr/local για την εγκατάσταση, ενώ κάποια άλλα θα χρησιμοποιήσουν την διαδρομή /usr. Χάριν συνέπειας, προτείνεται γενικά για να υπάρχει η επιλογή prefix=/usr/local. Θεωρείται καλή πρακτική να εγκαθιστούμε τα προσωπικά μας προγράμματα στο /usr/local, και τα προγράμματα που ρυθμίζονται από τη διανομή στο /usr. Αυτό εξασφαλίζει ότι οι προσωπικές μας versions προγραμμάτων που δημιουργούμε μπορούν να συνυπάρξουν με αυτές που ρυθμίζονται από τον διαχειριστή πακέτων της διανομής - τον pacman.

./configure --prefix=/usr/local

συντάσσουμε από τον πηγαίο κώδικα δίνοντας

make

εγκαθιστούμε δίνοντας<

make install

* Απεγκαθιστούμε πηγαίνοντας στο source directory και δίνοντας

make uninstall

Ωστόσο, θα πρέπει πάντα να διαβάζουμε το αρχείο INSTALL για να μάθουμε τον τρόπο που το συγκεκριμένο πακέτο θα πρέπει να δομηθεί και να εγκατασταθεί, δεδομένου ότι δεν χρησιμοποιούν όλα τα πακέτα τις εντολές configure, make, make install.

Η παραπάνω παραδοσιακή μέθοδος για να δουλεύουμε με πηγαίο κώδικα μπορεί να χρησιμοποιηθεί και στο Arch Linux, αλλά το ABS προσφέρει μια βελτιωμένη, απλή, και κομψή εναλλακτική λύση, όπως θα δούμε.

Η δημιουργία πακέτων με το ABS. Το ABS είναι ένα κομψό εργαλείο, που προσφέρει σημαντική βοήθεια και δυνατότητες προσαρμογής στην διαδικασία δόμησης του πακέτου δημιουργώντας ένα αρχείο για την εγκατάσταση. Η μέθοδος ABS περιλαμβάνει την αντιγραφή ενός ABS από το δέντρο σε έναν κατάλογο κατασκευής, όπου και κάνει makepkg. Στο παράδειγμά μας, θα χτίσουμε το πακέτο του slim display manager.

1. Αντιγράφουμε το slim ABS από το δέντρο ABS σε έναν κατάλογο κατασκευής.

CP/$l*var/abs/extra/x11/slim/*/$l*home/yourusername/abs/local/slim

2. Πλοηγούμαστε στον κατάλογο κατασκευής

Cd/$l*home/yourusername/abs/local/slim

3. Σαν κανονικός χρήστης κάνουμε makepkg

makepkg -c

Ως root κάνουμε εγκατάσταση

# pacman -U slim 1.3.0-2-i686.pkg.tar.gz

Αυτό ήταν όλο. Έχουμε ολοκληρώσει το χτίσιμο του slim από τον πηγαίο κώδικα του και το έχουμε εγκαταστήσει στο σύστημα μας με τον pacman. Την απεγκατάσταση του χειρίζεται και πάλι ο pacman (pacman -R slim).

* Η μέθοδος ABS προσφέρει ένα επίπεδο ευκολίας και αυτοματοποίησης, ενώ διατηρεί πλήρη διαφάνεια και έλεγχο στα στάδια δόμησης και εγκατάστασης με το να τα συμπεριλαμβάνει στο PKGBUILD.

Στο ABS PKGBUILD Explained μπορούμε να έχουμε μια πλήρη εικόνα για την δομή ενός PKGBUILD.

Πηγή αυτού του οδηγού είναι το αντίστοιχο Archlinux Wiki.

Φόρουμ
Δώσε αστέρια!

MO: (ψήφοι: 0)

Σχόλια

Γεια σας παιδιά μερικές απορίες και μια μικρή διορθωσούλα.Να ξεκινήσουμε από τις απορίες...

1.Την εντολή abs την χρησιμοποιώ και για το συγχρονισμό όλου του δέντρου ή μόνο για τη δημιουργία του ;;;
2.Υπάρχει κάποιος τρόπος αναζήτησης στο ΑΒS ή πρέπει να ψάχνω εγώ τι θέλω στο /var/abs ;;;

Και η μικρή διόρθωση που λέω στην εντολή /etc/abs/abs.conf πρέπει να φύγει το abs για να γίνει /etc/abs.conf :).

Κατεβάστε το Happy Linux

Θάνο, ξεκινώντας από το τέλος να συμφωνήσω μαζί σου ότι έχω λάθος στην διαδρομή του /etc/abs.conf προσθέτοντας ένα ανύπαρκτο κατάλογο /abs στην μέση. Συγνώμη για το λάθος, για κάποιο λόγο δεν μου επιτρέπει να το διορθώσω τώρα αλλά θα ξαναπροσπαθήσω.

Την εντολή abs την χρησιμοποιούμε περιοδικά για τον συγχρονισμό του δένδρου ABS. Τέλος για να βρούμε σε ποιο αποθετήριο βρίσκεται το πρόγραμμα που μας ενδιαφέρει υπάρχουν οι σελίδες αναζήτησης για το αποθετήριο community και για τα αποθετήρια core, extra, testing, unstable.

Arch Linux, Keep It Simple