Установка Gentoo. Коротко и ясно

В статье рассматривается установка gentoo — одного из дистрибутивов Linux. Статья не обьясняет многие технические термины и не является заменой официального handbook. Установка проводится на виртуальный сервер под управлением vmware esxi6.5. Предполагается, что виртуальный сервер уже создан средствами ESXi Embedded Host Client и имеет следующую конфигурацию:

CPU: 2*2.0Hhz Xeon
RAM: 2Gb
HDD: 40GB
Net: 2 сетевые карты в разных виртуальных свичах

CDROM: в качестве диска имидж gentoo-install-amd64-minimal-20150521.iso взятый с сайта gentoo

Запускаем виртуальную машину с СД, на приглашение boot пишем gentoo. После продолжения загрузки и выбора опций по умолчанию получаем приглашение командной строки

livecd ~#

Вводим пароль рута. Необходимо защититься. В процессе установки виртуальная машина будет доступна из вне

passwd

New password: (Enter the new password)
Re-enter password: (Re-enter the password)

Запуск ssh

Необходимо для удаленного подключения в виртуальной машине, так как продолжать установку из консоли vmware sphere не совсем удобно

/etc/init.d/sshd start

Задаем параметры сети. Где x.x.x.x внешний адрес выданный нам провайдером, x.x.x.1 — шлюз провайдера через который мы выходим в мир. Просмотрим список сетевых интерфейсов и даем ему адрес

ifconfig -a
ifconfig enp2s0 x.x.x.x netmask 255.255.255.0
route add default gw x.x.x.1

В /etc/resolv.conf указываем сторонний днс-сервер, пока нет своего

nameserver 8.8.8.8

Пробуем попингать кого-нибудь, например ping gmail.com

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

ssh -l root x.x.x.x

Разбивка диска

parted -a optimal /dev/sda

GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted)

Используем разметку gpt

(parted)mklabel gpt

Создание разделов

Сделаем четыре раздела:

  1. /dev/sda1 BIOS boot раздел — рекомендовано создавать в любом случае
  2. /dev/sda2 Boot раздел
  3. /dev/sda3 Swap раздел
  4. /dev/sda4 Root раздел

По желанию можно создать еще отдельно /dev/sda5 для /home, но я этого не делал. Если мне подребуется /home выходящий за пределы размера текущего диска, то я просто создам дополнительный виртуальный диск и подключу его к виртуальной машине

При создании разделов (mkpart) размер разделов неявно указан в мегабайтах

(parted)mkpart primary 1 3
(parted)name 1 grub
(parted)set 1 bios_grub on
(parted)mkpart primary 3 131
(parted)name 2 boot
(parted)mkpart primary 131 10240
(parted)name 3 swap
(parted)mkpart primary 10240 -1
(parted)name 4 rootfs
(parted)set 2 boot on

-1 значит от 10-го гигабайта и до конца диска. В результате после выполнения print получаем следующую картину

(parted) quit

Форматирование разделов

Я придерживаюсь правил официального мана, поэтому делаю загрузочный раздел (/dev/sda2) в ext2 и корневой раздел (/dev/sda4) в ext4

mkfs.ext2 /dev/sda2
mkfs.ext4 /dev/sda4

Активация и инициализация раздела подкачки

mkswap /dev/sda3
swapon /dev/sda3

Монтирование разделов

mount /dev/sda4 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/sda2 /mnt/gentoo/boot

Установка из архива stage3 amd64

cd /mnt/gentoo

В браузере идем на https://www.gentoo.org/downloads/, находим Stage Archives, копируем ссылку и подкидываем ее в wget

wget http://distfiles.gentoo.org/releases/amd64/autobuilds/20161215/stage3-amd64-20161215.tar.bz2

Распаковываем архив

tar xvjpf stage3-*.tar.bz2 --xattrs

В результате мы получили установленную систему. Да, во так просто. Но это еще не все. Впереди еще конфигурирование системы, компиляция ядра, установка загрузчика

Задание параметров компиляции свежеустановленной системы

vi /mnt/gentoo/etc/portage/make.conf

Мой make.conf содержит следующее

CFLAGS="-O2 -pipe -march=native"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
USE="-bindist -ipv6"
CPU_FLAGS_X86="mmx mmxext sse sse2 sse3 ssse3"
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"
LINGUAS="en"
L10N="en"
# -j3 = количество ядер + 1. У меня отдано серверу 2 ядра
MAKEOPTS="-j3"

Информацию о CPU_FLAGS_X86 можем получить установив пакет app-portage/cpuid2cpuflags или командой cat /proc/cpuinfo

Копируем информацию о ДНС

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

Подготовка к переходу в новое окружение. Монтирование

Файловые системы, которые должны быть доступны:

  • /proc/ — псевдо-файловая система (она выглядит как обычные файлы, но на самом деле генерируется на лету) из которой ядро Linux предоставляет информацию для окружения
  • /sys/ — псевдо-файловая система, как и /proc/, которую она однажды заменит, также она более структурирована, чем /proc/
  • /dev/ — обычная файловая система, частично управляемая менеджером устройств Linux (обычно udev), которая содержит все файлы устройств

Каталог /proc/ монтируется в /mnt/gentoo/proc/, а остальные два каталога через bind-mounted. Дальнейшее означает, что, например, /mnt/gentoo/sys/ на самом деле будет /sys/ (это просто вторая точка входа в ту же файловую систему), тогда как /mnt/gentoo/proc/ является новой точкой монтирования (так сказать, экземпляром) файловой системы

mount -t proc proc /mnt/gentoo/proc
mount --rbind /sys /mnt/gentoo/sys
mount --make-rslave /mnt/gentoo/sys
mount --rbind /dev /mnt/gentoo/dev
mount --make-rslave /mnt/gentoo/dev

Переход в новое окружение

chroot /mnt/gentoo /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

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

Установка portages и синхронизация до актуальной версии

emerge-webrsync
emerge --sync

Выбор чистого 64-битного окружения, без 32-битных приложений и библиотек осуществляется через выбор нужного профиля. Полный список профилей можно посмотреть командой:

eselect profile list

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

eselect profile set 11

Использование USE флагов

USE-флаги задают опции сборки программ включая или выключая нужное. В отличии от FreeBSD, где опции сборки нужно выбирать по ходу установки зависимостей устанавливаемой программы (Например: Вы желаете собрать postfix с поддержкой tls и mysql. В папке порта postfix вы запускаете команду make. Postfix не будет собран пока не будут собраны и установлены его зависимости, в даном случае mysql и openssl, каждая из которых имеет свой конфигуратор. Тоесть после make из /usr/ports/mail/postfix автоматически будет запущен конфигуратор openssl, где нужно проставить флаги сборки (или согласится на что, что есть) и ждать пока будет собран и установлен этот пакет, после чего установщик перейдет к следующей зависимости, в данном случае к mysql, в конфигураторе которого также нужно сделать выбор. Таким образом администратор должен полностью контролировать процесс) gentoo предлагает более удобный механизм-задать опции сразу. Часть из них я уже указал ранее в /etc/portage/make.conf

Полное описание всех доступных USE флагов можно найти в файле /usr/portage/profiles/use.desc

Просмотр USE-флагов, которые используются для выбранного профиля

emerge --info | grep ^USE

В файле /etc/portage/make.conf можно добавлять, убирать USE-флаги. Если это произошло, то необходимо пересобрать мир следующей командой

emerge -auND @world

В дальнейшем мне потребуется vim/vi, поэтому я сразу устанавливаю его. Можно и не устанавливать и пользоваться дифолтным nano

emerge vim

Часовой пояс и дата

Список часовых поясов Европы

ls /usr/share/zoneinfo/Europe

Создаем свою таймзону

echo "Europe/Kiev" > /etc/timezone

На основании записи в /etc/timezone сгенерируем /etc/localtime. Таким образом время на сервере будет из нашей географической временной зоны

emerge --config sys-libs/timezone-data

Настройка локали

Локаль указывает не только язык, который используется при взаимодействии с системой, но и правила для сортировки строк, формат вывода даты и времени, и т.д.

vi /etc/locale.gen

Раскомментируем нужные локали. Я себе оставил en_US.UTF-8 UTF-8. Полный список доступных локалей можно посмотреть командой

locale -a

Сгенерируем свои локали

locale-gen

Теперь locale -a покажет только наши локали, а команда

eselect locale list

покажет нумерованый список локалей из которых выбираем свою en_US.utf8

eselect locale set 2

Установка ядра

Следующая команда устанавливает исходники ядра в /usr/src/, в котором символьная ссылка linux будет указывать на текущую версию

emerge --ask sys-kernel/gentoo-sources

Собрать ядро можно либо вручную, либо при помощи программы genkernel. Я предпочитаю ее

emerge --ask sys-kernel/genkernel

Для текущей разметки создадим файл /etc/fstab, в котором будут следующие записи

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

Конфигурирование ядра виртуального сервера gentoo на esxi

Так как у меня есть готовый конфиг ядра на другом сервере, то я возьму его и положу в /etc/kernels и затем дам команду сборки ядра. Если готовый конфиг взять негде, то genkernel запустит конфигуратор, где есть возможность выбрать нужные опции (главное не запутаться). Сохраненный конфиг-файл .config будет находится в папке /usr/src/linux. После окончания компиляции genkernel  скопирует его в /etc/kernels с именем kernel-config-x86_64-4.4.26-gentoo, где 4.4.26 текущая, пролинкованая версия ядра (см. в /usr/src/)

genkernel all

В среднем компиляция выполняется минут 20-40

Настройка сети будущего сервера

В папке /etc/conf.d лежат конфигурационные файлы. Некоторые из них нужно изменить

cd /etc/conf.d

vi hostname
hostname="example.myserver.com"

Адреса для внешнего (eth0) и внутреннего интерфейса (eth1)

vi net

config_eth0="x.x.x.x netmask 255.255.255.0 brd x.x.x.255"
routes_eth0="default via x.x.x.1"
config_eth1="192.168.155.2 netmask 255.255.255.0 brd 192.168.155.255"

Подключение к сети при загрузке обеспечивается линкованием нужных интерфейсов

cd /etc/init.d

ln -s net.lo net.eth0
ln -s net.lo net.eth1

и постановкой их в автозапуск

rc-update add net.eth0 default
rc-update add net.eth1 default

Обращаю внимание на то, что названия наших интерфейсов enp2s0 и enp2s1. А сконфигурированы у нас интерфейсы с именами eth0 и eth1. Если не решить этот конфликт, то после перегрузки сервер окажется без сети, что явно плохо. Для решения проблемы в файле /etc/default/grub для параметра GRUB_CMDLINE_LINUX нужно добавить net.ifnames=0. Для нашего примера это выглядит так

GRUB_CMDLINE_LINUX="net.ifnames=0 root=/dev/sda4 rootfsENGINE=ext4"

Нужно запомнить этот момент и позже, когда будет установлен программа grub, но до инсталяции  на бутовый раздел внести изменения в файл /etc/default/grub

Установка пароля

Для пользователя root

passwd root

Так как под рутом работать не принято, то заведем для себя учетку и установим пароль

useradd -m -G wheel myname
passwd myname

Удаленный доступ по ssh

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

rc-update add sshd default

Установка и конфигурирование загрузчика GRUB

emerge --ask sys-boot/grub:2

Теперь внесем изменения в файл /etc/default/grub, о чем я писал выше и установим загрузчик на раздел /dev/sda

grub-install /dev/sda
grub-mkconfig -o /boot/grub/grub.cfg

Финиш

Выход из chroot, размонтирование файловых систем, перегрузка

exit
cd
umount -l /mnt/gentoo/dev{/shm,/pts,}
umount /mnt/gentoo{/boot,/sys,/proc,}
reboot

Мои поздравления!

И в заключении даю ряд утилит, необходимых для начальной работы сервера

ПакетЧто делает
cronieЗапуск задач по расписанию
elinksКонсольный веб-клиент
htopПродвинутый top. Мониторинг сервера в реальном времени
ipsetУтилита администрирования ядерного ipset. Что-то вроди table из ipfw FreeBSD
iptablesФаервол
iputilsРазные полезные утилитки
ldns-utilsДНС-утилиты
logrotateРотация логов
mailxКонсольный почтовый клиент
mcДвупанельный файловый менеджер в стиле Norton Commander
muninКлиент-серверное приложение для мониторинга серверов. Строит графики
ntpСервер точного времени
open-vm-toolsНабор утилит управления гостевой машиной vmware
screenКонсольный оконный менеджер
syslog-ngЛогирование событий
tcshЕще один шелл
telnet-bsdКонсольный telnet-клиент
unboundКешируюший днс-сервер
whoisУтилита показывает информацию о доменах, автономных системах, блоках адресов
Александр Черных

системный администратор

Статьи по теме