Επόμενο Προηγούμενο Περιεχόμενα
Η διαδικασία του Gerard Beekmans είναι απλή (στη σύλληψη)
αλλά και ταυτόχρονα δύσκολη (στην εφαρμογή). Ο Gerard μας
έκανε τη χάρη να μας το κάνει λίγο πολύ τυφλοσούρτη. Να
πως έχει:
Πρέπει στο μηχάνημα που θα χτίσουμε το Linux, να υπάρχει
ήδη ένα Linux προεγκατεστημένο (θυμάστε; χρειαζόμαστε
έναν compiler). Αφού φτιάξουμε λοιπόν ένα partition (το
οποίο τελικά θα είναι το root partition του τελικού μας
συστήματος) ξεκινάμε να κάνουμε compile εκεί μέσα κάποια
προγράμματα. Όλα statically linked (γιατί κάποια στιγμή
θα αποκοπούν από το παλιό σύστημα) εκτός από ένα. Ναι
σωστά μαντέψατε, τη glibc.
Εγώ προετοίμαζα (αρχικά) το linux μου για ένα μηχανάκι
K6-200. Επειδή φαντάστηκα (και δεν είχα άδικο :-) ότι η
διαδικασία σε αυτό το μηχάνημα θα ήταν αρκετά αργή,
αποφάσισα να την κάνω σε ένα άλλο μηχάνημα που έχω, έναν
Athlon-500.
Δημιουργούμε ένα ψευτο-σύστημα στο οποίο δεν μπορούμε να
κάνουμε boot (γιατί θα λείπουν κάποια βασικά πράγματα
όπως η εντολή mount και το lilo) μπορούμε όμως να κάνουμε
chroot σε αυτό και να δουλέψουμε σαν να είναι πραγματικό
σύστημα. Εδώ, σε περίπτωση που κάνετε κάτι παρόμοιο με
μένα, θα πρέπει να προσέξετε το εξής: Αν και ο Gerard δεν
το αναφέρει πουθενά, καλό είναι να χρησιμοποιηθούν
compiler directives για compilation το οποίο να μπορεί να
μεταφερθεί σε χαμηλότερο σύστημα. Αν άφηνα το compile να
ακολουθήσει την πορεία του, θα έπαιρνα ένα σύστημα
optimized για i686, το οποίο βέβαια σε έναν K6 θα
"έσκαγε" με invalid instruction. Χρησιμοποίησα λοιπόν την
παράμετρο -mcpu=i486 στον gcc και έδωσα και την παράμετρο
--host=i486-pc-linux στο configure οποιουδήποτε
προγράμματος εγκαθιστούσα (όχι ότι έχει σημασία σε αυτό
το στάδιο, μια που όλα θα αντικατασταθούν εκτός από την
glibc. Για αυτήν πρέπει υποχρεωτικά να
χρησιμοποιηθεί η παράμετρος αυτή).
Το αποτέλεσμα (ναι, ακολουθήστε τα βήματα του Gerard, τα
λέει πολύ αναλυτικά, δεν θα ξαναμπω στην ίδια διαδικασία)
είναι ένα mini-σύστημα το οποίο μπορεί να κάνει μόνο
compile. Και μπορεί να τρέξει σε οποιοδήποτε μηχάνημα
κλάσης 486 και πάνω (άρα και στον ταπεινό μου Κ6). Άφησα
κάποια πακέτα του Gerard έξω από την διαδικασία (όπως ας
πούμε το bzip2) αν και αυτό δεν είναι απαραίτητο. Θα
έλεγα μάλλον ότι είναι μη-προτεινόμενο :-)
Στο σημείο αυτό, παίρνω ένα backup του συστήματος. Τι
είναι; ένα 200 Mb (περίπου) tar file το οποίο άν
συμπιεστεί (bzip2) πέφτει στα 40 Mb. Ας το κρατήσουμε σε
μία άκρη λοιπόν. Αν αύριο θελήσουμε να φτιάξουμε ένα
σύστημα optimized για 686 μπορούμε να ξεκινήσουμε από
αυτό, και συγκεκριμένα από το σημείο που εγκαθίσταται η
glibc και κάτω. Αν και, να παρατηρήσουμε, ότι το README
της glibc λέει ότι κανένα optimization δεν θα κάνει
διαφορά στην απόδοση, άρα μπορούμε να αποσυμπιέσουμε απλά
αυτό το tar και να συνεχίσουμε από το επόμενο στάδιο,
χωρίς να χάσουμε τίποτα.
Μόλις έχουμε γλιτώσει 2 με 3 ώρες από την επόμενη
εγκατάστασή μας (ανάλογα με το μηχάνημα στο οποίο κάνουμε
το compile). Επειδή λοιπόν κρατάω αυτό το αρχείο ως
"βάση", κάνω στον εαυτό μου μία χάρη και κάνω strip όλα
τα debugging symbols από τα static binaries (τα οποία
ούτως ή άλλως θα αντικατασταθούν) για να μικρύνω ακόμα
περισσότερο το αρχείο που θα κρατήσω. Επίσης, κάνω
compile με -O3 (εκτός από την glibc που την προτιμώ
unoptimised εφόσον την κάνω compile σε άλλη CPU).
Επόμενο Προηγούμενο Περιεχόμενα