Работа с read-only root filesystem [solved]

Значит, все эти кувыркания из тем раз , два связаны с моими попытками водрузить в качестве раутера на ITX с тремя сетевыми ( ага :) ) оптимизированную генту.

Поскольку sys-apps/baselayout-2.0.1 с openrc работали некорректно (о чём в ссылках выше), приходится работать с baselayout1. Из-за того, что в качестве диска на этой системе используется CF, волей-неволей приходится использовать ro root.

Система разделена на два раздела, используется ext2 на каждом. Ядро собрано таким образом, что можно грузить эту машинку как по сети, так и с диска, т.о. вся отладка может делаться на сборочном хосте, проверяться по сети, а потом, простым копированием, всё необходимое переносится на CF.

На данный момент система загружается без проблем, при необходимости подхватывает динамический адрес по dhcp или из собственного файла конфигурации /etc/net.xxx. Сделано это было вот как:

  1. ядро пропатчено и собрано с поддержкой unionfs;
  2. отредактирован скрипт /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
    
  3. создан каталог /unionfs/ с нужными подкаталогами, например, /unionfs/etc/ и т.д.;
  4. В /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
    
  5. ну и, наконец, в том же 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 (обычно из-за ошибок). А мне нужно именно вот так.

Чет знакомый глюк. Попробуйте

Чет знакомый глюк. Попробуйте вот так:

Цитата:
# mv /etc/inittab /etc/inittab.old
# emerge sysvinit

Alba et atra discernere

/

Rezzonans написал(а):
# emerge sysvinit

Правильнее 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 для последующего обновления? Затрудняюсь ответить зачем, может вы подскажите?

Именно так!

Рекомендуется для того, чтобы избежать захламления world'а в результате пересборки приложения, которое было установлено в качестве зависимости.
Тема чистки мира после того, как указанная опция была проигнорирована совершенно недавно поднималась :)

:wq
--
Live free or die

Кстати, раз уж об этом речь

Кстати, раз уж об этом речь зашла: как можно определить по-быстрому, надо ли устанавливать программу с ключом -1 или нет? Понятно, что пакеты из @system не нужны в @world, но вспомнить, что и где, а также, не является ли данная программа зависимостью другой, достаточно сложно и лениво. :)

/

HolyBoy написал(а):
Кстати, раз уж об этом речь зашла: как можно определить по-быстрому, надо ли устанавливать программу с ключом -1 или нет? Понятно, что пакеты из @system не нужны в @world, но вспомнить, что и где, а также, не является ли данная программа зависимостью другой, достаточно сложно и лениво. :)

Опция --oneshot не для установки, а для пересборки/реконфигурации!

:wq
--
Live free or die

Тоесть, вы хоите сказать, что

Тоесть, вы хоите сказать, что -1 стоит применять при пересборке/реконфигурации любого из установленных пакетов?

Alba et atra discernere

Во всяком случае, хуже не

Во всяком случае, хуже не будет: если пакет записан в world — там он и останется, если же пакет является чьей-то зависимостью — он в world не попадёт.

Я Gentoo & Funtoo

Как оказалось, проблема была

Как оказалось, проблема была в sysvinit: заработало после отката с 2.87 на 2.86.

Раутер стоит и скромно работает уже. :) Спасибо за ответы.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".