26 Авг

Про ядра

Не понимаю, за счет чего такая динамика в объеме?

847M ./linux-2.6.35-gentoo-r5
828M ./linux-2.6.36-gentoo
788M ./linux-2.6.36-gentoo-r1
454M ./linux-2.6.36-gentoo-r3
842M ./linux-2.6.36-gentoo-r5
850M ./linux-2.6.36-gentoo-r6
473M ./linux-2.6.37-gentoo
473M ./linux-2.6.37-gentoo-r1
483M ./linux-2.6.38-gentoo-r1
483M ./linux-2.6.38-gentoo-r4
483M ./linux-2.6.38-gentoo-r5
493M ./linux-2.6.39-gentoo
493M ./linux-2.6.39-gentoo-r1
863M ./linux-3.0.1-gentoo
494M ./linux-3.0.3-gentoo
494M ./linux-3.0-gentoo

09 Фев

Бездисковые станции и Gentoo

Начну с небольшой предыстории.
Лежал у меня на столе старенький HP Proliant Netserver LP 1000r, купленный когда-то за несколько тысяч с молотка. К сожалению, его владелец перед отправкой снял с него CD-привод и отправил со спокойной совестью. В сервере 3 scsi-винта, на одном из которых этот гений не постеснялся поставить пиратскую Windows XP Home Edition. Само собой, ставить я туда собрался Gentoo. Вопрос — как? CD-привода нет. Есть usb-порты, но по неведомой причине ни флешку, ни usb-cd-привод сервер в них не видит, а в bios’е ничего на этот счет нет. Снимать винты и ставить на другом компе систему — не вариант. Все сервера заняты, а покупать отдельный scsi-контроллер, стоящий в 5 раз дороже пролианта — бессмысленно. Остается последний вариант — загружаться в любую линуху по pxe, а там уже без проблем качать и ставить gentoo. Тем более, что на моем компе как раз гента и стоит. Вобщем, будем пробовать PXE. Соорудим из нашей генты настойщий MainFrame! :)

Надо быть уверенным, что ваш компьютиер/сервер имеет возможность вообще загружаться по сети. Это можно проверить в bios’е и выставить приоритет загрузки по Lan.
Весь процесс настроек можно описать в несколько простых шагов:
0. Создание всех директорий и файлов.
1. Настройка DHCP
2. Настройка TFTP
3. Создание pxe-загрузчика
4. Установка системы для pxe-загрузуи в chroot.
5. Конфигурирование pxe-ядра

Вобщем-то, все довольно просто и понятно. Справится даже новичок.

0. Создание всех директорий и файлов.
Создадим в корне системы директорию /netboot, в которой будем строить дерево нашей новой системы, которая будет грузиться на клиентской машинке. В ней создаем директорию /netboot/boot, в которой будет позже ядро, загрузчик и прочие данные для загрузки системы.

1. Настройка DHCP
Это обязательно. Если вы выставили в bios’е загрузку по Lan, компьютер практически сразу после опроса всего железа отправит широковещательный запрос с вопросом «Ау!!?? Кто я такой!!?? Кто здесь!!??». На что наш dhcp-сервер должен, согласно своим настройкам, выдать это пока бомжу ip-адреса интерфейса, маску, шлюз и адрес tftp-сервера. Даю примерный конфиг:

ddns-update-style none;

host netboot {
        hardware ethernet 00:30:6e:11:13:57;
        fixed-address 10.10.254.28;
        next-server 10.10.254.25;
        option tftp-server-name "10.10.254.25";
        filename "/netboot/boot/pxelinux.0";
}

В последних двух строчках мы указываем путь к конфигу и загрузчику. Об этом подробней немного позже.
10.10.254.25 — это адрес нашей машинки, на которой мы, собственно, все пока и настраиваем.
10.10.254.28 — этот адрес получит наш сервер от dhcp-сервера.
Запускаем dhcp-сервер (/etc/init.d/dhcpd start).

2. Настройка TFTP
После получения всех реквизитов адресации, наша типа бездисковая машинка будет автоматом обращаться на tftp-сервер и выкачивать оттуда загрузчик, который, в свою очередь, расскажет машинке дальнейшие инструкции, где и что и откуда брать и загружать.

В качестве tftp-сервера я установил net-ftp/tftp-hpa. Он очень прост в настройке и работает отлично.
Прописываем в /etc/conf.d/in.tftpd путь к дереву новой системы и нужные нам опции запуска:

INTFTPD_PATH="/netboot"
INTFTPD_OPTS="-l -vvvvvv -s ${INTFTPD_PATH}"

Запускаем tftp-сервер (/etc/init.d/in.tftp start)

3. Создание pxe-загрузчика
Устанавливаем sys-boot/syslinux, который соберет нам pxelinux.0 — это тоже загрузчик, типа lilo или grub, который загружает систему по pxe, только все свои инструкции (где ядро, начальная файловая система и проч.) он получает по tftp.
Копируем наш свежий загрузчик и создаем конфиг для него:

 # cp /usr/share/syslinux/pxelinux.0 /netboot/boot
# mkdir /netboot/boot/pxelinux.cfg
# vim /netboot/boot/pxelinux.cfg/default

В конфиге прописываем путь к ядру и начальной файловой системе:

DEFAULT /bzImage
APPEND ip=dhcp root=/dev/nfs nfsroot=10.10.254.25:/netboot

4. Установка системы для pxe-загрузуи в chroot.
Теперь можно установить в /netboot новую gentoo-систему по вашему вкусу.
Распаковывем stage3-* в /netboot и дальше по хендбуку. Не забываем установить nfs-utils и в /etc/exports прописать разрешения для загрузки по NFS наших данных:

/netboot 10.10.254.28(rw,sync,no_root_squash,no_subtree_check)

При конфигурировании /etc/fstab, пишем следующее:

/dev/cdroms/cdrom0      /mnt/cdrom      iso9660 noauto,ro 0 0
proc                    /proc           proc    defaults 0 0
tmpfs                   /dev/shm        tmpfs   nodev,nosuid,noexec 0 0

5. Конфигурирование pxe-ядра
При конфигурировании ядра необходимо обратить внимание на следующие опции и включить их не модулем, а в ядро:

— Отмечаем поддержку вашей сетевой карточки (на клиенте)
(В ядре, а не модулем!)
— Лезем в «Networking options» :

[*] TCP/IP networking
[*] IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support

— Лезем в «File systems —> Network File Systems» :

<*> NFS file system support
[*] Provide NFSv3 client support
[*] Root file system on NFS

Далее по ману компилим ядро. Теперь необходимо поставить пакет net-misc/mknbi, в котором есть утилита mkelf-linux. Она всего лишь оптимизирует наше готовое ядро для его использования при загрузке по сети. Теперь обрабатываем готовое ядро и копируем его в нашу новую систему:

 # mkelf-linux -ip=dhcp bzImage > /netboot/boot/bzImage


Вобщем-то, на этом все! :)
Теперь можно пробовать включать клиента и грузиться по сети.
Если возникают какие-то проблемы, ставим tcpdump на нашей основной машинке и смотрим логи. А также /var/log/messages.

09 Фев

BootSplash в Gentoo

Распишу прямо пошагам. Сразу скажу, что сегодня утром перед работой я дома все это проделал
специально и все у меня заработало с первого раза без каких-либо проблем. Более того, вот прямо сейчас
пишу эту статью и проделываю то же на своей рабочей машинке ;)

1. В /etc/make.conf прописываем USE-флаг fbcondecor. и ставим следующие пакеты:

 # emerge splashutils splash-themes-gentoo splash-themes-livecd

Советую обратить внимание на пакет splash-themes-livecd, который имеет несколько версий. Мне, например,
актуальная версия ниразу не нравится и я ставлю =splas-themes-livecd-2005.0.
А можно и вообще не ставить этот пакет. Можно просто забуриться на kde-look.org и накачать в соответственном разделе тонны сплешек на любой вкус и с символикой любого дистрибутива в /etc/splash/.

2. Далее нам необходимо проверить несколько важных опций в ядре. Мне всегда проще залезть в /usr/src/linux/.config и проверить или поправить их там. Вот нужные опции:

CONFIG_FB
CONFIG_FB_VESA
CONFIG_FB_CON_DECOR

Последняя опция самая важная в нашем случае, а предыдущие нужны именно для ее работы. И так:

G ~ # cat /usr/src/linux/.config | grep -e "^CONFIG_FB=\|^CONFIG_FB_VESA=\|^CONFIG_FB_CON_DECOR="
CONFIG_FB=y
CONFIG_FB_VESA=y
CONFIG_FB_CON_DECOR=y

3. Так, ядро проверили, темой сплеша определились. Теперь надо скомпилять ядрышко. Если какие-о из этих опций у вас не включены, можно поправить это в конфиге или в menuconfig, в любом случае:

 # genkernel --splash=natural-gentoo --splash-res=1280x800 --menuconfig all

Запомните, выбрать нужную тему вы должны с тем учетом, что она поддерживает ваще разрешение, используемое в framebuffer!
Как менять разрешение вашей консольки, я расписывать не буду (и так полно доков), намекну лишь, что проще поставить hwinfo и им проверить, что поддерживает ваша карточка через

 # hwinfo --framebuffer | grep ваше_разрешение.

4. Пока компилится ядро, лезем в /boot/grub/grub.conf и создаем, на всякий случай, новый «пунктик»:

title Gentoo Linux 2.6.33
root (hd0,0)
kernel /boot/kernel-genkernel-x86-2.6.33-gentoo root=/dev/ram0 real_root=/dev/sda2 vga=0x0362 splash=silent,theme:natural-gentoo console=tty1 quiet
initrd /boot/initramfs-genkernel-x86-2.6.33-gentoo

Обратите внимание! Здесь «splash=silent,theme:natural-gentoo console=tty1 quiet» — это параметр ядру и пишется на той же строчке с указанием ядра, а не на отдельной строке!

5. Добавляем fbcondecor в автозагрузку:

 # rc-update add fbcondecor default

6. Ребутимся и проверяем!


Кстати, полюбому, будете экспериментировать и ставить разные splash-темы. Чтобы, как некоторые дарования, не перекомпилять постоянно ядро, скажу вам, что достаточно пересобрать только initrd:

 # genkernel --no-clean --no-mrproper --splash=emerge-world --splash-res=1280x800 ramdisk

Вот как оно выглядит у меня дома:

Это картинка во время загрзки без «прогрессбара»

А так у меня в итоге выглядит консолька: