Если вы используете gentoo и следите за уведомлениями о предстоящих изменениях, то еще в июле вы могли заметить, что с нового года gentoo больше не будет поддерживать eudev. Если вы попытаетесь обновить свою систему сейчас, вы увидите
К сожалению, переход от 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.
Мне давно было интересно попробовать 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
-
Кратил
19 Oct, 24 -
2Гис Этажи. Лестница К Продукту
19 Oct, 24 -
Почему Мы Боимся Роботов?
19 Oct, 24 -
Корпорации Или Империя Зла!?
19 Oct, 24 -
Церковь Недовольна Отцом-Блогером
19 Oct, 24