Buildroot Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH v2] postgresql: new package
Date: Sat, 29 Mar 2014 11:57:55 +0100	[thread overview]
Message-ID: <20140329115755.33e90c5b@skate> (raw)
In-Reply-To: <1395182160-26138-1-git-send-email-ps.report@gmx.net>

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

  reply	other threads:[~2014-03-29 10:57 UTC|newest]

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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140329115755.33e90c5b@skate \
    --to=thomas.petazzoni@free-electrons.com \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox