mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-05-27 10:44:33 +00:00
nextcloud: Allow re-running setup
- Retrieve a database password from configuration if one is set instead of generating new one. - Create database after starting the container. This is okay as database configuration is not set until maintenance:install operation is run. - Minor change to setting administrator password during install. Tests: - Update profile in Nextcloud and re-run setup. The updated settings are still available. Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org> Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
parent
614bea4511
commit
f8ddc774b0
@ -500,6 +500,7 @@ def podman_create(container_name: str, image_name: str, volume_name: str,
|
|||||||
directory = pathlib.Path('/etc/containers/systemd')
|
directory = pathlib.Path('/etc/containers/systemd')
|
||||||
directory.mkdir(parents=True, exist_ok=True)
|
directory.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
# Data is kept
|
||||||
subprocess.run(['podman', 'volume', 'rm', '--force', volume_name],
|
subprocess.run(['podman', 'volume', 'rm', '--force', volume_name],
|
||||||
check=False)
|
check=False)
|
||||||
|
|
||||||
|
|||||||
@ -35,13 +35,6 @@ DB_BACKUP_FILE = pathlib.Path(
|
|||||||
@privileged
|
@privileged
|
||||||
def setup():
|
def setup():
|
||||||
"""Setup Nextcloud configuration."""
|
"""Setup Nextcloud configuration."""
|
||||||
database_password = _generate_secret_key(16)
|
|
||||||
administrator_password = _generate_secret_key(16)
|
|
||||||
|
|
||||||
# Setup database
|
|
||||||
_create_database()
|
|
||||||
_set_database_privileges(database_password)
|
|
||||||
|
|
||||||
# Setup redis for caching
|
# Setup redis for caching
|
||||||
_redis_listen_socket()
|
_redis_listen_socket()
|
||||||
|
|
||||||
@ -60,9 +53,21 @@ def setup():
|
|||||||
action_utils.service_start(CONTAINER_NAME)
|
action_utils.service_start(CONTAINER_NAME)
|
||||||
|
|
||||||
_nextcloud_wait_until_ready()
|
_nextcloud_wait_until_ready()
|
||||||
_nextcloud_setup_wizard(database_password, administrator_password)
|
|
||||||
|
# Setup database
|
||||||
|
_create_database()
|
||||||
|
database_password = _get_database_password()
|
||||||
|
if not database_password:
|
||||||
|
database_password = _generate_secret_key(16)
|
||||||
|
_set_database_privileges(database_password)
|
||||||
|
|
||||||
|
# Setup redis configuration
|
||||||
_create_redis_config()
|
_create_redis_config()
|
||||||
|
|
||||||
|
# Run setup wizard
|
||||||
|
_nextcloud_setup_wizard(database_password)
|
||||||
|
|
||||||
|
# Setup LDAP configuraiton
|
||||||
_configure_ldap()
|
_configure_ldap()
|
||||||
|
|
||||||
|
|
||||||
@ -148,9 +153,8 @@ def _create_database():
|
|||||||
if _db_file_path.exists():
|
if _db_file_path.exists():
|
||||||
return
|
return
|
||||||
|
|
||||||
query = f'''CREATE DATABASE {DB_NAME} CHARACTER SET utf8mb4
|
query = f'CREATE DATABASE IF NOT EXISTS {DB_NAME} ' \
|
||||||
COLLATE utf8mb4_general_ci;
|
'CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;'
|
||||||
'''
|
|
||||||
_database_query(query)
|
_database_query(query)
|
||||||
|
|
||||||
|
|
||||||
@ -194,9 +198,10 @@ def _nextcloud_get_status():
|
|||||||
return json.loads(output.stdout)
|
return json.loads(output.stdout)
|
||||||
|
|
||||||
|
|
||||||
def _nextcloud_setup_wizard(db_password, admin_password):
|
def _nextcloud_setup_wizard(db_password: str):
|
||||||
"""Run the Nextcloud installation wizard and enable cron jobs."""
|
"""Run the Nextcloud installation wizard and enable cron jobs."""
|
||||||
if not _nextcloud_get_status()['installed']:
|
if not _nextcloud_get_status()['installed']:
|
||||||
|
admin_password = _generate_secret_key(16)
|
||||||
_run_occ('maintenance:install', '--database=mysql',
|
_run_occ('maintenance:install', '--database=mysql',
|
||||||
'--database-host=localhost:/run/mysqld/mysqld.sock',
|
'--database-host=localhost:/run/mysqld/mysqld.sock',
|
||||||
f'--database-name={DB_NAME}', f'--database-user={DB_USER}',
|
f'--database-name={DB_NAME}', f'--database-user={DB_USER}',
|
||||||
@ -313,7 +318,7 @@ def restore_database():
|
|||||||
subprocess.run(['redis-cli', '-n',
|
subprocess.run(['redis-cli', '-n',
|
||||||
str(REDIS_DB), 'FLUSHDB', 'SYNC'], check=False)
|
str(REDIS_DB), 'FLUSHDB', 'SYNC'], check=False)
|
||||||
|
|
||||||
_set_database_privileges(_get_dbpassword())
|
_set_database_privileges(_get_database_password())
|
||||||
|
|
||||||
# After updating the configuration, a restart seems to be required for the
|
# After updating the configuration, a restart seems to be required for the
|
||||||
# new DB password be used.
|
# new DB password be used.
|
||||||
@ -330,13 +335,14 @@ def restore_database():
|
|||||||
_run_occ('maintenance:data-fingerprint')
|
_run_occ('maintenance:data-fingerprint')
|
||||||
|
|
||||||
|
|
||||||
def _get_dbpassword():
|
def _get_database_password():
|
||||||
"""Return the database password from config.php.
|
"""Return the database password from config.php or '' if not set.
|
||||||
|
|
||||||
OCC cannot run unless Nextcloud can already connect to the database.
|
OCC cannot run unless Nextcloud can already connect to the database.
|
||||||
"""
|
"""
|
||||||
code = 'include_once("/var/www/html/config/config.php");' \
|
code = 'if (file_exists("/var/www/html/config/config.php")) {' \
|
||||||
'print($CONFIG["dbpassword"]);'
|
'include_once("/var/www/html/config/config.php");' \
|
||||||
|
'print($CONFIG["dbpassword"] ?? ""); }'
|
||||||
return _run_in_container('php', '-r', code,
|
return _run_in_container('php', '-r', code,
|
||||||
capture_output=True).stdout.decode().strip()
|
capture_output=True).stdout.decode().strip()
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user