FreeBSD 8.2, cancellato / bin / sh, non può essere avviato


8

Ho preso una pessima decisione su uno dei miei server.

Ho cancellato /bin/sh. Ho riavviato il server e il server non funzionerà perché deve /bin/shavviare gli script rc. Non riesco ad accedere alla modalità utente singolo neanche perché sh è necessario.

Esiste un modo semplice per reinstallare la shell bourn?

Ho provato a copiare sh da un cd live, non è riuscito sulla libreria ld-elf.so.1. Quindi l'ho copiato in / libexec dal livecd alla mia / partizione. Ha quindi bisogno della libreria libedit.so e l'ho copiata in / libexec ma questa volta non funziona.

Ho provato un link simbolico /usr/local/bin/bashma mi presenta ancora l'errore di tipo "Impossibile trovare sh". Suppongo che sia perché /usrnon è ancora montato perché è fatto da uno script rc.

Qualsiasi aiuto è molto apprezzato.


2
Oh mio. Va bene, non va bene. È ora di tirare l'ultimo nastro.
MDMarra,

I tuoi guai in LiveCD sono probabilmente perché è una versione diversa di FreeBSD (o il tuo LiveCD sta usando un magico binario schiacciato che è / bin / ABunchOfStuff collegato a nomi diversi). Quale versione di FreeBSD stai usando?
voretaq7,

la versione di herp-derp è nel titolo. Non importa. Ho bisogno di caffè.
voretaq7,

3
Quindi ... uhm ... cosa ti ha spinto a fare questo? Lo fai sembrare come se fosse intenzionale.
user606723

Risposte:


8

Devi sostituire / bin / sh con qualcosa ; questa è la chiave. Se riesci a entrare nel caricatore di FreeBSD durante l'avvio (con un prompt "ok") prova qualcosa del genere:

set init_shell=/bin/csh
unset init_script
unset init_path

Ho ricevuto queste informazioni dal caricatore (8) dalle pagine del manuale di FreeBSD (online). Non l'ho fatto, ma dovrebbe funzionare (supponendo che / bin / csh sia presente ed eseguibile).

Se hai un server FreeBSD 8.2 installato e funzionante altrove, potresti provare a rubare / bin / sh da quella fonte e metterlo nel sistema dove necessario.

In alternativa, prendi un / bin / sh compilato staticamente e inseriscilo invece; non ci saranno problemi di libreria con un binario costruito staticamente.

MODIFICARE: Avrei dovuto notare: se avvii in / bin / csh, devi comunque ottenere qualcosa da usare invece di / bin / sh. Puoi scaricarlo su Internet o copiarlo da un altro CD o pacchetto o altro; l'uso di / bin / csh per l'avvio ti porta nella macchina. La copia in rete richiede di attivare la rete; altrimenti, copia da un CD-ROM.

I modi migliori per evitarlo in futuro:

  1. Non eliminare da / bin! (questa è la parte facile)
  2. Avere un / bin / sh staticamente costruito, non collegato dinamicamente.
  3. Avere un backup sh come /bin/sh.static.

Fai tutti e tre.


Anche un'ottima soluzione "fammi tornare in modo che io possa risolvere questa" soluzione (in virtù del fatto che non è necessario disporre di un LiveCD per l'avvio).
voretaq7,

6

OK, prima la lezione:

  1. Non si scherza con SISTEMA BINARIES
    Tutto in/bin,/sbine/rescuesu FreeBSD deve essere lasciato solo. Anche se sai cosa stai facendo (se sai cosa stai facendo, sai anche che questi dovrebbero essere lasciati soli. Sono davvero importanti, tutti!)

  2. NON cancellare/bin/sh. MAI. Su qualsiasi sistema * NIX che lo possiede.
    Veramente. Non farlo Un sacco di script si basa su/bin/shessere uno Shell Bourne. Rompe l'universo.
    Se lo desideri DAVVERO, puoi probabilmente sostituirlo in modo sicuro con una copia di quellabashsuggerita da Adam Z, ma se lo farai potresti voler collegare staticamente quella copia dibash- Richiama molte librerie e tu potrebbero non averli fino a quando il sistema non è attivo e non/usr/localè montato.


Ora, come risolvere il pasticcio? Due opzioni:

Opzione 1: un po 'doloroso
Vai su http://www.freesbie.org/ (o sul LiveCD di FreeBSD di tua scelta - Probabilmente puoi anche usare il CD di recupero da http://www.freebsd.org per questo). Prendi il LiveCD, masterizzalo e avvialo.

Una volta che sei nell'ambiente LiveCD, monta la partizione radice del tuo sistema danneggiato, copia /bin/shil LiveCD sul tuo computer, quindi riavvia.

Questo dovrebbe farti tornare in esecuzione - Potresti voler seguire le istruzioni per Ricostruire "World" , o almeno ricompilare /bin/shda un albero di origine che corrisponde al tuo sistema in esecuzione.

Opzione 2: Meno doloroso, nessun LiveCD
Se hai un'altra scatola FreeBSD intorno puoi staccarti (o in qualche altro modo per mettere le dita su una copia di/bin/sh, portare la tua macchina FreeBSD in modalità utente singolo. Configura la rete (o monta qualunque supporto abbia la shell sostitutiva) e copiarlo dove dovrebbe essere.

Riavvia e dovresti essere a posto - gli stessi avvertimenti del LiveCD anche se se lo /bin/shprendi non proviene da una macchina ragionevolmente vicina allo stesso identico.


1
Usare / bin / bash da un'altra distribuzione di FreeBSD funzionerà solo se le librerie condivise sono la versione giusta. Meglio usare qualcosa che proviene direttamente da FreeBSD 8.2 invece di una build alternativa. Comunque, qualsiasi sistema FreeBSD 8.x dovrebbe essere in grado di fornire una shell staticamente costruita che funzioni.
Mei,

@david Un buon punto: /binnon è più staticamente collegato. Penso che i CD di Rescue per la versione appropriata di FreeBSD abbiano una shell utilizzabile (cioè uno che può essere semplicemente scaricato sul posto), ma è passato un po 'di tempo da quando ne ho avviato uno ...
voretaq7,

4

Invece di symlinking, copia il tuo bashin /bin/sh. Utilizzare il lddcomando per trovare eventuali librerie che potrebbero risiedere su filesystem diversi da rootfs e copiarle anche su rootfs.


1
Questa è una buona soluzione, ma crea un po 'di confusione nella libreria che richiederà una successiva pulizia in seguito.
voretaq7,

Sì, la pulizia è necessaria in seguito. Un'alternativa sarebbe quella di utilizzare un binario di shell costruito staticamente.
Adam Zalcman,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.