Manch einer hat es wohl schon erlebt: Ein falscher Befehl und das System
kennt die wichtigsten Befehle nicht mehr: ls, cp, mv, ... . Diese Befehle
sind Bestandteil des GNU Pakets coreutils.
Im günstigsten Fall kann man die coreutils über ein Update oder
ein Backup direkt wieder einspielen. Doch nicht immer hat man diese
Möglichkeit. Tatsächlich wird der Umgang mit dem System ohne
diese Befehle sehr mühsam. Die Dateien kann man sich in der Regel
durch den Shell Befehl "echo" noch anzeigen lassen, doch ohne "cp" wird
das Kopieren schwer (tar hilft!). Ohne "mv", "rm", "pwd" und eine Reihe
weiterer Befehle funktionieren so manche Update Routinen nicht mehr.
Hier ist es praktisch, wenn man auf einen Satz vorkompilierter coreutils
zugreifen kann. Dies ist nicht nur eine Erleichterung, wenn man ein System
unbrauchbar gemacht hat, auch bei Systemen, bei denen der Verdacht besteht,
dass die Basisbefehle korrumpiert worden sind, ist ein eigener Befehlssatz,
auf CD oder USB Stick, sehr nützlich.
Um Einflüsse durch dynamische Bibliotheken und Fremdeinflüsse
weitgehend auszuschliessen, sollten die coreutils zu diesem Zweck statisch
übersetzt worden sein.
Wer unter Druck ist ("Red nicht lang, ich brauche genau diese binaries"),
der mag hier die Version 6.9 der coreutils statisch kompiliert und gelinkt
runterladen:
Wer lieber seine eigene Version bauen möchte, so wird es gemacht:
- Erzeugen des Arbeitsverzeichnisses:
mkdir /tmp/work
cd /tmp/work
|
- Download der Orginalquellen von
http://www.gnu.org/prep/ftp.html
bzw. einem der dort angegeben Mirrors. Zum Beispiel:
|
wget http://www.de-mirrors.de/gnuftp/coreutils/coreutils-6.9.tar.gz
|
Wer sichergehen gehen möchte, dass er das richtige Paket korrekt erhalten
hat, kann die hinterlegte PGP Signatur des Pakets mit der der heruntergeladenen
Datei vergleichen.
- Auspacken der Quelldaten
|
tar xfz coreutils-6.9.tar.gz
|
Auf einigen Systemen kennt der tar Befehl nicht die Option "z" zum automatischen
gunzippen des Pakets. In diesem Fall müssen die Quellen in zwei Schritten
ausgepackt werden:
gzip -d coreutils-6.9.tar.gz
tar xf coreutils-6.9.tar
|
- Sicherstellen, dass die CFLAGS den Zusatz "-static" besitzen:
In bash:
|
export CFLAGS="-static -O2 -g"
|
In csh:
|
setenv CFLAGS "-static -O2 -g"
|
- Nun kann man mit configure das Übersetzen vorbereiten.
cd coreutils-6.9
./configure
|
Nur zur Sicherheit sollte man in dem erzeugten Makefile überprüfen,
ob wirklich der Zusatz "-static" angenommen worden ist:
Die folgende Antwort sollte zurückkommen:
- Auf manchen Systemen genügt es nicht, die Programme statisch zu
übersetzen, man muss sie auch statisch linken. Zur Sicherheit sollte
man daher von vornherein die Quellen mit dem folgenden Befehl übesetzen:
Wenn das Übersetzen ohne Abbruch durchläuft, ist man jetzt
stolzer Besitzer eines Satzes statisch gebundener Core Utilities,
wie man leicht feststellen kann:
cd src
ldd wc
ldd ls
ldd who
...
|
Anmerkung:
Auf einigen System kann das Kompilieren statischer Programme eine
grössere Gewaltaktion werden (64bit Solaris auf Sparc, zum
Beispiel, sorgt für Unterhaltung).
- Abschliessend:
Mit dem reinen Übersetzen ist es nicht getan. Die Programme
sollten auch einwandfrei funktionieren. Also ist Testen angesagt:
Liefern die Programme die richtigen Ausgaben zurück? Auch
sollte der Aufruf nicht mit in einem Coredump enden. Dies kann passieren!
Daher sollte man gründlich testen. Schliesslich möchte
man nicht, dass einem diese Programme genau dann im Stich lassen,
wenn man sie unbedingt braucht.
Wenn alles zur Zufriedenheit funktioniert, kann man die statischen
Core Utilities auf eine CD brennen oder auf einem USB Stick
verewigen (oder jedes andere Speichermedium, das gerade genehm ist).
|
| |