Окружение 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
Как только окружение будет настроено, можно будет компилировать приложения из исходников и создавать из них пакеты, тестовые скрипты и т.д. Подробную информацию вы найдете в Cookbook.
Выход из окружения
Для выхода из окружения chroot просто наберите exit, при этом скрипт chroot_in_env.sh отмонтирует виртуальные файловые системы от ядра Linux и завершит свою работу:
# exit #
Статью перевел Cyril