You are not logged in.
Χαιρετω, εγραψα ενα απλο προγραμματακι με ονομα arch-cookie το οποιο μεσα απο μια λιστα μηνυματων μπορει τυχαια ή κατεπιλογή να το προσθεσει στο /etc/issue ωστε να εμφανιζεται πριν απο την εισοδο στο συστημα, Ακομα μπορει να παραγει ενα τυχαιο μηνυμα για να το χρησιμοποιήσετε οπως θελετε. Αυτα με λιγα λογια. Θα ηθελα ομως να το μοιραστω πχ να το βαλω στο AUR. Μπορει καποιος πιο εμπειρος να μου πει τι πρεπει να κανω; πχ που πρεπει να ανεβασω το source τι αρχεια να φτιαξω και πως. Ειδα το wiki αλλα ηθελα 2 κουβεντες για να μην κανω λαθος, εστω καποιον μπουσουλα.
Ευχαριστω
Last edited by Zapman (2012-06-19 08:01:18)
Offline
Μπορείς να βρεις το αρχείο /usr/share/pacman/PKGBUILD.proto το οποίο είναι ένας "σκελετός" για να στήσεις το δικό σου PKGBUILD. Απλά συμπληρώνεις τα σχετικά πεδία και σβήνεις όσα δεν χρησιμοποιείς. Τα πεδία που έχουν τη μέγιστη σημασία είναι τα εξής
pkgname: Το όνομα προφανώς, pkgver: η έκδοση και pkgrel: το revision του PKGBUILD (νούμερα 1,2,3...). Επίσης arch η αρχιτεκτονική στην οποία απευθύνεται το πακέτο. Αν είναι compiled πρόγραμμα μπορείς να γράψεις arch=('i686' 'x86_64') για να δημιουργηθούν πακέτα και για τα δύο flavours του arch Έτσι αν έχεις
pkgname="arch-cookie"
pkgver="1.1"
pkgrel="1"
arch=('i686' 'x86_64')
license=("GPL") # η άδεια χρήσης του προγράμματος
και ο χρήστης κάνει compile το πρόγραμμα σε έναν arch 64 θα πάρει το πακέτο arch-cookie-1.1-1_x86_64.tar.xz
Αν το πρόγραμμα δν απαιτεί compile, είναι πχ ένα python script, ή ένα shell script ή οτιδήποτε τότε αρκεί να βάλεις 'any' αντί των άλλων δύο.
Το πεδίο depends είναι τα πακέτα που απαιτούνται για να ΤΡΕΞΕΙ το πρόγραμμα, ενώ το πεδίο makedepends είναι τα πακέτα που απαιτούνται για να ΔΗΜΙΟΥΡΓΗΘΕΙ το πακέτο, αλλά όχι για να τρέξει το πρόγραμμα (μπορούν δλδ να απεγκατασταθούν μετά την κατασκευή του πακέτου). Το optdepends είναι πακέτα που είναι προαιρετικά για τη λειτουργία του προγράμματος.
Τα πεδία provides και conflicts έχουν να κάνουν με αλληλεπιδράσεις του προγράμματος με ήδη υπάρχοντα πακέτα. Αν το πακέτο που πακετάρεις (sic!) αντικαθιστά κάποιο άλλο τότε πρέπει να γράψεις στο provides αυτό το πακέτο. Ομοίως, αν δν μπορεί να συνυπάρξει με κάποιο άλλο πακέτο πρέπει να αναφερθεί στο conflicts.
To source είναι η διεύθυνση των sources του προγράμματός σου που πρέπει να ξέρει το makepkg ούτως ώστε να τις κατεβάσει. Το md5sums (ή sha1sums ή οτιδήποτε, δες το wiki) είναι τα checksums των παραπάνω sources ούτως ώστε να μπορεί το makepkg να ελέγξει το integrity των αρχείων που κατέβασε. Το install είναι το όνομα του αρχείου που εκτελείται πριν/μετά την εγκατάσταση/απεγκατάσταση/επανεγκατάσταση/αναβάθμιση του πακέτου. Για τα hooks δες το wiki.
Τέλος οι functions build() και package() χτίζουν το πρόγραμμα και το πακέτο αντίστοιχα και εξαρτώνται από το πως είναι φτιαγμένο το πρόγραμμά σου. Δυστυχώς εδώ θα πρέπει να δώσεις περισσότερες πληροφορίες για το πως είναι δομημένο το πρόγραμμά σου για να μπορείς να πάρεις κάποια βοήθεια. Αν γίνεται compile με τα συνήθη autotools (make κλπ) τότε το .proto αρχείο είναι ήδη έτοιμο. Σε διαφορετική περίπτωση απαιτούνται άλλοι χειρισμοί. Εν ολίγοις, τουλάχιστον για το package() πρέπει να αντιγράψεις τα αρχεία του προγράμματος στις κατάλληλες θέσεις του filesystem, αλλά ΠΑΝΤΑ ΣΕ ΣΧΕΣΗ ΜΕ ΤΟ $pkgdir. Τουτέστιν, αν θες να πάει το αρχείο foo στον κατάλογο /usr/bin, τότε πρέπει να γράψεις install -m 755 foo ${pkgdir}/usr/bin (το -m είναι τα permissions σε octal notation, το 755 αντιστοιχεί σε rwxr-xr-x), αλλά αυτό είναι ένα μόνο παράδειγμα, καθώς όπως είπα εξαρτάται από το πως είναι δομημένο το πρόγραμμα.
Ο μόνος τρόπος για να μάθεις πως δουλεύει το build system είναι να πατήσεις επάνω στο prototype που σου είπα και να συμπληρώσεις τα πεδία, μετά το makepkg -s θα φτιάξει το πακέτο με βάση το PKGBUILD. Λύνοντας τα προβλήματα που προκύπτουν με τη βοήθεια του wiki (και το forum θαρρώ) θα εξοικειωθείς με το σύστημα. Το wiki είναι η καλύτερη βοήθεια που μπορείς να έχεις.
Offline
Φουκώ,
Παρατήρησα ότι η σελίδα wiki για PKGBUILD δεν έχει ελληνική μετάφραση. Θα είχατε την καλοσύνη να μεταφράσει αυτή τη σελίδα για μας στα ελληνικά το οποίο θα βοηθήσει άλλους Έλληνες με παρόμοιες ερωτήσεις.
Ξέρω ότι οι παραπάνω προτάσεις Ελλήνων είναι απολύτως λάθος. Αλλά δεν μου φταίει, φταίει το Google Translate. Ο μόνος Έλληνας που ξέρω είναι τα ονόματα των αδελφότητες και αδελφότητες στα αμερικανικά πανεπιστήμια.
Αλλά αυτό είναι ότι το νήμα είναι στην ενότητα Άλλοι Γλώσσες, εγώ δεν θα τολμούσα απάντηση στα αγγλικά.
Έχω πάρα πολύ χρόνο στη διάθεσή μου σήμερα
There's no such thing as a stupid question, but there sure are a lot of inquisitive idiots !
Offline
Ευχαριστω θερμα για το εκτενεστατο ποστ. Μια απορια που γεννηθηκε ειναι : τα πηγαια αρχεια h cpp του προγραμματος που θα τα ανεβασω για να τα βρει το makepkg Υπαρχει καποια τοποθεσια που χρησιμοποιειται συνηθως;
@Inxsible: It is in my immediate plans to translate that page as i find it very important. I have already translated some other pages if you are interested.
Last edited by Zapman (2012-06-15 19:17:50)
Offline
Θα μπορούσες ενδεχομένως το tar.gzipάρεις και να το ανεβάσεις κάπου. Αλλιώς φτιάξε account στο github
Offline
Zapman, ενδεχομένως και στο dropbox. Αρκεί να είναι κάτι που κατεβάζει άμεσα, πχ όχι MegaUpload ή κάποια παρόμοια υπηρεσία που απαιτεί δεκαπέντε redirections και μερικές προσευχές για να κατεβάσει.
And seeing how Inxsible mentioned it, is there a greek translations team for the wiki? I can volunteer some work on that too.
Intel(R) Celeron(R) CPU E3400 @ 2.60GHz, x86_64. AURs.
“No one without the knowledge of geometry may enter.“ Plato.
Offline
And seeing how Inxsible mentioned it, is there a greek translations team for the wiki? I can volunteer some work on that too.
Εγώ έκανα την αρχή πάντως. Όσοι πιστοί προσέλθετε.
Offline
Καλησπερα,
Εχω το εξης PKGBUILD:
# Maintainer: Your Name <youremail@domain.com>
pkgname=arch-cookie
pkgver=1.0
pkgrel=1
pkgdesc="A ramdom message generator for /etc/issue"
arch=('i686' 'x86_64')
license=('GPL')
provides=(arch-cookie)
conflicts=(arch-cookie)
source=(http://i.minus.com/1340120103/zHl0AtMDR1s-jbhODF4gfg/dbdyiQvdJsDFXm/$pkgname-$pkgver.tar.gz)
md5sums=('56d28a59aaaef34c4f9d4b038e1fdd20')build() {
cd "$srcdir/$pkgname-$pkgver"
make
}package() {
cd "$srcdir/$pkgname-$pkgver"
install -m 755 $pkgname ${pkgdir}/usr/bin
}
και την παρακατω εξοδο:
==> Making package: arch-cookie 1.0-1 (Mon Jun 18 19:53:02 EEST 2012)
==> Checking runtime dependencies...
==> Checking buildtime dependencies...
==> Retrieving Sources...
-> Downloading arch-cookie-1.0.tar.gz...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 6141 100 6141 0 0 6750 0 --:--:-- --:--:-- --:--:-- 6750
==> Validating source files with md5sums...
arch-cookie-1.0.tar.gz ... Passed
==> Extracting Sources...
-> Extracting arch-cookie-1.0.tar.gz with bsdtar
==> Starting build()...
g++ arch_cookie.h arch_cookie.cpp main.cpp -o arch-cookie
==> Entering fakeroot environment...
==> Starting package()...
install: cannot create regular file ‘/home/user/build/arch-cookie-1.0/rel/pkg/usr/bin’: No such file or directory
==> ERROR: A failure occurred in package().
Aborting...
Το μονο που θελω ειναι το εκτελεσιμο "arch-cookie" να μετακινηθει στο /usr/bin. τι πρεπει να κανω;
Offline
Ακυρο.. εβαζα λαθος path και δεν το εβλεπα.. Duh!
Ευχαριστω για ολα παιδια
Offline
Ενημερώνω ότι μόλις ολοκλήρωσα την μετάφραση του άρθρου. Όσοι χρειάζονται βοήθεια ας το επισκεφτούν και αν βρεθούν λάθη ας επισημανθούν / διορθωθούν.
Last edited by Zapman (2012-06-22 09:16:23)
Offline