All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH v2] postgresql: new package
@ 2014-03-30 21:54 Peter Seiderer
  2014-03-30 22:13 ` Thomas Petazzoni
  0 siblings, 1 reply; 7+ messages in thread
From: Peter Seiderer @ 2014-03-30 21:54 UTC (permalink / raw)
  To: buildroot

Hello Thomas,

thanks for the review...

On Sat, Mar 29, 2014 at 11:57:55AM +0100, Thomas Petazzoni wrote:
> Dear Peter Seiderer,
> 
> On Tue, 18 Mar 2014 23:36:00 +0100, Peter Seiderer wrote:
> > 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 <ps.report@gmx.net>
> 
> 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 ?
> 

o.k. I will take a look at it...

> Some other comments below.
> 
> > diff --git a/package/postgresql/Config.in b/package/postgresql/Config.in
> > new file mode 100644
> > index 0000000..efc296f
> > --- /dev/null
> > +++ b/package/postgresql/Config.in
> > @@ -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?

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

> 
> > +   depends on !BR2_INET_IPV6
> > diff --git a/package/postgresql/S50postgresql b/package/postgresql/S50postgresql
> > new file mode 100644
> > index 0000000..06cb4d5
> > --- /dev/null
> > +++ b/package/postgresql/S50postgresql
> > @@ -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 $?
> > diff --git a/package/postgresql/postgresql.mk b/package/postgresql/postgresql.mk
> > new file mode 100644
> > index 0000000..f4edc69
> > --- /dev/null
> > +++ b/package/postgresql/postgresql.mk
> > @@ -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?

o.k, will fix (was copy & paste error)

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

> 
> > +
> > +ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
> > +   POSTGRESQL_CONF_OPT += --disable-thread-safety
> > +endif
> > +
> > +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:
> 
> 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?

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

> 
> > +
> > +define POSTGRESQL_INSTALL_TARGET_FIXUP
> > +   $(INSTALL) -v -dm700 $(TARGET_DIR)/srv/pgsql/data
> 
> -v seems useless.

o.k., will change...

> 
> 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?
> 
> > +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
> -- 
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Buildroot] [PATCH v2] postgresql: new package
  2014-03-30 21:54 [Buildroot] [PATCH v2] postgresql: new package Peter Seiderer
@ 2014-03-30 22:13 ` Thomas Petazzoni
  2014-03-30 23:34   ` Peter Seiderer
  0 siblings, 1 reply; 7+ messages in thread
From: Thomas Petazzoni @ 2014-03-30 22:13 UTC (permalink / raw)
  To: buildroot

Dear Peter Seiderer,

On Sun, 30 Mar 2014 23:54:01 +0200, Peter Seiderer wrote:

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

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

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

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.

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

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

> > > +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
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Buildroot] [PATCH v2] postgresql: new package
  2014-03-30 22:13 ` Thomas Petazzoni
@ 2014-03-30 23:34   ` Peter Seiderer
  0 siblings, 0 replies; 7+ messages in thread
From: Peter Seiderer @ 2014-03-30 23:34 UTC (permalink / raw)
  To: buildroot

Hello Thomas,

> Gesendet: Montag, 31. M?rz 2014 um 00:13 Uhr
> Von: "Thomas Petazzoni" <thomas.petazzoni@free-electrons.com>
> An: "Peter Seiderer" <ps.report@gmx.net>
> Cc: buildroot at busybox.net
> Betreff: *** GMX Spamverdacht *** Re: [Buildroot] [PATCH v2] postgresql: new package
>
> Dear Peter Seiderer,
> 
> On Sun, 30 Mar 2014 23:54:01 +0200, Peter Seiderer wrote:
> 
> > > 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]

> 
> Thanks!
> 
> > > > +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.
> 
> > > 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
> > > 
> > 
> > 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...
> 
> 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.

o.k. will do...

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

o.k, all of these options have no autodetectino (when I read the statements
in configure.in right)...

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

> 
> Thanks!
> 
> Thomas
> -- 
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Buildroot] [PATCH v2] postgresql: new package
  2014-03-29 11:16   ` Yann E. MORIN
@ 2014-03-29 11:17     ` Thomas Petazzoni
  0 siblings, 0 replies; 7+ messages in thread
From: Thomas Petazzoni @ 2014-03-29 11:17 UTC (permalink / raw)
  To: buildroot

Dear Yann E. MORIN,

On Sat, 29 Mar 2014 12:16:12 +0100, Yann E. MORIN wrote:

> > 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
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Buildroot] [PATCH v2] postgresql: new package
  2014-03-29 10:57 ` Thomas Petazzoni
@ 2014-03-29 11:16   ` Yann E. MORIN
  2014-03-29 11:17     ` Thomas Petazzoni
  0 siblings, 1 reply; 7+ messages in thread
From: Yann E. MORIN @ 2014-03-29 11:16 UTC (permalink / raw)
  To: buildroot

Thomas, Peter, All,

On 2014-03-29 11:57 +0100, Thomas Petazzoni spake thusly:
> On Tue, 18 Mar 2014 23:36:00 +0100, Peter Seiderer wrote:
> > 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 <ps.report@gmx.net>
[--SNIP--]
> > +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 '-'.

> > +endef
> 
> Is /srv a normal location for databases? Isn't /var used in general?
> 
> > +
> > +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?

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.

-- 
.-----------------.--------------------.------------------.--------------------.
|  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.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Buildroot] [PATCH v2] postgresql: new package
  2014-03-18 22:36 Peter Seiderer
@ 2014-03-29 10:57 ` Thomas Petazzoni
  2014-03-29 11:16   ` Yann E. MORIN
  0 siblings, 1 reply; 7+ messages in thread
From: Thomas Petazzoni @ 2014-03-29 10:57 UTC (permalink / raw)
  To: buildroot

Dear Peter Seiderer,

On Tue, 18 Mar 2014 23:36:00 +0100, Peter Seiderer wrote:
> 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 <ps.report@gmx.net>

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.

> diff --git a/package/postgresql/Config.in b/package/postgresql/Config.in
> new file mode 100644
> index 0000000..efc296f
> --- /dev/null
> +++ b/package/postgresql/Config.in
> @@ -0,0 +1,13 @@
> +config BR2_PACKAGE_POSTGRESQL
> +	bool "PostgreSQL"

should be lower-case.

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

> +	depends on !BR2_INET_IPV6
> diff --git a/package/postgresql/S50postgresql b/package/postgresql/S50postgresql
> new file mode 100644
> index 0000000..06cb4d5
> --- /dev/null
> +++ b/package/postgresql/S50postgresql
> @@ -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 $?
> diff --git a/package/postgresql/postgresql.mk b/package/postgresql/postgresql.mk
> new file mode 100644
> index 0000000..f4edc69
> --- /dev/null
> +++ b/package/postgresql/postgresql.mk
> @@ -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?

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

> +
> +ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
> +	POSTGRESQL_CONF_OPT += --disable-thread-safety
> +endif
> +
> +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

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

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

> +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
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Buildroot] [PATCH v2] postgresql: new package
@ 2014-03-18 22:36 Peter Seiderer
  2014-03-29 10:57 ` Thomas Petazzoni
  0 siblings, 1 reply; 7+ messages in thread
From: Peter Seiderer @ 2014-03-18 22:36 UTC (permalink / raw)
  To: buildroot

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 <ps.report@gmx.net>
---
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

diff --git a/package/Config.in b/package/Config.in
index 70e5a7f..f8a86ea 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -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"
diff --git a/package/postgresql/Config.in b/package/postgresql/Config.in
new file mode 100644
index 0000000..efc296f
--- /dev/null
+++ b/package/postgresql/Config.in
@@ -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
diff --git a/package/postgresql/S50postgresql b/package/postgresql/S50postgresql
new file mode 100644
index 0000000..06cb4d5
--- /dev/null
+++ b/package/postgresql/S50postgresql
@@ -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 $?
diff --git a/package/postgresql/postgresql.mk b/package/postgresql/postgresql.mk
new file mode 100644
index 0000000..f4edc69
--- /dev/null
+++ b/package/postgresql/postgresql.mk
@@ -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)
+POSTGRESQL_LICENSE = PostgreSQL
+POSTGRESQ_LICENSE_FILES = COPYRIGHT
+POSTGRESQL_DEPENDENCIES = readline zlib
+POSTGRESQL_CONF_OPT = --prefix=/usr
+
+ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
+	POSTGRESQL_CONF_OPT += --disable-thread-safety
+endif
+
+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
+
+define POSTGRESQL_USERS
+	postgres -1 postgres -1 * /srv/pgsql/data /bin/sh postgres PostgreSQL Server
+endef
+
+define POSTGRESQL_INSTALL_TARGET_FIXUP
+	$(INSTALL) -v -dm700 $(TARGET_DIR)/srv/pgsql/data
+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))
-- 
1.8.1.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-03-30 23:34 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-03-30 21:54 [Buildroot] [PATCH v2] postgresql: new package Peter Seiderer
2014-03-30 22:13 ` Thomas Petazzoni
2014-03-30 23:34   ` Peter Seiderer
  -- strict thread matches above, loose matches on Subject: below --
2014-03-18 22:36 Peter Seiderer
2014-03-29 10:57 ` Thomas Petazzoni
2014-03-29 11:16   ` Yann E. MORIN
2014-03-29 11:17     ` Thomas Petazzoni

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.