diff --git a/debian/changelog b/debian/changelog index 98bce6265..4d1b6ee47 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,21 @@ +freedombox (23.2) unstable; urgency=medium + + [ Besnik Bleta ] + * Translated using Weblate (Albanian) + + [ James Valleroy ] + * upgrades: Stop quassel during dist upgrade + * ssh: Add sudo to allowed groups + * doc: Fetch latest manual + + [ Sunil Mohan Adapa ] + * ssh: Update existing setups to add sudo group to allowed SSH groups + + [ 109247019824 ] + * Translated using Weblate (Bulgarian) + + -- James Valleroy Mon, 16 Jan 2023 20:33:02 -0500 + freedombox (23.1~bpo11+1) bullseye-backports; urgency=medium * Rebuild for bullseye-backports. diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki index 78b988f2a..c85465fa1 100644 --- a/doc/manual/en/ReleaseNotes.raw.wiki +++ b/doc/manual/en/ReleaseNotes.raw.wiki @@ -8,6 +8,12 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 23.2 (2023-01-16) == + + * locale: Update translations for Albanian, Bulgarian + * ssh: Add sudo to allowed groups + * upgrades: Stop quassel during dist upgrade + == FreedomBox 23.1 (2023-01-03) == === Highlights === diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki index 78b988f2a..c85465fa1 100644 --- a/doc/manual/es/ReleaseNotes.raw.wiki +++ b/doc/manual/es/ReleaseNotes.raw.wiki @@ -8,6 +8,12 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f The following are the release notes for each !FreedomBox version. +== FreedomBox 23.2 (2023-01-16) == + + * locale: Update translations for Albanian, Bulgarian + * ssh: Add sudo to allowed groups + * upgrades: Stop quassel during dist upgrade + == FreedomBox 23.1 (2023-01-03) == === Highlights === diff --git a/plinth/__init__.py b/plinth/__init__.py index 0a85ea03f..c0c44fcbd 100644 --- a/plinth/__init__.py +++ b/plinth/__init__.py @@ -3,4 +3,4 @@ Package init file. """ -__version__ = '23.1' +__version__ = '23.2' diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po index 4426c9b41..c5a87ac9c 100644 --- a/plinth/locale/bg/LC_MESSAGES/django.po +++ b/plinth/locale/bg/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-01-03 10:41-0500\n" -"PO-Revision-Date: 2022-12-07 20:48+0000\n" +"PO-Revision-Date: 2023-01-16 08:48+0000\n" "Last-Translator: 109247019824 \n" "Language-Team: Bulgarian \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.15-dev\n" +"X-Generator: Weblate 4.15.1-dev\n" #: doc/dev/_templates/layout.html:11 msgid "Page source" @@ -6055,6 +6055,11 @@ msgid "" "deletion of files on one device will be automatically replicated on all " "other devices that also run Syncthing." msgstr "" +"Syncthing е приложение за синхронизиране на файлове между няколко " +"устройства, например настолен компютър и мобилен телефон. Създаването, " +"модифицирането или изтриването на файлове на едно устройство ще бъде " +"автоматично възпроизведено на всички останали устройства, на които също е " +"стартиран Syncthing." #: plinth/modules/syncthing/__init__.py:27 #, python-brace-format @@ -6067,6 +6072,13 @@ msgid "" "{box_name} is only available for users belonging to the \"admin\" or " "\"syncthing-access\" group." msgstr "" +"Работата на Syncthing на {box_name} осигурява допълнителна точка за " +"синхронизиране на данни, която е налична през повечето време, което " +"позволява на устройствата ви да се синхронизират по-често. {box_name} " +"стартира един екземпляр на Syncthing, който може да се използва от няколко " +"потребители. Наборът от устройства на всеки потребител може да се " +"синхронизира с отделен набор от папки. Интерфейсът на {box_name} е достъпен " +"само за потребители, принадлежащи към групата „admin“ или „syncthing-access“." #: plinth/modules/syncthing/__init__.py:54 msgid "Administer Syncthing application" diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po index 8fdd0501c..52c421bd2 100644 --- a/plinth/locale/sq/LC_MESSAGES/django.po +++ b/plinth/locale/sq/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-01-03 10:41-0500\n" -"PO-Revision-Date: 2022-10-10 13:34+0000\n" +"PO-Revision-Date: 2023-01-05 15:50+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 4.15.1-dev\n" #: doc/dev/_templates/layout.html:11 msgid "Page source" @@ -2128,6 +2128,8 @@ msgid "" "The following DNS records must be added manually on your primary domain for " "the mail server to work properly." msgstr "" +"Që shërbyesi i postës të funksionojë si duhet, zërat DNS vijues duhen shtuar " +"dorazi te përkatësia juaj parësore." #: plinth/modules/email/templates/email.html:36 msgid "TTL" @@ -3718,6 +3720,8 @@ msgid "" "Set the name of the main channel of your mumble server. If the name was " "never changed, the channel is named Root." msgstr "" +"Caktoni emrin e kanalit parësor të shërbyesit tuaj Mumble. Nëse emri s’qe " +"ndryshuar ndonjëherë, kanali është i emërtuar Root." #: plinth/modules/mumble/manifest.py:34 msgid "Mumblefly" @@ -4991,12 +4995,7 @@ msgid "Profile" msgstr "Profil" #: plinth/modules/openvpn/templates/openvpn.html:15 -#, fuzzy, python-format -#| msgid "" -#| "To connect to %(box_name)s's VPN, you need to download a profile and feed " -#| "it to an OpenVPN client on your mobile or desktop machine. OpenVPN " -#| "Clients are available for most platforms. Click \"Learn more...\" above " -#| "for recommended clients and instructions on how to configure them." +#, python-format msgid "" "To connect to %(box_name)s's VPN, you need to download a profile and feed it " "to an OpenVPN client on your mobile or desktop machine. OpenVPN Clients are " @@ -5005,16 +5004,14 @@ msgid "" msgstr "" "Për t’u lidhur me VPN-në e %(box_name)s-it, duhet të shkarkoni një profil " "dhe t’ia jepni atë një klienti OpenVPN në celularin tuaj apo makinën tuaj " -"desktop. Ka klientë OpenVPN për shumicën e platformave. Për klientë të " +"desktop. Ka klientë OpenVPN për shumicën e platformave. Për klientë të " "rekomanduar dhe udhëzime se si të formësohen ata, klikoni “Mësoni më tepër…”." #: plinth/modules/openvpn/templates/openvpn.html:24 -#, fuzzy, python-format -#| msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." +#, python-format msgid "Profile is specific to each user of %(box_name)s. Keep it a secret." msgstr "" -"Profili është specifik për çdo përdorues të %(box_name)s. Mbajeni të " -"fshehtë." +"Profili është specifik për çdo përdorues të %(box_name)s. Mbajeni të fshehtë." #: plinth/modules/openvpn/templates/openvpn.html:34 msgid "Download my profile" @@ -5331,25 +5328,27 @@ msgstr "Fike Tani" #: plinth/modules/privacy/__init__.py:14 msgid "Manage system-wide privacy settings." -msgstr "" +msgstr "Administroni rregullime privatësie për krejt sistemin." #: plinth/modules/privacy/__init__.py:31 plinth/modules/privacy/__init__.py:63 -#, fuzzy -#| msgid "Privoxy" msgid "Privacy" -msgstr "Privoxy" +msgstr "Privatësi" #: plinth/modules/privacy/__init__.py:61 msgid "Please update privacy settings to match your preferences." msgstr "" +"Ju lutemi, përditësoni rregullime privatësie që të përputhen me parapëlqimet " +"tuaja." #: plinth/modules/privacy/__init__.py:66 msgid "Review privacy setting" -msgstr "" +msgstr "Shqyrtoni rregullim privatësie" #: plinth/modules/privacy/forms.py:15 msgid "Periodically submit a list of apps used (suggested)" msgstr "" +"Parashtroni në mënyrë periodike një listë aplikacionesh të përdorur (e " +"sugjeruar)" #: plinth/modules/privacy/forms.py:17 #, python-brace-format @@ -5361,6 +5360,13 @@ msgid "" "target=\"_blank\">popcon.debian.org. Submission happens over the Tor " "network for additional anonymity if Tor app is enabled." msgstr "" +"Ndihmoni zhvilluesit e Debian/{box_name} duke marrë pjesë te anketimi " +"Konkurs Popullariteti progamesh. Kur aktivizohet, te Debian do të " +"parashtrohet në mënyrë anonime çdo javë një listë e aplikacioneve të " +"përdorura në këtë sistem. Statistikat për të dhënat e grumbulluara janë " +"publike, te popcon." +"debian.org. Parashtrimi bëhet përmes rrjetit Tor, për anonimitet shtesë, " +"nëse është i aktivizuar aplikacioni Tor." #: plinth/modules/privoxy/__init__.py:23 msgid "" @@ -5619,6 +5625,8 @@ msgid "" "RSS-Bridge generates RSS and Atom feeds for websites that do not have one. " "Generated feeds can be consumed by any feed reader." msgstr "" +"RSS-Bridge prodhon prurje RSS dhe Atom për sajte që s’kanë të tillë. Prurjet " +"e prodhuara mund të përdoren nga çfarëdo lexuesi prurjesh." #: plinth/modules/rssbridge/__init__.py:23 #, python-brace-format @@ -6465,10 +6473,8 @@ msgid "Secure Shell (SSH) Server" msgstr "Shërbyes Shelli të Sigurt (SSH)" #: plinth/modules/ssh/__init__.py:61 -#, fuzzy -#| msgid "Secure Shell (SSH)" msgid "Remotely login using Secure Shell (SSH)" -msgstr "Shell i Sigurt (SSH)" +msgstr "Hyrje së largëti duke përdorur Shell të Sigurt (SSH)" #: plinth/modules/ssh/forms.py:13 msgid "Disable password authentication" @@ -6486,7 +6492,7 @@ msgstr "" #: plinth/modules/ssh/forms.py:21 msgid "Allow all users to login remotely" -msgstr "" +msgstr "Lejojuni krejt përdoruesve të hyjnë së largëti" #: plinth/modules/ssh/forms.py:22 msgid "" @@ -6494,6 +6500,9 @@ msgid "" "disabled, only users of groups root, admin and freedombox-ssh can login via " "SSH." msgstr "" +"Lejojuni krejt përdoruesve që janë një llogari të vlefshme të hyjnë së " +"largëti, përmes SSH-je. Kur çaktivizohet, hyrje përmes SSH-je mund të bëjnë " +"vetëm përdorues të grupit rrënjë, përgjegjës dhe freedombox-ssh." #: plinth/modules/ssh/templates/ssh.html:11 msgid "Server Fingerprints" @@ -6678,7 +6687,7 @@ msgstr "Nëndrejtori (opsionale)" #: plinth/modules/storage/forms.py:136 msgid "Share" -msgstr "" +msgstr "Ndajeni me të tjerë" #: plinth/modules/storage/forms.py:144 msgid "Other directory (specify below)" @@ -7016,6 +7025,9 @@ msgid "" "Compared to Deluge, Transmission is simpler and " "lightweight but is less customizable." msgstr "" +"Krahasuar me Deluge, Transmission është më i " +"thjeshtë dhe i peshës së lehtë, por mund të përshtatet në shkallë më të " +"vogël." #: plinth/modules/transmission/__init__.py:33 #, python-brace-format @@ -7032,6 +7044,8 @@ msgid "" "Samba shares can be set as the default download " "directory from the dropdown menu below." msgstr "" +"Pjesë Samba mund të caktohen si drejtori " +"parazgjedhje shkarkimesh që nga menuja hapmbyll më poshtë." #: plinth/modules/transmission/__init__.py:41 #, python-brace-format @@ -7555,13 +7569,7 @@ msgid "The following administrator accounts exist in the system." msgstr "Në sistem ekzistojnë llogaritë vijuese përgjegjësish." #: plinth/modules/users/templates/users_firstboot.html:50 -#, fuzzy, python-format -#| msgid "" -#| "Delete these accounts from command line and refresh the page to create an " -#| "account that is usable with %(box_name)s. On the command line run the " -#| "command 'echo \"{password}\" | /usr/share/plinth/actions/users remove-" -#| "user {username}'. If an account is already usable with %(box_name)s, skip " -#| "this step." +#, python-format msgid "" "Delete these accounts from command line and refresh the page to create an " "account that is usable with %(box_name)s. On the command line run the " @@ -7570,10 +7578,11 @@ msgid "" "already usable with %(box_name)s, skip this step." msgstr "" "Fshijini këto llogari që nga rreshti i urdhrave dhe rifreskoni faqen, që të " -"krijohet një llogari e cila të jetë e përdorushme me %(box_name)s. Te " -"rreshti i urdhrave jepni urdhrin 'echo \"{password}\" | /usr/share/plinth/" -"actions/users remove-user {username}'. Nëse ka tashmë një llogari të " -"përdorshme me %(box_name)s, anashkalojeni këtë hap." +"krijohet një llogari e cila të jetë e përdorshme me %(box_name)s. Te rreshti " +"i urdhrave jepni urdhrin “echo '{\"args\": [EMËR PËRDORUESI”, “FJALËKALIM”], " +"\"kwargs\": {}}' | sudo /usr/share/plinth/actions/actions users remove_user”" +". Nëse një llogari është tashmë e përdorshme me %(box_name)s, anashkaloje " +"këtë hap." #: plinth/modules/users/templates/users_list.html:11 #: plinth/modules/users/views.py:64 @@ -8285,6 +8294,9 @@ msgid "" "FreedomBox is a personal server designed for privacy and data ownership. It " "is free software that lets you install and manage server apps with ease." msgstr "" +"FreedomBox është një shërbyes personal i konceptuar për privatësi dhe " +"pronësi të dhënash. Është software i lirë, që ju lejon të instaloni dhe " +"administroni kollaj aplikacione shërbyesi." #: plinth/templates/base.html:110 msgid " Home" diff --git a/plinth/modules/ssh/__init__.py b/plinth/modules/ssh/__init__.py index 88c18df5e..03c277ee3 100644 --- a/plinth/modules/ssh/__init__.py +++ b/plinth/modules/ssh/__init__.py @@ -30,7 +30,7 @@ class SSHApp(app_module.App): app_id = 'ssh' - _version = 2 + _version = 3 def __init__(self): """Create components for the app.""" @@ -73,6 +73,8 @@ class SSHApp(app_module.App): privileged.setup() if not old_version: self.enable() + elif old_version == 2 and privileged.are_users_restricted(): + privileged.restrict_users(True) elif old_version == 1: privileged.restrict_users(True) diff --git a/plinth/modules/ssh/privileged.py b/plinth/modules/ssh/privileged.py index 5d7cf1ed1..eb34fd559 100644 --- a/plinth/modules/ssh/privileged.py +++ b/plinth/modules/ssh/privileged.py @@ -58,11 +58,11 @@ def setup(): @privileged def restrict_users(should_restrict: bool): - """Restrict SSH logins to groups root, admin and freedombox-ssh.""" + """Restrict SSH logins to groups root, sudo, admin and freedombox-ssh.""" if not should_restrict: config_file.unlink(missing_ok=True) else: - config_file.write_text('AllowGroups root admin freedombox-ssh\n', + config_file.write_text('AllowGroups root sudo admin freedombox-ssh\n', encoding='utf-8') action_utils.service_reload('sshd') diff --git a/plinth/modules/upgrades/privileged.py b/plinth/modules/upgrades/privileged.py index 1573b3006..7403f7dc8 100644 --- a/plinth/modules/upgrades/privileged.py +++ b/plinth/modules/upgrades/privileged.py @@ -12,7 +12,8 @@ from typing import List, Tuple, Union from plinth.action_utils import (apt_hold, apt_hold_flag, apt_hold_freedombox, apt_unhold_freedombox, debconf_set_selections, is_package_manager_busy, run_apt_command, - service_daemon_reload, service_restart) + service_daemon_reload, service_is_running, + service_restart, service_start, service_stop) from plinth.actions import privileged from plinth.modules.apache.components import check_url from plinth.modules.snapshot import is_apt_snapshots_enabled @@ -469,6 +470,15 @@ def _perform_dist_upgrade(): reenable_snapshots = _take_snapshot_and_disable() reenable_searx = _disable_searx() + # If quassel is running during dist upgrade, it may be restarted + # several times. This causes IRC users to rapidly leave/join + # channels. Stop quassel for the duration of the dist upgrade. + quassel_service = 'quasselcore' + quassel_was_running = service_is_running(quassel_service) + if quassel_was_running: + print('Stopping quassel service before dist upgrade...', flush=True) + service_stop(quassel_service) + # Hold freedombox package during entire dist upgrade. print('Holding freedombox package...', flush=True) with apt_hold_freedombox(): @@ -512,6 +522,11 @@ def _perform_dist_upgrade(): _update_searx(reenable_searx) + if quassel_was_running: + print('Re-starting quassel service after dist upgrade...', + flush=True) + service_start(quassel_service) + print('Running apt autoremove...', flush=True) run_apt_command(['autoremove'])