3221 Commits

Author SHA1 Message Date
James Valleroy
d87685b95a
diagnostics: Add option for automatic repair
- Not enabled by default currently. This can be changed after further
  testing.

- Re-use existing operation from diagnostics run. However, this requires
  changing the app_id of the operation for each app.

Tests:

- Enable automatic repair, and run diagnostics. See that repairs are
  run.

- Enable automatic repair, and wait for daily diagnostics run. See that
  repairs are run.

Closes: #2399.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-06-24 12:06:20 -07:00
Sunil Mohan Adapa
653b642dae
nextcloud: Warn that community provides the container not team
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:14:56 -04:00
Sunil Mohan Adapa
31785857b3
nextlcoud: Enable app with experimental warning
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:14:54 -04:00
Sunil Mohan Adapa
fb0dd323ff
nextcloud: Populated and maintain a list of trusted domains
- Rename 'domain' to 'override domain'. See below.

- If override domain is not set and trusted domains list is properly maintained,
then Nextcloud can be accessed using a domain from list of trusted domains. This
is ideal as accessing from .onion domain and a regular domain will
simultaneously without forcing a single domain. However, non-localhost IP
addresses will not work with this approach and 'override domain' will be needed.

- When override domain is set to an IP address or a domain, then that domain
will forced. Also hostname are accepted on a request but after the first page
load, access will be forcefully redirected to the configured override domain.
Multiple domains, even trusted domains, will thus not work. This option should
be used as a last resort.

- All un-setting the override domain to an empty value so that trusted domains
can be used again.

- Update diagnostic checks to ensure that above logic is used with checking
domains.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:14:52 -04:00
Sunil Mohan Adapa
1272be0ad6
nextcloud: Allow re-running setup when app is disabled
- Enable the redis drop-in configurations before redis-server is started so that
the configuration is effective.

- When app is disabled and re-running setup, disable it after running setup
because setup() enables it.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:14:49 -04:00
Sunil Mohan Adapa
5c101a1447
nextcloud: Enable pretty URLs without /index.php in them
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:14:45 -04:00
Sunil Mohan Adapa
f1276d736a
nextcloud: Implement enable/disable container
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:14:43 -04:00
Sunil Mohan Adapa
f8ddc774b0
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>
2024-05-06 17:14:40 -04:00
Sunil Mohan Adapa
614bea4511
nextcloud: Restart container when dependent services are restarted
This is required because when services are restarted, their Unix domain sockets
are removed and new ones are created. The container will still be using the old
sockets and will fail to connect to the service.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:14:38 -04:00
Sunil Mohan Adapa
6b046ec27d
nextcloud: Ship instead of create cron timer related units
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:14:35 -04:00
Sunil Mohan Adapa
6e2db19a26
nextcloud: Wait on init sync lock
- First wait until the files are copied into /var/www/html from
/usr/src/nextcloud.

- Then wait until init-sync lock is released.

- This allows for re-running setup as CAN_INSTALL file is removed after install
process in completed.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:14:30 -04:00
Sunil Mohan Adapa
85cc9f08fa
nextcloud: Use php-fpm container instead of apache container
- Configuring just php-fpm is easier compared to configuring Apache + mod_php.
There is no need to configure trusted proxies as the requests are made using the
FastCGI protocol.

- There is no need for a full web server as we already run Apache.

- Place nextcloud data in /var/lib/container so that non-PHP files can be served
directly without php-fpm involved. This location is more suitable for switching
to nextcloud based on a .deb file (if ever). This is done by configuring the
volume to serve a bind mounted directory of our choice.

- Update Apache configuration to proxy to php-fpm instead of another web server.
Include the changes needed for Apache configuration to serve non-php files
directly.

- Managed the volume using quadlet podman systemd generator.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:14:27 -04:00
Sunil Mohan Adapa
e7e1a6b41d
nextcloud: Drop network namespacing in container, use host network
- This is not ideal and reduces security. However it simplifies quite a bit of
setup.

- Services on the host network are already exposed to the container (however,
they could easily be protected with firewall rules).

- Container has full access to external networks already. So this part does not
change.

- This setup would be at par with how other services run on FreedomBox right
now. We can think of generalized solution for all the apps later.

- FirewallLocalProtection for the single service the runs in the container works
as usual without change.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:14:23 -04:00
Sunil Mohan Adapa
df16f74b74
nextcloud: Use systemd generator for creating container service
- See quadlet(5).

- Using 'podman generate systemd' is deprecated. Quadlets are recommended.

- When using the systemd generator, enable/disable is not possible. The
container is automatically started when system is booted or systemd is reloaded
after .container file changes.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-05-06 17:12:32 -04:00
Veiko Aasa
8670a56610
minidlna: Restart app when upgrading to reconfigure firewall
Tested when minidlna app is running - after upgrade the ssdp
port is open.

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-05-03 16:05:52 -07:00
Veiko Aasa
681f2ef994
minidlna: Do not proxy minidlna web interface over Apache
Minidlna interface is still available to everybody in internal networks
at http://<ip-address>:8200. (Note that using mDNS name like
freedombox.local doesn't work here).

Remove 'minidlna' group and apache minidlna site configuration as
those are not useful any more.

Reconfigure minidlna front page shortcut to link to the app
description page.

Tests performed with stable and testing containers:
Create a user that belongs to minidlna group. Apply changes, after
minidlna app upgrade:
- the user is not in minidlna group any more.
- the users configuration page doesn't show minidlna group.
- Apache site /_minidlna is disabled.

Closes #2012, #2013, #2416.

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
[sunil: Minor formatting, use single quotes for strings for consistency]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-05-03 16:05:22 -07:00
Veiko Aasa
0d0eb4472d
minidlna: Explicitly include ssdp service to firewall configuration
It helps showing ssdp protocol ports in minidlna diagnostics.

Also avoid overwrite imported name 'firewall'.

Tested that ssdp port 1900 is shown in the minidlna diagnostics page.

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-05-03 16:05:17 -07:00
Sunil Mohan Adapa
75e99f28cd
letsencrypt: Remove unused imports
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-05-03 08:20:38 -07:00
James Valleroy
8ff1a14e84
letsencrypt: Re-obtain certificates during repair
- Set check_id and domain for domain diagnostic check

- If there is an error, store it in thread local storage.

- Drop checking for case when no domain is configured. This is better done after
initial setup via notification rather than in diagnostics. Proposed change also
will not show the warning if a .local domain is configured (almost always). Keep
checking for Check id to deal with older stored diagnostic results.

- Call obtain when certificate is not available. Call re-obtain otherwise. This
is important for properly calling the post-obtain operations.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
[sunil: Drop check for case when no domain is configured]
[sunil: Call either obtain or re-obtain based on current state of certificate]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-05-02 21:53:08 -07:00
James Valleroy
f5f687c8fd
diagnostics: Change "Re-run setup" to "Try to repair"
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
[sunil: Fix issue with formatting i18n message]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-05-02 21:48:57 -07:00
James Valleroy
ddc9b434a7
diagnostics: Add optional component_id to DiagnosticCheck
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-05-02 21:45:12 -07:00
Veiko Aasa
552fabed15
minidlna: Add media directory selection form
The form provides an option to select default directory, user specified
directory or samba shares if enabled.

The form also checks that the directory exists and is readable by the
minidlna user.

Tested that changing media directory to a samba share location works.

Closes #2084.

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-05-02 10:59:21 -07:00
Veiko Aasa
430f9c6737
storage: Add an option to include help text to directory selection form
Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-05-02 10:59:16 -07:00
Sunil Mohan Adapa
ff434b65f4
nextcloud: Allow backup/restore when app is disabled
- Also restart the container after restoring the database and its password. This
seems to be required (perhaps to flush caches) for a successful database
connection.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:42:08 -04:00
Sunil Mohan Adapa
b336c2f9ea
nextcloud: Minor update to description regarding users' usage
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:42:06 -04:00
Sunil Mohan Adapa
819b3480a9
nextcloud: Add warning that the app is experimental
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:42:04 -04:00
Sunil Mohan Adapa
ca5b088730
nextcloud: Expand on the warning about container usage
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:42:02 -04:00
Sunil Mohan Adapa
c371f77e3b
nextcloud: Remove fail2ban jail, brute force protection present
Nextcloud has a built-in brute force protection[1]. Combined with good password
policies, fail2ban is not required. Built-in protection is better than fail2ban
because, fail2ban makes the service unavailable which causes some confusion to a
genuine user.

Links:

1) https://docs.nextcloud.com/server/19/admin_manual/configuration_server/bruteforce_configuration.html

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:59 -04:00
Sunil Mohan Adapa
7ab7d949af
nextcloud: When backup fails, unset the maintenance mode
- Put dump operation in a try/finally block.

- Create context manager to simplify.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:57 -04:00
Sunil Mohan Adapa
0f663f8381
nextcloud: Minor changes to cron timer units
- Add documentation URL for Nextcloud cron.php.

- Use '-f' flag to php to match what documentation recommends.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:55 -04:00
Sunil Mohan Adapa
d7b05385c6
nextcloud: Use secrets module generate passwords
- It choose highest security random number automatically.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:52 -04:00
Sunil Mohan Adapa
547db1608b
nextcloud: Use a separate DB for redis
- While nextcloud has a good prefix for all the keys it stores, flushing the
database (for nextcloud or other apps) is easier if it stores it's keys in a
separate database. Assign DB index at 8 (database number 9). Index 7 is taken by
rspamd on FreedomBox.

- Flush only Nextcloud's DB after restore instead of the entire server.

- Ignore errors during flush if redis server is not running.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:50 -04:00
Sunil Mohan Adapa
12374d8783
nextcloud: Don't set password on redis server
- Before we can enable this added protection, we need to address a couple of
issues:

  - Redis password is restored after a restore. This means that if nextcloud's
  backup is restored on a machine where redis server already has a password set,
  then the password won't match with the password configured for other apps that
  are using redis.

  - When email server is already installed before this patch and then nextcloud
  is installed. rspamd will fail to connect to redis server. This even with the
  changes intended on the email server as the setup version in those changes has
  not been incremented.

- Restart redis-server only when needed. This avoids major disruption caused due
un-persisted cache and locks removed.

- Don't use Redis for caching of server-local data as this APCu seems to be
preferred by upstream containers.

- Don't set filelocking.enabled=true as this is already the default.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:47 -04:00
Sunil Mohan Adapa
281aaa9462
nextcloud: Retrieve database password in a more robust way
- Eliminate the need for parsing the complex file.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:45 -04:00
Sunil Mohan Adapa
72c8a3f7b8
nextcloud: Minor refactoring
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:42 -04:00
Sunil Mohan Adapa
722da5b0d5
nextcloud: Don't show incorrect phone region when it is not set
Tests:

- Install nextcloud and notice that the default phone region is 'Not set'.
Select phone region, it sets properly. Set it to 'Not set' and that works too.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:40 -04:00
Sunil Mohan Adapa
138cdd6e3f
nextcloud: Refactor setting admin password
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:38 -04:00
Sunil Mohan Adapa
833122c931
nextcloud: Connect to slapd for LDAP using Unix socket
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:35 -04:00
Sunil Mohan Adapa
858d4a4337
nextcloud: Connect to redis using Unix socket
- Connecting using Unix socket allows us to drop having to make redis listen on
the containers IP address.

- Instead configure redis to listen on unix socket.

- Keep the configuration file separate and include it the main configuration
file. This allows easier configuration changes in the future.

- Ensure that the drop-in configuration is available during setup.

- Ensure that redis is running during setup. This is important when app is
upgraded while it is disabled. Or when setup is re-run.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:33 -04:00
Sunil Mohan Adapa
0f2760fbf8
nextcloud: Improve database permission granting
- GRANT with IDENTIFIED BY is not recommended anymore by MySQL. Use separate
CREATE and GRANT statements.

- Ensure that CREATE USER only runs when the user does not exist.

- Ensure that database password is always updated with a separate ALTER USER
statement.

- Factor out database querying into a separate method.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:30 -04:00
Sunil Mohan Adapa
ecaede79ee
action_utils, nextcloud: Make podman util more generic
It is unlikely that other containers will need the same volume with path for
/var/www/html.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:28 -04:00
Sunil Mohan Adapa
c38814b1bc
nextcloud: Don't fail uninstall if DB or user don't not exist
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:26 -04:00
Sunil Mohan Adapa
da3f498609
nextcloud: Ensure that database is running when running setup
- Database will be running if mysql has just been installed.

- However, after disabling all apps, it is no longer running. After this trying
to install/reinstall nextcloud fails. Fix this by ensuring that mysql is always
running during setup.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:24 -04:00
Sunil Mohan Adapa
52c4783c4a
nextcloud: Improve setting up LDAP configuration
Running ldap:test-config before enabling the 'user_ldap' app lead to bad output.
'app:enable' and 'ldap:set-config' are idempotent. So, re-run them in setup.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:21 -04:00
Sunil Mohan Adapa
d9132661c5
nextcloud: Improve check used to test if installation wizard is done
Use the status command to retrieve the accurate status of installation instead
of checking for existence of admin user account.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:19 -04:00
Sunil Mohan Adapa
7c305fb295
nextcloud: Fail on errors when configuring the app
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:17 -04:00
Sunil Mohan Adapa
fba3d6339b
nextcloud: Connect to mysql using socket instead of TCP
- This eliminates the need to reconfigure mysql.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:14 -04:00
Sunil Mohan Adapa
96035c2e2d
nextcloud: Drop a repeated creation of systemd service file
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:11 -04:00
Sunil Mohan Adapa
da036f4488
nextcloud: Fix configuring trusted proxies setting
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:41:08 -04:00
Sunil Mohan Adapa
07c29dca7e
nextcloud: Refactor container creation code
- Reduce nesting necessary nesting.

- Add some type annotations.

- Simplify writing command output to a file by passing file handle to
subprocess.run().

- Create a path for volume to eliminate some duplication.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:40:59 -04:00