2009-09-28
Требуется с минимальными затратами времени и траффика поставить Gentoo Linux на x86-совместимую машину.
Предполагается, что будет использоваться в основном стабильная ветвь архитектуры x86, пакеты из тестовой ветви при необходимости размаскируются в файлах директории /etc/portage/package.keywords/.
Поскольку разработчики Gentoo в конце 2008 года перешли на еженедельный выпуск стадий, имеет смысл разворачивать систему из наиболее свежей стадии.
Как показала практика, Gentoo без труда ставится на машинах класса Pentium 3 (Celeron Coppermine) с объемом оперативной памяти 256 Mb и без сети, так что требования к ПК можно опустить ;)
Памятка рассчитана на пользователя, который знаком с POSIX-системами и Linux в частности, а также читал Gentoo handbook ;)
$ 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).
# cfdisk /dev/sda
sda1 - primary - swap - 800 Mb (swap)
sda2 - primary - ext3 - 20 Gb (/)
sda3 - primary - reiserfs - 80 Gb (/home)
...
# mkswap /dev/sda1
# swapon /dev/sda1
# mkfs.ext3 /dev/sda2
# mkreiserfs /dev/sda3
...
# mount /dev/sda2 /mnt/gentoo
# mkdir /mnt/gentoo/home
# mount /dev/sda3 /mnt/gentoo/home
...
# 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
# cp -vpr /mnt/cdrom/distfiles /mnt/gentoo/usr/portage
Как альтернативный вариант, монтируем имеющиеся distfiles:
# mount -o bind,ro /mnt/cdrom/distfiles /mnt/gentoo/usr/portage/distfiles
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev
# chroot /mnt/gentoo /bin/bash
# env-update && source /etc/profile
# export PS1="(chroot) $PS1"
# passwd root
# cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
В файле /etc/conf.d/clock:
TIMEZONE="Europe/Moscow"
CLOCK="local"
# echo 'dns_domain_lo="domain.ru"' >> /etc/conf.d/net
В файле /etc/hosts между 127.0.0.1 и localhost вписываем lin.home.lan lin localhost.localdomainCFLAGS="-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
# 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
# emerge grub
# grub
grub> root (hd0,1)
grub> setup (hd0)
grub> quit
Или вот так:
# grep -v rootfs /proc/mounts > /etc/mtab
# grub-install /dev/sda
timeout=3
title=Gentoo linux
root(hd0,1)
kernel /boot/gentorvalds-2.6.99-r66 root=/dev/sda2
/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
# exit && cd
# umount /mnt/gentoo/{dev,proc,}
# reboot
# cat /usr/share/i18n/SUPPORTED | grep -E 'ru_RU|en_US' >> /etc/locale.gen && locale-gen
# echo -e 'LANG="ru_RU.UTF-8"\nLC_ALL=""' >> /etc/env.d/02locale
# env-update && source /etc/profile
# /etc/init.d/consolefont restart
# /etc/init.d/keymaps restart
# 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
# 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.# 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
# useradd -m -G users,wheel,audio,video,cdrom,cdrw,usb -s /bin/bash user
# passwd user
# 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
"%wheel ALL=(ALL) NOPASSWD: ALL"
# 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
# emerge -av hal pmount
# rc-update add dbus default
# rc-update add hald default
# gpasswd -a user plugdev
# USE=-perl emerge -av dev-util/git
# USE="git subversion" emerge -av layman
# layman -S
# layman -a sunrise
echo "source /usr/local/portage/layman/make.conf" >> /etc/make.conf
С доступом через прокси могут возникнуть проблемы. Для их решения в svn можно поменять порт или протокол, добавив оверлей ручками (см. подробнее FAQ). Проще всего с Rsync и Mercurial (см. gvardovich.blogspot.com.)emerge -pf kde-meta 2>&1 | awk '/tp:/ { print $1 }' | \
while read f; do [ ! -s /usr/portage/distfiles/${f##*/} ] && \
echo $f; done | sort -u > need_files.txt
mv `eclean -pqC distfiles` /home/ftp/distfiles_old/
echo "FORCE_USECOLORS=true" >> /etc/eixrc
Мой .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.