Skip to content

Latest commit

 

History

History
279 lines (146 loc) · 33.3 KB

Gentoo.md

File metadata and controls

279 lines (146 loc) · 33.3 KB

Предисловие

Данная статья носит своей задачей описание процесса установки Gentoo с пояснениями и советами, которых может не быть в оригинальном handbook'е или прочих источниках. Конечно, он не будет охватывать все возможные параметры, но я надеюсь, что после прочтения Вы получите достаточно обширную картину понимания того, как устроен дистрибутив и сможете перенести эти знания на свои условия.

Для более прямолинейного, хоть и достаточно устаревшего, пошагового метода, можешь ознакомиться с "гайдом по генту для домохозяек".

Выбор установочного носителя

Одной из отличительных особенностей данного дистрибутива является то, что базовая система фактически распаковывается из архива на размеченный диск. На практике это означает, что неискушённый пользователь может поставить на флешку ту же Ubuntu и сидеть в интернете, почитывая инструкции, параллельно настраивая Gentoo. Так же стоит отметить, что установка на 100% производится средствами терминала, то есть команды всё равно понимать и вводить необходимо. Если вас не смущает голая консоль и чтение мануалов из неё же, то я рекомендую Arch Linux или саму Gentoo. Если с самой гентой всё понятно, то выбор арча следует пояснить: он наиболее просто ставится на носитель. Достаточно обладать любым дистрибутивом и залить его на флешку при помощи dd, а именно команды dd bs=4M if=/путь/к/образу.iso of=/dev/sdx && sync и получишь UEFI и BIOS совместимый мультиразрядный носитель.

Начало работы

Вставляй подготовленную шлешку/диск/дискеты в ЭВМ и загружайся с них, после чего можно сразу же приступать к работе.

Проверка соединения

Искренне рекомендую использовать проводное подключение, так как значительно меньше проблем и огромная вероятность, что взлетит из коробки. Проверить, есть ли коннект можно простейшей комманодрй ping до любого известного Вам сайта. Например,

ping -c3 microsoft.com

должен вернуть 3 строки со временем ответа и прочей информацией. Если пишет, что сервер неизвестен, то либо сайти лежит, либо тебе не повезло и сеть придётся настраивать вручную.

Подготовка диска.

Основная информация описана в соответствующей статье,

Раздел Размер ФС
/boot/ 64Mb FAT32
/ 40Gb f2fs
/home/ Оставшееся место btrfs
а здесь я постараюсь покрыть именно те небольшие гентуособенности, которые стоит знать. Если у тебя SSD или просто много оперативной памяти, то имеет смысл задуматься о выносе процесса сборки пакетов и работы всяких мусорящих на диск программ в так называемый tmpfs. Грубо говоря, это раздел в оперативной памяти. Естественно, если не копировать его перед окончанием работы на диск, то все данные там обнуляются при каждой перезагрузке. Для этого стоит добавить следующую строку в /etc/fstab: tmpfs /tmp tmpfs noatime,size=8G 0 0 и PORTAGE_TMPDIR="/tmp" в /etc/portage/make.conf, но это будет ближе к середине процесса установки, где я опишу это более подробно. Так же стоит отметить, что ядро без блобов и initramfs весит мегабайт 7 и можно спокойно обрезать /boot до 32Mb или 64Mb. Для разметки рекомендую использовать gdisk, так как он очень прост, внутри есть понятная справка по коммандам и он умеет делать GPT таблицу одной командой, поддерживает наименование разделов и прочие плюшки.

Заодно, раз уж Гента для относительно матёрых пользователей Linux, можешь поразмышлять, нужен ли тебе SWAP. Если да, то сделай соответствующий раздел и выполни

mkswap /dev/sdN и swapon /dev/sdN.

Так же его можно сделать файлом на любом существующем разделе. Подробнее - на арчвики (с файлом так же работает гибернация, подробнее по ссылке). Если ты решил, что он не нужен, то двигаемся дальше.

Примонтируй свой / в директорию по выбору (рекомендуется /mnt/gentoo), создай там директории /home и /boot, если ты создал соответствующие разделы и примонтируй их. Каталоги и директории создаются командой mkdir, если нужно создать целую цепочку директорий, скажем, /porn/fetish/necro/children, то можно воспользоваться mkdir -p и указать путь целиком, чтобы не создавать их по одной.

Установка(распаковка) базовой системы

Проверь, на всякий случай время командой date. Если оно часа на 3 отличается от реального, то, скорее всего, у тебя дуалбут с Windows и при каждом запуске оной у тебя будет сбиваться время. Решений 2: выставить в генте localtime вместо UTC (опишу чуть позже) или выставить в винде часовой пояс UTC. Лично я сделал последнее, но решать тебе, дорогой читатель.

Перейди в директорию, куда ты примонтировал рут и скачай последний стейдж3 фаил. На момент написания можешь выполнить

wget http://mirror.yandex.ru/gentoo-distfiles/releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20151119.tar.bz2

и подожди. Данная версия рассчитана на 64битный процессор. Если у тебя другая система, скажем, i686, то зайди на http://mirror.yandex.ru/gentoo-distfiles/releases/ и выбери нужный для твоей системы релиз. Если ты выбрал ubuntu, то проблем точно не возникнет, если нет, то придётся либо воспользоваться консольным браузером вроде elinks, откуда можно сразу же и скачать, или открой на портативном девайсе и скопируй адрес вручную.

По окончании останется распаковать архив командой

tar xvjpf stage3-* --xattrs

, где x-распаковать, v-показать процесс, p-сохранить права файлов, f-фаил, --xattrs-сохранить дополнительные аттрибуты файлов. Опцию v можно безопасно исключить, более того, лучше это и сделать, т.к. вывод списка файлов может быть чуть ли не дольше самой распаковки.

Поздравляю, базовый набор инструментов для сборки Генты теперь у тебя на ЭВМ. Осталось войти в эту систему и приступить к настройке всего и вся. Сделать это можно командой chroot, но поскольку разные дистрибутивы монтируют некоторые директории весьма нестандартно, необходимо провести некоторую подготовку. Обязательно выполни все описанные ниже команды или при загрузке в окружение Генты может не работать половина команд.

Прежде всего, скопируй resolv.conf, чтобы у тебя не пропал интернет

cp -L /etc/resolv.conf /mnt/gentoo/etc/

И выполни следующие строки от рута, которые нужным образом примонтируют необходимые "псевдо ФС" для корректной работы генты.

mount -t proc proc /mnt/gentoo/proc

mount --rbind /sys /mnt/gentoo/sys

mount --rbind /dev /mnt/gentoo/dev

rm /dev/shm && mkdir /dev/shm

mount -t tmpfs -o nosuid,nodev,noexec shm /dev/shm

chmod 1777 /dev/shm

Если планируешь использовать systemD, что не очень рекоммендуется, выполни также

mount --make-rslave /mnt/gentoo/sys

mount --make-rslave /mnt/gentoo/dev

Теперь можно перейти непосредственно в распакованную систему при помощи chroot.

chroot /mnt/gentoo /bin/bash

source /etc/profile

Готово, теперь ты "внутри" генты и начинается самое интересное.

Предварительная настройка системы

Прежде всего, нужно установить менеджер пакетов портаж. Раньше для этого требовалось распаковывать дополнительный архив, но сейчас достаточно выполнить

emerge-webrsync,

который создаст необходимые файлы и директории.

Хорошим тоном считается читать новости, когда они появляются. Там может появиться важная информация, которая может стать разницой между успешным апдейтом и негодованием. Как и многие списки, новости реализуются через гентуспецфичную команду eselect.

eselect news list

выводит список с датами,

eselect news read N

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

Прежде всего, нужно выбрать профиль системы. Грубо говоря, это набор USE-флагов для наиболее распространённых конфигурации, вроде KDE или GNOME декстопа. Тут нужно небольшое пояснение, так как многих отталкивает идея юз-флагов и превалирует идея, что это что-то сложное и/или страшное. На самом деле, если оперировать грубыми и неточными понятиями, юз-флаг это эдакий "переключатель". Допустим ты хочешь собрать гтк+ систему и не пользуешься ПО на qt или тебе не хочется ставить pulseaudio, в таком случае достаточно будет выставить "-qt -kde -pulseaudio" в make.conf и они не подтянутся при сборке пакетов и не будут лежать ненужным мусором на винчестере. Однако есть и обратная сторона. Если не выставить что-то, что может понадобиться, то можно остаться и без необходимого тебе функционала. По этой причине новичкам и рекомендуется выбрать десктопный профиль, а не идти по пути "-*".

eselect profile list показывает все доступные профили, а eselect profile set N его выбирает.

Теперь надо разобраться с /etc/portage/make.conf. Это один из наиболее важных файлов с настройками юз-флагов, параметров сборки и оптимизации. Однако стоит отметить, что вводимые здесь параметры глобальны. Если нужно включить что-то для конкретной программы, то это делается в /etc/portage/package.use/название. Пример конфига можно посмотреть здесь.

Следует разобрать его построчно: CFLAGS и CXXFLAGS это параметры сборки пакетов. -march указывает на процессор, а -O на уровень оптимизации. На сегодняшний день GCC достаточно умён, чтобы самостоятельно определить ЦП и достаточно выставить -march-native, но если хочешь выставить свой принудительно, можешь посмотреть эту страничку. Оптимизацию лучше оставить -O2, так как она используется почти везде и работает стабильно. Если жаждешь оптимизаций, ставь -O3, если хочешь быстро собирать, ставь -O0, но тогда почти весь смысл генты пропадает.

CHOST указывает, под какую систему будут собираться пакеты. Этот параметр лучше вообще не трогать. Но, в теории, можно, обладая топовым i7 от интел собирать пакеты со всеми оптимизациями для маломощного ноутбука на атоме.

С USE-флагами всё понятно, это общесистемное указание, какие функции тебе нужны от пакетов. CPU_FLAGS_X86 дополнительно указывает возможности твоего процессора для программ, которые его утилизируют, вроде ffmpeg и прочих редакторов. Посмотреть все доступные опции можно в /proc/cpuinfo. Для простоты создан скрипт, который выведет все нужные флаги за тебя. установи его без записи в world-фаил, так как это программа на один раз и запусти. emerge -1v app-portage/cpuinfo2cpuflags && cpuinfo2cpuflags-x86, перенеся результат в соответствующую строку make.conf.

PORTAGE_TMPDIR указывает, куда портаж будет девать временные файлы. Если у тебя HDD или мало оперативной памяти, то лучше эту строку убрать, если нет, то закинь её в tmpfs, как в примере.

VIDEOCARDS, INPUT_DEVICES и LINGUAS очевидны. Первый параметр лучше поискать в гентувики, так как он зависит от производителя видеоплаты, того, насколько она стара и хочешь ли ты свободный или же проприетарный драйвер. Второй параметр в 90% случаев достаточен evdev. Третий тоже весьма очевиден.

ACCEPT_KEYWORDS отвечает за свежесть системы. Изначально гента "стабильная", но в случае данного дистрибутива я настоятельно рекомендую выставить "тестинг", указав там ~amd64 (очевидно, это для 64 битных систем), потому что иначе там пакеты по свежести сопоставимы с говном мамонта.

Предпоследняя строка указывает, что для всех пакетов надо собирать как 64битную, так и 32битную версию, что является особенностью генты. Вместо устаревших мультилиб можно собрать свеженькую 32битную версию бибилиотек. Если не играешь в игры и не пользуешься wine, то лучше оставить там только 64 бита, чтобы не засорять систему ненужной мультибиблиотечностью.

MAKEOPTS говорит, во сколько потоков собирать пакеты. Раньше считалось, что оптимально это количество физическиз ядер +1, хотя давно уже показано, что это отнюдь не оптимально. Если у тебя интел с гипертредингом, то ставь физические ядра x2, если АМД или нет гипертрединга, то ставь равное количеству физических ядер, тогда на ядро будет по потоку.

Теперь, когда мы разобрались с мейк.конфом, осталось выставить локаль и временную зону. Скорее всего, достаточно будет выполнить

echo "Europe/Moscow" > /etc/timezone && emerge --config sys-libs/timezone-data

и прописать в locale.conf русский и английский UTF-8. cat "en_US.UTF-8 UTF-8" > /etc/locale.gen && cat "ru_RU.UTF-8 UTF-8" > /etc/locale.gen, применить их

locale-gen и выставить общесистемную локаль eselect locale list.

Не забудь обновить после этого окружение: env-update && source /etc/profile.

Как правило, после этого шага идёт настройка ядра, но мне кажется, что лучше закончить с настройкой системы, подготовив готовую "оболочку", а потом приступить с сборке и настройке ядра, которое всё это запускает. Если несогласен, то можешь перейти к настройке ядра, а потом продолжить читать этот раздел.

Настроим /etc/fstab. В данном файле хранится информация о файловых системах и разделах, которые должны подгружаться при запуске, а так же указание на точки монтирования. Например, если в fstab'е прописано, скажем, что /dev/sde4 должен монтироваться в /mnt/CP, то достаточно потом ввести mount /mnt/CP или mount /dev/sde4 и он примонтирует всё куда надо.

Необходимо указать здесь твои рут, бут и хоум, а так же любые другие разделы, которые ты создал. С гентой идёт заготовка для данного файла, но она весьма груба, хоть и можно банально подставить свои значения для дисков. Бут желательно сделать немонтируемым автоматически, то есть добавить в опции "noauto". Так же добавь "discard" в ФС на SSD и так далее. Если много оперативной памяти, не забудь создать tmpfs в оперативке.

диск точка монтирования ФС параметры параметры
/dev/sda1 /boot vfat defaults, noatime 0 2
/dev/sda2 / f2fs defaults 0 1
/dev/sdb1 /home btrfs default 0 1
tmpfs /tmp tmpfs noatime,nodiratime,size=8G 0 0

Настроим имя твоего ПК. Выполни nano -w /etc/conf.d/hostname и укажи в строке "hostname" как ты хочешь назвать свою машину.

Дальше рекомендуется зайти в /etc/conf.d/net и выставить статический IP или динамическое назначение для твоих сетевых интерфейсов, а потом добавить к загрузке их подгрузку, но тут есть одна особенность, о которой не говорит официальный гайд. Если у тебя dhcp подключение, то можно пропустить эти шаги. В результате загрузка системы не будет стопориться на подключении и ты быстрее загрузишься в рабочее окружение, но не сразу будет доступна сеть. Выбор за тобой.

Так же стоит зайти в /etc/hosts и расписать сетевое окружение, которое присутствует. Тут всё зависит от твоей конкретной установки.

Теперь установи ПО для твоих ФС по выбору. В примере используются dosfstools, btrfs-progs и f2fs-tools. Не забудь и о dhcpcd.

emerge dosfstools btrfs-progs f2fs-tools dhcpcd.

Так же стоит установить демон крона (позволяет выполнять действия по расписанию)

emerge sys-process/cronie

и добавить его в автозагрузку, чтобы он всегда работал

rc-update add cronie default.

Если у тебя pppoe, то установи ppp и подправь /etc/conf.d/net.

Проверь заодно просто

rc-update`,

что у тебя там подгружено, может увидишь что лишнее или чего-то недостаёт, вроде dbus'a.

Просмотри /etc/rc.conf, где указаны параметры загрузки системы (всё хорошо прокомментировано), /etc/conf.d/keymaps для всего, что касается клавиатуры в tty и /etc/conf.d/hwclock, где ты можешь захотеть выставить local вместо UTC, если основное окружение- windows.

Рекомендую также поставить eix, который в разы удобнее стандартного emerge в поиске пакетов и синхронизации и gentoolkit, который обладает рядом гентуспецифичных утилит.

Теперь выполни passwd и введи пароль. Поздравляю, у тебя теперь полностью готовая для работы от рута система, отсалось собрать ядро и перезагрузиться.

Собираем ядро

Прежде всего, не используй genkernel. Вообще. Он делает кривые, жирные ядра, которые ещё и не пересоберёшь нормально. Об efistab и прочих плюшках и вовсе забыть можно.

Делаем cat "sys-kernel/gentoo-sources testing" > /etc/portage/package.use/gentoo-sources и устанавливаем ядро

emerge gentoo-sources.

По окончании переходим в /usr/share/linux и запускаем конфигуратор.

cd /usr/src/lixnux && make menuconfig

Прежде чем приступить, убедись, что знаешь, что у тебя внутри ПК.

Проверь модель своего сетевого адаптера, графической и звуковой плат, модель и производителя ЦПУ.

Допустим, у тебя видеокарта от радеон и ты хочешь свободные драйвера. Идёшь на гентувики и ищешь radeon. Там будут указаны параметры для make.conf и что в ядре необходимо включить/выключить. Лучше сделать это один раз и полностью, чем потом мучаться и по 5 раз повторять процесс chroot'a, пересобирая ядро.

Теперь, когда разобрались с методикой, есть 2 способа конфигурации ядра:

  • make clean && make distclean && make mrproper, который полностью очистит конфиг ото всего и позволит тебе включить только необходимые тебе параметры
  • make menuconfig, который уже на 90% готов и нужно подчистить ненужное и добавить свои параметры

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

Первым делом зайди в processor types and features и выбери свой процессор(если включил флаг testing, то выбор должен быть обширным), отключив параметры, которые явно к твоему не относятся, затем зайди в file systems и включи поддержку для всего, что ты разбил и/или будешь использовать, особенно f2fs(если использовал его для рута), иначе вообще не загрузишься и в Device Drivers. В последнем вообще стоит усердно посидеть и повключать опции, например, поддержка USB3.0 по дефолту выключена, а 1.1, который уже нигде не используется, включена. На последок зайди там в network device support -> Ethernet driver support и убедись, что твоя карточка включена, а то останешься без интернета. В случае беспроводного или подключения по USB поброди по соответствующим разделам.

Теперь, когда разобрались с основным, пришло время делать загрузчик. Если у тебя EFI, то отдельное ПО вроде grub'а не нужно и следует зайти в processor types and features и включить EFI stub support и Built-in command line, в которой прописать root=/dev/sdN rw. Всё, теперь можно выйти, примонтировать /boot/, выполнить

make -jN && make install && make modules_install && cp /boot/vmlinuz-* /boot/EFI/Boot/bootx64.efi

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

Если у тебя относительно старая система без поддержки UEFI, то опции, связанные с ним, не стоит включать, а для запуска системы потребуется загрузчик вроде GRUB или lilo. Установи их и следуй инструкциям. Как правило, там всё автоматизированно.

После установки

Создай юзера командой

useradd -m -G users,wheel,audio,usb,games -s /bin/bash имя_юзера

и пароль для него

passwd имя_юзера,

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

nano -w /etc/polkit-1/rules.d/10-udisks.rules

polkit.addRule(function(action, subject) {

if (action.id == "org.freedesktop.udisks2.filesystem-mount" &&

   subject.user == "имя_юзера") {
   return "yes";

}

});

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

Прежде всего выполни emerge -auv system и разреши зависимости. При скачке со стабильной на тестовую ветку они возникнут. Затем попробуй emerge -uDNav system и emerge -auDNv world. Когда со всем разберёшься, можешь спокойно ставить любые пакеты.

Для синхронизации пакетов используй eix-sync для поиска eix -S или eix -s, для обновления всего и вся emerge -auDNv --with-bdeps=y world, для очистки лишнего emerge --depclean и eclean -d distfiles.

Если хочешь, чтобы при запуске системы сразу запускадся выбранный тобой DE или WM, достаточно подправить 2 файла:

  • В /etc/inittab пропиши c1:12345:respawn:/sbin/agetty -a username --noclear 38400 tty1 linux
  • cat "[[ $(tty) = "/dev/tty1" ]] && exec startx" > ~/.bash_profile

Но делай это только когда твоё окружение уже работает и запускается.

(опционально) Установка DE

Допустим, ты хочешь cinnamon. Установи иксы

emerge xorg-server

и сам циннамон

emerge cinnamon

Добавь в автозагрузку демонов dbus и consolekit

rc-update add dbus default && rc-update add consolekit default

пропиши цинамон как де для иксов

cat exec cinnamon-session > ~/.xinitrc

Готово. По startx должен запуститься данный DE. Можешь включать автологин, как написано выше.