31 мар. 2011 г.

VDS защищается от неопытных пользователей

Похоже, системные администраторы в немецких дата-центрах сделали всё возможное, чтобы не дать неопытному человеку самостоятельно поднять сервер на VDS (скорее всего они пойдут в платную техподдержку).
Вот пример: провайдер interserver.ru. Чтобы поднять обычный LAMP сервер на SUSE11.3, пришлось столкнуться со следующим:
1) "Контейнер" (операционная система) содержит крайне урезанный набор пакетов. Практически ничего нет. это конечно хорошо, ничего лишнего, поскольку каждый мегабайт на счету, но... YaST2 не работает:


Это связано с тем, что не установлен пакет yast2-ncurses-pkg и в графическом интерфейсе yast его никак не установить.

2) Делаем попытку каким-то образом установить недостающий пакет, не используя установщиков с интерфейсом пользователя. На счастье в SuSE есть такая утилита командной строки, как zypper.
Но для начала надо его настроить, добавив репозитории. Тоже не всякий виндовый юзер сообразит как это делается. Вот так:
zypper ar -n suse11.3 http://ftp.gwdg.de/pub/linux/misc/packman/suse/11.3/ suse11.3
zypper ar -n opensuse11.3 http://download.opensuse.org/distribution/11.3/repo/oss/suse/ opensuse11.3

3) Далее, нас, как оказывается, не спасает даже команда zypper in yast2-ncurses-pkg.
Понимаем, что это было зря, поскольку теперь yast выдает ошибку "Error while creating client module sw_single"... Забиваем окончательно на yast, эту команду не вводим, чтобы не устанавливались лишние пакеты. Переходим на командную строку zypper. Все-таки командная строка - сила!

4) Ура. Мы на втором уровне :) и теперь снова можем ставить недостающий софт на VDS! делаем это:
zypper in mysql php php5-mysql mcrypt apache2-mod_php5

Далее оказывается, что установить mysql на автозапуск командой chkconfig mysql 3 невозможно, поскольку есть бага в самом скрипте крона!
# chkconfig mysql 3
insserv: warning: script 'S10vzquota' missing LSB tags and overrides
insserv: warning: script is corrupt or invalid: /etc/init.d/rc6.d/S00vzreboot
insserv: warning: script 'vzquota' missing LSB tags and overrides
insserv: warning: script 'S10vzquota' missing LSB tags and overrides
insserv: warning: script is corrupt or invalid: /etc/init.d/rc6.d/S00vzreboot
insserv: warning: script 'vzquota' missing LSB tags and overrides
insserv: FATAL: service boot.shm has to exists for service boot.rootfsck
insserv: exiting now!
/sbin/insserv failed, exit code 1
Вставляем в начало скрипта /etc/init.d/rc6.d/S00vzreboot комменты так, как написано тут:
http://serverfault.com/questions/248325/debian-squeeze-vzquota
Это избавит нас от части ошибок.

Далее, делаем такие две команды:
# mv /etc/init.d/rc6.d/S00vzreboot /etc/init.d/vzreboot
# ln -s /etc/init.d/vzreboot /etc/init.d/rc6.d/S00vzreboot
(спасибо http://accessdlab.blogspot.com/2010/06/s00vzreboot-trouble.html за решение)

Это приведет нас к такому сообщению об ошибке. Уже лучше:
# chkconfig mysql 3
insserv: FATAL: service boot.shm has to exists for service boot.rootfsck
insserv: exiting now!
/sbin/insserv failed, exit code 1
Эта ошибка из-за того, что в файле /etc/init.d/boot.rootfsck написано:
# Required-Start: boot.shm
А сервиса boot.shm в контейнере suse-11.3 нет. Поэтому просто удаляем слово boot.shm оттуда.

Всё, после этого установить mysql как сервис получается, ура!

перезапускаем апач:
service apache2 restart

И всё, LAMP работает, т.е. скрипты на PHP можно писать и тестировать.