From 9d9f1fa6d4a13f40ad44de3d94a102604f888c73 Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Wed, 20 Jan 2016 15:42:15 +0100 Subject: [PATCH 1/3] add postgres:9.5-alpine variant build it from source --- 9.5/alpine/Dockerfile | 81 ++++++++++++++++++++++++++++ 9.5/alpine/docker-entrypoint.sh | 96 +++++++++++++++++++++++++++++++++ 2 files changed, 177 insertions(+) create mode 100644 9.5/alpine/Dockerfile create mode 100755 9.5/alpine/docker-entrypoint.sh diff --git a/9.5/alpine/Dockerfile b/9.5/alpine/Dockerfile new file mode 100644 index 0000000000..1b6ab9c761 --- /dev/null +++ b/9.5/alpine/Dockerfile @@ -0,0 +1,81 @@ +# vim:set ft=dockerfile: +FROM alpine:3.3 + +# explicitly set user/group IDs +#RUN adduser -S -G postgres -u 999 postgres + +# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default +ENV LANG en_US.utf8 + +RUN mkdir /docker-entrypoint-initdb.d + +ENV PG_MAJOR 9.5 +ENV PG_VERSION 9.5.0 +ENV PG_SHA256 f1c0d3a1a8aa8c92738cab0153fbfffcc4d4158b3fee84f7aa6bfea8283978bc + + +# configure options taken from: +# https://anonscm.debian.org/cgit/pkg-postgresql/postgresql.git/tree/debian/rules?h=9.5 +RUN set -x \ + && apk add --no-cache --virtual .build-deps \ + su-exec \ + bash \ + bison \ + curl \ + flex \ + gcc \ + krb5-dev \ + libc-dev \ + libedit-dev \ + libxml2-dev \ + libxslt-dev \ + make \ + openldap-dev \ + openssl-dev \ + perl \ + perl-dev \ + python3-dev \ + tcl-dev \ + util-linux-dev \ + zlib-dev \ + && curl -fSL "https://ftp.postgresql.org/pub/source/v$PG_VERSION/postgresql-$PG_VERSION.tar.bz2" -o postgresql.tar.bz2 \ + && echo "$PG_SHA256 postgresql.tar.bz2" | sha256sum -c - \ + && mkdir -p /usr/src \ + && tar -jxf postgresql.tar.bz2 -C /usr/src \ + && rm postgresql.tar.bz2 \ + && cd /usr/src/postgresql-$PG_VERSION \ + && ./configure \ + --enable-integer-datetimes \ + --enable-tap-tests \ + --enable-thread-safety \ + --prefix=/usr/local \ + --with-libedit-preferred \ + --with-openssl \ + --with-uuid=e2fs \ + && make -j$(getconf _NPROCESSORS_ONLN) world \ + && make install-world \ + && make -C contrib install \ + && runDeps="$( \ + scanelf --needed --nobanner --recursive /usr/local \ + | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \ + | sort -u \ + | xargs -r apk info --installed \ + | sort -u \ + )" \ + && apk add --virtual .postgresql-rundeps $runDeps su-exec \ + && apk del .build-deps \ + && cd / && rm -rf /usr/src/postgresql-* /usr/local/include/* \ + && find /usr/local -name '*.a' -delete + +RUN mkdir -p /var/run/postgresql && chown -R postgres /var/run/postgresql + +ENV PATH /usr/lib/postgresql/$PG_MAJOR/bin:$PATH +ENV PGDATA /var/lib/postgresql/data +VOLUME /var/lib/postgresql/data + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] + +EXPOSE 5432 +CMD ["postgres"] diff --git a/9.5/alpine/docker-entrypoint.sh b/9.5/alpine/docker-entrypoint.sh new file mode 100755 index 0000000000..c13ea596c2 --- /dev/null +++ b/9.5/alpine/docker-entrypoint.sh @@ -0,0 +1,96 @@ +#!/bin/sh -e + +set_listen_addresses() { + sedEscapedValue="$(echo "$1" | sed 's/[\/&]/\\&/g')" + sed -ri "s/^#?(listen_addresses\s*=\s*)\S+/\1'$sedEscapedValue'/" "$PGDATA/postgresql.conf" +} + +if [ "$1" = 'postgres' ]; then + mkdir -p "$PGDATA" + chmod 700 "$PGDATA" + chown -R postgres "$PGDATA" + + chmod g+s /var/run/postgresql + chown -R postgres /var/run/postgresql + + # look specifically for PG_VERSION, as it is expected in the DB dir + if [ ! -s "$PGDATA/PG_VERSION" ]; then + su-exec postgres initdb + + # check password first so we can output the warning before postgres + # messes it up + if [ "$POSTGRES_PASSWORD" ]; then + pass="PASSWORD '$POSTGRES_PASSWORD'" + authMethod=md5 + else + # The - option suppresses leading tabs but *not* spaces. :) + cat >&2 <<-'EOWARN' + **************************************************** + WARNING: No password has been set for the database. + This will allow anyone with access to the + Postgres port to access your database. In + Docker's default configuration, this is + effectively any other container on the same + system. + + Use "-e POSTGRES_PASSWORD=password" to set + it in "docker run". + **************************************************** + EOWARN + + pass= + authMethod=trust + fi + + { echo; echo "host all all 0.0.0.0/0 $authMethod"; } >> "$PGDATA/pg_hba.conf" + + # internal start of server in order to allow set-up using psql-client + # does not listen on TCP/IP and waits until start finishes + su-exec postgres pg_ctl -D "$PGDATA" \ + -o "-c listen_addresses=''" \ + -w start + + : ${POSTGRES_USER:=postgres} + : ${POSTGRES_DB:=$POSTGRES_USER} + export POSTGRES_USER POSTGRES_DB + + if [ "$POSTGRES_DB" != 'postgres' ]; then + psql --username postgres <<-EOSQL + CREATE DATABASE "$POSTGRES_DB" ; + EOSQL + echo + fi + + if [ "$POSTGRES_USER" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + + psql --username postgres <<-EOSQL + $op USER "$POSTGRES_USER" WITH SUPERUSER $pass ; + EOSQL + echo + + echo + for f in /docker-entrypoint-initdb.d/*; do + case "$f" in + *.sh) echo "$0: running $f"; . "$f" ;; + *.sql) echo "$0: running $f"; psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < "$f" && echo ;; + *) echo "$0: ignoring $f" ;; + esac + echo + done + + su-exec postgres pg_ctl -D "$PGDATA" -m fast -w stop + set_listen_addresses '*' + + echo + echo 'PostgreSQL init process complete; ready for start up.' + echo + fi + + exec su-exec postgres "$@" +fi + +exec "$@" From 8e84a0031eb6258fc7326d7de389792bf6e0aaaa Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Wed, 20 Jan 2016 15:59:00 +0100 Subject: [PATCH 2/3] add 9.5-alpine to travis --- .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index d4d7c4759e..7ab58d703c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,7 @@ services: docker env: - VERSION=9.5 + - VERSION=9.5 VARIANT=alpine - VERSION=9.4 - VERSION=9.3 - VERSION=9.2 @@ -13,8 +14,8 @@ install: before_script: - env | sort - - cd "$VERSION" - - image="postgres:$VERSION" + - cd "$VERSION/$VARIANT" + - image="postgres:${VERSION}${VARIANT:+-${VARIANT}}" script: - docker build -t "$image" . From aa688accd1773d61c717de2829e29360e914a0ee Mon Sep 17 00:00:00 2001 From: Natanael Copa Date: Tue, 19 Apr 2016 14:56:58 +0200 Subject: [PATCH 3/3] upgrade :9.5-alpine to 9.5.2 --- 9.5/alpine/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/9.5/alpine/Dockerfile b/9.5/alpine/Dockerfile index 1b6ab9c761..6b83a5c685 100644 --- a/9.5/alpine/Dockerfile +++ b/9.5/alpine/Dockerfile @@ -10,8 +10,8 @@ ENV LANG en_US.utf8 RUN mkdir /docker-entrypoint-initdb.d ENV PG_MAJOR 9.5 -ENV PG_VERSION 9.5.0 -ENV PG_SHA256 f1c0d3a1a8aa8c92738cab0153fbfffcc4d4158b3fee84f7aa6bfea8283978bc +ENV PG_VERSION 9.5.2 +ENV PG_SHA256 f8d132e464506b551ef498719f18cfe9d777709c7a1589dc360afc0b20e47c41 # configure options taken from: