===== Окружение chroot=====
Этот документ описывает этапы, необходимые для создания окружения chroot, что даст вам возможность изменить корень файловой системы, и вы сможете в ней работать. При этом вы получите возможность компилировать, тестировать и разрабатывать SliTaz, не боясь повредить основную систему, в которой вы находитесь. В качестве основной системы может служить сам SliTaz, установленный на жесткий диск, или любая другая система GNU/Linux, например, Debian, Fedora, PCLinuxOS и др. Можно также создать окружение chroot в режиме Live CD + USB-носитель. Единственное необходимое условие — наличие ISO-образа SliTaz и немного времени. Важно помнить, что все нижеприведенные команды выполняются от имени системного администратора (root).
===Подготовка окружения===
Для начала необходимо распаковать содержимое ISO-образа в папку, которая станет нашим chroot. Эту директорию можно создать в любом месте, мы же будем использовать папку ///home/slitaz/chroot-env//. Чтобы распаковать образ, мы должны смонтировать эту папку в режиме петли (loop), а затем скопировать в нее файл сжатой корневой файловой системы (//rootfs.gz//). Допустим, образ диска уже находится в этой папке, тогда выполним следующие команды:
# mkdir /tmp/loop
# mount -o loop slitaz-cooking.iso /tmp/loop
# mkdir -p /home/slitaz/chroot-env
# cp /tmp/loop/boot/rootfs.gz /home/slitaz/chroot-env
# umount /tmp/loop
Теперь у нас есть копия сжатой файловой системы, давайте распакуем ее (это cpio-архив, сжатый при помощи gzip или lzma). По завершении удалим сам //rootfs.gz//, он нам больше не нужен:
# cd /home/slitaz/chroot-env
# (zcat rootfs.gz 2>/dev/null || lzma d rootfs.gz -so) | cpio -id
# rm rootfs rootfs.gz
Если распаковка файла, сжатого lzma, не удалась, можно использовать следующий способ:
# unlzma rootfs.gz -S .gz
# cat rootfs | cpio -id
=====Использование окружения=====
Перед тем как начать работать в окружении chroot, потребуется смонтировать некоторые виртуальные файловые системы и использовать команду chroot. С целью упрощения этой задачи напишем маленький скрипт, автоматизирующий данный процесс. Будем использовать папку ///home/slitaz/chroot-env//, а сам скрипт назовем //chroot_in_env.sh// и поместим его в ///home/slitaz//. В других системах (не SliTaz) вы можете снять комментарий со строк, монтирующих ///dev// и ///tmp//. Этот скрипт можно вставить в любой текстовый редактор, чтобы не тратить время на его набор.
# cat > /home/slitaz/chroot_in_env.sh << "EOF"
#!/bin/sh
# Chroot in SliTaz to hack.
#
ROOTFS="/home/slitaz/chroot-env"
# подключение виртуальной файловой системы ядра и chroot.
#
#mount --bind /dev $ROOTFS/dev
#mount --bind /tmp $ROOTFS/tmp
mount -t proc proc $ROOTFS/proc
mount -t sysfs sysfs $ROOTFS/sys
mount -t devpts devpts $ROOTFS/dev/pts
mount -t tmpfs shm $ROOTFS/dev/shm
echo "Переключение chroot в $ROOTFS... "
chroot $ROOTFS /bin/sh --login
# отключение виртуальной файловой системы ядра при выходе.
#
umount $ROOTFS/dev/shm
umount $ROOTFS/dev/pts
umount $ROOTFS/sys
umount $ROOTFS/proc
#umount $ROOTFS/tmp
#umount $ROOTFS/dev
echo "Выход из окружения chroot $ROOTFS... "
EOF
Чтобы протестировать окружение, сделаем скрипт исполняемым и запустим его:
# chmod +x /home/slitaz/chroot_in_env.sh
# sh /home/slitaz/chroot_in_env.sh
===Запуск сети===
Чтобы включить сеть и иметь возможность скачивать и устанавливать пакеты для разработки, запустим клиент DHCP и укажем нужный интерфейс, например:
# udhcpc -i eth1
===Установка пакетов===
Когда сеть заработает, обновите список пакетов и используйте команду //tazpkg get-install// для их установки. Если соединения нет, можно брать пакеты из другой системы, копировать их в окружение chroot и устанавливать командой //tazpkg install//. Для примера, установим базовые утилиты для компиляции:
# tazpkg recharge
# tazpkg get-install slitaz-toolchain
Как только окружение будет настроено, можно будет компилировать приложения из исходников и создавать из них пакеты, тестовые скрипты и т.д. Подробную информацию вы найдете в [[ru:cookbook:start|Cookbook]].
===Выход из окружения===
Для выхода из окружения chroot просто наберите //exit//, при этом скрипт //chroot_in_env.sh// отмонтирует виртуальные файловые системы от ядра Linux и завершит свою работу:
# exit
#
----
Статью перевел [[http://forum.slitaz.org/index.php/profile/1273/Cyril|Cyril]]