OpenPKG CVS Repository
  http://cvs.openpkg.org/
  ____________________________________________________________________________

  Server: cvs.openpkg.org                  Name:   Ralf S. Engelschall
  Root:   /e/openpkg/cvs                   Email:  [EMAIL PROTECTED]
  Module: openpkg-web, openpkg-src         Date:   03-Dec-2002 13:10:43
  Branch: HEAD                             Handle: 2002120312104201

  Added files:
    openpkg-src/postgresql  pg_migrate
  Modified files:
    openpkg-src/postgresql  postgresql.spec
    openpkg-web             news.txt

  Log:
    add optional migration support; add engine stop/start support on upgrades

  Summary:
    Revision    Changes     Path
    1.1         +187 -0     openpkg-src/postgresql/pg_migrate
    1.19        +69 -2      openpkg-src/postgresql/postgresql.spec
    1.2173      +1  -0      openpkg-web/news.txt
  ____________________________________________________________________________

  Index: openpkg-src/postgresql/pg_migrate
  ============================================================
  $ cvs update -p -r1.1 pg_migrate
  #!/bin/sh
  ##
  ##  pg_migrate -- PostgreSQL Database Migration Utility
  ##  Copyright (c) 2000-2002 Cable & Wireless Deutschland GmbH
  ##  Copyright (c) 2000-2002 The OpenPKG Project <http://www.openpkg.org/>
  ##  Copyright (c) 2000-2002 Ralf S. Engelschall <[EMAIL PROTECTED]>
  ##
  ##  Permission to use, copy, modify, and distribute this software for
  ##  any purpose with or without fee is hereby granted, provided that
  ##  the above copyright notice and this permission notice appear in all
  ##  copies.
  ##
  ##  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  ##  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  ##  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  ##  IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  ##  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  ##  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  ##  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  ##  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ##  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  ##  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  ##  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  ##  SUCH DAMAGE.
  ##
  
  #   configuration
  l_prefix="@l_prefix@"
  l_rusr="@l_rusr@"
  l_rgrp="@l_rgrp@"
  
  #   establish sane environment
  LC_CTYPE=C
  export LC_CTYPE
  umask 022
  
  cmd="$1"
  shift
  case $cmd in
      dump )
          echo "++ enforcing full-superuser access policy"
          cp -p $l_prefix/var/postgresql/db/pg_hba.conf \
                $l_prefix/var/postgresql/db/pg_hba.conf.orig
          ( echo "local all trust"
            echo "host all 127.0.0.1 255.255.255.255 trust"
          ) >$l_prefix/var/postgresql/db/pg_hba.conf
  
          if [ ".`$l_prefix/etc/rc postgresql status 2>&1 | grep 'is running'`" != . 
]; then
              echo "++ reloading already running database engine"
              $l_prefix/etc/rc postgresql reload
              sleep 2
              epilog=reload
          else
              echo "++ temporarily starting database engine"
              $l_prefix/etc/rc postgresql start 
              sleep 4
              epilog=stop
          fi
  
          echo "++ rotating dump files $l_prefix/var/postgresql/db.dump*.sql.bz2"
          i=9
          rm -f $l_prefix/var/postgresql/db.dump.$i.sql.bz2 >/dev/null 2>&1 || true
          while [ $i -gt 0 ]; do
              j=$i
              i=`expr $i - 1`
              if [ $i -eq 0 ]; then
                  prev="$l_prefix/var/postgresql/db.dump.sql.bz2"
                  next="$l_prefix/var/postgresql/db.dump.$j.sql.bz2"
              else
                  prev="$l_prefix/var/postgresql/db.dump.$i.sql.bz2"
                  next="$l_prefix/var/postgresql/db.dump.$j.sql.bz2"
              fi
              if [ -f $prev ]; then
                  mv $prev $next
              fi
          done
  
          echo "++ dumping all databases into $l_prefix/var/postgresql/db.dump.sql.bz2"
          $l_prefix/bin/pg_dumpall \
              -U postgresql -Spostgresql -o -Xuse-set-session-authorization |\
              $l_prefix/lib/openpkg/bzip2 -9 \
                  >$l_prefix/var/postgresql/db.dump.sql.bz2
          chown ${l_rusr}:${l_rgrp} $l_prefix/var/postgresql/db.dump.sql.bz2
          chmod 700 $l_prefix/var/postgresql/db.dump.sql.bz2
  
          echo "++ restoring original access policy"
          cp -p $l_prefix/var/postgresql/db/pg_hba.conf.orig \
                $l_prefix/var/postgresql/db/pg_hba.conf
          rm -f $l_prefix/var/postgresql/db/pg_hba.conf.orig
  
          if [ ".$epilog" = .reload ]; then
              echo "++ reloading already running database engine (again)"
              $l_prefix/etc/rc postgresql reload
              sleep 2
          else
              echo "++ stopping temporarily started database engine"
              $l_prefix/etc/rc postgresql stop 
              sleep 4
          fi
          ;;
  
      restore )
          if [ ".`$l_prefix/etc/rc postgresql status 2>&1 | grep 'is running'`" != . 
]; then
              echo "++ stopping already running database engine"
              $l_prefix/etc/rc postgresql stop
              sleep 2
              epilog=start
          else
              epilog=none
          fi
  
          echo "++ rotating database directories $l_prefix/var/postgresql/db.old*/"
          i=9
          rm -rf $l_prefix/var/postgresql/db.old.$i >/dev/null 2>&1 || true
          while [ $i -gt 0 ]; do
              j=$i
              i=`expr $i - 1`
              if [ $i -eq 0 ]; then
                  prev="$l_prefix/var/postgresql/db"
                  next="$l_prefix/var/postgresql/db.old.$j"
              else
                  prev="$l_prefix/var/postgresql/db.old.$i"
                  next="$l_prefix/var/postgresql/db.old.$j"
              fi
              if [ -d $prev ]; then
                  mv $prev $next
              fi
          done
  
          echo "++ creating new database directory $l_prefix/var/postgresql/db/"
          mkdir $l_prefix/var/postgresql/db
          chown ${l_rusr}:${l_rgrp} $l_prefix/var/postgresql/db
          chmod 700 $l_prefix/var/postgresql/db
  
          su - ${l_rusr} -c \
              "LC_CTYPE=C; export LC_CTYPE; umask 022; \
              (echo 'postgresql'; echo 'postgresql') |\
              $l_prefix/bin/pg_initdb -U postgresql -W -D $l_prefix/var/postgresql/db" 
2>&1 |\
                  $l_prefix/lib/openpkg/shtool prop \
                      -p "++ creating new database data"
  
          echo "++ restoring database configurations"
          for conf in pg_hba.conf pg_ident.conf postgresql.conf; do
              cp -p $l_prefix/var/postgresql/db.old.1/$conf \
                    $l_prefix/var/postgresql/db/
          done
  
          echo "++ enforcing full-superuser access policy"
          cp -p $l_prefix/var/postgresql/db/pg_hba.conf \
                $l_prefix/var/postgresql/db/pg_hba.conf.orig
          ( echo "local all trust"
            echo "host all 127.0.0.1 255.255.255.255 trust"
          ) >$l_prefix/var/postgresql/db/pg_hba.conf
  
          if [ ".$epilog" = .start ]; then
              echo "++ starting database engine"
          else
              echo "++ temporarily starting database engine"
          fi
          $l_prefix/etc/rc postgresql start
          sleep 4
  
          echo "++ restoring all databases from 
$l_prefix/var/postgresql/db.dump.sql.bz2"
          $l_prefix/lib/openpkg/bzip2 -c -d \
              $l_prefix/var/postgresql/db.dump.sql.bz2 |\
                  $l_prefix/bin/psql -U postgresql -d template1 2>&1 |\
                      tee $l_prefix/var/postgresql/db.log |\
                          $l_prefix/lib/openpkg/shtool prop \
                              -p "++ restoring data (see 
$l_prefix/var/postgresql/db.log)"
  
          echo "++ restoring original access policy"
          cp -p $l_prefix/var/postgresql/db/pg_hba.conf.orig \
                $l_prefix/var/postgresql/db/pg_hba.conf
          rm -f $l_prefix/var/postgresql/db/pg_hba.conf.orig
  
          if [ ".$epilog" = .start ]; then
              echo "++ reloading already running database engine"
              $l_prefix/etc/rc postgresql reload
              sleep 2
          else
              echo "++ stopping temporarily started database engine"
              $l_prefix/etc/rc postgresql stop 
              sleep 4
          fi
          ;;
  esac
  
  Index: openpkg-src/postgresql/postgresql.spec
  ============================================================
  $ cvs diff -u -r1.18 -r1.19 postgresql.spec
  --- openpkg-src/postgresql/postgresql.spec    28 Nov 2002 16:56:15 -0000      1.18
  +++ openpkg-src/postgresql/postgresql.spec    3 Dec 2002 12:10:43 -0000       1.19
  @@ -47,11 +47,12 @@
   Group:        Database
   License:      GPL
   Version:      7.3
  -Release:      20021128
  +Release:      20021203
   
   #   list of sources
   Source0:      
ftp://ftp.postgresql.org/pub/source/v%{version}/postgresql-%{version}.tar.gz
   Source1:      rc.postgresql
  +Source2:      pg_migrate
   
   #   build information
   Prefix:       %{l_prefix}
  @@ -169,6 +170,14 @@
           $RPM_BUILD_ROOT%{l_prefix}/var/postgresql/db \
           $RPM_BUILD_ROOT%{l_prefix}/var/postgresql/run
   
  +    #   install migration utility
  +    %{l_shtool} install -c -m 755 \
  +        -e 's;@l_prefix@;%{l_prefix};g' \
  +        -e 's;@l_rusr@;%{l_rusr};g' \
  +        -e 's;@l_rgrp@;%{l_rgrp};g' \
  +        %{SOURCE pg_migrate} \
  +        $RPM_BUILD_ROOT%{l_prefix}/bin/
  +
       #   install run-command script
       %{l_shtool} mkdir -f -p -m 755 \
           $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
  @@ -190,8 +199,44 @@
   %clean
       rm -rf $RPM_BUILD_ROOT
   
  +%pre
  +    if [ $1 -gt 1 ]; then
  +        #   initial installation
  +        if [ -f $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION -a \
  +             -f $RPM_INSTALL_PREFIX/bin/pg_migrate ]; then
  +            #   database migration dumping hint
  +            v_old_all=`cat $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION`
  +            v_old_maj=`echo "$v_old_all" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
  +            v_new_all="%{version}"
  +            v_new_maj=`echo "$v_new_maj" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
  +            if [ ".$v_old_maj" != ".$v_new_maj" ]; then
  +               if [ ! -f $RPM_INSTALL_PREFIX/var/postgresql/db.dump.sql.bz2 -a 
".$PG_MIGRATE" != .ignore ]; then
  +                    ( echo "You are upgrading from PostgreSQL $v_old_all to 
PostgresSQL $v_new_all,"
  +                      echo "which is a major version change. We expect a database 
incompatibility,"
  +                      echo "so we strongly recommend that you backup your existing 
database"
  +                      echo "($RPM_INSTALL_PREFIX/var/postgresql/db/) first by 
running:"
  +                      echo "    \$ $RPM_INSTALL_PREFIX/bin/pg_migrate dump" 
  +                      echo "Alternatively, if you want force this package to be 
installed without"
  +                      echo "performing a database dump, run the following command 
before upgrading:"
  +                      echo "    \$ PG_MIGRATE=ignore; export PG_MIGRATE"
  +                    ) | %{l_rpmtool} msg -b -t error
  +                    exit 1
  +                fi
  +            fi
  +        fi
  +    elif [ $1 -gt 1 ]; then
  +        #   upgrading of installation
  +        rm -f $RPM_INSTALL_PREFIX/var/posgresql/RESTART >/dev/null 2>&1 || true
  +        if [ ".`$l_prefix/etc/rc postgresql status 2>&1 | grep 'is running'`" != . 
]; then
  +            echo "Shutting down currently running database engine." | %{l_rpmtool} 
msg -b -t notice
  +            $RPM_INSTALL_PREFIX/etc/rc postgresql stop 
  +            touch $RPM_INSTALL_PREFIX/var/posgresql/RESTART
  +            sleep 4
  +        fi
  +    fi
  +
   %post
  -    if [ ".$1" = .1 ]; then
  +    if [ $1 -eq 1 ]; then
           #   create initial database
           su - %{l_rusr} -c \
               "LC_CTYPE=C; export LC_CTYPE; umask 022; \
  @@ -233,5 +278,27 @@
             echo "Threading       = 2"
           ) $RPM_INSTALL_PREFIX/bin/odbcinst -i -d -r
   %endif
  +    elif [ $1 -gt 1 ]; then
  +        if [ -f $RPM_INSTALL_PREFIX/var/posgresql/RESTART ]; then
  +            echo "Starting database engine again." | %{l_rpmtool} msg -b -t notice
  +            $RPM_INSTALL_PREFIX/etc/rc postgresql start 
  +            rm -f $RPM_INSTALL_PREFIX/var/posgresql/RESTART >/dev/null 2>&1 || true
  +            sleep 2
  +        fi
  +        if [ -f $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION -a ".$PG_MIGRATE" 
!= .ignore ]; then
  +            #   database migration restoring hint
  +            v_old_all=`cat $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION`
  +            v_old_maj=`echo "$v_old_all" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
  +            v_new_all="%{version}"
  +            v_new_maj=`echo "$v_new_maj" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
  +            if [ ".$v_old_maj" != ".$v_new_maj" ]; then
  +                ( echo "You upgraded from PostgreSQL $v_old_all to PostgresSQL 
$v_new_all,"
  +                  echo "which is a major version upgrade. We expect a database 
incompatibility,"
  +                  echo "so we strongly recommend you to recreate the existing 
database under"
  +                  echo "$RPM_INSTALL_PREFIX/var/postgresql/db/ by running the 
following command:"
  +                  echo "    \$ $RPM_INSTALL_PREFIX/bin/pg_dump restore"
  +                ) | %{l_rpmtool} msg -b -t warn
  +            fi
  +        fi
       fi
   
  Index: openpkg-web/news.txt
  ============================================================
  $ cvs diff -u -r1.2172 -r1.2173 news.txt
  --- openpkg-web/news.txt      3 Dec 2002 12:10:33 -0000       1.2172
  +++ openpkg-web/news.txt      3 Dec 2002 12:10:42 -0000       1.2173
  @@ -1,3 +1,4 @@
  +03-Dec-2002: Upgraded package: P<postgresql-7.3-20021203>
   03-Dec-2002: Upgraded package: P<opensp-1.5-20021203>
   03-Dec-2002: New package: P<opensp-1.5-20021203>
   03-Dec-2002: Upgraded package: P<openjade-1.3.2-20021203>
______________________________________________________________________
The OpenPKG Project                                    www.openpkg.org
CVS Repository Commit List                     [EMAIL PROTECTED]

Reply via email to