Я принял действительно плохое решение на одном из моих серверов.
Я удалил /bin/sh
. Я перезапустил сервер, и сервер не будет работать, потому что он должен /bin/sh
запустить сценарии rc. Я не могу получить доступ к однопользовательскому режиму, потому что нужен sh.
Есть ли простой способ переустановить оболочку Bourn?
Я попытался скопировать sh из live cd, это не удалось в библиотеке ld-elf.so.1. Поэтому я скопировал это в / libexec из livecd в мой раздел /. Затем ему нужна библиотека libedit.so, и я скопировал ее в / libexec, но на этот раз она не работает.
Я попытался использовать символическую ссылку, /usr/local/bin/bash
но это все еще дает мне ошибку типа «не могу найти sh». Я предполагаю, что это потому, что /usr
еще не смонтирован, потому что это сделано из сценария rc.
Любая помощь очень ценится.
Ответы:
Вам нужно заменить / bin / sh чем-то ; это ключ. Если вы можете войти в загрузчик FreeBSD во время запуска (с подсказкой «ok»), попробуйте что-то вроде этого:
Я получил эту информацию от loader (8) со страниц руководства FreeBSD (онлайн). Я этого не делал, но он должен работать (при условии, что / bin / csh присутствует и исполняется).
Если у вас есть сервер FreeBSD 8.2, запущенный и работающий в другом месте, вы можете попробовать украсть / bin / sh из этого источника и поместить его в систему, где это необходимо.
Альтернативно, получите статически построенный / bin / sh и вставьте его вместо этого; не будет никаких проблем с библиотекой со статически построенным двоичным файлом.
РЕДАКТИРОВАТЬ: я должен был заметить: если вы загрузитесь в / bin / csh, вам все равно придется получить что-то, чтобы использовать вместо / bin / sh. Вы можете получить его через Интернет или скопировать с другого компакт-диска, пакета или чего-то еще; использование / bin / csh для загрузки приводит вас к машине. Копирование по сети требует подключения к сети; в противном случае скопируйте с CDROM.
Лучшие способы избежать этого в будущем:
Делай все три.
источник
ОК, первая лекция:
Не шутите с бинарники системы
Чтонибудь в
/bin
,/sbin
и/rescue
на FreeBSD следует оставитьпокое. Даже если вы знаете, что делаете (если вы знаете, что делаете, вы также знаете, что их следует оставить в покое. Они действительно важны - все они!)НЕ удаляйте
/bin/sh
. КОГДА-ЛИБО. В любой системе * NIX, которая имеет это.В самом деле. Не делай этого. LOT сценариев полагаться на
/bin/sh
будучи Bourne Shell. Это ломает вселенную.Если вы действительно хотите, товероятноможет безопасно заменить его копию на
bash
как Adam Z предложил, но если вы собираетесь делатьчто вы можете статически , что копияbash
- это тянет много библиотек, и вы может не иметь их, пока система не/usr/local
будет установленаисмонтирована.Теперь, как исправить беспорядок? Два варианта:
Вариант 1. Довольно болезненно.
Зайдите на http://www.freesbie.org/ (или на FreeBSD LiveCD по вашему выбору - вы можете даже использоватьдля этогокомпакт-диск восстановления с http://www.freebsd.org ). Возьмите LiveCD, запишите его и загрузите.
Как только вы окажетесь в среде LiveCD, смонтируйте корневой раздел отключенной системы, скопируйте его
/bin/sh
с LiveCD на компьютер и перезагрузите компьютер.Это должно вернуть вас в рабочее состояние - вы можете следовать инструкциям по восстановлению «World» или хотя бы пересобрать
/bin/sh
из дерева исходных текстов, которое соответствует вашей работающей системе.Вариант 2: Менее болезненный, нет LiveCD
Если у вас есть еще одна коробка FreeBSD, которую вы можете отключить (или каким-либо другим способом получить представление о копии
/bin/sh
, переведите свою машину FreeBSD в однопользовательский режим. Настройте сеть (или подключите какой бы носитель не имел заменяющую оболочку на нем), и скопируйте его туда, где он должен быть.Перезагрузитесь, и у вас все будет в порядке - те же предостережения, что и на LiveCD, хотя, если
/bin/sh
вы берете его не с достаточно близкой к идентичной машине.источник
/bin
больше не связан статически. Я думаю, что компакт-диски Rescue для соответствующего выпуска FreeBSD имеют удобную оболочку (то есть ту, которую можно просто сбросить на место), но я давно загрузил ее ...Вместо символической ссылки скопируйте
bash
в/bin/sh
. Используйтеldd
команду, чтобы найти любые библиотеки, которые могут находиться в файловых системах, отличных от rootfs, и скопировать их также в rootfs.источник