From dfa0b4c86d69c14a4fc8f3bda225526ead3bcd51 Mon Sep 17 00:00:00 2001 From: "Chong.Lu@windriver.com" Date: Tue, 16 Sep 2014 17:36:35 +0800 Subject: postgresql: move initdb to postgresql-setup We shouldn't use sysvinit init script to initialize database when use systemd as the init manager, so split initdb function to postgresql-setup. Before starting postgresql server, we can use "postgresql-setup initdb" to initialize the database cluster. Signed-off-by: Chong Lu Signed-off-by: Martin Jansa --- .../postgresql/files/postgresql-setup | 73 ++++++++++++++++++++++ .../postgresql/files/postgresql.init | 52 +-------------- meta-oe/recipes-support/postgresql/postgresql.inc | 2 + 3 files changed, 77 insertions(+), 50 deletions(-) create mode 100644 meta-oe/recipes-support/postgresql/files/postgresql-setup (limited to 'meta-oe/recipes-support/postgresql') diff --git a/meta-oe/recipes-support/postgresql/files/postgresql-setup b/meta-oe/recipes-support/postgresql/files/postgresql-setup new file mode 100644 index 0000000000..75bb01e05f --- /dev/null +++ b/meta-oe/recipes-support/postgresql/files/postgresql-setup @@ -0,0 +1,73 @@ +#!/bin/sh +# +# postgresql-setup Initialization operation for PostgreSQL + +# For SELinux we need to use 'runuser' not 'su' +if [ -x /sbin/runuser ] +then + SU=runuser +else + SU=su +fi + +PGENGINE=/usr/bin +PGDATA=/var/lib/postgresql/data +PGLOG=/var/lib/postgresql/pgstartup.log +script_result=0 + +initdb(){ + if [ -f "$PGDATA/PG_VERSION" ] + then + echo -n "Data directory is not empty!" + echo -n " [FAILED] " + echo + script_result=1 + else + echo -n "Initializing database: " + if [ ! -e "$PGDATA" -a ! -h "$PGDATA" ] + then + mkdir -p "$PGDATA" || exit 1 + chown postgres:postgres "$PGDATA" + chmod go-rwx "$PGDATA" + fi + # Clean up SELinux tagging for PGDATA + [ -x /sbin/restorecon ] && /sbin/restorecon "$PGDATA" + + # Make sure the startup-time log file is OK, too + if [ ! -e "$PGLOG" -a ! -h "$PGLOG" ] + then + touch "$PGLOG" || exit 1 + chown postgres:postgres "$PGLOG" + chmod go-rwx "$PGLOG" + [ -x /sbin/restorecon ] && /sbin/restorecon "$PGLOG" + fi + + # Initialize the database + $SU -l postgres -c "$PGENGINE/initdb --pgdata='$PGDATA' --auth='ident'" >> "$PGLOG" 2>&1 < /dev/null + + # Create directory for postmaster log + mkdir "$PGDATA/pg_log" + chown postgres:postgres "$PGDATA/pg_log" + chmod go-rwx "$PGDATA/pg_log" + + if [ -f "$PGDATA/PG_VERSION" ] + then + echo -n " [ OK ] " + else + echo -n " [FAILED] " + script_result=1 + fi + echo + fi +} + +case "$1" in + initdb) + initdb + ;; + *) + echo "Usage: $0 initdb" + exit 2 +esac + +exit $script_result diff --git a/meta-oe/recipes-support/postgresql/files/postgresql.init b/meta-oe/recipes-support/postgresql/files/postgresql.init index ab46477606..4a4f0cd168 100644 --- a/meta-oe/recipes-support/postgresql/files/postgresql.init +++ b/meta-oe/recipes-support/postgresql/files/postgresql.init @@ -101,7 +101,7 @@ start(){ else # No existing PGDATA! Warn the user to initdb it. echo - echo "$PGDATA is missing. Use \"service postgresql initdb\" to initialize the cluster first." + echo "$PGDATA is missing. Use \"postgresql-setup initdb\" to initialize the cluster first." echo -n " [FAILED] " echo exit 1 @@ -160,51 +160,6 @@ reload(){ $SU -l postgres -c "$PGENGINE/pg_ctl reload -D '$PGDATA' -s" > /dev/null 2>&1 < /dev/null } -initdb(){ - if [ -f "$PGDATA/PG_VERSION" ] - then - echo -n "Data directory is not empty!" - echo -n " [FAILED] " - echo - script_result=1 - else - echo -n $"Initializing database: " - if [ ! -e "$PGDATA" -a ! -h "$PGDATA" ] - then - mkdir -p "$PGDATA" || exit 1 - chown postgres:postgres "$PGDATA" - chmod go-rwx "$PGDATA" - fi - # Clean up SELinux tagging for PGDATA - [ -x /sbin/restorecon ] && /sbin/restorecon "$PGDATA" - - # Make sure the startup-time log file is OK, too - if [ ! -e "$PGLOG" -a ! -h "$PGLOG" ] - then - touch "$PGLOG" || exit 1 - chown postgres:postgres "$PGLOG" - chmod go-rwx "$PGLOG" - [ -x /sbin/restorecon ] && /sbin/restorecon "$PGLOG" - fi - - # Initialize the database - $SU -l postgres -c "$PGENGINE/initdb --pgdata='$PGDATA' --auth='ident'" >> "$PGLOG" 2>&1 < /dev/null - - # Create directory for postmaster log - mkdir "$PGDATA/pg_log" - chown postgres:postgres "$PGDATA/pg_log" - chmod go-rwx "$PGDATA/pg_log" - - if [ -f "$PGDATA/PG_VERSION" ] - then - echo -n " [ OK ] " - else - echo -n " [FAILED] " - script_result=1 - fi - echo - fi -} # See how we were called. case "$1" in @@ -230,11 +185,8 @@ case "$1" in force-reload) restart ;; - initdb) - initdb - ;; *) - echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|initdb}" + echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" exit 2 esac diff --git a/meta-oe/recipes-support/postgresql/postgresql.inc b/meta-oe/recipes-support/postgresql/postgresql.inc index a9b4a012ca..774c8fd0c9 100644 --- a/meta-oe/recipes-support/postgresql/postgresql.inc +++ b/meta-oe/recipes-support/postgresql/postgresql.inc @@ -29,6 +29,7 @@ SRC_URI = "http://ftp.postgresql.org/pub/source/v${PV}/${BP}.tar.bz2 \ file://postgresql-bashprofile \ file://postgresql.pam \ file://0001-Use-pkg-config-for-libxml2-detection.patch \ + file://postgresql-setup \ " LEAD_SONAME = "libpq.so" @@ -171,6 +172,7 @@ do_install_append() { install -d ${D}${sysconfdir}/init.d install -m 0755 ${WORKDIR}/${BPN}.init ${D}${sysconfdir}/init.d/${BPN}-server sed -i -e "s/^PGVERSION=.*$/PGVERSION=${PV}/g" ${D}${sysconfdir}/init.d/${BPN}-server + install -m 0755 ${WORKDIR}/${BPN}-setup ${D}${bindir}/${BPN}-setup install -d -m 700 ${D}${localstatedir}/lib/${BPN}/data install -d -m 700 ${D}${localstatedir}/lib/${BPN}/backups install -m 644 ${WORKDIR}/${BPN}-bashprofile ${D}${localstatedir}/lib/${BPN}/.bash_profile -- cgit 1.2.3-korg