Hallo*! (* = bin müde, keine Garantie auf Rechtschreibung oder Inhalt!
(EDIT: Das könnte jetzt funktionieren
Wenn dich 1blu gar nicht in die Rettungskonsole lässt, ist der Repairmodus für dich tatsächlich nutzlos, denke ich. Du kannst auch auf die Rettungskonsole keinen Einfluss nehmen, da die von einem separaraten Image gestartet wird und nicht deine Konfigurationsdateien oder sonstwas von deinem Partition berücksichtigt.
Du könntest natürlich versuchen, dem laufenden System ein Debian unterzuschieben ... Nur, das stelle ich mir etwas schwierig vor. Schwierig ist aber nicht immer unmöglich
Hast du etwas Ahnung von Shell-Skripten, viel Frusttoleranz, ein gutes Backup und die Möglichkeit, den abgestürzten Server neuzustarten? Dann kannst du ja mal folgendes probieren, was ich mir eben aus den tippenden Fingern gesogen habe:
* Sammle ein paar wichtige Dateien, die man braucht um bash und mv auszuführen und reproduziere diese Dateien im Verzeichnis /wichtig/ (ganz unten steht, wie das in etwa gehen sollte)
* Erstelle eine Datei /wichtig/daswirdehnichts
* Schau in /etc/inittab nach, was bei der Zeile, die mit "si::" beginnt, steht (bei Debian steht da "si::sysinit:/etc/init.d/rcS", bei Suse vermutlich "si::bootwait:/etc/init.d/boot"). Ersetze dann deine Entsprechung von "/etc/init.d/rcS" durch "/wichtig/testskript"
* Erstelle ein Skript /wichtig/testskript (und mach es für alle ausführbar)
Code:
#!/wichtig/bin/bash
LD_LIBRARY_PATH = /wichtig/lib/
export LD_LIBRARY_PATH
/wichtig/bin/mv /wichtig/daswirdehnichts /wichtig/eshatdochgeklappt
LD_LIBRARY_PATH = ''
export LD_LIBRARY_PATH
/etc/init.d/boot
wobei die letzte Zeile das sein soll, was vorher in der inittab stand.
* Starte deinen Server neu
Was nun passieren sollte:
Der Server startet, führt /sbin/init aus, das schlägt in /etc/inittab nach und führt das kleine Skript aus. Das verwendet hoffentlich nur Dateien aus dem /wichtig/-Verzeichnis, um die Befehle auszuführen (gerade an Bibliotheken könnte es aber trotz LD_LIBRARY_PATH scheitern). Damit wird dann die Datei umbenannt, damit man erkennen kann, ob alles geklappt hat. Nun sollte der Server ganz normal starten (mit Suse), denn das ursprüngliche Startskript wurde aufgerufen.
Natürlich kann einiges schief gehen und insbesondere würde ich davon ausgehen, dass der Server überhaupt nicht mehr startet. Dann müsstest du das Image von 1blue wieder einspielen.
Wenn das aber geht, ist das noch keine Garantie, dass wirklich alles geklappt hat. Vor allem kann es sein, dass mv trotz anderer Anweisung die bereits existierenden Bibliotheken aus /lib statt /wichtig/lib genommen hat. Dann würde die Datei umbenannt werden, aber es würde dir nicht helfen.
Aber wir sind mal optimistisch. Weiter geht's:
* Installiere Debian nach /debian/ (das geht genauso wie im Tutorial, nur ohne die Rettungskonsole), und sorge auch dafür, dass das Netzwerk/SSH funktioniert etc.
(* evtl: Mach ein Backup von /debian per tar, lad es dir herunter und spar die damit beim nächsten Mal Arbeit, weil das bestimmt nicht beim ersten Mal klappt
* Erstelle ein Verzeichnis /altessuse
* Erstelle ein Skript /wichtig/allesverschieben , das alles bis auf /debian und /wichtig nach /altessuse verschiebt. Danach soll alles aus /debian nach / verschoben werden. Insbesondere wird dabei /etc/inittab überschrieben, was aber nicht stören sollte.
Code:
#!/wichtig/bin/bash
LD_LIBRARY_PATH = /wichtig/lib/
export LD_LIBRARY_PATH
/wichtig/bin/mv ............ HIER STEHT VIEL ..................... /altessuse
/wichtig/bin/mv /debian /
LD_LIBRARY_PATH = ''
export LD_LIBRARY_PATH
/etc/init.d/rcS
Beachte, dass nun wirklich /etc/init.d/rcS ausgeführt werden muss, denn du hast ja nun ein Debian-System.
Das war's.
Ob das geht? Öhm. Keine Ahnung. Angenommen das Verschieben klappt, kann es sein, dass dir irgendwann alles abbricht, weil das /sbin/init von Suse sich nicht mit dem Debian verträgt. Das sollte nach einem Neustart aber behoben sein. Über sonstige Fehler habe ich noch nicht so sehr nachgedacht.
Was /wichtig/ angeht: Im Prinzip erstellen wir ein chroot, ohne wirklich zu chrooten. Also, such dir die Programme aus, die du haben willst (mv, bash), schau mit ldd nach, welche Bibliotheken die benötigen und kopier die ins /wichtig/ Verzeichnis. Bei mir sieht das so aus:
Code:
$ ldd /bin/bash
libncurses.so.5 => /lib/libncurses.so.5 (0xb7fa5000)
libdl.so.2 => /lib/tls/libdl.so.2 (0xb7fa2000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7e6c000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7fe9000)
ldd /bin/mv
libacl.so.1 => /lib/libacl.so.1 (0xb7fdd000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7ea8000)
libattr.so.1 => /lib/libattr.so.1 (0xb7ea3000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7fe9000)
Also kopiere ich /lib/libncurses.so.5 nach /wichtig/lib/libncurses.so.5, /lib/tls/libdl.so.2 nach /wichtig/lib/tls/libdl.so.2 und so weiter.
Und natürlich noch /bin/bash nach /wichtig/bin/bash und das auch mit mv.
Mehr fällt mir momentan nicht ein. Kleine Details werden wohl scheitern, aber dafür müsste ich meinen vServer riskieren und habe keine Lust dazu.
Viel Glück (wirst du brauchen
Daniel D
EDIT:
* /sbin/init wie ursprünglich vorgeschlagen zu verändern klappt nicht so einfach, /etc/inittab ist aber auch viel besser geeignet.
* pivot_root hilft nicht, da es 2 unterschiedliche Dateisystem in ihren Mountpunkten vertauscht und nicht innerhalb eines Dateisystem arbeiten kann.