Bug 32358 - миграция на symlinks /var/run -> /run, /var/lock -> /run/lock
: миграция на symlinks /var/run -> /run, /var/lock -> /run/lock
Status: NEW
: Sisyphus
(All bugs in Sisyphus/filesystem)
: unstable
: all Linux
: P3 normal
Assigned To:
:
:
:
:
: 32364 32444 32642 32659
  Show dependency tree
 
Reported: 2016-08-04 17:16 by
Modified: 2018-06-23 13:22 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2016-08-04 17:16:32
День добрый.
Хотелось бы осуществить миграцию на симлинки /var/run -> /run, /var/lock ->
/run/lock, вместо "mount -o bind".

Эти симлинки могут создаваться из tmpfiles (/var/run в
/lib/tmpfiles.d/var.conf, /var/lock в /lib/tmpfiles.d/legacy.conf) и под
systemd и под sysV.
Наличие этих директорий мешает созданию симлинков.

PS: как правильно удалить эти директории и точки монтирования(мигрировать) - я
не знаю.
------- Comment #1 From 2016-08-29 02:58:02 -------
Если думать в этом напрвалении, мне сейчас подумалось, что лучше миграцию
осуществить каким-то одноразовым скриптом во время загрузки (вот как раз в тот
момент, когда эти все монтирования возводится).

А в пакет положить ghost-symlink. После того, как скрипт сработает, он будет
пакету принадлежать.

Что должен делать стартовый миграционный скрипт?

1. (необязательно) переместить то, что есть в ... /run/? ну это всё скорее и не
нужно, потому что там ничего ценного нет. По смыслу похоже на одноразовую
работу tmpfiles .
2. удалить директорию /var/run и создать такой симлинк.

ну и всё, очень простой скрипт на самом деле. Одноразовасть даже не
принципиальна. 

У меня ещё возник такой гипотетический вопрос: а как rpm отнесётся к конфликтам
по файлам один из которых заявлен как /run/a, а другой /var/run/a . Поймёт ли,
что это кнфликт, или как-то тихо перепишет?

(А вообще rpm же не зачем класть файлы в /run/ , они временные. Т.е. таких
ситуаций быть не должно. Можно запретить такие пакеты, если ещё не запрещено.)
------- Comment #2 From 2016-08-30 13:16:03 -------
Только в этой схеме со стартовым скриптом, который будет делать эту ссылку, я
не подумал о тех, кто ставится с нуля: у них сразу после установки пакета оно
должно работать.

Наверное, для этого нужен похожий %post-скрипт. Нет, скорее %pre, потому что во
время исполнения %post могли поставиться другие пакеты и положить что-то внутрь
/var/run/, тем самым создав директорию, которая будет опять мешаться при
создании симлинка %post-скриптом.

Однако, filesystem такой базовый пакет, который ставится на начальном этапе
инсталляции. Не уверен, что %pre-скрипты смогут сработать в таком окружении.

Так что у меня пока нет окончательной идеи, как делать такую миграцию.
------- Comment #3 From 2016-11-01 20:39:30 -------
sem@ сделал такое замечание про копирование всего подряд из /var/run/ в /run/ в
работающей системе: в /var/run/ может лежать старый несипользуемый мусор,
который перепишет/начнёт использоваться из /run/ .

Также sem@ у себя сделал запись в /etc/fstab про  bind-монтирование /run/ в
/var/run/ и испытал проблемы от того, что это происходит слшком поздно при
закгрузке (с SysV init). Что-то ценное в /var/run/ скрывается.

Возникла ещё такая идея миграции:

кладём в пакет filesystem symlink, а в preinstall-скрипте перемещаем старый
/var/run в какой-нибудь /var/run.rpmsave.XXXXXX (т.к. glebfm@ заметил, что у
людей могут лежат какие-то ценнные файлы там), а в postinstall-скрипте делаем
mount -o bind /var/run.rpmsave.XXXXXX /var/run (если это можно поверх
симлинка).

В работающей системе всё останется по-прежнему, а после перезагрузки будет уже
виден симлинк.

Есть ли замечания? Может, попробовать такой сценарий реализовать?
------- Comment #4 From 2016-11-15 19:27:57 -------
(In reply to comment #3)
> Также sem@ у себя сделал запись в /etc/fstab про  bind-монтирование /run/ в
> /var/run/ и испытал проблемы от того, что это происходит слшком поздно при
> закгрузке (с SysV init). Что-то ценное в /var/run/ скрывается.

При ближайшем рассмотрении это не так, у меня /var монтируется строчкой выше в
том же fstab. Я вообще не понимаю почему возникают проблемы, похоже это где-то
в районе NetworkManager/wpa_supplicant.
------- Comment #5 From 2018-05-16 14:09:16 -------
- реализовать в rpm-пакете эту миграцию не получится. Ни в %pre ни в %post
пакета filesystem.
- для существующих инсталяций сделать эту миграцию надо на раннем этапе
загрузки единоразово.
- Как совместить это с новыми инсталяциями?

Я пока вижу два варианта:
1) в initrd, как например в fedora
https://git.kernel.org/pub/scm/boot/dracut/dracut.git/tree/modules.d/30convertfs/convertfs.sh#n22
2) с помощью tmpfiles
в /lib/tmpfiles.d/legacy.conf
L /var/lock - - - - ../run/lock
заменить на
L+ /var/lock - - - - ../run/lock

А в /lib/tmpfiles.d/var.conf
L /var/run - - - - ../run
заменить на 
L+ /var/run - - - - ../run

L+ означает удалить файл или директорию и создать симлинк.
------- Comment #6 From 2018-05-16 14:42:31 -------
К сожалению, эксперимент с L+ в tmpfiles закончился неудачно.
Так что остаётся только один способ мигрировать - в initrd.
Как оставить существующие системы жить по-старому (с mount -o bind), а новые
установки на симлинках я не знаю.