Tue, 29 Mar 2011 20:04:34 +0200
Rework package yet again, correcting and introducing new buildconf logic:
Conditionally disable bootstrap stage comparison correctly, correct
english grammar, better find system as(1) and ld(1), indotruce detailed
optimization option messages, more completely guess cpu types, allow
profiled bootstrapping without a preinstalled GCC because many other
compilers have long since implemented 64-bit arithmetic, instruct make
to build sequentially (not in sparallel) when building a profiled
bootstrap as GCC online documents recommend, and generally improve
comment blocks.
The single most important correction in this changeset relates to the
GCC changed optimization policy since at least GCC 4.5, in which -march
is always passed and not always correctly guessed. In the case of this
package, allowing GCC to guess the architecture leads to wild build
errors at various subcomponents (zlib, libgcc, libiberty...) and
bootstrap stages. It seems quite platform specific, and the safest
approach to correcting this seems to be explicitly always specifying the
-march argument when bootstrapping GCC. Because the best choice 'native'
is not available when bootstrapping using a foreign (non GCC) compiler,
a guess is made according to rpmmacros l_platform in that case.
It is questionable as to whether these recent optimization changes
on the part of GCC or this package are compatible with each other,
or if either are complete or correct at all. At least applying these
corrections allows this package to build again in most cases test.
1 #!/bin/sh
2 ##
3 ## pg_migrate -- PostgreSQL Database Migration Utility
4 ## Copyright (c) 2000-2007 OpenPKG Foundation e.V. <http://openpkg.net/>
5 ## Copyright (c) 2000-2007 Ralf S. Engelschall <http://engelschall.com/>
6 ##
7 ## Permission to use, copy, modify, and distribute this software for
8 ## any purpose with or without fee is hereby granted, provided that
9 ## the above copyright notice and this permission notice appear in all
10 ## copies.
11 ##
12 ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
13 ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
14 ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
15 ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
16 ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17 ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18 ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
19 ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
20 ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
21 ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
22 ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 ## SUCH DAMAGE.
24 ##
26 # configuration
27 l_prefix="@l_prefix@"
28 l_rusr="@l_rusr@"
29 l_rgrp="@l_rgrp@"
31 # load superuser information
32 l_pgdata=""
33 l_pguser=""
34 l_pgpass=""
35 if [ ! -r $l_prefix/var/postgresql/db/pg_superuser.conf ]; then
36 echo "$0:ERROR: unable to read file \"$l_prefix/var/postgresql/db/pg_superuser.conf\" (use pg_passwd(1) to create)" 1>&2
37 exit 1
38 fi
39 eval `. $l_prefix/var/postgresql/db/pg_superuser.conf; \
40 echo l_pgdata=\"$superuser_database\"; \
41 echo l_pguser=\"$superuser_username\"; \
42 echo l_pgpass=\"$superuser_password\"`
44 # establish sane environment
45 LC_CTYPE=C
46 export LC_CTYPE
47 umask 022
49 # check command line
50 if [ $# -ne 1 -a $# -ne 2 ]; then
51 echo "$0:ERROR: invalid command line" 1>&2
52 echo "$0:USAGE: $0 dump|restore [<password>]" 1>&2
53 exit 1
54 fi
55 cmd="$1"; shift
56 if [ $# -eq 1 ]; then
57 l_pgpass="$1"; shift
58 fi
60 # dispatch into commands
61 case $cmd in
62 dump )
63 echo "++ enforcing full-superuser access policy"
64 cp -p $l_prefix/var/postgresql/db/pg_hba.conf \
65 $l_prefix/var/postgresql/db/pg_hba.conf.orig
66 ( echo "local all all trust"
67 echo "host all all 127.0.0.1/32 trust"
68 ) >$l_prefix/var/postgresql/db/pg_hba.conf
70 ( eval `${l_prefix}/bin/openpkg rc postgresql status 2>/dev/null`
71 echo "postgresql_active=\"$postgresql_active\""
72 ) 2>/dev/null
73 if [ ".$postgresql_active" = .yes ]; then
74 echo "++ reloading already running database engine"
75 $l_prefix/bin/openpkg rc postgresql reload
76 sleep 2
77 epilog=reload
78 else
79 echo "++ temporarily starting database engine"
80 $l_prefix/bin/openpkg rc postgresql start
81 sleep 4
82 epilog=stop
83 fi
85 echo "++ rotating dump files $l_prefix/var/postgresql/db.dump*.sql.bz2"
86 i=9
87 rm -f $l_prefix/var/postgresql/db.dump.$i.sql.bz2 >/dev/null 2>&1 || true
88 while [ $i -gt 0 ]; do
89 j=$i
90 i=`expr $i - 1`
91 if [ $i -eq 0 ]; then
92 prev="$l_prefix/var/postgresql/db.dump.sql.bz2"
93 next="$l_prefix/var/postgresql/db.dump.$j.sql.bz2"
94 else
95 prev="$l_prefix/var/postgresql/db.dump.$i.sql.bz2"
96 next="$l_prefix/var/postgresql/db.dump.$j.sql.bz2"
97 fi
98 if [ -f $prev ]; then
99 mv $prev $next
100 fi
101 done
103 echo "++ dumping all databases into $l_prefix/var/postgresql/db.dump.sql.bz2"
104 PGPASSWORD="$l_pgpass" \
105 $l_prefix/bin/pg_dumpall \
106 -U "$l_pguser" -o |\
107 $l_prefix/lib/openpkg/bzip2 -9 \
108 >$l_prefix/var/postgresql/db.dump.sql.bz2
109 chown ${l_rusr}:${l_rgrp} $l_prefix/var/postgresql/db.dump.sql.bz2
110 chmod 700 $l_prefix/var/postgresql/db.dump.sql.bz2
112 echo "++ restoring original access policy"
113 cp -p $l_prefix/var/postgresql/db/pg_hba.conf.orig \
114 $l_prefix/var/postgresql/db/pg_hba.conf
115 rm -f $l_prefix/var/postgresql/db/pg_hba.conf.orig
117 if [ ".$epilog" = .reload ]; then
118 echo "++ reloading already running database engine (again)"
119 $l_prefix/bin/openpkg rc postgresql reload
120 sleep 2
121 else
122 echo "++ stopping temporarily started database engine"
123 $l_prefix/bin/openpkg rc postgresql stop
124 sleep 4
125 fi
126 ;;
128 restore )
129 if [ ".`$l_prefix/bin/openpkg rc postgresql status 2>&1 | grep 'is running'`" != . ]; then
130 echo "++ stopping already running database engine"
131 $l_prefix/bin/openpkg rc postgresql stop
132 sleep 2
133 epilog=start
134 else
135 epilog=none
136 fi
138 echo "++ rotating database directories $l_prefix/var/postgresql/db.old*/"
139 i=9
140 rm -rf $l_prefix/var/postgresql/db.old.$i >/dev/null 2>&1 || true
141 while [ $i -gt 0 ]; do
142 j=$i
143 i=`expr $i - 1`
144 if [ $i -eq 0 ]; then
145 prev="$l_prefix/var/postgresql/db"
146 next="$l_prefix/var/postgresql/db.old.$j"
147 else
148 prev="$l_prefix/var/postgresql/db.old.$i"
149 next="$l_prefix/var/postgresql/db.old.$j"
150 fi
151 if [ -d $prev ]; then
152 mv $prev $next
153 fi
154 done
156 echo "++ creating new database directory $l_prefix/var/postgresql/db/"
157 mkdir $l_prefix/var/postgresql/db
158 chown ${l_rusr}:${l_rgrp} $l_prefix/var/postgresql/db
159 chmod 700 $l_prefix/var/postgresql/db
161 su - ${l_rusr} -c \
162 "LC_CTYPE=C; export LC_CTYPE; umask 022; \
163 echo $l_pgpass >$l_prefix/var/postgresql/run/pw; \
164 $l_prefix/bin/pg_initdb \
165 -U $l_pguser --pwfile=$l_prefix/var/postgresql/run/pw \
166 -D $l_prefix/var/postgresql/db; \
167 rm -f $l_prefix/var/postgresql/run/pw" 2>&1 |\
168 $l_prefix/lib/openpkg/shtool prop \
169 -p "++ creating new database data"
171 echo "++ restoring database configurations"
172 for conf in pg_hba.conf pg_ident.conf postgresql.conf; do
173 cp -p $l_prefix/var/postgresql/db.old.1/$conf \
174 $l_prefix/var/postgresql/db/
175 done
177 echo "++ enforcing full-superuser access policy"
178 cp -p $l_prefix/var/postgresql/db/pg_hba.conf \
179 $l_prefix/var/postgresql/db/pg_hba.conf.orig
180 ( echo "local all all trust"
181 echo "host all all 127.0.0.1/32 trust"
182 ) >$l_prefix/var/postgresql/db/pg_hba.conf
184 if [ ".$epilog" = .start ]; then
185 echo "++ starting database engine"
186 else
187 echo "++ temporarily starting database engine"
188 fi
189 $l_prefix/bin/openpkg rc postgresql start
190 sleep 4
192 echo "++ restoring all databases from $l_prefix/var/postgresql/db.dump.sql.bz2"
193 $l_prefix/lib/openpkg/bzip2 -c -d \
194 $l_prefix/var/postgresql/db.dump.sql.bz2 |\
195 $l_prefix/bin/psql -U "$l_pguser" -d "$l_pgdata" 2>&1 |\
196 tee $l_prefix/var/postgresql/db.log |\
197 $l_prefix/lib/openpkg/shtool prop \
198 -p "++ restoring data (see $l_prefix/var/postgresql/db.log)"
200 echo "++ restoring original access policy"
201 cp -p $l_prefix/var/postgresql/db/pg_hba.conf.orig \
202 $l_prefix/var/postgresql/db/pg_hba.conf
203 rm -f $l_prefix/var/postgresql/db/pg_hba.conf.orig
205 if [ ".$epilog" = .start ]; then
206 echo "++ reloading already running database engine"
207 $l_prefix/bin/openpkg rc postgresql reload
208 sleep 2
209 else
210 echo "++ stopping temporarily started database engine"
211 $l_prefix/bin/openpkg rc postgresql stop
212 sleep 4
213 fi
214 ;;
215 * )
216 echo "$0:ERROR: unknown command \"$cmd\"" 1>&2
217 exit 1
218 ;;
219 esac