Δείτε το RSS Feed

Flamelab's Ultimate Philosophy

Φτιάξ'το μόνος σου: PKGBUILD για Git πακέτα.

Rating: 2 votes, 1,00 average.
GIT

to git (third-person singular simple present gits, present participle gitting, simple past and past participle gitted)
1. To get.
Λοιπόν, απλοϊκά, με το git μπορείς κάλλιστα να φτιάξεις ενα git repository, δηλαδή ένα directory όπου ανεβάζεις κώδικα (και όσα τον συνοδεύουν) για το project σου και το μοιράζεις στον κόσμο. Ως επί το πλειστον, περιέχουν κώδικα testing έως και experimental για μια μελλοντική έκδοση της stable έκδοσης του προγράμματος.

Ωραία. Αλλά θα πεις "Ωραία μεγάλε, εγώ όμως δεν θέλω να φτιάξω 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:

Κώδικας:
# Contributor: Flamelab <panosfilip@gmail.com>
pkgname=xf86-video-ati-git
pkgver=20090221
pkgrel=1
_mesaver="7.2"
pkgdesc="X.org ati video driver"
arch=(i686 x86_64)
url="http://xorg.freedesktop.org/"
lateststablever=6.11.0
provides=("xf86-video-ati=${lateststablever}")
depends=('libdrm' 'libgl>=7.2' 'libpciaccess')
makedepends=('pkgconfig' 'xorg-server>=1.5.0' "mesa>=${_mesaver}" 'fontsproto'
	     'glproto' 'xf86driproto' 'diffutils' 'dri2proto' 'xorg-util-macros' 'git')
conflicts=('xorg-server<1.5.0')
options=('!libtool')
license=('GPL')
source=(http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2
       mesa-7.1-link-shared.patch)
md5sums=('04d379292e023df0b0266825cb0dbde5'
	 'f0baa948d9810f268413111ee439d24b')

_gitroot="git://anongit.freedesktop.org/xorg/driver/xf86-video-ati"
_gitname="xf86-video-ati"



1. Γραμμή του κοντριμπιούτορ, a.k.a εσένα, που που το κοντριμπιουτάρεις σε όλους τους άλλους. Βάζεις τα στοιχεία όπως παρακάτω, αναλόγως φυσικά
Κώδικας:
# Contributor: Flamelab <panosfilip@gmail.com>
2. To pkgname, το όνομα του πακέτου. Έτσι θα καταλήξουμε μετά το χτίσιμο σε πακέτο της μορφής:

pkgname-pkgver-pkgrel.pkg.tar.gz

Κώδικας:
pkgname=xf86-video-ati-git
3. Η pkgver έχει την μορφή YYYYMMDD, δηλαδή έτος, μήνας, μέρα, αφού ο κώδικας αλλάζει κάθε μέρα. Βέβαια, ακόμη και αν δεν είναι αλλαγμένος από το 1999 (που λέει ο λόγος, φερ'ειπείν, λέμε τωρα), η git το μετατρέπει αμεσως στην εκάστοτε μέρα που χτίζεται το πακέτο.
Κώδικας:
pkgver=20090221
4. Η pkgrel (η package release) συνήθως παραμένει "1", ακόμη κι αν αλλάξουμε εμείς κάτι ή αλλάξει ο κώδικας, αφού με το που αλλάξει η pkgver, η pkgrel γίνεται πάντα "1" πάλι.

Κώδικας:
pkgrel=1
(5. Αυτή είναι μια custom μεταβλητή μόνο για το παρόν πακέτο, την θέλουμε για μετά)
Κώδικας:
_mesaver="7.2"
6. pkgdesc, εν ολίγοις, package description. Ε, μην βάλετε μία λέξη "Editor" ούτε να ξεκινάτε με "When Adam found the apple tree .." (την ιστορία της ζωής σας δηλαδή ). Απλά και κατανοητά πράγματα:
Κώδικας:
pkgdesc="X.org ati video driver"
7. Οι arches που υποστηρίζει ο κώδικας. Εάν δεν χτίζεται σε μία από αυτές, μην την βάλετε, θα παιδέψετε τον άλλον.

Κώδικας:
arch=(i686 x86_64)
8. Η URL που hostάρει το GIT repo ή υπάγεται το πακέτο

Κώδικας:
url="http://xorg.freedesktop.org/"
9. Μία customιά. Καλό είναι να γράψετε μία πρόσθετη μεταβλητή σαν αυτή από κάτω, ώστε να δηλώνει μετά το πακέτο στον pacman "κάνω provide αυτήνανε την εκδοσούλα, κάνε τα κουμάντα σου"
Κώδικας:
lateststablever=6.11.0
10. Η provides είναι απα-ραί-τη-τη γιατί δηλώνει μετά το πακέτο στον pacman το τί πακέτο κάνει provide και σε τί (μελλοντική) έκδοση

Κώδικας:
provides=("xf86-video-ati=${lateststablever}")
11. Εδώ έχει ζουμί η υπόθεση. Εδώ κάνετε έρευνα για το τί χρειάζεται το πακέτο για να τρέξει σωστά το περιεχόμενο του όταν εγκατασταθεί.
Εάν δηλώσετε και =,>,< στις εκδόσεις, ακόμη καλύτερα.


Κώδικας:
depends=('libdrm' 'libgl>=7.2' 'libpciaccess')
12. Τί χρειάζεται για να χτιστεί ο κώδικας. Επίσης κάνετε έρευνα σε READMEs, σε άλλα παρόμοια PKGBUILDs, σε ebuilds του Gentoo πχ, σε specs της Fedora,σε ό,τι βρείτε. Εάν μπορείτε να βγάλετε και με την λογική το τί θέλει για να χτιστεί, ακόμη καλύτερα.

Κώδικας:
makedepends=('pkgconfig' 'xorg-server>=1.5.0' "mesa>=${_mesaver}" 'fontsproto'
	     'glproto' 'xf86driproto' 'diffutils' 'dri2proto' 'xorg-util-macros' 'git')
13. Το conflicts λέει "Οταν πάει το πακετο να εγκατασταθεί, εάν δει το πακέτο ή τα πακέτα που εχουν δηλωθεί σε αυτή τη γραμμή, δεν υπάρχει περίπτωση να εγκατασταθεί. Εδώ ο xf86-video-ati έαν δει παλαιότερο Xorg, δεν εγκαθίσταται. Εάν κάποιος βέβαια έχει μπει στην διαδικασία να χτίσει τον xf86-video-ati, θα έχει κατέβει ο Xorg server 1.5 ως makedepend, οπότε το conflict πια θα είναι ανενεργό.
Κώδικας:
conflicts=('xorg-server<1.5.0')
14. Εδώ είναι ειδική η περίπτωση. Εδώ κοιτάμε το /etc/makepkg.conf τί λέει:

#-- 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 αρχεία). Βλέποντας και κάνοντας, δεν είναι στάνταρ και είναι ώρες ώρες πρόβλημα του κώδικα ή των προγραμμάτων.


Κώδικας:
options=('!libtool')
15. Η license.
Κώδικας:
license=('GPL')
16. Ό,τι πρόσθετο source ή image ή ό,τι θέλουμε για να συμπεριληφθεί στο πακέτο:
Κώδικας:
source=(http://downloads.sourceforge.net/sourceforge/mesa3d/MesaLib-${_mesaver}.tar.bz2
       mesa-7.1-link-shared.patch)
αλλιώς το αφήνουμε αδειο :

Κώδικας:
source=("")
17. Τα md5sums, εάν έχουμε πρόσθετα sources. Αλλιώς κενό
Κώδικας:
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

{
μπλα μπλα
}
(μην ξεχνάτε τα {} στην αρχή και το τέλος και ό,τι χρειάζεται για το χτίσιμο, τα βάζετε εκεί μέσα)


Κώδικας:
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
Αλλά μετά αλλάζει. Για να χτιστεί έχουμε αρκετές μεθόδους, ανάλογα με τον κώδικα. Άλλα έχουν σκριπτάκια που λέγονται autogen.sh, άλλα έχουν έτοιμα configure scripts, άλλα έχουν CMakeLists.txt. Το καθένα χτίζεται διαφορετικά. Εαν δείτε πχ autogen.sh στο source, τρέχτε το τοπικά (./autogen.sh) και θα εμφανιστεί το configure. Τρέξτε μετά ./configure --help και θα δείτε τί options έχει.

Για περισσότερα, κοιτάχτε το Arch Wiki.


Κώδικας:
  ./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
Γ. Εάν χρειάζεται κάτι παραπάνω, το γράφετε μετά το πχ configure, make make install που'χει γίνει πιο πάνω:

Κώδικας:
  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"
}
Λοιπόν αυτό ήταν. Ναι, θέλει λίγο προσοχή και διάβασμα, αλλά εάν πάρετε ως παράδειγμα ένα άλλο PKGBUILD και αλλάξετε τα ονόματα και τα URLs, θα γλυτώστε χρόνο .

Αυτάααααα

Submit "Φτιάξ'το μόνος σου: PKGBUILD για Git πακέτα." to Facebook Submit "Φτιάξ'το μόνος σου: PKGBUILD για Git πακέτα." to Twitter

Updated 25-02-09 at 02:45 by flamelab

Categories
Τοξοτά crazy tips

Σχόλια

  1. Το avatar του μέλους dimstog
    Άιντεεε... πήρες φόρα εσύ Και με τα blog και με τα avatar... Αλήθεια, από ποια σειρά είναι; Ή είναι από παιχνίδι;
  2. Το avatar του μέλους flamelab
    Eίναι η Ruby, η μασκόν της ATi