From: Andrei Pavel Date: Mon, 5 Sep 2022 18:59:12 +0000 (+0300) Subject: [#2539] hammer.py: switch from PostgreSQL 14 to the default in RHEL 9 X-Git-Tag: Kea-2.3.2~101 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7addc5a3496fb1a720eccf693a4c19e904f2184a;p=thirdparty%2Fkea.git [#2539] hammer.py: switch from PostgreSQL 14 to the default in RHEL 9 There is a lot of code that deals with previously installed versions of PostgreSQL. This is good since it deals with a lot of use cases and allows us to not regenerate images, but it also adds complexity. --- diff --git a/hammer.py b/hammer.py index 02844f055f..bb4d2bb7a0 100755 --- a/hammer.py +++ b/hammer.py @@ -1301,9 +1301,14 @@ def _enable_postgresql(system, revision): execute('sudo rc-update add postgresql') elif system == 'freebsd': execute('sudo sysrc postgresql_enable="yes"') - elif system == 'rhel' and revision == '9': - execute('sudo systemctl enable postgresql-14.service') else: + # Disable all PostgreSQL services first to avoid conflicts. + # raise_error=False for when there are no matches + _, output = execute("systemctl list-unit-files | grep postgres | grep -Fv '@.service' | cut -d ' ' -f 1", + capture=True, raise_error=False) + for service in output.split(): + execute(f'sudo systemctl disable {service}') + execute('sudo systemctl enable postgresql.service') @@ -1314,10 +1319,25 @@ def _restart_postgresql(system, revision): execute('sudo service postgresql restart > /dev/null') elif system == 'alpine': execute('sudo /etc/init.d/postgresql restart') - elif system == 'rhel' and revision == '9': - execute('sudo systemctl restart postgresql-14.service') else: - execute('sudo systemctl restart postgresql.service') + # Stop all PostgreSQL services first to avoid conflicts. + # raise_error=False for when there are no matches + _, output = execute("systemctl list-unit-files | grep postgres | grep -Fv '@.service' | cut -d ' ' -f 1", + capture=True, raise_error=False) + for service in output.split(): + execute(f'sudo systemctl stop {service}') + + exit_code = execute('sudo systemctl restart postgresql.service', raise_error=False) + if exit_code != 0: + log.error('Command "sudo systemctl restart postgresql.service" failed. Here is the journal:') + _, output = execute('sudo journalctl -xu postgresql.service', capture=True) + log.error(output) + log.error('And here are logs:') + _, output = execute("sudo -u postgres psql -A -t -c 'SELECT pg_current_logfile()'", capture=True) + logfile = os.path.basename(output.strip()) + _, output = execute(f'sudo find /var -type f -name "{logfile}" -exec cat {{}} \;', capture=True, raise_error=False) + log.error(output) + sys.exit(exit_code) # Change authentication type for given connection type. Usual inputs for @@ -1342,8 +1362,6 @@ def _configure_pgsql(system, features, revision): if exitcode != 0: if system == 'centos': execute('sudo postgresql-setup initdb') - elif system == 'rhel' and revision == '9': - execute('sudo postgresql-14-setup initdb') else: execute('sudo postgresql-setup --initdb --unit postgresql') elif system == 'freebsd': @@ -1529,7 +1547,7 @@ def prepare_system_local(features, check_times): packages = ['autoconf', 'automake', 'boost-devel', 'gcc-c++', 'libtool', 'log4cplus-devel', 'make', - 'openssl-devel', 'postgresql-devel'] + 'openssl-devel'] if revision == '7': # Install newer version of Boost in case users want to opt-in with: @@ -1550,17 +1568,13 @@ def prepare_system_local(features, check_times): packages.extend(['mariadb-connector-c-devel']) if 'pgsql' in features: - packages.extend(['libpq-devel', 'postgresql', 'postgresql-server']) - if revision == '7': - packages.extend(['postgresql-devel']) - elif revision == '8': - packages.extend(['postgresql-server-devel']) + packages.extend(['postgresql', 'postgresql-server']) + if revision == '9': + packages.append('postgresql13-devel') + if not os.path.exists('/usr/bin/pg_config'): + execute('sudo ln -s /usr/pgsql-13/bin/pg_config /usr/bin/pg_config') else: - execute('sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm', - env=env, timeout=60, check_times=check_times) - execute('sudo dnf -qy module info postgresql 2>/dev/null && sudo dnf -qy module disable postgresql', - env=env, timeout=60, check_times=check_times) - packages.extend(['libpq-devel', 'postgresql14-devel', 'postgresql14-server']) + packages.append('postgresql-devel') if 'radius' in features: packages.extend(['freeradius', 'git']) @@ -1600,7 +1614,7 @@ def prepare_system_local(features, check_times): elif system == 'rhel': packages = ['autoconf', 'automake', 'boost-devel', 'gcc-c++', 'libtool', 'log4cplus-devel', 'make', - 'openssl-devel', 'postgresql-devel'] + 'openssl-devel'] if revision in ['7', '8']: # Install newer version of Boost in case users want to opt-in with: @@ -1621,15 +1635,13 @@ def prepare_system_local(features, check_times): packages.extend(['mariadb-connector-c-devel']) if 'pgsql' in features: - packages.extend(['postgresql', 'libpq-devel']) - if int(revision) < 9: - packages.extend(['postgresql-server-devel', 'postgresql-server']) + packages.extend(['postgresql', 'postgresql-server']) + if revision == '9': + packages.append('postgresql13-devel') + if not os.path.exists('/usr/bin/pg_config'): + execute('sudo ln -s /usr/pgsql-13/bin/pg_config /usr/bin/pg_config') else: - execute('sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm', - env=env, timeout=60, check_times=check_times) - execute('sudo dnf -qy module info postgresql 2>/dev/null && sudo dnf -qy module disable postgresql', - env=env, timeout=60, check_times=check_times) - packages.extend(['postgresql14-devel', 'postgresql14-server']) + packages.append('postgresql-devel') if 'radius' in features: packages.extend(['freeradius', 'git'])