Как установить Gentoo на Xen Server
OC: XEN 6.5
Установка Gentoo - процесс ебливый и муторный. Убедитесь что вы к нему готовы морально и физически. Как говорил Стани́слав Е́жи Лец: "Лучше шесть раза поставить Debian, чем один раз Gentoo"
NOTE
Для сборки ядра и модулей необходим раздел root не меньше 11 Гб
NOTE
Конфигурация виртуальной машины на которую производилась инсталяция: процессор (Vendor: AuthenticAMD, Model: AMD Phenom(tm) II X4 945 Processor, Speed: 3013 MHz) - Number of vCPUs - 4 Topology - 4 sockets with 1 core per socket, vCPU priority - Normal; память 1 Gb; жесткий диск -12 Гб, position 0; сеть DHCP. Время установки 6-7 часов.
NOTE
Устанавливалось с носителя: gentoo-install-x86-minimal-20161122.iso. Версия установки - чистая консоль без поддержки X-сервера
NOTE
Если установка прервалась запоем после смены корня системы, вернуться к нужному этапу можно загрузившись с live-cd и набрать:
livecd ~ # swapon /dev/sda2
livecd ~ # mount /dev/sda3 /mnt/gentoo
livecd ~ # mount /dev/sda1 /mnt/gentoo/boot
livecd ~ # mount -t proc none /mnt/gentoo/proc
livecd ~ # mount --rbind /sys /mnt/gentoo/sys
livecd ~ # mount --rbind /dev /mnt/gentoo/dev
livecd ~ # chroot /mnt/gentoo /bin/bash
livecd / # source /etc/profile
livecd / # export PS1="(chroot) $PS1"
(chroot) livecd / #
По мотивам этой и этой статьи с продолжением.
Подготовка (терминал live-cd)
Скачиваем minimal installation cd c сайта gentoo.org и пишем его на флэшку или диск (на xen`e просто монтируем ISO на дисковод виртуальной машины)
После загрузки с диска проверяем сеть (если адрес выдается по DHCP никаких действий более не требуется)
livecd ~ # ping -c 3 google.com
PING google.com (37.29.18.38) 56(84) bytes of data.
64 bytes from 37.29.18.38: icmp_seq=1 ttl=57 time=55.6 ms
64 bytes from 37.29.18.38: icmp_seq=2 ttl=57 time=50.6 ms
64 bytes from 37.29.18.38: icmp_seq=3 ttl=57 time=48.7 ms
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 48.738/51.676/55.615/2.907 ms
Меняем пароль суперпользователя
livecd ~ # passwd
Запускаем демон sshd
livecd ~ # rc-service sshd start
Смотрим внешний ip-адрес виртуальной машины и подключаемся к ней по ssh
livecd ~ # ifconfig
enp0s4: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.254.253.104 netmask 255.255.255.0 broadcast 10.254.253.255
inet6 fe80::e4e1:62ff:fea6:2f9c prefixlen 64 scopeid 0x20<link>
ether e6:e1:62:a6:2f:9c txqueuelen 1000 (Ethernet)
RX packets 205 bytes 15596 (15.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 60 bytes 8013 (7.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 173
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 6 bytes 108 (108.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 6 bytes 108 (108.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Разметка диска (ssh)
Так как машина тестовая, будет использоваться упрощенная разметка диска:
/boot - 100 Mb
/swap - 1 Gb
/root - 10.9 Gb
Хорошо написано про разметку с помощью fdisk тут.
Проверяем существующую разметку командой p
livecd ~ # fdisk /dev/sda
Welcome to fdisk (util-linux 2.26.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x9ebcbacc.
Command (m for help): p
Disk /dev/sda: 12 GiB, 12884901888 bytes, 25165824 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9ebcbacc
Размечаем раздел /boot (100 мегабайт) командой n
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-25165823, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-25165823, default 25165823): +100M
Created a new partition 1 of type 'Linux' and of size 100 MiB.
На все запросы fdisk оставляем значения по умолчанию, кроме запроса last sector, там пишем +100M.
Размечаем раздел под swap (1 гигабайт)
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (2-4, default 2):
First sector (206848-25165823, default 206848):
Last sector, +sectors or +size{K,M,G,T,P} (206848-25165823, default 25165823): +1G
Created a new partition 2 of type 'Linux' and of size 1 GiB.
Так же оставляем все значения по умолчанию, в запросе last sector пишем +1G.
Размечаем раздел под root все оставшееся место (11.9 гигабайт)
Command (m for help): n
Partition type
p primary (2 primary, 0 extended, 2 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (3,4, default 3):
First sector (2304000-25165823, default 2304000):
Last sector, +sectors or +size{K,M,G,T,P} (2304000-25165823, default 25165823):
Created a new partition 3 of type 'Linux' and of size 10.9 GiB.
Здесь на все запросы включая last sector оставляем значения по умолчанию.
Меняем тип раздела для swap - команда t
Command (m for help): t
Partition number (1-3, default 3): 2
Partition type (type L to list all types): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'.
Для раздела 2 (Partition number) указываем тип раздела (Partition type) 82.
Проверяем что получилось - команда p
Command (m for help): p
Disk /dev/sda: 12 GiB, 12884901888 bytes, 25165824 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9ebcbacc
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 206847 204800 100M 83 Linux
/dev/sda2 206848 2303999 2097152 1G 82 Linux swap / Solaris
/dev/sda3 2304000 25165823 22861824 10.9G 83 Linux
Если все правильно, сохраняем - команда w
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Форматирование диска (ssh)
Форматируем файловые системы. Для раздела /boot - ext2. Для раздела /root - ext4. Для раздела подкачки - swap.
livecd ~ # mkfs.ext2 -L boot /dev/sda1
livecd ~ # mkfs.ext4 -L root /dev/sda3
livecd ~ # mkswap -L swap /dev/sda2
Подключаем своп
livecd ~ # swapon /dev/sda2
Монтирование разделов (ssh)
Монтируем созданые разделы. Точка монтирования /mnt/gentoo
livecd ~ # mount /dev/sda3 /mnt/gentoo
livecd ~ # mkdir /mnt/gentoo/boot
livecd ~ # mount /dev/sda1 /mnt/gentoo/boot
Получение установочных файлов (ssh)
Скачиваем установочные файлы. Последняя версия на момент установки: stage3-amd64-20161117.tar.bz2
livecd ~ # cd /mnt/gentoo
livecd ~ # wget -c http://gentoo.ussg.indiana.edu/releases/x86/autobuilds/current-stage3-i686/stage3-i686-20161122.tar.bz2
Распаковываем
livecd gentoo # tar xvjpf stage3-*.tar.bz2
Выбираем ближайшее зеркало для установки
livecd gentoo # mirrorselect -i -o >>/mnt/gentoo/etc/portage/make.conf
Копируем файл с адересами днс-серверов
livecd gentoo # cp -L /etc/resolv.conf /mnt/gentoo/etc/
Монтирование слежебных файловых систем (ssh)
Для доступа к устройствам компьютера после смены корня системы необходимо смонтировать файловые системы /dev, /sys и /proc в корень устанавливаемой системы
livecd gentoo # mount -t proc none /mnt/gentoo/proc
livecd gentoo # mount --rbind /sys /mnt/gentoo/sys
livecd gentoo # mount --rbind /dev /mnt/gentoo/dev
Смена корня файловой системы (ssh)
Меням корень фаловой системы. Точка монтирования /mnt/gentoo
livecd gentoo # chroot /mnt/gentoo /bin/bash
Перегружаем настройки профиля
livecd gentoo # source /etc/profile
Меняем приглашение командной строки
livecd gentoo # export PS1="(chroot) $PS1"
(chroot) livecd / #
Установка снимков дерева Portage (ssh)
Устанавливаем снимок дерева Portage
(chroot) livecd / # mkdir /usr/portage
(chroot) livecd / # mkdir -p /usr/portage/profiles
(chroot) livecd / # echo «gentoo» > /usr/portage/profiles/repo_name
(chroot) livecd / # emerge-webrsync
Обновляем снимок дерев
(chroot) livecd / # emerge --sync
Выбор профиля установки (ssh)
Выбираем профиль для установки [1]
из предложенных
(chroot) livecd / # eselect profile list
Available profile symlink targets:
[1] default/linux/x86/13.0 *
[2] default/linux/x86/13.0/selinux
[3] default/linux/x86/13.0/desktop
[4] default/linux/x86/13.0/desktop/gnome
[5] default/linux/x86/13.0/desktop/gnome/systemd
[6] default/linux/x86/13.0/desktop/kde
[7] default/linux/x86/13.0/desktop/kde/systemd
[8] default/linux/x86/13.0/desktop/plasma
[9] default/linux/x86/13.0/desktop/plasma/systemd
[10] default/linux/x86/13.0/developer
[11] default/linux/x86/13.0/systemd
[12] hardened/linux/x86
[13] hardened/linux/x86/selinux
[14] hardened/linux/musl/x86
[15] default/linux/uclibc/x86
[16] hardened/linux/uclibc/x86
(chroot) livecd / # eselect profile set 1
Редактируем make.conf (ssh)
Основные опции сборки системы храняться в файле /etc/portage/make.conf
.
Файл make.conf по умолчанию
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS="-O2 -march=i486 -pipe"
CXXFLAGS="${CFLAGS}"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="i486-pc-linux-gnu"
# These are the USE and USE_EXPAND flags that were used for
# buidling in addition to what is provided by the profile.
USE="bindist"
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"
GENTOO_MIRRORS="rsync://gentoo.bloodhost.ru/gentoo-distfiles ftp://gentoo.bloodhost.ru/ http://gentoo.bloodhost.ru/ ftp://xeon.gentoo.ru/mirrors/gentoo/distfiles/ ftp://mirror.yand
ex.ru/gentoo-distfiles/ http://mirror.yandex.ru/gentoo-distfiles/"
Значение переменных
CFLAGS и CXXFLAGS - параметры оптимизации компилятора gcc для языков C (CFLAGS) и C++ (CXXFLAGS)
CHOST - указывает компилятору gcc для какой архитектуры процессора собирать код
USE - указывает глобальные опции сборки ПО, полный список команда # less /usr/portage/profiles/use.desc
PORTDIR - расположение дерева Portage
DISTDIR - каталог для хранения сжатых исходных кодов
PKGDIR - каталог для хранения сжатых установочных бинарных пакетов
GENTOO_MIRRORS - зеркала, выбираются после команды
NOTE Здесь рекомендуют следующее:
For performance reasons, is strongly recommended to use the following as the value for CFLAGS:
x86 DomU, Intel host: "-O2 -march=nocona -pipe -fomit-frame-pointer -mno-tls-direct-seg-refs" amd64 DomU, Intel host: "-O2 -march=nocona -pipe -fomit-frame-pointer" x86 DomU, AMD host: "-O2 -march=k8 -pipe -fomit-frame-pointer -mno-tls-direct-seg-refs" amd64 DomU, AMD host: "-O2 -march=k8 -pipe -fomit-frame-pointer"
Так как платформа у меня AMD выбираем CFLAGS="-O2 -march=k8 -pipe -fomit-frame-pointer -mno-tls-direct-seg-refs"
Редактируем файл make.conf nano /etc/portage/make.conf
и дописываем следующие флаги USE="-X -gtk -gtk2 -qt -qt4 -gnome -kde -xinetd unicode bindist"
. Это флаги отключат поддержку X сервера, xinetd, запретит собирать библиотеки для kde и gnome и добавит поддержку unicode.
Добавляем переменную MAKEOPTS="-j5"
(на виртуальную машину выделено четыре ядра). Предназначена она для контроля запускаемых процессов компиляции при сборке пакета. Рекомендуется устанавливать ее значение исходя из количества ядер процессора плюс 1.
Файл make.conf
после редактирования
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS="-O2 -march=k8 -pipe -fomit-frame-pointer -mno-tls-direct-seg-refs"
CXXFLAGS="${CFLAGS}"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="i686-pc-linux-gnu"
# These are the USE and USE_EXPAND flags that were used for
# buidling in addition to what is provided by the profile.
USE="-X -gtk -gtk2 -qt -qt4 -gnome -kde -xinetd unicode bindist"
PORTDIR="/usr/portage"
DISTDIR="${PORTDIR}/distfiles"
PKGDIR="${PORTDIR}/packages"
MAKEOPTS="-j5"
GENTOO_MIRRORS="rsync://gentoo.bloodhost.ru/gentoo-distfiles ftp://gentoo.bloodhost.ru/ http://gentoo.bloodhost.ru/ ftp://xeon.gentoo.ru/mirrors/gentoo/distfiles/ ftp://mirror.yand
ex.ru/gentoo-distfiles/ http://mirror.yandex.ru/gentoo-distfiles/
Настройки времени и локали (ssh)
Выбираем часовой пояс # ls /usr/share/zoneinfo
, находим свое местоположение и копируем
(chroot) livecd / # cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
(chroot) livecd / # echo "Europe/Moscow" > /etc/timezone
В файл /etc/locale.gen
добавляем локаль
(chroot) livecd / # echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
Генерируем
(chroot) livecd / # locale-gen
* Generating locale-archive: forcing # of jobs to 1
* Generating 2 locales (this might take a while) with 1 jobs
* (1/2) Generating en_US.UTF-8 ... [ ok ]
* Generation complete
Смотрим LANG variables
(chroot) livecd / # eselect locale list
Available targets for the LANG variable:
[1] C
[2] POSIX
[3] en_US.utf8
[ ] (free form)
Выбираем [3]
(chroot) livecd / # eselect locale set 3
Добавим подгрузку шрифта при загрузке
(chroot) livecd / # rc-update add consolefont default
Установка ядра (console)
Устанавливаем исходные коды ядра
(chroot) livecd / # emerge gentoo-sources
Собираем и устанавливаем ядро genkernel
(chroot) livecd / # emerge genkernel
Настраиваем /etc/genkernel.conf
(chroot) livecd / # nano /etc/genkernel.conf
Меняем значение следующих опций:
# Run 'make menuconfig' before compiling this kernel?
MENUCONFIG="yes"
# Make symlinks in BOOTDIR automatically?
SYMLINK="yes"
# Add new kernel to grub?
#BOOTLOADER="grub"
Запускаем сборку ядра:
(chroot) livecd / # genkernel --install all
NOTE
Минимальная необходимая конфигурация для XEN (без этого не запустится)
Linux/x86 4.4.26-gentoo Kernel Configuration
--------------------------------------------
[]64-bit kernel
Device driver --->
Graphics support --->
Change <M> on <*> here
<*> Direct Renderinng Manager (XFree86 4.1.0 and higher DRI support --->
Set * here
<*> Cirrus driver for QUEMU emulated device
Установка программ (console)
Устанавливаем необходимый набор программ
(chroot) livecd / # emerge udev syslog-ng dhcpcd vixie-cron grub
- grub - загрузчик
- udev - менеджер устройств для новых версий ядра Linux, подробнее тут
- syslog-ng - открытая реализация протокола Syslog для Unix и Unix-подобных систем, подробнее тут
- dhcpcd — свободная реализация клиента DHCP и DHCPv6. На данный момент является наиболее развитым DHCP-клиентом с открытым исходным кодом, подробнее тут
- vixie-cron одна из реализаций программы cron, подробнее тут
Добавляем в автозагрузку
(chroot) livecd / # rc-update add udev boot
(chroot) livecd / # rc-update add syslog-ng default
(chroot) livecd / # rc-update add vixie-cron default
Редактируем fstab (console)
В файле fstab
указываем точки монтрования файловых систем в соответствии с разметкой диска
# /etc/fstab: static file system information.
#
# noatime turns off atimes for increased performance (atimes normally aren't
# needed); notail increases performance of ReiserFS (at the expense of storage
# efficiency). It's safe to drop the noatime options if you want and to
# switch between notail / tail freely.
#
# The root filesystem should have a pass number of either 0 or 1.
# All other filesystems should have a pass number of 0 or greater than 1.
#
# See the manpage fstab(5) for more information.
#
# <fs> <mountpoint> <type> <opts> <dump/pass>
# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.
/dev/sda1 /boot ext2 noatime 1 2
/dev/sda2 / ext4 noatime 0 1
/dev/sda3 none swap sw 0 0
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
(required condition - empty string in end of file)
Устанавливаем пароль root (console)
Устанавливаем пароль суперпользователя
(chroot) livecd init.d # passwd root
Установка загрузчика (console)
Устанавливаем загрузчик
(chroot) livecd /# grep -v rootfs /proc/mounts > /etc/mtab
(chroot) livecd /# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
Генерируем файл grub.cfg
(chroot) livecd /# grub-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/kernel-genkernel-x86-4.4.26-gentoo
Found initrd image: /boot/initramfs-genkernel-x86-4.4.26-gentoo
done
Финальная перезагрузка
Размонтируем файловые системы и перегрузимся
(chroot) livecd /# exit
livecd # umount -l /mnt/gentoo/dev{/shm,/pts,}
livecd # umount -l /mnt/gentoo/boot
livecd # umount -l /mnt/gentoo
livecd # reboot