Skip to content

Commit 3e9ae04

Browse files
committed
Add Ubuntu 24.04
1 parent 74e1208 commit 3e9ae04

File tree

5 files changed

+179
-1
lines changed

5 files changed

+179
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Current distributions available:
55
* openSUSE Leap 15.6
66
* Rocky Linux 8
77
* Ubuntu 20.04
8+
* Ubuntu 24.04
89

910
Current PostgreSQL versions available:
1011

manage_images

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ LANG=en_EN
77
SCRIPT=$(basename ${0})
88

99
# Supported distributions and PostgreSQL versions
10-
SUPPORTEDDISTROS="rockylinux8 ubuntu20.04 opensuseleap15.6"
10+
SUPPORTEDDISTROS="rockylinux8 ubuntu20.04 ubuntu24.04 opensuseleap15.6"
1111
SUPPORTEDPGVERS="9.3 9.4 9.5 9.6 10 11 12 13 14 15 16"
1212

1313
# Ignored combinations, will exit without errors so the CI does not fail

ubuntu24.04/Dockerfile

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
FROM docker.io/ubuntu:24.04
2+
MAINTAINER Julio Gonzalez Gil <git@juliogonzalez.es>
3+
4+
USER root
5+
6+
# Set locale (will be used by PostgreSQL initdb later on)
7+
# Also install gnupg2, to be used by apt-key later on (apt-key does not have a explicit dependency)
8+
RUN apt-get -qq -o=Dpkg::Use-Pty=0 update > /dev/null && \
9+
apt-get -qq -o=Dpkg::Use-Pty=0 -y install locales gnupg2 && \
10+
apt-get -qq -o=Dpkg::Use-Pty=0 clean > /dev/null && \
11+
DEBIAN_FRONTEND=noninteractive locale-gen en_US.UTF-8 && \
12+
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure locales && \
13+
update-locale LANG=en_US.UTF-8
14+
ENV LANG en_US.UTF-8
15+
ENV LANGUAGE en_US:en
16+
ENV LC_ALL en_US.UTF-8
17+
18+
19+
# Default UID/GID for mounting folders (used at jenkins slaves)
20+
ARG UID=500
21+
ARG GID=500
22+
23+
# Create postgres group and user according to arguments UID/GID
24+
RUN groupadd -g ${GID} postgres
25+
RUN useradd -d /var/lib/postgresql -u ${UID} -g ${GID} postgres && mkdir /var/lib/postgresql && chown postgres:postgres /var/lib/postgresql
26+
27+
# Create the wrappers to start PostgreSQL and check for PostgreSQL Updates
28+
ADD files/*.sh /opt/
29+
30+
# PostgreSQL arguments
31+
# Default version
32+
ARG POSTGRESQL_VER=9.5
33+
ENV POSTGRESQL_VER=${POSTGRESQL_VER}
34+
ARG POSTGRESQL_TESTING=0
35+
ENV POSTGRESQL_TESTING=${POSTGRESQL_TESTING}
36+
37+
# Pass the output of date command as DATE argument if you want
38+
# make sure that the image is generated using the lastest
39+
# PostgreSQL packages (cache will be used for previous steps)
40+
ARG DATE=None
41+
42+
# Add the PostgreSQL PGP key to verify their Debian packages and install them
43+
# Key should be the same as https://www.postgresql.org/media/keys/ACCC4CF8.asc
44+
# Then generate a list of original packages, upgrade and install PostgreSQL
45+
RUN dpkg --get-selections | grep 'install' | grep -v 'deinstall'|cut -f1 > /opt/packages-image.txt && \
46+
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 && \
47+
apt-get -qq -o=Dpkg::Use-Pty=0 update > /dev/null && \
48+
LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 DEBIAN_FRONTEND=noninteractive apt-get -qq -o=Dpkg::Use-Pty=0 -y install ca-certificates && \
49+
LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 DEBIAN_FRONTEND=noninteractive apt-get -qq -o=Dpkg::Use-Pty=0 -y dist-upgrade > /dev/null && \
50+
[ ${POSTGRESQL_TESTING} -eq 1 ] && TESTING="-testing"; echo "deb https://download.postgresql.org/pub/repos/apt/ focal-pgdg${testing} ${POSTGRESQL_VER} main" >> /etc/apt/sources.list.d/pgdg.list && \
51+
apt-get -qq -o=Dpkg::Use-Pty=0 update > /dev/null && \
52+
LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 DEBIAN_FRONTEND=noninteractive apt-get -qq -o=Dpkg::Use-Pty=0 -y install \
53+
postgresql-${POSTGRESQL_VER} \
54+
postgresql-client-${POSTGRESQL_VER} \
55+
postgresql-server-dev-${POSTGRESQL_VER} > /dev/null && \
56+
apt-get -qq -o=Dpkg::Use-Pty=0 clean > /dev/null # ${DATE}
57+
58+
# Allow PostgreSQL password acess from localhost
59+
RUN sed -i -r -e 's/host\s+all\s+all\s+127.0.0.1\/32\s+md5/host all all 127.0.0.1\/32 password/' /etc/postgresql/${POSTGRESQL_VER}/main/pg_hba.conf
60+
61+
# Configure temporary dir
62+
RUN mkdir -p /var/run/postgresql/${POSTGRESQL_VER}-main.pg_stat_tmp && chown postgres:postgres /var/run/postgresql/${POSTGRESQL_VER}-main.pg_stat_tmp
63+
64+
# Expose the PostgreSQL port
65+
EXPOSE 5432
66+
67+
# Seems there is a problem with the latest openSUSE MicroOS as if
68+
# userns is used to launch the container, the /var/log/postgresql
69+
# is owned by UID/GID 1002 which does not exist on the container or
70+
# the OS
71+
# I still could not find where the issue is, but we do not need to
72+
# do anything for Ubuntu, unlike for other OS, as rights are
73+
# 755 already
74+
75+
# Add VOLUMEs to allow backup of config, logs and databases
76+
VOLUME ["/etc/postgresql", "/var/log/postgresql", "/var/lib/postgresql"]
77+
78+
USER postgres
79+
80+
CMD ["/bin/bash", "/opt/start_postgresql.sh"]

ubuntu24.04/files/check_updates.sh

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
#!/bin/bash
2+
# This script will check for package upgrades and will return:
3+
# - 0 if no upgrades were available
4+
# - 1 if upgrades were available for at least one package not present at parent
5+
# image
6+
# - 2 if upgrades were available for at least one packages at parent image
7+
# - 3 if upgrades were available fot at least one package not present at parent
8+
# image, and at least one present at the parent image
9+
10+
PACKAGES_ORIG='/opt/packages-image.txt'
11+
PACKAGES_UPDATES='/opt/packages-updates.txt'
12+
13+
apt-get -qq -o=Dpkg::Use-Pty=0 update > /dev/null
14+
apt-get -s dist-upgrade | awk '/^Inst/ { print $2 }' > ${PACKAGES_UPDATES}
15+
16+
EXIT=0
17+
PFOUND=0
18+
CFOUND=0
19+
PPACKAGES_UPDATES=''
20+
CPACKAGES_UPDATES=''
21+
22+
while read UPDATE; do
23+
FOUND=0
24+
while read ORIGINAL; do
25+
if [ "${UPDATE}" == "${ORIGINAL}" ]; then
26+
FOUND=1
27+
PPACKAGES_UPDATES="${PPACKAGES_UPDATES} ${UPDATE}"
28+
fi
29+
done < ${PACKAGES_ORIG}
30+
if [ $FOUND -eq 1 ]; then
31+
PFOUND=2
32+
else
33+
CFOUND=1
34+
CPACKAGES_UPDATES="${CPACKAGES_UPDATES} ${UPDATE}"
35+
fi
36+
done < ${PACKAGES_UPDATES}
37+
38+
if [ "${PPACKAGES_UPDATES}" != "" ]; then
39+
echo "=================================================================="
40+
echo " PACKAGES FROM PARENT IMAGE REQUIRING UPDATE"
41+
echo "=================================================================="
42+
for PACKAGE in ${PPACKAGES_UPDATES}; do
43+
echo "${PACKAGE}"
44+
done;
45+
fi
46+
47+
if [ "${CPACKAGES_UPDATES}" != "" ]; then
48+
echo "=================================================================="
49+
echo " PACKAGES FROM CURRENT IMAGE REQUIRING UPDATE"
50+
echo "=================================================================="
51+
for PACKAGE in ${CPACKAGES_UPDATES}; do
52+
echo "${PACKAGE}"
53+
done;
54+
fi
55+
56+
exit $((${EXIT}+${PFOUND}+${CFOUND}))

ubuntu24.04/files/start_postgresql.sh

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/bin/bash
2+
3+
DB_NAME=${DB_NAME:-}
4+
DB_PASS=${DB_PASS:-}
5+
6+
DB_USER='postgresql'
7+
PG_VER="${POSTGRESQL_VER}"
8+
PG_PATH="/usr/lib/postgresql/${PG_VER}/bin"
9+
DB_PATH="/var/lib/postgresql/${PG_VER}/main"
10+
ETC_PATH="/etc/postgresql/${PG_VER}/main"
11+
12+
# Start service with pg_ctl
13+
${PG_PATH}/pg_ctl -w start -D ${DB_PATH} -o "-c config_file=${ETC_PATH}/postgresql.conf"
14+
15+
# Create database if needed
16+
if [ ! -z "${DB_NAME}" ]; then
17+
if ! ${PG_PATH}/psql -c "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | grep -q 1; then
18+
echo "Creating database \"${DB_NAME}\"..."
19+
${PG_PATH}/psql -c "CREATE DATABASE ${DB_NAME}"
20+
else
21+
echo "Warning: Database \"${DB_NAME}\" was already created!"
22+
fi
23+
fi
24+
25+
# Create role if needed
26+
if ! ${PG_PATH}/psql -c "SELECT 1 FROM pg_roles WHERE rolname='${DB_USER}'" | grep -q 1; then
27+
echo "Creating user \"${DB_USER}\"..."
28+
if [ -z "${DB_PASS}" ]; then
29+
DB_PASS=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;)
30+
echo "WARNING: No password specified. Random password created: \"${DB_PASS}\""
31+
fi
32+
${PG_PATH}/psql -c "CREATE ROLE ${DBUSERNAME} SUPERUSER LOGIN PASSWORD '${DBPASSWORD}'"
33+
elif [ ! -z "${DB_PASS}" ]; then
34+
echo "Warning: User \"${DB_USER}\" was already created!"
35+
fi
36+
37+
# Stop service with pg_ctl and start it with postmaster
38+
${PG_PATH}/pg_ctl -w stop -D ${DB_PATH} -o "-c config_file=${ETC_PATH}/postgresql.conf"
39+
40+
echo "Starting PostgreSQL ${PG_VER}..."
41+
${PG_PATH}/postgres -D ${DB_PATH} --config_file=${ETC_PATH}/postgresql.conf >> /var/log/postgresql/postgresql-${PG_VER}-main.log 2>&1

0 commit comments

Comments
 (0)