07.02.2011

Релиз Debian 6.0 Squeeze (апдейт с Lenny)

На днях ВНЕЗАПНО случился релиз 6-го Дебьяна (новость на Опеннете). Список нововведений впечатляет! Что особо приятно, много НОВОГО (актуального) софта - прямо Убунта какая-то, с человеческим лицом Дебьяна ))



Надоело сидеть на бекпортах и Сиде - а тут все "из коробки", такое готовое, стабильное и дебьяновое =) Не удержался, проапдейтил Lenny. В целом все очень хорошо описано в информации о выпуске. Если делать строго по шагам проблем быть не должно. Особо советую обратить внимание на:
  • отключение всех сторонних репозитариев - включая testing, unstable, backports;
  • апдейт udev и ядра (сначала - ядро, потом - udev);
  • тонкости с переименовыванием блочных устройств и установкой Grub (актуально, только если рут-партиция НЕ на LVM), и вообще надо на Grub2 переходить, что бы не отстовать от моды - говорят, третья версия Груба будет включать не только блекджек и шлюх шахматы и поэтесс, но и графический оконный интерфейс с выходом в интернет, функциями мультимедиа-сервера и поддержкой редактирования популярных форматов документов ;)
  • отсутствие проприетарных прошивок в ядре - в том числе на сетевые карты (мне пришлось сделать после установки нового ядра, до ребута apt-get install firmware-realtek что бы не ехать в гости к серверу =). Вот тут человек подробнее пишет, где искать все эти "несвободные" прошивки. В кратце - в репозитории non-free =)
  • СтОит проверить все сгенерированнве конфиги vimdiff-ом, сначала найдя, где они лежат:
    find /etc -type f -iregex '.+\.\(ucf\|dpkg\)-.+'
    (для тех, кто в танке - мегахелп по vimdiff)

Основные моменты, которые пришлось обрабатывать напильником:

  • Shorewall дорос до версии 4.4. По-умолчанию теперь идет перловый компилятор. Мне его раньше как-то неохота было настраивать... оказалось - зря! Правила компиляются меньше секунды. Тогда как раньше все измерялось десятками секунд. Подробно переход описан на сайте Shorewall в руководстве по миграции. В целом ничего сложного, только строго по мануалу.
  • slapd перешен на новый формат конфигов cn=config. При установке он автоматом конвертит старый конфиг в новый. Не смотря на то, что в новом формате много удобностей - таких как изменение параметров каталога "на лету", любым стандартным средством работы с каталогом и без необходимости ручного редактирования - мне он не очень по душе пришелся. Поддержку старого формата еще не выпилили, так что для того, что бы вернуть все в зад обратно, на старый формат текстового конфига, достаточно сделать:
    mv /etc/ldap/slapd.conf.old /etc/ldap/slapd.conf
    rm /etc/ldap/slapd.d
    Можно оставить новый конфиг, но редактировать старый текстовый - понадобится команда конвертации из старого формата в новый:
    slaptest -f -F
  • dhcp3-server не проапгрейдился автоматом до isc-dhcp-server из-за установленного dhcp3-server-ldap, пришлось сносить/ставить заново:
    apt-get remove dhcp3-server dhcp3-server-ldap dhcp3-client dhcp3-common
    apt-get install isc-dhcp-server isc-dhcp-server-ldap isc-dhcp-client
  • Asterisk в дистрибутиве идет версии 1.6.2. У меня он же стоял из бекпортов, так что проблем не было =) Однако, при миграции с 1.4 были нюансы, много, все сейчас не вспомню. Конфиги пришлось брать из дистрибутива 1.6 с долгим и мучительным переносом настроек вручную.
    Что точно пришлось сделать на новом дистрибутиве - проапдейтить модули Dahdi для работы MeetMe:
    aptitude install dahdi dahdi-source dahdi-firmware-nonfree
    m-a a-i dahdi
    dpkg-reconfigure dahdi
  • Hylafax благодаря новой системе параллельного старта сервисов начал подниматся раньше iaxmodem-а - что приводило к отсутствию факса при ребуте при определенных обстоятельствах и лечилось ручным рестартом сервисов. Исправить можно правкой инит-скриптов так, что бы Hylafax стартовал вместе с iaxmodem-ом:
    sed -i~ -e 's/\(# Should-\(Start\|Stop\): .\+\?\)$/\1 iaxmodem/g' -e 's/\(\( iaxmodem\)\)\+/\1/g' /etc/init.d/hylafax
  • С Samba проще. В дистрибутиве 3.5.6, у меня уже стояла бекпортнутая. Но с ней особых проблем и при первоначальной миграции не было. Единственное, дабы избежать проблемы с пустым "Сетевым окружением" и для исправления коннекта к локальному LDAP-у добавил в smb.conf:
    os level = 255

    ldap ssl = no
    ldap ssl ads = no
  • У rsnapshot частично поломались скрипты бекапа ldap-каталога (баг slapd/slapcat в Debian) и мой скрипт по бекапу баз. Для первого есть dirty-hack backup_ldap.sh, дабы сркрыть ошибку (не советую, если нет понимания, к чему это может привести и хотя бы одного ежедневного бекапа базы на "холодную" - при опущенном slapd):
    #!/bin/sh
    ##############################################################################
    # backup_ldap.sh
    #
    # by k2
    ##############################################################################

    /usr/sbin/slapcat 2>/dev/null | gzip -9 > ldapdump.ldif.gz

    /bin/chmod 600 ldapdump.ldif.gz
    Для второго - надо либо дать пользователю debian-sys-maint доступ на лок ко всем базам, либо исключить information_schema из обработки. Вот мой модифицированный скрипт backup_mysql.sh - отличается от оригинального тем, что загоняет каждую базу в отдельный архив и добавлена возможность игнорить отдельные базы:
    #!/bin/sh

    ##############################################################################
    # backup_mysql.sh
    #
    # by Nathan Rosenquist
    # http://www.rsnapshot.org/
    #
    # mod by Kirill Kozlovsky
    # http://kirill-k2.blogspot.com/
    #
    # This script simply needs to dump a file into the current working directory.
    # rsnapshot handles everything else.
    ##############################################################################

    dblist=`echo "show databases;" | mysql --defaults-file=/etc/mysql/debian.cnf | grep -v Database`
    dbignore="information_schema"

    if [ -z "$dblist" ]; then
            echo "Warning! Can't obtain DB list! Will use all-databases" >&2
            dblist="--all-databases"
    fi

    for db in $dblist; do
            #echo Backing up $db

            for idb in $dbignore; do
                    if [ "$idb" == "$db" ]; then
                            continue 2
                    fi
            done

            dumpfile="mysqldump_$db.sql"

            # backup the database
            /usr/bin/mysqldump --defaults-file=/etc/mysql/debian.cnf --opt --comments --complete-insert --routines "$db" > "$dumpfile"

            gzip -9 "$dumpfile"

            # make the backup readable only by root
            /bin/chmod 600 "$dumpfile.gz"
    done

    exit 0;
  • munin переехал каталогами. Прежде всего надо сделать
    vimdiff /etc/munin/munin.conf /etc/munin/munin.conf.dpkg-dist
    Вообщем-то, как и со всеми остальными *.dpkg-dist =) и перенести все новое, сохраняя кастомизированную чатсь. Обращаем внимание, что htmldir из /var/www/munin уехал в /var/cache/munin/www. Поэтому делаем два:
    mv /var/www/munin/* /var/cache/munin/www/
    Так же желательно проапдейтить сенсоры и скрипты ноды мунина - добавить новые индикаторы. Делаем три:
    sensors-detect
    munin-node-configure --shell | xargs -l -I{} sh -c "{}"
  • Вышедшая недавно GOsa 2.7 из ee репозитория ставится только на squeeze, собственно, что и делается:
    # cat /etc/apt/sources.list.d/gosa.list

    deb http://oss.gonicus.de/pub/gosa/debian-squeeze/ ./
    "нормальный" репозиторий антсейбл у них пропал, а как запинить вот такой репозиторий я не нашел =(. Так что дальше апдейт руками всех пакетов через aptitude (ищем "^gosa", жмем "v", выбираем последнюю версию, жмем "+". и так для всех пакетов ). Да, еще господа зачем-то выпилили плагин addressbook - имейте ввиду. Для нормальной работы так же подтягиваютс пакеты smarty3 smarty3-gettext smarty3-gosa и надо обязательно выпилить старые версии Смарти, потому как сами они не, а с ними работать не будет:
    apt-get remove smarty smarty-acl-render smarty-gettext
    После чего производится стандартный апдет уже средствами GOsa со сносом /etc/gosa/gosa.conf (как они утомили этим!).

    Так же У GOfon есть ряд пробелм совместимости с Asterisk 1.6 (в части использования '|' вместо запятой, "SetCIDName", hint). Патч, частично решающий данные проблемы (исправлена очередь, диалплан. надо бы еще макросы допилить) gosa-2.7-1.patch:
    diff -Naur gosa-2.7-1.original//plugins/admin/ogroups/gofon/class_phonequeue.inc gosa-current/plugins/admin/ogroups/gofon/class_phonequeue.inc
    --- gosa-2.7-1.original//plugins/admin/ogroups/gofon/class_phonequeue.inc       2010-07-30 12:04:55.000000000 +0400
    +++ gosa-current/plugins/admin/ogroups/gofon/class_phonequeue.inc       2011-02-07 03:11:41.000000000 +0300
    @@ -457,7 +457,7 @@
                 $queue["queue_holdtime"]        = $this->goFonQueueAnnounce;
                 $queue["queue_lessthan"]        = $this->goFonQueueLessThan;
                 $queue["retry"]                 = $this->goFonQueueRetry;
    -            $queue["reportholdtime"]        = "1";
    +            $queue["reportholdtime"]        = ( $this->goFonQueueAnnounceHoldtime == 'yes' ? 1 : 0 );
                 $queue["joinempty"]             = "no";
                 $queue["leavewhenempty"]        = "yes";

    @@ -677,11 +677,11 @@
                         $a_ext[$i]['context']  = 'GOsa';
                         $a_ext[$i]['exten']    = $num;
                         $a_ext[$i]['priority'] = 4;
    -                    $a_ext[$i]['app']      = "SetCIDName";
    +                    $a_ext[$i]['app']      = "Set";
                         if(!empty($this->parent->by_object['ogroup']->description)){
    -                        $a_ext[$i]['appdata']  = $this->parent->by_object['ogroup']->description;
    +                           $a_ext[$i]['appdata']  = 'CALLERID(all)="'.$this->parent->by_object['ogroup']->description.'" <'.$num.'>';
                         }else{
    -                        $a_ext[$i]['appdata']  = $this->cn." - ".$num;
    +                           $a_ext[$i]['appdata']  = 'CALLERID(all)="'.$this->cn." - ".$num.'" <'.$num.'>';
                         }
                         $i ++ ;

    @@ -785,7 +785,7 @@
                 if(isset($_POST['goFonQueueAnnounceHoldtime'])){
                     $this->goFonQueueAnnounceHoldtime = "yes";
                 }else{
    -                $this->goFonQueueAnnounceHoldtime = false;
    +                $this->goFonQueueAnnounceHoldtime = "no";
                 }
             }
         }
    diff -Naur gosa-2.7-1.original//plugins/gofon/phoneaccount/class_phoneAccount.inc gosa-current/plugins/gofon/phoneaccount/class_phoneAccount.inc
    --- gosa-2.7-1.original//plugins/gofon/phoneaccount/class_phoneAccount.inc      2010-12-09 12:35:46.000000000 +0300
    +++ gosa-current/plugins/gofon/phoneaccount/class_phoneAccount.inc      2011-02-07 03:16:13.000000000 +0300
    @@ -786,7 +786,7 @@
                     $sip_data_array['language']     = NULL;
                     $sip_data_array['mailbox']      = $newnums[$i_new_key]."@".$this->voice_context;
                     $sip_data_array['md5secret']    = NULL;
    -                $sip_data_array['nat']          = "no";
    +                $sip_data_array['nat']          = "yes";
                     $sip_data_array['permit']       = NULL;
                     $sip_data_array['deny']         = NULL;
                     $sip_data_array['mask']         = NULL;
    @@ -950,13 +950,21 @@
                     $EXT[$i]['exten']   = $s_telenums;
                     $EXT[$i]['priority']= 0;
                     $EXT[$i]['app']     = 'SIP/'.$this->uid;
    -                $i ++;
    -                /* SetCID */
    +               $i ++;
    +
    +               /* Hint Entry for 1.6+ */
    +               $EXT[$i]['context'] = 'GOsa';
    +               $EXT[$i]['exten']   = $s_telenums;
    +               $EXT[$i]['priority']= 'hint';
    +               $EXT[$i]['app']     = 'SIP/'.$this->uid;
    +               $i ++;
    +
    +               /* SetCID */
                     //$EXT[$i]['context'] = 'GOsa';
                     //$EXT[$i]['exten']   = $s_telenums;
                     //$EXT[$i]['priority']= 1;
    -                //$EXT[$i]['app']     = "SetCIDName";
    -                //$EXT[$i]['appdata'] = $CNname;
    +                //$EXT[$i]['app']     = "Set";
    +                //$EXT[$i]['appdata'] = "CALLERID(all)=".'"'.$CNname.'" <'.$s_telenums.'>';
                     //$i ++;

                     // If no macro is selected use Dial
    После накатывания патча не мешает сделать, на всякие пожарные:
    update-gosa
    Новый интерфейс понравился. Стал более лаконичным и Ынтерпрайзненьким.
  • Были проблемы с установкой mysql - лечились ручным выпиливанием всего мусечного, что не mysql.*5.1 в aptitude.
  • В PHP  5.3 mhash вошел в основные библиотеке. Пакет php5-mhash самовыпиливается, но конфиги остаются. Их надо снести:
    rm /etc/php5/cli/conf.d/mhash.ini
  • phpldapadmin поменял формат конфигов. Необхоимо вручную произвести настройки в конфига:
     mv /etc/phpldapadmin/config.php /etc/phpldapadmin/config.php.old
     mv
    /etc/phpldapadmin/config.php.ucf-dist /etc/phpldapadmin/config.php
    vimdiff
    /etc/phpldapadmin/config.php /etc/phpldapadmin/config.php.old
  • Да, важный момент. После полного апдейта апт норовит снести много чего нужного - рекомендую внимательно смотреть, а лучше записывать все сносимые пакеты. Несколько раз он снес совсем не то, пришлось добавлять:
    apt-get install libmime-types-perl libmail-box-perl libfile-remove-perl ghostscript odbcinst1debian2 php5-mysql unzip zip p7zip
Желаю удачи, и не забудьте сделать бекап до и после установки =)

upd 19.02.11: обновил про самбу, астериск и добавил про хилафакс.
upd 01.03.11: обновил общее про ядро и фирмвари