Применение бота Google Translate в мирных целях конвертирование видео
Создано: 21-01-2010 09:12:27 изменено: 27-03-2010 20:44:30  Метки: deb
http://bappoy.pp.ru/2010/01/20/debian-chroot.html

Опубликовано 20.01.2010

Для тестирования различных версий нашего продукта (внутри — БД под управлением mysql и интерфейс к ней на PHP под Apache2) требуется быстро создавать многочисленные chroot-окружения на выделенном сервере и управляться с ними.

В базовой системе (lenny) оставляем только функционал, необходимый для управления всем хозяйством, лично мне необходимы mc, openssh, vim, bash_completion и иногда svn. Также неплохо поиметь где-нибудь (да хоть на этой же машине) кэширующий прокси для репозиториев debian, типа apt-proxy или apt-cacher, чтобы не создавать излишнюю нагрузку на региональные зеркала. У нас используется apt-cacher, работающий по адресу http://apt:3142.

Debootstrap ­— основная рабочая лошадка:

apt-get install debootstrap
debootstrap --include=mc,ssh,vim lenny /systems/lenny http://apt:3142/ftp.debian.org/debian/

Первый аргумент — название релиза, второй — путь, куда устанавливается система, третий — адрес репозитория. В опции –include через запятую указываются пакеты, которые необходимы, но не входят в минимальную базовую систему. Debootstrap выкачивает из репозитория и устанавливает минимальный набор пакетов, теоретически сразу после этого можно делать chroot /systems/lenny и переходить к работе, но осталась еще несколько немаловажных доделок:

Добавляем идентификатор системы, который будет отображаться в скобках в приглашении шелла (читай — bash), выполняемом в chroot-окружении:

echo lenny > /systems/lenny/etc/debian_chroot

Но работа в основном ведется от имени root, а в squeeze и sid у root’а в .bashrc переменная окружения PS1 переопределяется и этот идентификатор пропадает. Поэтому если делаем виртуалку squeeze, то строчку с PS1 в /root/.bashrc лучше закомментировать:

sed -i 's/^\(export PS1.*\)$/#\1/g' /systems/squeeze/root/.bashrc

Монтируем /dev/pts — виртуальную файловую систему, которая динамически создаёт файлы терминалов /dev/pts/X для каждого нового подключения; это необходимо для нормального функционирования многих программ, работающих с терминалом, в т.ч. скриптов postinst и config пакета mysql-server:

mount -t devpts devpts /systems/lenny/dev/pts

Монтируем /proc (реально proc в новом месте будет содержать ту же информацию, что и общесистемный /proc):

mount -t proc proc /systems/lenny/proc

Чтобы apt-get не ругался на неподписанные пакеты при установке, необходимо обновить файл Release.gpg, т.к. по умолчанию debootstrap его не устанавливает. Это проще всего сделать обновлением индексных файлов репозитория:

chroot /systems/lenny apt-get update

После этого уже можно делать chroot /systems/lenny, устанавливать и настраивать пакеты, запускать/останавливать сервисы и т.д. Главная проблема при этом ­— следить за тем, чтобы сервисы в разных chroot’ах не конфликтовали, пытаясь занять порт на одном IP-адресе. Обычно добавляются виртуальные сетевые интерфейсы и им назначаются виртуальные же IP-адреса, которые и указываются в настройках сервисов.

1855 просмотров комментировать