Skip to content

Commit

Permalink
Comply with sclorg/container-common-scripts#4 (2. step)
Browse files Browse the repository at this point in the history
Copy 'latest' into '9.2'.  We sacrifice git history of 9.2 to have
better history in latest.
  • Loading branch information
praiskup committed Jul 27, 2017
1 parent 1a5d960 commit 30f2f6b
Show file tree
Hide file tree
Showing 18 changed files with 576 additions and 0 deletions.
60 changes: 60 additions & 0 deletions 9.2/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
FROM centos:centos7

# PostgreSQL image for OpenShift.
# Volumes:
# * /var/lib/psql/data - Database cluster for PostgreSQL
# Environment:
# * $POSTGRESQL_USER - Database user name
# * $POSTGRESQL_PASSWORD - User's password
# * $POSTGRESQL_DATABASE - Name of the database to create
# * $POSTGRESQL_ADMIN_PASSWORD (Optional) - Password for the 'postgres'
# PostgreSQL administrative account

MAINTAINER SoftwareCollections.org <[email protected]>

ENV POSTGRESQL_VERSION=9.2 \
HOME=/var/lib/pgsql \
PGUSER=postgres

LABEL io.k8s.description="PostgreSQL is an advanced Object-Relational database management system" \
io.k8s.display-name="PostgreSQL 9.2" \
io.openshift.expose-services="5432:postgresql" \
io.openshift.tags="database,postgresql,postgresql92"

EXPOSE 5432

ADD README.md /help.md
ADD root /

# This image must forever use UID 26 for postgres user so our volumes are
# safe in the future. This should *never* change, the last test is there
# to make sure of that.
RUN yum install -y centos-release-scl && \
INSTALL_PKGS="rsync tar gettext bind-utils postgresql92 postgresql92-postgresql-contrib nss_wrapper" && \
yum -y --setopt=tsflags=nodocs install $INSTALL_PKGS && \
rpm -V $INSTALL_PKGS && \
yum clean all && \
localedef -f UTF-8 -i en_US en_US.UTF-8 && \
test "$(id postgres)" = "uid=26(postgres) gid=26(postgres) groups=26(postgres)" && \
mkdir -p /var/lib/pgsql/data && \
/usr/libexec/fix-permissions /var/lib/pgsql && \
/usr/libexec/fix-permissions /var/run/postgresql

# Get prefix path and path to scripts rather than hard-code them in scripts
ENV CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/postgresql \
ENABLED_COLLECTIONS=postgresql92

# When bash is started non-interactively, to run a shell script, for example it
# looks for this variable and source the content of this file. This will enable
# the SCL for all scripts without need to do 'scl enable'.
ENV BASH_ENV=${CONTAINER_SCRIPTS_PATH}/scl_enable \
ENV=${CONTAINER_SCRIPTS_PATH}/scl_enable \
PROMPT_COMMAND=". ${CONTAINER_SCRIPTS_PATH}/scl_enable"


VOLUME ["/var/lib/pgsql/data"]

USER 26

ENTRYPOINT ["container-entrypoint"]
CMD ["run-postgresql"]
66 changes: 66 additions & 0 deletions 9.2/Dockerfile.rhel7
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
FROM rhel7

# PostgreSQL image for OpenShift.
# Volumes:
# * /var/lib/psql/data - Database cluster for PostgreSQL
# Environment:
# * $POSTGRESQL_USER - Database user name
# * $POSTGRESQL_PASSWORD - User's password
# * $POSTGRESQL_DATABASE - Name of the database to create
# * $POSTGRESQL_ADMIN_PASSWORD (Optional) - Password for the 'postgres'
# PostgreSQL administrative account

ENV POSTGRESQL_VERSION=9.2 \
HOME=/var/lib/pgsql \
PGUSER=postgres

LABEL io.k8s.description="PostgreSQL is an advanced Object-Relational database management system" \
io.k8s.display-name="PostgreSQL 9.2" \
io.openshift.expose-services="5432:postgresql" \
io.openshift.tags="database,postgresql,postgresql92"

# Labels consumed by Red Hat build service
LABEL name="openshift3/postgresql-92-rhel7" \
com.redhat.component="openshift-postgresql-docker" \
version="9.2" \
release="1" \
architecture="x86_64"

EXPOSE 5432

ADD README.md /help.md
ADD root /

# This image must forever use UID 26 for postgres user so our volumes are
# safe in the future. This should *never* change, the last test is there
# to make sure of that.
RUN yum install -y yum-utils && \
yum-config-manager --enable rhel-server-rhscl-7-rpms && \
yum-config-manager --enable rhel-7-server-optional-rpms && \
INSTALL_PKGS="rsync tar gettext bind-utils postgresql92 postgresql92-postgresql-contrib nss_wrapper" && \
yum install -y --disablerepo="epel" --setopt=tsflags=nodocs $INSTALL_PKGS && \
rpm -V $INSTALL_PKGS && \
yum clean all && \
localedef -f UTF-8 -i en_US en_US.UTF-8 && \
test "$(id postgres)" = "uid=26(postgres) gid=26(postgres) groups=26(postgres)" && \
mkdir -p /var/lib/pgsql/data && \
/usr/libexec/fix-permissions /var/lib/pgsql && \
/usr/libexec/fix-permissions /var/run/postgresql

# Get prefix path and path to scripts rather than hard-code them in scripts
ENV CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/postgresql \
ENABLED_COLLECTIONS=postgresql92

# When bash is started non-interactively, to run a shell script, for example it
# looks for this variable and source the content of this file. This will enable
# the SCL for all scripts without need to do 'scl enable'.
ENV BASH_ENV=${CONTAINER_SCRIPTS_PATH}/scl_enable \
ENV=${CONTAINER_SCRIPTS_PATH}/scl_enable \
PROMPT_COMMAND=". ${CONTAINER_SCRIPTS_PATH}/scl_enable"

VOLUME ["/var/lib/pgsql/data"]

USER 26

ENTRYPOINT ["container-entrypoint"]
CMD ["run-postgresql"]
1 change: 1 addition & 0 deletions 9.2/README.md
1 change: 1 addition & 0 deletions 9.2/cccp.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
job-id: postgresql-92-centos7
12 changes: 12 additions & 0 deletions 9.2/root/help.1
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
.\"t
.\" WARNING: Do not edit this file manually, it is generated from README.md automatically.
.\"
.\" Automatically generated by Pandoc 1.16.0.2
.\"
.TH "POSTGRESQL\-92\-RHEL7" "1" "February 22, 2017" "Container Image Pages" ""
.hy
.SH PostgreSQL Docker image
.PP
\f[B]The PostgreSQL 9.2 image is deprecated.\f[]
.SH AUTHORS
Red Hat.
92 changes: 92 additions & 0 deletions 9.2/root/usr/bin/cgroup-limits
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
#!/usr/bin/python

"""
Script for parsing cgroup information
This script will read some limits from the cgroup system and parse
them, printing out "VARIABLE=VALUE" on each line for every limit that is
successfully read. Output of this script can be directly fed into
bash's export command. Recommended usage from a bash script:
set -o errexit
export_vars=$(cgroup-limits) ; export $export_vars
Variables currently supported:
MAX_MEMORY_LIMIT_IN_BYTES
Maximum possible limit MEMORY_LIMIT_IN_BYTES can have. This is
currently constant value of 9223372036854775807.
MEMORY_LIMIT_IN_BYTES
Maximum amount of user memory in bytes. If this value is set
to the same value as MAX_MEMORY_LIMIT_IN_BYTES, it means that
there is no limit set. The value is taken from
/sys/fs/cgroup/memory/memory.limit_in_bytes
NUMBER_OF_CORES
Number of detected CPU cores that can be used. This value is
calculated from /sys/fs/cgroup/cpuset/cpuset.cpus
NO_MEMORY_LIMIT
Set to "true" if MEMORY_LIMIT_IN_BYTES is so high that the caller
can act as if no memory limit was set. Undefined otherwise.
"""

from __future__ import print_function
import sys


def _read_file(path):
try:
with open(path, 'r') as f:
return f.read().strip()
except IOError:
return None


def get_memory_limit():
"""
Read memory limit, in bytes.
"""

limit = _read_file('/sys/fs/cgroup/memory/memory.limit_in_bytes')
if limit is None or not limit.isdigit():
print("Warning: Can't detect memory limit from cgroups",
file=sys.stderr)
return None
return int(limit)


def get_number_of_cores():
"""
Read number of CPU cores.
"""

core_count = 0

line = _read_file('/sys/fs/cgroup/cpuset/cpuset.cpus')
if line is None:
print("Warning: Can't detect number of CPU cores from cgroups",
file=sys.stderr)
return None

for group in line.split(','):
core_ids = list(map(int, group.split('-')))
if len(core_ids) == 2:
core_count += core_ids[1] - core_ids[0] + 1
else:
core_count += 1

return core_count


if __name__ == "__main__":
env_vars = {
"MAX_MEMORY_LIMIT_IN_BYTES": 9223372036854775807,
"MEMORY_LIMIT_IN_BYTES": get_memory_limit(),
"NUMBER_OF_CORES": get_number_of_cores()
}

env_vars = {k: v for k, v in env_vars.items() if v is not None}

if env_vars.get("MEMORY_LIMIT_IN_BYTES", 0) >= 92233720368547:
env_vars["NO_MEMORY_LIMIT"] = "true"

for key, value in env_vars.items():
print("{0}={1}".format(key, value))
3 changes: 3 additions & 0 deletions 9.2/root/usr/bin/container-entrypoint
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash

exec "$@"
28 changes: 28 additions & 0 deletions 9.2/root/usr/bin/run-postgresql
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/bin/bash

export ENABLE_REPLICATION=${ENABLE_REPLICATION:-false}

set -eu
export_vars=$(cgroup-limits) ; export $export_vars

source "${CONTAINER_SCRIPTS_PATH}/common.sh"

set_pgdata
check_env_vars
generate_passwd_file
generate_postgresql_config

if [ ! -f "$PGDATA/postgresql.conf" ]; then
initialize_database
NEED_TO_CREATE_USERS=yes
fi

pg_ctl -w start -o "-h ''"
if [ "${NEED_TO_CREATE_USERS:-}" == "yes" ]; then
create_users
fi
set_passwords
pg_ctl stop

unset_env_vars
exec postgres "$@"
5 changes: 5 additions & 0 deletions 9.2/root/usr/bin/run-postgresql-master
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

export ENABLE_REPLICATION=true

exec run-postgresql "$@"
36 changes: 36 additions & 0 deletions 9.2/root/usr/bin/run-postgresql-slave
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#!/bin/bash

export ENABLE_REPLICATION=true

set -eu
export_vars=$(cgroup-limits) ; export $export_vars

source "$CONTAINER_SCRIPTS_PATH"/common.sh

set_pgdata

function initialize_replica() {
echo "Initializing PostgreSQL slave ..."
# TODO: Validate and reuse existing data?
rm -rf $PGDATA
PGPASSWORD="${POSTGRESQL_MASTER_PASSWORD}" pg_basebackup -x --no-password --pgdata ${PGDATA} --host=${MASTER_FQDN} --port=5432 -U "${POSTGRESQL_MASTER_USER}"

# PostgreSQL recovery configuration.
generate_postgresql_recovery_config
cat >> "$PGDATA/recovery.conf" <<EOF
# Custom OpenShift recovery configuration:
include '${POSTGRESQL_RECOVERY_FILE}'
EOF
}

check_env_vars
generate_passwd_file
generate_postgresql_config

wait_for_postgresql_master
export MASTER_FQDN=$(postgresql_master_addr)
initialize_replica

unset_env_vars
exec postgres "$@"
7 changes: 7 additions & 0 deletions 9.2/root/usr/libexec/fix-permissions
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/sh
# Fix permissions on the given directory to allow group read/write of
# regular files and execute of directories.
find "$1" -exec chown postgres {} \;
find "$1" -exec chgrp 0 {} \;
find "$1" -exec chmod g+rw {} \;
find "$1" -type d -exec chmod g+x {} +
4 changes: 4 additions & 0 deletions 9.2/root/usr/share/container-scripts/postgresql/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
PostgreSQL Docker image
=======================

**The PostgreSQL 9.2 image is deprecated.**
Loading

0 comments on commit 30f2f6b

Please sign in to comment.