Gentoo. Попытка № 2

Ранее был написан пост об установке gentoo, было это больше полутора лет назад и тогда эта замечательная ОС долго не продержалась на моём десктопе, уступив место archlinux'у. Не так давно в сознание начали закрадываться предательские мысли о смене дистрибутива. Связано это было с отходом команды разработчиков от традиций и философии archlinux. Несогласие с майнтейнерами в пути развития дистрибутива, ощущение того, что арч уже «не торт» не K.I.S.S., досада от того, что фактически разработчики не оставляют большого выбора, а просто навязывают свою волю.

Перебарывать это и искать обходные пути в то время, когда хотелось бы просто работать? Не думаю. Кроме того, стало появляться чувство, что пользователь в арче всё больше начинает походить на бета-тестера.

В то же время в философии gentoo можно найти такие строки:

«Из исходников» — важный и ключевой аспект Gentoo, который был и останется необходимым, но не единственный и не главный. Основополагающая задача — создание технологии, позволяющей как нам, так и другим делать то, что хочется, без ограничений.

Отлично звучит, хотя на практике всё немного иначе. Из исходников — основополагающий аспект, как ни крути. Собственно, поэтому gentoo пока не стал моим основным дистрибутивом (это ещё не решено). Да, есть возможность создать свои локальные оверлеи, да есть бинхосты, но... действительно ли это выход? Разумеется, можно обновлять (читай — пересобирать) пакеты раз в день, затратив на это несколько минут, а можно раз в несколько месяцев, затратив на это куда больше времени. Это уже зависит от личных предпочтений каждого. Вопрос в том, можно ли в gentoo просто жить, а не посвящать всего себя системе. Поживём — увидим.

Что же, распускать сопли дальше не имеет смысла, давайте лучше посмотрим, как можно более или менее быстро создать на основе свежеустановленной генты рабочий десктоп. Все шаги описываться не будут — это есть в документации — лишь моменты, которые заставили автора задуматься и прикинуть как сделать лучше/быстрее.

Итак, некоторые подводные камни и методы их обхода:

Споткнулись раз. Две видеокарты и vgaswitcheroo + неработающий wi-fi

В archlinux стоило лишь подмонтировать debugfs и отключить одну из карточек, а теперь не нужно и этого: дискретная карта по-умолчанию выключена. В gentoo, поскольку ядро мы собираем сами, нужно сделать чуть больше телодвижений.

Device Drivers  --->
  Graphics support  --->
  <*> /dev/agpgart (AGP Support)  --->
    <M> AMD Opteron/Athlon64 on-CPU GART support
    {M} Intel 440LX/BX/GX, I8xx and E7x05 chipset support
    [*] Laptop Hybrid Graphics - GPU switching support

    Direct Rendering Manager  --->
      <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  --->
      <M> ATI Radeon
      <M> Intel 8xx/9xx/G3x/G4x/HD Graphics
      [*]   Enable modesetting on intel by defaul
      [*]   Enable legacy fbdev support for the modesetting intel driver

      Frame buffer Devices  --->
        {*} Support for frame buffer devices  --->
          [*]   Enable Video Mode Handling Helpers
          [*]   Enable Tile Blitting Support

Это для владельцев видеокарт ATI + Intel. Владельцы карт NVidia должны шаманить с NOUVEAU. Правим конфиг /etc/genkernel.conf, включив в нём:

OLDCONFIG="yes"
MENUCONFIG="yes"
CLEAN="no"
MRPROPER="no"

В /etc/portage/make.conf определяем свои карточки. Например:

VIDEO_CARDS="intel i915"

Собираем ядро с genkernel:

# genkernel all

А после установки grub, добавляем в конец строки загрузчика:

# /etc/default/grub
# for Intel + ATI
GRUB_CMDLINE_LINUX_DEFAULT="radeon.runpm=0"

# for Intel + NVIDIA
GRUB_CMDLINE_LINUX_DEFAULT="nouveau.runpm=0"

И вносим debugfs в /etc/fstab:

# /etc/fstab
debugfs /sys/kernel/debug  debugfs defaults 0 0

Попросим grub2 перечитать настройки и после перезагрузки системы убедимся, что на дискретную карту не поступает питание:

# grub2-mkconfig -o /boot/grub/grub.cfg
# cat /sys/kernel/debug/vgaswitcheroo/switch
0:IGD:+:Pwr:0000:00:02.0
1:DIS: :Off:0000:01:00.0

Касаемо оборудования, стоило бы также отметить, что у автора изначально не определялась wi-fi карточка: не было интерфейса wlan0. К счастью, это решается даже проще:

# lspci -v 04:00.0
Network controller: Broadcom Corporation BCM4313 802.11b/g/n Wireless LAN Controller (rev 01)
Kernel driver in use: bcma-pci-bridge

Для данной железки в ядре должно быть включено:

Networking Support --> Wireless -->
    <M> cfg80211 - wireless configuration API
    [*] cfg80211 wireless extensions compatibility

Device Drivers --> Network Device Support --> Wireless LAN -->
    <M> Broadcom IEEE802.11n PCIe SoftMAC WLAN driver

Device Drivers --> Broadcom specific AMBA  --->
    <M> BCMA support
    [*]   Support for BCMA on PCI-host bus
wifi bcma broadcom linksus

И установлена прошивка:

# emerge sys-kernel/linux-firmware

Если возникли проблемы, владельцам карт от broadcom предлагается просмотреть информацию о драйверах bcrm80211 и b43 в зависимости от используемого вами и действовать по предложенной там инструкции. Если ваша карта есть в списке и поддерживается — не всё потеряно.

Споткнулись два. Сборка chromium? Нет, binhost!

Привычным браузером у автора является хромиум, ну и в gentoo захотелось его собрать, только вот собирается он не меньше двух часов, и здесь возникает вполне себе закономерная мысль: фиг с ними, с USE-флагами, поставим из бинарного пакета.

Вообще, надо сказать, что при обновлении ситуация повторится, поэтому лучше отдать предпочтение лёгким браузерам, таким как uzbl, или ставить готовые бинарные пакеты: google-chrome, firefox-bin. Но давайте для примера таки поработаем с binhost.

В качестве бинхоста будем использовать http://calculate.freeside.ru/CLD/grp/, там можно найти достаточно много пакетов под свою архитектуру. Естественно, лучше ставить из исходников со своими USE-флагами. Так же естественно, что автор не несёт ответственности, если при использовании бинарных пакетов из CLD у вас что-то отвалится ;)

Снова идём в /etc/portage/make.conf:

FEATURES="ccache"
CCACHE_SIZE="2G"
PORTAGE_BINHOST="http://calculate.freeside.ru/CLD/grp/x86_64/"
PKGDIR="/var/binpackages/"

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

Что касается binhost'а здесь вы указываете откуда ставить пакеты с учётом своей архитектуры. Затем следует указание места, куда будут складываться эти пакеты. Ставим chromium:

# emerge --getbinpkgonly --fetchonly --usepkgonly chromium

Заглядываем в /var/binpackages/:

$ ls var/binpackages/www-client/
chromium-20.0.1132.57.tbz2

Всё нормально.

Споткнулись три. А сколько ждать-то? Сборка пакетов из-под live cd.

Также после первоначальной установки можно доставить все пакеты, загрузившись с какого-нибудь live cd и чрутнувшись в gentoo. У автора на то был рабочий арчлинукс, gentoo ставился на внешний HDD. Повторюсь, вполне можно использовать для этого любой live cd/live usb. Загружаемся с него, монтируем нужные разделы, ставим компиляцию сразу нескольких пакетов, а сами в это время сидим в jabber или читаем gentoo handbook в привычном окружении.

$ sudo mount /dev/sdc1 /mnt/gentoo
$ sudo mount /dev/sdc2 /mnt/gentoo/boot
$ sudo mount /dev/sdc6 /mnt/gentoo/home
$ sudo mount -t proc none /mnt/gentoo/proc
$ sudo chroot /mnt/gentoo /bin/bash
PS1 = "(chroot) $PS1"

Кроме того, позволяет ускорить время компиляции вынос /var/tmp/portage в tmpfs:

# /etc/fstab
tmpfs /var/tmp tmpfs size=3G,mode=1777

# /etc/portage/make.conf
PORTAGE_TMPDIR="/var/tmp" # расположение временных файлов
BUILD_PREFIX="/var/tmp/portage" # каталог сборки

В остальном с настройкой всё просто. При желании можете ознакомиться с настройками acpi, одинаковыми для всех дистрибутивов.

gentoo dwm

В заключение или краткое сравнение возможностей arch и gentoo

Держи мир в чистоте

Принцип обоих дистрибутивов, хотя в gentoo это выражено ярче. Сразу о полезном: полезно иметь под рукой список установленных пакетов для быстрого восстановления системы. В gentoo таким списком является файл /var/lib/portage/world, куда вносятся записи об установленных программах.

В archlinux нет такого файла, но его можно получить. Арчевики по этому поводу нам выдаст следующее:

Если ваша система "упала" и её сложно восстановить, pacman может легко переустановить эти пакеты. Сначала, сохраните в список пакетов (доступных в репозитории):

# pacman -Qqe | grep -v "$(pacman -Qmq)" > pkglist

Безопасная, но и более сложная альтернатива (во избежание удаления частичных совпадений)

# comm -13 <(pacman -Qmq | sort) <(pacman -Qqe | sort) > pkglist

Сохраните этот файл на флешке или на другом носителе. Скопируйте файл pkglist в новую систему, перейдите в эту папку. Для восстановления используйте команду:

# pacman -S $(cat pkglist)

Сборка из исходного кода

Возможна в обоих дистрибутивах. В archlinux для этого есть такая вкусная вещь как ABS. С Gentoo и так всё ясно — по умолчанию.

Ставим бинарные пакеты

Арч — бинарный дистрибутив и возможность ставить готовые пакеты, а не компилировать всё из исходников, заложена по-умолчанию.

В gentoo есть возможность ставить бинарные пакеты, как правило, лишь для очень больших приложений (оно и понятно).

Гибкость менеджера управлением пакетов

И pacman, и emerge хороши. Но emerge — инструмент куда более гибкий (и куда более медленный).

Обновление конфигурационных файлов системы

В арче делается ручками. Большинство арчеводов активно испольуют программку diff для сравнения изменившихся конфигурационных файлов и их последующей (ручной) правки. Не особенно удобно.

Gentoo предлагает использовать команду etc-update, что очень удобно.

Разнообразие софта

Обычно имеющихся пакетов хватает как в случае с archlinux, так и в случае с gentoo. Но если нужной программы нет, это тоже не большая беда.

Арч предоставляет для установки пакетов, не входящих в основной репозиторий, репозиторий пользовательский — AUR, отличная вещь.

В Gentoo для подобных нужд есть оверлеи и связанная с ними программа layman. Так что от недостатка программного обеспечения страдать в любом случае не придётся.

Честно сказать, автору так и не удалось ответить на главный для себя вопрос: Arch или Gentoo? Оба дистрибутива по-своему хороши, оба имеют свои недостатки. И — да — оба неидеальны. От подобных мыслей линуксоиды обычно спасались созданием дистрибутива собственного ;)