Sunday, 26 September 2010

Тест драйв - обновление Debian с ISPManager Lite с Lenny до Squeeze

Итак, имеем Debian 5 Lenny забитый веб-софтом и панелькой ISPManager Lite. Требуется обновить его до следующей стабильной версии Debian - Squeeze (честно говоря, она еще не совсем стабильная, а станет ей где-то в декабре). Список софта следующий: Apache 2.2, Postfix, quota, php, Proftpd, dovecot, Bind, MySQL, PhpMyAdmin, Awstats, SquirrelMail, Nginx, mod_fcgid.

Итак, приступаем к апдейту - он подробно описан в моем другом посте http://phpsuxx.blogspot.com/2009/03/debian-4-etch-debian-5-lenny.html за тем исключением, что менять нужно не etch на lenny, а lenny на squeeze.

В процессе apt-get upgrade будут показаны следующие уведомления.

"Services to restart for PAM library upgrade", на него отвечаем утвердительно.

Также будет вопрос "Configuration file `/etc/console-tools/config' Modified (by you or by a script) since installation" на него отвечаем Y.

Еще будет "Configuration file `/etc/sysctl.conf' Modified (by you or by a script) since installation.", также отвечаем Y.

На вопрос "Configuration file `/etc/mime.types' Modified (by you or by a script) since installation." ответ тоже Y.

На вопрос "Configuration file `/etc/cron.d/mdadm Modified (by you or by a script) since installation." также ответ Y.

На вопрос "Configuration file `/etc/mysql/my.cnf' Modified (by you or by a script) since installation." отвечаем Y, если нету продвинутого тюнинга конфига MySQL, в противном случае просто жмем Enter.

В процессе apt-get dist-upgrade будут показаны следующие уведомления.

На вопрос "Configuring dash Use dash as the default system shell (/bin/sh)?" отвечаем Yes (этот вопрос в связи с тем, что стандартный интерпретатор в Squeeze теперь dash).

Далее будет задан вопрос про grub2: "GRUB 0.97, the Legacy version of GNU GRUB, is from now on considered a deprecated option. Your system is now being upgraded to GRUB 2.", соглашаемся.

Далее будет вопрос "Configuring grub-pc Chainload from menu.lst?" - это вопрос на тему, загрузить ли данные об операционных системах из старого grub, соглашаемся на это.

Далее будет еще вопрос "The following Linux command line was extracted from /etc/default/grub or the `kopt' parameter in GRUB Legacy's menu.lst. Please verify that it is correct, and modify it if necessary. ", на него смело отвечаем Ok, если выдается пустая строчка ввода.

Теперь будет вопрос "ProFTPd configuration Run proftpd: standalone", соглашаемся с вариантом standalone.

Теперь вопрос про "Configuring phpmyadmin Please choose the web server that should be automatically configured to run phpMyAdmin.", на него просто отвечаем согласием не выбирая никакого веб-сервера в списке - потом придется его настроить отдельно в ISPManager.

Еще вопрос "Postfix Configuration, General type of mail configuration" выбираем в списке " No configuration" и соглашаемся.

Далее вопрос "Services to restart for GNU libc library upgrade" соглашаемся на это.

Далее у меня наступил EPIC FAIL.

Errors were encountered while processing:
/var/cache/apt/archives/udev_160-1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

И при попытке повторить apt-get dist-upgrade был постигнут очередным:
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
insserv : Breaks: sysv-rc (< 2.87dsf-3) but 2.86.ds1-61 is installed E: Unmet dependencies. Try using -f.









Ну что же, пробуем сделать, как говорит инсталлятор:
apt-get install -f

Теперь мне была выдана ошибка:
Configuring sysv-rc Unable to migrate to dependency-based boot system Tests have determined that problems in the boot system exist which prevent migration to dependency-based boot sequencing: insserv: There is a loop between service mountall and checkfs if started, insserv: loop involving service checkfs at depth 9, insserv: loop involving service lvm2 at depth 8, insserv: loop involving service mountall at depth 10, insserv: There is a loop between service mountall and checkfs if started, insserv: loop involving service mdadm at depth 11, insserv: loop involving service networking at depth 16, insserv: loop involving service rsyslog at depth 16, insserv: loop involving service mountall-bootclean at depth 16, If the reported problem is a local modification, it needs to be fixed manually. If it's a bug in the package, it should be reported to the BTS and fixed in the package. See http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot for more information about how to fix the problems preventing migration. To reattempt the migration process after the problems have been fixed, run "dpkg-reconfigure sysv-rc".

С этой ошибкой приходится лишь соглашаться и думать потом, как ее разрулить.

Далее появляется новый герой, повествующий о том, что имена дисковых устройств могут поменяться:
Configuring linux-base The new Linux kernel version provides different drivers for some PATA (IDE) controllers. The names of some hard disk, CD-ROM, and tape devices may change. It is now recommended to identify disk devices in configuration files by label or UUID (unique identifier) rather than by device name, which will work with both old and new kernel versions.If you choose to not update the system configuration automatically, you must update device IDs yourself before the next system reboot or the system may become unbootable. Update disk device IDs in system configuration?

Тут я предлагаю пойти на риск и ответить Yes.

Далее получаем отчет о том, что имена для CD устройств были изменены:
Configuring linux-base

These configuration files will be updated:
/etc/udev/rules.d/70-persistent-cd.rules

The device IDs will be changed as follows:

+ PATH=pci-0000:00:01.1-scsi-1:0:0:0
+ PATH=pci-0000:00:07.1-scsi-0:0:0:0

Apply configuration changes to disk device IDs?

Соглашаемся с заменой.

Далее будет еще уведомление, что один из конфиг-файлов по-прежнему содержит устаревшее имя:
Configuring linux-base

Configuration files still contain deprecated device names
The following configuration files still use some device names that may change when using the new kernel: /etc/initramfs-tools/conf.d/resume: /dev/sda1

Далее вопрос "Configuration file `/etc/ntp.conf' Modified (by you or by a script) since installation.", отвечаем Y.

Далее "Configuration file /etc/ssh/ssh_config", также отвечаем Y.

Далее вопрос " A new version of configuration file /etc/dovecot/dovecot.conf is available, but the version installed currently has been locally modified.", тут нужно выбрать "keep the local version currently installed" и подтвердить.

Далее вопрос "Configuration file `/etc/apache2/ports.conf' Modified (by you or by a script) since installation." отвечаем Y.

Далее вопрос "Configuration file `/etc/apache2/apache2.conf' Modified (by you or by a script) since installation.", отвечаем на него N, иначе нам сотрет все сайты из конфига Апача.

Далее запрос про PHP: "A new version of configuration file /etc/php5/apache2/php.ini is available, but the version installed currently has been locally modified.", тут я рекомендую " install the package maintainer's version ", так как в любом случае PHP придется реконфигурировать почти полностью и заново ставить все расширения, так как изменилась версия c 5.2 до 5.3.

Все, теперь мой apt-get install -f кончился и я повторно запускаю apt-get dist-upgrade.

И повторно:
/var/cache/apt/archives/udev_160-1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

И повторно
apt-get install -f

Вопрос "Configuration file `/etc/nginx/nginx.conf' Modified (by you or by a script) since installation." отвечаем N, иначе сотрет все виртуальные хосты.

Далее "The phpmyadmin package must have a database installed and configured before it can be used. This can be optionally handled with dbconfig-common." отвечаем N (я так и не понял, про что спрашивал этот скрипт).

Повторяем
apt-get dist-upgrade

Но теперь получаем явный посыл от udev:
apt-get dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
udev
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B/479kB of archives.
After this operation, 815kB of additional disk space will be used.
Do you want to continue [Y/n]? Y
Preconfiguring packages ...
(Reading database ... 45181 files and directories currently installed.)
Preparing to replace udev 0.125-7+lenny3 (using .../archives/udev_160-1_amd64.deb) ...


Since release 150, udev requires that support for the CONFIG_SYSFS_DEPRECATED
feature is disabled in the running kernel.

Please upgrade your kernel before or while upgrading udev.

AT YOUR OWN RISK, you can force the installation of this version of udev
WHICH DOES NOT WORK WITH YOUR RUNNING KERNEL AND WILL BREAK YOUR SYSTEM
AT THE NEXT REBOOT by creating the /etc/udev/kernel-upgrade file.
There is always a safer way to upgrade, do not try this unless you
understand what you are doing!


dpkg: error processing /var/cache/apt/archives/udev_160-1_amd64.deb (--unpack):
subprocess new pre-installation script returned error exit status 1
configured to not write apport reports
Errors were encountered while processing:
/var/cache/apt/archives/udev_160-1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
test:~#

Иными словами, новы udev требует, чтобы опция ядра CONFIG_SYSFS_DEPRECATED была отключена, но в Debian Lenny она еще включена:
cat /boot/config-`uname -r` | egrep 'CONFIG_SYSFS_DEPRECATED'
CONFIG_SYSFS_DEPRECATED=y

Итак, пробуем перезагрузиться:
shutdown -r now

После перезагрузки сервер поднялся, ядро встало новое:
uname -a
Linux test.ru 2.6.32-5-amd64 #1 SMP Fri Sep 17 21:50:19 UTC 2010 x86_64 GNU/Linux

И в новом ядре данная опция отключена, как и требует новый udev:
cat /boot/config-`uname -r` | grep CONFIG_SYSFS_DEPRECATED
# CONFIG_SYSFS_DEPRECATED_V2 is not set

Заканчиваем обновление:
apt-get dist-upgrade

И еще раз перезагружаемся для проверки работы udev:
shutdown -r now

Все, после перезагрузки проверяем версию дистрибутива:
cat /etc/debian_version
squeeze/sid

Починка ISPManager

vi /etc/apache2/ports.conf

И там заменяем все 80 на 8080 и после этого перезапускаем Апача и Nginx:
/etc/init.d/apache2 restart
/etc/init.d/nginx restart

Обновляем MySQL до версии 5.1

Стандартным путем MySQL не обновился, поэтому нужно это сделать вручную (инсталлятор удалит старый MySQL 5.0 и все связанные с ним клиентские библиотеки):
apt-get install -y mysql-server-5.1

Теперь проверяем работу СУБД перезапуском:
/etc/init.d/mysql restart

Заканчиваем миграцию на новые версии grub и sysv-rc

В первую очередь пробуем включить dependency based boot system http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot, которая в процессе инсталляции отказалась включаться автоматически, для этого даем команду:
dpkg-reconfigure sysv-rc

И при запросе на конвертацию ответить Yes, после этого конвертация должна быть выполнена и на консоль должно быть выдано сообщение "success: Enabled dependency based boot system.".

Теперь нужно закончить миграцию на grub2 (эта команда выцеплена из конфига /boot/grub/menu.lst):
upgrade-from-grub-legacy

В открывшемся окошке выбираем диски, на которые нужно поставить grub2, у меня в системе стоит Soft Raid 5 из дисков sda, sdb и sdc, поэтому в моем случае необходимо выбрать в списке sda, sdb и sdc соответственно и нажать "Ok".

После этого grub2 будет установлен на указанные диски (к слову, ставится он как и grub1: grub-install /dev/sdN), а grub1 будет удален из системы:
upgrade-from-grub-legacy
0
Installation finished. No error reported.
Installation finished. No error reported.
Installation finished. No error reported.
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-5-amd64
Found initrd image: /boot/initrd.img-2.6.32-5-amd64
Found linux image: /boot/vmlinuz-2.6.26-2-amd64
Found initrd image: /boot/initrd.img-2.6.26-2-amd64
No volume groups found
done

GRUB Legacy has been removed, but its configuration files have been preserved,
since this script cannot determine if they contain valuable information. If
you would like to remove the configuration files as well, use the following
command:

rm -f /boot/grub/menu.lst*

Теперь можно удалить конфиг старого grub (а конфиг нового лежит по пути /boot/grub/grub.cfg):
rm -f /boot/grub/menu.lst*

Ну и теперь еще одна перезагрузка:
shutdown -r now

Conclusion
Ну что, господа системные администраторы, имеющие в распоряжении много машин на Lenny :) Готовьтесь к траблам, обновление очень геморное. Конечно, я искренне надеюсь, что к моменту релиза Squeeze часть проблем будет исправлена, но тем не менее изменения очень серьезные и их много, так что малой кровью тут не обойтись.

Из ключевых изменений в Debian Squeeze, которые надо знать перед миграцией:
1) Переход на grub2
2) Обновление udev, которое невозможно накатить находясь под ядром от Debian 5 Lenny (требуется перезагрузка, которая разбивает процесс обновления на два шага)
3) Переход на PHP 5.3.2
4) Переход на dash в качестве стандартного интерпретатора Bash
5) Переход на ядро 2.6.32-5.
6) Обновление в sysv-rc: dependency based boot system http://wiki.debian.org/LSBInitScripts/DependencyBasedBoot
7) Переход на Perl 5.10.1
8) Переход на Python 2.6.6
9) Обновление nginx до 0.7.67
10) Обновление MySQL до 5.1
11) Теперь есть поддержка dkms.

Источник: http://www.debian.org/News/2010/20100806

4 comments:

  1. Хм... уже минимум несколько раз делал апгрейд с ленни до сквизи и никаких проблем вообще...

    ReplyDelete
  2. Если ПО мало, то их и не будет :)

    ReplyDelete
  3. хорошо бы техподдержку рекламируемого вами fastvps потыкать носом в эту статью. А то попросили их пропргрейдить ленни на сквиз, так они не обновили mysql и не пересобрали ядро. Последнее выяснилось, когда решили "быстренько ребутнуться" в середине рабочего дня. полдня простоя из-за этих раздолбаев.

    ReplyDelete
  4. efemerid, я его не рекламирую, я в нем работаю :) Пожалуйста, сообщите номер тикета или IP сервера, обязательно разберемся в ситуации и проведем разъяснительную работу.

    ReplyDelete

Note: only a member of this blog may post a comment.