Gentoo - Source-based дистрибутив Linux. Что это значит? Это значит что все придется собирать из исходных кодов, то есть компилировать и устанавливать. Не ручками конечно, не пугайтесь. Для этого есть специальная программа - emerge. Она все сама откомпилирует и установит, только попросите.

Для чего нужен такой дистрибутив? Не проще ли Ubuntu поставить? В некоторых случаях проще Ubuntu. Ставится быстро, настраивается тоже. С обновлениями проблем нет. Для рабочей станции - самое оно, если не предъявляется каких либо специфических требований (хитрое шифрование содержимого диска "спецпрограммой", к примеру). В этом случае заморачиваться не стоит.

Так для чего оно тогда нужно? Нужен Gentoo тогда, когда хотят "заточить" машинку для определенного рода задач и только под них. Когда стоит задача собрать из старой машинки маршрутизатор с BGP и OSPF. Некоторым категорически не нравится, что на их сервере X-ы "отжимают" нужную для Apache память и ресурсы процессора. Кто-то терпеть ненавидит перезагружать сервер после каждого обновления. Кому-то не нравятся модули ядра и ему хочется чтобы ядро было монолитным и включало в себя только необходимые на конкретной машине драйвера. И чтоб ничего лишнего. Кому-то чего-то не хватает в стандартных дистрибутивах. А кто-то просто любит собирать все своими руками. Вот для таких случаев Gentoo идеально подходит. На рабочие станции его тоже можно устанавливать, при желании. Он не хуже той-же Ubuntu справится.

Основным преимуществом Gentoo является высокая гибкость. Это конструктор. Конструктор с достаточно мелкими деталями. Причем подходит он под многие архитектуры процессоров. И разобраться в принципах его работы не сложно.

В общих чертах, основными компонентами Gentoo являются: загрузчик системы (bootloader), ядро Linux, набор программного обеспечения составляющий базовую систему (так называемый system set) и система portage.

Загрузчик предназначен для загрузки ядра в оперативную память и передачи ему управления. Самым распространенным в последнее время загрузчиком является grub2. Но никаких жестких требований, использовать именно его, нет. Можно устанавливать и другие. В частности lilo, elilo или grub-static.

Ядро — это и есть сам Linux. Если вкратце, это прослойка между железом и софтом. Включает в себя драйвера для железа, файловые системы, сетевые протоколы, механизмы виртуализации и др. Подробнее схему ядра Linux можно посмотреть на картинке честно "спионеренной" отсюда.

Набор программного обеспечения system предоставляет базовый функционал системы. Включает в себя достаточно большой список пакетов. Просмотреть его можно выполнив команду:

# emerge -eavp system.

Система portage — система управления программным обеспечением в Gentoo. Все операции установки, обновления и удаления производятся с ее помощью посредством команды emerge. Это гибкая система установки, позволяющая с помощью USE флагов управлять параметрами сборки ПО.

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

Процесс загрузки Gentoo выглядит следующим образом. Bootloader загружает ядро в память и запускает его. Ядро инициализируется (разворачивает собственные структуры, подключает устройства и т.д) и передает управление openrc (процессу init). Этот процесс проверяет корректность монтирования разделов, указанных в файле /etc/fstab, и запускает службы, необходимые для запуска системы. Когда все необходимые службы запущены, он инициализирует консоли, через которые осуществляется вход в систему.

Как устанавливается Gentoo? Процесс установки базовой системы достаточно простой. Состоит из следующих фаз:

  1. Получение livecd и запись его на физический носитель.
  2. Загрузка с физического носителя.
  3. Подготовка диска (разбивка, форматирование и монтирование)
  4. Распаковка на диски установочных файлов (файл stage)
  5. chroot в устанавливаемую систему
  6. Обновление системы portage до актуальной версии
  7. Настройка и сборка ядра
  8. Установка загрузчика
  9. Настройка установленной системы
  10. Перезагрузка в установленную систему
  11. Обновление системы до актуального состояния и установка требуемого ПО
  12. Создание образа системы (опционально)

Как все это выглядит на практике? Попробую продемонстрировать на примере. Есть у меня в загашнике старый «конь»:

  • Процессор: Intel(R) Celeron(R) CPU 2.53GHz
  • Материнская плата: ECS P4M800-M
  • ОЗУ: 2Gb.
  • HDD: IDE 80Gb
  • Привод DVD

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

Получение livecd и запись его на физический носитель.

Что такое livecd? Это загрузочный ISO образ Gentoo. Найти его можно на сайте gentoo.org или на зеркалах Gentoo. На текущий момент для архитектуры x86 (в нашем случае это «оно») есть два варианта образов: минимальный установочный CD или LiveDVD. Минимальный установочный CD — содержит минимально-необходимый объем программного обеспечения для загрузки Gentoo в консольном режиме и установки системы. В LiveDVD есть возможность загрузить Gentoo как в консольном, так и в графическом режиме. К тому же, LiveDVD поддерживает, кроме архитектуры x86, еще и amd64. Скачиваем любой из них.

После того как образ скачан, его нужно записать на носитель. Записать можно как на CD/DVD диск, так и на флешку. Главное чтоб машина, на которую будет производится установка, поддерживала нужный способ загрузки. Для записи на флешку можно использовать программу unetbootin.

Загрузка с физического носителя.

Загружаемся с носителя. Будет выведен список вариантов загрузки. Если загружаемся с LiveDVD, будет выведен список вариантов загрузки в графическом режиме. В минимальном установочном CD графического режима нет. Перед выводом приглашения командной строки, будет отображен список вариантов загружаемых ядер. В обоих случаях можно загружать ядро по умолчанию (если архитектура соответствует x86).

При загрузке с LiveDVD, по окончанию загрузки запускается X сервер (графический режим). Изредка (в частности на старых машинах), с ним случаются проблемы и отображается только черный экран. В таких случаях, нужно нажать Ctrl+Alt+F1 для перехода в консоль.

В минимальном установочном CD по окончанию загрузки будет выведено приглашение командной строки.

Прежде чем начать работу в консоли, поясню один момент. В bash есть такая штука, как автодополнение. При наборе команд (особенно путей к файлам) очень помогает. Например, вместо того чтобы набирать вот это - cd /usr/share/bash-completion, можно набрать так: cd /u<tab>/sh<tab>/bash<tab> (Там где <tab> - нажимается кнопка Tab).

Так как, при установке Gentoo нужно будет много скачивать из интернета, настройка сети это первоочередная задача. Посмотрим на состояние сетевых интерфейсов:

livecd ~ # ifconfig -a
enp0s18: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.190  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20ad:b7f7:ffe3:d64f  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::216:ecff:fe0b:b218  prefixlen 64  scopeid 0x20<link>
        ether 00:16:ec:0b:b2:18  txqueuelen 1000  (Ethernet)
        RX packets 182116  bytes 184614667 (176.0 MiB)
        RX errors 0  dropped 2593  overruns 0  frame 0
        TX packets 124405  bytes 14502484 (13.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
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 0  (Local Loopback)
        RX packets 1310  bytes 23684 (23.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1310  bytes 23684 (23.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Присутствует два сетевых интерфейса. enp0s18 — встроенная сетевая карта Ethernet.

Второй интерфейс lo — локальная петля (Local Loopback).

Так как, у нас в сети есть DHCP сервер, сетевой интерфейс уже настроен с параметрами, выданными сервером.
Что делать если нужно настраивать вручную? Настраивать с помощью ifconfig. Следующая команда установит интерфейсу enp0s18 адрес 192.168.1.8 с маской 255.255.255.0

livecd ~ # ifconfig enp0s18 192.168.1.8 netmask 255.255.255.0

Добавим маршрут по умолчанию для доступа в интернет через шлюз 192.168.1.1.

livecd ~ # route add default gw 192.168.1.1

Зададим DNS сервер 192.168.1.1.

livecd ~ # nano -w /etc/resolv.conf
/etc/resolv.conf
nameserver 192.168.1.1

 Проверим прохождение ICMP пакетов

livecd ~ # ping ya.ru

Если все путем, можно идти дальше.

Следующим шагом нужно установить правильную дату и время. Если этого не сделать, то в последующем возможны неприятные неожиданности. Устанавливается дата и время командой date с аргументом в виде ДДММччммГГГГ (День, Месяц,час,минуты,Год)

livecd ~ # date 060214212015

Устанавливать Gentoo можно как и непосредственно за компьютером, на который производится установка, так и удаленно (по сети, через ssh клиент). Для удаленной работы требуется несколько дополнительных телодвижений: установить пароль root'а и запустить sshd. Конфиг sshd править не обязательно (предполагается, что в локальной сети хакеры не водятся).

livecd ~ # passwd root
livecd ~ # /etc/init.d/sshd start

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

# ssh -l root 192.168.1.8
Password:
livecd ~ #

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

Как вообще найти диск в Linux? Для начала нужно сказать, что Linux работает с устройствами компьютера через файлы. Их еще нодами (node) называют. Чтение/запись с устройства производится путем чтения/записи из соответствующего файла. Хранятся все эти файлики в каталоге /dev. Диски, как и другие устройства, следует искать именно там.

Как узнать имя нужного диска? С этим тоже все просто. Имя диска составное. Состоит оно из наименования устройства и его номера на шине. Если диск IDE, то имя диска должно начинаться с hd (Hard Drive). Если диск SCSI, SATA или USB, то имя начинается с sd (SCSI Drive). Почему SATA тоже определяются как SCSI? Потому, что ядро Linux работает с SATA и USB устройствами посредством эмуляции SCSI. В современных ядрах IDE диски тоже работают через эмуляцию SCSI.

Проверим какие диски присутствуют в системе. Сначала поищем IDE диски:

livecd ~ # ls /dev/hd*
ls: cannot access /dev/hd*: No such file or directory

Нету. Ищем SCSI:

livecd ~ # ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda5  /dev/sdb  /dev/sdb4

Обнаружилось два диска: sda (с тремя разделами sda1,  sda2 и sda5)  и sdb (с одним разделом sdb4). Первый диск это IDE диск, хоть он и отображается как SCSI, а второй это загрузочная флешка.

Работать будем с первым. Создадим на нем разделы.

Какие именно разделы и в каких количествах нужны - определяется в зависимости от назначения системы. Это довольно большая тема. В нашем случае это не особенно важно, по-этому подробно останавливаться на этом не будем. Зачем их вообще создавать? Неужели нельзя поставить все на один раздел? Можно поставить и на один раздел. Только в этом случае, при заполнении диска до 100% будут проблемы. Серьезные. Во первых. Не будет файла подкачки (Как в Windows). В Linux для этих целей выделяется отдельный раздел. Желательно вначале диска для большей скорости чтения/записи. Во вторых - системные журналы имеют свойство распухать при активном использовании системы. И для них тоже желательно создавать отдельный раздел. И под систему желателен свой раздел. А уж для пользовательских данных отдельный раздел просто необходим. То есть, создадим 4 раздела:

  1. - Подкачка. Размер раздела под подкачку предлагается делать ОЗУ*2. У нас 2Gb ОЗУ. Значит нужен раздел 4Gb.
  2. - Корневая файловая система. 10Gb для нее в нашем случае достаточно.
  3. - Раздел для каталога /var. Основной объем там занимают лог-файлы. 6Gb для них думаю даже много.
  4. - Пользовательский раздел.

Для разметки диска в Linux используется программа fdisk (Для работы с разделами диска более 2Tb следует использовать parted). Fdisk вносит изменения в таблицу разделов только после команды w. Если ,во время работы с программой, вам вдруг захотелось "вернуть все в зад" - введите команду q и изменения не будут сохранены. Так что, если что-то будет сделано неправильно - не беда (если вы команду w еще не давали). И так, приступим.

livecd ~ # fdisk /dev/sda

Welcome to fdisk (util-linux 2.24.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help):

Говорит, скажите m для справки. Кому интересно - нажмите. Справка там короткая и понятная.

Для просмотра текущей разметки скажем p

Command (m for help): p
Disk /dev/sda: 76.7 GiB, 82347195904 bytes, 160834367 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: 0x1a0019ff

Device    Boot     Start       End   Blocks  Id System
/dev/sda1 *           63  16386299  8193118+  7 HPFS/NTFS/exFAT
/dev/sda2       16386300 160810649 72212175   f W95 Ext'd (LBA)
/dev/sda5       16386363 160810649 72212143+  7 HPFS/NTFS/exFAT

Это старая разметка. Нам она ни к чему, по-этому удалим все разделы. Делается это с помощью команды d.

Command (m for help): d
Partition number (1,2,5, default 5): 1

Partition 1 has been deleted.

Command (m for help): d
Partition number (2,5, default 5):

Partition 5 has been deleted.

Command (m for help): d
Selected partition 2
Partition 2 has been deleted.

Command (m for help): p
Disk /dev/sda: 76.7 GiB, 82347195904 bytes, 160834367 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: 0x1a0019ff


Command (m for help):

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

Command (m for help): n

Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-160834366, default 2048):   
Last sector, +sectors or +size{K,M,G,T,P} (2048-160834366, default 160834366): +4G

Created a new partition 1 of type 'Linux' and of size 4 GiB.

Command (m for help): p
Disk /dev/sda: 76.7 GiB, 82347195904 bytes, 160834367 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: 0x1a0019ff

Device    Boot Start       End  Blocks  Id System
/dev/sda1       2048   8390655 4194304  83 Linux

Command (m for help):

Здесь fdisk спросил какой раздел нужен (первичный или расширенный), номер первого сектора и номер последнего сектора или размер раздела. Раздел лучше создавать первичный, если хватает номеров разделов. Номер стартового сектора менять без нужды не следует. А вместо последнего я указал размер в 4 гигабайта. Создадим еще три раздела: под корневой каталог 10Gb, под /var - 6Gb и все оставшееся под /home ("все оставшееся" - это в поле Last sector ничего указывать не нужно). В результате получилось вот так:

Command (m for help): p
Disk /dev/sda: 76.7 GiB, 82347195904 bytes, 160834367 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: 0x1a0019ff

Device    Boot     Start       End   Blocks  Id System
/dev/sda1           2048   8390655  4194304  83 Linux
/dev/sda2        8390656  29362175 10485760  83 Linux
/dev/sda3       29362176  41945087  6291456  83 Linux
/dev/sda4       41945088 160834366 59444639+ 83 Linux

Command (m for help):

Теперь нужно задать правильные типы разделов. У дисков с sda2 по sda4 типы выставлены правильно(id=82, System=Linux). А у sda1 нужно указать, что это диск под swap. Делается это с помощью команды t.

Command (m for help): t
Partition number (1-4, default 4): 1

Hex code (type L to list all codes): 82

Changed type of partition 'Linux' to 'Linux swap / Solaris'.

Command (m for help): p
Disk /dev/sda: 76.7 GiB, 82347195904 bytes, 160834367 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: 0x1a0019ff

Device    Boot     Start       End   Blocks  Id System
/dev/sda1           2048   8390655  4194304  82 Linux swap / Solaris
/dev/sda2        8390656  29362175 10485760  83 Linux
/dev/sda3       29362176  41945087  6291456  83 Linux
/dev/sda4       41945088 160834366 59444639+ 83 Linux

Command (m for help):

Теперь типы дисков выставлены правильно. Можно сохранять таблицу разделов.

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Проверим наличие созданных разделов в файловой системе.

livecd ~ # ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sda3  /dev/sda4  /dev/sdb  /dev/sdb4

Как видим, все в порядке. Присутствуют 4 раздела на диске sda. Теперь можно приступать к форматированию разделов. Для начала создадим раздел swap.

livecd ~ # mkswap /dev/sda1
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=3098b520-44cb-4e06-8da6-acacea756127

Теперь нужно отформатировать остальные разделы. Linux поддерживает множество файловых систем. Если к файловой системе имеются какие-либо требования, можно посмотреть их характеристики и подобрать наиболее подходящую под требования. В нашем случае таких требований нет и можно использовать любую. Например ReiserFS.

livecd ~ # mkreiserfs /dev/sda2
mkreiserfs 3.6.24

Guessing about desired format.. Kernel 3.16.5-gentoo is running.
Format 3.6 with standard journal
Count of blocks on the device: 2621440
Number of blocks consumed by mkreiserfs formatting process: 8291
Blocksize: 4096
Hash function used to sort names: "r5"
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 89a0cb9e-a201-41c0-94f0-7ed1c0d4c976
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
        ALL DATA WILL BE LOST ON '/dev/sda2'!
Continue (y/n):y
Initializing journal - 0%....20%....40%....60%....80%....100%
Syncing..ok
ReiserFS is successfully created on /dev/sda2.

Утилита предупреждает о потере данных на форматируемом разделе и спрашивает подтверждение форматирование. Жмем y. Так-же форматируем sda3 и sda4.

livecd ~ # mkreiserfs /dev/sda3
livecd ~ # mkreiserfs /dev/sda4

Файловые системы на разделах созданы. Теперь их необходимо примонтировать к текущей файловой системе. Что это значит? Работа с разделами в Linux сильно отличается от Windows. В Windows разделы доступны в виде дисков (C:,D:,...Z:). И чтобы получить доступ к данным на разделе, нужно указывать диск, на котором они находятся (C:\autoexec.bat). В Linux такого нет, разделы монтируются к текущей корневой файловой системе. И корневая файловая система только одна.

Раздел можно примонтировать к любому каталогу в корневой файловой системе. НО, файлы в этом каталоге станут недоступны до размонтирования этого каталога. По-этому монтировать на работающей системе желательно в специально созданные для этих целей каталоги. 

Структура каталогов в Linux определена в Filesystem Hierarchy Standard (FHS). По русски можно почитать здесь.

Для временного монтирования (подключаемых дисков, или других разделов) предназначен каталог /mnt. Сюда и будем монтировать.

В нашем случае, нам нужно примонтировать раздел sda2 (на нем будет корневая ФС устанавливаемой ОС) к корневой файловой системе. Создать там два каталога (var и home) для монтирования разделов sda3 и sda4. Затем примонтировать туда разделы.

livecd / # mkdir /mnt/nd
livecd / # mount /dev/sda2 /mnt/nd
livecd / # mkdir /mnt/nd/var
livecd / # mkdir /mnt/nd/home
livecd / # mount /dev/sda3 /mnt/nd/var
livecd / # mount /dev/sda4 /mnt/nd/home

Активируем раздел подкачки.

livecd / # swapon /dev/sda1

Распаковка на диски установочных файлов

Теперь нужно получить архив установочных файлов (i686).

livecd ~ # cd /mnt/nd/home
livecd home # wget -c https://distfiles.gentoo.org/releases/x86/autobuilds/current-stage3-i686/stage3-i686-20141209.tar.bz2

Затем нужно распаковать архив в корень устанавливаемой системы.

livecd home # cd /mnt/nd
livecd nd # tar -xjvpf home/stage3-i686-20141209.tar.bz2

Когда архив распакован, монтируем файловую систему /dev, /sys и /proc в корень устанавливаемой системы. Это нужно для того, чтобы после смены корня файловой системы, программы могли получить доступ к устройствам компьютера и внутренним структурам ядра.

livecd nd # mount -o bind /dev /mnt/nd/dev
livecd nd # mount -o bind /proc /mnt/nd/proc
livecd nd # mount -o bind /sys /mnt/nd/sys

Теперь все готово к смене корня файловой системы (chroot).

Продолжение следует...

Добавить комментарий