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 <[email protected]> (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 на автономных серверах.

Если вам нужно обновить настольный компьютер, все может быть немного сложнее, читайте документация .

Первая проблема заключалась в том, что система хотела установить 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 из использования:

$ 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

Создание занятого ящика

$ 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

Оказывается, нам нужно немного обновить настройки сборки некоторых библиотек.

Делаем это, снова запускаем escape, в моем случае все сошлось без проблем.

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

$ 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 $

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

Если вы используете предсказуемые имена интерфейсов, не повторяйте моей ошибки.

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



sudo reboot

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

$ sudo emerge -uDNva @world

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



$ sudo emerge --ask --depclean --verbose sys-fs/udev sys-fs/eudev

Теги: #linux #настройка Linux #Gentoo #mdev #eudev #udev

Вместе с данным постом часто просматривают: