Часть 2. Хоть что-то загружаемое x32.
Хороший эпиграф:
Tue, 18 May 2010 09:13:18 +0400
xxx: Главное правило линуксоида
xxx: Если есть два способа, простой и сложный, то выбирай сложный,
так как он проще простого способа, который тоже сложный, но ещё и
кривой
http://bash.org.ru/quote/406702
Исторически сложилось так, что установку я делаю до этапа "это что-то, трудно называемое системой, умеет самостоятельно загружаться".
Что у меня есть на дружественном фтп (
ftp://gentoo:gentoo@195.122.249.2 или, для внутренней сети СТРИМ,
ftp://gentoo:gentoo@10.83.22.145 , искать каталог Done32) или флешке для установки системы на голый винт:
config-2.6.33-gentoo-r2 (типовой конфиг ядра)
fstab (список точек монтирования)
grub.conf (конфиг загрузчика)
locale.gen (список поддерживаемых локалей)
make.conf (основной конфиг)
net (конфигурация сети)
package.keywords (файлы флагов)
package.mask
package.unmask
package.use
resolv.conf (указатель ДНС)
stage3-i686-20100504.tar.bz2 (стейдж)
Ну и, естественно, доступ к зеркалу portage и файлам исходников.
Заранее говорю, что листинга всех файлов не даю, слишком много места это займет. Да и для вырезать-вставить они плохо пригодятся (в unix немного другой байткод конца строки). Для тех, кому интересно - пусть посмотрят сами да спросят.
Итак, поехали грузиться с SysRescCD в самом обычном варианте х32 (первый пункт в текущем релизе).
Напомню, что переключение между консолями - Alt-Fx (x == 1…12), а вызов клона Norton Commander - команда mc (в нем есть FTP-клиент). И не забыть после каждой правки конфигов отбивать в конце пустую строку. Монтирование флешки произойдет, например, после команд mount -t vfat /dev/sdb1 /mnt/windows .
Проверка диска и загрузка в будущую систему:
Для начала проверю разбивку диска, все ли у меня правильно:
Код:
Устр-во Загр Начало Конец Блоки Id Система
/dev/sda1 * 1 1246 10008463+ 83 Linux
/dev/sda2 1247 1371 1004062+ 82 Linux своп / Solaris
Следующим шагом отформатируемся и примонтируемся (отмечу, у меня винчестер IDE, но команды как SATA):
mkreiserfs /dev/sda1
mkswap /dev/sda2
mount -t reiserfs /dev/sda1 /mnt/gentoo
swapon /dev/sda2
После этого самое время проверить текущую дату и поправить, если нужно:
date
Во вспомогательной консоли копирую файл стейджа (stage3) в /mnt/gentoo, а в основной консоли распаковываем систему:
cd /mnt/gentoo
tar xvjpf stage3*
В вспомогательной консоли копирую файлы etc/make.conf, /etc/resolv.conf
Во флагах компиляции поможет разобраться
http://en.gentoo-wiki.com/wiki/Safe_Cflags, а чуть позже, после обновления компилятора, переключусь на CFLAGS="-march=native"
USE-флаги сделал именно такими, ибо есть предположение, что буду эту машину использовать как собственный десктоп. Если подходить к задаче более строго, половину их нужно "заминусовать" (полное описание каждого флага содержится в /usr/portage/profiles/use.desc)
В resolv.conf стоит адрес ближайшего DNS-сервера.
Загрузка в будущую систему:
В основной консоли:
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"
Так как планируется что-то ставить, сразу задам правила размаскировки пакетов:
В основной консоли
cd /etc/ && mkdir -p portage
во вспомогательной копирование portage.* в /mnt/gentoo/etc/portage/* (набор из package.keywords, package.mask, package.unmask, package.use)
Синхронизация основного дерева:
В основной консоли
emerge --sync
Заодно, в вспомогательной консоли добавлю в будущую систему /etc/locale.gen
Установка ядра:
В основной консоли:
emerge gentoo-sources klibc v86d
cd /usr/src/linux
make menuconfig
А во вспомогательной подкладываю заготовленный конфиг (искать в Done32/boot/) в /mnt/gentoo/usr/src/linux
В оболочке конфигурации подгружаю конфиг и очень внимательно изучаю вывод команды lspci во вспомогательной консоли (как правило, мне нужно только подправить процессор, шины, контроллер HDD, сетевые карты)
После этого сохраняем конфиг в оболочке конфигурирования, в вспомогательной консоли проверяем, чтобы свежесгенерированный конфиг имел имя файла .config и в основной консоли запускаем сборку:
make && make modules && make modules_install && make install
Пока идет компиляция, во вспомогательной консоли подкладываю из соседней консоли /etc/fstab
Там же подредактирую сетевые настройки: /etc/conf.d/net
Доводки и загрузчик:
По окончании процесса компиляции в основной консоли добавлю сетевой интерфейс в автозагрузку:
rc-update add net.eth0 default
Одно из самых главных - задание пароля рута (там же, в основной консоли)
passwd
Настраиваем загрузчик:
emerge grub && grep -v rootfs /proc/mounts > /etc/mtab
Подкладываю и редактирую grub.conf и устанавливаю загрузчик в MBR:
grub-install /dev/sda
После этого - все, пробую перезагрузиться.
exit
umount /mnt/gentoo/proc
umount /mnt/gentoo/dev
umount /mnt/gentoo
reboot
Первое, что делаю после загрузки в установленную систему, это устанавливаю Midnight Commander:
emerge mc
Потенциальные проблемы:
О ядре: о конфигурации ядра всех подробней, как мне кажется, рассказано в документе "Ядерная физика для домохазяек 2.0"; я уже вряд ли буду мейнтейнером ядра, поэтому не претендую на вылизанность, это мой типовой конфиг для максимально общих задач.
О загрузчике: при первой команде grub-install система задумалась, судя по логам - искала отсутствующий дисковод, поэтому пришлось руками убить строчку про fd0 в файле /boot/grub/device.map. Так как я сразу хочу framebuffer (и в конфиге ядра есть ответная часть), параметры экрана в конфиге подправить по вкусу.
О файлах /etc/portage/*: это мой личный набор флагов, который не претендует на истину, так сложилось, что именно на этом наборе у меня все хорошо работает.
О мультизагрузке: в случае, если на жестком диске присутствует еще и Windows (linux на первом разделе, windows на втором), конфигурациооный файл загрузчика принимает вид что-то типа
Код:
default 0
timeout 4
splashimage=(hd0,0)/boot/grub/splash.xpm.gz
title=Gentoo 2.6.31.6
root(hd0,0)
kernel /boot/vmlinuz-2.6.31-gentoo-r6 root=/dev/sda1 video=uvesafb:1680x1050-16,mtrr:3,ywrap
title=WindowsXPwork
rootnoverify (hd0,1)
makeactive
chainloader +1
а метку файловой системы второго раздела через команду fdisk, t поменять на идентификатор 7 (в случае NTFS).