Обновление ISPDB.

Советы:

Перед началом работы по обновлению ispdb удобно открыть страницу версий. В процессе обновления может пригодиться.

Обновление удобно проводить используя 3 окна терминала (root, pgsql и обычный пользователь) или более. Тогда от приставок su2 ..... -c можно отказаться, вводя команды в соответствующем окне.

  1. Обновление исходников, дистрибутивов и портов.
    1. Обновление общих портов при необходимости Устарело
                 > srcUP cvs
                 > srcUP ports
                
    2. Обновление локальных портов
                 > srcUP local
                 > cd /usr/ports/ispms
                 > srcUP fetch
                
    3. При необходимости обновляем приложения из первой части
                 -> Управление сетью
                  -> Сисадмин
                   -> Версии программ и модулей
                
      В первой части перечислены контролируемые babolo-libmake программы, до остановки ispdb можно устанавливать те, которые используются только для трансляции. Но если разбираться, каие программы для чего используются неохота, то можно отложить до того момента, когда будут устанавливаться и остальные программы из этого списка, ценой увеличения времени простоя базы.
  2. Резервное копирование базы.
    1. Останавливаем ispdb
                 > su2 -c '/usr/local/etc/rc.d/ispdb.sh stop'
                
      и дожидаемся полной остановки ispdb.
    2. Останавливаем все веб серверы, работающие с ispdb
                 > su2 -c '/usr/local/etc/rc.d/jailup.sh stop apachu'
                 > su2 -c '/usr/local/etc/rc.d/jailup.sh stop apachp'
                 > su2 -c '/usr/local/etc/rc.d/jailup.sh stop apachb'
                 > su2 -c '/usr/local/etc/rc.d/jailup.sh stop apache'
                
    3. Делаем каталог для дампа
                 > su2 pgsql -c 'mkdir /tmp/dump'
                
      где /tmp/dump - каталог, куда будем класть дамп базы.
    4. Делаем дамп базы
                 > su2 pgsql -c 'ispdb dump dbname /tmp/dump'
                
      где dbname - имя текущей базы ispdbs (можно посмотреть в /usr/local/etc/ispdb.conf значение PGDATABASE).
    5. Архивируем дамп и кладем в сторонку
                 > su2 -c 'cd /tmp/dump;tar -cf /var/backups/orexovo.ispdb.2005-03-21.tar *'
                 > su2 -c 'chmod 400 /var/backups/orexovo.ispdb.2005-03-21.tar'
                
      где /var/backups - куда складываем архивы базы
    Собственно говоря имеет смысл делать периодическое архивирование базы (вышеописаные пункты) не зависимо от того, есть обновления или нет.
  3. Установка обновлений
    1. В обязательном порядке проводим резервное копирование базы
    2. Собираем новый модуль
                 > cd /usr/ports/ispms/<module_name>
                 > make
                 > su2 -c 'make install'
                
      далее один и вариантов, первый, если мусор за собой не прибирали, второй, если мусор в предыдущих обновлениях за собой прибирали:
                 > su2 -c 'cat /var/dp/pkg/<module_name>-<старая_версия>/+REQUIRED_BY /var/dp/pkg/<module_name>-<старая_версия>/+REQUIRED_BY <и т.д.> | sort -u > /var/dp/pkg/<module_name>-<новая_версия>/+REQUIRED_BY
                 > su2 -c 'mv /var/dp/pkg/<module_name>-<старая_версия>/+REQUIRED_BY /var/dp/pkg/<module_name>-<новая_версия>/
                
                 > su2 -c 'rm -rf /var/dp/pkg/<module_name>-<старая_версия>'
                 ...
                
    3. Повторяем для всех модулей, которые должны быть обновлены.
    4. Если обновление модуля требует обновления не только файлов но и самой базы, то будет установлен скрипт обновления базы. Такие скрипты устанавливаются для основного модуля в /usr/local/libexec/ispms/serve/up/ для основного модуля, /usr/local/libexec/ispms/ptarif/<tarif_name>/up/ для тарифных программ и /usr/local/libexec/ispms/plugins/<module_name>/up/ для прочих модулей.
      Имя скрипта обновление базы формируется следующим образом: v012-345 где 012 означает номер версии с которой происходит апгрейд, 345 - соответственно номер версии до которой происходит апгрейд

      Необходимо строго соблюдать очередность применения upов!

      Обновление содержимого СУБД осуществляется седующим образом:
                 > su2 pgsql -c 'ispdb up/v012-345 dbname /tmp/dump'
                 или
                 > su2 pgsql -c 'ispdb <module_name>/up/v012-345 dbname /tmp/dump'
                
      для основного модуля и остальных соответственно.
    Как правило, нельзя за один цикл обновления применить более одного upа на модуль. Если между установленными версиями и устанавливаемыми в каком либо из модулей более одного upа, то обновление придется разбивать на несколько циклов так, что бы соблюдалось ограничение.
  4. Восстановление и запуск базы.
    1. Восстанавливаем обновленную базу
                 > su2 pgsql -c 'ispdb restore new_dbname /tmp/dump'
                
    2. Настраиваем ispms на работу с новой базой
                 > su2 -c 'vi /usr/local/etc/ispdb.conf'
                
      и меням параметр PGDATABASE так, чтобы он указывал на новую базу.
    3. Запускаем WWW интерфейс оператора
                 > su2 -c '/usr/local/etc/rc.d/jailup.sh start apache'
                
      и проверяем установленные версии.
    4. Запускаем ispdb
                 > su2 -c '/usr/local/etc/rc.d/ispdb.sh start'
                
      и ищем в логах упомнинания об ошибках.
    5. Запускаем другие apacheи:
                 > su2 -c '/usr/local/etc/rc.d/jailup.sh start apachb'
                 > su2 -c '/usr/local/etc/rc.d/jailup.sh start apachp'
                 > su2 -c '/usr/local/etc/rc.d/jailup.sh start apachu'
                
    6. После всех обновлений можно удалить не используемые (старые) базы:
                 > su2 pgsql -c 'dropdb very_old_base'
                
      Если удаление происходит сразу после обновления, лучше всего удалить старые базы, кроме последней (с которой осуществлялся апгрейд) на случай, если что то все-таки пойдет не так.
    7. Архивирование дампа
                 > su2 -c 'bzip2 -9 /var/backups/orexovo.ispdb.2005-03-21.tar'
                
  5. Установка нового модуля
    1. Как обычно, делаем резервное копирование базы
    2. Собираем и устанавливаем новый модуль
    3. Активируем его в базе
                 > su2 pgsql -c 'ispdb snmp/S_create'
                 > su2 pgsql -c 'ispdb snmp/S_init'
                 > su2 pgsql -c 'ispdb snmp/S_tune'
                

А.А.Бабайлов (C)2003..2022