Openbox. Открывай свою коробку!

Итак, сейчас на ноуте имеется рабочая система с настроенным X-сервером. Самое время определиться с выбором оконного менеджера или окружения рабочего стола. Какой у нас выбор? Ну, конечно, не KDE и не GNOME - для 3 гигов жёсткого диска это просто монстры. XFCE? Вохможно. Хотя там тоже хватает предустановленных программ. Лучше попробуем начать с читого Window Manager-a. Глаза просто разбегаются, но надо остановиться на чём-то одном. Допустим, openbox. Сразу оговорюсь, что найти "свой" WM не так то просто. Нужно перепробовать кучу всего экзотичного и непонятного. Но нам пока сойдёт простая "рисовалка" окон. Без каких-либо революционных концепций.
emerge -av openbox

Теперь вспомним, что мы обычно видим при входе в систему? Правильно, запрос имени и пароля. Причём, довольно красивый запрос. Для этого служат *dm, как то xdm(базовая и не очень красивая), kdm(относится к KDE), gdm(относится к GNOME). В хэндбуке также описан SLiM. Вот его и поставим.
emerge -av slim

Теперь нужно всё настроить так, чтобы slim включался автоматически после загрузки, а потом запускал openbox.

Crax, pax, fax!

Теперь долго и нудно придётся настраивать X-сервер. Для начала, попробуем просто запустить его (большая буква Икс):
X
Или
startx
Как и следовало ожидать, ничего не получилось. Вылетела ошибка:
(EE) S3VIRGE(0): Internal error: invalid bpp (32) in S3VScreenInit

А ещё написано, что у нас нет конфига, поэтому грузится дефолтный. Надо создать. А чтобы не писать с нуля, скопируем образец и будем его изменять:
cp /etc/X11/xorg.conf.example /etc/X11/xorg.conf
Далее, как и в случае с GRUB, настройке можно посвятить отдельную книгу. Позже вставлю сюда, что получилось в итоге. Сейчас неудобно доставать.

йаУзелок

Добрые люди подсказали, что "No space left on device" означает ещё и то, что кончились т.н. айНоды (iNodes). В них хранится какая-то системная информация файловой системы. К сожалению, это можно исправить только пересозданием файловой системы. Чем и придётся заняться. Копируем всю файловую систему на внешний диск. Причём с сохранением всех прав на файлы и без символьных ссылок (например /usr/portage/distfiles и /var/tmp) и /mnt/exthdd, которые сами ссылаются на внешний диск. Поищем нужные опции программы cp:
man cp
Нам нужны:

-p Сохраняет исходные параметры файла, такие как владелец, группа, права доступа (включая suid и sgid биты), время последней модификации и время последнего доступа к файлу. В случае, если установка владельца или группы приводит к ошибке, suid и sgid биты сбрасываются. (Заметим, что впоследствии исходный файл и его копия могут иметь разное время последнего доступа, так как операция копирования является доступом к исходному файлу).

-R Копировать каталоги рекурсивно; правильно обрабатывать ситуации, когда попадаются объекты, не являющиеся обычными файлами или каталогами. (Так, копией FIFO или специального файла будет также являться FIFO или специальный файл).

-P Не разименовывает никакие символьные ссылки, ни заданные в списке параметров, ни встретившиеся во время рекурсивного копирования. Просто копирует их как символьные ссылки.

-v Чтоб всё-всё видеть))

Очевидно также, что не нужно копировать /proc и /dev.

Поэтому попробуем так:

cp /{bin,boot,etc,home,lib,opt,root,sbin,sys,usr,var} -RPpv /mnt/exthdd/rover

Я так понимаю, /dev, /proc, /tmp создадутся автоматически. Пишем:

df -i

Сейчас на корневом разделе 198400 айнодов. С таким числом заполняется 56% диска. Значит придётся увеличить их число раза в 2 при создании новой файловой системы. Хотя, почему обязательно Ext3? Попробую-ка создать ReiserFS. В ней, говорят айНоды динамически создаются. И ориентация на кучу мелких файлов не помешает - дерево портежей ведь и есть большая куча мелких файлов.

Загружаемся с Minimal Live CD, монтируем внешний диск, создаём новую ReiserFS на жёстком диске и подключаем его.

mkdir /mnt/exthdd
mount /dev/sda1 /mnt/exthdd
mkreiserfs /dev/hda1
mount /dev/hda1 /mnt/gentoo
cd /mnt/exthdd/rover
cp * -RPpv /mnt/gentoo

Попробуем загрузиться. А поддержку-то в ядре выключили! Рэйзер не заработает((
Снова грузимся с CD и делаем:
mount /dev/hda1 /mnt/gentoo
mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev
chroot /mnt/gentoo /bin/bash
mount /dev/sda1 /mnt/exthdd
env-update
source /etc/profile

Теперь делаем дело. Точнее все дела:
grub //Заново установим GRUB
emerge reiserfsprogs
cd /usr/src/linux
make menuconfig
make clean && make && make modules_install
mv /boot/linux-2.6.25-gentoo-r7 /boot/linux-2.6.25-gentoo-r7.old
cp ./arch/x86/boot/bzImage /boot/linux-2.6.25-gentoo-r7

Ядро чистилось/собиралось/ставилось ровно 1 час.
Ну что, ребут?
reboot

Так вот. До конца опять не загрузилась. Хоть файловую систему теперь видит. Надо создать в папке /dev пару ссылок на устройства, без которых консоь не запустится:

mknod -m 660 console c 5 1
mknod -m 660 null c 1 3

Так должно получиться. Блин, говорит, что фаловая система не ext2! Ясен пень! А он её e2fsck-ом проверяет! Меняем fstab...

"Ура! Заработало!" (с) Кот Матроскин

Кстати, теперь занято не 56%, а всего 40%. Ине определённо нравится эта файловая система! Пытаемся снова установить Иксы. Осталось всего 40 пакетов.

Ну всё, спокойной ночи.





GUI = Graphical && User && Interface

Запустил. Правда при загрузке сказала, что корневой раздел нигде не прописан и монтировать она его не будет. Однако всё не так плохо - файловая система работает вполне нормально. Только имя хоста не распозналось. Ну вот, теперь поставлю Иксы (X.Org - по-научному). Перед этим в файл /etc/make.conf надо вписать необходимые опции:
INPUT_DEVICES="mouse keyboard"
VIDEO_CARDS="s3virge"
А теперь пора:
emerge -av xorg-x11 && date
Всё, я пошёл спать, утром узнаю, во сколько закончилась компиляция (сейчас 00:10 22.09.2008)
UPD: Так, установка сказала, что кончилось место. Посмотрел df, а там нету /dev/hda1 :-( Проверил fstab, выяснил, что забыл там поставить слэш в строке для /dev/hda1. Исправил, перезегрузил, ставлю снова.
UPD2: Всё рано не хватвает места. Перенёс /var/tmp на внешний жёсткий. Пусть всё компилится там, а на ноут копируются только готовые бинарники.

Тогда и только тогда, когда...

Теперь создадим список файловых систем, которые будут монтироваться автоматически:
nano /etc/fstab
Вписываем туда одну строку для единственного раздела:
/dev/hda1 ext2 noatime 0 1

Изменим сетевое имя компа на что-то отличное от localhost. Оно, кстати отображается в консольном приглашении после имени пользователя и @:
nano /etc/conf.d/hostname

Финальная прямая к запуску системы. Устанавливаем пароль суперпользователя:
passwd
После этого я на всякий случай добавил EXTENDED_KEYMAPS="ru" в /etc/conf.d/keymaps

При необходимости редактируем /etc/conf.d/clock

Устанавливаем необходимые системные утилиты.
  1. Служба логгирования будет записывать всё, что происходит в системе.
    emerge syslog-ng
    Добаляем её в автозапуск:
    rc-update add syslog-ng default
    Я его не установил. Компиляция запарывалась на gtype.c
  2. Системный планировщик (демон синхронизации)
    emerge vixie-cron
    Добаляем её в автозапуск:
    rc-update add vixie-cron default
На настройке фреймбуфера останавливаться не будем. Оставим это на десерт. Перейдём к настройке загрузчика. Думаю выбор в пользу GRUB очевиден. Ставим его:
emerge grub
Заходим в настройку загрузчика:
nano /boot/grub/grub.conf
Настройка загрузчика заслуживает отдельного обсуждения, поэтому я приведу то, что получилось у меня:

Ядра - чистый изумруд!

Почему Linux называется Linux? Потому что он основан на ядре, которое начал разрабатывать Линус Торвальдс. Ядро - основа всей системы. Оно контролирует работу устройств, служб и систем компьютера. Вот им мы сейчас и займёмся. Установим пакет с исходниками ядра:
emerge -av gentoo-sources
Опция v нужна для того, чтобы при установки выводился максимум информации, опция a - для того, чтобы перед установкой можно было посмотреть на то, что ты собираещься установить, и в случае чего отменить установку.
Исходники лежат в папке /usr/src. В любой момент на действующее ядро должна указывать ссылка /usr/src/linux. Идём в эту папку и начинаем настраивать ядро:
cd /usr/src/linux
make menuconfig
Это очень ответственный этап. Если мы не включим что-то нужное, система будет работать криво. А если включим всё, получится монстр, которому понадобится десятипроцессорный кластер для работы.
Processor type and features -> Processor Family -> PentiumII/Celeron(pre-Coopermine)
X File Systems -> Reiser FS
Bus Options -> PCCard support -> ***
(M) Sound -> ALSA -> PCI Devices -> ESS ES1938/1946/1969 (Solo-1)
(X) Sound -> OSS

Вроде, всё. Теперь собираем ядро и устанавливаем модули (например, для звука):
make && make modules_install
Копируем полученное ядро туда, откуда оно будет запускаться при старте системы:
cp ./arch/x86/boot/bzImage /boot/linux-2.6.25-gentoo-r7

"Дом хороший, даже печка есть..."

Пришло время создать файловую систему. Всё делаю по handbook с сайта Gentoo.org.

fdisk /dev/hda1
Смотрю существующую таблицу:p
Удаяю все разделы:d
Создаю свой раздел:n
p //Раздел первичный
1 //Номер раздела
//Начинается с перого цилиндра жёсткого диска
//Заканчивается последним цилиндром
Проверяю, что получилось: p
Сохраняю таблицу разделов:w

Теперь создаём на нашем единственном разделе файловую систему:
mke2fs /dev/hda1

Отсутствие сети заставляет перенести необходимые файлы на внешнем жёстком диске. Ну нет у меня большой флэшки! А потребуются два файла:
  • Stage3-*.tar.bz2 - готовая версия файловой системы, которую нужно просто залить на пустой раздел, чтобы сделать из него раздел с Gentoo
  • Portage-*.tar.bz2 - дерево "портежей" - информация обо всём доступном для установки программном обеспечении
Итак, создаём папку, куда подмонтируем диск:
mkdir /mnt/exthdd
И монтируем его (разумеется, подключив кабель к ноуту):
mount /dev/sda1 /mnt/exthdd
Теперь берём файлы:
cp /mnt/exthdd/stage3*.tar.bz2 /mnt/gentoo
cp /mnt/exthdd/portage*.tar.bz2 /mnt/gentoo
И распаковываем их:
tar xvjpf /mnt/gentoo/stage3*.tar.bz2
tar xvjf /mnt/gentoo/stage3*.tar.bz2 -C /mnt/gentoo/usr

Теперь настало время войти в свежеприготовленную систему. Но сначала нужно подключить к ней некоторые части нашей "живой" системы:
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"

Всё! Мы дома! Пора его обустроить.