Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update postgres to v17 #1245

Merged
merged 6 commits into from
Nov 18, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/helperFunctions/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,13 +244,13 @@ def check_distribution(allow_unsupported=False):
return 'noble'
if codename in debian_code_names:
logging.debug('Debian/Kali detected')
return 'debian'
return codename
if distro.id() == 'fedora':
logging.debug('Fedora detected')
return 'fedora'
msg = (
f'Your Distribution ({distro.id()} {distro.version()}) is not supported. '
'FACT Installer requires Ubuntu 20.04/22.04, Debian 11/12 or compatible!'
'FACT Installer requires Ubuntu 20.04/22.04/24.04, Debian 11/12 or compatible!'
)
if allow_unsupported:
logging.info(msg)
Expand Down
2 changes: 1 addition & 1 deletion src/init_postgres.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def execute_psql_command(
# See https://www.postgresql.org/docs/current/auth-methods.html

if host in ['localhost', '127.0.0.1']:
shell_cmd = f'sudo runuser -u {user} -- psql -c "{psql_command}"'
shell_cmd = f'sudo runuser -u {user} -- psql --port={port} -c "{psql_command}"'
else:
shell_cmd = f'psql --host={host} --port={port} --username={user} -c "{psql_command}"'

Expand Down
35 changes: 23 additions & 12 deletions src/install/db.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
import logging
import re
from contextlib import suppress
from pathlib import Path
from shlex import split
from subprocess import PIPE, CalledProcessError, run

from helperFunctions.install import InstallationError, OperateInDirectory
from helperFunctions.install import InstallationError, OperateInDirectory, check_distribution

POSTGRES_VERSION = 17

def install_postgres(version: int = 14):

def install_postgres(version: int = POSTGRES_VERSION):
# based on https://www.postgresql.org/download/linux/ubuntu/
codename = check_distribution()
command_list = [
'sudo apt-get install -y postgresql-common',
'sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y',
f'sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y {codename}',
f'sudo apt-get -y install postgresql-{version}',
]
for command in command_list:
Expand All @@ -20,7 +24,7 @@ def install_postgres(version: int = 14):
raise InstallationError(f'Failed to set up PostgreSQL: {process.stderr}')


def configure_postgres(version: int = 14):
def configure_postgres(version: int = POSTGRES_VERSION):
config_path = f'/etc/postgresql/{version}/main/postgresql.conf'
# increase the maximum number of concurrent connections
run(f'sudo sed -i -E "s/max_connections = [0-9]+/max_connections = 999/g" {config_path}', shell=True, check=True)
Expand All @@ -31,18 +35,25 @@ def configure_postgres(version: int = 14):
run('sudo service postgresql restart', shell=True, check=True)


def postgres_is_installed():
try:
run(split('psql --version'), check=True)
return True
except (CalledProcessError, FileNotFoundError):
return False
def postgres_is_up_to_date():
proc = run(split('psql --version'), text=True, capture_output=True, check=True)
match = re.search(r'PostgreSQL\)? (\d+).\d+', proc.stdout)
if match:
return int(match.groups()[0]) >= POSTGRES_VERSION
logging.warning('PostgreSQL version could not be identified. Is it installed?')
return True


def main():
if postgres_is_installed():
try:
if not postgres_is_up_to_date():
logging.warning(
'PostgreSQL is installed but the version is not up to date. Please see '
'"https://github.com/fkie-cad/FACT_core/wiki/Upgrading-the-PostgreSQL-Database" for information on how'
'to upgrade your PostgreSQL version.'
)
logging.info('Skipping PostgreSQL installation. Reason: Already installed.')
else:
except (CalledProcessError, FileNotFoundError): # psql binary was not found
logging.info('Setting up PostgreSQL database')
install_postgres()
configure_postgres()
Expand Down
4 changes: 2 additions & 2 deletions src/test/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,8 +150,8 @@ def _database_interfaces(): # noqa: PT005
'rw-pw': config.common.postgres.rw_pw,
'del-user': config.common.postgres.del_user,
'del-pw': config.common.postgres.del_pw,
'admin-user': config.common.postgres.del_user,
'admin-pw': config.common.postgres.del_pw,
'admin-user': config.common.postgres.admin_user,
'admin-pw': config.common.postgres.admin_pw,
},
'redis': {
'fact-db': config.common.redis.test_db, # Note: This is unused in testing
Expand Down