]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2539] hammer.py: switch from PostgreSQL 14 to the default in RHEL 9
authorAndrei Pavel <andrei@isc.org>
Mon, 5 Sep 2022 18:59:12 +0000 (21:59 +0300)
committerAndrei Pavel <andrei@isc.org>
Fri, 7 Oct 2022 12:06:26 +0000 (15:06 +0300)
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.

hammer.py

index 02844f055f5f99b0f04f3e06c33ed32deb9b4df0..bb4d2bb7a034ca9b4c75a743164a6d72e19758fd 100755 (executable)
--- 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'])