3201 Commits

Author SHA1 Message Date
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
Sunil Mohan Adapa
03c7ddb0c4
nextcloud: Add network interface to firewall zone after creating it
- The network interface will not exist until it is created with podman network.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:40:50 -04:00
Sunil Mohan Adapa
89e9fe2335
nextcloud: Rename the systemd service names
- Avoid unnecessary abbreviations for consistency.

- Change file paths into pathlib paths.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-04-19 06:40:38 -04:00
James Valleroy
6f0897e702
diagnostics: Don't store list of app objects with results
current_results['apps'] was not being used anywhere.

Make are_results_available() check more specific, and to align with what is
stored in the database.

Tests:

- Run full diagnostics and check the results.

- Restart plinth, and check that the diagnostic results are loaded from the
  database.

Helps: #2410

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-04-04 08:48:19 -07:00
James Valleroy
2b16bdb5cd
upgrades: Re-enable unattended-upgrade during dist-upgrade
Previously, when dist-upgrading from bullseye to bookworm, there was an issue
where unattended-upgrade gets stuck. See #2266.  However, it does not get stuck
when dist-upgrading from bookworm to trixie.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-04-01 08:33:04 -07:00
Sunil Mohan Adapa
fdaba80de3
ttrss: Ensure that database is removed after uninstall
- Setting ttrss/purge to 'true' in debconf is not retrained after the package
has been install. So, set it again just before package removal.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-03-31 20:49:01 -04:00
Sunil Mohan Adapa
7c5c960400
ttrss: Improve backup and restore of the database
- Don't dump all the databases on the server. Instead dump only the ttrss
database and its role.

- Use database configuration instead of hardcoded database name 'ttrss'.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-03-31 20:48:36 -04:00
Sunil Mohan Adapa
f3b4c6f85e
ttrss: tests: functional: Uninstall during backup/restore test
- This checks backup/restore step more accurately with new database user vs. old
database user.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-03-31 20:48:25 -04:00
Sunil Mohan Adapa
a28dc369d3
ttrss: Include dbconfig configuration file in backup
- This will ensure that dbconfig is every triggered and regenerates the
configuration/setup, everything is consistent.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-03-31 20:48:19 -04:00
Sunil Mohan Adapa
90df34df86
zoph: Include dbconfig configuration file in backup
- This will ensure that dbconfig is every triggered and regenerates the
configuration/setup, everything is consistent.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-03-31 20:48:11 -04:00
Sunil Mohan Adapa
b5c641097a
zoph: Re-add a safety check when reading the setup state of the app
- Similar check was removed in 6646512a0adab6943503ec47372502fb28805911 when it
was that it was not needed.

Tests:

- Run functional tests for zoph.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-03-31 20:48:00 -04:00
Sunil Mohan Adapa
701f8e6dc9
nextcloud: Diasble app until more testing and review changes
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-03-29 15:48:19 -07:00
Benedek Nagy
60f8a3f3db
nextcloud: Configure redis caching, create static PHP file
Configure caching for Nextcloud with Redis running on the host, create static
php file under
/var/lib/containers/storage/volumes/nextcloud-volume-fbx/_data/config. Nextcloud
communicates with Redis via the bridge adapter, which isn't a loopback device.
For this reason, setting a redis password is required. In addition, configure
the email app to accomodate the changes.

Signed-off-by: Benedek Nagy <contact@nbenedek.me>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-03-29 15:45:07 -07:00
Benedek Nagy
b21af70510
nextcloud: Add option to configure the default phone region
This setting is necessarry to pass the setup warning under
/nextcloud/settings/admin/overview

Note: during testing the field only becomes visible once
the freedombox-develop command is restarted

https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/config_sample_php_parameters.html#default-phone-region

Signed-off-by: Benedek Nagy <contact@nbenedek.me>
[sunil: Add missing docstring]
[sunil: Update form label for consistency]
[sunil: Reduce number of success form messages]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-03-29 15:44:27 -07:00
Benedek Nagy
8ef680f450
nextcloud: Add backup/restore
Signed-off-by: Benedek Nagy <contact@nbenedek.me>
[sunil: Simplify method signature and name for setting maint. mode]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-03-29 15:44:22 -07:00
Benedek Nagy
3d8967a20a
nextcloud: Add new app based on podman container
Nextcloud has long been a desired app for FreedomBox, however, due to
difficulties around Debian packaging, it hasn't yet been implemented. This
branch creates an app for Nextcloud with the help of Podman. Podman is a
containarization technology, like Docker, but with some extra features
that make its integration into FreedomBox convenient. If the podman
approach turns out to be favorable, we should consider writing a podman
specific module.

How does this work?

The app installs the podman and default-mysql-server Debian packages.
In other apps, such as MediaWiki, FreedomBox chooses SQLite
which eases maintenance and backup/restore. However, this
would bring a significant performance degrade for Nextcloud, hence the
choice of Mysql. Other apps, like Wordpress already use Mysql, so it is
installed on the host as opposed to installing it in a sepatate
container. A firewalld rich rule is created, so the Nextcloud container
can communicate with the db and OpenLDAP.

The podman package comes with a systemd service and timer for
automatically upgrading containers that are labeled as
"io.containers.autoupdate=registry". podman-auto-update.timer is managed
by FreedomBox. We might add a drop-in file for the timer to make it
more consistent with unattended-upgrades.

Podman natively supports creating systemd services for individual
containers. The generated systemd service is then managed by FreedomBox.

The current container image is based on Debian and runs apache inside the container.
To avoid running apache redundantly (both on the host and inside the
container) it would be preferable to use the nextcloud:stable-fpm image
instead, which seems to require creating a new virtual host.

Configure /.well-known URIs to redirect to /nextcloud. There is a conflict with
Radicale if both apps are running.

Put the podman1 interface into the trusted firewalld zone. This results in the
container gaining Internet access which is necessary to downloading Nextcloud
applications and federating with other Nextcloud instances. After applying the
patches, I opened my instance to the Internet to make sure this configuration
doesn't accidentally expose services. I scanned TCP ports 3306 and 6379 (after
installing and binding redis-server to the bridge interface). After that, I
installed the Tor app and put the default WAN interface to the external zone to
confirm that port 9050/TCP does not get exposed through the bridge interface.

To-do:
* test the fpm image
* test running the container in rootless mode for better security

Signed-off-by: Benedek Nagy <contact@nbenedek.me>
[sunil: Add missing docstrings]
[sunil: Make some methods private to module]
[sunil: Run yapf for formatting]
[sunil: Remove a comment to hide form when app is disabled]
[sunil: Update form labels]
[sunil: I18N for client names]
[sunil: Reduce number success messages in form for easy i18n and consistency]
[sunil: Reorganize patch series, squash fixes]
[sunil: Tweak auto update daemon component's ID]
[sunil: Add blank lines for formatting]
[sunil: Minor refactoring for _run_occ method]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-03-29 15:44:11 -07:00
Veiko Aasa
0c47956c2a
gitweb: Fix an issue when cloning existing repository
Skip all the other git clone progress log lines. Fixes
occasional `'total_progress' not defined` error.

Tested in the testing container that cloning exisiting repository
works.

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-03-28 13:59:41 -07:00
Sunil Mohan Adapa
8d0455aa45
matrixsynapse: Prevent setup page from being shown during uninstall
Fixes: #2381.

When app is being uninstalled, it is disabled. Use that to not show the setup
page.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-03-25 18:27:30 -04:00
Veiko Aasa
709f58ac90
samba: Disable nmbd NetBIOS service
NetBIOS was used with now deprecated SMB1 protocol.

Tests performed:
- Windows 10 can access shares when the nmbd service is disabled.
- In stable and testing containers, all the samba module tests pass.

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-03-22 14:26:02 -07:00
Veiko Aasa
9bc07f60ed
samba: Fix Samba not accessible from IPv6 localhost ::1 address
Also:
 - Remove addressses [fc00::]/7 and [fe80::] from `allow hosts`, as
those had no effect as described in #2334.
 - Remove unknown parameter `access control = yes` from Samba
configuration.

Tests performed in a stable container:

- After Samba app upgrade was performed, enabled Samba Home share.

- Using the `testparm` command, checked that the share is accessible
from ::1 IPv6 address:
```
> sudo testparm -s /etc/samba/smb-freedombox.conf  host-ip ::1
Allow connection from host-ip (::1) to disk_home

> sudo testparm -s /etc/samba/smb-freedombox.conf  host-ip ::2
Denied connection from host-ip (::2)
Deny connection from host-ip (::2) to disk_home
```

- Checked that when `ping localhost` returns ::1 in the container,
all the Samba tests pass.

Closes #2334.

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2024-03-19 14:42:07 -07:00
Sunil Mohan Adapa
601b48d5b1
snapshot: Show better error messages
- Simplify success message for easy localization.

Tests:

- Update configuration notice the success message is shown properly.

- Insert errors in set_config() privileged method and notice that HTML error is
shown properly.

- Insert errors in privileged.delete() method, print 'Config is in use.' message
on stderr and notice that HTML error is shown properly.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2024-03-19 11:46:43 -04:00