Обзор дистрибутивов — Gentoo Linux - Описание И Установка
Описание
Дистрибутив основан Даниэлом Роббинсоном и первоначально назывался Enoch Linux. Своей целью Даниэл ставил создание дистрибутива не содержащего бинарных (скомпилированных) пакетов, вместо этого каждый пакет должен был собираться на целевой машине с учетом всех её возможностей. Началось все с улучшения компилятора gcc, что в последствии прибавило производительности компилируемым программам и эти наработки были приняты в основную ветку gcc.
Система управления пакетами Portage в чем-то похожа на систему портов FreeBSD. Её основой является ebuild - файл в котором содержится информация о том как собирать пакет и откуда его скачивать. Ebuild'ы храняться в дереве portage - специальной иерархии каталогов. Все пакеты в дереве portage разделены на категории (так, например, vim находится в категории app-editors, а исходники ядра (gentoo-sources) в sys-kernel)
Как говорят сами разработчики Gentoo - это мета дистрибутив, т.е. дистрибутив для создания дистрибутивов.
Sabayon и Calculate Linux - одни из самых известных потомков.
Из-за того что необходимо некоторое количество знаний об устройстве ОС Linux даже чтобы установить этот дистрибутив его можно отнести к категории дистрибутивов для продвинутых пользователей. Также, имхо, этот дистрибутив лучше всего подойдет для тех кто хочет разобраться в устройстве Linux.
Лично я использую его на ноутбуке как основную систему. Также это неплохой выбор в качестве сервера благодаря проекту Hardened Gentoo.
Hardened Gentoo - один из приоритетных проектов Gentoo Linux, обеспечивающий систему набором патчей для программ и ядра (SELinux), что улучшает безопасность системы.
Система не выходит в виде релизов через некоторые промежутки времени (как Ubuntu), вместо этого Вы всегда можете установить себе последние обновления пакетов, система разработки использует так называемый rolling release.
Процесс установки
Параметры машины:
CPU: AMD Sempron 2800+
Поддерживаемые иснтрукции CPU: mmx mmxext sse sse2 3dnow 3dnowext
RAM: Две планки 1024Mb + 512Mb
HDD: 80Gb
Машинку планируется использовать как домашний сервер, так что процесс установки Xorg'а тут описан не будет.
Установка происходит с minimal-cd/LiveDVD архитектуры amd64 (как ещё называют x86_64). Скачать диск можно тут.
1) Вход в систему
Загружаемся с LiveCD/LiveDVD. Видим красивые сообщения о загрузке всевозможных модулей ядра. И в итоге перед нами окно входа в систему, если вы устанавливаете с LiveDVD (иначе перед вами будет просто консоль root'а)
Тут вы можете либо подождать пока пройдет 30 сек и войти в систему под именем "gentoo", либо нажать Ctrl+Alt+F1, где у вас будет доступ к консоле от имени "root". Пароль root'а не задан, так что вы можете поставить его либо в консоле по Ctrl+Alt+F1, либо в терминале xfce командой:
$ sudo passwd root
и потом залогиниться под root'ом командой:
$ su -
(Также все команды можно выполнять от имени "gentoo" предварив их командой sudo)
2) Настройка сети
В Gentoo настройки сетевых интерфейсов (сетевых карт) хранятся в "/etc/conf.d/net".
Вы можете открыть его командой (к сожалению моего любимого vim'а на LiveCD нету):
# nano /etc/conf.d/net
Т.к. у меня интернет раздается с помощью NAT'а мне необходимо прописать следующие параметры
config_eth0=( "10.126.67.4 netmask 255.0.0.0" ) # задает ip-адрес и маску сети данной машины
routes_eth0=( "default via 10.126.67.1" ) # ip-адрес шлюза который раздает интернет
Адреса DNS-серверов пишутся в /etc/resolv.conf (касается всех дистрибутивов линукс) и представляют собой строку следующего вида:
nameserver 192.168.67.1
За помощью в установке интернет соединения обращайтесь в конференцию [email protected], либо в блог "Есть вопрос!", либо читайте соответствующий раздел handbook'а http://www.gentoo.org/doc/en/handbook/handbook-amd64.xml?part=1&chap=3
Теперь нам необходимо применить настройки, для этого сделаем:
# /etc/init.d/net.eth0 restart
Проверить все ли у нас получилось можно командами:
# ifconfig
Вывод этой команды у меня показал следующее:
Link encap:Ethernet HWaddr 00:e0:4c:f1:a2:27
inet addr:10.126.67.4 Bcast:10.255.255.255 Mask:255.0.0.0
inet6 addr: fe80::2e0:4cff:fef1:a227/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:38293 errors:0 dropped:0 overruns:0 frame:0
TX packets:1187 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3041732 (2.9 MiB) TX bytes:301498 (294.4 KiB)
Interrupt:20 Base address:0x6000
inet addr:10.126.67.4 Bcast:10.255.255.255 Mask:255.0.0.0
inet6 addr: fe80::2e0:4cff:fef1:a227/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:38293 errors:0 dropped:0 overruns:0 frame:0
TX packets:1187 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3041732 (2.9 MiB) TX bytes:301498 (294.4 KiB)
Interrupt:20 Base address:0x6000
Либо командой:
# ping google.ru
Что должно показывать что-то вроде этого:
64 bytes from 10.126.67.1: icmp_seq=2 ttl=64 time=0.181 ms
Если вы увидели надпись:
ping: unknown host google.ru
Значит у вас что-то неправильно с настройкой DNS. Загляните ещё раз в "/etc/resolv.conf"
3) Разбиение дисков и создание файловых систем
Для разбиения дисков я использую:
# cfdisk /dev/hda
Тут вроде все просто: удаляете ненужные разделы кнопочкой [delete], создаете новые кнопочкой [new]. Для раздела, который будет содержать образ ядра поставьте флаг [bootable] нажатием кнопочки [bootable] xD. Для каждого созданного вами раздела поставьте тип раздела нажав на [type]. Для всех разделов, на которых у Вас будет стоять Linux это номер 83. Для swap раздела - 82.
Как видите я собираюсь использовать LVM, на котором будут располагаться каталоги: /opt, /var, /tmp, /usr и /home
По поводу использования LVM рекомендую почитать http://www.ibm.com/developerworks/ru/library/l-lvm2/
Корнь вынесен на отдельный раздел потому что для монтирования LVM разделов ядру нужны программы из каталога /sbin, который будет недоступен, если поместить его на LVM. Получается замкнутый круг: чтобы смонтировать раздел нам нужны программы, а чтобы запустить программы нам нужно смонтировать раздел.
Это можно устроить используя initrd - минимально необходимый образ файловой системы. Но я не сторонник этого способа.
Далее создаем ФС на разделах для /boot и /:
# mkfs.ext2 /dev/hda1
# mkfs.ext4 /dev/hda2
Создадим и подключим swap:
# mkswap /dev/hda3 && swapon /dev/hda3
Cледующей командой мы создаем Volume Group (группа томов) LVM:
# vgcreate VG0 /dev/hda5 /dev/hda6 /dev/hda7 /dev/hda8 /dev/hda9 /dev/hda10 /dev/hda11
VG0 можно заменить другим именем
Если потом Вы захотите добавить к уже созданной группе томов ещё разделы выполните для них:
# vgextend VG0 /dev/hdb12
Теперь нам нужно разделить созданную группу томов (VG0) на разделы для наших /opt, /var и т.д. Можете смело использовать используемые тут размеры. Благо, у Вас потом будет возможность изменить эти размеры абсолютно без боязни потерять данные на диске.
# lvcreate -L30G -nusr VG0
# lvcreate -L5G -nhome VG0
# lvcreate -L10G -nopt VG0
# lvcreate -L10G -nvar VG0
# lvcreate -L10G -ntmp VG0
Если после этого Вы захотите изменить эти размеры выполните:
# lvextend -L+1G /dev/VG0/use
Создадим файловые системы:
# mkfs.ext4 /dev/VG0/home
# mkfs.ext4 /dev/VG0/opt
# mkfs.ext4 /dev/VG0/usr
# mkfs.ext4 /dev/VG0/var
# mkfs.ext4 /dev/VG0/tmp
Наконец монтируем файловые системы и переходим непосредственно к установке:
# mount /dev/hda2 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/hda1 /mnt/gentoo/boot
# mkdir /mnt/gentoo/{opt,var,home,tmp,usr}
# mount /dev/VG0/opt /mnt/gentoo/opt
# mount /dev/VG0/var /mnt/gentoo/var
# mount /dev/VG0/home /mnt/gentoo/home
# mount /dev/VG0/tmp /mnt/gentoo/tmp
# mount /dev/VG0/usr /mnt/gentoo/usr
4) Установка stage3
Прежде всего проверьте системное время:
# date
Если оно неправильно, установите его командой:
# date MMDDhhmmYYYY
где MM - месяц, DD - число, hh - час, mm - минуты, YYYY - год
Теперь перейдите в каталог /mnt/gentoo:
# cd /mnt/gentoo
и скачайте последний stage3 (образ системы ~150Mb) и дерево portage (~40Mb) командами:
# wget http://mirror.yandex.ru/gentoo-distfiles/releases/amd64/autobuilds/current-stage3/stage3-amd64-20100902.tar.bz2
# wget http://mirror.yandex.ru/gentoo-distfiles/snapshots/portage-latest.tar.bz2
Распакуем архивы (именно с такими параметрами):
# tar xvjpf stage3-*.tar.bz2
# tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr
Теперь у нас есть основание для нашей системы. Осталось только выбрать необходимые нам флаги компиляции, USE-флаги, собрать ядро и несколько необходимых для работы пакетов.
5) Выбор флагов компиляции
Каждый пакет можно оптимизировать собрав его под Вашу конкретную архитектуру с использованием всех тех возможностей, которые она предоставляет.
Make-файлы в Linux используют переменные CFLAGS и CXXFLAGS для указания компилятору необходимых флагов компиляции для программ написанных на C/C++.
Gentoo предоставляет файл "/etc/make.conf", из которого берутся эти флаги (и другие параметры системы сборки) при установки пакетов.
Я собрал себе такой make.conf:
1 2 3 4 5 6 7 8 9 10 |
|
Несколько слов о том что тут написано.
Впервые я решил использовать максимальную оптимизацию -O3. Говорят при этом некоторые программы могут работать неправильно, либо вообще не работать =) Но это бывает редко. Вообще по handbook'у рекомендуют флаг -O2.
С помощью "-march=native" компилятор будет сам определять все доступные инструкции процессора и использовать их.
-fomit-frame-pointer - ускоряет выполнение приложений, но усложняет их отладку. Но т.к. мы не программисты =) нам это не важно.
MAKEOPTS="-j2" говорит о том, что компиляция будет выполнятся в два потока.
ACCEPT_KEYWORDS="~amd64" - позволяет устанавливать пакеты из тестируемой ветки. Как пишут разработчики (и как есть на самом деле) такие пакеты вполне стабильны или по крайней мере такими кажутся =) В тестовой ветке обновления для пакетов появляются значительно чаще.
EMERGE_DEFAULT_OPTS="-va" - с этой опцией, когда вы будете устанавливать пакеты командой "emerge ..." у вас будут спрашивать уверены ли Вы в том, что хотите установить пакет и все его зависимости (man emerge).
GENTOO_MIRRORS - сервер с которого скачиваются пакеты (указано зеркало Yandex'а).
SYNC - сервер с деревом portage.
6) chroot, выбор профиля и установка локалей
Скопируйте информацию о DNS из Вашей работающей системы в новую:
# cp -L /etc/resolv.conf /mnt/gentoo/etc/
Дальше нам необходимо сделать chroot в нашу новую систему, но для нормальной работы в ней нам нужны каталоги ещё каталоги /proc и /dev. Смонтируйте их командами:
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev
Делаем chroot:
# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile
# export PS1="(chroot) $PS1"
Теперь мы находимся в нашей новой системе Gentoo =)
Первым делом обновим дерево portage:
# emerge --sync
Теперь нам нужно выбрать профиль (profile). Список доступных профилей можно посмотреть командой:
# eselect profile list
Каждый профиль представляет собой набор USE-флагов используемых системой. Я предпочел default/linux/amd64/10.0/no-multilib под номером [6]
# eselect profile set 6
no-multilib значит, что в системе не будет 32-битных библиотек. Они нужны для запуска некоторых приложений, для которых ещё нет 64-битных версий. Но я такими пользоваться не собираюсь так что мой выбор таков. Рекомендую вам остаться на первом (стандартном) профиле, т.к. другие профили (такие как desktop/kde, desktop/gnome) предустанавливают много USE флагов, которые вам врядли пригодятся, и из-за чего в качестве зависимостей могут быть установлены много ненужных вам пакетов.
В /etc/locale.gen раскоментируйте строку
en_US.UTF-8 UTF-8
добавьте:
ru_RU.UTF-8 UTF-8
для поддержки русского языка и выполните:
# locale-gen
7) Установка ядра
Перед установкой ядра необходимо выбрать timezone.
Найдите в каталоге /usr/share/zoneinfo Ваш город/регион
# ls /usr/share/zoneinfo
и скопируйте его в /etc/localtime. Для Москвы будет выглядеть так:
# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Теперь непосредственно установка ядра.
Я предпочитаю стандартный gentoo-sources (gen-kernel (утилита для автоматической сборки ядра) не использую).
# emerge gentoo-sources
Установит исходники ядра в систему.
Как уже говорил, Я предпочитаю ручное конфигурирование через "make menuconfig" и мне обычно хватает включения поддержки файловых систем чтобы система начала грузиться. И это главное, а уже потом можно изгаляться включая/выключая все и вся =) Зато будет известно когда и что сломалось.
# cd /usr/src/linux
# make menuconfig
Я поставил поддержку ext3 как модуля, а ext2 и ext4 включил в ядро.
File systems --->
Second extended fs support
Ext3 journalling file system support
<*> The Extended 4 (ext4) filesystem
Ещё для работы с LVM разделами нужно включить (уже включено, но стоит удостовериться):
Device Drivers --->
Multi-device support (RAID and LVM) --->
[*] Multiple devices driver support (RAID and LVM)
< > RAID support
Device mapper support
Когда закончите издеваться над ядром, скомпилируйте, установите модули и само ядро камандой:
# make && make modules_install && make install
8) Конфигурация системы
В /etc/fstab прописаны все файловые системы, которые нужно смонтировать при загрузке ОС.
Основная часть моего fstab'а выглядит так:
/dev/sda1 /boot ext2 noauto,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
#/dev/fd0 /mnt/floppy auto noauto 0 0
/dev/VG0/usr /usr ext4 noatime 0 2
/dev/VG0/home /home ext4 noatime 0 2
/dev/VG0/opt /opt ext4 noatime 0 2
/dev/VG0/var /var ext4 noatime 0 2
/dev/VG0/tmp /tmp ext4 noatime 0 2
/dev/sda2 / ext4 noatime 0 1
/dev/sda3 none swap sw 0 0
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
#/dev/fd0 /mnt/floppy auto noauto 0 0
/dev/VG0/usr /usr ext4 noatime 0 2
/dev/VG0/home /home ext4 noatime 0 2
/dev/VG0/opt /opt ext4 noatime 0 2
/dev/VG0/var /var ext4 noatime 0 2
/dev/VG0/tmp /tmp ext4 noatime 0 2
Не удивляйтесь тому, что находясь в minimal-cd мы использовали hd* для монтирования разделов. В итоге, в нашей системе, они будут видны как sd*
Укажем имя компьютера в /etc/conf.d/hostname
HOSTNAME="tux"
И пропишем настройки сети в новый /etc/conf.d/net
config_eth0=( "10.126.67.4 netmask 255.0.0.0" )
routes_eth0=( "default via 10.126.67.1" )
Чтобы сеть работала при перезагрузке нужно добавить в автозапуск скрипт /etc/init.d/net.eth0 командой:
# rc-update add net.eth0 default
Установите пароль root'а командой:
# passwd
9) Установка необходимых программ
sys-fs/lvm - для поддержки LVM в системе.
syslog-ng - для логирования происходящих в системе событий
grub-static - grub первой версии. Оказалось, что в профиле no-multilib нет обычного grub, поэтому необходимо использовать его статичную версию
# emerge lvm syslog-ng grub-static
Чтобы загрузить мою систему мне хватило такого конфига в /boot/grub/menu.lst:
default 0
timeout 30
title gentoo Linux 2.6.35
root (hd0,0)
kernel /boot/vmlinuz-2.6.35-gentoo-r5 root=/dev/sda2
timeout 30
title gentoo Linux 2.6.35
root (hd0,0)
kernel /boot/vmlinuz-2.6.35-gentoo-r5 root=/dev/sda2
дальше я установил grub в MBR:
# grep -v rootfs /proc/mounts > /etc/mtab
# grub-install --no-floppy /dev/hda
Вышел из chroot, размонтировал разделы и перезагрузился:
# exit
# cd
# umount /mnt/gentoo/{boot,usr,tmp,var,home,opt,dev,proc} /mnt/gentoo
# vgchange -a n
# reboot