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/sh
memulai 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/bash
tetapi itu masih menyajikan saya dengan jenis kesalahan "tidak dapat menemukan sh". Saya berasumsi itu karena /usr
belum dipasang karena dilakukan dari skrip rc.
Setiap bantuan sangat dihargai.
Jawaban:
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:
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:
Lakukan ketiganya.
sumber
Oke, pertama ceramahnya:
JANGAN BERLAKU DENGAN SISTEM BINARY
Apa pun yang ada di dalam
/bin
,/sbin
dan/rescue
pada 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!)JANGAN hapus
/bin/sh
. PERNAH. Padasistem * NIX apa pun yang memilikinya.Betulkah. Jangan lakukan itu. Sebuah BANYAK script mengandalkan
/bin/sh
menjadi Bourne Shell. Itu menghancurkan alam semesta.Jika Anda benar-benar ingin Anda mungkin dapat dengan aman menggantinya dengan salinan dari
bash
seperti 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/local
terpasang.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/sh
dari 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/sh
dari 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/sh
Anda mengambilnya bukan dari mesin yang cukup dekat dengan identik.sumber
/bin
tidak 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 sayaAlih-alih menghubungkan, salin
bash
ke/bin/sh
. Gunakanldd
perintah untuk menemukan pustaka yang mungkin berada di sistem file selain dari rootfs dan salin juga ke rootfs.sumber