11 января 2015

single-mode во FreeBSD с поддержкой сети

Системное администрирование*nix
Это совсем маленькая заметка о том, что как нет ничего более постоянного чем временное, так и самая тривиальная(на первый взгляд) задача занимает больше всего времени.
В пятницу утром знакомый обратился с вопросом «Как пересобрать мир в single-mode на удалённом сервере без KVM?»
«Прописать в /etc/rc скрипт выполняющий /etc/netstart && service sshd start в части исполняемой в single-mode, а дальше всё как обычно», — ничтоже сумняшеся ответил я.
Но спустя часа два вопрос повторился и оказалось, что всё не так тривиально.
Уж не знаю было ли это просто моим заблуждением или всё-таки в ранних версиях FreeBSD /etc/rc частично выполнялся в single-mode(справедливости ради никогда не приходилось это проверять), но в 10-ке он действительно не работает.
Итак, задача:
# uname -opr
FreeBSD 10.1-STABLE amd64
Необходимо перейти из multi-mode в single-mode и получить доступ по ssh.

Поехали:
Раз в однопользовательском режиме никакие скрипты не выполняются исправим эту оплошность. Подредактируем исходники init.
Добавляем в /usr/src/sbin/init/pathnames.h путь к нашему скрипту
#define _PATH_MYSINGLE  "/etc/rc.my_single"

В /usr/src/sbin/init/init.c в функцию single_user добавляем вызов
run_script(_PATH_MYSINGLE);
Его необходимо поместить где-нибудь до вызова open_console().

Сам вызываемый скрипт:
/etc/rc.my_single
#!/bin/sh
/bin/echo "NET START"
/bin/sh /etc/netstart
/bin/echo "SSH START"
/usr/sbin/service sshd start

Собираем, ставим, ребутаемся (может и есть способ перезапустить init без перезагрузки, но я не стал на удалённой машине испытывать судьбу):
cd /usr/src/sbin/init && make && make install && shutdown -r now

После загрузки в multi-mode для перехода в single "shutdown now" или "init 1" на любителя.
Ну и дальше всё как обычно.

p.s.: Может я всё усложняю и есть способ проще?
Теги:FreeBSD/etc/rcinit
Хабы: Системное администрирование *nix
+6
10,7k 73
Комментарии 25
Лучшие публикации за сутки