gentoo: миграция с eudev на mdev

Если вы используете gentoo и отслеживаете уведомления о грядущих изменениях, то еще в июле вы могли видеть, что с нового года gentoo перестает поддерживать eudev. Если вы попытаетесь обновить систему сейчас, вы увидите


!!! The following installed packages are masked:
- sys-fs/eudev-3.2.10-r1::gentoo (masked by: package.mask)
/var/db/repos/gentoo/profiles/package.mask:
# Mike Gilbert <floppym@gentoo.org> (2021-11-27)
# eudev will be removed on 2022-01-01.
# Please see the news item published on 2021-08-24 for more information.

К сожалению переезд с eudev на альтернативы имеет свои особенности, которые мне хочется осветить в этом посте пока память свежа. Мне давно было интересно попробовать mdev, так что новость о конце поддержки eudev я расценил как намек на то, что пора исполнять задуманное. Важное замечание: у меня gentoo работает на headless серверах. Если вам нужно обновить десктопную машину все может быть несколько сложнее, читайте документацию.


Первая проблема состояла в том, что система хотела поставить sys-fs/static-dev, но не могла этого сделать с вот такой ошибкой:


>>> Running pre-merge checks for sys-fs/static-dev-0.1-r2
 * We have detected that you currently use udev or devfs or devtmpfs
 * and this ebuild cannot install to the same mount-point.
 * ERROR: sys-fs/static-dev-0.1-r2::gentoo failed (pretend phase):
 *   Cannot install on udev/devfs tmpfs.

В https://bugs.gentoo.org/107875#c25 дается решение для выхода из этой ситуации:


$ sudo mkdir /tmp/newroot
$ sudo mount -o bind / /tmp/newroot
$ sudo ROOT=/tmp/newroot/ emerge -av sys-fs/static-dev
$ sudo umount /tmp/newroot/

Теперь пакет поставлен и можно заниматься переходом на mdev. Начнем с того, что убедимся, что у нас ничего не завязано на udev, в противном случае перейти на mdev не получится.


Проверим, что нет неожиданных зависимостей от udev. У меня это выглядело так:


$ equery d udev
 * These packages depend on udev:
sys-apps/hwids-20210613-r1 (virtual/udev)
sys-fs/udev-init-scripts-34 (>=virtual/udev-217)
virtual/dev-manager-0-r2 (virtual/udev)
virtual/libudev-232-r5 (!systemd ? >=sys-fs/udev-232:0/0[abi_x86_32(-)?,abi_x86_64(-)?,abi_x86_x32(-)?,abi_mips_n32(-)?,abi_mips_n64(-)?,abi_mips_o32(-)?,abi_s390_32(-)?,abi_s390_64(-)?])
virtual/udev-217-r3 (>=sys-fs/udev-217)
$

Убираем udev из use:


$ sudo euse -D udev

При этом сохранится старая версия /etc/portage/make.conf, так что вы легко проверите, что изменение именно то, которое нужно, и при необходимости вернетесь на старый конфиг.


Теперь можно сделать холостой прогон пересборки мира:


$ sudo emerge -uDNvp @world

Если в выводе нет ошибок и неожиданных пакетов, то можно продолжать.


Для начала нам надо замаскировать sys-fs/udev


$ echo "sys-fs/udev"|sudo tee /etc/portage/package.mask/mdev

Теперь можно добавить поддержку static и mdev для построения busybox


$ echo "sys-apps/busybox static mdev"|sudo tee /etc/portage/package.use/mdev

Строим busybox


$ sudo emerge --ask --oneshot busybox

Видим:


The following USE changes are necessary to proceed:
 (see "package.use" in the portage(5) man page for more details)
# required by sys-apps/busybox-1.34.1::gentoo[static]
# required by @selected
# required by @world (argument)
>=virtual/libcrypt-2 static-libs
# required by virtual/libcrypt-2::gentoo
# required by sys-apps/busybox-1.34.1::gentoo[static]
# required by @selected
# required by @world (argument)
>=sys-libs/libxcrypt-4.4.25-r1 static-libs

Оказывается надо чуть обновить установки построения некоторых библиотек. Делаем это, запускаем emerge еще раз, в моем случае все собралось без проблем.


После этого надо добавить скрипт для монтирования devpts, которая не монтируется автоматически при загрузке или через mount -a. В этом же скрипте надо поправить права доступа к /dev/shm, так как по умолчанию доступ есть только у рута.


$ echo -e '#!/bin/bash\nmount devpts\nchmod 1777 /dev/shm'|sudo tee /etc/local.d/000.start
#!/bin/bash
mount devpts
chmod 1777 /dev/shm
$ sudo chmod +x /etc/local.d/000.start

Теперь можно включить запуск mdev при инициализации системы и выключить udev и udev-trigger (про последний официальная документация ничего не пишет).


$ sudo rc-update add mdev sysinit
 * service mdev added to runlevel sysinit
$ sudo rc-update del udev sysinit
 * service udev removed from runlevel sysinit
$ sudo rc-update del udev-trigger sysinit
 * service udev-trigger removed from runlevel sysinit
$

Важный момент: у меня на одной из машин использовались predictable interface names и интерфейс назывался enp1s0. После перехода на mdev этот интерфейс стал eth0. Я не переименовал файл в /etc/init.d и не поправил /etc/conf.d/net, так что после перезагрузки пришлось воспользоваться сериальной консолью для логина и исправления. Если у вас используются predictable interface names не повторите моей ошибки.


Теперь можно перезагрузиться.


sudo reboot

Если все прошло хорошо, то можно пересобрать систему


$ sudo emerge -uDNva @world

И убрать пакеты, которые больше не нужны.


$ sudo emerge --ask --depclean --verbose sys-fs/udev sys-fs/eudev
@kt97679
03.12.2021 07:45 UTC
Первоисточник

Комментарии

@pollution
03.12.2021 07:32 UTC
+3

Ого, вернули мой 2007.

@JuriM
03.12.2021 08:30 UTC
+1

"Если все прошло хорошо, то можно пересобрать систему"

на хеадлесс серверах самое увлекательное занятие :)

@polar_yogi
03.12.2021 12:03 UTC
0

А какой профиль стоит (eselect profile)? Про цель даже не пытаюсь спрашивать.

@kt97679
03.12.2021 16:24 UTC
0
в оракловом облаке использую default/linux/amd64/17.1/no-multilib, на nvidia tegra, что висит в кладовке — default/linux/arm/17.0/armv7a
@polar_yogi
08.12.2021 08:57 UTC
0

Поздравляю, в FOSS News №100 https://habr.com/ru/post/44695/ статья отмечена в списке лучших статей по теме "Ядро Linux, дистрибутивы на его основе и прочие ОС".

@kt97679
08.12.2021 18:06 UTC
0
Спасибо :).
@slimlv
25.12.2021 17:09 UTC
0

Зачем на linux/amd64 mdev ?

@kt97679
25.12.2021 18:49 UTC
0
Вы предлагаете использовать что-то другое?
26.12.2021 13:57 UTC
0

Что не так с sys-fs/udev ?

Переключил с eudev на openrc, проблем не заметил.

Есть ли смысл в mdev на не-embeded кроме мести лёне поттеру ? :)

26.12.2021 17:17 UTC
0
Последнее о чем я думал это мстить кому-то :). Но да, я хочу иметь систему без systemd.
27.12.2021 12:01 UTC
0

sys-fs/udev работает с openrc без systemd

27.12.2021 13:51 UTC
0
Да, вы правы, тут я несколько отстал от жизни. Когда я несколько лет назад с этим разбирался udev отказывался собираться с USE="-systemd".
@slimlv
26.12.2021 13:57 UTC
0

Мимо