postgresql: new package
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
@@ -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
@@ -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
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
Signed-off-by Peter Seiderer <[email protected]>
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 typeregc_pg_locale.c: In function ?pg_wc_isalpha?:
regc_pg_locale.c:345:6: error: dereferencing pointer to incomplete typeregc_pg_locale.c: In function ?pg_wc_isalnum?:
regc_pg_locale.c:378:6: error: dereferencing pointer to incomplete typeregc_pg_locale.c: In function ?pg_wc_isupper?:
regc_pg_locale.c:411:6: error: dereferencing pointer to incomplete typeregc_pg_locale.c: In function ?pg_wc_islower?:
regc_pg_locale.c:444:6: error: dereferencing pointer to incomplete typeregc_pg_locale.c: In function ?pg_wc_isgraph?:
regc_pg_locale.c:477:6: error: dereferencing pointer to incomplete typeregc_pg_locale.c: In function ?pg_wc_isprint?:
regc_pg_locale.c:510:6: error: dereferencing pointer to incomplete typeregc_pg_locale.c: In function ?pg_wc_ispunct?:
regc_pg_locale.c:543:6: error: dereferencing pointer to incomplete typeregc_pg_locale.c: In function ?pg_wc_isspace?:
regc_pg_locale.c:576:6: error: dereferencing pointer to incomplete typeregc_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 typeregc_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@@ -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_IPV6package/postgresql/S50postgresql new file +44
-0@@ -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
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-readlinePOSTGRESQL_DEPENDENDENCIES += readline
elsePOSTGRESQL_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
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
Signed-off-by Peter Seiderer <[email protected]>
[--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/datadirectory 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}"
fiRegards,
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. | '------------------------------^-------^------------------^--------------------'
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/datadirectory 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