Очень-очень соскучился по Gentoo и захотел его в VirtualBox, так как дома на него сейчас нет времени, а так хотя бы в любой момент можно сохранить состояние машины. В последний раз ставил его на реальное железо в 2009, а использовал там же в 2013. С тех пор handbook немного изменился, поэтому использовал новый. Суть проблем описана ниже.
Как устанавливал:
Использовал GPT таблицу (а зря => Проблема 2), обычно использую MBR, но решил попробовать его. Имнип, то с GPT проблематичен последующий dualboot, да и систему ставить на диск 2 и более Tb я всё равно не стал бы.
Разбил диск sda (12gb) утилитой parted (сделав сначала mklabel gpt) на 4 раздела: 2 mb (для grub), 128 mb (boot, ext2), 512(swap), остальное для root (reiserfs). Сделал «set 1 bios_grub on» и «set 2 boot on» (второе можно было и не делать, всё равно не efi).
Проблема 1 (решение):
В соответствии в handbook сделал симлинк net.eth0 указывающий на net.lo и отправил его в автозагрузку: rc-update add net.eth0 default
В /etc/conf.d/net указал config_eth0=«dhcp». Установил dhcpcd, но в автозагрузку его не добавлял.
Собрал ядро. Чтобы не переименовывался eth0, добавил в /etc/default/grub строку GRUB_CMDLINE_LINUX=«linux video=uvesafb:1152x864-32,mtrr:3,ywrap net.ifnames=0» с обновлением конфига граба в /boot. Почему такая длинная строка - во второй проблеме.
Если «net.ifnames=0» не добавлен в grub, то система стартует, но eth0 не получает адрес через dhcp, по той причне, что «error: eth0 не существует».
Если «net.ifnames=0» добавлен в grub, то eth0 стартует и получает адрес через dhcp, но процесс загрузки сначала некоторое время останавливается на проверке syslog-ng.conf после чего останавливается на старте syslog-ng на пару минут. Затем, наконец, можно дождаться появления приглашения залогиниться.
Почему в этом случае долго стартует syslog-ng? Нужно ли даже если интерфейс net.eth0 получает адрес по dhcp, добавлять dhcpcd в rc-update runlevel default?
Если убрать из автозагрузки net.eth0, добавить в автозагрузку dhcpcd и убрать из grub «net.ifnames=0», то eth0 переименовывается в enp0s3, получает адресс через dhcp и сеть работает. Если добавить «net.ifnames=0», то eth0 не переименовывается и сеть работает.
Но как при этом перезапустить соединение eth0 если я заменю /etc/conf.d/net или изменю/раскомментирую в нём настройки на статику?
Проблема 2 (решение):
Захотелось framebuffer так как окошко терминала очень маленькое. По этой причине в grub такая длинная строка GRUB_CMDLINE_LINUX=«linux video=uvesafb:1152x864-32,mtrr:3,ywrap net.ifnames=0».
Для этой цели добавил в конфиг ядра
Device Drivers - Graphics support - Framebuffer Devices
[*] Userspace VGA graphis support
[*] VESA VGA graphis support
[*] EFI-based Framebuffer Support
Добавил, пересобрал ядро и оно не загрузилось, так как не определяет раздел root по UUID - ругается, что теперь хочет по PARTUUID (root=UUID=... автогенерируется в /boot/grub/grub.cfg). До добавления пути в «initramfs source file» определяло по UUID. Хотя, емнип, без initramfs (он просто был включен) не должно вообще по UUID определять или это касается только fstab? В fstab разделы у меня указаны как /dev/sdX.
Если заменить root=UUID=.... на root=/dev/sda4 или root=PARTUUID=... то система снова грузится. Но каждый раз после создания нового конфига grub лазить туда руками не хочется. Или нужно указать grub, чтобы он использовал PARTUUID вместо UUID при генерации конфига из-за таблицы GPT? Но почему до добавления «Initramfs source file» всё работало?