dadv: (Default)
Choose your future ([personal profile] dadv) wrote2010-02-24 10:34 pm
Entry tags:

POLA again

Из FreeBSD 8.0 удалили поддержку /etc/rc.early - единственного штатного места в системе, куда можно было добавить команды, выполняющиеся непосредственно после определения оборудования, запуска ядром первого процесса init и запуска им скрипта /etc/rc - задолго до перехода системы в многопользовательский режим, до выполнения всех других системных стартовых скриптов (ну, честно говоря, не всех - своп-раздел и его опциональное шифрование активируется ещё раньше), до запуска сервисов и даже до проверки и монтирования файловых систем. Во время выполнения rc.early даже корневая FS ещё смонтирована read-only (fsck для неё тоже ещё не запускался, всё это позже).

Понадобилось недавно установить по-быстрому 8.0 для последующей неспешной удалённой настройки перед отправкой за 300 километров в работу. Прибыв поздно вечером "к телу" с ftp://ftp.freebsd.org/pub/FreeBSD/ISO-IMAGES-i386/8.0/8.0-RELEASE-i386-memstick.img на флешке, загрузил машину с неё и поставил по-быстрому систему на HDD (250G) штатным инсталлятором, отключив при разбиении на разделы softupdates для каждой FS, с тем чтобы потом пересоздать файлухи уже с журналом (gjournal). И только вернувшись к себе и зайдя удалённо, обнаружил, что второпях отключил softupdates вообще со всех FS, включая корневую (размером в 512Mb) и /usr (тоже 512Mb), для которых отключать-то было и не надо, журнал им противопоказан.

Включать-выключать softupdates в FreeBSD можно только для отмонтированных файловых систем, в случае / и /usr это означает выполнение команд в single user mode, причём не просто в single user, а до монтирования файлух. Ну, думаю, не беда, пропишу вызов tunefs в rc.early - хвать, а его ж убили. Пришлось лезть на семерку и копировать с неё rcNG-скрипт early в /etc/rc.d/ - для любознательных задачка на смекалку, почему в описанном случае нельзя в /usr/local/etc/rc.d/. Потом прописал всё что нужно в /etc/rc.early, перегрузил систему и получил включенные softupdates на / и /usr.

Спрашивается, нахрена было сносить поддержку rc.early?

[identity profile] schors.livejournal.com 2010-02-24 03:38 pm (UTC)(link)
А как ты его заставил работать ДО rc?

[identity profile] dadv.livejournal.com 2010-02-24 03:48 pm (UTC)(link)
> непосредственно после определения оборудования, запуска ядром первого процесса init и запуска им скрипта /etc/rc

После, а не до.

[identity profile] schors.livejournal.com 2010-02-24 03:50 pm (UTC)(link)
А, ступил. А в rc вставлял что-нибудь?

[identity profile] dadv.livejournal.com 2010-02-24 03:53 pm (UTC)(link)
Ничего, rc нынче запускает систему rcNG, которая и пускает early в нужный момент, перед fsck.

[identity profile] schors.livejournal.com 2010-02-24 03:54 pm (UTC)(link)
так, а в чём прикол NG? как узнаётся о "нужном" моменте?

[identity profile] dadv.livejournal.com 2010-02-24 04:03 pm (UTC)(link)
Пройди по второй ссылке в посте и найди там fsck.

[identity profile] schors.livejournal.com 2010-02-24 04:05 pm (UTC)(link)
Аааа... кстати. man что? а то у меня тут из /usr/local на старте некоторые вещи не запскаются. давно подозреваю что из-за вот таких штук. но поскольку они запускаются чуть позже мониторингом, то всё руки не доходят

[identity profile] dadv.livejournal.com 2010-02-24 04:11 pm (UTC)(link)
> man что?

man rc

[identity profile] schors.livejournal.com 2010-02-24 04:14 pm (UTC)(link)
КО :) Блин, вот так живёшь и простейших вещей не знаешь :)) Спасибо.

P.S. Да, мне стыдно. Но скрывать не буду. Зато вот узнал :)

[identity profile] b-a-t.livejournal.com 2010-02-24 05:00 pm (UTC)(link)
man rcorder

[identity profile] filonov.livejournal.com 2010-02-24 05:31 pm (UTC)(link)
а что мешает воткнуть свой код прямо в начало /etc/rc ?

[identity profile] dadv.livejournal.com 2010-02-24 06:30 pm (UTC)(link)
Оно мне надо? При апгрейдах патч накладывать. Просто восстановил /etc/rc.d/early (без расширения .sh - чтобы сабшеллом запускало) и всё.

[identity profile] karpion.livejournal.com 2010-03-24 04:37 pm (UTC)(link)
Из FreeBSD 8.0 удалили поддержку /etc/rc.early
Пожалуйтесь на баг.

для любознательных задачка на смекалку, почему в описанном случае нельзя в /usr/local/etc/rc.d/.
Наверно, потому, что для отработки /usr/local/etc/rc.d/ надо смонтировать /usr.

PS: Зафрендил.

[identity profile] dadv.livejournal.com 2010-03-25 03:50 am (UTC)(link)
> Пожалуйтесь на баг.

Увы, это значит поднимать вторую волну - первая волна обсуждения перед удалением сама по себе была нехилой. Но в пользу rc.early есть и ещё серьезные аргументы, например механизм сброса крешдампов на gmirror.

> Наверно, потому, что для отработки /usr/local/etc/rc.d/ надо смонтировать /usr.

Bingo! Или даже /usr/local смонтировать (у меня оно всегда отдельной fs от read-only mounted /usr).