FreeBSD 8.2, dihapus / bin / sh, tidak bisa boot

8

Saya membuat keputusan yang sangat buruk pada salah satu server saya.

Saya dihapus /bin/sh. Saya me-restart server dan server tidak akan berjalan karena perlu /bin/shmemulai skrip rc. Saya juga tidak dapat mengakses mode satu pengguna karena ia diperlukan.

Apakah ada cara mudah untuk menginstal ulang shell bourn?

Saya mencoba menyalin sh dari live cd, gagal di pustaka ld-elf.so.1. Jadi saya menyalinnya ke / libexec dari livecd ke partisi / saya. Kemudian membutuhkan libedit.so library dan saya menyalinnya ke / libexec tetapi tidak berfungsi saat ini.

Saya mencoba symlink ke /usr/local/bin/bashtetapi itu masih menyajikan saya dengan jenis kesalahan "tidak dapat menemukan sh". Saya berasumsi itu karena /usrbelum dipasang karena dilakukan dari skrip rc.

Setiap bantuan sangat dihargai.

jon
sumber
2
Astaga. Itu um, tidak bagus. Saatnya menarik kaset terakhir.
MDMarra
Kesengsaraan LiveCD Anda mungkin karena itu adalah versi FreeBSD yang berbeda (atau LiveCD Anda menggunakan biner gepeng ajaib yang adalah / bin / ABunchOfStuff yang di-link ke nama yang berbeda). Versi FreeBSD apa yang Anda jalankan?
voretaq7
Versi herp-derp ada dalam judul. Jangan pedulikan aku. Butuh kopi.
voretaq7
3
Jadi ... uhm ... apa yang memaksa Anda melakukan ini? Anda membuatnya terdengar seolah-olah disengaja.
user606723

Jawaban:

8

Anda perlu mengganti / bin / sh dengan sesuatu ; itulah kuncinya. Jika Anda bisa masuk ke loader FreeBSD selama startup (dengan prompt "ok") coba sesuatu seperti ini:

set init_shell=/bin/csh
unset init_script
unset init_path

Saya mendapatkan informasi ini dari loader (8) dari halaman manual FreeBSD (online). Saya belum melakukan ini, tetapi harus bekerja (dengan asumsi bahwa / bin / csh ada dan dapat dieksekusi)

Jika Anda memiliki server FreeBSD 8.2 dan menjalankannya di tempat lain, Anda bisa mencoba mencuri / bin / sh dari sumber itu dan memasukkannya ke sistem di mana diperlukan.

Sebagai alternatif, dapatkan / bin / sh yang dibuat secara statis dan masukkan itu sebagai gantinya; tidak akan ada masalah perpustakaan dengan biner yang dibangun secara statis.

EDIT: Saya seharusnya mencatat: jika Anda boot ke / bin / csh, Anda masih harus mendapatkan sesuatu untuk digunakan daripada / bin / sh. Anda bisa mendapatkannya melalui Internet atau menyalinnya dari CD lain atau paket atau sesuatu; menggunakan / bin / csh untuk boot membawa Anda ke mesin. Menyalin melalui jaringan mengharuskan Anda membuka jaringan; jika tidak, salin dari CDROM.

Cara terbaik untuk menghindari ini di masa depan:

  1. Jangan hapus dari / bin! (itu bagian yang mudah)
  2. Memiliki biner / bin / sh yang dibuat secara statis, tidak terhubung secara dinamis.
  3. Miliki cadangan sh seperti /bin/sh.static.

Lakukan ketiganya.

Mei
sumber
Juga solusi "dapatkan saya cadangan sehingga saya dapat memperbaiki ini" (dengan alasan tidak mengharuskan Anda memiliki LiveCD untuk boot off).
voretaq7
6

Oke, pertama ceramahnya:

  1. JANGAN BERLAKU DENGAN SISTEM BINARY
    Apa pun yang ada di dalam/bin,/sbindan/rescuepada FreeBSD harus dibiarkan sendiri. Bahkan jika Anda tahu apa yang Anda lakukan (jika Anda tahu apa yang Anda lakukan, Anda juga tahu ini harus dibiarkan sendiri. Mereka benar-benar penting - semuanya!)

  2. JANGAN hapus/bin/sh. PERNAH. Padasistem * NIX apa pun yang memilikinya.
    Betulkah. Jangan lakukan itu. Sebuah BANYAK script mengandalkan/bin/shmenjadi Bourne Shell. Itu menghancurkan alam semesta.
    Jika Anda benar-benar ingin Anda mungkin dapat dengan aman menggantinya dengan salinan daribashseperti Adam Z menyarankan, tetapi jika Anda akan melakukan itu Anda mungkin ingin statis link yang yang menyalin daribash- Hal menarik dalam banyak perpustakaan, dan Anda mungkin tidak memilikinya sampai sistem menyala dan/usr/localterpasang.


Sekarang, bagaimana cara memperbaiki kekacauan? Dua pilihan:

Opsi 1: Agak menyakitkan
Kunjungi lebih lanjut ke http://www.freesbie.org/ (atau LiveBS FreeBSD pilihan Anda - Anda bahkan dapat menggunakan CD pemulihan dari http://www.freebsd.org untuk ini). Raih LiveCD, bakar, dan boot.

Setelah Anda berada di lingkungan LiveCD, pasang partisi root sistem Anda yang rusak, salin /bin/shdari LiveCD ke mesin Anda, lalu reboot.

Ini akan membuat Anda kembali dan berjalan - Anda mungkin ingin mengikuti instruksi untuk Membangun Kembali "Dunia" , atau setidaknya kompilasi ulang /bin/shdari pohon sumber yang cocok dengan sistem Anda yang sedang berjalan.

Opsi 2: Kurang menyakitkan, tidak ada LiveCD
Jika Anda memiliki kotak FreeBSD lain di sekitar tempat Anda dapat mooch (atau cara lain untuk mendapatkan salinan jari Anda/bin/sh, bawa mesin FreeBSD Anda dalam mode pengguna tunggal. Konfigurasikan jaringan (atau pasang media apa pun yang memiliki cangkang pengganti), dan salin ke tempat yang seharusnya.

Nyalakan ulang dan Anda harus OK - peringatan yang sama seperti LiveCD meskipun jika /bin/shAnda mengambilnya bukan dari mesin yang cukup dekat dengan identik.

voretaq7
sumber
1
Menggunakan / bin / bash dari distribusi FreeBSD lain hanya akan berfungsi jika pustaka bersama adalah versi yang benar. Lebih baik menggunakan sesuatu yang datang langsung dari FreeBSD 8.2 daripada membangun alternatif. Namun, sistem FreeBSD 8.x apa pun harus dapat menyediakan shell yang dibuat secara statis yang akan berfungsi.
Mei
@david Poin bagus - /bintidak lagi terhubung secara statis. Saya pikir CD Penyelamatan untuk rilis FreeBSD yang tepat memiliki shell yang dapat digunakan (yaitu yang dapat dibuang di tempat), tapi sudah lama sejak saya
mem
4

Alih-alih menghubungkan, salin bashke /bin/sh. Gunakan lddperintah untuk menemukan pustaka yang mungkin berada di sistem file selain dari rootfs dan salin juga ke rootfs.

Adam Zalcman
sumber
1
Ini adalah solusi yang baik, tetapi membuat sedikit kekacauan perpustakaan yang akan membutuhkan pembersihan selanjutnya nanti.
voretaq7
Ya, pembersihan itu perlu setelah itu. Salah satu alternatif adalah menggunakan biner shell yang dibangun secara statis.
Adam Zalcman