Compare commits

..

No commits in common. "0e773e7ad06c06586b5e67afc546bedde48975d1" and "cfc5d3acab0db5b67cb790ad4e03647649a21e51" have entirely different histories.

15 changed files with 192 additions and 219 deletions

9
Vagrantfile vendored
View File

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

View File

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

35
debian/changelog vendored
View File

@ -1,38 +1,3 @@
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 freedombox (26.4) unstable; urgency=medium
[ Joseph Nuthalapati ] [ Joseph Nuthalapati ]

44
debian/control vendored
View File

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

View File

@ -8,19 +8,6 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f
The following are the release notes for each !FreedomBox version. 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) == == FreedomBox 26.4 (2026-03-02) ==
=== Highlights === === Highlights ===

View File

@ -8,19 +8,6 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f
The following are the release notes for each !FreedomBox version. 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) == == FreedomBox 26.4 (2026-03-02) ==
=== Highlights === === Highlights ===

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 500 B