Работа с read-only root filesystem [solved]
Значит, все эти кувыркания из тем раз , два связаны с моими попытками водрузить в качестве раутера на ITX с тремя сетевыми ( ага :) ) оптимизированную генту.
Поскольку sys-apps/baselayout-2.0.1 с openrc работали некорректно (о чём в ссылках выше), приходится работать с baselayout1. Из-за того, что в качестве диска на этой системе используется CF, волей-неволей приходится использовать ro root.
Система разделена на два раздела, используется ext2 на каждом. Ядро собрано таким образом, что можно грузить эту машинку как по сети, так и с диска, т.о. вся отладка может делаться на сборочном хосте, проверяться по сети, а потом, простым копированием, всё необходимое переносится на CF.
На данный момент система загружается без проблем, при необходимости подхватывает динамический адрес по dhcp или из собственного файла конфигурации /etc/net.xxx. Сделано это было вот как:
- ядро пропатчено и собрано с поддержкой unionfs;
- отредактирован скрипт /sbin/rc:
# Setup initial $PATH just in case PATH="/bin:/sbin:/usr/bin:/usr/sbin:${PATH}" # добавлено 4 строки /bin/mount -n -t tmpfs tmpfs /unionfs/etc -o size=1M /bin/mount -n -t unionfs unionfs /etc -o dirs=/unionfs/etc=rw:/etc=ro echo "tmpfs /unionfs/etc tmpfs rw,size=1M 0 0" >> /etc/mtab echo "unionfs /etc unionfs rw,dirs=/unionfs/etc=rw:/etc=ro 0 0" >> /etc/mtab
- создан каталог /unionfs/ с нужными подкаталогами, например, /unionfs/etc/ и т.д.;
- В /etc/fstab прописано:
tmpfs /unionfs/var/lock tmpfs size=20K,nodev,nosuid,noexec 0 0 tmpfs /unionfs/var/log tmpfs size=3M,nodev,nosuid,noexec 0 0 tmpfs /unionfs/var/run tmpfs size=200K,nodev,nosuid,noexec 0 0 tmpfs /unionfs/var/spool tmpfs size=10M,nodev,nosuid,noexec 0 0 tmpfs /unionfs/var/lib tmpfs size=1M,nodev,nosuid,noexec 0 0 tmpfs /unionfs/tmp tmpfs size=1M,nodev,nosuid,noexec 0 0 unionfs /var/lock unionfs dirs=/unionfs/var/lock=rw:/var/lock=ro 0 0 unionfs /var/log unionfs dirs=/unionfs/var/log=rw:/var/log=ro 0 0 unionfs /var/run unionfs dirs=/unionfs/var/run=rw:/var/run=ro 0 0 unionfs /var/spool unionfs dirs=/unionfs/var/spool=rw:/var/spool=ro 0 0 unionfs /var/lib unionfs dirs=/unionfs/var/lib=rw:/var/lib=ro 0 0 unionfs /tmp unionfs dirs=/unionfs/tmp=rw:/tmp=ro 0 0
- ну и, наконец, в том же fstab корневой раздел переключен на ro (для варианта загрузки по nfs, nfs-сервер раздаёт корень в режиме ro):
/dev/sda2 / ext2 noatime,ro 0 1
Итак, загрузка проходит прекрасно, нужные сервисы стартуют и вроде бы всё ок. Но при перезагрузке/выключении компьютера, после выдачи сообщения Unmounting filesystem
процесс завершения работы прекращается, появляется сообщение, что переключен уровень init и что Could not kill process <номер>: No such process
. Поначалу я подумал, что этот процесс можно отловить с помощью ps -ef > file
и последущим сравнением номера бажащего процесса с теми, что были запущены, но нет, таковых в списке не оказалось. Видимо, это процесс порождается при завершении работы. Конкретнее сказать нельзя. Ну а поскольку процесс завершения работы останавливается, то это несколько напрягает: получается, что удалённо этот компьютер не перезагрузить, только с кнопки или с помощью Magic keys.
Кто-нибудь боролся с такой задачей? Есть ли возможность где-нибудь посмотреть уже изобретённые велосипеды? Поиск, к сожалению, не показал ничего на эту тему, народ, наоборот, в основном не понимает, отчего у него система в ro (обычно из-за ошибок). А мне нужно именно вот так.
- Для комментирования войдите или зарегистрируйтесь
Чет знакомый глюк. Попробуйте
Чет знакомый глюк. Попробуйте вот так:
Alba et atra discernere
/
Правильнее
emerge -av1 sys-apps/sysvinit
В качестве домашнего задания: перечитать Хэндбук и написать почему правильнее так.
:wq
--
Live free or die
inittab
А если просто добавить в /etc/inittab
l6:6:wait:/sbin/rc reboot ключи -dkf ?
Щас попробую на себе %)
p.s: вот это ребутнулся - даже диски не отмонтировал ;D
Тоесть, в смысле, вывести
Тоесть, в смысле, вывести имя, вывести зависимости, скомпилировать и установить, но не добавлять в файл world для последующего обновления? Затрудняюсь ответить зачем, может вы подскажите?
/
Именно так!
Рекомендуется для того, чтобы избежать захламления
world
'а в результате пересборки приложения, которое было установлено в качестве зависимости.Тема чистки мира после того, как указанная опция была проигнорирована совершенно недавно поднималась :)
:wq
--
Live free or die
Кстати, раз уж об этом речь
Кстати, раз уж об этом речь зашла: как можно определить по-быстрому, надо ли устанавливать программу с ключом -1 или нет? Понятно, что пакеты из @system не нужны в @world, но вспомнить, что и где, а также, не является ли данная программа зависимостью другой, достаточно сложно и лениво. :)
/
Опция
--oneshot
не для установки, а для пересборки/реконфигурации!:wq
--
Live free or die
Тоесть, вы хоите сказать, что
Тоесть, вы хоите сказать, что -1 стоит применять при пересборке/реконфигурации любого из установленных пакетов?
Alba et atra discernere
Во всяком случае, хуже не
Во всяком случае, хуже не будет: если пакет записан в world — там он и останется, если же пакет является чьей-то зависимостью — он в world не попадёт.
Я ♥ Gentoo & Funtoo
Как оказалось, проблема была
Как оказалось, проблема была в sysvinit: заработало после отката с 2.87 на 2.86.
Раутер стоит и скромно работает уже. :) Спасибо за ответы.