Skip to contentSkip to conversation

postgresql: new package

PATCH Superseded Peter Seiderer 2 participants 3 messages Mar 30, 2014

v2 of 4 Superseded Latest is v4 →

lore
Share & tools
lore
#0 lore raw

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

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

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 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 ?

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
new file mode 100644
index 0000000..efc296f
@@ -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_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 +3 -0
new file mode 100644
index 0000000..f4edc69
@@ -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=/usr

This 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
+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

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-readline
POSTGRESQL_DEPENDENDENCIES += readline
else
POSTGRESQL_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
+endef

Is /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/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
#1 lore raw

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-readline
POSTGRESQL_DEPENDENDENCIES += readline
else
POSTGRESQL_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

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_dump and pg_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
+endef

Is /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
#2 lore raw

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-readline
POSTGRESQL_DEPENDENDENCIES += readline
else
POSTGRESQL_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

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_dump and pg_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
+endef

Is /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