В статье рассматривается установка gentoo — одного из дистрибутивов Linux. Статья не обьясняет многие технические термины и не является заменой официального handbook. Установка проводится на виртуальный сервер под управлением vmware esxi6.5. Предполагается, что виртуальный сервер уже создан средствами ESXi Embedded Host Client и имеет следующую конфигурацию:
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 — шлюз провайдера через который мы выходим в мир. Просмотрим список сетевых интерфейсов и даем ему адрес
ip addr ip addr add x.x.x.x/24 dev enp2s0 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
mklabel gpt
Создание разделов
Сделаем четыре раздела:
- /dev/sda1 BIOS boot раздел — рекомендовано создавать в любом случае
- /dev/sda2 Boot раздел
- /dev/sda3 Swap раздел
- /dev/sda4 Root раздел
По желанию можно создать еще отдельно /dev/sda5 для /home, но я этого не делал. Если мне подребуется /home выходящий за пределы размера текущего диска, то я просто создам дополнительный виртуальный диск и подключу его к виртуальной машине
При создании разделов (mkpart) размер разделов неявно указан в мегабайтах
mkpart primary 1 3 name 1 grub set 1 bios_grub on mkpart primary 3 131 name 2 boot mkpart primary 131 10240 name 3 swap mkpart primary 10240 -1 name 4 rootfs set 2 boot on
-1 значит от 10-го гигабайта и до конца диска. В результате после выполнения print получаем следующую картину
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/20180925T214502Z/stage3-amd64-20180925T214502Z.tar.xz
Распаковываем архив
tar xvpf stage3-*.tar.xz --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"
Копируем информацию о ДНС
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 |
rsyslog | Логирование событий |
screen | Консольный оконный менеджер |
tcsh | Еще один шелл |
telnet-bsd | Консольный telnet-клиент |
unbound | Кешируюший днс-сервер |
whois | Утилита показывает информацию о доменах, автономных системах, блоках адресов |

- Системный администратор с 2000 года
- Участник Freelancehunt, Хабр Q&A, cyberforum
- Кейсы