Στο διαδίκτυο και κυρίως στο Ελληνικό, παρουσιάζονται άρθρα τα οποία δυστυχώς ,εκτός του ότι είναι βιαστικά, προέρχονται και από αμφίβολης ποιότητας συγγραφείς με ανεπαρκή γνώση σε θέματα ΙΤ, κάτι που μας λυπεί ιδιαίτερα, καθώς κάτι τέτοιο παρασύρει επικίνδυνα τον κόσμο και διασύρει διανομές και πακέτα.
Αυτό αποτέλεσε το εναρκτήριο λάκτισμα για το άρθρο αυτό, έτσι ώστε να διευκρινιστούν αρκετά το τι είναι το καθένα, με την ελπίδα τουλάχιστον ότι θα το διαβάσουν μπας και μάθουν να τα λένε σωστά.
Στις διανομές Artix, Arch, Manjaro κλπ, δηλαδή σε οποίες έχουν ως διαχειριστή πακέτων τον pacman, η δημιουργια ενός πακέτου εξαρτάται από ένα τύπου template αρχείου δημιουργίας του, το PKGBUILD.
Ο pacman έχει παρουσιαστεί ήδη σε προηγούμενο άρθρο
εδώ και συνεπώς θα αναφερθεί μόνο ότι είναι σχετικό και δεν έχει επεξηγηθεί εκεί.
Τι είναι το PKGBUILD
Το PKGBUILD, όπως παραπάνω αναφέρθηκε είναι ένα αρχείο περιγραφικό (τύπου template) των προδιαγραφών του πακέτου που θα δημιουργηθεί με την εντολή
makepkgΑς δούμε ένα παράδειγμα δημιουργίας ενός απλού PKGBUILD για να καταλάβουμε έμπρακτα το τι περιλαμβάνει.
Θα πάρουμε σαν παράδειγμα το
clamav-openrc πακέτο που είχε παρουσιαστεί και στον οδηγό για το
openrcpkgname=clamav-openrc
pkgalias=clamd
pkgdesc="Clamav, openrc init scripts"
pkgver=1.0
pkgrel=1
replaces=('clamav-openrc')
provides=('clamav-openrc')
arch=('any')
url="https://aur.archlinux.org/packages/clamav-openrc"
license=('APACHE')
depends=('acpid-openrc' 'clamav')
optdepends=('clamav-unofficial-sigs')
source=('clamd.initd'
'clamd.confd'
'clamd.install')
sha256sums=('2721d6e0cce925ff52a889203d477548b9a31003a3334c4957b2f17d07e005d0'
'28ebd47810b0568fc7692218867d6804a1df70290681462f5555e230ca817732'
'6f3e2dead94b056ff8a85575d3681f63b13c388a11e4b995822a8c09a12fbed8')
package() {
install -Dm755 ${srcdir}/clamd.confd "$pkgdir"/etc/conf.d/clamd
install -Dm755 ${srcdir}/clamd.initd "$pkgdir"/etc/init.d/clamd
install=clamd.install
}
Θα επεξηγηθούν αναλυτικά οι γραμμές του PKGBUILD.
Όνομα πακέτου
Ψευδώνυμο (πολύ χρήσιμο αν το όνομα του αρχείου που κατεβάζουμε ως συμπιεσμένο, διαφέρει από το τελικό όνομα του πακέτου)
Περιγραφή του πακέτου
pkgdesc="Clamav, openrc init scripts"
Έκδοση του πακέτου (Προγράμματος, δηλαδή από το release του Git που το κάνει download)
Έκδοση πακέτου για το λειτουργικό (προθέτει π.χ. το -1 στο τελικό όνομα του αρχείου, χρήσιμο για διορθώσεις στην ίδια έκδοση)
Πακέτο που αντικαθιστά (χρήσιμο όταν θα βγει η επόμενη έκδοση ως update αυτού)
replaces=('clamav-openrc')
Ποιό πακέτο μας δίνει, χρήσιμο σε περίπτωση εξαρτήσεων
provides=('clamav-openrc')
Αρχιτεκτονική πακέτου, x86_64 ή/και i686, ή any
Η διεύθυνση του πακέτου (*)
url="https://aur.archlinux.org/packages/clamav-openrc"
Η άδεια χρήσης του
Εξαρτήσεις του πακέτου για την εγκατάστασή του
depends=('acpid-openrc' 'clamav')
Προαιρετικές εξαρτήσεις του πακέτου για την εγκατάστασή του
optdepends=('clamav-unofficial-sigs')
Πηγές (Το συγκεκριμμένο έχει όλες τις πηγές ανεβασμένες στο AUR, όπως περιγράφτηκε παραπάνω (*)
source=('clamd.initd'
'clamd.confd'
'clamd.install')
Τα
hashes, των αρχείων για διασφάλιση της ορθότητας των αρχείων που θα κατεβάσει, μπορεί να είναι sha1sum, sha256sum & sha512sum
sha256sums=('2721d6e0cce925ff52a889203d477548b9a31003a3334c4957b2f17d07e005d0'
'28ebd47810b0568fc7692218867d6804a1df70290681462f5555e230ca817732'
'6f3e2dead94b056ff8a85575d3681f63b13c388a11e4b995822a8c09a12fbed8')
Τέλος, το σχήμα εγκατάστασής του, δηλαδή σε ποια folders θα μπουν τα εκτελέσιμα ή τα configs κλπ
package() {
install -Dm755 ${srcdir}/clamd.confd "$pkgdir"/etc/conf.d/clamd
install -Dm755 ${srcdir}/clamd.initd "$pkgdir"/etc/init.d/clamd
install=clamd.install
Εδώ, πρέπει να παρουσιαστεί και το clamd.install αρχείο, που περιέχει τα ακόλουθα
post_install() {
echo " ==> Add Clamav Daemon to system startup wtih 'rc-update add clamd default'"
echo " ==> Start ClamAv Daemon now with 'rc-service clamd start'"
}
post_upgrade() {
post_install "$1"
}
pre_remove() {
echo " ==> Make sure to 'rc-update del clamd default'"
}
Η δουλειά του είναι απλά, να εμφανίσει τις οδηγίες χρήσης του πακέτου, μετά την εγκατάσταση του, προς ενημέρωση του χρήστη.
Σημείωση:
Στο παραπάνω PKGBUILD δεν υπάρχουν διαδικασίες
build() / prepare() / ... διότι δεν είναι κώδικας, αλλά απλά αρχεία υπηρεσίας.
Μετά το PKGBUILD, τί;
Εφόσον δημιουργηθεί το όποιο PKGBUILD (στο παράδειγμα παραπάνω λείπουν αρκετά πιθανά σενάρια, για αυτό δείτε και τις οδηγίες στο τέλος της σελίδας), θα πρέπει να δημιουργηθεί το πακέτο που καταλαβαίνει ως τέτοιο ο pacman.
Για αυτό τον λόγο, χρησιμοποιείται η εντολή
makepkg η οποία παράγει τα τα πακέτα (προηγουμένως με κατάληξη .xz, πλέον με .zst)
Δίνοντας την εντολή
makepkg σκέτη, στον φάκελο του PKGBUILD, δημιουργείται το πακέτο
Το όνομα του δημιουργημένου, από την παραπάνω διαδικασία, είναι το
clamav-openrc-1.0-1-any.pkg.tar.zstΔίνοντας κανείς
makepkg --help, βρίσκει τα switches της εντολής
Ωραία όλα αυτά, αλλά πως γίνεται η εγκατάσταση του πακέτου στο λειτουργικό;
Εδώ γίνεται η χρήση του
pacmansudo pacman -U clamav-openrc-1.0-1-any.pkg.tar.zst
Τι είναι το AUR
Το AUR (Arch Linux User Repository) είναι ένα ανεπίσημο αποθετήριο, το οποίο αποτελείται από PKGBUILD αρχεία, τα οποία δεν υπάρχουν στην διανομή, αλλά τα προσθέτουν μερικοί developers για διαφόρους λόγους, όπως άδειες λογισμικού κλπ, ή χρήστες των διανομών Arch.
Καλό είναι να ελέγχονται βέβαια οι πηγές των αρχείων, για την εγκυρότητά τους (σε περίπτωση αμφιβολίας, ανοίγουμε σε έναν περιηγητή online το PKGBUILD, όπως για παράδειγμα το
https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=debhelpergit Δηλαδή ενώ απλά, τα αποθετήρια των διανομών, περιέχουν .zst πακέτα, έτοιμα προς εγκατάσταση, στο AUR δεν ισχύει κάτι τέτοιο.
Τι είναι οι pacman και AUR helpers
Όπως είδαμε έως τώρα, ο pacman είναι ένα cli εργαλείο, δηλαδή εκτελείται μόνο από την γραμμή εντολών και όχι το γραφικό περιβάλλον.
Για τον λόγο αυτό, διατίθενται δύο pacman helpers, το pamac & το octopi.
Άξιο αναφοράς είναι ότι το octopi δεν διατίθεται αποκλειστικά στα Artix, Arch, Manjaro κλπ αλλά και σε μη pacman διανομες. όπως το Void Linux, το GhostBSD κλπ, κάτι που δείχνει πόσο πιο δοκιμασμένος είναι.
Και στους δύο pacman helpers (pamac & octopi), το AUR θα πρέπει να ενεργοποιηθεί από τις ρυθμίσεις τους, άρα στην ουσία γίνονται και γραφικοί AUR helpers, ως frontends.
Για να γίνει όμως αυτό, θα πρέπει να έχετε εγκαταστήσει, έναν
AUR CLI helper, όπως οι
pacaur, pakkur, trizen, yay κλπ, ως backend.
Βασικό κομμάτι είναι επίσης, η εγκατάσταση του group package-devel για να μπορεί το makepkg να κανει build τα πακέτα από το AURΚαλό διάβασμα και άλλο κακό από ημιμαθείς και αμαθείς, να μην μας ξαναβρεί!
Πηγές άρθρου:
https://wiki.archlinux.org/index.php/PKGBUILDhttps://wiki.archlinux.org/index.php/Creating_packageshttps://wiki.archlinux.org/index.php/Makepkghttps://wiki.archlinux.org/index.php/AUR_submission_guidelineshttps://wiki.archlinux.org/index.php/Arch_User_Repositoryhttps://wiki.archlinux.org/index.php/AUR_helpers(Λόγω της φύσεως του άρθρου, έχουν παραλειφθεί κάποιες λεπτομέρειες της δομής των πακέτων κλπ, αν ζητηθεί θα γίνει σε άλλα άρθρα)