Table of Contents
Базовый вариант Slitaz
Строим дистрибутив SliTaz, работающий в RAM, на основе Busybox.
Введение
Этот документ описывает создание базового варианта SliTaz, а также причины, по которым мы используем ядро Linux, BusyBox и Syslinux для загрузки системы. SliTaz использует архив initramfs, который распаковывается ядром в RAM при загрузке. Мы создадим архив с файлами от 3 до 4 Мб и используем утилиту strip, чтобы уменьшить размер библиотек и исполняемых файлов.
Скрипты и конфигурационные файлы были созданы в редакторе GNU nano (Ctrl-X для сохранения и выхода), но, безусловно, вы вправе использовать любой другой текстовый редактор.
Данный документ основывается на инструкции, найденной в архиве BusyBox, которая, в свою очередь, базируется на докладе Эрика Андерсона на Конференции по встроенным системам (Embedded Systems Conference) в 2001 г.
Скачиваем исходники через wget
Создаем папку src для скачивания и компиляции файлов:
# mkdir -p src # cd src
Скачиваем необходимые файлы:
- Ядро Linux 2.6.20 (www.kernel.org).
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2
- Busybox 1.2.2 (www.busybox.net).
# wget http://www.busybox.net/downloads/busybox-1.2.2.tar.bz2
- Syslinux 3.35 (syslinux.zytor.com).
# wget ftp://ftp.kernel.org/pub/linux/boot/syslinux/syslinux-3.35.tar.gz
- SliTaz tools 1.1 (распаковываем после скачивания):
# wget http://download.tuxfamily.org/slitaz/sources/tools/slitaz-tools-1.1.tar.gz # tar xzf slitaz-tools-1.1.tar.gz
Распаковываем и подготавливаем ядро Linux
Начнем с компиляции ядра Linux, что займет некоторое время.
Ядро Linux
Ваше ядро должно поддерживать файловую систему initramfs, иначе CD-ROM не сможет загрузиться. Также вы можете устанавливать модули в отдельную папку, чтобы не затрагивать основную систему. Сконфигурировать исходники ядра можно командой make menuconfig
, используя ncurses, или графическими утилитами, выполнив команды make gconfig
или make xconfig
(на основе пакетов разработки GTK и/или QT соответственно). В SliTaz tools вы можете найти образцы Makefile для различных ядер серии 2.6.xx.
Характерной чертой ядер 2.6 является то, что, если мы запускаем menuconfig, xconfig или config в первый раз, меню настроек будет основываться на конфигурации нашего текущего ядра.
Опции настроек зависят от ваших нужд, также вы можете установить module-init-tools для поддержки сжатых модулей или, создавая минимальную систему, выберите только самые необходимые опции.
Начнем с изменения исходников — команда make mrproper
упорядочит их, а затем запустим интерфейс конфигурации — gconfig, xconfig, menuconfig или oldconfig:
# tar xjf linux-2.6.20.tar.bz2 # cd linux-2.6.20 # make mrproper # cp ../slitaz-tools-1.1/Makefiles/linux-2.6.20-slitaz.config .config # make oldconfig (# make menuconfig) # make bzImage # make modules # make INSTALL_MOD_PATH=$PWD/_pkg modules_install # cd ..
Если вам нужна более подробная информация по компиляции ядра, существует много книг на эту тему. Кстати, вы можете установить ядро, а после перезагрузки компилировать собственное ядро, следуя тем же инструкциям.
Создаем корневую файловую систему (rootfs)
Следующим этапом создадим папку с названием rootfs (корневая файловая система, Root File System) в нашей рабочей папке SliTaz/:
# mkdir ../rootfs
Устанавливаем BusyBox
BusyBox (www.busybox.net) — это один исполняемый файл, содержащий версии основных утилит, необходимых для использования ядра Linux. Его основное назначение — встраиваться в системы и выполнять почти все задачи. Помимо того, что BusyBox предлагает команды оболочки (coreutils) и систему демонов, он также содержит веб-сервер и клиент-сервер (DHCP, udhcpc).
# tar -xjf busybox-1.2.2.tar.bz2
Cконфигурируем и настроим, запомнив опции dumpkmap, init и др. — подробности вы найдете в файле Makefile в SliTaz BusyBox. Make install создает папку _install в текущей папке:
# cd busybox-1.2.2 # cp ../slitaz-tools-1.1/Makefiles/busybox-1.2.2.config .config # make oldconfig (# make menuconfig) # make # make install # chmod 4755 _install/bin/busybox
Скопируем файлы, скомпилированные BusyBox, в папку _install корневой файловой системы (rootfs):
# cp -a _install/* ../../rootfs
Ccылка linuxrc, указывающая на /bin/busybox и папки .bin, /lib и /sbin, была добавлена в папку /rootfs — можете в этом убедиться. Может оказаться, что ссылки там не окажется, если вы не отметили в BusyBox опцию “initrd support” (поддержка initrd). Удалим ссылку linuxrc и создадим ссылку для init, указывающую на /bin/busybox:
# cd ../../rootfs # ls -CF
bin/ linuxrc@ sbin/ usr/
# rm linuxrc # ln -s bin/busybox init
Выполним команду ldd на BusyBox
Команда ldd может вывести список библиотек, которые использует та или иная программа. Библиотеки, используемые BusyBox, могут варьироваться в зависимости от основной системы. Например, в системе Debian — путем копирования библиотек в /lib/tls. Следующие команды даны с использованием опции -v (verbose) для вывода подробных сообщений. Чтобы удалить отладочную информацию из исполнимых файлов и разделяемых библиотек, мы используем команду strip. При этом также можно использовать библиотеки mklibs или uClibc.
# mkdir lib
В SliTaz или другой системе:
# cp /lib/{libcrypt.so.1,libm.so.6,libc.so.6} lib # cp /lib/ld-linux.so.2 lib
Пример в Debian Etch:
# cp /lib/tls/{libcrypt.so.1,libm.so.6,libc.so.6} lib # cp /lib/ld-linux.so.2 lib
Очистка библиотек командой strip:
# strip -v lib/*
Дерево папок Linux и начальная настройка
Создайте несколько папок, представляющих стандартные папки Linux: /dev для устройств, /etc, /home, /usr, /proc, /root и др. Чтобы больше узнать об иерархии файловой системы и ее содержимом, существует Стандарт иерархии файловой системы (File System Hierarchy Standard), доступный в различных форматах по адресу www.pathname.com/fhs/.
Вы также можете создать свое дерево папок. В традиционных системах Unix папка /usr обычно содержит файлы данного дистрибутива, /dev — устройства, /etc — файлы конфигурации, /lib — библиотеки, /home — содержит домашние папки пользователей, а /var — различные данные. Обратите внимание, что мы не создаем папок /lib, /bin и /sbin — они будут созданы при установке BusyBox.
# mkdir -p dev etc root home proc media mnt sys tmp var # mkdir -p usr/{lib,local,games,share} \ var/{cache,lib,lock,log,games,run,spool} \ media/{cdrom,flash,usbdisk}
Изменим права доступа для папки /tmp:
# chmod 1777 tmp
Настроим glibc; здесь важно, что файлы /etc/ld.so.conf и /etc/rpc не являются необходимыми при построении микросистемы:
# touch etc/ld.so.conf # cp /etc/rpc etc
Создаем устройства в /dev
Эту процедуру можно выполнить через скрипт mkdevs.sh из состава BusyBox — или через наш скрипт mktazdevs.sh из SliTaz tools. Если вам нужна более подробная информация, ознакомьтесь с этими скриптами. Если вы воспользовались первым скриптом, всё равно потребуется создать папку pts:
# cp ../src/slitaz-tools-1.1/utils/mktazdevs.sh bin # ./bin/mktazdevs.sh dev
или
# cp ../src/busybox-1.2.2/examples/bootfloppy/mkdevs.sh bin # ./bin/mkdevs.sh dev # mkdir -p dev/{pts,input,shm,net,usb}
Чтобы создавать устройства динамически при загрузке, запускайте mdev-s через скрипт rcS.
Поддержка расширений имен хоста (DNS)
Скопируем библиотеки libnss_* из основной системы в нашу систему SliTaz. Эти библиотеки используются для расширения имен и их можно очистить при помощи утилиты strip:
# cp /lib/{libnss_dns.so.2,libnss_files.so.2} lib # cp /lib/libresolv.so.2 lib # strip -v lib/*.so*
Настраиваем будущую систему
В этом разделе мы займемся созданием необходимых файлов в папке /etc. Для более подробной информации просто прочтите сами эти файлы. Начнем с создания файлов, относящихся к основе системы.
Сеть
Создадим основные файлы, которые будут использоваться для настройки сети:
# echo "127.0.0.1 localhost" > etc/hosts # echo "localnet 127.0.0.1" > etc/networks # echo "slitaz" > etc/hostname # echo "order hosts,bind" > etc/host.conf # echo "multi on" >> etc/host.conf
/etc/nsswitch.conf
Файлы конфигурации для разграничения имен:
# nano etc/nsswitch.conf
# /etc/nsswitch.conf: GNU Name Service Switch config. # passwd: files group: files shadow: files hosts: files dns networks: files
/etc/securetty
Выводит список терминалов, которые могут подключаться к root:
# nano etc/securetty
# /etc/securetty: List of terminals on which root is allowed to login. # console # For people with serial port consoles ttyS0 # Standard consoles tty1 tty2 tty3 tty4 tty5 tty6 tty7
/etc/shells
Список работающих оболочек командной строки. Этот файл используется SSH-сервером (Dropbear):
# nano etc/shells
# /etc/shells: valid login shells. /bin/sh /bin/ash /bin/hush
/etc/issue и /etc/motd
/etc/issue отображается на экране в конце загрузки, а после входа в систему выводится сообщение текущего дня (message of the day):
# echo "SliTaz GNU/Linux 1.0 Kernel \r \l" > etc/issue # echo "" >> etc/issue # nano etc/motd
(°- { Документацию вы найдете в /usr/share/doc. //\ Используйте less или more для чтения файлов, v_/_ su чтобы стать root. } SliTaz распространяется в надежде, что он будет полезен, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.
/etc/busybox.conf
Файл конфигурации для BusyBox, в нём можно назначать полномочия приложениям BusyBox. Для более подробной информации прочтите раздел Безопасность в Настольной книге. Ниже приведен сам файл busybox.conf:
# nano etc/busybox.conf
# /etc/busybox.conf: SliTaz GNU/linux Busybox configuration. # [SUID] # Allow command to be run by anyone. su = ssx root.root passwd = ssx root.root loadkmap = ssx root.root mount = ssx root.root reboot = ssx root.root halt = ssx root.root
Для дополнительной безопасности измените права доступа этого файла:
# chmod 600 etc/busybox.conf
/etc/inittab
Минимальный файл конфигурации для init. Он дает возможность пользоваться root-консолью без необходимости выполнять логин и запускать консоль на tty2.
# nano etc/inittab
# /etc/inittab: init configuration for SliTaz GNU/Linux. ::sysinit:/etc/init.d/rcS ::respawn:-/bin/sh tty2::askfirst:-/bin/sh ::ctrlaltdel:/bin/umount -a -r ::ctrlaltdel:/sbin/reboot
Более подробный пример файла inittab вы найдете в архиве BusyBox.
/etc/profile
Этот файл считывается при каждом входе в систему и влияет на всех пользователей. Мы должны использовать конфигурационный файл ./profile для каждого отдельного пользователя:
# nano etc/profile
# /etc/profile: system-wide .profile file for the Bourne shells PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" LD_LIBRARY_PATH="/usr/lib:/lib" if [ "`id -u`" -eq 0 ]; then PS1='\e[1m\u@\h:\w\#\e[m ' else PS1='\e[1m\u@\h:\w\$\e[m ' fi DISPLAY=:0.0 export PATH LD_LIBRARY_PATH PS1 DISPLAY ignoreeof umask 022
Пользователи, группы и пароли
Создадим конфигурационные файлы для пользователей, групп и паролей в папке /etc (passwd, shadow, group, gshadow) и установим им необходимые права доступа:
# echo "root:x:0:0:root:/root:/bin/sh" > etc/passwd # echo "root::13525:0:99999:7:::" > etc/shadow # echo "root:x:0:" > etc/group # echo "root:*::" > etc/gshadow # chmod 640 etc/shadow # chmod 640 etc/gshadow
Также вы можете добавлять других пользователей, например, пользователя hacker для использования в режиме Live CD. Также можно настраивать пароль для root командой passwd. Чтобы добавить существующего пользователя в существующуй группу, нужно отредактировать файлы /etc/group и /etc/gshadow, поскольку апплет adduser, предоставляемый BusyBox, не имеет всех опций исходной программы.
/etc/fstab или /etc/mtab
Список монтируемых файловых систем:
# nano etc/fstab
# /etc/fstab: information about static file system. # proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 devpts /dev/pts devpts defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0
/etc/mtab используется другими mkfs* для создания списка монтируемых разделов. Он опирается на папку /proc, т.к. существует ссылка на /proc/mounts:
# chroot . /bin/ash /# ln -s /proc/mounts /etc/mtab
Клавиатура
Вы можете создать файл kmap, опираясь на специфику вашей клавиатуры, командой dumpkmap из BusyBox. Некоторые файлы kmap вы также найдете в SliTaz tools. К примеру, создадим файл kmap для fr_CH:
/# mkdir /usr/share/kmap /# /bin/busybox dumpkmap > /usr/share/kmap/fr_CH.kmap /# exit
Выполнив эти команды, вы можете автоматически загружать клавиатуру, включив команду loadkmap в скрипт /etc/init.d/rcS.
/usr/share/doc
Также вы можете добавить в систему различные документы, например, руководство пользователя SliTaz, которое можно скачать с сайта в формате tar.gz:
# mkdir -p usr/share/doc
Устанавливаем скрипт udhcpc
Udhcpc DHCP-клиент, входящий в состав BusyBox, быстр и стабилен, но его разработка ведется независимо. Сайт проекта: udhcp.busybox.net. Вы можете использовать скрипт по умолчанию из архива BusyBox. Этот скрипт записывается в /usr/share/udhcpc/default.script, но это можно изменить через командную строку. В SliTaz данный клиент запускается при загрузке скриптом /etc/init.d/network.sh через файл конфигурации /etc/network.conf:
# mkdir usr/share/udhcpc # cp ../src/busybox-1.2.2/examples/udhcp/simple.script \ usr/share/udhcpc/default.script # chmod +x usr/share/udhcpc/default.script
/etc/init.d/rcS
Наконец, чтобы закончить наброски будущей системы, создадим скрипт инициализации /etc/init.d/rcS, который будет монтировать файловые системы и выполнять несколько команд. За подробностями обратитесь к странице "Загрузочные скрипты". Вы можете изменить значение переменной KMAP= для вашей клавиатуры:
# mkdir etc/init.d # nano etc/init.d/rcS
#! /bin/sh # /etc/init.d/rcS: rcS initial script. # KMAP=fr_CH echo "Processing /etc/init.d/rcS... " /bin/mount proc /bin/mount -a /bin/hostname -F /etc/hostname /sbin/ifconfig lo 127.0.0.1 up /sbin/loadkmap < /usr/share/kmap/$KMAP.kmap
# chmod +x etc/init.d/rcS
На заметку
Также можно установить созданный нами менеджер пакетов Tazpkg (размером 10 Кб), информацию для установки вы найдете в tar-архиве исходников. И еще вы можете установить различные файлы из набора SliTaz tools, например, лицензию.
Собираем cpio-архив initramfs
Initramfs представляет собой архив cpio, собираемый из корневой папки системы, который впоследствии будет при загрузке распаковываться в RAM ядром Linux и создавать файловую систему (также в RAM). Чтобы создать такой архив из корневой папки файлов системы (rootfs), осуществим поиск командой find, добавив несколько конвейеров |. Затем мы создадим cpio-архив, используя gzip, и поместим его в рабочую папку.
Полученный файл rootfs.gz представляет собой корневую папку системы с расширением .gz. Если вы захотите изменить имя этого файла, не забудьте внести изменения в файл конфигурации загрузчика isolinux (isolinux.cfg) или в menu.lst для GRUB.
Вот сама команда:
# find . -print | cpio -o -H newc | gzip -9 > ../rootfs.gz
В конце должен получиться файл rootfs.gz размером от 1 до 2 Мб в папке SliTaz/.
При создании нового образа, если вам нужно внести изменения в rootfs, просто скопируйте новый rootfs.gz в папку /rootcd/boot и соберите образ командой genisoimage или mkisofs. Или же можно использовать команду mktaziso из SliTaz tools. Этот скрипт проверит, существуют ли нужные папки, создаст новый сжатый cpio-архив и новый загрузочный ISO-образ.
Собираем файлы для rootcd
Следующие действия помогут вам создать корневую папку загрузочного CD-ROM. Начнем с создания папок rootcd, boot и isolinux:
# cd .. # mkdir -p rootcd/boot/isolinux
В случае необходимости вы также можете создать и другие папки для различных файлов, например, для документов HTML или пакетов.
Копируем ядро
Скопируем предварительно скомпилированное ядро в rootcd/boot:
# cp src/linux-2.6.20/arch/i386/boot/bzImage rootcd/boot
Копируем initramfs в rootcd/boot
Скопируем файл rootfs.gz в папку rootcd/boot. Не забывайте собирать новый rootfs.gz, если вы производите любые изменения в rootfs (корневой файловой системе):
# cp rootfs.gz rootcd/boot
Устанавливаем загрузчик isolinux
Для установки isolinux скопируйте файл isolinux.bin из архива исходников Syslinux:
# cd src # tar xzf syslinux-3.35.tar.gz # cp syslinux-3.35/isolinux.bin ../rootcd/boot/isolinux # cd ..
isolinux.cfg — файл настроек isolinux
Вот пример isolinux.cfg, который, по идее, должен работать. При желании вы можете изменить его:
# nano rootcd/boot/isolinux/isolinux.cfg
display display.txt default slitaz label slitaz kernel /boot/bzImage append initrd=/boot/rootfs.gz rw root=/dev/null vga=788 implicit 0 prompt 1 timeout 80
В частности, вы можете внести следующие изменения:
- переменная timeout — это отсчет времени в секундах до начала загрузки. Чтобы загрузка начиналась мгновенно, поставьте значение 0 или удалите строку вовсе; иначе можете поставить значение 10.
- переменную prompt можно установить в 0, чтобы убрать приглашение boot:.
- можете добавить новые строки, например, для просмотра содержимого определенных текстовых файлов при нажатии F1, F2, F3 и т.д.
display.txt
Маленькое приветствие, запускаемое isolinux. При желании вы можете внести изменения в этот файл:
# nano rootcd/boot/isolinux/display.txt
/* _\|/_ (o o) +----oOO-{_}-OOo---------------------------------------------------+ ____ _ _ _____ / ___|| (_)_ _|_ _ ____ \___ \| | | | |/ _` |_ / ___) | | | | | (_| |/ / |____/|_|_| |_|\__,_/___| SliTaz GNU/Linux - Temporary Autonomous Zone <ENTER> для загрузки. */
Создаем ISO-образ при помощи genisoimage или mkisofs
# genisoimage -R -o slitaz-cooking.iso -b boot/isolinux/isolinux.bin \ -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \ -V "SliTaz" -input-charset iso8859-1 -boot-info-table rootcd
При каждом изменении содержимого CD-ROM необходимо создавать новый образ.
Можно использовать маленький скрипт, который будет создавать новый cpio-архив и новый образ, или mktaziso из набора SliTaz tools. Также есть возможность использовать GRUB для загрузки.
Записываем образ на диск или проверяем в Qemu
Теперь можно записать образ в Graveman, k3b или wodim и загрузиться с этого диска. Для wodim команда записи проста (также эта команда действительна для cdrecord и ядер серии 2.6.XX):
# wodim -v -speed=24 -data slitaz-cooking.iso
Qemu
Образ можно также протестировать в эмуляторе Qemu. Чтобы установить его в системе Debian, наберите # aptitude install qemu. для эмуляции ISO-образа SliTaz, используйте команду
# qemu -cdrom slitaz-cooking.iso
Следующая глава
В следующей главе — "Базовые приложения" — мы познакомимся с установкой и настройкой основных приложений и библиотек.
Статью перевел Cyril