LINUX.ORG.RU

Две проблемы в Gentoo на VirtualBox

 , ,


0

1

Очень-очень соскучился по 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
Console display driver support включен сам по себе как «VGA text console» и «Framebuffer console support». При загрузке в dmesg стало ругаться, что нету v86d, поэтому установил его и, как зависимость, klibc. На всякий случай ещё раз пересобрал ядро. Теперь ругалось, что не может запустить v86d (его нет или у него нет прав на исполнение). Порывшись в инете, нашёл на одном форуме решение в виде добавления /usr/share/v86d/initramfs в конфиг ядра в «General Setup - Initramfs source file(s)».

Добавил, пересобрал ядро и оно не загрузилось, так как не определяет раздел 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» всё работало?

★★★★★

Последнее исправление: grem (всего исправлений: 3)

framebuffer

А почему не сразу KMS? Результат тот же, а добавлять ничего никуда не нужно

XMs ★★★★★
()
Ответ на: комментарий от shooter93

Это не параметр ядра а grub1 и lilo, в grub2 не работает.

Алсо uvesafb не нужен, достаточно vesafb, а если для виртуалбокса есть kms драйвер, то лучше его, как написали.

anonymous
()
Ответ на: комментарий от shooter93

Спасибо, совсем забыл про него, на старом ядре (где пустой «Initramfs source file(s)») замена «video=uvesafb:1152x864-32,mtrr:3,ywrap» на vga=791 помогла (даёт разрешение 1024x768-16). На новом ядре быстро переключается обратно на низкое.

XMs, anonymous: Почему не KMS? Привычка.

«video=vesafb:1024x768-32,mtrr:3,ywrap» или «video=vesafb:1024x768-32» не срабатывает, но в dmesg всё равно про uvesafb пишет, что пределы и частота обновления не установлены - скорее всего его использует, несмотря на параметр vesafb. В ядре включены оба.

Пока виртуалка у меня в консольном режиме, без иксов и дополнительных драйверов xf86-video-virtualbox и guesteditions (которые захотят иксы).

grem ★★★★★
() автор топика
  • Userspace VGA graphis support

Выбрось!

А если у тебя оно грузится не через EFI, то и

  • EFI-based Framebuffer Support

тоже выбрось.

Вообще, там хватает simple fb, всё равно будет юзаться видеодрайвер, который это дело оверрайдит.

UPD: А, так тебе в виртуалку… Тогда всё это выбрось, и юзай KMS, как уже сказали выше.

r3lgar ★★★★★
()
Последнее исправление: r3lgar (всего исправлений: 1)
Ответ на: комментарий от shooter93

странно, для старого ядра через правку меню в grub2 работало, а как запихнул старое ядро по умолчанию и заново сгенерил конфиг граба с этой опцией - перестало.

grem ★★★★★
() автор топика
Ответ на: комментарий от r3lgar

видеодрайвер, который это дело оверрайдит.

Всем спасибо, «проблема 2» решена. Оставил «VESA VGA graphis support» и параметр vga=791 (о vga упоминал shooter93) в настройках grub, так работает. Можно и KMS оставить, фильмы в теминале я смотреть не собираюсь, проприетарные драйвера в virtualbox тоже не грозят.

Похоже, что после добавления в конфиг ядра «Initramfs source file(s)», конфиг grub начал добавлять root по UUID, а без него сам указывает корень как /dev/sda4.

Буду искать что делать с первой.

grem ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Спасибо, про этот параметр /etc/default/grub тоже забыл, с ним тоже попробую проверить.

grem ★★★★★
() автор топика
Ответ на: комментарий от grem

проприетарные драйвера в virtualbox тоже не грозят

Свободные тоже оверрайдят фреймбуффер. Только не юзерспейсная их часть (xf86-video-*), а ядровая.

r3lgar ★★★★★
()
Ответ на: комментарий от r3lgar

Кажется нашёл: в случае использования net.* скриптов нужно раскомментировать строку rc-need=«net.eth0» (и добавить другие если они есть) в /etc/conf.d/syslog-ng. Обновлю @system после миграции на eudev и включения abi_x86_32 и проверю.

grem ★★★★★
() автор топика
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от anonymous

в grub2 не работает

Прекрасно работает, если не использовать EFI. Это параметр ядра, пруфы можно нагуглить

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от grem

rc-need=«net.eth0» в /etc/conf.d/syslog-ng

пока не помогло, как и rc-need=«!net net.eth0»

нашёл тему: https://forums.gentoo.org/viewtopic-p-6975568.html

В ней у человека проблема была решена отправкой net.eth0 в boot, но он считает, что это не есть хорошо. Сам пока не хочу так делать, смотрю подробнее описание багов, так как решения в них пока не вижу. Перебор включения параметров пары конфигов пока не помог.

два бага на похожую тему:
https://bugs.gentoo.org/show_bug.cgi?id=408753
https://bugs.gentoo.org/show_bug.cgi?id=387751

grem ★★★★★
() автор топика

Решил первую проблему путём добавления строки «127.0.0.2 MYHOSTNAME.domain MYHOSTNAME» в файл «/etc/hosts» («MYHOSTNAME» - имя моего хоста).

После сборки app-misc/mc с флагом samba, сам mc отказался запускаться за приемлемое время. Для него нашёл упомнутое выше решение, которое, как оказалось, является и решением для данной проблемы с systemlog-ng. Проверил, что при комментировании той строки проблема снова проявляется. Скорее всего в данном случае systemlog-ng пытается найти упоминание в «/etc/hosts» текущего хоста хоть в каком-то виде. Почему при использовании dhcpcd вместо скриптов net.* данная проблема не проявляется непонятно.

grem ★★★★★
() автор топика

Нашёл более общее решение сразу для первой проблемы с долгим стартом и для решения аналогичной проблемы ещё в двух случаях:

  • syslog-ng
  • startx
  • mc (midnight commander) c включённым флагом «samba»

Все они хотят настроенный /etc/hosts, как минимум, в соответствии с handbook. В моём случае я оставил там такие строчки:

127.0.0.1     tux.homenetwork tux localhost
::1           tux.homenetwork tux localhost

, где «tux» - имя указанное в «/etc/conf.d/hostname» (hostname=«tux»)

Сеть мне была не нужна и я решил пропустить этот шаг, а зря. Жаль только, что в handbook и соответствующих wiki-страницах не упоминается, что данные сервисы (первые два) захотят разрешить в сети доменное имя хоста.

grem ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.