9921 Commits

Author SHA1 Message Date
Sunil Mohan Adapa
aee81477bd
ci: Don't include defunct extract-source job
- According to a recent change in Salsa CI[1], this job does nothing.

- There is a syntax error that causes entire pipeline file from becoming valid.

Link: 2dd7850308
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2025-09-15 15:31:45 +03:00
Sunil Mohan Adapa
46da3db69d
ci: Update container for functional tests from bookworm to trixie
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2025-09-12 14:53:51 -07:00
Sunil Mohan Adapa
c95ee766aa
bepasty: tests: Override backup/restore test properly
- The current name does not the match the base class method it intends to
override.

Tests:

- Run functional tests for bepasty -v option and notice that only one backup and
restore test runs.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2025-09-12 11:24:19 -07:00
Dietmar
a2668b405b
Translated using Weblate (Italian)
Currently translated at 47.1% (886 of 1878 strings)
2025-09-11 18:02:03 +00:00
Dietmar
2355e52d21
Translated using Weblate (German)
Currently translated at 98.4% (1849 of 1878 strings)
2025-09-11 18:02:00 +00:00
Максим Горпиніч
2a62d62365
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (1878 of 1878 strings)
2025-09-10 04:02:00 +00:00
大王叫我来巡山
e6b16b5ea8
Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 61.5% (1156 of 1878 strings)
2025-09-10 04:01:59 +00:00
Burak Yavuz
24d35a15a3
Translated using Weblate (Turkish)
Currently translated at 100.0% (1878 of 1878 strings)
2025-09-10 04:01:58 +00:00
James Valleroy
d0d621b594
Release v25.11 to unstable v25.11 2025-09-08 20:28:34 -04:00
James Valleroy
5e9e739870
doc: Fetch latest manual 2025-09-08 20:27:36 -04:00
James Valleroy
83dcd9655e
locale: Update translation strings 2025-09-08 19:52:09 -04:00
Sunil Mohan Adapa
b7df34d175
matrixsynapse, upgrades: Install select packages from unstable
Tests:

- On stable, testing distributions applying the patches and restarting the
services causes two files to be created on the system.
/etc/apt/sources.list.d/freedombox-unstable.list and
/etc/apt/preferences.d/50freedombox-dist.pref. In unstable distributions the
files are not created.

- Installing Matrix Synapse on all three distributions works. Initial domain
configuration works. All diagnostic tests pass.

- On stable and testing distributions, running 'apt policy matrix-synapse' shows
that priority for package from unstable is 200 higher than installed package
priority of 100. Same for the package python3-pympler. Running 'apt policy
freedombox' shows that package from -backports has a priority of 500 that is
same as the priority of non-backports package.

Tests:

- During re-run of setup, unstable sources are setup.

- Matrix synapse app shows updated description.

- Upgrades app shows updated description about frequent feature updates.

- On oldstable, stable, and testing distributions unstable sources are setup.
But not on unstable.

- On stable, testing distributions applying the patches and restarting the
services causes two files to be created on the system.
/etc/apt/sources.list.d/freedombox-unstable.list and
/etc/apt/preferences.d/50freedombox-unstable.pref. In unstable distributions the
files are not created.

- Installing Matrix Synapse on all four distributions works. Initial domain
configuration works. All diagnostic tests pass.

- On oldstable, stable, and testing distributions, running 'apt policy
python3-pympler matrix-synapse python3-python-multipart' shows that priority for
package from unstable is 200 higher than installed package priority of 100.
Running 'apt policy freedombox' shows that package from -backports has a
priority of 500 that is same as the priority of non-backports package.

- When frequent feature updates is not enabled, the app can't be installed.
"This application is currently not available in your distribution." message is
shown. After enabling frequent feature updates, the apps can be installed.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2025-09-08 19:33:56 -04:00
Sunil Mohan Adapa
d8c727a109
package: Don't consider uninstalled packages as available
- Ensure that packages that are not installable to negative priority are not
shown as available.

Tests:

- Set priority of an available package to less than 0. This package will be
shown as not-available in the app install page.

- Normal apps are shown as available and can be installed as usual.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2025-09-08 19:33:52 -04:00
Sunil Mohan Adapa
866daf27ef
package: Refresh apt cache if sources list is newer
- When backports repository or unstable repository freshly added by the updates
app. We will like apps to become available due to newly available Debian
packages. For this to happen 'apt update' must be called before checking if an
app is available.

Tests:

- Freshly apply the patches for upgrades app. Setup is re-run and unstable
sources file is introduced. Immediately visit the Matrix app and notice that is
shown as available and can be installed immediately.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2025-09-08 19:33:48 -04:00
Sunil Mohan Adapa
fecd6a3577
upgrades: Overhaul detection of distribution
- Move some utilities to utils.py from distupgrade.py and __init__.py.

- This fixes issues with apt preferences being set on unstable
distribution (despite code that tries to prevent it).

- There is no way to distinguish between 'testing' and 'unstable' distributions
in Debian using commands like lsb_release (powered by /etc/os-release). See:
https://lwn.net/Articles/984635/ . So, use the value set in
/etc/apt/sources.list.

Tests: (tested entire patchset)

- Deluge can be installed in trixie.

- Auto-distribution upgrade button is checked during setup on stable and
oldstable but not on testing and unstable.

- Auto-distribution upgrade button is enabled in the form on stable and
oldstable but not on testing and unstable.

- Backports wizard step is skipped on unstable (non-develop mode), but not on
oldstable, stable, testing, and unstable (develop mode).

- If backports are not activated during first wizard, then backports can be
activated on upgrades app page if distribution is oldstable, stable, testing, or
unstable (non-develop mode) but not unstable (develop mode).

- During re-run of setup, setting up backport sources is skipped if already
setup.

- Backports sources files are not added in testing (non-develop) and
unstable (non-develop) distributions. Backports sources are added to oldstable,
stable, testing (develop) and unstable (develop). Unstable sources sources are
not added to unstable but added to oldstable, stable, and testing.

- Backports sources file is added with correct code name bookworm/trixie for
oldstable, stable, and testing distributions.

- When backports sources is set to 'bookworm-backports' on Trixie distribution,
re-running setup updates them to 'trixie-backports'.

- Preferences files are added in oldstable, stable, and testing distributions
but not unstable.

- If unstable and another distro is present in apt sources, then it is treated
as unstable as shown in the distribution upgrade page.

- Current codename is shown properly from sources.list in oldstable, stable,
testing, and unstable in distribution upgrade page.

- NOT TESTED: If distribution upgrade is interrupted, then continue page is
shown.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2025-09-08 19:33:33 -04:00
Sunil Mohan Adapa
4a0e35f806
dynamicdns: Handle showing errors from GnuDIP
- Recently we have changed to using HTTP protocol for GnuDIP updates. These
involve using requests library. For exceptions raised by this library the
arguments may not all be JSON serializable. So, explicitly convert them into
strings.

Tests:

- Turn of network connection to the machine. Trigger a Dynamic DNS update by
re-submitting configuration form. This will results in an error message shown
in status table instead of an unhandled exception.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 22:00:04 +05:30
Sunil Mohan Adapa
f94d8c661d
privileged_daemon: Log only to journal and not console
- This prevents double logging for all log statements in privileged daemon.

- Also drop conditional checking for systemd.journal python module. We hard
depend on python3-systemd package which has it.

Tests:

- All logs messages from privileged daemon log only once to the journal.

- For main service, the log message happens on console only when running on the
command line. When the systemd service is started, it is only logged to the
journal.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:24:34 +05:30
Sunil Mohan Adapa
0c6f04b55f
actions, backups: Fix tests depending on sudo based actions
Tests:

- Mounting/unmounting of remote SSH repositories works.

- Creating repo, creating/deleting/list archives work.

- If a privileged method raises an exception after outputting to stdout (using
action_utils.run) then stdout is shown in the HTML UI message.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:24:10 +05:30
Sunil Mohan Adapa
944c427f44
actions: Framework for capturing stdout/stderr in privileged daemon
Tests:

- If there is a syntax error in communication with privileged server. 'stdout'
and 'stderr' keys are present in 'exception' dictionary of the reply.

- If there is a error in the privileged method in communication with privileged
server. 'stdout' and 'stderr' keys are present in 'exception' dictionary of the
reply. The values are filled with output of the command that have been run.

- If a privileged method uses action_utils.run, then raising an exception in the
method shows proper stdout and stderr in the UI HTML message.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:23:55 +05:30
Sunil Mohan Adapa
7b2acf247e
actions: Drop sudo based privileged actions
Tests:

- /usr/share/plinth/actions/actions is not installed.

- Code check works on plinth directory and container script only

- Provisioning a container does not add sudo configuration for actions. 'fbx'
user can perform 'sudo' operations.

- Make install does not install actions based sudo configuration. Admin users
can perform sudo operations.

- Exporting backup archive works. Validating a transmission directory works.
Some of the privileged operations works.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:23:45 +05:30
Sunil Mohan Adapa
a580437de2
privileged_daemon: Introduce a command line client for the API
- Similar call signature as actions/actions.

Tests:

- Running make install places a binary file in /usr/bin/freedombox-cmd

- Running 'freedombox-cmd upgrades get_log --no-args' works.

- Running 'freedombox-cmd upgrades activate_backports --no-args' works.

- Running 'freedombox-cmd storage usage_info --no-args' works.

- Running 'freedombox-cmd sshfs is_mounted --no-args' works.

- echo '{"args": ["USERNAME", "AUTH_USER", "AUTH_PASSWORD"], "kwargs": {}}' |
sudo freedombox-cmd users remove_user.

- Distribution upgrade from Bookworm to Trixie works.

  - Snapshots are disabled and re-enabled during upgrade.

  - /etc/apt/sources.list changes are completed on completion.

- If a command fails, the return code is not 0.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:23:36 +05:30
Sunil Mohan Adapa
143e4a00bd
actions, backup: Implement raw output for privileged daemon
- Regression: downloading does not work with sudo based action anymore. However,
sudo based actions are to be removed in later patches.

Tests:

- Downloading tar backup archive works. Untar works. Downloading gives upto
10MiB/s speed.

- If API is not called with _raw_output=True, then special exception is raised.

- Downloading tar file from command line using nc also works.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:23:25 +05:30
Sunil Mohan Adapa
0aa3ee5a70
actions: Simplify raw output code in privileged methods
Tests:

- Downloading tar backup archive works. Untar works. Downloading gives upto
10MiB/s speed.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:23:16 +05:30
Sunil Mohan Adapa
5ef639d23b
actions: Drop feature to run privileged action as another user
- Used after migration gitweb and storage calls to using
action_utils.run_as_user.

Tests:

- Gitweb operations and directory validations works when privileged daemon is
running or not running.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:23:04 +05:30
Sunil Mohan Adapa
773460dde9
storage: Don't use privileged action feature to run as different user
- Instead implement running specific commands inside the privileged action as a
specific user.

Tests:

- In transmission, setting the download directory is valid if

  - A parent level directory is writable by transmission daemon and child does
  not exist.

  - A leaf level directory is writable by transmission daemon when leaf exists.

  - A leaf level exists and is not a directory.

- In MiniDLNA, setting the directory works only if it exists and is readable.
Work when write permission is not available.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:22:54 +05:30
Sunil Mohan Adapa
87331e7c97
gitweb: Don't use privileged action feature to run as different user
- Instead implement running specific commands inside the privileged action as a
specific user.

Tests:

- Gitweb functional tests and unit tests work.

- Running various operations such as clone, create, set branch, rename, etc. all
result in repositories (and all their contents) owned by www-data:www-data.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:22:40 +05:30
Sunil Mohan Adapa
7a4fb9d9f6
gitweb: Use pathlib API more
Tests:

- Existing gitweb repos are listed properly. Newly created repos are reported
  properly.

  - Directories without .git extension or starting with . are not shown.

  - Private repos are shown as private and public ones as public.

- Cloning progress is shown properly in the list of repos.

  - Cloning starts with 0%.

  - Cloning file is removed after completion of cloning process.

  - Cloning is done into .temp directory.

  - After cloning repo can be checked out as expected.

- Getting/setting of default branch/description/owner/private works.

- Getting the list of branches work when selecting the default branch.

- Creating new blank repo works.

- Deleting a repo works

- Uninstalling the app works. All repos are removed.

- Retrieving non-existent repo shows error as expected

- Backup/restore of repos works as expected.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:22:15 +05:30
Sunil Mohan Adapa
de1070df35
action_utils: Implement a utility to run a command as different user
- To be used to run specific command as another user.

Tests:

- Unit tests.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 20:22:00 +05:30
Sunil Mohan Adapa
46c3ac90f3
email: Fix Thunderbird auto configuration failure
- When there is no URL name provided, the view fails to render when computing
breadcrumbs from middleware. Provide a name so that the URL does not lead to a
500 HTTP error.

Tests:

- Accessing the URL on development machine does not lead to an error page.

- On a production machine, when trying to use Thunderbird account setup wizard,
without the patch, Thunderbird says that it found configuration by enumerating
common names for the domain. A 500 error can be seen in the journal. After the
change in patch, Thunderbird says that it found the configuration from the
provider. A 200 success code can be seen from journal.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2025-09-05 07:33:03 -04:00
Joseph Nuthalapati
1c11d420fc
l10n: Fix a broken string in Russian translation
Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-05 15:49:32 +05:30
Dietmar
40c987ff7a
Translated using Weblate (Italian)
Currently translated at 47.1% (886 of 1880 strings)
2025-09-04 18:02:03 +02:00
Dietmar
1d20bf200b
Translated using Weblate (German)
Currently translated at 98.4% (1850 of 1880 strings)
2025-09-04 18:02:00 +02:00
Sunil Mohan Adapa
4140d3b444
privileged: Don't isolate /var/tmp/ for privileged daemon
- Files from web service are uploaded to /var/tmp/ directory. They need to
accessible to privileged daemon to that it can move them to a target location.
So, if /var/tmp is isolated for privileged daemon, it can't see those files as a
separate tmpfs filesystem is mounted on that folder.

- Ideally, we should have PrivateTmp=yes and
JoinsNameSpacesOf=freedombox-privileged.service set on plinth.service. However,
this requires further changes to the way developer execution is done command
line. This is done in future.

Tests:

- Uploading a backup works.

- Uploading a kiwix archive works.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Veiko Aasa <veiko17@disroot.org>
2025-09-04 10:29:49 +03:00
Roman Akimov
1ba31e32f3
Translated using Weblate (Russian)
Currently translated at 97.3% (1830 of 1880 strings)
2025-09-03 09:02:02 +00:00
Joseph Nuthalapati
2075016369
l10n: Fix broken Italian translation
Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-02 12:48:58 +05:30
Jiří Podhorecký
8c98ba21d1
Translated using Weblate (Czech)
Currently translated at 99.9% (1879 of 1880 strings)
2025-09-02 09:01:30 +02:00
Dietmar
3fa6a27dde
Translated using Weblate (Italian)
Currently translated at 42.1% (792 of 1880 strings)
2025-09-02 09:01:29 +02:00
Joseph Nuthalapati
aab9204cb6
l10n: Fix formatted strings for errors/exceptions
Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-02 12:27:38 +05:30
Joseph Nuthalapati
5e1345f0df
backups: Trim translatable string
Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-02 12:26:36 +05:30
Veiko Aasa
35b03aa5df
samba: Update client list
Removed android apps that have been discontinued and added SambaLite
app.

Tested that SambaLite works with Samba app.

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-01 23:18:54 +05:30
Sunil Mohan Adapa
52cde4c0b6
upgrades: Don't allow needs-restart to restart privileged daemon
Fixes: #2534.

- Otherwise, if python standard library is updated, needs-restart will determine
that the freedombox-privileged.service needs to be restarted. The service may
have triggered the 'apt-get install' operation that triggered needs-restart in
the first place. That causes the install operation to fail.

Tests:

- Installing Calibre app which also brings in python standard library update
succeeds and freedombox-privileged.service is not restarted during 'apt-get
install' operation.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-01 23:14:25 +05:30
Sunil Mohan Adapa
d5f22a8755
web_server: Restart in development mode only for source code changes
Helps: #2534.

- When a module change is detected. Don't restart. Restart only when FreedomBox
source code is changed. This prevents unwanted restarts when Python standard
library is updated during an app's installation.

- This will make functional tests more robust as during functional tests,
freedombox service run in development mode.

- This may lead to annoyances during development when we have to restart the
service manually. This is unlikely but if it happens we can tweak the setting by
maintaining the allow list of modules instead of deny list of modules.

Tests:

- Calibre installation which brings in new version of python standard library
works without causing CherryPy to detect python module changes during 'apt-get
install'.

- Changing a source code file under the plinth/ directory leads to the service
getting automatically restarted.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-09-01 23:14:16 +05:30
109247019824
409d011982
Translated using Weblate (Bulgarian)
Currently translated at 56.2% (1057 of 1880 strings)
2025-09-01 19:02:16 +02:00
Roman Akimov
3463e13c3b
Translated using Weblate (Russian)
Currently translated at 95.1% (1789 of 1880 strings)
2025-09-01 19:02:12 +02:00
Dietmar
395ff324b9
Translated using Weblate (Italian)
Currently translated at 38.6% (727 of 1880 strings)
2025-09-01 19:02:09 +02:00
Dietmar
c4832b4e87
Translated using Weblate (German)
Currently translated at 98.4% (1851 of 1880 strings)
2025-09-01 19:02:06 +02:00
ikmaak
ec483f0060
Translated using Weblate (Dutch)
Currently translated at 97.3% (1830 of 1880 strings)
2025-08-31 17:01:54 +02:00
Sunil Mohan Adapa
411bec8f53
syncthing: Update Android clients to Syncthing-Fork
Closes: #2539.

- MPL 2.0 is a free software license.
https://www.gnu.org/licenses/license-list.html#MPL-2.0

Tests:

- Links in the app page work.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-08-31 11:03:20 +05:30
Joseph Nuthalapati
0a9341851f
power: logind config to ignore laptop lid close
Defined two settings for ignoring laptop lid close action. They handle
the two cases - running on battery power and running on external power.

Signed-off-by: Joseph Nuthalapati <njoseph@riseup.net>
2025-08-29 20:50:47 -07:00
Sunil Mohan Adapa
0081d1ffeb
container: Pass --nvram option to virsh undefine
- Similar to the way we did in another place. Otherwise, the command won't work
on UEFI based VMs.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2025-08-29 15:48:27 -07:00