single-mode під FreeBSD з підтримкою мережі

Це зовсім маленька замітка про те, що немає нічого більш постійного ніж тимчасове, так і сама тривіальна(на перший погляд) завдання займає найбільше часу.
У п'ятницю вранці знайомий звернувся з питанням «Як перебудувати світ у 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.: Може я все обтяжую і є спосіб простіше?

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.