Compare commits

...

18 Commits

Author SHA1 Message Date
Sunil Mohan Adapa
0e773e7ad0
clients: Fix show empty clients in Desktop section
When a client has a package but no desktop package, an empty client entry
appears in the Desktop section.

Tests:

- For MiniDLNA, in the Desktop section, there is not empty entry for totem
anymore.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-03-09 15:26:17 -07:00
Frederico Gomes
f99f3bd382
clients: Fix formatting of package row in table
Adjust row so that package entries are evenly distributed

Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
[sunil: Fix indentation]
[sunil: Convert tabs to spaces]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-03-09 15:25:23 -07:00
Frederico Gomes
15b7a34072
wireguard: Add entries for Homebrew and RPM packages
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-03-09 15:25:20 -07:00
Frederico Gomes
0ba4cbe259
wireguard: Add button for direct APK download
**clients.py**
- allow download type for mobile os

**manifest.py**
- add entry for apk download

**plinth/templates/clients.html**
- add logic to show button for apk download

**themes > icons**
- add icon for android

source: https://www.wireguard.com/install/

Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
[sunil: Minor indentation]
[sunil: Refactor logic to eliminate packages from Desktop clients list]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-03-09 15:25:17 -07:00
Frederico Gomes
176bb97c88
wireguard: Update windows client link
Update download link to .exe provided by WireGuard.
A utility that downloads, verifies and executes provided MSIs.

source: https://www.wireguard.com/install/

Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-03-09 15:16:39 -07:00
Frederico Gomes
bd6780b81d
wireguard: Remove client entry for F-Droid which is not available
Link to the F-Droid WireGuard package returns 404 Not Found.
WireGuard seems to no longer be packaged by F-Droid.

Signed-off-by: Frederico Gomes <fredericojfgomes@gmail.com>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-03-09 15:15:55 -07:00
OwlGale
831a18847e
Translated using Weblate (Russian)
Currently translated at 98.1% (1875 of 1910 strings)
2026-03-09 19:09:48 +00:00
James Valleroy
4db977ff4e
Release v26.4.2 to unstable
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-03-08 15:28:08 -04:00
James Valleroy
448d5d84ed
Merge remote-tracking branch 'freedombox-team/main' 2026-03-08 15:26:43 -04:00
James Valleroy
41640f5d3c
Release v26.4.1 to unstable
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-03-08 15:10:35 -04:00
James Valleroy
5381990e02
doc: Fetch latest manual
Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
2026-03-08 15:09:08 -04:00
OwlGale
5a2e8ddc16
Translated using Weblate (Russian)
Currently translated at 97.9% (1870 of 1910 strings)
2026-03-08 19:48:32 +01:00
Jiří Podhorecký
4d6ddcdcdb
Translated using Weblate (Czech)
Currently translated at 100.0% (1910 of 1910 strings)
2026-03-08 19:48:32 +01:00
Sunil Mohan Adapa
97a2d68ac6
apache2: Disable pubtkt authentication module
- Since FreedomBox does not depend on the package anymore, unattended-upgrades
will remove the package. This causes Apache2 to fail to start. Disable the
module from Apache2 configuration.

Tests:

- Remove the libapache2-mod-auth-pubtkt package. Re-run apache app setup by
incrementing it version number. Apache will fail to start. Apply the patch and
increment the version number. auth_pubtkt module will be disabled and Apache is
automatically running again.

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-03-08 14:41:14 -04:00
Sunil Mohan Adapa
6128d3be16
d/control: Trim deps for nocheck build profile (Closes: #1129521)
Closes: #1129521

Tests:

- Build package successfully with the following command: gbp buildpackage
--git-debian-branch=debian-nocheck-build-profile --git-pbuilder
--git-pbuilder-options="--profiles=nocheck

Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
2026-03-08 09:14:09 -04:00
James Valleroy
bce25f465f
Vagrantfile: Enable public network for bridged networking
When testing OpenID Connect, I found that it wasn't working in a VM
with NAT port forwarding. However, vagrant can use bridged networking
instead. When the vagrant box is brought up, the user will be prompted
for which network interface to bridge.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-03-07 13:12:36 -08:00
James Valleroy
71913580db
container: Hold freedombox packages during test setup
Fixes: #2567

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
2026-03-07 13:10:19 -08:00
Jiří Podhorecký
eb709f8687
Translated using Weblate (Czech)
Currently translated at 99.7% (1906 of 1910 strings)
2026-03-06 22:09:48 +01:00
15 changed files with 219 additions and 192 deletions

9
Vagrantfile vendored
View File

@ -6,8 +6,7 @@ require 'etc'
Vagrant.configure(2) do |config|
config.vm.box = "freedombox/freedombox-testing-dev"
config.vm.network "forwarded_port", guest: 443, host: 4430
config.vm.network "forwarded_port", guest: 445, host: 4450
config.vm.network "public_network"
config.vm.synced_folder ".", "/freedombox", owner: "plinth", group: "plinth"
config.vm.provider "virtualbox" do |vb|
vb.cpus = Etc.nprocessors
@ -28,7 +27,11 @@ Vagrant.configure(2) do |config|
SHELL
config.vm.provision "tests", run: "never", type: "shell", path: "plinth/tests/functional/install.sh"
config.vm.post_up_message = "FreedomBox virtual machine is ready
for development. Plinth will be available at https://localhost:4430/freedombox
for development. To get the IP address:
$ vagrant ssh
$ ip address show
FreedomBox interface will be available at https://<ip address>/freedombox
(with an invalid SSL certificate). To watch logs:
$ vagrant ssh
$ sudo freedombox-logs

View File

@ -227,6 +227,7 @@ fi
echo "> In machine: Upgrade packages"
apt-get update
apt-mark hold freedombox freedombox-doc-en freedombox-doc-es
DEBIAN_FRONTEND=noninteractive apt-get -yq --with-new-pkgs upgrade
# Install requirements for tests if not already installed as root

35
debian/changelog vendored
View File

@ -1,3 +1,38 @@
freedombox (26.4.2) unstable; urgency=medium
[ Jiří Podhorecký ]
* Translated using Weblate (Czech)
[ OwlGale ]
* Translated using Weblate (Russian)
-- James Valleroy <jvalleroy@mailbox.org> Sun, 08 Mar 2026 15:27:13 -0400
freedombox (26.4.1) unstable; urgency=high
[ 大王叫我来巡山 ]
* Translated using Weblate (Chinese (Simplified Han script))
[ Besnik Bleta ]
* Translated using Weblate (Albanian)
[ Burak Yavuz ]
* Translated using Weblate (Turkish)
[ Jiří Podhorecký ]
* Translated using Weblate (Czech)
[ James Valleroy ]
* container: Hold freedombox packages during test setup
* Vagrantfile: Enable public network for bridged networking
* doc: Fetch latest manual
[ Sunil Mohan Adapa ]
* d/control: Trim deps for nocheck build profile (Closes: #1129521)
* apache2: Disable pubtkt authentication module
-- James Valleroy <jvalleroy@mailbox.org> Sun, 08 Mar 2026 15:09:38 -0400
freedombox (26.4) unstable; urgency=medium
[ Joseph Nuthalapati ]

44
debian/control vendored
View File

@ -14,47 +14,47 @@ Build-Depends:
dblatex,
dh-python,
docbook-xsl,
e2fsprogs,
e2fsprogs <!nocheck>,
gir1.2-nm-1.0,
libjs-bootstrap5,
libjs-htmx,
libjs-bootstrap5 <!nocheck>,
libjs-htmx <!nocheck>,
# Older libjs-bootstrap5 does not have proper dependency on popper.js >= 2.0
node-popper2,
node-popper2 <!nocheck>,
pybuild-plugin-pyproject,
python3-all:any,
python3-apt,
python3-apt <!nocheck>,
python3-augeas,
python3-bootstrapform,
python3-bootstrapform <!nocheck>,
python3-build,
python3-cherrypy3,
python3-configobj,
python3-cryptography,
python3-configobj <!nocheck>,
python3-cryptography <!nocheck>,
python3-dbus,
python3-django,
python3-django-axes,
python3-django-captcha,
python3-django <!nocheck>,
python3-django-axes <!nocheck>,
python3-django-captcha <!nocheck>,
# Explictly depend on ipware as it is optional dependecy of django-axes
python3-django-ipware,
python3-django-oauth-toolkit,
python3-django-stronghold,
python3-django-ipware <!nocheck>,
python3-django-oauth-toolkit <!nocheck>,
python3-django-stronghold <!nocheck>,
python3-gi,
python3-markupsafe,
python3-mypy,
python3-pampy,
python3-mypy <!nocheck>,
python3-pampy <!nocheck>,
python3-pexpect,
python3-pip,
python3-psutil,
python3-pytest,
python3-pytest-cov,
python3-pytest-django,
python3-pytest-runner,
python3-pytest <!nocheck>,
python3-pytest-cov <!nocheck>,
python3-pytest-django <!nocheck>,
python3-pytest-runner <!nocheck>,
python3-requests,
python3-ruamel.yaml,
python3-setuptools,
python3-systemd,
python3-typeshed,
python3-typeshed <!nocheck>,
python3-yaml,
sshpass,
sshpass <!nocheck>,
xmlto,
xsltproc
Standards-Version: 4.7.3

View File

@ -8,6 +8,19 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f
The following are the release notes for each !FreedomBox version.
== FreedomBox 26.4.1 (2026-03-08) ==
=== Highlights ===
* apache2: Disable pubtkt authentication module
=== Other Changes ===
* container: Hold freedombox packages during test setup
* d/control: Trim deps for nocheck build profile
* locale: Update translations for Albanian, Chinese (Simplified Han script), Czech, Turkish
* Vagrantfile: Enable public network for bridged networking
== FreedomBox 26.4 (2026-03-02) ==
=== Highlights ===

View File

@ -8,6 +8,19 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f
The following are the release notes for each !FreedomBox version.
== FreedomBox 26.4.1 (2026-03-08) ==
=== Highlights ===
* apache2: Disable pubtkt authentication module
=== Other Changes ===
* container: Hold freedombox packages during test setup
* d/control: Trim deps for nocheck build profile
* locale: Update translations for Albanian, Chinese (Simplified Han script), Czech, Turkish
* Vagrantfile: Enable public network for bridged networking
== FreedomBox 26.4 (2026-03-02) ==
=== Highlights ===

View File

@ -3,4 +3,4 @@
Package init file.
"""
__version__ = '26.4'
__version__ = '26.4.1'

View File

@ -44,7 +44,8 @@ def _check(client, condition):
def _client_has_desktop(client):
"""Filter to find out whether an application has desktop clients"""
return _check(
client, lambda platform: platform.get('os') in enum_values(Desktop_OS))
client, lambda platform: platform.get('os') in enum_values(Desktop_OS)
and platform.get('type') != 'package')
def _client_has_mobile(client):
@ -116,7 +117,7 @@ def _validate_platform_package(platform):
def _validate_platform_download(platform):
"""Validate a platform of type download."""
assert platform['os'] in enum_values(Desktop_OS)
assert platform['os'] in enum_values(Desktop_OS) + enum_values(Mobile_OS)
assert isinstance(platform['url'], (str, Promise))

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-03 02:00+0000\n"
"PO-Revision-Date: 2026-02-09 19:09+0000\n"
"PO-Revision-Date: 2026-03-08 18:48+0000\n"
"Last-Translator: Jiří Podhorecký <j.podhorecky@volny.cz>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/freedombox/"
"freedombox/cs/>\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
"X-Generator: Weblate 5.16-dev\n"
"X-Generator: Weblate 5.17-dev\n"
#: plinth/config.py:103
#, python-brace-format
@ -167,7 +167,7 @@ msgstr "Webové rozhraní {box_name} (Plinth)"
#: plinth/modules/apache/__init__.py:129
msgid "Web app protected by FreedomBox"
msgstr ""
msgstr "Webová aplikace chráněná FreedomBox"
#: plinth/modules/apache/components.py:270
#, python-brace-format
@ -406,10 +406,8 @@ msgid "Passphrase"
msgstr "Heslová fráze"
#: plinth/modules/backups/forms.py:187
#, fuzzy
#| msgid "Passphrase; Only needed when using encryption."
msgid "Only needed when using encryption."
msgstr "Heslová fráze, potřebná pouze při použití šifrování."
msgstr "Pouze potřeba při použití šifrování."
#: plinth/modules/backups/forms.py:190
msgid "Confirm Passphrase"
@ -448,44 +446,32 @@ msgstr ""
"path/to/repo/</i>"
#: plinth/modules/backups/forms.py:255
#, fuzzy
#| msgid "Authentication Mode"
msgid "SSH Authentication Type"
msgstr "Režim ověřování"
msgstr "Typ ověření SSH"
#: plinth/modules/backups/forms.py:256
#, fuzzy
#| msgid "Authentication to remote server failed."
msgid "Choose how to authenticate to the remote SSH server."
msgstr "Ověření vůči vzdálenému serveru se nezdařilo."
msgstr "Zvolte, jak autentizovat na vzdáleném serveru SSH."
#: plinth/modules/backups/forms.py:258
#, fuzzy
#| msgid "needs authentication"
msgid "Key-based Authentication"
msgstr "potřebuje ověření"
msgstr "Ověření klíčem"
#: plinth/modules/backups/forms.py:259
#, fuzzy
#| msgid "Disable password authentication"
msgid "Password-based Authentication"
msgstr "Zakázat ověřování heslem"
msgstr "Ověření heslem"
#: plinth/modules/backups/forms.py:261
msgid "SSH server password"
msgstr "Heslo SSH serveru"
#: plinth/modules/backups/forms.py:262
#, fuzzy
#| msgid "Disable password authentication"
msgid "Required for password-based authentication."
msgstr "Zakázat ověřování heslem"
msgstr "Vyžadováno pro ověření heslem."
#: plinth/modules/backups/forms.py:275
#, fuzzy
#| msgid "Disable password authentication"
msgid "SSH password is needed for password-based authentication."
msgstr "Zakázat ověřování heslem"
msgstr "Heslo SSH je potřeba pro ověření hesla."
#: plinth/modules/backups/forms.py:292
msgid "Remote backup repository already exists."
@ -631,6 +617,9 @@ msgid ""
"list on the remote machine for %(box_name)s to be able to connect to the "
"remote machine:"
msgstr ""
"Následující SSH klientský veřejný klíč musí být přidán do autorizovaného "
"seznamu klíčů na vzdáleném stroji pro %(box_name)s být schopen připojit k "
"vzdálenému stroji:"
#: plinth/modules/backups/templates/backups_add_remote_repository.html:86
#, python-format
@ -639,6 +628,9 @@ msgid ""
"successful, then the public key will be automatically added to the "
"authorized keys list, so that future connections do not need the password."
msgstr ""
"%(box_name)s služba se pokusí připojit pomocí zadaného hesla. Pokud je "
"úspěšný, bude veřejný klíč automaticky přidán do autorizovaného seznamu "
"klíčů, takže budoucí spojení nepotřebuje heslo."
#: plinth/modules/backups/templates/backups_add_remote_repository.html:131
#: plinth/modules/backups/templates/backups_upload.html:28
@ -816,10 +808,8 @@ msgid "Authentication to remote server failed."
msgstr "Ověření vůči vzdálenému serveru se nezdařilo."
#: plinth/modules/backups/views.py:50
#, fuzzy
#| msgid "Error establishing connection to server: {}"
msgid "Error establishing connection to server: {} {} {}"
msgstr "Chyba při navazování spojení se serverem: {}"
msgstr "Chyba při navazování spojení se serverem: {} {} {}"
#: plinth/modules/backups/views.py:82
msgid "Backup schedule updated."
@ -1454,14 +1444,7 @@ msgid "Webserver Home Page"
msgstr "Domovská stránka domovského serveru"
#: plinth/modules/config/forms.py:37
#, fuzzy, python-brace-format
#| msgid ""
#| "Choose the default page that must be served when someone visits your "
#| "{box_name} on the web. A typical use case is to set your blog or wiki as "
#| "the home page when someone visits the domain name. Note that once the "
#| "home page is set to something other than {box_name} Service (Plinth), "
#| "your users must explicitly type /plinth or /freedombox to reach "
#| "{box_name} Service (Plinth)."
#, python-brace-format
msgid ""
"Choose the default page that must be served when someone visits your "
"{box_name} on the web. A typical use case is to set your blog or wiki as the "
@ -1469,12 +1452,12 @@ msgid ""
"is set to something other than {box_name} Service (Plinth), your users must "
"explicitly type /freedombox to reach {box_name} Service (Plinth)."
msgstr ""
"Zvolte výchozí stránku která je třeba, aby byla poskytována když někdo "
"navštíví web vašeho {box_name}. Typickým případem použití je nastavení svého "
"blogu nebo wiki jako domovskou stránku když někdo navštíví doménu. Mějte na "
"paměti, že jakmile je domovská stránka nastavená na něco jiného než službu "
"{box_name} (Plinth), uživatelé budou potřebovat výslovně zadávat /plinth "
"nebo /freedombox, aby se dostali na službu {box_name} (Plinth)."
"Vyberte výchozí stránku, která musí být použita při návštěvě vašeho "
"{box_name} na webu. Typický případ použití je nastavit váš blog nebo wiki "
"jako domovskou stránku, když někdo navštíví název domény. Vezměte prosím na "
"vědomí, že jakmile je domovská stránka nastavena na něco jiného než "
"{box_name} Service (Plinth), musí uživatelé explicitně zadat /freedombox k "
"dosažení {box_name} Služby (Plinth)."
#: plinth/modules/config/forms.py:48
msgid "Show advanced apps and features"
@ -2426,16 +2409,12 @@ msgstr ""
"automaticky a ukazují na prvního uživatele-administrátora."
#: plinth/modules/email/__init__.py:41
#, fuzzy
#| msgid ""
#| "<a href=\"/plinth/apps/roundcube/\">Roundcube app</a> provides web "
#| "interface for users to access email."
msgid ""
"<a href=\"/freedombox/apps/roundcube/\">Roundcube app</a> provides web "
"interface for users to access email."
msgstr ""
"<a href=\"/plinth/apps/roundcube/\">Aplikace Roundcube</a> poskytuje "
"uživatelům webové rozhraní pro přístup k e-mailu."
"<a href=\"/freedombox/apps/roundcube/\">Roundcube app</a> poskytuje webové "
"rozhraní pro uživatele přístup k e-mailu."
#: plinth/modules/email/__init__.py:43
msgid ""
@ -6191,22 +6170,16 @@ msgstr ""
"přijme, a aby %(box_name)s poskytoval služby."
#: plinth/modules/networks/templates/router_configuration_content.html:32
#, fuzzy
#| msgid ""
#| "If you don't have control over your router, choose not to configure it. "
#| "To see options to overcome this limitation, choose 'I dont have a public "
#| "IP address' option in <a href=\"/plinth/sys/networks/internet-connection-"
#| "type/\">Internet connection type selection</a>."
msgid ""
"If you don't have control over your router, choose not to configure it. To "
"see options to overcome this limitation, choose 'I dont have a public IP "
"address' option in <a href=\"/freedombox/sys/networks/internet-connection-"
"type/\">Internet connection type selection</a>."
msgstr ""
"Pokud nemáte kontrolu nad svým routerem, zvolte jej nekonfigurovat. Chcete-"
"li zobrazit možnosti, jak toto omezení překonat, vyberte možnost „Nemám "
"veřejnou IP adresu“ v <a href=\"/plinth/sys/networks/internet-connection-"
"type/\">Výběr typu připojení k internetu</a>."
"Pokud nemáte kontrolu nad vaším routerem, zvolte, abyste ji nekonfigurovali. "
"Chcete-li vidět možnosti překonat toto omezení, vyberte možnost 'Nemám mít "
"veřejnou adresu IP' v <a href=\"/freedombox/sys/networks/internet-connection-"
"type/\"> Výběr internetového připojení</a>."
#: plinth/modules/networks/templates/router_configuration_content.html:39
msgid "Choose How You Wish to Configure Your Router"
@ -6608,19 +6581,15 @@ msgstr "Aktualizace hesla se nezdařila. Zvolte prosím silnější heslo."
#: plinth/modules/oidc/__init__.py:56
msgid "OpenID Connect Provider"
msgstr ""
msgstr "Poskytovatel OpenID Connect"
#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:14
#, fuzzy
#| msgid "Application enabled"
msgid "Application"
msgstr "Aplikace zapnuta"
msgstr "Aplikace"
#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22
#, fuzzy
#| msgid "Authorized SSH Keys"
msgid "Authorize App"
msgstr "Pověřené SSH klíče"
msgstr "Autorizovat aplikaci"
#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37
#, python-format
@ -6628,17 +6597,18 @@ msgid ""
"<strong>%(app)s</strong> wants to access your account <strong> %(username)s</"
"strong>"
msgstr ""
"<strong>%(app)s</strong> chce přistupovat ke svému účtu <strong> %(username)"
"s</strong>"
#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52
#, fuzzy, python-format
#| msgid "Authorized SSH Keys"
#, python-format
msgid "Authorize %(app)s"
msgstr "Pověřené SSH klíče"
msgstr "Autorizovat %(app)s"
#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59
#, python-format
msgid "Authorizing will redirect to %(url)s"
msgstr ""
msgstr "Autorizace přesměruje na %(url)s"
#: plinth/modules/openvpn/__init__.py:20
#, python-brace-format
@ -8055,22 +8025,15 @@ msgstr ""
"automaticky mazány podle níže uvedených nastavení."
#: plinth/modules/snapshot/__init__.py:25
#, fuzzy
#| msgid ""
#| "Snapshots currently work on btrfs file systems only and on the root "
#| "partition only. Snapshots are not a replacement for <a href=\"/plinth/sys/"
#| "backups\">backups</a> since they can only be stored on the same "
#| "partition. "
msgid ""
"Snapshots currently work on btrfs file systems only and on the root "
"partition only. Snapshots are not a replacement for <a href=\"/freedombox/"
"sys/backups\">backups</a> since they can only be stored on the same "
"partition. "
msgstr ""
"Zachycené stavy v tuto chvíli fungují pouze na souborovém systému btrfs a "
"kořenovém oddílu. Zachycené stavy nejsou náhradou <a href=\"/plinth/sys/"
"backups\">backups</a>, protože mohou být ukládány pouze na stejném oddílu, "
"jako živá data. "
"Snapshoty v současné době pracují pouze na souborech btrfs a pouze na "
"kořenovém oddílu. Snapshoty nejsou náhradou za <a href=\"/freedombox/sys/"
"backups\">backups</a> protože mohou být uloženy pouze na stejném oddílu. "
#: plinth/modules/snapshot/__init__.py:50
msgid "Storage Snapshots"
@ -9913,14 +9876,12 @@ msgid "Invalid key."
msgstr "Neplatný klíč."
#: plinth/modules/wireguard/forms.py:63
#, fuzzy
#| msgid "Enter a valid username."
msgid "Enter a valid IPv4 address."
msgstr "Zadejte platné uživatelské jméno."
msgstr "Zadejte platnou adresu IPv4."
#: plinth/modules/wireguard/forms.py:65
msgid "Enter a valid network prefix or net mask."
msgstr ""
msgstr "Zadejte platnou předponu sítě nebo net masku."
#: plinth/modules/wireguard/forms.py:71
#: plinth/modules/wireguard/templates/wireguard.html:28
@ -9966,11 +9927,6 @@ msgid "Client IP address provided by server"
msgstr "IP adresa klienta poskytnutá serverem"
#: plinth/modules/wireguard/forms.py:94
#, fuzzy
#| msgid ""
#| "IP address assigned to this machine on the VPN after connecting to the "
#| "endpoint. This value is usually provided by the server operator. Example: "
#| "192.168.0.10."
msgid ""
"IP address assigned to this machine on the VPN after connecting to the "
"endpoint. This value is usually provided by the server operator. Example: "
@ -9978,9 +9934,10 @@ msgid ""
"machines in the network. Examples: 10.68.12.43/24 or "
"10.68.12.43/255.255.255.0."
msgstr ""
"IP adresa přiřazená tomuto počítači v síti VPN po připojení ke koncovému "
"bodu. Tuto hodnotu obvykle poskytuje provozovatel serveru. Příklad: "
"192.168.0.10."
"IP adresa přiřazená k tomuto stroji na VPN po připojení k koncovému bodu. "
"Tato hodnota je obvykle poskytována provozovatelem serveru. Příklad: "
"192.168.0.10. Můžete také zadat síť. To umožní dosažení strojů v síti. "
"Příklady: 10.68.12.43/24 nebo 10.68.12.43/255.255.255.0."
#: plinth/modules/wireguard/forms.py:102
msgid "Private key of this machine"
@ -10030,34 +9987,30 @@ msgid "As a Server"
msgstr "Jako server"
#: plinth/modules/wireguard/templates/wireguard.html:16
#, fuzzy, python-format
#| msgid "Endpoints for this %(box_name)s:"
#, python-format
msgid "Information for this %(box_name)s:"
msgstr "Endpointy pro tento %(box_name)s:"
msgstr "Informace pro tento %(box_name)s:"
#: plinth/modules/wireguard/templates/wireguard.html:24
msgid "Property"
msgstr ""
msgstr "Vlastnost"
#: plinth/modules/wireguard/templates/wireguard.html:25
msgid "Value"
msgstr ""
msgstr "Hodnota"
#: plinth/modules/wireguard/templates/wireguard.html:32
#, fuzzy
#| msgid "Endpoint"
msgid "Endpoint(s)"
msgstr "Koncový bod"
msgstr "Koncový bod(y)"
#: plinth/modules/wireguard/templates/wireguard.html:40
#, fuzzy, python-format
#| msgid "To %(box_name)s Ports"
#, python-format
msgid "%(box_name)s VPN IP for services"
msgstr "Na %(box_name)s Porty"
msgstr "%(box_name)s VPN IP pro služby"
#: plinth/modules/wireguard/templates/wireguard.html:49
msgid "Peers"
msgstr ""
msgstr "Peery"
#: plinth/modules/wireguard/templates/wireguard.html:51
msgid "Peers allowed to connect to this server:"
@ -10087,10 +10040,8 @@ msgid "Add Allowed Client"
msgstr "Přidat povoleného klienta"
#: plinth/modules/wireguard/templates/wireguard.html:96
#, fuzzy
#| msgid "WireGuard server started successfully."
msgid "WireGuard server not started yet."
msgstr "Server WireGuard se úspěšně spustil."
msgstr "Server WireGuard ještě nenastartoval."
#: plinth/modules/wireguard/templates/wireguard.html:100
#: plinth/modules/wireguard/templates/wireguard.html:102
@ -10181,7 +10132,7 @@ msgstr "Veřejný klíč serveru:"
#: plinth/modules/wireguard/templates/wireguard_show_client.html:45
msgid "Server VPN IP address for services:"
msgstr ""
msgstr "IP adresa VPN serveru pro služby:"
#: plinth/modules/wireguard/templates/wireguard_show_client.html:57
#: plinth/modules/wireguard/templates/wireguard_show_server.html:63
@ -10223,7 +10174,7 @@ msgstr "IP adresa tohoto počítače:"
#: plinth/modules/wireguard/templates/wireguard_show_server.html:45
msgid "All outgoing traffic is sent using this connection:"
msgstr ""
msgstr "Veškerý odchozí provoz je odeslán pomocí tohoto spojení:"
#: plinth/modules/wireguard/views.py:54
msgid "Added new client."
@ -10482,21 +10433,19 @@ msgstr "Časový limit čekání na správce balíčků"
#: plinth/settings.py:181
msgid "Uniquely identify your user account with username"
msgstr ""
msgstr "Jedinečně identifikovat váš uživatelský účet s uživatelským jménem"
#: plinth/settings.py:183
#, fuzzy
#| msgid "requesting address"
msgid "View email address"
msgstr "vyžadující adresu"
msgstr "Zobrazit emailovou adresu"
#: plinth/settings.py:185
msgid "View basic profile information (such as name and email)"
msgstr ""
msgstr "Zobrazit základní informace o profilu (např. jméno a e-mail)"
#: plinth/settings.py:187
msgid "View permissions that account has"
msgstr ""
msgstr "Zobrazení oprávnění, které má účet"
#: plinth/setup.py:44
msgid "Installing app"

View File

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-03-03 02:00+0000\n"
"PO-Revision-Date: 2025-12-19 20:00+0000\n"
"PO-Revision-Date: 2026-03-09 19:09+0000\n"
"Last-Translator: OwlGale <owlgale@users.noreply.hosted.weblate.org>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/freedombox/"
"freedombox/ru/>\n"
@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.15.1\n"
"X-Generator: Weblate 5.17-dev\n"
#: plinth/config.py:103
#, python-brace-format
@ -473,26 +473,20 @@ msgid "Key-based Authentication"
msgstr "требуется аутентификация"
#: plinth/modules/backups/forms.py:259
#, fuzzy
#| msgid "Disable password authentication"
msgid "Password-based Authentication"
msgstr "Отключить аутентификацию по паролю"
msgstr "Аутентификация по паролю"
#: plinth/modules/backups/forms.py:261
msgid "SSH server password"
msgstr "Пароль SSH-сервера"
#: plinth/modules/backups/forms.py:262
#, fuzzy
#| msgid "Disable password authentication"
msgid "Required for password-based authentication."
msgstr "Отключить аутентификацию по паролю"
msgstr "Требуется для аутентификации по паролю."
#: plinth/modules/backups/forms.py:275
#, fuzzy
#| msgid "Disable password authentication"
msgid "SSH password is needed for password-based authentication."
msgstr "Отключить аутентификацию по паролю"
msgstr "Пароль SSH требуется для аутентификации по паролю."
#: plinth/modules/backups/forms.py:292
msgid "Remote backup repository already exists."
@ -1751,13 +1745,13 @@ msgstr "предупреждение"
#. Megabyte.
#: plinth/modules/diagnostics/__init__.py:221
msgid "MiB"
msgstr "МБ"
msgstr "МиБ"
#. Translators: This is the unit of computer storage Gibibyte similar to
#. Gigabyte.
#: plinth/modules/diagnostics/__init__.py:226
msgid "GiB"
msgstr "ГБ"
msgstr "ГиБ"
#: plinth/modules/diagnostics/__init__.py:233
msgid "You should disable some apps to reduce memory usage."
@ -6659,10 +6653,8 @@ msgid "Application"
msgstr "Приложения"
#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:22
#, fuzzy
#| msgid "Authorized SSH Keys"
msgid "Authorize App"
msgstr "Авторизованные SSH ключи"
msgstr "Авторизовать приложение"
#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:37
#, python-format
@ -6672,10 +6664,9 @@ msgid ""
msgstr ""
#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:52
#, fuzzy, python-format
#| msgid "Authorized SSH Keys"
#, python-format
msgid "Authorize %(app)s"
msgstr "Авторизованные SSH ключи"
msgstr "Авторизовать %(app)s"
#: plinth/modules/oidc/templates/oauth2_provider/authorize.html:59
#, python-format
@ -10204,10 +10195,8 @@ msgid "Add Connection to Server"
msgstr "Добавить подключение к серверу"
#: plinth/modules/wireguard/templates/wireguard_add_client.html:21
#, fuzzy
#| msgid "IP address to use for client:"
msgid "IP address that will be assigned to this client"
msgstr "IP-адрес для использования клиентом:"
msgstr "IP-адрес который будет присвоен этому клиенту"
#: plinth/modules/wireguard/templates/wireguard_add_client.html:31
msgid "Add Client"

View File

@ -86,7 +86,7 @@ class ApacheApp(app_module.App):
app_id = 'apache'
_version = 15
_version = 16
def __init__(self) -> None:
"""Create components for the app."""

View File

@ -128,7 +128,7 @@ def setup(old_version: int):
# Various modules for authentication/authorization
webserver.enable('auth_openidc', kind='module')
webserver.enable('authnz_ldap', kind='module')
webserver.enable('auth_pubtkt', kind='module')
webserver.disable('auth_pubtkt', kind='module')
# enable some critical modules to avoid restart while installing
# FreedomBox applications.

View File

@ -15,7 +15,8 @@ clients = [{
'platforms': [{
'type': 'download',
'os': 'windows',
'url': 'https://download.wireguard.com'
'url': ('https://download.wireguard.com/'
'windows-client/wireguard-installer.exe')
}, {
'type': 'download',
'os': 'macos',
@ -25,10 +26,18 @@ clients = [{
'format': 'deb',
'name': 'wireguard'
}, {
'type': 'store',
'type': 'package',
'format': 'rpm',
'name': 'wireguard-tools'
}, {
'type': 'package',
'format': 'brew',
'name': 'wireguard-tools'
}, {
'type': 'download',
'os': 'android',
'store_name': 'f-droid',
'url': store_url('f-droid', _wireguard_package_id)
'url': ('https://www.wireguard.com/'
'install/#android-play-store-direct-apk-file')
}, {
'type': 'store',
'os': 'android',

View File

@ -45,20 +45,22 @@
<td>
{% for platform in client.platforms %}
{% if platform.type == 'download' %}
<a class="btn btn-default" href="{{ platform.url }}" role="button">
<span>
{% with 'theme/icons/'|add:platform.os|add:'.png' as icon %}
<img class="client-icon" src="{% static icon %}" />
{% if platform.os == 'gnu-linux' %}
{% trans 'GNU/Linux' %}
{% elif platform.os == 'windows' %}
{% trans 'Windows' %}
{% elif platform.os == 'macos' %}
{% trans 'macOS' %}
{% endif %}
{% endwith %}
</span>
</a>
{% if platform.os == 'gnu-linux' or platform.os == 'macos' or platform.os == 'windows' %}
<a class="btn btn-default" href="{{ platform.url }}" role="button">
<span>
{% with 'theme/icons/'|add:platform.os|add:'.png' as icon %}
<img class="client-icon" src="{% static icon %}" />
{% if platform.os == 'gnu-linux' %}
{% trans 'GNU/Linux' %}
{% elif platform.os == 'windows' %}
{% trans 'Windows' %}
{% elif platform.os == 'macos' %}
{% trans 'macOS' %}
{% endif %}
{% endwith %}
</span>
</a>
{% endif %}
{% endif %}
{% endfor %}
</td>
@ -75,6 +77,16 @@
<td>{{ client.name }}</td>
<td>
{% for platform in client.platforms %}
{% if platform.type == 'download' and platform.os == 'android' %}
<a class="btn btn-default" href="{{ platform.url }}" role="button">
<span>
{% with 'theme/icons/'|add:platform.os|add:'.png' as icon %}
<img class="client-icon" src="{% static icon %}" />
{% trans 'Android APK' %}
{% endwith %}
</span>
</a>
{% endif %}
{% if platform.type == 'store' and platform.os == 'android' or platform.os == 'ios' %}
<a class="btn btn-default" href="{{ platform.url }}" role="button">
<span>
@ -107,15 +119,17 @@
<td>
{% for platform in client.platforms %}
{% if platform.type == 'package' %}
{% if platform.format == 'deb' %}
<div><strong>{% trans "Debian:" %}</strong> {{ platform.name }}</div>
{% endif %}
{% if platform.format == 'brew' %}
<div><strong>{% trans "Homebrew:" %}</strong> {{ platform.name }}</div>
{% endif %}
{% if platform.format == 'rpm' %}
<p><strong>{% trans "RPM:" %}</strong> {{ platform.name }}</p>
{% endif %}
<div>
{% if platform.format == 'deb' %}
<strong>{% trans "Debian:" %}</strong> {{ platform.name }}
{% endif %}
{% if platform.format == 'brew' %}
<strong>{% trans "Homebrew:" %}</strong> {{ platform.name }}
{% endif %}
{% if platform.format == 'rpm' %}
<strong>{% trans "RPM:" %}</strong> {{ platform.name }}
{% endif %}
</div>
{% endif %}
{% endfor %}
</td>

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 B