dadv: (Default)
[personal profile] dadv

Из 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?

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

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

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

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

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

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

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

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

Date: 2010-02-24 16:11 (UTC)
From: [identity profile] dadv.livejournal.com
> man что?

man rc

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

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

Date: 2010-02-24 17:00 (UTC)
From: [identity profile] b-a-t.livejournal.com
man rcorder

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

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

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

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

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

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

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

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

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

Profile

dadv: (Default)
Choose your future

July 2024

M T W T F S S
12 34567
891011121314
15161718192021
22232425262728
293031    

Tags

Style Credit

Powered by Dreamwidth Studios