Φτιάξ'το μόνος σου: PKGBUILD για Git πακέτα.
by
, 25-02-09 at 00:28 (7104 Εμφανίσεις)
GIT
Λοιπόν, απλοϊκά, με το git μπορείς κάλλιστα να φτιάξεις ενα git repository, δηλαδή ένα directory όπου ανεβάζεις κώδικα (και όσα τον συνοδεύουν) για το project σου και το μοιράζεις στον κόσμο. Ως επί το πλειστον, περιέχουν κώδικα testing έως και experimental για μια μελλοντική έκδοση της stable έκδοσης του προγράμματος.to git (third-person singular simple present gits, present participle gitting, simple past and past participle gitted)
1. To get.
Ωραία. Αλλά θα πεις "Ωραία μεγάλε, εγώ όμως δεν θέλω να φτιάξω git repository, αλλά να κάνω compile προβλεπέ © ένα πακετάκι από αυτό το ωραιο Χ,Ψ πρόγραμμα".
ΟΚ λοιπόν, πάμε λοιπόν.
Βασικό πρώτα από όλα. Χρειαζόμαστε ενα git repository ! Υπάρχουν πάμπολλα εκεί έξω, από απλά μέχρι και παν-περίπλοκα με πολλαπλά branches και ειδικές ρυθμίσεις.
Εμείς θα δούμε το πλέον απλό τρόπο να φτιάξουμε ενα PKGBUILD (ή ένα αντίστοιχο αρχείο, πχ Slackbuild ή ό,τι άλλο) για να φτιάξουμε ενα πακετο από πρόγραμμα που βρίσκεται σε git repository και δεν υπάρχει αλλού (στα repos, στο AUR ή στα SlackBuilds ή δεν ξερω εγώ πού αλλού)
Πρώτον, βρίσκουμε ένα έτοιμο PKGBUILD φτιαγμένο για GIT και κοιτάμε το περιεχόμενο γιατί αλλιώς περπατάμε ξυπόλυτοι στα αγκάθια (εν ολίγοις, θα φάμε ώρες χωρίς να εχουμε κάνει κάτι).
Πάμε να δουμε πχ το xf86-video-ati-git.
http://aur.archlinux.org/packages/xf...i-git/PKGBUILD
Kαι θα το σπάσουμε σε τρία κομμάτια.
Α. Το "γραφειοκρατικό", ώστε να δωθούν όλες οι βασικές και απαραίτητες πληροφορίες
Β. Το build argument
C. Όσα παραπάνω βήματα χρειάζονται εκ των υστέρων να γίνουν στον χτισμένο κώδικα
Ας δούμε το (Α).
Spoiler:
1. Γραμμή του κοντριμπιούτορ, a.k.a εσένα, που που το κοντριμπιουτάρεις σε όλους τους άλλους. Βάζεις τα στοιχεία όπως παρακάτω, αναλόγως φυσικά
2. To pkgname, το όνομα του πακέτου. Έτσι θα καταλήξουμε μετά το χτίσιμο σε πακέτο της μορφής:Κώδικας:# Contributor: Flamelab <panosfilip@gmail.com>
pkgname-pkgver-pkgrel.pkg.tar.gz
3. Η pkgver έχει την μορφή YYYYMMDD, δηλαδή έτος, μήνας, μέρα, αφού ο κώδικας αλλάζει κάθε μέρα. Βέβαια, ακόμη και αν δεν είναι αλλαγμένος από το 1999 (που λέει ο λόγος, φερ'ειπείν, λέμε τωρα), η git το μετατρέπει αμεσως στην εκάστοτε μέρα που χτίζεται το πακέτο.Κώδικας:pkgname=xf86-video-ati-git
4. Η pkgrel (η package release) συνήθως παραμένει "1", ακόμη κι αν αλλάξουμε εμείς κάτι ή αλλάξει ο κώδικας, αφού με το που αλλάξει η pkgver, η pkgrel γίνεται πάντα "1" πάλι.Κώδικας:pkgver=20090221
(5. Αυτή είναι μια custom μεταβλητή μόνο για το παρόν πακέτο, την θέλουμε για μετά)Κώδικας:pkgrel=1
6. pkgdesc, εν ολίγοις, package description. Ε, μην βάλετε μία λέξη "Editor" ούτε να ξεκινάτε με "When Adam found the apple tree .." (την ιστορία της ζωής σας δηλαδή ). Απλά και κατανοητά πράγματα:Κώδικας:_mesaver="7.2"
7. Οι arches που υποστηρίζει ο κώδικας. Εάν δεν χτίζεται σε μία από αυτές, μην την βάλετε, θα παιδέψετε τον άλλον.Κώδικας:pkgdesc="X.org ati video driver"
8. Η URL που hostάρει το GIT repo ή υπάγεται το πακέτοΚώδικας:arch=(i686 x86_64)
9. Μία customιά. Καλό είναι να γράψετε μία πρόσθετη μεταβλητή σαν αυτή από κάτω, ώστε να δηλώνει μετά το πακέτο στον pacman "κάνω provide αυτήνανε την εκδοσούλα, κάνε τα κουμάντα σου"Κώδικας:url="http://xorg.freedesktop.org/"
10. Η provides είναι απα-ραί-τη-τη γιατί δηλώνει μετά το πακέτο στον pacman το τί πακέτο κάνει provide και σε τί (μελλοντική) έκδοσηΚώδικας:lateststablever=6.11.0
11. Εδώ έχει ζουμί η υπόθεση. Εδώ κάνετε έρευνα για το τί χρειάζεται το πακέτο για να τρέξει σωστά το περιεχόμενο του όταν εγκατασταθεί.Κώδικας:provides=("xf86-video-ati=${lateststablever}")
Εάν δηλώσετε και =,>,< στις εκδόσεις, ακόμη καλύτερα.
12. Τί χρειάζεται για να χτιστεί ο κώδικας. Επίσης κάνετε έρευνα σε READMEs, σε άλλα παρόμοια PKGBUILDs, σε ebuilds του Gentoo πχ, σε specs της Fedora,σε ό,τι βρείτε. Εάν μπορείτε να βγάλετε και με την λογική το τί θέλει για να χτιστεί, ακόμη καλύτερα.Κώδικας:depends=('libdrm' 'libgl>=7.2' 'libpciaccess')
13. Το conflicts λέει "Οταν πάει το πακετο να εγκατασταθεί, εάν δει το πακέτο ή τα πακέτα που εχουν δηλωθεί σε αυτή τη γραμμή, δεν υπάρχει περίπτωση να εγκατασταθεί. Εδώ ο xf86-video-ati έαν δει παλαιότερο Xorg, δεν εγκαθίσταται. Εάν κάποιος βέβαια έχει μπει στην διαδικασία να χτίσει τον xf86-video-ati, θα έχει κατέβει ο Xorg server 1.5 ως makedepend, οπότε το conflict πια θα είναι ανενεργό.Κώδικας:makedepends=('pkgconfig' 'xorg-server>=1.5.0' "mesa>=${_mesaver}" 'fontsproto' 'glproto' 'xf86driproto' 'diffutils' 'dri2proto' 'xorg-util-macros' 'git')
14. Εδώ είναι ειδική η περίπτωση. Εδώ κοιτάμε το /etc/makepkg.conf τί λέει:Κώδικας:conflicts=('xorg-server<1.5.0')
#-- strip: Strip symbols from binaries/libraries
#-- docs: Save doc and info directories
#-- libtool: Leave libtool (.la) files in packages
#-- emptydirs: Leave empty directories in packages
#-- zipman: Compress manpages with gzip
Εάν το πακέτο δεν χτίζεται, συνήθως κάνουμε disable το libtool (εάν βγάζει errors στο χτίσιμο για .la αρχεία). Βλέποντας και κάνοντας, δεν είναι στάνταρ και είναι ώρες ώρες πρόβλημα του κώδικα ή των προγραμμάτων.
15. Η license.Κώδικας:options=('!libtool')
16. Ό,τι πρόσθετο source ή image ή ό,τι θέλουμε για να συμπεριληφθεί στο πακέτο:Κώδικας:license=('GPL')
αλλιώς το αφήνουμε αδειο :Κώδικας:source=(http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2 mesa-7.1-link-shared.patch)
17. Τα md5sums, εάν έχουμε πρόσθετα sources. Αλλιώς κενόΚώδικας:source=("")
Κώδικας:md5sums=('04d379292e023df0b0266825cb0dbde5' 'f0baa948d9810f268413111ee439d24b')
18. Τo gitroot είναι η διεύθυνση του GIT repository. Το gitname είναι μία customιά για το χτίσιμο : το git repo θα κατέβει και θα αντιγραφεί σε φάκελο με το όνομα που δηλώσαμε στο gitname
Κώδικας:_gitroot="git://anongit.freedesktop.org/xorg/driver/xf86-video-ati" _gitname="xf86-video-ati"
Β. Το build. Εδώ είναι στάνταρ το ίδιο στο 90% των GIT pkgbuilds.
Eχει την μορφή:
(μην ξεχνάτε τα {} στην αρχή και το τέλος και ό,τι χρειάζεται για το χτίσιμο, τα βάζετε εκεί μέσα)Κώδικας:build { μπλα μπλα }
Αλλά μετά αλλάζει. Για να χτιστεί έχουμε αρκετές μεθόδους, ανάλογα με τον κώδικα. Άλλα έχουν σκριπτάκια που λέγονται autogen.sh, άλλα έχουν έτοιμα configure scripts, άλλα έχουν CMakeLists.txt. Το καθένα χτίζεται διαφορετικά. Εαν δείτε πχ autogen.sh στο source, τρέχτε το τοπικά (./autogen.sh) και θα εμφανιστεί το configure. Τρέξτε μετά ./configure --help και θα δείτε τί options έχει.Κώδικας:build() { cd $srcdir msg "Connecting to the GIT server...." if [[ -d $srcdir/$_gitname ]] ; then cd $_gitname git pull origin msg "The local files are updated." else git clone $_gitroot fi msg "GIT checkout done" msg "Starting make..." rm -rf $srcdir/$_gitname-build cp -r $srcdir/$_gitname $srcdir/$_gitname-build cd $srcdir/$_gitname-build
Για περισσότερα, κοιτάχτε το Arch Wiki.
Γ. Εάν χρειάζεται κάτι παραπάνω, το γράφετε μετά το πχ configure, make make install που'χει γίνει πιο πάνω:Κώδικας:./autogen.sh --prefix=/usr/ --enable-dri || return 1 make || return 1 make DESTDIR=$startdir/pkg install install -Dm644 COPYING $startdir/pkg/usr/share/licenses/$_gitname/COPYING rm -rf $startdir/src/$_gitname-build cd "${srcdir}/Mesa-${_mesaver}" patch -Np1 -i "${srcdir}/mesa-7.1-link-shared.patch" || return 1 ./configure --prefix=/usr \ --with-dri-driverdir=/usr/lib/xorg/modules/dri \ --with-dri-drivers=radeon,r200,r300 \ --enable-glx-tls \ --disable-ttm-api \ --with-driver=dri \ --enable-xcb \ --disable-glu \ --disable-glut \ --disable-glw || return 1 make || return 1
Λοιπόν αυτό ήταν. Ναι, θέλει λίγο προσοχή και διάβασμα, αλλά εάν πάρετε ως παράδειγμα ένα άλλο PKGBUILD και αλλάξετε τα ονόματα και τα URLs, θα γλυτώστε χρόνο .Κώδικας:cd src/mesa/drivers/dri || return 1 make DESTDIR="${pkgdir}" install || return 1 rm -f "${pkgdir}/usr/lib/xorg/modules/dri/libdricore.so" rm -rf "${pkgdir}/usr/include" rm -rf "${pkgdir}/usr/lib/pkgconfig" }
Αυτάααααα