Στον σημερινό οδηγό του Arch Linux, θα κάνουμε μια εισαγωγή στη δομή των πακέτων του Arch Linux αλλά και στο πως φτιάχνονται.

Το packaging είναι μια από τις πιο ενδιαφέρουσες μορφές συνεισφοράς σε μια κοινότητα Linux. Στο παρελθόν έχουμε ασχοληθεί με το packaging σε Ubuntu διανομές και μπορείτε να το διαβάσετε στο παρακάτω οδηγό:

Σημείωση: Όλη σειρά οδηγών του Arch Linux Packaging είναι διαθέσιμη εδώ :

cerebrux.net/tag/arch-linux-packaging

Ανατομία πακέτου στο Arch Linux

Τα αρχεία που κατεβάζουμε από τα επίσημα αποθετήρια του Arch Linux είναι της μορφής package.pkg.tar.zst. Είναι ένα συμπιεσμένο πακέτο σε μορφή zstd και περιέχει:

  1. Τα binary αρχεία
  2. .PKGINFO: Περιέχει όλα τα δεδομένα που χρειάζονται από τον διαχειριστή πακέτων(pacman) για την αντιμετώπιση πακέτων, εξαρτήσεων κ.α.
  3. .BUILDINFO: Περιέχει πληροφορίες για reproducible builds.
  4. .MTREE: Περιέχει hashes και timestamps των αρχείων, τα οποία περιλαμβάνονται στην τοπική βάση δεδομένων ώστε ο pacman να μπορεί να επαληθεύσει την ακεραιότητα του πακέτου
  5. .INSTALL: Ένα προαιρετικό αρχείο το οποίο εκτελεί εντολές μετά την εγκατάσταση/αναβάθμιση/διαγραφή του πακέτου.
  6. .Changelog: Ένα προαιρετικό αρχείο που ο συντηρητής του πακέτου συμπληρώνει τις αλλαγές στο πακέτου. (Δεν υπάρχει σε όλα τα πακέτα).

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

  1. PKGBUILD: Ένα αρχείο που περιέχει μέσα όλες τις πληροφορίες του πακέτου καθώς και τον τρόπο που θα δημιουργηθεί.
  2. makepkg: Είναι το εργαλείο που χρησιμοποιεί το PKGBUILD ώστε να δημιουργηθεί το package.pkg.tar.zst.
Advertisements

PKGBUILD

Το PKGBUILD όπως είπαμε είναι ένα αρχείο που περιγράφει το πως θα δημιουργηθεί το πακέτο και έχει συγκεκριμένες μεταβλητές, συναρτήσεις και οδηγίες για την σωστή σύνταξη του. Τα υποχρεωτικά πεδία για ένα λειτουργικό PKGBUILD είναι τα:

  • pkgname
  • pkgver
  • pkgrel
  • arch
  • licence
  • source
  • package ()

Ας τα αναλύσουμε ένα ένα

pkgname: Περιέχει το όνομα του πακέτου. Το όνομα μπορεί να περιέχει αλφαριθμητικά και οποιοδήποτε από τους ακόλουθους χαρακτήρες: ‘@ . _ + -‘. Με την μόνη απαγόρευση ότι τα ονόματα δεν μπορούν να ξεκινάνε με παύλες ή με τελείες.

pkgver: Περιέχει την έκδοση του προγράμματος. Η μεταβλητή δεν επιτρέπεται να έχει άνω ή κάτω τελεία, παύλες ή κενό διάστημα.

pkgrel: Είναι ο αριθμός έκδοσης ειδικά για την διανομή. Επιτρέπει τους συντηρητές των πακέτων να κάνουν κάποιες ενημερώσεις στην ίδια έκδοση του προγράμματος. Συνήθως η τιμή του είναι 1.

arch: Ορίζει τους τύπους αρχιτεκτονικής που υποστηρίζει το πρόγραμμα ( γ.π arch=’i686′ ‘x86_64′). Αν το πρόγραμμα δεν περιέχει περιορισμό στην αρχιτεκτονική τότε η τιμή του είναι any (arch=’any’). Αποδεκτοί χαρακτήρες είναι οι αλφαριθμητικοί και η κάτω παύλα (_).

license: Σε αυτήν την μεταβλητή ορίζουμε την άδεια χρήσης του προγράμματος.

source: Είναι η μεταβλητή που περιέχει το link για την λήψη του κώδικα του λογισμικού.

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

Ένα πιο σύνθετο αρχείο PKGBUILD περιέχει περισσότερες συναρτήσεις και μεταβλητές. Μπορείτε να δείτε περισσότερες πληροφορίες για το PKGBUILD εδώ.

makepkg

Το makepkg είναι ένα script που αυτοματοποιεί την δημιουργία των πακέτων. Το πλεονέκτημα μιας αυτοματοποιημένης δημιουργίας είναι ότι αν φτιαχτεί το script τότε το makepkg αναλαμβάνει τα υπόλοιπα. Δηλ. κατεβάζει και ελέγχει τους κώδικες, ελέγχει τις εξαρτήσεις του, δημιουργεί το πακέτο, εγκαθιστά το αρχείο σε ένα fakeroot περιβάλλον και στο σύνολο δημιουργεί το πακέτο για να το χρησιμοποιήσει ο pacman.

Το makepkg ορίζει δύο μεταβλητές οι οποίες βοηθάνε στην δημιουργία και την εγκατάσταση:

  1. srcdir: Είναι ένας κατάλογος που περιέχει τα αποσυμπιεσμένα αρχεία του λογισμικου/κώδικά.
  2. pkgdir: Ο συγκεκριμένος κατάλογος περιέχει το τα πακέτα του εγκατεστημένου πακέτου καθώς και την θέση που θα πάρουν κατά την εγκατάσταση.

Ας γράψουμε το πρώτο μας PKGBUILD

Έστω ότι έχουμε το παρόν script https://github.com/JohnGavr/ytd101/releases.

Είναι ένα script που έχω γράψει και που κατεβάζει mp3 ή mp4 αρχεία από το youtube με την βοήθεια του youtube-dl και τα αποθηκεύει στο φάκελο Music.

Εμείς μέσα από αυτό το πακέτο θέλουμε όταν γίνεται εγκατάσταση να μεταφέρει το script στο /usr/bin ώστε να μπορεί ο χρήστης να το εκτελέσει απευθείας από το τερματικό του χωρίς να χρειαστεί να δημιουργήσει κάποιο alias.

Σύμφωνα με τα παραπάνω, το PKGBUILD διαμορφώνεται κάπως έτσι:

pkgname=ytd101
pkgver=1.0
pkgrel=1
pkgdesc="A youtube download script in Shell Scripting"
arch=( 'any' )
url="https://github.com/JohnGavr/ytd101"
license=('MIT')
depends=('youtube-dl' 'ffmpeg')
source=("${pkgname}-${pkgver}.tar.gz::https://github.com/JohnGavr/ytd101/archive/v${pkgver}.tar.gz")

package() {
cd "$pkgname-$pkgver"
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
install -Dm755 ytd "$pkgdir/usr/bin/ytd"
}

Το καινούριο που βλέπουμε στο PKGBUILD είναι η εντολή install. Το εργαλείο install αντιγράφει αρχεία από το srcdir στο pkgdir. Ας δούμε τις παραμέτρους αναλυτικά

  • -D : Δημιουργεί όλες τις τοποθεσίες εκτός τις τελευταίες και αντιγράφει το αρχείο από το srcdir στην αντίστοιχη τοποθεσία στο pkgdir.
  • -m : Θέτει τα δικαιώματα στα αρχεία. Ενδεικτικά:
    644: Έχει δικαίωμα read και write ο κάτοχος του αρχείο και οι υπόλοιποι χρήστες απλά μπορούν να το διαβάσουν.
    755: Είναι το ίδιο με το προηγούμενο με την μόνη διαφορά ότι είναι εκτελέσιμο από όλους τους χρήστες.
Advertisements

Μετατροπή σε πακέτο με το makepkg

Για να δημιουργήσουμε το πακέτο τρέχουμε το makepkg.

makepkg -g >> PKGBUILD && makepkg

Η εντολή θα υπολογίσει τα md5 checksum του .tar.gz και θα το προσθέσει στο PKGBUILD αρχείο. Έπειτα μπορούμε να το εγκαταστήσουμε με

sudo pacman -U ytd101-x.x-x.pkg.tar.xz

Επίλογος

Στον σημερινό οδηγό, κάναμε μια γενική εισαγωγική ανάλυση της δομής των πακέτων στο Arch Linux. Σε επόμενα άρθρα θα δούμε το πως δουλεύει το AUR και το πόσο εύκολο είναι να ανεβάζουμε δικά μας πακέτα.

Παραπομπές: