воскресенье, 18 апреля 2010 г.

Создание LiveCD Slackware based ч. 4.1: базовая система + X.org

Сегодня рассмотрим построение базовой системы на основе графического x-сервера X.org
Система собирается из имеющейся установки Slackware с поддержкой txz пакетов.
размер получаемого образа - 55Mb
расход оперативной памяти при старте x-сервера - 130Mb
сжатая файловая система - zisofs
ядро самосборное с поддержкой прозрачного сжатия "Transparent decompression extension" файловой системы iso9660
русификация выполнена по статье Русификация Slackware 13 c utf8

Установка системы состоит из двух этапов: установка нужных пакетов и русификация. Отдельного внимания заслуживают скрипты пакующие системный каталог в initrd и распаковывающий его обратно.
список пакетов базовой системы:
aaa_base-13.0-i486-2.txz
aaa_elflibs-13.0-i486-2.txz
aaa_terminfo-5.7-noarch-1.txz
acl-2.2.47_1-i486-1.txz
acpid-1.0.8-i486-2.txz
bash-3.1.017-i486-2.txz
grep-2.5.4-i486-1.txz
bin-11.1-i486-1.txz
coreutils-7.4-i486-1.txz
devs-2.3.1-noarch-25.txz
e2fsprogs-1.41.8-i486-1.txz
etc-13.0-i486-2.txz
gettext-0.17-i486-2.txz
getty-ps-2.1.0b-i486-1.txz
glibc-solibs-2.9-i486-3.txz
grep-2.5.4-i486-1.txz
kbd-1.15-i486-3.txz
module-init-tools-3.6-i486-2.txz
openssl-solibs-0.9.8k-i486-2.txz
procps-3.2.7-i486-2.txz
shadow-4.0.3-i486-18.txz
sysfsutils-2.1.0-i486-1.txz
sysvinit-2.86-i486-6.txz
sysvinit-scripts-1.2-noarch-30.txz
udev-141-i486-3.txz
util-linux-ng-2.14.2-i486-1.txz
gzip-1.3.12-i486-1.tgz
sed-4.1.5-i486-1.txz
glibc-i18n-2.9-i486-3.txz

управление пакетами. в принципе, без них можно обойтись, но на вес конечной болванки это не повлияет.
pkgtools-13.0-noarch-3.tgz
findutils-4.4.2-i486-1.txz
tar-1.22-i486-2.tgz
xz-4.999.8beta-i486-1.tgz

консольный текстовый редактор nano. без него тоже можно обойтись, чем будете править конфиги - решайте сами.
nano-2.0.9-i486-1.txz

к слову о весе болванки. базовая система + модули ядра занимают 23MB initrd, х-сервер занимает остальные 30MB
HAL и его зависимость D-BUS - нужен для работы x-сервера.
dbus-glib-0.80-i486-1.txz
dbus-1.2.14-i486-1.txz
hal-0.5.11-i486-6.txz

сам x-сервер
xorg-server-1.6.3-i486-1.txz

когда я подбирал пакеты для livecd, я просто установил все библиотеки lib*txz из категории х. на самом деле, если сначала установить х-сервер, а потом добавлять те библиотеки которые необходимы ему для запуска, то хватит и меньше половины... остальные потребуются при запуске программ.
libpthread-stubs-0.1-noarch-2.txz
liblbxutil-1.0.1-i486-2.txz
libhangul-0.0.7-i486-1.txz
libdmx-1.0.2-i486-2.txz
libXxf86vm-1.0.2-i486-2.txz
libXxf86misc-1.0.1-i486-2.txz
libXxf86dga-1.0.2-i486-2.txz
libXvMC-1.0.4-i486-2.txz
libXv-1.0.4-i486-2.txz
libXres-1.0.3-i486-2.txz
libXrender-0.9.4-i486-2.txz
libXrandr-1.3.0-i486-1.txz
libXprintUtil-1.0.1-i486-2.txz
libXprintAppUtil-1.0.1-i486-2.txz
libXpm-3.5.7-i486-2.txz
libXinerama-1.0.3-i486-2.txz
libXi-1.2.1-i486-1.txz
libXft-2.1.13-i486-2.txz
libXfixes-4.0.3-i486-2.txz
libXevie-1.0.2-i486-2.txz
libXdamage-1.1.1-i486-2.txz
libXcursor-1.1.9-i486-2.txz
libXcomposite-0.4.0-i486-2.txz
libXaw-1.0.6-i486-1.txz
libXTrap-1.0.0-i486-2.txz
libXScrnSaver-1.1.3-i486-2.txz
libFS-1.0.2-i486-1.txz
libICE-1.0.5-i486-2.txz
libSM-1.1.0-i486-1.txz
libXtst-1.0.3-i486-2.txz
libXt-1.0.6-i486-1.txz
libdrm-2.4.12-i486-1.txz
libXp-1.0.0-i486-2.txz
libXmu-1.0.4-i486-2.txz
libXext-1.0.5-i486-1.txz
libX11-1.2.2-i486-1.txz
libfontenc-1.0.4-i486-2.txz
libXfont-1.4.0-i486-1.txz
libpciaccess-0.10.6-i486-1.txz
libXfontcache-1.0.4-i486-2.txz
libxcb-1.3-i486-1.txz
libXdmcp-1.0.2-i486-2.txz
libXau-1.0.4-i486-2.txz
libxkbui-1.0.2-i486-2.txz
libxkbfile-1.0.5-i486-2.txz
libxkbui-1.0.2-i486-2.txz
libxkbfile-1.0.5-i486-2.txz
libxkbui-1.0.2-i486-2.txz
libxkbfile-1.0.5-i486-2.txz

остальные пакеты: 3-D ускорение, поддержка протоколов, скрипты инициализации и пр.
xf86driproto-2.0.4-noarch-2.txz
xdriinfo-1.0.2-i486-2.txz
dri2proto-2.1-i486-1.txz
xextproto-7.0.5-noarch-1.txz
xauth-1.0.3-i486-2.txz
rgb-1.0.3-i486-1.txz
pixman-0.15.18-i486-1.txz
xproto-7.0.15-noarch-1.txz
xcb-proto-1.5-noarch-1.txz
xkill-1.0.1-i486-2.txz
xinit-1.1.1-i486-1.txz
mesa-7.5-i486-1.txz

поддержка векторных шрифтов TrueType(aka TTF) + сами шрифты
fontconfig-2.6.0-i486-2.txz
freetype-2.3.9-i486-1.txz
font-misc-misc-1.0.0-noarch-4.txz
font-misc-cyrillic-1.0.0-noarch-3.txz
liberation-fonts-ttf-1.04-noarch-1.txz
ваши програмы могут потребовать дополнительные шрифты, какие из них ставить - решайте сами. xterm прекрасно пишет кириллицей и на этом.

поддержка клавиатуры и мыши
xkeyboard-config-1.6-noarch-1.txz
xinput-1.4.2-i486-1.txz
xkbutils-1.0.1-i486-2.txz
xkbevd-1.0.2-i486-2.txz
xkbcomp-1.1.0-i486-1.txz
xf86-input-evdev-2.2.5-i486-1.txz

универсальный видеодрайвер vesa
xf86-video-vesa-2.2.1-i486-1.txz

и последнее: xterm и его зависисимость
utempter-1.1.4-i486-1.txz
xterm-243-i486-2.txz


Сборка LiveCD
Даем себе права:
su
Password:

Создаем рабочий каталог:
mkdir /tmp/livecd
cd /tmp/livecd

Формируем список пакетов для закачки:
cat > pklist << EOF
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/aaa_base-13.0-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/aaa_elflibs-13.0-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/aaa_terminfo-5.7-noarch-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/acl-2.2.47_1-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/acpid-1.0.8-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/bash-3.1.017-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/grep-2.5.4-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/bin-11.1-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/coreutils-7.4-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/devs-2.3.1-noarch-25.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/e2fsprogs-1.41.8-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/etc-13.0-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/gettext-0.17-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/getty-ps-2.1.0b-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/glibc-solibs-2.9-i486-3.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/grep-2.5.4-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/kbd-1.15-i486-3.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/module-init-tools-3.6-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/openssl-solibs-0.9.8k-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/procps-3.2.7-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/shadow-4.0.3-i486-18.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/sysfsutils-2.1.0-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/sysvinit-2.86-i486-6.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/sysvinit-scripts-1.2-noarch-30.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/udev-141-i486-3.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/util-linux-ng-2.14.2-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/gzip-1.3.12-i486-1.tgz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/tar-1.22-i486-2.tgz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/xz-4.999.8beta-i486-1.tgz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/findutils-4.4.2-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/sed-4.1.5-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/l/glibc-i18n-2.9-i486-3.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/pkgtools-13.0-noarch-3.tgz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/ap/nano-2.0.9-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/l/dbus-glib-0.80-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/dbus-1.2.14-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/l/hal-0.5.11-i486-6.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xextproto-7.0.5-noarch-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libpthread-stubs-0.1-noarch-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/liblbxutil-1.0.1-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libhangul-0.0.7-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libdmx-1.0.2-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXxf86vm-1.0.2-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXxf86misc-1.0.1-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXxf86dga-1.0.2-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXvMC-1.0.4-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXv-1.0.4-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXres-1.0.3-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXrender-0.9.4-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXrandr-1.3.0-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXprintUtil-1.0.1-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXprintAppUtil-1.0.1-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXpm-3.5.7-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXinerama-1.0.3-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXi-1.2.1-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXft-2.1.13-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXfixes-4.0.3-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXevie-1.0.2-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXdamage-1.1.1-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXcursor-1.1.9-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXcomposite-0.4.0-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXaw-1.0.6-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXTrap-1.0.0-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXScrnSaver-1.1.3-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libFS-1.0.2-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libICE-1.0.5-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libSM-1.1.0-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXtst-1.0.3-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXt-1.0.6-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libdrm-2.4.12-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xf86driproto-2.0.4-noarch-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xdriinfo-1.0.2-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/dri2proto-2.1-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXp-1.0.0-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXmu-1.0.4-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXext-1.0.5-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libX11-1.2.2-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xauth-1.0.3-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/rgb-1.0.3-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/pixman-0.15.18-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libfontenc-1.0.4-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXfont-1.4.0-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libpciaccess-0.10.6-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xorg-server-1.6.3-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xproto-7.0.15-noarch-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libxcb-1.3-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xcb-proto-1.5-noarch-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXdmcp-1.0.2-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXau-1.0.4-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xkill-1.0.1-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xinit-1.1.1-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/mesa-7.5-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libXfontcache-1.0.4-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/fontconfig-2.6.0-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/l/freetype-2.3.9-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/font-misc-misc-1.0.0-noarch-4.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/font-misc-cyrillic-1.0.0-noarch-3.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/liberation-fonts-ttf-1.04-noarch-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/a/utempter-1.1.4-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xterm-243-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xf86-video-vesa-2.2.1-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xkeyboard-config-1.6-noarch-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libxkbui-1.0.2-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/libxkbfile-1.0.5-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xinput-1.4.2-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xkbutils-1.0.1-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xkbevd-1.0.2-i486-2.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xkbcomp-1.1.0-i486-1.txz
ftp://slackware.mirrors.tds.net/pub/slackware/slackware-13.0/slackware/x/xf86-input-evdev-2.2.5-i486-1.txz
Для выхода из режима редактирование нажмите Ctrl+D или напечатайте EOF и нажмите Enter.

Выкачиваем их:
wget -i ./pklist

Создаем корневую директорию нашего будущего LiveCD:
mkdir ./1

Устанавливаем полученные пакеты с опцией -root в корневую директорию LiveCD :
installpkg -root ./1 ./*t?z

,и удаляем теперь уже не нужные пакеты и их список:
rm /tmp/livecd/*t?z
rm /tmp/livecd/pklist

Локализуем дистрибутив:
cat > /tmp/livecd/1/etc/rc.d/rc.keymap << EOF
#!/bin/sh
# Load the keyboard map. More maps are in /usr/share/kbd/keymaps.
if [ -x /usr/bin/loadkeys ]; then
/usr/bin/loadkeys /usr/share/kbd/keymaps/i386/qwerty/ruwin_ct_sh-UTF-8.map.gz
fi

cat > /tmp/livecd/1/etc/rc.d/rc.font << EOF
#!/bin/sh
setfont Cyr_a8x16.psfu.gz

cat > /tmp/livecd/1/etc/profile.d/lang.sh << EOF
#!/bin/sh
export LANG=ru_RU.UTF-8
export LC_COLLATE=C

cat > /tmp/livecd/1/etc/hal/fdi/policy/10-keymap.fdi << EOF
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- -*- SGML -*- -->

<deviceinfo version="0.2">
  <device>
    <match key="info.capabilities" contains="input.keymap">
      <append key="info.callouts.add" type="strlist">hal-setup-keymap</append>
    </match>

    <match key="info.capabilities" contains="input.keys">

      <!-- Restore Ctrl-Alt-Bksp Xserver Zapping -->
      <merge key="input.xkb.options" type="string">terminate:ctrl_alt_bksp</merge>

      <!-- Edit (as needed) these four lines in the copied fdi file -->
      <merge key="input.xkb.rules" type="string">base</merge>
      <merge key="input.xkb.model" type="string">evdev</merge>
      <merge key="input.xkb.layout" type="string">us,ru</merge>
      <merge key="input.xkb.variant" type="string">,winkeys</merge>
      <merge key="input.xkb.options" type="string">terminate:ctrl_alt_bksp,grp:ctrl_shift_toggle,grp:lwin_switch,grp_led:scroll</merge>

    </match>
  </device>
</deviceinfo>
chmod +x /tmp/livecd/1/etc/rc.d/rc.keymap /tmp/livecd/1/etc/rc.d/rc.font /tmp/livecd/1/etc/profile.d/lang.sh

Для минимизации размера дистрибутива, удалим чужие локали отличние от ru и en :
cd /tmp/livecd/1/usr/lib/locale/; rm -r `ls -1 ./ |grep -vE "en_US|ru_RU"`; cd -

cd /tmp/livecd/1/usr/share/i18n/locales/; rm -r `ls -1 ./ |grep -vE "en_US|ru_RU"`; cd -

cd /tmp/livecd/1/usr/share/locale/; rm -r `ls -1 ./ |grep -vE "en|ru|alias"`; cd -

осталось пара "штрихов"

создадим ссылку на init
ln -s /sbin/init /tmp/livecd/1/init

для запрета проверки корневой файловой системы во время загрузки, создадим пустой файл fastboot
touch /tmp/livecd/1/etc/fastboot
сформируем файл /etc/fstab
cat > /tmp/livecd/1/etc/fstab << EOF
/usr.zisofs /usr iso9660 loop,auto 0 0
tmpfs /dev/shm tmpfs defaults 0 0
,и снимаем нажатие на клавишу при выводе предупреждение в файле /etc/rc.d/rc.S
sed -i "235 s/read/#read/" /tmp/livecd/1/etc/rc.d/rc.S


Всё, наша система готова. осталось запаковать корень в initrd и записать на болванку.
скрипт для сжатия системного каталога LiveCD в cgz архив
cat > /tmp/livecd/cl << EOF
#!/bin/sh
[ -d ./1 ] || exit 1
cd ./1
[ -e ../rootfs.cgz ] && rm ../rootfs.cgz
[ -d ./usr/doc ] && rm -rf ./usr/doc/*
[ -d ./usr/man ] && rm -rf ./usr/man/*
[ -d ./usr/info ] && rm -rf ./usr/info/*
[ -d ./usr/include ] && rm -rf ./usr/include/*
mkzftree -z 9 -F ./usr ./usr.z
rm -r ./usr/*
mkisofs -z -R -o ./usr.zisofs ./usr.z
rm -r ./usr.z
find . | bin/cpio -v -o -H newc | gzip -9 >../rootfs.cgz
cd -
rm -r ./1
здесь для минимизации размера мы удаляем содержимое директорий /usr/man, /usr/doc, /usr/info, /usr/include. Далее мы должны директории /usr преобразовать в единый файл-архив файловой системы zisofs. здесь нужно пояснить что такое zisofs. это расширение файловой системы iso9660 которая сама по себе Read-Only, единственное отличие - то что каждый файл сжат. соответственно ядро при чтении файла с такой системы предварительно разжимает и затем передает его запрашиваемой программе. соответственно на нашем LiveCD директория /usr Read-Only а все остальное включая /home и /etc доступно для записи, что на мой взгляд очень удобно.
в скрипте команда mkzftree из каталога /usr формирует сжатый каталог /usr.z
,а затем mkisofs делает файл-образ /usr.zisofs из уже сжатой директории /usr.z
соответственно конвейер find . | bin/cpio -v -o -H newc | gzip -9 >../rootfs.cgz сжимает корневую директорию LiveCD в cpio/gzip архив
Cкрипт для обратной распаковки cpio/gzip архива initrd в корневую директорию:
cat > /tmp/livecd/op << EOF
#!/bin/sh
[ -d ./1 ] && exit 1
mkdir ./1
cd ./1
gzip -dc ../rootfs.cgz | cpio -iumdv
mount ./usr.zisofs /mnt/tmp -o loop && cp -av /mnt/tmp/* ./usr/
umount /mnt/tmp
rm ./usr.zisofs
cd -

здесь, для извлечения содержимого директории /usr мы просто монтируем файл usr.zisofs в /mnt/tmp и копируем его содержимое

скрипт для прожига болванки:
cat > /tmp/livecd/mk << EOF
#!/bin/sh
[ -e /tmp/mycd.iso ] && mv /tmp/mycd.iso /tmp/mycd1.iso
mkisofs -o /tmp/mycd.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./
cdrecord -v blank=fast -tao -eject dev=/dev/cdrom /tmp/mycd.iso

осталось скопировать isolinux.bin в рабочий каталог:
cp /usr/lib/syslinux/isolinux.bin /tmp/livecd/

Ядро. создайте каталог /tmp/livecd/1/lib/modules
и скопируйте в него модули вашего ядра. Само ядро скопируйте в /tmp/livecd
под именем vmlinuz
Сборка LiveCD завершена. наберите
sh ./cl
для сжатия корневой директории LiveCD в cpio/gzip архив rootfs.cgz
Вставьте болванку в CD-RW привод и наберите команду
sh ./mk
через минуту привод "выкинет" готовый диск
при загрузке ведите логин: root, пароль не требуется.
для запуска х-сервера наберите
X
и нажмите enter. пустой черный экран который Вы увидите это и будет х-сервер. он предоставляет только графический режим и ничего больше. для запуска программы в х-сервере, переключитесь на свободную консоль Ctrl+Alt+F2 и намерите команду:
DISPLAY=:0 xterm
введите enter и переключитесь обратно на х-сервер Alt+F7, Вы увидите белое прямоугольное окно с курсором - поздравляю, все работает :)
на данную систему я устанавливал оконные менеджеры MWM, TWM, FVWM2, все они работали без дополнительных пакетов.

P.S. А как же xorg.conf спросите Вы? А нынешний X.org способен работать без этого файла, а точнее Вам нужно будет сформировать его самостоятельно под свое железо и свои привычки.

2 комментария:

  1. ничего не понял.
    op208

    ОтветитьУдалить
  2. я поясню. в данном случае рассматривается Slackware на основе X.org с минимальным количеством пакетов. если Вы такой задачи не преследуете, достаточно будет просто установить категории "a" и "x" целиком.

    ОтветитьУдалить