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]