B.5. Προχωρημένες επιλογές

B.5.1. Εκτέλεση προσαρμοσμένων εντολών κατά την διάρκεια της εγκατάστασης.

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

# H προρύθμιση του d-i είναι από την φύση της μη ασφαλής. Κανένα στοιχείο στον εγκαταστάτη δεν ελέγχει
# για προσπάθειες υπερχείλισης (buffer overflow) ή άλλες αδυναμίες στις τιμές ενός
# αρχείου προρυθμίσεων όπως αυτό εδώ. Χρησιμοποιείτε αρχεία προρυθμίσεων μόνο από
# τοποθεσίες που εμπιστεύεστε! Για να το πετύχετε αυτό, κι επειδή είναι γενικά χρήσιμο
# να ένας τρόπος αυτόματης εκτέλεσης οποιασδήποτε εντολής κελύφους μέσα από τον εγκαταστάτη.

# Αυτή η πρώτη εντολή εκτελείται όσο το δυνατόν νωρίτερα, αμέσως μετά
# το διάβασμα του αρχείου προρυθμίσεων.
#d-i preseed/early_command string anna-install some-udeb
# Η εντολή αυτή εκτελείται ακριβώς πριν την εκκίνηση του προγράμματος διαμερισης. Πιθανόν να είναι
# χρήσιμο να κάνετε προρύθμιση με το δυναμικό πρόγραμμα διαμέρισης που εξαρτάται από την κατάσταση
# των δίσκων (που πιθανόν να μην είναι ορατή όταν εκτελείται πρώιμα σαν preseed/early_command).
#d-i partman/early_command \
#       string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"
# Η εντολή αυτή εκτελείται μόλις πριν από την ολοκλήρωση της εγκατάστασης αλλά ενώ υπάρχει ακόμα
# ένας χρησιμοποιήσιμος κατάλογος /target. Μπορείτε να κάνετε chroot στον κατάλογο /target και να τον χρησιμοποιήσετε
# άμεσα ή να χρησιμοποιήσετε τις εντολές apt-install και in-target για να εγκαταστήσετε εύκολα
# πακέτα και να εκτελέσετε εντολές στο σύστημα προορισμού
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh

B.5.2. Χρήση preseeding για την αλλαγή των προκαθορισμένων τιμών

Είναι δυνατόν να χρησιμοποιήσετε την προρύθμιση για να αλλάξετε την προκαθορισμένη απάντηση σε μια ερώτηση, επιτρέποντας όμως ακόμα την διατύπωσή της. Για να το κάνετε αυτό η σήμανση seen πρέπει να οριστεί ξανά σαν “false” μετά τον καθορισμό μιας τιμής για την ερώτηση.

d-i foo/bar string value
d-i foo/bar seen false

Το ίδιο αποτέλεσμα μπορεί να επιτευχθεί για όλες τις ερωτήσεις ορίζοντας την παράμετρο preseed/interactive=true στο προτρεπτικό εκκίνησης. Αυτό μπορεί να είναι χρήσιμο και στον έλεγχο ή την εκσφαλμάτωση του αρχείου προρύθμισης.

Σημειώστε ότι η παράμετρος ιδιοκτήτη του “d-i” θα πρέπει να χρησιμοποιείται μόνο για μεταβλητές που χρησιμοποιούνται στον ίδιον τον εγκταταστάτη. Αντίθετα, για μεταβλητές που ανήκουν σε πακέτα εγκατεστημμένα στο σύστημα προορισμού, θα πρέπει να χρησιμοποιήσετε το όνομα του πακέτου. Δείτε την υποσημείωση στο κεφάλαιο Τμήμα B.2.2, “Χρήση παραμέτρων εκκίνησης για την προρύθμιση ερωτήσεων”.

Αν κάνετε προρύθμιση χρησιμοποιώντας παραμέτρους εκκίνησης, μπορείτε να κάνετε τον εγκαταστάτη να ρωτά την αντίστοιχη ερώτηση χρησιμοποιώντας τον τελεστή “?=”, δηλ. foo/bar?=valueowner:foo/bar?=value). Αυτό θα έχει φυσικά επίδραση μόνο σε παραμέτρους που αντιστοιχούν σε ερωτήσεις που όντως εμφανίζονται στη διάρκεια μιας εγκατάστασης και όχι σε “εσωτερικές” παραμέτρους.

Για περισσότερες πληροφορίες αποσφαλμάτωσης, χρησιμοποιήστε την παράμετρο εκκίνησης DEBCONF_DEBUG=5. Αυτό θα αναγκάσει το debconf να παράξει πολύ περισσότερες λεπτομέρειες σχετικά με τις τρέχουσες ρυθμίσεις κάθε μεταβλητής καθώς και σχετικά με την πρόοδό του στα διάφορα σενάρια εγκατάστασης του κάθε πακέτου.

B.5.3. Αλυσιδωτή φόρτωση (chainloading) αρχείων προρυθμίσεων

Είναι δυνατόν να συμπεριλάβετε περισσότερα αρχεία προρυθμίσεων μέσα από ένα άλλο τέτοιο. Οποιεσδήποτε ρυθμίσεις στα αρχεία αυτά θα υπερισχύσουν των ρυθμίσεων που προϋπάρχουν από αρχεία που φορτώθηκαν νωρίτερα. Αυτό καθιστά εφικτό, για παράδειγμα, να βάλετε τις γενικές ρυθμίσεις για το δίκτυο στην τοποθεσία σας σε ένα αρχείο και πιο συγκεκριμένες ρυθμίσεις για συγκεκριμένες διαμορφώσεις σε άλλα αρχεία.

# Μπορούν να παρατεθούν περισσότερα από ένα αρχεία, χωρισμένα με κενά διαστήματα; θα
# φορτωθούν όλα. Τα αρχεία που συμπεριλαμβάνονται μπορούν να έχουν επίσης δικές τους ντιρεκτίβες τύπου preseed/include
# Σημειώστε ότι αν δίνονται οι σχετικές διαδρομές για τα ονόματα των αρχείων, αυτές θεωρούνται ότι είναι
# στον ίδιο κατάλογο που βρίσκεται το αρχείο προρυθμίσεων που τα περιλαμβάνει.
#d-i preseed/include string x.cfg

# Ο εγκαταστάτης μπορεί προαιρετικά να κάνει επαλήθευση των checksum των αρχείων προρυθμίσεων πριν
# από την χρήση τους. Προς το παρόν υποστηρίζονται μόνο md5sums, παραθέστε τα md5sums
# με την ίδια σειρά με τα αντίστοιχα αρχεία που πρόκειται να συμπεριληφθούν.
#d-i preseed/include/checksum string 5da499872becccfeda2c4872f9171c3d

# Ακόμα πιο ευέλικτα, αυτό εκτελεί μια εντολή κελύφους και αν δίνει σαν έξοδο τα ονόματα των
# αρχείων προρυθμίσεων, τότε συμπεριλαμβάνει τα αρχεία αυτά.
#d-i preseed/include_command \
#      string if [ "`hostname`" = bob ]; then echo bob.cfg; fi

# Και για τη μέγιστη ευελιξία, αυτό κατεβάζει ένα πρόγραμμα και το εκτελεί. Το πρόγραμμα
# μπορεί να χρησιμοποιεί εντολές όπως η  debconf-set για τον χειρισμό της βάσης δεδομένων του debconf.
# Μπορούν να παρατεθούν περισσότερα από ένα σενάρια, χωρισμένα από κενά διαστήματα
# Σημειώστε ότι αν οι διαδρομές των ονομάτων των αρχείων των σεναρίων αυτών είναι σχετικές, θεωρούνται ότι είναι στον ίδιο κατάλογο με το αρχείο προρυθμίσεων που τα εκτελεί.
#d-i preseed/run string foo.sh

Είναι επίσης δυνατόν να έχετε αλυσιδωτή φόρτωση (chainload) από την φάση φόρτωσης της μνήμης δίσκου initrd ή της φόρτωσης του αρχείου προρυθμίσεων σ' αυτήν της δικτυακής προρύθμισης ορίζοντας τις παραμέτρους preseed/url στα αρχεία που προηγούνται. Αυτό θα προκαλέσει την πραγματοποίηση της δικτυακής προρύθμισης με το ανέβασμα του δικτύου. Θα πρέπει να είσαστε προσεκτικοί όταν κάνετε κάτι τέτοιο γιατί θα υπάρχουν δυο διαφορετικές εκτελέσεις της προρύθμισης, που σημαίνει για παράδειγμα ότι έχετε άλλη μια ευκαιρία να εκτελέσετε την εντολή preseed/early, με την δεύτερη να προκύπτει όταν το δίκτυο έχει ανέβει.