Κυριακή, 27 Μαρτίου 2011

Ubuntu administration: metapackages

Μετά από reinstall ή όταν φτιάχνουμε μια καινούργια debian/ubuntu-based εικονική μηχανή ή LiveCD/LiveDVD/chroot για κάποιο συγκεκριμένο σκοπό, χρειαζόμαστε ένα σύνολο από πακέτα εγκατεστημένα. Το να εγκατασταθούν αυτά τα πακέτα ένα-ένα με το χέρι είναι κάτι πολύ βαρετό, γι αυτό το debian συμπεριέλαβε από πολύ νωρίς την ιδέα των "metapackages". Πακέτα δηλαδή που δεν εγκαθιστούν αρχεία, αλλά είναι απλά ένα σύνολο από εξαρτήσεις (dependencies) προς τα πακέτα που θέλουμε να εγκαταστήσουμε.

Για παράδειγμα σκεφτείτε ένα metapackage "meta-text-mode-development" το οποίο εγκαθιστά π.χ., τα build-essential, gdb, autoconf, automake, cmake, strace, ltrace, ctags, git, subversion, mercurial κλπ κλπ κλπ

Την επόμενη φορά που θα βρεθείτε σε ένα "vanilla" σύστημα και θα θέλετε να το κάνετε χρήσιμο, το μόνο που θα χρειάζεται είναι ένα
 sudo apt-get install meta-text-mode-development
και τελειώσαμε :)

Δυστυχώς αυτό όμως μπορεί να γίνει μόνο αν το metapackage αυτό είναι σε κάποιο apt repository στο οποίο έχουν πρόσβαση όλα σας τα μηχανήματα. Εδώ λοιπόν έρχεται η ubuntu να βοηθήσει με το launchpad, και τη δυνατότητα που παρέχει αυτό για "personal package archives" , δηλαδή ουσιαστικά 2GB δωρεάν web space προσβάσιμο από το apt καθώς και τον υπολογιστικό χρόνο για την μεταγλώττιση των πακέτων σας.

Η ιδέα είναι λοιπόν απλή. Κάθε φορά που θέλουμε ένα σύνολο πακέτων που μαζί παρέχουν μία ενιαία λειτουργία, φτιάχνουμε ένα metapackage, το βάζουμε στο ppa μας και μετά σε κάθε καινούργιο ubuntu μηχάνημα που θέλουμε να αξιοποιήσουμε το metapackage κάνουμε το αντίστοιχο του:
 sudo add-apt-repository ppa:pktoss/ppa
sudo apt-get update
Και πλέον όλα μας τα metapackages είναι στη διάθεσή μας :)

Φτιάχνοντας τα δικά μας metapackages

Όλα καλά και ωραία, αλλά αν δεν υπάρχει κάποιος σχετικά εύκολος / γρήγορος τρόπος για να φτιάχνουμε metapackages τότε το όλο εγχείρημα δε μας προσφέρει και πολλά. Ευτυχώς για εμάς, η debian έχει και πάλι (σχεδόν) φροντίσει γι αυτό.

Και το όνομα του πακέτου-σωτήρα μας είναι: equivs. (sudo apt-get install equivs για εγκατάσταση)

Οι χρήσεις αυτού του μικροσκοπικού αλλά θαυματουργού πακέτου ξεπερνούν τα όρια αυτού του άρθρου, αλλά αυτό που μας ενδιαφέρει είναι ότι μας επιτρέπει να φτιάχνουμε metapackages εύκολα.

Το μόνο που χρειάζεται είναι η κατασκευή ενός αρχείου κειμένου όπως το παρακάτω:

 Section: misc
Priority: optional
Suite: maverick
Standards-Version: 3.6.2
Package: pkt-meta-textmath
Version: 1.1
Maintainer: Pantelis Koukousoulas <pktoss@gmail.com>
Depends: maxima, yacas, gnuplot, bc
Architecture: all
Description: Text-mode math tools
Text-mode packages for mathematics.

Σώζουμε το παραπάνω ως pkt-meta-textmath και τρέχοντας
 equivs-build pkt-meta-textmath
μας φτιάχνει το .deb πακέτο του metapackage. Αν και το πακέτο αυτό είναι ήδη χρήσιμο (π.χ., αν το εγκαταστήσουμε μέσω του gdebi θα εγκαταστήσει τα dependencies) δεν έχουμε πετύχει ακόμα αυτό που θέλουμε, δηλαδή να έχουμε το πακέτο σε μορφή debian source ώστε να μπορούμε να το κάνουμε upload στο ppa μας.

Δυστυχώς για να το πετύχουμε αυτό, χρειάζεται μια "ψιλοεπεμβασούλα" (patch) στο equivs, το οποίο εκκρεμεί κάποιο καιρό τώρα. Εντωμεταξύ, ο ευκολότερος τρόπος είναι να κάνουμε fork το equivs (ναι, fork, γιατί όχι, welcome to open source / free software :P ).

Το αποτέλεσμα είναι το equivs-ppa που μπορείτε να το βρείτε στο ppa μου και μπορείτε να το εγκαταστήσετε με
 sudo add-apt-repository ppa:pktoss/ppa
sudo apt-get update
sudo apt-get install equivs-ppa
ή (αν δε θέλετε να εγκαταστήσετε το ppa) με
 sudo add-apt-repository ppa:pktoss/ppa
sudo apt-get update
sudo apt-get install equivs-ppa
Χρησιμοποιώντας το equivs-ppa, η δημιουργία ενός metapackage γίνεται κάπως έτσι:
 cp template my-metapackage  # το template έχει κάτι σαν το παραπάνω κείμενο
edit my-metapackage # βάζετε το σωστό όνομα, dependencies, περιγραφή
mkdir build
cd build
equivs-ppa-build -S ../my-metapackage
dput ppa:pktoss/ppa *.changes # το δικό σας username αντί για pktoss
rm -rf build
Εύκολη δημιουργία, εύκολη εγκατάσταση, πρόσβαση από παντού,
ευχαριστώ πολύ, Ubuntu :)

Παντελής

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου