Гид по технологиям

Как создать OpenVZ-шаблон Debian Wheezy (Testing)

• 5 min read • DevOps • Обновлено 24 Nov 2025
Шаблон OpenVZ для Debian Wheezy — создание
Шаблон OpenVZ для Debian Wheezy — создание

Важно: инструкция рассчитана на хост OpenVZ на базе Debian. Все команды с root-привилегиями выполняйте на хосте или в контейнере в соответствии с шагами.


1 Предварительное примечание

Это руководство основано на общем процессе создания Debian-шаблонов для OpenVZ и адаптировано под Debian Wheezy (Debian Testing на момент написания). Я предполагаю, что у вас уже есть Debian-подобный OpenVZ-хост. Аналогичные шаги применимы для создания шаблонов Debian Lenny и некоторых версий Ubuntu, но могут потребоваться небольшие правки.

Важно: автор не гарантирует работоспособность на всех конфигурациях. Тестируйте в безопасной среде.

2 Подготовка хоста

Эти шаги выполняются на хост-системе.

Мы будем использовать debootstrap для установки гостевой системы Wheezy в каталог контейнера.

Установите debootstrap, если он не установлен:

apt-get install debootstrap

Убедитесь, что /vz является символьной ссылкой на /var/lib/vz (если это необходимо в вашей конфигурации):

ln -s /var/lib/vz /vz

Теперь установим 64-битную систему Debian Wheezy в каталог контейнера (в примере используется ID контейнера 777):

debootstrap --arch amd64 wheezy /vz/private/777 ftp://ftp.de.debian.org/debian/

Если нужен i386, замените –arch на i386:

debootstrap --arch i386 wheezy /vz/private/777 ftp://ftp.de.debian.org/debian/

Совет: используйте зеркала, ближайшие к вам (в примере: ftp.de.debian.org). Замените de на код вашей страны при необходимости.

После завершения откройте /etc/sysctl.conf на хосте:

vi /etc/sysctl.conf

и добавьте настройки OpenVZ (вставьте в конец файла):

| [...] ### OpenVZ settings # On Hardware Node we generally need packet # forwarding enabled and proxy arp disabled net.ipv4.conf.default.forwarding=1 net.ipv4.conf.default.proxy_arp = 0 net.ipv4.ip_forward=1 # Enables source route verification net.ipv4.conf.all.rp_filter = 1 # Enables the magic-sysrq key kernel.sysrq = 1 # TCP Explict Congestion Notification net.ipv4.tcp_ecn = 0 # we do not want all our interfaces to send redirects net.ipv4.conf.default.send_redirects = 1 net.ipv4.conf.all.send_redirects = 0 |

Примените изменения:

sysctl -p

Далее применим базовую конфигурацию OpenVZ к контейнеру:

vzctl set 777 --applyconfig basic --save

Вы увидите предупреждение о том, что /etc/vz/conf/777.conf не найдено — его можно игнорировать; команда создаст конфигурационный файл.

Добавьте переменную OSTEMPLATE в созданный файл конфигурации контейнера:

sh -c 'echo OSTEMPLATE="debian-7.0"' >> /etc/vz/conf/777.conf

Замените debian-7.0 на подходящую строку для вашей дистрибуции (например, debian-6.0 или ubuntu-11.04).

Назначьте свободный IP из вашей подсети и как минимум один DNS-сервер (пример — локальная сеть 192.168.0.x и Google DNS):

vzctl set 777 --ipadd 192.168.0.110 --save
vzctl set 777 --nameserver 8.8.8.8 --nameserver 8.8.4.4 --save

Проверьте наличие /var/lib/vz/private/777/dev/ptmx:

ls -l /var/lib/vz/private/777/dev/ptmx

Ожидаемый вывод примерно такой:

root@server1:~# ls -l /var/lib/vz/private/777/dev/ptmx
crw-rw-rw- 1 root tty 5, 2 Mar  4 12:53 /var/lib/vz/private/777/dev/ptmx
root@server1:~#

Если файл отсутствует, создайте его:

mknod --mode 666 /var/lib/vz/private/777/dev/ptmx c 5 2

Теперь стартуем контейнер и входим в него:

vzctl start 777
vzctl enter 777

3 Подготовка контейнера

Эти команды выполняются внутри контейнера.

Установите корректный PATH для выполнения административных команд:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Отредактируйте /etc/apt/sources.list и укажите зеркала близкие к вам:

vi /etc/apt/sources.list

Содержимое примера:

| deb http://ftp.de.debian.org/debian wheezy main contrib deb http://security.debian.org wheezy/updates main contrib |

Обновите базу пакетов и установите обновления:

apt-get update
apt-get upgrade

Установите минимальный набор пакетов для шаблона (пример):

apt-get install ssh quota less vim-nox

Задайте правильные права для /root:

chmod 700 /root

Если вы хотите отключить логин root, выполните:

usermod -L root

Автор предпочитает сохранять возможность входа как root, поэтому этот шаг опционален.

Отключите getty, запретите sync() для syslog и исправьте /etc/mtab:

sed -i -e '/getty/d' /etc/inittab
sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /etc/*syslog.conf
rm -f /etc/mtab
ln -s /proc/mounts /etc/mtab

Удалите пакеты, которые не хотите включать в шаблон (пример):

dpkg --purge modutils ppp pppoeconf pppoe pppconfig module-init-tools

Удалите системные ссылки автозагрузки для ряда сервисов:

update-rc.d-insserv -f klogd remove
update-rc.d-insserv -f quotarpc remove
update-rc.d-insserv -f exim4 remove
update-rc.d-insserv -f inetd remove

Каждый контейнер должен иметь собственную пару SSH-ключей. Удалите ключи этого шаблона:

rm -f /etc/ssh/ssh_host_*

Создайте скрипт, который сгенерирует новые ключи при первом запуске контейнера:

vi /etc/init.d/ssh_gen_host_keys

| #!/bin/sh ### BEGIN INIT INFO # Provides: Generates new ssh host keys on first boot # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: Generates new ssh host keys on first boot # Description: Generates new ssh host keys on first boot ### END INIT INFO ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N "" ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N "" insserv -r /etc/init.d/ssh_gen_host_keys rm -f \$0 |

Сделайте скрипт исполняемым и добавьте его в автозапуск:

chmod a+x /etc/init.d/ssh_gen_host_keys
insserv /etc/init.d/ssh_gen_host_keys

Настройте часовой пояс:

dpkg-reconfigure tzdata

Очистите кэш пакетов перед упаковкой шаблона:

apt-get --purge clean

Выйдите из контейнера:

exit

4 Очистка, создание шаблона и тестирование

Эти шаги выполняются на хосте.

Удалите IP-адрес, nameserver и hostname из контейнера перед упаковкой:

vzctl set 777 --ipdel all --save
cat /dev/null > /vz/private/777/etc/resolv.conf
rm -f /vz/private/777/etc/hostname

Остановите контейнер:

vzctl stop 777

Перейдите в каталог контейнера и упакуйте его в шаблон:

cd /vz/private/777

# Обратите внимание на точку в конце!
tar --numeric-owner -zcf /vz/template/cache/debian-7.0-amd64-minimal.tar.gz .

Проверьте содержимое каталога шаблонов:

ls -lh /vz/template/cache

Пример вывода:

root@server1:/vz/private/777# ls -lh /vz/template/cache
 total 194M
 -rw-r--r-- 1 root root  80M Feb  7  2011 debian-6.0-amd64-minimal.tar.gz
 -rw-r--r-- 1 root root 114M Sep  1 22:55 debian-7.0-amd64-minimal.tar.gz
 root@server1:/vz/private/777#

Поздравляем — у вас появился шаблон!

Создайте тестовый контейнер из шаблона (в примере ID 888):

vzctl create 888 --ostemplate debian-7.0-amd64-minimal
vzctl start 888

Проверьте список процессов внутри тестового контейнера:

vzctl exec 888 ps ax

Пример ожидаемого вывода:

root@server1:/vz/private/777# vzctl exec 888 ps ax
   PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 init [2]
  316 ?        Sl     0:00 /usr/sbin/rsyslogd -c5
  326 ?        Ss     0:00 /usr/sbin/cron
  335 ?        Ss     0:00 /usr/bin/dbus-daemon --system
  344 ?        Ss     0:00 /usr/sbin/sshd
  358 ?        Rs     0:00 ps ax
root@server1:/vz/private/777#

Если контейнер работает как ожидается, остановите и удалите тестовый контейнер:

vzctl stop 888
vzctl destroy 888
rm /etc/vz/conf/888.conf.destroyed

Удалите также контейнер, из которого вы делали шаблон (в примере 777):

cd
vzctl destroy 777
rm /etc/vz/conf/777.conf.destroyed

Если вы хотите сделать новый шаблон шаблоном по умолчанию, укажите DEF_OSTEMPLATE в /etc/vz/vz.conf:

vi /etc/vz/vz.conf

| [...] DEF_OSTEMPLATE="debian-7.0-amd64-minimal" [...] |

5 Полезные ссылки


Рекомендации по безопасности и поддержке

Важно выполнить дополнительные шаги безопасности перед использованием шаблона в продакшене:

  • Обновляйте пакеты в шаблоне перед упаковкой (apt-get update && apt-get upgrade).
  • Отключите пароли по умолчанию и настройте SSH (используйте протокол 2, отключите root-login по паролю, включите аутентификацию по ключам при необходимости).
  • Ограничьте сервисы, запускаемые в шаблоне; чем меньше активных демонов — тем меньше поверхность атаки.
  • Включите и протестируйте правила брандмауэра на хосте (iptables/nftables) для контейнерных сетей.

Пример быстрых настроек SSH в шаблоне (внутри контейнера перед упаковкой):

  • Убедитесь, что в /etc/ssh/sshd_config: PermitRootLogin yes/no по вашему решению, Protocol 2.
  • Удалите слабые алгоритмы и настройте только публичные ключи при необходимости.

Советы по отладке — когда что-то не работает

  • Контейнер не стартует: проверьте vzctl start вывод и /var/log/messages или /var/log/syslog хоста.
  • Проблемы с сетевыми интерфейсами: проверьте IP назначение (vzctl exec ifconfig или ip addr) и маршрутизацию на хосте.
  • Проблемы с правами в /dev: проверьте наличие /dev/ptmx и корректность mknod.
  • Если при создании шаблона вы видите пустой процесс-лист — контейнер не запустился; проверьте init и доступность /sbin/init.

Альтернативные подходы и совместимость

  • Вместо debootstrap можно использовать распаковку готовой минимальной rootfs, но debootstrap удобен и прозрачен.
  • Для более новых версий Debian/Ubuntu используйте соответствующие имена ostemplate (например, debian-8.0 или ubuntu-18.04) и актуальные зеркала.
  • OpenVZ 6 (или более поздние реализации) может требовать других настроек; проверяйте документы конкретной версии OpenVZ.

Чек-листы по ролям

Администратор хоста:

  • Установить debootstrap и необходимые утилиты.
  • Проверить sysctl-опции и применить их.
  • Создать контейнер, назначить IP/Nameserver.
  • Упаковать и проверить шаблон.

DevOps-инженер/разработчик шаблонов:

  • Настроить минимальный набор пакетов.
  • Удалить ненужные демоны и ключи.
  • Добавить скрипт генерации SSH-ключей при первом запуске.
  • Тестировать разворачивание и мониторинг.

Малый глоссарий (1 строка)

  • OpenVZ — контейнерная виртуализация на уровне ОС для Linux; предоставляет изолированные контейнеры (VE/CT).
  • debootstrap — инструмент создания минимальной Debian-подсистемы «с нуля» в каталоге.
  • OSTEMPLATE — метка/имя шаблона, используемая vzctl для создания контейнеров.

Критерии приёмки

  • Шаблон успешно создан в /vz/template/cache и имеет компактный размер.
  • Контейнер, созданный из шаблона, стартует и показывает список процессов.
  • При первом старте контейнера генерируются новые SSH-ключи.
  • Нет сохранённых уникальных сетевых настроек (IP, hostname, resolv.conf) в шаблоне.

Быстрое восстановление/откат

Если шаблон испорчен или содержит нежелательные данные, удалите/переименуйте файл в /vz/template/cache и сгенерируйте шаблон повторно из исходного контейнера.


Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро