Ubuntu Jedi: The path of the Source

Εδώ είμαστε λοιπόν, μάθαμε αρκετά για το πως θα βελτιστοποιήσουμε το Ubuntu. Όμως κάτι λείπει από όλη την υπόθεση έτσι δεν είναι; Βελτιστοποιήσαμε τον πυρήνα μας, διαβάσαμε και μάθαμε για τις εκτενής επιλογές που έχουμε, μάθαμε πως μπορούμε να βελτιστοποιήσουμε τα προγράμματα και τέλος μάθαμε πως να φτιάξουμε μια minimal εγκατάσταση του Ubuntu με τα απολύτως βασικά. Όμως ακριβώς κάτω από το άρθρο “Η άγρια πλευρά του Ubuntu”, πλανάται μια ερώτηση στον αέρα την οποία έκανε ο Distilo:

“θα μου άρεσε να δω compile ολόκληρης διανομής!!!! (θα έχει όντως διαφορά στις επιδόσεις;)”

Αμέσως μετά την ερώτησή του, ο Gentoo user Τζόρβας με “βομβάρδισε” κυριολεκτικά με πληροφορίες και γνώσεις που ούτε καν τις είχα φανταστεί.

Επομένως η ερώτηση που έμεινε να απαντηθεί είναι:

“Έκανα την πιο minimal εγκατάσταση του Ubuntu που μπορεί να κάνει κάποιος, έχω βελτιστοποιήσει τον πυρήνα Linux, αλλά θέλω έναν τρόπο να μπορώ να μεταγλωττίσω ολόκληρη την διανομή μου… γίνεται ? ”

Σημείωση: Η μέθοδος που θα περιγράψω μπορεί να χρησιμοποιηθεί και στην υπάρχουσα εγκατάσταση Ubuntu που έχετε. Δεν χρειάζεται να κάνετε εγκατάσταση minimal ή βελτιστοποίηση του πυρήνα. Ο λόγος που τα ενσωμάτωσα στην παραπάνω ερώτηση είναι για να έχουμε μια λογική συνέχεια. Εγώ θα συνεχίσω όμως με δεδομένα ότι έχω βελτιστοποιημένο πυρήνα και μια minimal Ubuntu εγκατάσταση διότι θέλω ταχύτητα-ταχύτητα-ταχύτητα και να επιλέγω εγώ τι θα έχει εγκατεστημένο το λειτουργικό μου. Αυτό που θα καταφέρουμε εν τέλει είναι να έχουμε ένα λειτουργικό στο οποίο η εγκατάσταση των προγραμμάτων και των αναβαθμίσεων θα γίνεται όπως και στο Gentoo Linux, από τον πηγαίο κώδικά τους. Εσείς μπορείτε να συνεχίσετε από την τωρινή σας εγκατάσταση Ubuntu.

Όπως είχα πει, πολλοί χρήστες προτιμούν να έχουν τον απόλυτο έλεγχο του συστήματος τους. Δεν φοβούνται τη χρήση του τερματικού και λατρεύουν τη δύναμή του. Οποιοσδήποτε όμως, μετά από 1-2 χρόνια χρήσης Ubuntu, είναι σίγουρο ότι έχει αποκτήσει αρκετή εμπειρία για να διαχειρίζεται το σύστημά του, έχει κάνει πάνω από 5-6 εγκαταστάσεις Ubuntu και σταδιακά μπορεί να επιθυμήσει να δοκιμάσει να «χτίσει» το λειτουργικό μόνος του χωρίς όμως να χάσει τις ευκολίες και το out-of-the-box (το λεγόμενο: απλά-δουλεύει) που προσφέρει το Ubuntu Linux. Για τον σκοπό αυτό θα χρησιμοποιήσαμε το επίσημο Ubuntu Minimal CD της Canonical το οποίο είναι μόλις 15ΜΒ λειτουργικό σύστημα. Το εγκαταστήσαμε, του βελτιστοποιήσαμε τον πυρήνα, μάθαμε πως να μεταγλωττίζουμε τα πακέτα του Ubuntu… μένει τώρα να

  • μεταγλωττίζουμε ολόκληρο το λειτουργικό σύστημα
  • να κατεβάζουμε και να κάνουμε εγκατάσταση μεταγλωττίζοντας τα προγράμματα μας
  • να ενημερώνουμε και να διατηρούμε αναβαθμισμένο το λειτουργικό μας με την χρήση της μεταγλώττισης των διαθέσιμων αναβαθμίσεων

Το πρόγραμμα που τα κάνει όλα αυτά είναι το Apt-Build. Αυτό το μαγικό πρόγραμμα κάνει περίπου ότι κάνει το “emerge” στο Gentoo. Του λέμε λοιπόν ότι θέλουμε να εγκαταστήσουμε το VLC και αυτό με τη σειρά του κατεβάζει αυτόματα όλες τις εξαρτήσεις του, κατεβάζει τον κώδικα του VLC, τον μεταγλωττίζει για τον επεξεργαστή μας, τον πακετάρει και τέλος τον κάνει εγκατάσταση. Απλός μας παίρνει περισσότερο χρόνο να γίνει η εγκατάσταση του προγράμματος σε σχέση με το Apt-Get διότι δεν κατεβάζει προ-μεταγλωττισμένα εκτελέσιμα αλλά κατεβάζει τον κώδικά και τα μετατρέπει σε εκτελέσιμα στον υπολογιστή μας.

Και εγένετο ο κώδικας…

Ανοίγουμε λοιπόν τον Synaptic Package Manager μας και κάνουμε αναζήτηση για “apt-build”. Αφού το βρούμε κάνουμε δεξί κλικ και εγκατάσταση. Μόλις αρχίσει η εγκατάσταση το πρόγραμμα Apt-Build θα μας ρωτήσει κάποια πράγματα και απαντάμε αντίστοιχα:

  • Optimization level: Medium
  • Add apt-build repository to source.list?: Ναι
  • Architecture: core2 (εδώ ΠΡΟΣΟΧΗ, εσείς διαλέγετε απο την λίστα σας, την αρχιτεκτονική σας. Εγώ έχω i7 quad-core και επομένως διαλέγω “core2”. Δυστυχώς πρέπει να μπείτε στον κόμπο να ψάξετε στο Google, για την αρχιτεκτονική του επεξεργαστή σας. )

Μόλις τελειώσετε θα χρειαστεί να ανοίξουμε ένα τερματικό για να αρχίσουμε την χρήση του. Ανοίξτε λοιπόν ένα τερματικό και ελάτε να “πειράξουμε” λίγο το αρχείο ρυθμίσεων του Apt-Buid με τον κειμενογράφο Gedit:

sudo gedit /etc/apt/apt-build.conf

Εδώ θέλει προσοχή λοιπόν. Μας ενδιαφέρει να τροποποιήσουμε τη γραμμή που λέει για options = » « και make_options = » «. Εδώ ουσιαστικά δηλώνουμε στον μεταγλωττιστή, αυτόν δηλ που παίρνει τον πηγαίο κώδικα των προγραμμάτων και τα μετατρέπει σε εκτελέσιμα προγράμματα, ότι θέλουμε να βελτιστοποιεί τα προγράμματα για την αρχιτεκτονική μας (options =» » ) αλλά και να επιταχύνει την μεταγλώττιση κάνοντας χρήση όλους τους επεξεργαστές μας (make_options=» » ).

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

build-dir = /var/cache/apt-build/build

repository-dir = /var/cache/apt-build/repository

Olevel = -O2

mtune = -mtune=core2

options = "-march=native -pipe"

make_options = "-j9"

Για να βρείτε τι θα βάλετε στο make_options θυμηθείτε τι μάθαμε στο προηγούμενο άρθρο για το CONCURENCY_LEVEL. Αν θυμάστε λέγαμε ότι η μεταγλώττιση να χρησιμοποιεί τον αριθμό των επεξεργαστών μας, επι 2 και προσαυξημένο κατά μια μονάδα. Η αλλιώς διεργασίες = (επεξεργαστές*2) +1. Ο υπολογιστής μου είναι τετραπύρηνος άρα 8+1=9, οπότε στο -J βάζω το 9. Εσείς βάλτε αυτό που αντιστοιχεί στους επεξεργαστές σας. Δεν πειράζει αν κάνετε λάθος, απλά μην ξεπεράσετε το 9, διότι δε νομίζω κάποιος από εσάς να έχει οκταπύρηνο επεξεργαστή… και να μην μας το λέει ??

Για το option μπορείτε να βάλετε ότι και εγώ, το οποίο θα βελτιστοποιήσει τα προγράμματα γαι τον τοπικό (native) επεξεργαστή. Για τους πιο τολμηρούς συνιστώ να επισκεφτείτε την σελίδα του Gentoo για τους AMD επεξεργαστές http://en.gentoo-wiki.com/wiki/Safe_Cflags/AMD και τους INTEL επεξεργαστές http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel για να μάθετε περισσότερα σχετικά με τα options που μπορείτε να δηλώσετε. Εμείς εδώ θα αρκεστούμε με αυτά που κάναμε.

Κάτι τελευταίο που πρέπει να ελέγξετε είναι να είναι ενεργοποιημένα τα αποθετήρια του πηγαίου κώδικα των προγραμμάτων. Πρέπει να θυμάστε πάντα ότι το Apt-Build ψάχνει για αποθετήρια με πηγαίο κώδικα, έτσι αν δεν βρει κάτι απλά δεν θα μπορέσει να εκτελέσει την δουλειά του. Για να δούμε ότι είναι ενεργοποιημένα τα αποθετήρια του πηγαίου κώδικα πηγαίνουμε στο Synaptic Package Manager, στο μενου Settings -> Repositories κοιτάμε να είναι με tick [v] εκεί που λέει “Sources”. Επίσης πρέπει να δούμε ότι όσα αποθετήρια έχουμε προσθέσει διαθέτουν πηγαίο κώδικα ενεργοποιημένο. Μπορείτε εύκολα να τα αναγνωρίσετε αυτά από το πρόθεμα “deb-src” που έχουν.

repositories-source-code

Ας αρχίσουμε τα μαγικά…

Το πρώτο πράγμα είναι να συγχρονίσουμε το apt-build με τα αποθετήρια μας. Για να το κάνουμε αυτό δίνουμε στο τερματικό την πρώτη μας “διαταγή” στο apt-build:

sudo apt-build update

Το Apt-Build όπως και το Apt-Get ως πρόγραμμα εγκατάστασης εφαρμογών μέσω τερματικού δέχεται κάποιες “εντολές” και “παραμέτρους”. Εδώ θα δούμε τα πιο σημαντικά από αυτά. Για μια πλήρη όμως λίστα αυτών μπορείτε να βρείτε δίνοντας σε τερματικό:

man apt-build

Τα πιο σημαντικά από αυτά είναι :

  • sudo apt-build update Ανανεώνει τη λίστα των πακέτων που είναι διαθέσιμα για εγκατάσταση (όπως το apt-get update).
  • sudo apt-build upgrade Εκτελεί αναβάθμιση του συστήματος, εάν υπάρχουν διαθέσιμες ενημερώσεις (όπως το apt-get upgrade).
  • sudo apt-build install ΟΝΟΜΑ_ΠΡΟΓΡΜΜΑΤΟΣ κάνει εγκατάσταση νέα πακέτα (όπως το apt-get install).
  • sudo apt-build remove ΟΝΟΜΑ_ΠΡΟΓΡΜΜΑΤΟΣ Αφαιρεί τα εγκατεστημένα προγράμματα (όπως το apt-get remove).

Αν λοιπόν, για παράδειγμα θέλετε να εγκαταστήσετε βελτιστοποιημένο για το σύστημά σας το Htop (πρόγραμμα για πληροφορίες συστήματος σε τερματικό), τότε δίνετε την εξής διαταγή στο apt-build:

sudo apt-build install htop

Το πρόγραμμά apt-build θα αρχίσει να κάνει χρήση των καταχωρήσεων deb-src που περιέχονται στο /etc/apt/sources.list και να ψάχνει το πρόγραμμα που ζητήσατε. Χάρη στο apt-build η μεταγλώττιση και εγκατάσταση είναι πλήρως αυτοματοποιημένη διαδικασία (παρόμοια με την emerge του Gentoo). Αφού κατεβάσει τον πηγαίο κώδικα του Htop, θα κάνει λήψη των εξαρτίσεων του, θα προχωρήσει στην μεταγλώττιση του (εδώ είναι καλό να σηκωθείτε και να πάτε για καμιά βολτούλα), θα δημιουργήσει ένα πακέτο deb, και τέλος θα το εγκαταστήσει.

Αν το πρόγραμμα που θέλετε να εγκαταστήσετε ήταν ήδη εγκατεστημένο πριν διαβάσετε αυτό το άρθρο μπορείτε να κάνετε χρήση της παρακάτω διαταγής για να το ξανά εγκαταστήσετε βελτιστοποιημένο για το σύστημά σας:

sudo apt-build --reinstall install ΟνομαΠρογράμματος

Ξαναχτίζοντας το Σύμπαν σε 7 ημέρες

Ο τίτλος μπορεί να σας ακούγετε αστείος αλλά δεν απέχει από την πραγματικότητα. Με το Apt-Build υπάρχει η δυνατότητα να μεταγλωττίσετε ολόκληρη τη διανομή σας από τον πηγαίο κώδικά του! Όμως δεν είστε υποχρεωμένοι να το κάνετε, απλά διαβάστε το και αποφασίστε αν σας κάνει.

Για να το πετύχουμε υπάρχουν κάποιες προϋποθέσεις:

  1. Πρέπει να έχουμε μπόλικο χώρο στο δίσκο μας
  2. Να δεχτούμε το γεγονός ότι ο υπολογιστής μας μπορεί να χρειαστεί να παραμείνει ανοιχτός για 2 μέρες συνεχόμενα (ανάλογα τις επιδώσεις του)
  3. Να δηλώσουμε το σύνολο των εφαρμογών που απαρτίζει το λειτουργικό μας σύστημα στο αρχείο λίστας του Apt-Build

Τα πρώτα δύο μένουν στη κρίση σας ενώ το τελευταίο για να το κάνουμε, θα χρειαστεί να συνδεθούμε ως “root” στο τερματικό μας. ΠΡΟΣΟΧΗ: Καλό είναι να απενεργοποιήσετε πρώτα τα ανεπίσημα αποθετήρια, πριν κάνετε την παρακάτω διαδικασία και εν τέλει να το χρησιμοποιήσετε σε minimal διανομή Ubuntu ώστε να είναι λιγότερα τα πακέτα προς μεταγλώττιση. Για να το κάνουμε εκτελούμε τα εξής:

sudo su (για να συνδεθούμε ως root)

και έπειτα αντιγράφετε την παρακάτω διαταγή:

dpkg --get-selections | awk '{if ($2 == "install") print $1}' > /etc/apt/apt-build.list

τέλος δώστε

exit

αυτό θα αντιγράψει την λίστα των στοιχείων που απαρτίζει την διανομή σας στο αρχείο apt-build.list.

Ανοίξτε στο ίδιο τερματικό το αρχείο και αφαιρέστε όποιο πρόγραμμα δεν διαθέτει πηγαίο κώδικα στα αποθετήρια και ότι έχει να κάνει με GCC/G++. Για να το κάνετε:

sudo gedit /etc/apt/apt-build.list

Αφού τελειώσετε με τα παραπάνω και είστε σίγουροι οτι ήρθε η μεγάλη στιγμή να ξαναχτίσετε την διανομή σας τότε δίνετε στο τερματικό σας την παρακάτω διαταγή:

sudo apt-build --force-yes world

Προσωπικά δεν το έχω χρησιμοποιήσει ποτέ και μάλλον δεν πρόκειται να το χρησιμοποιήσω γιατί δεν έχω σταθερό υπολογιστή οπότε δεν προτίθεμαι να αφήσω για δυο 24ωρα ανοιχτό το laptop μου.

Τελευταίες σκέψεις….

Το αποτέλεσμα που θα έχουμε με την χρήση του Apt-Built αντί του Apt-Get είναι ουσιαστικά να έχουμε ένα ΥΒΡΙΔΙΚΟ λειτουργικό σύστημα το οποίο το μεγαλύτερο μέρος του είναι μεταγλωττισμένο ενώ ένα μικρό κομμάτι του πάντα δεν θα μπορεί να είναι δυνατό να μεταγλωττιστεί για τον υπολογιστή μας

Μια τέτοια διανομή μπορούμε να την χρησιμοποιήσουμε με το εξής σενάριο:

  • Για εγκατάσταση αναβαθμίσεων χρησιμοποιούμε το apt-build upgrade. Αν δεν υπάρχει για κάποια προγράμματα ο πηγαίος κώδικας τότε χρησιμοποιούμε το apt-get upgrade.
  • Για εγκατάσταση προγραμμάτων χρησιμοποιούμε το apt-build install Ονομ_πρόγραμμα. Αλλιώς μπορούμε να μεταγλωττίζουμε χειροκίνητα το πρόγραμμά που θέλουμε όπως μάθαμε σε προηγούμενο άρθρο. Αν δεν υπάρχει για κάποια προγράμματα ο πηγαίος κώδικας τότε χρησιμοποιούμε το apt-get install.
  • Κλπ….

Γενικά το αποτέλεσμα αν και θα έχει θετικά σημεία (βελτιστοποιημένο λειτουργικό και προγράμματα) ωστόσο απαιτεί υπομονή, χρόνο και διάθεση για μάθηση.

Να θυμάστε ότι το Apt-Build έχει αρκετά bug και μπορεί να σας σπάσει τα νεύρα λέγοντας σας για παράδειγμα ότι δεν βρήκε τον πηγαίο κώδικα κάποιο προγράμματος ενώ αυτό υπάρχει στα αποθετήρια. Παρόλα αυτά μην πτοείστε, χρησιμοποιήστε το και αν σας βγάλει πρόβλημα απλά αγνοείστε το και χρησιμοποιήστε το apt-get για την εγκατάσταση προγραμμάτων.

Κάτι που πρέπει συχνά πυκνά να κάνετε είναι να καθαρίζετε τα πακέτα που κατεβάζει το apt-build για την δουλειά που χρειάζεται να εκτελέσει γιατί υπάρχει περίπτωση να ξεμείνετε από χωρητικότητα δίσκου.

sudo apt-build clean-build

και

sudo apt-build clean-repository

Με αυτό τον οδηγό κλείνουμε ουσιαστικά το μεγάλο θέμα της βελτιστοποίησης της διανομής Ubuntu από τον πυρήνα μέχρι τα προγράμματα μας. Ελπίζω να μην σας κούρασα και το ταξίδι να ήταν εποικοδομητικό. Καλό διάβασμα και

May The Source Be With You

15 thoughts on “Ubuntu Jedi: The path of the Source

  1. αυτα ειναι…αρα περιμενω και εγω να φτιαξω το καινουργιο μου desktop σε 2 μηνες (εχω ξεμεινει με λαπ-τοπ για λιγο καιρο) και αρχιζουμε…οποτε θα επανελθω τοτε με ερωτησεις…μαλλον στο φορουμ.

    ερωτηση1: για τα προγραμματα (και οχι για τη διανομη) εχει καμια διαφορα να προτιμησω το apt-build αντι του χειροκινητου τροπου που μας εδωσες στο παλιοτερο αρθρο; https://cerebrux.net/2010/12/23/haking-the-power-of-source/ ή εχει το ίδιο αποτελεσμα;

    Ειλικρινα τρεφω φοβερη εκτιμηση για εσας του Jedi και ευχαριστω πολυ που βοηθατε να δημιουργηθει μια βαση δεδομενων με συγκεντρωμενη πολυτιμη γνωση. Δυστυχως μεχρι τωρα αυτη η γνωση δεν ηταν τοσο προσβασιμη (οκ ειχα εντοπισει τους gentoo Jedi αλλα στα φορουμ τους χανεσαι..δεν ειναι τοσο for dummies οι οδηγιες τους).

    • Οι λόγοι να προτιμήσεις το χειροκίνητο είναι:

      -Θέλεις να περάσεις περισσότερες παραμέτρους CFLAGS στο gcc για να βελτιστοποιήσεις ακόμα περισσότερο το λογισμικό που θέλεις να εγκαταστήσεις.
      -Το apt-build είναι βολικό όταν θες να εγκαταστήσεις παραπάνω από 2 προγράμματα ταυτόχρονα (όπως π.χ. αναβαθμίσεις και μαζικές εγκαταστάσεις)
      -To apt-build σου έχει σπάσει τα νεύρα και δεν κατεβάζει τον πηγαίο κώδικα.

      • Ο πηγαίος κώδικας των ppa πρέπει να προστεθεί χειροκίνητα στο/etc/apt/sources.list . To apt build δεν διαβάζει τον φάκελο sources.list.d! Γι' αυτό βγάζει μήνυμα λάθους σε κάποια πακέτα.

  2. "Για να βρείτε τι θα βάλετε στο make_options θυμηθείτε τι μάθαμε στο
    προηγούμενο άρθρο για το CONCURENCY_LEVEL. Αν θυμάστε λέγαμε ότι η
    μεταγλώττιση να χρησιμοποιεί τον αριθμό των επεξεργαστών μας, επι 2 και
    προσαυξημένο κατά μια μονάδα. Η αλλιώς διεργασίες = (επεξεργαστές*2) +1.
    Ο υπολογιστής μου είναι τετραπύρηνος άρα 8+1=9, οπότε στο -J βάζω το 9."
    Από οτι διάβασα στο manual του gcc, ο αριθμός πρέπει να είναι 2 συν 1 για κάθε έξτρα πυρήνα. Για την περίπτωσή σου δηλαδή 5 και όχι 9.

    • 2/core + 1 = 9 Για ξανασκέψου το. ;) 
      Έχω 4 πυρήνες. άρα 2 διεργασίες για κάθε πυρήνα + 1 το αποτέλεσμα είναι 9 …. όχι 4…. Αν αν αναθέσω 1 διεργασία σε κάθε πυρήνα τότε έχω 4 διεργασίες + 1 = 5.
      Δες και την εικόνα παρακάτω:

      • Δεν το είχα δει στο manual του gcc εντέλει αλλά στο wiki του Arch. "The MAKEFLAGS option can be used to specify additional options for make.
        Users with multi-core/multi-processor systems can specify the number of
        jobs to run simultaneously. Generally -j2, plus 1 for each additional core/processor is an adequate choice."
        Όταν το είχα δοκιμάσει στο lubuntu σε netbook με Atom (2 πυρήνες) είχα βάλει 5 όπως προτείνεις. Απλά αργότερα είδα αυτό στο arch. Δουλεύουν και τα δυο. Δεν ξέρω όμως ποιο είναι το βέλτιστο. To Gentoo λέει: "A good choice is the number of CPUs (or CPU cores) in
        your system plus one, but this guideline isn't always perfect."
        Ποια εικόνα;

        • Sorry για κάποιο λόγο το Disqus έχασε την εικόνα…. τέλος πάντων…
          Δεν έχει καμία σημασία το πόσο θα βάλεις εκτός του οτι έτσι βελτιώνεις τν ταχύτητα ολοκλήρωσης. Δηλαδή ολοκληρώνεται η διεργασία πιο γρήγορα οταν χρησιμοποιείς το σωστό αριθμό «jobs» παρά όταν το αφήνεις default. Πέρα απο αυτό, ο αριθμός αυτός δεν έχει καμία άλλη χρησιμότητα.

  3. Ερώτηση προς Salih : Έκανα apt-build world μετά από minimal install αλλά μπορώ να πω οτι τελείωσε αρκετά γρήγορα. Μάλλον δεν έκανε όλη τη δουλειά. Δεν έχει κανα .log  να δω τι έκανε και τι όχι?

Απορίες, παρατηρήσεις, ιδέες... Ελεύθερα ! Πες την άποψή σου... έστω και Ανώνυμα:

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s