Не запускаются сервисы на Debian 7 Wheezy в OpenVZ-котейнере
Не запускаются сервисы на Debian 7 Wheezy в OpenVZ-котейнере¶
Что делать, когда при попытке войти в контейнер даже не доступна консоль¶
Если при попытке залогиниться в контейнер мы делаем
vzctl enter $CTID
enter into CT 1010 failed
Unable to open pty: No such file or directory
Выполняем
vzctl exec $CTID "cd /dev; /sbin/MAKEDEV pty"
vzctl exec $CTID "cd /dev; /sbin/MAKEDEV tty"
vzctl exec $CTID "cd /dev; /sbin/MAKEDEV pts"
vzctl enter $CTID
на этот раз vzctl enter должен отработь корректно.
Поиск причины возникновения проблемы¶
Если на Debian 7 Wheezy после dist-upgrade перестали запускаться сервисы, хотя сам контейнер вроде стартует, проверяем что показывает команда
sudo dpkg -l|grep sysvinit
ii sysvinit 2.88dsf-41+deb7u1 amd64 System-V-like init utilities
ii sysvinit-utils 2.88dsf-41+deb7u1 amd64 System-V-like utilities
а не так
ii sysvinit-utils 2.88dsf-41+deb7u1 amd64 System-V-like utilities
стоит глянуть на результат выполнения
init --version
init --version
init (upstart 1.6.1)
Copyright (C) 2012 Scott James Remnant, Canonical Ltd.
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
будет видно что-то другое – можете себя поздравить, вы только что обнаружили источник данной проблемы.
Debian 7 на OpenVZ корректно запускается только с upstart, он не запускается нормально в контейнере с sysvinit. Подробно данная проблема описана на (странице)[https://bugs.openvz.org/browse/OVZ-5739]
Решение проблемы¶
Качаем пакет с upstart с архивного репозитория Debian 7 Wheezy¶
Внутри котейнера¶
Если сеть в контейнере вы уже подняли вручную командой
service networking start
или с помощью утилит ip/ifconfig/route, вам будет проще решить данную проблему. Хуже, когда сеть не заводится.
Для начала качаем куда-то, к примеру в /root/ файл upstart_1.6.1-1_amd64.deb.
Внимание
Если у вашего контейнера другая архитектура, идём на страницу.
Делаем это так
cd /root/
wget http://archive.debian.org/debian/pool/main/u/upstart/upstart_1.6.1-1_amd64.deb
С хост-ноды с копированием в каталог /root/ контейнера¶
Eсли не смогли вручую запустить сеть на самом конейнере, но у вас есть доступ к хост-ноде OpenVZ, на которой расположен контейнер, качаем пакет на хост-ноду
cd /tmp/
wget http://archive.debian.org/debian/pool/main/u/upstart/upstart_1.6.1-1_amd64.deb
cp upstart_1.6.1-1_amd64.deb /vz/root/${CTID}/root/
где вместо ${CTID} указываем Container ID(CTID) вашего котейнера.
После чего заходим(переходим, если консоль котейнера у вас уже открыта в другом тайле/вкладке), с хост-ноды делаем это командой вида
vzctl enter ${CTID}
Удаляем sysvinit¶
Выполняем
sudo apt-get remove sysvinit
Ставим upstart¶
cd /root
sudo dpkg -i upstart_1.6.1-1_amd64.deb
init --version
Защищаем себя от подобных казусов в будущем¶
Открываем файл /etc/apt/preferences в своём любимом текстовом редакторе(у нубов это обычно nano, у всех остальных – vim/emacs)
sudo nano /etc/apt/preferences
Добавляем в файл
Package: sysvinit
Pin: release c=main
Pin-Priority: -1
После чего выходим из редактора, и отправляем контейнер в ребут. Котейнер должен подняться успешно, сервисы будут запущены так, как ожидалось.