postgresql: new package
PATCH v2 1/1 postgresql: new package
Hello Thomas,
thanks for the review...
Quoted 51 lines · Thomas Petazzoni
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_DEBUGis 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=yThe 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 type
Quoted 9 lines
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 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?
o.k. I will take a look at it...
Quoted 12 lines
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.
mhh, did take a look at package/mysql/Config.in: bool "MySQL" and did the same, use the offical name which emphasises the SQL..., but I can change this if lower-case Menu entries are an requirement?
Quoted 13 lines
package/postgresql/Config.in line 12
Quoted 11 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.
see above...
Quoted 61 lines
Quoted 61 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 +3
-0@@ -0,0 +1,44 @@ +################################################################################ +# +# postgresql
Quoted 8 lines
package/postgresql/postgresql.mk line 9
Quoted 6 lines
package/postgresql/postgresql.mk new file +6
-0+# +################################################################################ + +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?
o.k, will fix (was copy & paste error)
Quoted 8 lines
package/postgresql/postgresql.mk line 13
Quoted 5 lines
package/postgresql/postgresql.mk new file +4
-0+POSTGRESQL_LICENSE = PostgreSQL +POSTGRESQ_LICENSE_FILES = COPYRIGHT +POSTGRESQL_DEPENDENCIES = readline zlib +POSTGRESQL_CONF_OPT = --prefix=/usrThis is not needed, as --prefix=/usr is part of the default configuration options.
o.k. will change...
Quoted 26 lines
Quoted 5 lines
package/postgresql/postgresql.mk new file +4
-0+ +ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y) + POSTGRESQL_CONF_OPT += --disable-thread-safety +endifpackage/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 +endifAlso, 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:
Quoted 7 lines
ifeq ($(BR2_PACKAGE_READLINE),y)
POSTGRESQL_CONF_OPT+= --with-readlinePOSTGRESQL_DEPENDENDENCIES+= readline
elsePOSTGRESQL_CONF_OPT+= --without-readline
endif
Did follow the PostgreSQL INSTALL hints stating:
* The GNU Readline library is used by default. It allows psql (the PostgreSQL command line SQL interpreter) to remember each command you type, and allows you to use arrow keys to recall and edit previous commands. This is very helpful and is strongly recommended. If you don't want to use it then you must specify the "--without-readline" option to "configure". As an alternative, you can often use the BSD-licensed "libedit" library, originally developed on NetBSD. The "libedit" library is GNU Readline-compatible and is used if "libreadline" is not found, or if "--with-libedit-preferred" is used as an option to "configure". If you are using a package-based Linux distribution, be aware that you need both the readline and readline-devel packages, if those
and made the default enabled packages mandatory...
The same for zlib:
* The zlib compression library is used by default. If you don't want to use it then you must specify the "--without-zlib" option to "configure". Using this option disables support for compressed archives in pg_dump and pg_restore.
But I can make readline/zlib optional (with some comment in the Config.in file)?
All other features/packages are optional (and disabled as the INSTALL file states):
The following packages are optional. They are not required in the default configuration, but they are needed when certain build options are enabled, as explained below:
So I think there is no need to disable them explicitly?
Quoted 6 lines
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 +endefIs /srv a normal location for databases? Isn't /var used in general?
o.k, will change...
Quoted 6 lines
package/postgresql/postgresql.mk line 34
Quoted 4 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.
o.k., will change...
Quoted 23 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?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
Dear Peter Seiderer,
Quoted 8 lines · Peter Seiderer
Quoted 6 lines
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?o.k. I will take a look at it...
Thanks!
Quoted 8 lines
Quoted 4 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+config BR2_PACKAGE_POSTGRESQL + bool "PostgreSQL"should be lower-case.
mhh, did take a look at package/mysql/Config.in: bool "MySQL" and did the same, use the offical name which emphasises the SQL..., but I can change this if lower-case Menu entries are an requirement?
Yeah, MySQL has been around for a long time, but I have the impression that our policy is to use lower-case menu entries everywhere. I don't know how hard this rule is, though, so let's see if others share their opinion about this. This is clearly not a very important matter.
Quoted 33 lines
Quoted 10 lines
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:
Quoted 7 lines
ifeq ($(BR2_PACKAGE_READLINE),y)
POSTGRESQL_CONF_OPT+= --with-readlinePOSTGRESQL_DEPENDENDENCIES+= readline
elsePOSTGRESQL_CONF_OPT+= --without-readline
endifDid follow the PostgreSQL INSTALL hints stating:
* The GNU Readline library is used by default. It allows psql (the PostgreSQL command line SQL interpreter) to remember each command you type, and allows you to use arrow keys to recall and edit previous commands. This is very helpful and is strongly recommended. If you don't want to use it then you must specify the "--without-readline" option to "configure". As an alternative, you can often use the BSD-licensed "libedit" library, originally developed on NetBSD. The "libedit" library is GNU Readline-compatible and is used if "libreadline" is not found, or if "--with-libedit-preferred" is used as an option to "configure". If you are using a package-based Linux distribution, be aware that you need both the readline and readline-devel packages, if those
Quoted 1 line
and made the default enabled packages mandatory...
I understand what the PostgreSQL guys say, but this statement is from the perspective of a developer who is using the command line pgsql tool. On an embedded system, except during development, there is not really a need to use pgsql interactively. And even during development, you can connect to the embedded PostgreSQL server using a remotely executed pgsql binary.
So I would make the dependency optional, and then in the main Config.in option, in the help text, add something like:
Enable the readline package to gain readline support in pgsql, which offers a much nicer user experience.
Quoted 9 lines
The same for zlib:
* The zlib compression library is used by default. If you don't want to use it then you must specify the "--without-zlib" option to "configure". Using this option disables support for compressed archives in
pg_dumpandpg_restore.But I can make readline/zlib optional (with some comment in the Config.in file)?
Yes, that would be nice I believe.
Quoted 8 lines
All other features/packages are optional (and disabled as the INSTALL file states):
The following packages are optional. They are not required in the default configuration, but they are needed when certain build options are enabled, as explained below:
So I think there is no need to disable them explicitly?
See what I explained in my previous reply:
"""
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.
"""
Or none of these options are auto-detected, and it's only if a --with-<something> or --enable-<something> option is passed that the configure script starts looking around to see if the necessary dependencies are available or not?
Quoted 7 lines
Quoted 5 lines
Review
Quoted 3 lines
(quoted diff) +3
-0+define POSTGRESQL_USERS + postgres -1 postgres -1 * /srv/pgsql/data /bin/sh postgres PostgreSQL Server +endefIs /srv a normal location for databases? Isn't /var used in general?
o.k, will change...
This really was a question. I have no idea what we prefer to use in Buildroot. For example, have you looked where our mysql package puts its database stuff?
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
Hello Thomas,
Quoted 6 lines
Gesendet: Montag, 31. M?rz 2014 um 00:13 Uhr
Von: "Thomas Petazzoni" <[email protected]>
An: "Peter Seiderer" <[email protected]>
Cc: buildroot at busybox.net
Betreff: *** GMX Spamverdacht *** Re: [Buildroot] [PATCH v2] postgresql: new package
Quoted 12 lines
Dear Peter Seiderer,
Quoted 8 lines · Peter Seiderer
Quoted 6 lines
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?o.k. I will take a look at it...
Stripped the problem down to this programm:
--- begin: test.c ---
#include <locale.h>
#include <ctype.h>
int f(int c, locale_t l) {
return isdigit_l(c, l);
}--- end ---
With (x86_64 on OpenSuse) I get no problem:
gcc -Wall -D_GNU_SOURCE -c test.c
With the buildroot toolchain:
./host/usr/bin/arm-linux-gcc -Wall -D_GNU_SOURCE -c test.c test.c: In function ?f?:
test.c:5:9: error: dereferencing pointer to incomplete type test.c:6:1: warning: control reaches end of non-void function [-Wreturn-type]
Quoted 59 lines
Thanks!
Quoted 8 lines
Quoted 4 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+config BR2_PACKAGE_POSTGRESQL + bool "PostgreSQL"should be lower-case.
mhh, did take a look at package/mysql/Config.in: bool "MySQL" and did the same, use the offical name which emphasises the SQL..., but I can change this if lower-case Menu entries are an requirement?
Yeah, MySQL has been around for a long time, but I have the impression that our policy is to use lower-case menu entries everywhere. I don't know how hard this rule is, though, so let's see if others share their opinion about this. This is clearly not a very important matter.
Quoted 33 lines
Quoted 10 lines
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:
Quoted 7 lines
ifeq ($(BR2_PACKAGE_READLINE),y)
POSTGRESQL_CONF_OPT+= --with-readlinePOSTGRESQL_DEPENDENDENCIES+= readline
elsePOSTGRESQL_CONF_OPT+= --without-readline
endifDid follow the PostgreSQL INSTALL hints stating:
* The GNU Readline library is used by default. It allows psql (the PostgreSQL command line SQL interpreter) to remember each command you type, and allows you to use arrow keys to recall and edit previous commands. This is very helpful and is strongly recommended. If you don't want to use it then you must specify the "--without-readline" option to "configure". As an alternative, you can often use the BSD-licensed "libedit" library, originally developed on NetBSD. The "libedit" library is GNU Readline-compatible and is used if "libreadline" is not found, or if "--with-libedit-preferred" is used as an option to "configure". If you are using a package-based Linux distribution, be aware that you need both the readline and readline-devel packages, if those
Quoted 1 line
and made the default enabled packages mandatory...
I understand what the PostgreSQL guys say, but this statement is from the perspective of a developer who is using the command line pgsql tool. On an embedded system, except during development, there is not really a need to use pgsql interactively. And even during development, you can connect to the embedded PostgreSQL server using a remotely executed pgsql binary.
Quoted 5 lines
So I would make the dependency optional, and then in the main Config.in option, in the help text, add something like:
Enable the readline package to gain readline support in pgsql, which offers a much nicer user experience.
o.k. will do...
Quoted 31 lines
Quoted 10 lines
The same for zlib:
* The zlib compression library is used by default. If you don't want to use it then you must specify the "--without-zlib" option to "configure". Using this option disables support for compressed archives in
pg_dumpandpg_restore.But I can make readline/zlib optional (with some comment in the Config.in file)?
Yes, that would be nice I believe.
Quoted 8 lines
All other features/packages are optional (and disabled as the INSTALL file states):
The following packages are optional. They are not required in the default configuration, but they are needed when certain build options are enabled, as explained below:
So I think there is no need to disable them explicitly?
See what I explained in my previous reply:
"""
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.
"""
Quoted 5 lines
Or none of these options are auto-detected, and it's only if a --with-<something> or --enable-<something> option is passed that the configure script starts looking around to see if the necessary dependencies are available or not?
o.k, all of these options have no autodetectino (when I read the statements in configure.in right)...
Quoted 11 lines
Quoted 7 lines
Quoted 5 lines
Review
Quoted 3 lines
(quoted diff) +3
-0+define POSTGRESQL_USERS + postgres -1 postgres -1 * /srv/pgsql/data /bin/sh postgres PostgreSQL Server +endefIs /srv a normal location for databases? Isn't /var used in general?
o.k, will change...
This really was a question. I have no idea what we prefer to use in Buildroot. For example, have you looked where our mysql package puts its database stuff?
Your where right with the question, the Linux standard for this is under /var/lib as given in the LinuxStandardBase/FilesystemHierarchyStandard ([1]):
var/lib: State information. Persistent data modified by programs as they run, e.g., databases, packaging system metadata, etc.
[1] http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
Peter
Quoted 9 lines
Thanks!
Thomas
Signature · 3 lines
Thomas Petazzoni, CTO, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com