======Базовые приложения======
Установка и настройка основных приложений и библиотек.
=====Введение=====
В этой главе описывается сборка и настройка основных библиотек и консольных приложений SliTaz.
===Назначаем переменную окружения ($fs)===
В переменных окружения не указывается путь к папке, а только ее имя. Пропишем в переменную '$fs' путь к корневой файловой системе (rootfs). Для этого войдем в рабочую папку SliTaz/ и выполним:
# export fs=$PWD/rootfs
А для проверки введем такую команду:
# echo $fs
=====bc-1.06 — консольный калькулятор=====
Приложение bc ([[http://www.gnu.org/software/bc/|www.gnu.org/software/bc/]]) — это маленький калькулятор. При его компиляции также собирается dc, но последний не будет устанавливаться в SliTaz. Что интересно — dc также входит в состав BusyBox. Если вы захотите включить dc отдельно, потребуется удалить соответствующую ссылку на BusyBox, если она существует. Мы будем использовать папку //_pkg// (package) для установки и утилиту strip для сокращения размеров исполняемых файлов, а затем скопируем полученные утилиты в нужную папку.
# cd src
# wget http://ftp.gnu.org/pub/gnu/bc/bc-1.06.tar.gz
# tar xzfv bc-1.06.tar.gz
# cd bc-1.06
# ./configure --prefix=/usr --infodir=/usr/share/info \
--mandir=/usr/share/man
# make
# make DESTDIR=$PWD/_pkg install
# strip -vs _pkg/usr/bin/*
# cp -avi _pkg/usr/bin/bc $fs/usr/bin
===Библиотеки===
Выполнение команды ldd на bc выведет:
libc.so.6 => /lib/libc.so.6 (0x40029000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
=====zlib-1.2.3 — библиотеки сжатия=====
Пакет zlib ([[http://www.zlib.net/|www.zlib.net]]) обеспечивает функции сжатия и распаковки, используемые, среди прочего, SSH-сервером Dropbear и X-сервером:
# cd ..
# wget http://www.gzip.org/zlib/zlib-1.2.3.tar.bz2
# tar xjfv zlib-1.2.3.tar.bz2
# cd zlib-1.2.3
# ./configure --shared --prefix=/usr
# make
# strip -vs libz.so*
# cp -av libz.so* $fs/usr/lib
=====pcre-7.4 — Perl-совместимые регулярные выражения=====
Пакет pcre ([[http://www.pcre.org/|www.pcre.org]]) содержит библиотеки функций для Perl-совместимых регулярных выражений, которые использует, например, веб-сервер Lighttpd:
# cd ..
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.4.tar.gz
# tar xzfv pcre-7.4.tar.gz
# cd pcre-7.4
# ./configure --prefix=/usr
# make
# make DESTDIR=$PWD/_pkg install
# strip -vs _pkg/usr/bin/*
# strip -vs _pkg/usr/lib/*
# cp -av _pkg/usr/bin/* $fs/usr/bin
# cp -av _pkg/usr/lib/*.so* $fs/usr/lib
=====e2fsprogs-1.39 — управление файловыми системами=====
Пакет e3fsprogs ([[http://e2fsprogs.sourceforge.net/|e2fsprogs.sourceforge.net]]) имеет в своем составе утилиты для управления файловыми системами ext2 и ext3. Мы не будем брать их все, потому что нам понадобится место для других программ. Также мы будем использовать fsck из BusyBox:
# cd ..
# wget http://puzzle.dl.sourceforge.net/sourceforge/e2fsprogs/e2fsprogs-1.39.tar.gz
# tar xzf e2fsprogs-1.39.tar.gz
# cd e2fsprogs-1.39
# ./configure --prefix=/usr --with-root-prefix="" \
--enable-elf-shlibs --disable-evms --sysconfdir=/etc \
--infodir=/usr/share/info --mandir=/usr/share/man
# make
# make DESTDIR=$PWD/_pkg install
# strip -vs _pkg/sbin/*
# strip -vs _pkg/lib/*
# strip -vs _pkg/usr/bin/*
# strip -vs _pkg/usr/sbin/*
# strip -vs _pkg/usr/lib/*
Далее установим полученные утилиты, файлы настроек и библиотеки в папку rootfs. При использовании fsck будьте осторожны и не сотрите ссылку на BusyBox:
# cp -i _pkg/sbin/{badblocks,blkid,dumpe2fs,e2fsck,e2image} $fs/sbin
# cp -i _pkg/sbin/{e2label,findfs,logsave,mke2fs,mkfs.*} $fs/sbin
# cp -i _pkg/sbin/{resize2fs,tune2fs} $fs/sbin
# cp -a _pkg/lib/* $fs/lib
# rm -rf $fs/lib/libss*
# cp -a _pkg/etc/* $fs/etc
# cp -a _pkg/usr/bin/* $fs/usr/bin
# cp -a _pkg/usr/sbin/* $fs/usr/sbin
# cp -ad _pkg/usr/lib/*.so $fs/usr/lib
# rm -rf $fs/usr/lib/libss*
Также можно скопировать файлы для русской раскладки:
# mkdir $fs/usr/share/locale
# cp -a _pkg/usr/share/locale/ru $fs/usr/share/locale
=====Dropbear-0.50 — легкий сервер и клиент SSH=====
Dropbear ([[http://matt.ucc.asn.au/dropbear/dropbear.html|matt.ucc.asn.au/dropbear/dropbear.html]]) — это маленький надежный клиент/сервер c поддержкой SSH 2. Dropbear совместим с OpenSSH и использует //~/.ssh/authorized_keys// для управления общими ключами. Dropbear также предоставляет собственную версию scp, для чего его нужно компилировать с опцией "make scp":
# cd ..
# wget http://matt.ucc.asn.au/dropbear/releases/dropbear-0.50.tar.gz
# tar xzf dropbear-0.50.tar.gz
# cd dropbear-0.50
# ./configure --prefix=/usr
# make
# make scp
# make DESTDIR=$PWD/_pkg install
# strip -v scp
# strip -v _pkg/usr/bin/*
# strip -v _pkg/usr/sbin/*
Установим клиент и его утилиты в ///usr/bin//, а сервер — в ///usr/sbin//:
# cp scp $fs/usr/bin
# cp -a _pkg/usr/bin/* $fs/usr/bin
# cp -a _pkg/usr/sbin/* $fs/usr/sbin
===Библиотеки===
libutil.so.1 => /lib/libutil.so.1 (0x40025000)
libz.so.1 => /usr/lib/libz.so.1 (0x40028000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x4003b000)
libc.so.6 => /lib/libc.so.6 (0x40068000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Скопируем библиотеку //libutil.so.1// в //$fs/lib//, если она там еще не находится. Другие библиотеки должны присутствовать при создании основы системы:
# cp -a /lib/libutil* $fs/lib
===Настройка Dropbear===
Пользовательские конфигурационные файлы //authorized_keys// и //known_hosts// находятся в //~/.ssh//. Эта папка и файл //known_hosts// создаются автоматически, когда пользователь впервые запускает dbclient. Системные конфигурационные файлы для Dropbear расположены в ///etc/dropbear//:
# mkdir $fs/etc/dropbear
Вы должны сгенерировать ключи безопасности, перед тем как запустить сервер Dropbear в Slitaz. Можно использовать dropbearkey со следующими опциями:
# dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
# dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key
Запустить SSH-сервер в SliTaz можно следующей командой:
# /etc/init.d/dropbear start
=====lighttpd-1.4.18 — веб-сервер HTTP=====
Lighttpd ([[http://www.lighttpd.net/|www.lighttpd.net]]) — легкий, безопасный и мощный веб-сервер. Эта программа активно развивается и легко настраивается. Она поддерживает виртуальные хосты, CGI-скрипты и интеллектуальное управление процессором:
# cd ..
# wget http://www.lighttpd.net/download/lighttpd-1.4.18.tar.gz
# tar xzf lighttpd-1.4.18.tar.gz
# cd lighttpd-1.4.18
# ./configure -enable-shared --disable-ipv6 --prefix=/usr \
--libdir=/usr/lib/lighttpd --mandir=/usr/share/man
# make
# make DESTDIR=$PWD/_pkg install
# strip -vs _pkg/usr/bin/*
# strip -vs _pkg/usr/sbin/*
# strip -vs _pkg/usr/lib/lighttpd/*
Установим сервер и собранные библиотеки, а затем скопируем некоторые модули (9):
# cp _pkg/usr/bin/* $fs/usr/bin
# cp _pkg/usr/sbin/* $fs/usr/sbin
# mkdir $fs/usr/lib/lighttpd
Модули:
# cp _pkg/usr/lib/lighttpd/mod_access.so $fs/usr/lib/lighttpd
# cp _pkg/usr/lib/lighttpd/mod_accesslog.so $fs/usr/lib/lighttpd
# cp _pkg/usr/lib/lighttpd/mod_alias.so $fs/usr/lib/lighttpd
# cp _pkg/usr/lib/lighttpd/mod_auth.so $fs/usr/lib/lighttpd
# cp _pkg/usr/lib/lighttpd/mod_cgi.so $fs/usr/lib/lighttpd
# cp _pkg/usr/lib/lighttpd/mod_compress.so $fs/usr/lib/lighttpd
# cp _pkg/usr/lib/lighttpd/mod_rewrite.so $fs/usr/lib/lighttpd
# cp _pkg/usr/lib/lighttpd/mod_status.so $fs/usr/lib/lighttpd
# cp _pkg/usr/lib/lighttpd/mod_userdir.so $fs/usr/lib/lighttpd
===Библиотеки===
У нас уже должна быть библиотека //libsdl.so.2//; если же нет, скопируем ее:
# cp -a /lib/libdl* $fs/lib
===/var/www — корневая папка обслуживаемых документов===
///var/www// — это корневая папка документов, обслуживаемых по умолчанию. Получить доступ к ней можно, перейдя по ссылке [[http://localhost/]]. Эта папка содержит index.html, который автоматически выводится по запросу. Создадим папку ///var/www// и посмотрим, что там внутри:
# mkdir -p $fs/var/www
===lighttpd.conf — файл конфигурации Lighttpd===
Основной файл настроек Lighttpd расположен в папке ///etc/lighttpd// и называется //lighttpd.conf//. Этот же файл, входящий в состав SliTaz, прост для понимания, можете в этом убедиться, прочитав его. Другие примеры этого файла вы найдете на сайте Lighttpd, а пример его конфигурации — в папке ///doc// в архиве Lighttpd:
# cp -a ../slitaz-tools-1.1/etc/lighttpd $fs/etc
Создадим папку, содержащую log-файлы:
# mkdir $fs/var/log/lighttpd
===Пользователь и группа www===
Добавим к веб-серверу пользователя и группу, это увеличит безопасность, кроме того, нет надобности запускать его от имени root. Соответствующий пользователь в SliTaz по умолчанию — www, это имя вы можете изменить в файле //lighttpd.conf//. Приложение //adduser// из BusyBox имеет некоторые ограничения, так что добавим пользователя www вручную. Мы также изменим права доступа к папке с log-файлами веб-сервера:
# echo "www:x:80:80:www:/var/www:/bin/sh" >> $fs/etc/passwd
# echo "www:*:13509:0:99999:7:::" >> $fs/etc/shadow
# echo "www:*:13509:0:99999:7:::" >> $fs/etc/shadow-
# chroot $fs /bin/ash
/# addgroup -g 80 www
/# chown www.www /var/log/lighttpd
# exit
Чтобы запустить веб-сервер, можно использовать скрипт ///etc/init.d/lighttpd// из SliTaz tools, набрав: ///etc/init.d/lighttpd start//. Запуск сервера можно автоматизировать при загрузке системы, создав ссылку ///etc/init.d/lighttpd//, указывающую на ///etc/rc.d/60lighttpd//.
=====iptables-1.3.7 — файрволл для Linux=====
Netfilter ([[http://www.netfilter.org/|www.netfilter.org]]) — это модуль, обеспечивающий функции файрволла для ядра Linux, разделяемые Интернет-соединения (NAT) и архивирование сетевого трафика. Команда //iptables// позволяет конфигурировать Netfilter, используя //iptables-restore// и //iptable-save// для сохранения и восстановления конфигурации Netfilter:
# cd ..
# wget http://www.netfilter.org/projects/iptables/files/iptables-1.3.7.tar.bz2
# tar xjf iptables-1.3.7.tar.bz2
# cd iptables-1.3.7
# make KERNEL_DIR=../linux-2.6.20 BINDIR=/sbin \
LIBDIR=/lib MANDIR=/usr/share/man
# make KERNEL_DIR=../linux-2.6.20 BINDIR=/sbin \
LIBDIR=/lib MANDIR=/usr/share/man \
DESTDIR=$PWD/_pkg install
# strip _pkg/sbin/*
# strip _pkg/lib/iptables/*
Установим приложения и библиотеки по маске iptables*, достаточные для базового файрволла:
# cp -a _pkg/sbin/iptables* $fs/sbin
# mkdir $fs/lib/iptables
# cp -a _pkg/lib/iptables/{libipt_standard.so,libipt_conntrack.so} \
$fs/lib/iptables
# cp -a _pkg/lib/iptables/{libipt_tcp.so,libipt_udp.so} $fs/lib/iptables
Чтобы удовлетворить зависимости iptables, скопируем библиотеки libnsl*:
# cp -va /lib/libnsl* $fs/lib/tls
# strip $fs/lib/libnsl*
=====sqlite-3.5.1 — маленький движок баз данных SQL=====
Этот пакет предоставляет sqlite3 ([[http://www.sqlite.org/|www.sqlite.org]]) и библиотеки //sqlite3.so*//. SQLite быстр и эффективен, и при этом напрямую интегрируется в программы, использующие файлы баз данных:
# cd ..
# wget http://www.sqlite.org/sqlite-3.5.1.tar.gz
# tar xzf sqlite-3.5.1.tar.gz
# cd sqlite-3.5.1
# ./configure --prefix=/usr --disable-tcl
# make
# make DESTDIR=$PWD/_pkg install
# strip _pkg/usr/lib/*.so*
# strip _pkg/usr/bin/*
Установим sqlite3 и его библиотеки в папку rootfs:
# cp -a _pkg/usr/lib/*.so* $fs/usr/lib
# cp -a _pkg/usr/bin/* $fs/usr/bin
=====cdrkit-1.1.5 — утилиты для управления CD-ROM и ISO-образами=====
cdrkit ([[http://www.cdrkit.org/|www.cdrkit.org]]) имеет в своем составе средства управлениями CD-ROM. По умолчанию SliTaz устанавливает //wodim// для прожига дисков и //genisoimage// для создания ISO-образов. Компиляция осуществляется немного по-другому (через cmake), но это не должно вызвать проблем:
# cd ..
# wget http://cdrkit.org/releases/cdrkit-1.1.5.tar.gz
# tar xzf cdrkit-1.1.5.tar.gz
# cd cdrkit-1.1.5
# make
# make install PREFIX=$PWD/_pkg/usr
# strip -v _pkg/usr/bin/*
# strip -v _pkg/usr/sbin/*
# cp _pkg/usr/bin/genisoimage $fs/usr/bin
# cp _pkg/usr/bin/wodim $fs/usr/bin
Скопируем библиотеку //libcap.so.1//, которая необходима //wodim//:
# cp -a /lib/libcap.so* $fs/lib
=====cpio-2.8 — архиватор=====
cpio ([[http://www.gnu.org/software/cpio/|www.gnu.org/software/cpio/]]) предоставляет средства для управления cpio-архивами. Этот формат используется при создании пакетов SliTaz и образа initramfs для CD-ROM. Кстати, BusyBox содержит свою версию cpio, которая только распаковывает архивы:
# cd ..
# wget ftp://sunsite.cnlab-switch.ch/mirror/gnu/cpio/cpio-2.8.tar.gz
# tar xzf cpio-2.8.tar.gz
# cd cpio-2.8
# ./configure --prefix=/usr --bindir=/bin \
--libexecdir=/usr/bin --mandir=/usr/share/man \
--infodir=/usr/share/info
# make
# make DESTDIR=$PWD/_pkg install
# strip -v _pkg/bin/*
# strip -v _pkg/usr/bin/*
Установим cpio в папку ///bin//, а rmt — в ///usr/bin//. Также можно установить для него русскую локализацию:
# cp -a _pkg/bin/* $fs/bin
# cp -a _pkg/usr/bin/* $fs/usr/bin
# cp -a _pkg/usr/share/locale/ru $fs/usr/share/locale
=====microperl-5.8.8 — микрокопия Perl=====
Microperl — это крохотная версия Perl, использующая большинство важнейших функций этого языка. Более подробную информацию вы найдете в архиве с исходниками программы и в файле //README.micro//. Мы используем маленькую утилиту //sed// на файле конфигурации, которая осуществляет поиск модулей microperl в ///usr/lib/perl5//. После этого создадим ссылку на скрипт //#! /usr/bin/perl//:
# wget http://ftp.funet.fi/pub/CPAN/src/perl-5.8.8.tar.gz
# tar xzf perl-5.8.8.tar.gz
# cd perl-5.8.8
# sed -i s/'usr\/local'/'usr'/ uconfig.sh
# sed -i s/'perl5\/5.9'/'perl5'/ uconfig.sh
# sed -i s/'unknown'/'i486-pc-linux-gnu'/ uconfig.sh
# make -f Makefile.micro regen_uconfig
# make -f Makefile.micro
# strip microperl
# cp microperl $fs/usr/bin
# chroot $fs /bin/ash
/# cd /usr/bin
/# ln -s microperl perl
/# exit
=====module-init-tools-3.2 — утилиты для управления модулями ядра=====
Пакет [[http://ftp.kernel.org/pub/linux/utils/kernel/module-init-tools/|module-init-tools]] с сайта kernel.org включает modprobe, insmod, rmmod и lsmod. Мы выбрали именно эти утилиты, поскольку мы можем компилировать modutils/modprobe с поддержкой сжатых модулей (.gz) для экономии места. Для этого мы используем опцию --enable-zlib, а затем выполняем очистку и копирование исполняемых файлов. Мы не берем все собранные программы, а только то, что нам нужно — depmod, insmod, modinfo, modprobe и rmmod (помещаем их в ///sbin//), а также lsmod, который кладем в ///bin//:
# cd ..
# wget http://ftp.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.bz2
# tar xjf module-init-tools-3.2.tar.bz2
# cd module-init-tools-3.2
# ./configure --enable-zlib --prefix=/usr --sbindir=/sbin --bindir=/bin \
--sysconfdir=/etc --infodir=/usr/share/info --mandir=/usr/share/man
# make
# make DESTDIR=$PWD/_pkg install
# strip -v _pkg/sbin/{depmod,insmod,modinfo,modprobe,rmmod}
# strip -v _pkg/bin/lsmod
# cp -i _pkg/sbin/{depmod,insmod,modinfo,modprobe,rmmod} $fs/sbin
# cp -i _pkg/bin/lsmod $fs/bin
# cd ..
=====Копируем модули ядра=====
Копируем файлы из linux-2.6.20/_pkg:
# cp -a linux-2.6.20/_pkg/lib/* $fs/lib
===Сжимаем модули ядра===
Осуществляем сжатие модулей, что освободит нам около половины занятого места. Начнем с перехода в папку rootfs, после чего поищем в ней все файлы с расширением .ko и осуществим их сжатие. То же самое можно проделать и через скрипт //gzmodtaz.sh// из SliTaz tools:
# cd $fs
Используя gztazmod.sh:
# cp -v ../src/slitaz-tools-1.1/utils/gztazmod.sh sbin
# ./sbin/gztazmod.sh lib/modules/2.6.20-slitaz
Или вручную:
# cd lib/modules/2.6.20-slitaz
# find . -name "*.ko" -exec gzip '{}' \;
# sed 's/\.ko/.ko.gz/g' modules.dep > tmp.dep
# rm modules.dep
# mv tmp.dep modules.dep
=====Собираем initramfs и ISO-образ=====
Для создания нового ISO-образа можно использовать утилиту //mktaziso// из состава [[ru: cookbook:slitaz-tools|Slitaz tools]]. Или же можно создать новый образ initramfs, скопировать его в папку ///boot// в корневой папке CD-ROM (rootcd) и в конце собрать ISO-образ командой genisoimage:
# cd $fs
# find . -print | cpio -o -H newc | gzip -9 > ../rootfs.gz
# cd ..
# cp rootfs.gz rootcd/boot
# genisoimage -R -o slitaz-test.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
Тестируем ISO-образ:
# qemu -cdrom slitaz-test.iso
===Следующая глава===
Следующая глава называется [[ru:scratchbook:base-ncurses|"Базовые приложения ncurses"]]. В ней рассказывается об установке и настройке библиотек и приложений ncurses.
----
Статью перевел [[http://forum.slitaz.org/index.php/profile/1273/Cyril|Cyril]]