Памятка по установке и базовой настройке Gentoo Linux

2009-09-28

Постановка задачи

Требуется с минимальными затратами времени и траффика поставить Gentoo Linux на x86-совместимую машину.
Предполагается, что будет использоваться в основном стабильная ветвь архитектуры x86, пакеты из тестовой ветви при необходимости размаскируются в файлах директории /etc/portage/package.keywords/.
Поскольку разработчики Gentoo в конце 2008 года перешли на еженедельный выпуск стадий, имеет смысл разворачивать систему из наиболее свежей стадии.
Как показала практика, Gentoo без труда ставится на машинах класса Pentium 3 (Celeron Coppermine) с объемом оперативной памяти 256 Mb и без сети, так что требования к ПК можно опустить ;)
Памятка рассчитана на пользователя, который знаком с POSIX-системами и Linux в частности, а также читал Gentoo handbook ;)

Подготовительные действия

Для установки Gentoo на x86-совместимую машину потребуется: Скачать еженедельные сборки стадии и образа загрузочного CD можно, например, с зеркала Яндекса. Архив портежей portage-latest оттуда же.
Записываем на чистый CD или DVD образ инсталляционного CD, затем дописываем файл стадии, архив портежей и (опционально) срез distfiles:
$ growisofs -dvd-compat -Z /dev/dvd1=install-x86-minimal-2009mmdd.iso
$ growisofs -M /dev/dvd1 -R -J stage3-i686-2009mmdd.tar.bz2 portage-latest.tar.lzma

Примечание: если по каким-то причинам файл стадии и архив портежей находится на другом CD/DVD, загрузку установочного диска нужно делать с ключом "docache" (копирование содержимого установочного диска в RAM).

Установка базовой системы

  1. Разбивка диска (cfdisk/fdisk):
    # cfdisk /dev/sda
    sda1 - primary - swap     - 800 Mb (swap)
    sda2 - primary - ext3     - 20 Gb  (/)
    sda3 - primary - reiserfs - 80 Gb  (/home)
    ...
  2. Создание и активирование свопа, создание файловых систем:
    # mkswap /dev/sda1
    # swapon /dev/sda1
    # mkfs.ext3 /dev/sda2
    # mkreiserfs /dev/sda3
    ...
  3. Монтирование созданных файловых систем. Монтируем корневой раздел, создаем на нем все точки монтирования, монтируем туда остальные разделы:
    # mount /dev/sda2 /mnt/gentoo
    # mkdir /mnt/gentoo/home
    # mount /dev/sda3 /mnt/gentoo/home
    ...
  4. Распаковка в примонтированные разделы содержимого stage3 и архива портежей:
    # tar -C /mnt/gentoo -pxjvf /mnt/cdrom/stage3-i686-2009mmdd.tar.bz2
    # tar -C /mnt/gentoo/usr -xjvf /mnt/cdrom/portage-latest.tar.bz2 или
    # tar -C /mnt/gentoo/usr --lzma -xvf /mnt/cdrom/portage-latest.tar.lzma
    
  5. Копирование имеющихся исходников (если они есть):
    # cp -vpr /mnt/cdrom/distfiles /mnt/gentoo/usr/portage
    
    Как альтернативный вариант, монтируем имеющиеся distfiles:
    # mount -o bind,ro /mnt/cdrom/distfiles /mnt/gentoo/usr/portage/distfiles
    
  6. Монтирование proc, привязка dev:
    # mount -t proc none /mnt/gentoo/proc
    # mount -o bind /dev /mnt/gentoo/dev
    
  7. Переходим в новую систему:
    # chroot /mnt/gentoo /bin/bash
    
  8. Обновляем переменные окружения:
    # env-update && source /etc/profile
    
  9. Установим приглашение, отличное от других консолей (для невнимательных ;)
    # export PS1="(chroot) $PS1"
    
  10. Назначаем пароль руту (для забывчивых ;)
    # passwd root
    
  11. Устанавливаем часовой пояс:
    # cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
    
    В файле /etc/conf.d/clock:
    TIMEZONE="Europe/Moscow"
    CLOCK="local"
    
  12. Имя машины. В файле /etc/conf.d/hostname редактируем HOSTNAME. Пусть это будет "lin".
  13. Имя домена.
    # echo 'dns_domain_lo="domain.ru"' >> /etc/conf.d/net
    
    В файле /etc/hosts между 127.0.0.1 и localhost вписываем lin.home.lan lin localhost.localdomain
  14. Редактируем файл /etc/make.conf:
    CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer"
    CXXFLAGS="${CFLAGS}"
    CHOST="i686-pc-linux-gnu"
    MAKEOPTS="-j3"
    #ACCEPT_KEYWORDS="~x86"
    
    DISTDIR=/home/ftp/distfiles
    PORTDIR_OVERLAY=/usr/local/portage
    GENTOO_MIRRORS="http://mirror.yandex.ru/gentoo-distfiles"
    
    USE="X acpi apm alsa bash-completion cairo dell directfb dbus djvu \
    hal htmlhandbook -ipv6 fbcon jpeg lzma mmx -mysql nsplugin kde opengl \
    png postgres spell sse svg truetype vim-syntax lzma qt4 webkit"
    USE="${USE} lame flac wma jpeg2k aac mp3 ffmpeg fam win32codecs pdf"
    
    VIDEO_CARDS="nvidia" # intel
    ALSA_CARDS="intel8x0 intel8x0m" # hda-intel
    LINGUAS="ru en" # ru_RU en_US
    
    PORTAGE_FETCH_RESUME_MIN_SIZE=150K
    
  15. Устанавливаем, конфигурируем и собираем исходники ядра:
    # emerge gentoo-sources
    # cd /usr/src/linux
    # make menuconfig
    # make && make modules_install
    # cp arch/i386/boot/bzImage /boot/gentorvalds-2.6.99-r66
    
    Альтернатива: читаем в handbook про genkernel.
    # emerge genkernel
    # genkernel all --no-splash --menuconfig
    
  16. Устанавливаем загрузчик GRUB:
    # emerge grub
    # grub
    grub> root (hd0,1)
    grub> setup (hd0)
    grub> quit
    
    Или вот так:
    # grep -v rootfs /proc/mounts > /etc/mtab
    # grub-install /dev/sda
    
  17. Настраиваем grub, редактируя /boot/grub/menu.lst
    timeout=3
    title=Gentoo linux
    root(hd0,1)
    kernel /boot/gentorvalds-2.6.99-r66 root=/dev/sda2
    
  18. Правим файл с точками монтирования /etc/fstab
    /dev/sda2   /           ext3     relatime     1 2
    /dev/sda1   none        swap     sw           0 0
    /dev/sda5   /home       ext3     relatime     0 2
    #/dev/sda6  /home/ftp/  ntfs-3g  locale=ru_RU.UTF-8,user,uid=1000,gid=100,umask=0002,fmask=0113  0 0
    /dev/cdrom  /mnt/cdrom  udf,iso9660  iocharset=utf8,user,users,noauto,ro 0 0
    
  19. Отмонтируем все ранее примонтированное, перезагрузка
    # exit && cd
    # umount /mnt/gentoo/{dev,proc,}
    # reboot
    

Локализация и/или русификация

  1. Создаем дополнительные локали
    # cat /usr/share/i18n/SUPPORTED | grep -E 'ru_RU|en_US' >> /etc/locale.gen && locale-gen
    
  2. В файле /etc/conf.d/consolefont меняем шрифт "default_8x16" на "Cyr_a8x16" (Шрифт без буквы ё! Хорошей альтернативой будет media-fonts/terminus-font).
  3. Создаем файл /etc/env.d/02locale, содержащий две строки:
    # echo -e 'LANG="ru_RU.UTF-8"\nLC_ALL=""' >> /etc/env.d/02locale
    
  4. В файле /etc/conf.d/keymaps меняем раскладку "en" на "ru4", а параметру DUMPKEYS_CHARSET устанавливаем значение "koi8-r".
  5. Обновляем окружение, перезагружаем службы
    # env-update && source /etc/profile
    # /etc/init.d/consolefont restart
    # /etc/init.d/keymaps restart
    

Базовая настройка

  1. Настраиваем сетевую карту (мы ведь не забыли про нее на этапе конфигурирования ядра? ;)
    Создаем интерфейс eth0 (если это необходимо):
    # cd /etc/init.d
    # ln -s net.lo net.eth0
    
    Создаем файл /etc/conf.d/net (примеры можно посмотреть в файле /etc/conf.d/net.example)
    dns_servers_eth0="192.168.2.111 192.168.2.80"
    config_eth0=( "192.168.2.145 netmask 255.255.255.0 brd 192.168.2.255" )
    #config_eth0=( "192.168.43.140 netmask 255.255.254.0 brd 192.168.43.255" )
    routes_eth0=( "default gw 192.168.2.11" )
    
    Добавляем интерфейс в автозапуск, запускаем:
    # rc-update add net.eth0 default
    # /etc/init.d/net.eth0 start
    
  2. Если настроена сеть и есть возможность стянуть с репозитариев свежие сырцы, то неплохо бы обновиться. Для экономии траффика и времени желательно перед этим поставить несколько полезных программ:
    # echo 'app-portage/getdelta ~x86' >> /etc/portage/package.keywords/all.keywords
    # echo 'app-portage/deltup ~x86' >> /etc/portage/package.keywords/all.keywords
    # echo 'dev-util/bdelta ~x86' >> /etc/portage/package.keywords/all.keywords
    # emerge -av eix emerge-delta-webrsync getdelta
    # echo 'FETCHCOMMAND="/usr/bin/getdelta.sh \${URI}"' >> /etc/make.conf
    
    Примечание: для поддержки EAPI-2 требуется пропатчить getdelta в соответствии с Bug #239439.
    Если в локальной сети доступны зеркала distfiles, целесообразно прописать их в файле /etc/deltup/getdelta.rc, перечислив в переменной LOCAL_MIRROR.
    Желательно заранее определиться, нужен ли нам кэш компилятора и распределенная компиляция (см. handbook). Подумайте, а надо ли вам это?..
    # emerge -av ccache
    # ccache -M 4G
    
    В make.conf прописать:
    FEATURES="ccache"
    CCACHE_DIR="/var/tmp/ccache"
    CCACHE_SIZE="4G"
    
    Если очень хочется, можно учинить перестройку:
    # cd /usr/portage; scripts/bootstrap.sh
    
    Этот скрипт пересоберет binutils, gcc, gettext и glibc, а после сборки glibc пересоберет binutils, gcc и gettext.

    Обновляемся:
    # emerge -av eix
    # eix-sync -W
    # emerge -uavDN world
    
  3. Создаем пользователя:
    # useradd -m -G users,wheel,audio,video,cdrom,cdrw,usb -s /bin/bash user
    # passwd user
  4. Устанавливаем основные программы:
    # emerge -av joe gentoolkit portage-utils euses ntfs3g autounmask vim
    # emerge -av slocate lsof pciutils iptables acpid sudo vixie-cron syslog-ng tcpdump
    # emerge -av screen htop mc links
    
  5. Разрешаем беспарольное использование sudo пользователям, входящим в группу wheel. Не секурно, зато на домашней машине удобно ;)
    В /etc/sudoers раскомментируем строку
    "%wheel  ALL=(ALL)   NOPASSWD: ALL"
    
  6. Добавляем в автозапуск и запускаем всякое:
    # rc-update add syslog-ng default
    # rc-update add acpid default
    # rc-update add sshd default
    # rc-update add vixie-cron default
    # rc-update add gpm default
    # rc
    

Дальнейшая настройка

Приложение

Полезные скрипты

Основные утилиты для управления пакетами

Конфигурация ядра

Мой .config традиционно путешествует от ядра к ядру. В целом, ничего особенно сложного в этом нет, если пользоваться lspci (pciutils), lsusb (usbutils) и подобными утилитами.
Для ноутбука более существенно умеренное энергопотребление и функции Suspend-to-disk.
Ставим sys-kernel/tuxonice-sources (TuxOnIce), sys-power/acpid (Power Management Guide), изучаем sys-power/powertop (PowerTOP FAQ) и наслаждаемся ;)




За основу взято руководство на linuxportal.vrn.ru и, конечно, handbook. Некоторые нюансы можно подсмотреть тут.
Море информации содержится в сборнике статей о Gentoo Linux.
Некоторые полезные вещи, которые не вошли в эту памятку, я опубликовал в блоге gvardovich.blogspot.com.
Не использован скрипт подсветки синтаксиса highlight.js ;)
Замечания и пожелания слать на gvardopo4ta@gmail.com.