postgresql.spec 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389
  1. ##
  2. ## postgresql.spec -- OpenPKG RPM Specification
  3. ## Copyright (c) 2000-2003 Cable & Wireless Deutschland GmbH
  4. ## Copyright (c) 2000-2003 The OpenPKG Project <http://www.openpkg.org/>
  5. ## Copyright (c) 2000-2003 Ralf S. Engelschall <rse@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. ##
  25. # package versions
  26. %define V_postgresql 7.3.2
  27. %define V_libpqpp 4.0
  28. %define V_libpqxx 1.3.6
  29. %define V_pgperl 2.0.2
  30. %define V_psqlodbc 7.2.5
  31. # package information
  32. Name: postgresql
  33. Summary: PostgreSQL Database
  34. URL: http://www.postgresql.org/
  35. Vendor: PostgreSQL Group
  36. Packager: The OpenPKG Project
  37. Distribution: OpenPKG [BASE]
  38. Group: Database
  39. License: GPL
  40. Version: %{V_postgresql}
  41. Release: 20030204
  42. # package options
  43. %option with_cxx no
  44. %option with_perl no
  45. %option with_odbc no
  46. # list of sources
  47. Source0: ftp://ftp.postgresql.org/pub/source/v%{V_postgresql}/postgresql-%{V_postgresql}.tar.gz
  48. Source1: ftp://gborg.postgresql.org/pub/libpqpp/stable/libpq++-%{V_libpqpp}.tar.gz
  49. Source2: ftp://gborg.postgresql.org/pub/libpqxx/stable/libpqxx-%{V_libpqxx}.tar.gz
  50. Source3: ftp://gborg.postgresql.org/pub/pgperl/stable/pgperl-%{V_pgperl}.tar.gz
  51. Source4: ftp://ftp.us.postgresql.org/odbc/versions/src/psqlodbc-%{V_psqlodbc}.tar.gz
  52. Source5: rc.postgresql
  53. Source6: pg_migrate
  54. # build information
  55. Prefix: %{l_prefix}
  56. BuildRoot: %{l_buildroot}
  57. BuildPreReq: OpenPKG, openpkg >= 20030103, make, gcc, readline, flex, bison, zlib, openssl
  58. PreReq: OpenPKG, openpkg >= 20030103
  59. %if "%{with_perl}" == "yes"
  60. BuildPreReq: perl, perl-openpkg
  61. PreReq: perl, perl-openpkg
  62. %endif
  63. %if "%{with_odbc}" == "yes"
  64. BuildPreReq: unixodbc
  65. PreReq: unixodbc
  66. %endif
  67. AutoReq: no
  68. AutoReqProv: no
  69. %description
  70. PostgreSQL is a sophisticated Object-Relational DBMS, supporting
  71. almost all SQL constructs, including subselects, transactions,
  72. and user-defined types and functions. It is the most advanced
  73. open-source database available anywhere.
  74. %prep
  75. %setup0 -q
  76. %if "%{with_cxx}" == "yes"
  77. %setup1 -q -T -D -a 1
  78. %setup2 -q -T -D -a 2
  79. %endif
  80. %if "%{with_perl}" == "yes"
  81. %setup3 -q -T -D -a 3
  82. %endif
  83. %if "%{with_odbc}" == "yes"
  84. %setup4 -q -T -D -a 4
  85. %endif
  86. # adjust source tree
  87. %{l_shtool} subst \
  88. -e 's;\(#define.*DEFAULT_PGSOCKET_DIR[^"]*"\)/tmp\("\);\1%{l_prefix}/var/postgresql/run\2;' \
  89. src/include/pg_config.h.in
  90. %{l_shtool} subst \
  91. -e 's;^\(sqlmansect *=\).*$;\1 7;' \
  92. src/makefiles/Makefile.solaris
  93. %{l_shtool} subst \
  94. -e 's;$(INSTALL_SHLIB);#$(INSTALL_SHLIB);g' \
  95. src/backend/utils/mb/conversion_procs/proc.mk
  96. %build
  97. # configure package
  98. CC="%{l_cc}" \
  99. CFLAGS="%{l_cflags -O}" \
  100. CPPFLAGS="%{l_cppflags}" \
  101. LDFLAGS="%{l_ldflags}" \
  102. ./configure \
  103. --prefix=%{l_prefix} \
  104. --with-openssl=%{l_prefix} \
  105. --with-readline \
  106. --with-zlib \
  107. --disable-syslog \
  108. --disable-shared
  109. # build package
  110. %{l_make} %{l_mflags -O}
  111. # build C++ bindings (both old and new one)
  112. %if "%{with_cxx}" == "yes"
  113. ( cd libpq++-%{V_libpqpp}
  114. CXX="%{l_cxx}"
  115. CFLAGS="%{l_cflags -O}"
  116. CPPFLAGS="-DHAVE_NAMESPACE_STD -DHAVE_CXX_STRING_HEADER -DDLLIMPORT= "
  117. CPPFLAGS="$CPPFLAGS -I. -I../src/interfaces/libpq -I../src/interfaces"
  118. CPPFLAGS="$CPPFLAGS -I../src/include %{l_cppflags}"
  119. LDFLAGS="%{l_ldflags}"
  120. OBJS="pgconnection.o pgdatabase.o pgtransdb.o pgcursordb.o pglobject.o"
  121. for o in $OBJS; do
  122. $CXX $CFLAGS $CPPFLAGS $LDFLAGS -c -o $o `echo $o | sed -e 's;\.o$;.cc;'`
  123. done
  124. rm -f libpq++.a
  125. ar rc libpq++.a $OBJS
  126. )
  127. ( cd libpqxx-%{V_libpqxx}
  128. export CC="%{l_cc}"
  129. export CXX="%{l_cxx}"
  130. export CFLAGS="%{l_cflags -O}"
  131. export CXXFLAGS="%{l_cxxflags -O}"
  132. export CPPFLAGS="-I`pwd`/../src/include %{l_cppflags}"
  133. export LDFLAGS="%{l_ldflags}"
  134. export LIBS="-lssl -lcrypto -lcrypt"
  135. ./configure \
  136. --with-postgres-lib=`pwd`/../src/interfaces/libpq \
  137. --with-postgres-include=`pwd`/../src/interfaces/libpq \
  138. --disable-shared
  139. # %{l_make} %{l_mflags -O}
  140. /cw/bin/gmake %{l_mflags -O}
  141. )
  142. %endif
  143. # build Perl bindings
  144. %if "%{with_perl}" == "yes"
  145. rm -rf $RPM_BUILD_ROOT
  146. ( cd Pg-%{V_pgperl}
  147. %{l_prefix}/bin/perl-openpkg prolog
  148. export POSTGRES_INCLUDE=dummy
  149. export POSTGRES_LIB=dummy
  150. %{l_shtool} subst \
  151. -e 's;-I$POSTGRES_INCLUDE;-I../src/interfaces/libpq -I../src/include;' \
  152. -e 's;-L$POSTGRES_LIB;-L../src/interfaces/libpq;' \
  153. -e 's;-lpq;-lpq %{l_ldflags} -lssl -lcrypto -lcrypt;' \
  154. Makefile.PL
  155. %{l_prefix}/bin/perl-openpkg install
  156. %{l_prefix}/bin/perl-openpkg epilog
  157. )
  158. %endif
  159. # build ODBC driver
  160. %if "%{with_odbc}" == "yes"
  161. ( cd psqlodbc-%{V_psqlodbc}
  162. export CC="%{l_cc}"
  163. export CXX="%{l_cxx}"
  164. export CFLAGS="%{l_cflags -O}"
  165. export CXXFLAGS="%{l_cxxflags -O}"
  166. export CPPFLAGS="-I`pwd`/../src/include"
  167. CPPFLAGS="$CPPFLAGS -I`pwd`/../src/interfaces -I`pwd`/../src/interfaces/libpq"
  168. CPPFLAGS="$CPPFLAGS %{l_cppflags}"
  169. export LDFLAGS="-L`pwd`/../src/interfaces/libpq %{l_ldflags}"
  170. ./configure \
  171. --prefix=%{l_prefix} \
  172. --with-unixodbc \
  173. --with-odbcinst=%{l_prefix}/etc/unixodbc
  174. %{l_make} %{l_mflags -O}
  175. )
  176. %endif
  177. %install
  178. %if "%{with_perl}" != "yes"
  179. rm -rf $RPM_BUILD_ROOT
  180. %endif
  181. # perform standard installation procedure
  182. %{l_make} %{l_mflags} install DESTDIR=$RPM_BUILD_ROOT
  183. # strip down installation
  184. rm -rf $RPM_BUILD_ROOT%{l_prefix}/doc
  185. strip $RPM_BUILD_ROOT%{l_prefix}/bin/* >/dev/null 2>&1 || true
  186. rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/pgaccess.1
  187. rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/pgtclsh.1
  188. rm -f $RPM_BUILD_ROOT%{l_prefix}/man/man1/pgtksh.1
  189. rm -f $RPM_BUILD_ROOT%{l_prefix}/lib/lib*.so*
  190. # namespace adjustments to installation
  191. for prog in \
  192. createdb createlang createuser dropdb droplang \
  193. dropuser initdb initlocation ipcclean vacuumdb; do
  194. mv $RPM_BUILD_ROOT%{l_prefix}/bin/$prog \
  195. $RPM_BUILD_ROOT%{l_prefix}/bin/pg_$prog
  196. mv $RPM_BUILD_ROOT%{l_prefix}/man/man1/$prog.1 \
  197. $RPM_BUILD_ROOT%{l_prefix}/man/man1/pg_$prog.1
  198. done
  199. ( cd $RPM_BUILD_ROOT%{l_prefix}/man/man7
  200. for man in *.7; do
  201. mv $man pg_$man
  202. done
  203. )
  204. # create additional directories
  205. %{l_shtool} mkdir -f -p -m 755 \
  206. $RPM_BUILD_ROOT%{l_prefix}/var/postgresql/db \
  207. $RPM_BUILD_ROOT%{l_prefix}/var/postgresql/run
  208. # install migration utility
  209. %{l_shtool} install -c -m 755 \
  210. -e 's;@l_prefix@;%{l_prefix};g' \
  211. -e 's;@l_rusr@;%{l_rusr};g' \
  212. -e 's;@l_rgrp@;%{l_rgrp};g' \
  213. %{SOURCE pg_migrate} \
  214. $RPM_BUILD_ROOT%{l_prefix}/bin/
  215. # install C++ bindings (both old and new one)
  216. %if "%{with_cxx}" == "yes"
  217. ( cd libpq++-%{V_libpqpp}
  218. %{l_shtool} mkdir -f -p -m 755 \
  219. $RPM_BUILD_ROOT%{l_prefix}/include/libpq++
  220. %{l_shtool} install -c -m 644 \
  221. libpq++.h pgconnection.h pgdatabase.h pgtransdb.h pgcursordb.h pglobject.h \
  222. $RPM_BUILD_ROOT%{l_prefix}/include/libpq++/
  223. %{l_shtool} install -c -m 644 \
  224. libpq++.a \
  225. $RPM_BUILD_ROOT%{l_prefix}/lib/
  226. )
  227. ( cd libpqxx-%{V_libpqxx}
  228. %{l_shtool} mkdir -f -p -m 755 \
  229. $RPM_BUILD_ROOT%{l_prefix}/include/pqxx
  230. %{l_shtool} install -c -m 644 \
  231. include/pqxx/*.h \
  232. $RPM_BUILD_ROOT%{l_prefix}/include/pqxx/
  233. %{l_shtool} install -c -m 644 \
  234. src/.libs/libpqxx.a \
  235. $RPM_BUILD_ROOT%{l_prefix}/lib/
  236. )
  237. %endif
  238. # build ODBC driver
  239. %if "%{with_odbc}" == "yes"
  240. ( cd psqlodbc-%{V_psqlodbc}
  241. %{l_make} %{l_mflags} install AM_MAKEFLAGS="DESTDIR=$RPM_BUILD_ROOT"
  242. )
  243. %endif
  244. # install run-command script
  245. %{l_shtool} mkdir -f -p -m 755 \
  246. $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d
  247. %{l_shtool} install -c -m 755 \
  248. -e 's;@l_prefix@;%{l_prefix};g' \
  249. -e 's;@l_rusr@;%{l_rusr};g' \
  250. -e 's;@l_rgrp@;%{l_rgrp};g' \
  251. %{SOURCE rc.postgresql} \
  252. $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/
  253. # determine installation files
  254. %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
  255. %{l_files_std} \
  256. '%attr(700,%{l_rusr},%{l_rgrp}) %dir %{l_prefix}/var/postgresql/db' \
  257. '%attr(755,%{l_rusr},%{l_rgrp}) %dir %{l_prefix}/var/postgresql/run' \
  258. '%config %{l_prefix}/var/postgresql/db/*.conf'
  259. %files -f files
  260. %clean
  261. rm -rf $RPM_BUILD_ROOT
  262. %pre
  263. if [ $1 -gt 1 ]; then
  264. # upgrading of installation
  265. if [ -f $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION -a \
  266. -f $RPM_INSTALL_PREFIX/bin/pg_migrate ]; then
  267. # database migration dumping hint
  268. v_old_all=`cat $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION`
  269. v_old_maj=`echo "$v_old_all" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
  270. v_new_all="%{V_postgresql}"
  271. v_new_maj=`echo "$v_new_all" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
  272. if [ ".$v_old_maj" != ".$v_new_maj" ]; then
  273. if [ ! -f $RPM_INSTALL_PREFIX/var/postgresql/db.dump.sql.bz2 -a ".$PG_MIGRATE" != .ignore ]; then
  274. ( echo "You are upgrading from PostgreSQL $v_old_all to PostgresSQL $v_new_all,"
  275. echo "which is a major version change. We expect a database incompatibility,"
  276. echo "so we strongly recommend that you backup your existing database"
  277. echo "($RPM_INSTALL_PREFIX/var/postgresql/db/) first by running:"
  278. echo " \$ $RPM_INSTALL_PREFIX/bin/pg_migrate dump"
  279. echo "Alternatively, if you want force this package to be installed without"
  280. echo "performing a database dump, run the following command before upgrading:"
  281. echo " \$ PG_MIGRATE=ignore; export PG_MIGRATE"
  282. ) | %{l_rpmtool} msg -b -t error
  283. exit 1
  284. fi
  285. fi
  286. fi
  287. rm -f $RPM_INSTALL_PREFIX/var/posgresql/RESTART >/dev/null 2>&1 || true
  288. if [ ".`$l_prefix/etc/rc postgresql status 2>&1 | grep 'is running'`" != . ]; then
  289. echo "Shutting down currently running database engine." | %{l_rpmtool} msg -b -t notice
  290. $RPM_INSTALL_PREFIX/etc/rc postgresql stop
  291. touch $RPM_INSTALL_PREFIX/var/posgresql/RESTART
  292. sleep 4
  293. fi
  294. fi
  295. %post
  296. if [ $1 -eq 1 ]; then
  297. # create initial database
  298. su - %{l_rusr} -c \
  299. "LC_CTYPE=C; export LC_CTYPE; umask 022; \
  300. (echo 'postgresql'; echo 'postgresql') |\
  301. $RPM_INSTALL_PREFIX/bin/pg_initdb \
  302. -U postgresql -W -D $RPM_INSTALL_PREFIX/var/postgresql/db" 2>&1 |\
  303. $RPM_INSTALL_PREFIX/lib/openpkg/shtool prop \
  304. -p "Creating initial PostgreSQL DB in $RPM_INSTALL_PREFIX/var/postgresql/db"
  305. # adjust initial authentication configuration
  306. cp $RPM_INSTALL_PREFIX/var/postgresql/db/pg_hba.conf \
  307. $RPM_INSTALL_PREFIX/var/postgresql/db/pg_hba.conf.old
  308. ( cat $RPM_INSTALL_PREFIX/var/postgresql/db/pg_hba.conf.old |\
  309. sed -e 's;^\([^#]\);# \1;' -e 's;^$;#;'
  310. echo ""
  311. echo "# OpenPKG PostgreSQL default access policy"
  312. echo "local all all md5"
  313. echo "host all all 127.0.0.1 255.255.255.255 md5"
  314. echo ""
  315. ) >$RPM_INSTALL_PREFIX/var/postgresql/db/pg_hba.conf
  316. rm -f $RPM_INSTALL_PREFIX/var/postgresql/db/pg_hba.conf.old
  317. # display information about next steps
  318. ( echo "An initial PostgreSQL DB was created with the two standard"
  319. echo "databases 'template0' and 'template1'. The owner of both"
  320. echo "is the DB user 'postgresql'. Its initial password is 'postgresql'."
  321. echo "After starting PostgreSQL you should change this as quick as"
  322. echo "possible with the following command:"
  323. echo "\$ $RPM_INSTALL_PREFIX/bin/psql -U postgresql -d template1 \\"
  324. echo " -c \"ALTER USER postgresql WITH PASSWORD '<new-password>'\""
  325. ) | %{l_rpmtool} msg -b -t notice
  326. # optionally link into unixODBC
  327. %if "%{with_odbc}" == "yes"
  328. ( echo "[PostgreSQL]"
  329. echo "Description = PostgreSQL ODBC driver"
  330. echo "Driver = $RPM_INSTALL_PREFIX/lib/psqlodbc.so"
  331. echo "Threading = 2"
  332. ) $RPM_INSTALL_PREFIX/bin/odbcinst -i -d -r
  333. %endif
  334. elif [ $1 -gt 1 ]; then
  335. # upgrading of installation
  336. if [ -f $RPM_INSTALL_PREFIX/var/posgresql/RESTART ]; then
  337. echo "Starting database engine again." | %{l_rpmtool} msg -b -t notice
  338. $RPM_INSTALL_PREFIX/etc/rc postgresql start
  339. rm -f $RPM_INSTALL_PREFIX/var/posgresql/RESTART >/dev/null 2>&1 || true
  340. sleep 2
  341. fi
  342. if [ -f $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION -a ".$PG_MIGRATE" != .ignore ]; then
  343. # database migration restoring hint
  344. v_old_all=`cat $RPM_INSTALL_PREFIX/var/postgresql/db/PG_VERSION`
  345. v_old_maj=`echo "$v_old_all" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
  346. v_new_all="%{V_postgresql}"
  347. v_new_maj=`echo "$v_new_all" | sed -e 's/^\([0-9]*\.[0-9]*\).*/\1/'`
  348. if [ ".$v_old_maj" != ".$v_new_maj" ]; then
  349. ( echo "You upgraded from PostgreSQL $v_old_all to PostgresSQL $v_new_all,"
  350. echo "which is a major version upgrade. We expect a database incompatibility,"
  351. echo "so we strongly recommend you to recreate the existing database under"
  352. echo "$RPM_INSTALL_PREFIX/var/postgresql/db/ by running the following command:"
  353. echo " \$ $RPM_INSTALL_PREFIX/bin/pg_dump restore"
  354. ) | %{l_rpmtool} msg -b -t warn
  355. fi
  356. fi
  357. fi