Skip to contentSkip to conversation

postgresql: new package

PATCH Superseded Peter Seiderer 3 participants 4 messages Mar 18, 2014 – Mar 29, 2014

v2 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 postgresql: new package

Based on suggested new package by Marco Trapanese ([1]).

[1] http://lists.busybox.net/pipermail/buildroot/2014-February/090661.html

---
Changes v1 -> v2:
- add postgresql user
- add postgresql data directory
- add sysv initialize and startup script

---
 package/Config.in                |  1 +
 package/postgresql/Config.in     | 13 ++++++++++++
 package/postgresql/S50postgresql | 44 ++++++++++++++++++++++++++++++++++++++++
 package/postgresql/postgresql.mk | 44 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 102 insertions(+)
 create mode 100644 package/postgresql/Config.in
 create mode 100644 package/postgresql/S50postgresql
 create mode 100644 package/postgresql/postgresql.mk
package/Config.in +1 -0
index 70e5a7f..f8a86ea 100644
@@ -539,6 +539,7 @@ source "package/berkeleydb/Config.in"
 source "package/cppdb/Config.in"
 source "package/gdbm/Config.in"
 source "package/mysql/Config.in"
+source "package/postgresql/Config.in"
 source "package/redis/Config.in"
 source "package/sqlcipher/Config.in"
 source "package/sqlite/Config.in"
package/postgresql/Config.in new file +13 -0
new file mode 100644
index 0000000..efc296f
@@ -0,0 +1,13 @@
+config BR2_PACKAGE_POSTGRESQL
+	bool "PostgreSQL"
+	depends on BR2_INET_IPV6
+	select BR2_PACKAGE_READLINE
+	select BR2_PACKAGE_ZLIB
+	help
+	  PostgreSQL is a powerful, open source object-relational
+	  database system.
+
+	  http://www.postgresql.org
+
+comment "PostgreSQL needs a toolchain w/ IPv6"
+	depends on !BR2_INET_IPV6
package/postgresql/S50postgresql new file +44 -0

44 lines not on this page · raw message

package/postgresql/postgresql.mk new file +44 -0

44 lines not on this page · raw message

Signature · 1 line
1.8.1.4
#1 lore raw

PATCH v2 1/1 postgresql: new package

Dear Peter Seiderer,

Quoted 5 lines · Peter Seiderer

Based on suggested new package by Marco Trapanese ([1]).

[1] http://lists.busybox.net/pipermail/buildroot/2014-February/090661.html

I've tried to build this, but it doesn't build here. I'm using the following defconfig:

BR2_arm=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_CUSTOM=y
BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y BR2_TOOLCHAIN_EXTERNAL_URL="http://autobuild.buildroot.org/toolchains/tarballs/br-arm-full-2014.02-rc1.tar.bz2" BR2_TOOLCHAIN_EXTERNAL_HEADERS_3_13=y
BR2_TOOLCHAIN_EXTERNAL_LARGEFILE=y
BR2_TOOLCHAIN_EXTERNAL_INET_IPV6=y
BR2_TOOLCHAIN_EXTERNAL_LOCALE=y
# BR2_TOOLCHAIN_EXTERNAL_HAS_THREADS_DEBUG is not set
BR2_TOOLCHAIN_EXTERNAL_INET_RPC=y
BR2_TOOLCHAIN_EXTERNAL_CXX=y
BR2_INIT_NONE=y
BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
BR2_PACKAGE_POSTGRESQL=y
BR2_PACKAGE_LIBNDP=y

The build failure is:

In file included from regcomp.c:2030:0:
regc_pg_locale.c: In function ?pg_wc_isdigit?:
regc_pg_locale.c:312:6: error: dereferencing pointer to incomplete type
regc_pg_locale.c: In function ?pg_wc_isalpha?:
regc_pg_locale.c:345:6: error: dereferencing pointer to incomplete type
regc_pg_locale.c: In function ?pg_wc_isalnum?:
regc_pg_locale.c:378:6: error: dereferencing pointer to incomplete type
regc_pg_locale.c: In function ?pg_wc_isupper?:
regc_pg_locale.c:411:6: error: dereferencing pointer to incomplete type
regc_pg_locale.c: In function ?pg_wc_islower?:
regc_pg_locale.c:444:6: error: dereferencing pointer to incomplete type
regc_pg_locale.c: In function ?pg_wc_isgraph?:
regc_pg_locale.c:477:6: error: dereferencing pointer to incomplete type
regc_pg_locale.c: In function ?pg_wc_isprint?:
regc_pg_locale.c:510:6: error: dereferencing pointer to incomplete type
regc_pg_locale.c: In function ?pg_wc_ispunct?:
regc_pg_locale.c:543:6: error: dereferencing pointer to incomplete type
regc_pg_locale.c: In function ?pg_wc_isspace?:
regc_pg_locale.c:576:6: error: dereferencing pointer to incomplete type
regc_pg_locale.c: In function ?pg_wc_toupper?:
regc_pg_locale.c:617:12: error: dereferencing pointer to incomplete type regc_pg_locale.c:617:12: error: dereferencing pointer to incomplete type
regc_pg_locale.c: In function ?pg_wc_tolower?:
regc_pg_locale.c:658:12: error: dereferencing pointer to incomplete type regc_pg_locale.c:658:12: error: dereferencing pointer to incomplete type
make[4]: *** [regcomp.o] Erreur 1
make[4]: quittant le r?pertoire ? /home/thomas/projets/buildroot/output/build/postgresql-9.3.3/src/backend/regex ?

Some other comments below.

package/postgresql/Config.in line 2

Quoted 8 lines
package/postgresql/Config.in new file +2 -0
new file mode 100644
index 0000000..efc296f
@@ -0,0 +1,13 @@
+config BR2_PACKAGE_POSTGRESQL
+	bool "PostgreSQL"

should be lower-case.

package/postgresql/Config.in line 12

Quoted 10 lines
package/postgresql/Config.in new file +10 -0
+	depends on BR2_INET_IPV6
+	select BR2_PACKAGE_READLINE
+	select BR2_PACKAGE_ZLIB
+	help
+	  PostgreSQL is a powerful, open source object-relational
+	  database system.
+
+	  http://www.postgresql.org
+
+comment "PostgreSQL needs a toolchain w/ IPv6"

Ditto.

Quoted 57 lines
package/postgresql/Config.in new file +1 -0
+	depends on !BR2_INET_IPV6
package/postgresql/S50postgresql new file +44 -0
new file mode 100644
index 0000000..06cb4d5
@@ -0,0 +1,44 @@
+#!/bin/sh
+#
+# start postgresql
+#
+
+umask 077
+
+if [ ! -f /srv/pgsql/data/PG_VERSION ]; then
+	echo "Initializing postgresql data base..."
+	su - postgres -c '/usr/bin/pg_ctl initdb -D /srv/pgsql/data '
+	echo "done"
+fi
+
+start() {
+	echo -n "Starting postgresql: "
+	su - postgres -c '/usr/bin/pg_ctl start -D /srv/pgsql/data -l logfile'
+	echo "OK"
+}
+stop() {
+	echo -n "Stopping postgresql: "
+	su - postgres -c '/usr/bin/pg_ctl stop -D /srv/pgsql/data -m fast'
+	echo "OK"
+}
+restart() {
+	stop
+	start
+}
+
+case "$1" in
+	start)
+		start
+		;;
+	stop)
+		stop
+		;;
+	restart|reload)
+		restart
+		;;
+	*)
+		echo "Usage: $0 {start|stop|restart}"
+		exit 1
+esac
+
+exit $?
package/postgresql/postgresql.mk new file +0 -0
new file mode 100644
index 0000000..f4edc69

package/postgresql/postgresql.mk line 9

Quoted 9 lines
package/postgresql/postgresql.mk new file +9 -0
@@ -0,0 +1,44 @@
+################################################################################
+#
+# postgresql
+#
+################################################################################
+
+POSTGRESQL_VERSION = 9.3.3
+POSTGRESQL_SOURCE = postgresql-$(POSTGRESQL_VERSION).tar.bz2
+POSTGRESQL_SITE = http://ftp.postgresql.org/pub/source/v$(POSTGRESQL_VERSION)/$(POSTGRESQL_SOURCE)

This looks weird, why is $(POSTGRESQL_SOURCE) at the end of the site?

package/postgresql/postgresql.mk line 13

Quoted 4 lines
package/postgresql/postgresql.mk new file +4 -0
+POSTGRESQL_LICENSE = PostgreSQL
+POSTGRESQ_LICENSE_FILES = COPYRIGHT
+POSTGRESQL_DEPENDENCIES = readline zlib
+POSTGRESQL_CONF_OPT = --prefix=/usr

This is not needed, as --prefix=/usr is part of the default configuration options.

Quoted 4 lines
package/postgresql/postgresql.mk new file +4 -0
+
+ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
+	POSTGRESQL_CONF_OPT += --disable-thread-safety
+endif

package/postgresql/postgresql.mk line 27

Quoted 10 lines
package/postgresql/postgresql.mk new file +10 -0
+
+ifeq ($(BR2_PACKAGE_TZDATA),y)
+	POSTGRESQL_DEPENDENCIES += tzdata
+	POSTGRESQL_CONF_OPT += --with-system-tzdata=/usr/share/zoneinfo
+endif
+
+ifeq ($(BR2_PACKAGE_OPENSSL),y)
+	POSTGRESQL_DEPENDENCIES += openssl
+	POSTGRESQL_CONF_OPT += --with-openssl
+endif

Please add a else condition to this test.

else

	POSTGRESQL_CONF_OPT += --without-openssl

endif

Also, there are many, many more configuration options. You don't have to support all of them for a first submission, but if you don't support a given feature, you should pass --without-<foo> for it so that the configure script doesn't mistakenly detect a library from the host. So for example: --without-pam --without-python --without-perl, etc.

I see that you're making readline and zlib mandatory dependencies, but they are not: the package has --without-readline and --without-zlib options. So instead of mandatory dependencies, you should use:

ifeq ($(BR2_PACKAGE_READLINE),y)
POSTGRESQL_CONF_OPT += --with-readline
POSTGRESQL_DEPENDENDENCIES += readline
else
POSTGRESQL_CONF_OPT += --without-readline
endif

package/postgresql/postgresql.mk line 31

Quoted 4 lines
package/postgresql/postgresql.mk new file +4 -0
+
+define POSTGRESQL_USERS
+	postgres -1 postgres -1 * /srv/pgsql/data /bin/sh postgres PostgreSQL Server
+endef

Is /srv a normal location for databases? Isn't /var used in general?

package/postgresql/postgresql.mk line 34

Quoted 3 lines
package/postgresql/postgresql.mk new file +3 -0
+
+define POSTGRESQL_INSTALL_TARGET_FIXUP
+	$(INSTALL) -v -dm700 $(TARGET_DIR)/srv/pgsql/data

-v seems useless.

Also, is there something that ensures that the /srv/pgsql/data directory is owned by the postgres user and group, instead of the default root user?

package/postgresql/postgresql.mk line 44

Quoted 10 lines
package/postgresql/postgresql.mk new file +10 -0
+endef
+
+POSTGRESQL_POST_INSTALL_TARGET_HOOKS += POSTGRESQL_INSTALL_TARGET_FIXUP
+
+define POSTGRESQL_INSTALL_INIT_SYSV
+	$(INSTALL) -m 0755 -D package/postgresql/S50postgresql \
+		$(TARGET_DIR)/etc/init.d/S50postgresql
+endef
+
+$(eval $(autotools-package))

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
#2 lore raw

PATCH v2 1/1 postgresql: new package

Thomas, Peter, All,

On 2014-03-29 11:57 +0100, Thomas Petazzoni spake thusly:

Quoted 6 lines · Peter Seiderer
Quoted 5 lines

Based on suggested new package by Marco Trapanese ([1]).

[1] http://lists.busybox.net/pipermail/buildroot/2014-February/090661.html

[--SNIP--]

Quoted 2 lines

package/postgresql/postgresql.mk line 30

Quoted 2 lines
package/postgresql/postgresql.mk new file +2 -0
+define POSTGRESQL_USERS
+	postgres -1 postgres -1 * /srv/pgsql/data /bin/sh postgres PostgreSQL Server
                                                          ^^^^^^^^

Do not add its own group to the additionnal groups, just set it to '-'.

Quoted 10 lines
Quoted 1 line

+endef

Is /srv a normal location for databases? Isn't /var used in general?

package/postgresql/postgresql.mk line 34

Quoted 3 lines
package/postgresql/postgresql.mk new file +3 -0
+
+define POSTGRESQL_INSTALL_TARGET_FIXUP
+	$(INSTALL) -v -dm700 $(TARGET_DIR)/srv/pgsql/data

-v seems useless.

Quoted 3 lines

Also, is there something that ensures that the /srv/pgsql/data directory is owned by the postgres user and group, instead of the default root user?

Yes, the mkuser script does chown the homes to the uid:gid of the user:
the output of mkuser is put in the fakeroot script, and mkuser does:

    if [ "${home}" != "-" ]; then
        mkdir -p "${TARGET_DIR}/${home}"
        printf "chown -R %d:%d '%s'\n" "${uid}" "${_gid}" "${TARGET_DIR}/${home}"
    fi

Regards,
Yann E. MORIN.

Signature · 6 lines
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'
#3 lore raw

PATCH v2 1/1 postgresql: new package

Dear Yann E. MORIN,

Quoted 11 lines · Yann E. MORIN
Quoted 3 lines

Also, is there something that ensures that the /srv/pgsql/data directory is owned by the postgres user and group, instead of the default root user?

Yes, the mkuser script does chown the homes to the uid:gid of the user:
the output of mkuser is put in the fakeroot script, and mkuser does:

    if [ "${home}" != "-" ]; then
        mkdir -p "${TARGET_DIR}/${home}"
        printf "chown -R %d:%d '%s'\n" "${uid}" "${_gid}" "${TARGET_DIR}/${home}"
    fi

Ok, good to know, thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com