mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-10-18 07:31:55 +00:00
freedombox release 26.12 for unstable
[dgit distro=debian split] [dgit please-upload source=freedombox version=26.12] -----BEGIN PGP SIGNATURE----- iQJKBAABCgA0FiEEfWrbdQ+RCFWJSEvmd8DHXntlCAgFAmqoloQWHGp2YWxsZXJv eUBtYWlsYm94Lm9yZwAKCRB3wMdee2UICCTHEACYWHi2sQlV6ZLQmskRW0wV1l7O 96I3n8EZiaNvd1g5jKXKCG/dlRPh3IT/amFlOyH/XlSUfTHk2tr4qULQXkgONbry YdFnXYcl33cV+3EjzOcZTGPbbmPW9cxBFOdbIMGRFVs2Fj46chNjfPlYh172MUBU IqAcWWv5UaTtgxXMzgBOoG6Agg5NRZPKIL7YZVvquHHlM+ds7dvn6fHm71YCx53P GipIJzN0smhRppOMM1YNPGH2ZDglQId9FCdiLsoG9ZTz+mDKChpyH7hNOhlybHqT 3TWHy4XcBozmToVawDQTTl3xsKqfQOxdn4T1zpdsdAfy7yQj8lKueYReV1ovwP9O /g8hkEnRWX79oV5ijwdHqlUXzn3tFI9LhXZ+eIz0fCCTdDjuezLtjPP/tRPLeCY9 kMZIyXrJfrjlLxmtHQnc2F3KzKTbW0+C/0aUvtOy7YE/hgry0Jrlrv/m2pB4VLAK /sfFMbg87TYRvBDnlKxES7BtpsZKahfp9xxU4lAB0i1Cg7m3ocBXvw4h0zrOsLir IA62+KnJ/xaMQS2Rqxe/WLeUd4tBSuhdzzyoCcFo0/ihKUmX62DGcITOC50k5H+F BmlBh3FJMGhaMlj0ITpgsRkrICuTVNTtgugg0kiWbYswwTjVoOWE+1UU69h5CMIN v0SUo5+dyo81ZHHe3g== =jXOR -----END PGP SIGNATURE----- gpgsig -----BEGIN PGP SIGNATURE----- iQJKBAABCgA0FiEEfWrbdQ+RCFWJSEvmd8DHXntlCAgFAmque9QWHGp2YWxsZXJv eUBtYWlsYm94Lm9yZwAKCRB3wMdee2UICESCD/9LMIMdVKySWJ34fpGo1F/5Lsvq CyEBnv1GZ0Kuk2wUyDlSRFZtkGJFPxnZxRmjXSc1xtWN5f8XOltxINJu2lXeLx2e Z+FD36YHDCJKo0ijFsKiAyh7pTyxKbKJItRWSfu0rL8gwS4rjDE/GBvR+QykkmFz E3GJHdNyuppOLr/e8I69+M7+zVUm7ZJQCBkaV//vuvGO53g64FLRYUqFoWdyjYNl J00Eor+n6yk0AKV9h4wrgUsWnEovB1YKDQRi40riMSjTyQ8Cd+JVm+qtpsT/NtDD 1m/dUxgnXZdb9a0Q353PG/ymJAgQ5YqMBKA3UBYoEhIsj6yXMWmydFMKF9Cv4VmL DBKD9M03prdOU7x7bdcUITXr7E+8KvfS/h1LmEBU+G8NkD/R4IK7hGapjP38BY9I UCQhhezPEI/FoYzqZo4mQxkiGO7bbWh/2GhLLgKCSS9SnEgN9WAs1LnzVnFv983j i0vEYIeOxQLcsMRMaBp/nt8LjIMavXgi8Z1GQ7LOiIqCPYvkZ3elyYStI5SAbmFq uG2JwrdJKmzD+EbMjSxkPuYP5EzMh5AXQ7cYqTSttr/5JHnQEkJprc8ztTmaGEpZ QWZZYHcNxV3+M9ah5Co1JMh8T1fKUEcNlk1IEvAx+PaKpZOP7koVKGjAG9akAZp4 KQC+peg2P/LDQ2+68A== =ZjN5 -----END PGP SIGNATURE----- Merge tag 'debian/26.12' into debian/trixie-backports freedombox release 26.12 for unstable
This commit is contained in:
commit
32733532fa
36
HACKING.md
36
HACKING.md
@ -78,7 +78,7 @@ development environment inside a systemd-nspawn container.
|
||||
1. To run unit and functional tests for an app:
|
||||
|
||||
```bash
|
||||
host$ ./container run-tests --pytest-args -v --include-functional --splinter-headless plinth/modules/{app-name}
|
||||
host$ ./container run-tests --pytest-args -v --include-functional --splinter-headless freedombox/modules/{app-name}
|
||||
```
|
||||
|
||||
Drop the option `--splinter-headless` if you want to see the tests running
|
||||
@ -420,11 +420,12 @@ The easiest way to start translating is with your browser, by using
|
||||
Your changes will automatically get pushed to the code repository.
|
||||
|
||||
Alternatively, you can directly edit the `.po` file in your language directory
|
||||
`Plinth/plinth/locale/` and create a pull request (see [CONTRIBUTING.md](CONTRIBUTING.md)).
|
||||
In that case, consider introducing yourself on #freedombox IRC (irc.debian.org),
|
||||
because some work may have been done already on the [Debian translators
|
||||
discussion lists](https://www.debian.org/MailingLists/subscribe)
|
||||
or the Weblate localization platform.
|
||||
`freedombox/freedombox/locale/` and create a pull request (see
|
||||
[CONTRIBUTING.md](CONTRIBUTING.md)). In that case, consider introducing yourself
|
||||
on #freedombox IRC (irc.debian.org), because some work may have been done
|
||||
already on the [Debian translators discussion
|
||||
lists](https://www.debian.org/MailingLists/subscribe) or the Weblate
|
||||
localization platform.
|
||||
|
||||
For more information on translations: https://wiki.debian.org/FreedomBox/Translate
|
||||
|
||||
@ -449,16 +450,16 @@ options. See pytest documentation for further filter options.
|
||||
|
||||
```bash
|
||||
# Run tests in a directory
|
||||
guest$ py.test-3 plinth/tests
|
||||
guest$ py.test-3 freedombox/tests
|
||||
|
||||
# Run tests in a module
|
||||
guest$ py.test-3 plinth/tests/test_actions.py
|
||||
guest$ py.test-3 freedombox/tests/test_actions.py
|
||||
|
||||
# Run tests of one class in test module
|
||||
guest$ py.test-3 plinth/tests/test_actions.py::TestActions
|
||||
guest$ py.test-3 freedombox/tests/test_actions.py::TestActions
|
||||
|
||||
# Run one test in a class or module
|
||||
guest$ py.test-3 plinth/tests/test_actions.py::TestActions::test_is_package_manager_busy
|
||||
guest$ py.test-3 freedombox/tests/test_actions.py::TestActions::test_is_package_manager_busy
|
||||
```
|
||||
|
||||
Some tests are skipped by default:
|
||||
@ -489,13 +490,13 @@ guest$ sudo EXTENDED_TESTING=1 py.test-3
|
||||
To run the coverage tool in the container/VM:
|
||||
|
||||
```bash
|
||||
guest$ py.test-3 --cov=plinth
|
||||
guest$ py.test-3 --cov=freedombox
|
||||
```
|
||||
|
||||
To collect HTML report:
|
||||
|
||||
```bash
|
||||
guest$ py.test-3 --cov=plinth --cov-report=html
|
||||
guest$ py.test-3 --cov=freedombox --cov-report=html
|
||||
```
|
||||
|
||||
Invoking this command generates a HTML report to the `htmlcov` directory.
|
||||
@ -519,7 +520,7 @@ executed (red).
|
||||
Inside the container run
|
||||
|
||||
```bash
|
||||
guest$ cd /freedombox ; sudo plinth/tests/functional/install.sh
|
||||
guest$ cd /freedombox ; sudo freedombox/tests/functional/install.sh
|
||||
```
|
||||
|
||||
##### For running tests inside the VM
|
||||
@ -565,13 +566,14 @@ on the guest.
|
||||
|
||||
#### Setup FreedomBox Service for tests
|
||||
|
||||
Via Plinth, create a new user as follows:
|
||||
Via FreedomBox web interface, create a new user as follows:
|
||||
|
||||
* Username: tester
|
||||
* Password: testingtesting
|
||||
|
||||
This step is optional if a fresh install of Plinth is being tested. Functional
|
||||
tests will create the required user using FreedomBox's first boot process.
|
||||
This step is optional if a fresh install of FreedomBox is being tested.
|
||||
Functional tests will create the required user using FreedomBox's first boot
|
||||
process.
|
||||
|
||||
#### Running Functional Tests
|
||||
|
||||
@ -620,7 +622,7 @@ In the VM or container, run the following command:
|
||||
```
|
||||
guest$ cd /freedombox
|
||||
guest$ sudo make build install
|
||||
guest$ plinth/tests/functional/enable-all-apps
|
||||
guest$ freedombox/tests/functional/enable-all-apps
|
||||
```
|
||||
|
||||
[back to index](#hacking)
|
||||
|
||||
@ -30,7 +30,7 @@ FreedomBox [Manual](https://wiki.debian.org/FreedomBox/Manual/)'s
|
||||
2. Run FreedomBox Service (Plinth):
|
||||
|
||||
```
|
||||
$ sudo plinth
|
||||
$ sudo systemctl start plinth.service
|
||||
```
|
||||
|
||||
3. Access FreedomBox UI:
|
||||
|
||||
28
Makefile
28
Makefile
@ -58,14 +58,14 @@ FIND_ARGS := \
|
||||
|
||||
|
||||
ROOT_DATA_FILES := $(shell find data -type f $(FIND_ARGS))
|
||||
MODULE_DATA_FILES := $(shell find $(wildcard plinth/modules/*/data) -type f $(FIND_ARGS))
|
||||
MODULE_DATA_FILES := $(shell find $(wildcard freedombox/modules/*/data) -type f $(FIND_ARGS))
|
||||
|
||||
update-translations:
|
||||
$(DJANGO_ADMIN) makemessages --all --domain django --keep-pot \
|
||||
--verbosity=1 --ignore conftest.py --ignore doc --ignore build \
|
||||
--ignore htmlcov --ignore screenshots --ignore debian --ignore \
|
||||
actions --ignore preseed --ignore static --ignore data \
|
||||
--settings plinth.settings --pythonpath .
|
||||
--settings freedombox.settings --pythonpath .
|
||||
|
||||
configure:
|
||||
# Nothing to do
|
||||
@ -78,7 +78,7 @@ build:
|
||||
$(MAKE) -C doc -j 8
|
||||
|
||||
# Build .whl package
|
||||
rm -f dist/plinth-*.whl
|
||||
rm -f dist/freedombox-*.whl
|
||||
$(PYTHON) -m build --no-isolation --skip-dependency-check --wheel
|
||||
|
||||
install:
|
||||
@ -96,15 +96,15 @@ install:
|
||||
# Python package
|
||||
temp=$$(mktemp -d) && \
|
||||
lib_dir=$$($(PYTHON) -c 'import sysconfig; print(sysconfig.get_paths(scheme="deb_system")["purelib"])') && \
|
||||
$(PYTHON) -m pip install dist/plinth-*.whl --break-system-packages \
|
||||
$(PYTHON) -m pip install dist/freedombox-*.whl --break-system-packages \
|
||||
--no-deps --no-compile --no-warn-script-location \
|
||||
--ignore-installed --target=$${temp} && \
|
||||
$(INSTALL) -d $(DESTDIR)$${lib_dir} && \
|
||||
rm -rf $(DESTDIR)$${lib_dir}/plinth $(DESTDIR)$${lib_dir}/plinth*.dist-info && \
|
||||
mv $${temp}/plinth $${temp}/plinth*.dist-info $(DESTDIR)$${lib_dir} && \
|
||||
rm -f $(DESTDIR)$${lib_dir}/plinth*.dist-info/licenses/COPYING.md && \
|
||||
rm -f $(DESTDIR)$${lib_dir}/plinth*.dist-info/direct_url.json && \
|
||||
$(INSTALL) -D -t $(BIN_DIR) bin/plinth
|
||||
rm -rf $(DESTDIR)$${lib_dir}/freedombox $(DESTDIR)$${lib_dir}/freedombox*.dist-info && \
|
||||
mv $${temp}/freedombox $${temp}/freedombox*.dist-info $(DESTDIR)$${lib_dir} && \
|
||||
rm -f $(DESTDIR)$${lib_dir}/freedombox*.dist-info/licenses/COPYING.md && \
|
||||
rm -f $(DESTDIR)$${lib_dir}/freedombox*.dist-info/direct_url.json && \
|
||||
$(INSTALL) -D -t $(BIN_DIR) bin/freedombox
|
||||
$(INSTALL) -D -t $(LIB_DIR)/freedombox bin/freedombox-privileged
|
||||
$(INSTALL) -D -t $(BIN_DIR) bin/freedombox-cmd
|
||||
$(INSTALL) -D -t $(BIN_DIR) bin/freedombox-change-password
|
||||
@ -121,7 +121,7 @@ install:
|
||||
cp $(CP_ARGS) $${file} $${target} ; \
|
||||
done
|
||||
for file in $(MODULE_DATA_FILES) ; do \
|
||||
target=$$(dirname $(DESTDIR)$$(echo $${file} | sed -e 's|^plinth/modules/[^/]*/data||')) ; \
|
||||
target=$$(dirname $(DESTDIR)$$(echo $${file} | sed -e 's|^freedombox/modules/[^/]*/data||')) ; \
|
||||
$(INSTALL) --directory --mode=755 $${target} ; \
|
||||
cp $(CP_ARGS) $${file} $${target} ; \
|
||||
done
|
||||
@ -137,12 +137,12 @@ check-tests:
|
||||
|
||||
# Tests with coverage report
|
||||
check-tests-cov:
|
||||
$(PYTHON) -m pytest $(PYTEST_ARGS) --cov=plinth \
|
||||
$(PYTHON) -m pytest $(PYTEST_ARGS) --cov=freedombox \
|
||||
--cov-report=html:./htmlcov --cov-report=term
|
||||
|
||||
# Code quality checking using flake8
|
||||
check-code:
|
||||
$(PYTHON) -m flake8 plinth container
|
||||
$(PYTHON) -m flake8 freedombox container
|
||||
|
||||
# Static type checking using mypy
|
||||
check-type:
|
||||
@ -154,8 +154,8 @@ check-doc:
|
||||
|
||||
clean:
|
||||
make -C doc clean
|
||||
rm -rf Plinth.egg-info
|
||||
find plinth/locale -name *.mo -delete
|
||||
rm -rf Freedombox.egg-info
|
||||
find freedombox/locale -name *.mo -delete
|
||||
|
||||
define DEVELOP_SERVICE_CONF
|
||||
[Service]
|
||||
|
||||
5
Vagrantfile
vendored
5
Vagrantfile
vendored
@ -17,15 +17,12 @@ Vagrant.configure(2) do |config|
|
||||
config.vm.provision "shell", run: 'always', inline: <<-SHELL
|
||||
# Disable automatic upgrades
|
||||
echo -e 'APT::Periodic::Update-Package-Lists "0";\nAPT::Periodic::Unattended-Upgrade "0";' > //etc/apt/apt.conf.d/20auto-upgrades
|
||||
# Do not run system plinth
|
||||
systemctl stop plinth
|
||||
systemctl disable plinth
|
||||
SHELL
|
||||
config.vm.provision "shell", inline: <<-SHELL
|
||||
cd /freedombox/
|
||||
make provision-dev
|
||||
SHELL
|
||||
config.vm.provision "tests", run: "never", type: "shell", path: "plinth/tests/functional/install.sh"
|
||||
config.vm.provision "tests", run: "never", type: "shell", path: "freedombox/tests/functional/install.sh"
|
||||
config.vm.post_up_message = "FreedomBox virtual machine is ready
|
||||
for development. To get the IP address:
|
||||
$ vagrant ssh
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/python3
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import plinth.__main__
|
||||
import freedombox.__main__
|
||||
|
||||
plinth.__main__.main()
|
||||
freedombox.__main__.main()
|
||||
@ -11,14 +11,14 @@ import argparse
|
||||
import getpass
|
||||
import sys
|
||||
|
||||
import plinth.web_framework
|
||||
from plinth.modules.users import privileged
|
||||
import freedombox.web_framework
|
||||
from freedombox.modules.users import privileged
|
||||
|
||||
|
||||
def main():
|
||||
"""Ask for new password, setup Django and update a user's password."""
|
||||
try:
|
||||
plinth.web_framework.init()
|
||||
freedombox.web_framework.init()
|
||||
except Exception:
|
||||
_print('Error initializing Django.')
|
||||
return
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/python3
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import plinth.privileged_daemon
|
||||
import freedombox.privileged_daemon
|
||||
|
||||
plinth.privileged_daemon.client_main()
|
||||
freedombox.privileged_daemon.client_main()
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#!/usr/bin/python3
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import plinth.privileged_daemon
|
||||
import freedombox.privileged_daemon
|
||||
|
||||
plinth.privileged_daemon.main()
|
||||
freedombox.privileged_daemon.main()
|
||||
|
||||
@ -233,10 +233,10 @@ DEBIAN_FRONTEND=noninteractive apt-get -yq --with-new-pkgs upgrade
|
||||
# Install requirements for tests if not already installed as root
|
||||
if ! [[ -e /usr/local/bin/geckodriver ]]
|
||||
then
|
||||
/freedombox/plinth/tests/functional/install.sh
|
||||
/freedombox/freedombox/tests/functional/install.sh
|
||||
fi
|
||||
|
||||
# Run the plinth server if functional tests are requested
|
||||
# Wait for the server to start if functional tests are requested
|
||||
if [[ "{pytest_command}" =~ "--include-functional" ]]
|
||||
then
|
||||
make -C /freedombox wait-while-first-setup
|
||||
@ -1392,6 +1392,7 @@ class VM(Machine):
|
||||
|
||||
with tempfile.NamedTemporaryFile() as file_handle:
|
||||
file_handle.write(domain_xml.encode())
|
||||
file_handle.flush()
|
||||
logger.info('Running `virsh define %s`', file_handle.name)
|
||||
self._virsh(['define', file_handle.name],
|
||||
stdout=subprocess.DEVNULL)
|
||||
|
||||
@ -39,9 +39,9 @@
|
||||
</If>
|
||||
|
||||
##
|
||||
## Redirect traffic on home to /freedombox as part of turning the machine
|
||||
## into FreedomBox server. Plinth then acts as a portal to reach all
|
||||
## other services.
|
||||
## Redirect traffic on home to /freedombox as part of turning the machine into
|
||||
## FreedomBox server. FreedomBox then acts as a portal to reach all other
|
||||
## services.
|
||||
##
|
||||
<IfFile !/etc/apache2/conf-enabled/freedombox-apache-homepage.conf>
|
||||
RedirectMatch "^/$" "/freedombox"
|
||||
@ -58,7 +58,7 @@
|
||||
<Location /freedombox>
|
||||
ProxyPass http://127.0.0.1:8000/freedombox
|
||||
ProxyPreserveHost On
|
||||
## Send the scheme from user's request to enable Plinth to redirect
|
||||
## Send the scheme from user's request to enable FreedomBox to redirect
|
||||
## URLs, set cookies, set absolute URLs (if any) properly.
|
||||
RequestHeader set X-Forwarded-Proto 'https' env=HTTPS
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
[Unit]
|
||||
Description=FreedomBox Service (Plinth)
|
||||
Documentation=man:plinth(1)
|
||||
Documentation=man:freedombox(1)
|
||||
After=network.target
|
||||
StartLimitIntervalSec=0
|
||||
# Uploaded files in /var/tmp/ are shared with FreedomBox privileged service.
|
||||
@ -10,7 +10,7 @@ JoinsNamespaceOf=freedombox-privileged.service
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
ExecStart=/usr/bin/plinth
|
||||
ExecStart=/usr/bin/freedombox
|
||||
TimeoutSec=300s
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
|
||||
45
debian/changelog
vendored
45
debian/changelog
vendored
@ -1,3 +1,48 @@
|
||||
freedombox (26.12) unstable; urgency=medium
|
||||
|
||||
[ John Doe ]
|
||||
* Translated using Weblate (French)
|
||||
|
||||
[ Jiří Podhorecký ]
|
||||
* Translated using Weblate (Czech)
|
||||
|
||||
[ Bone NI ]
|
||||
* Added translation using Weblate (Lao)
|
||||
* Translated using Weblate (Lao)
|
||||
|
||||
[ Sunil Mohan Adapa ]
|
||||
* plinth/*: Rename plinth/ folder to freedombox/
|
||||
* *: Update imports statements from plinth to freedombox
|
||||
* *: Additional import path related changes
|
||||
* *: Update import path in modules-enabled configuration files
|
||||
* doc/dev: Update developer documentation with new import path
|
||||
* *: Update additional documentation/comments with new import path
|
||||
* d/copyright: Update copyright file
|
||||
* django: Changes for new import path
|
||||
* django: Rename DB tables from plinth_ to freedombox_
|
||||
* *: All other changes need for new import path
|
||||
* *: Miscellaneous changes to work with reduce the use of term 'plinth'
|
||||
* container: Fix failure with defining a new VM
|
||||
* errors: Rename PlinthError to FbxError
|
||||
* radicale: Redirect from .well-known URLs only temporarily
|
||||
* radicale: tests: Don't fail if Nextcloud is enabled
|
||||
* tags: tests: Fix functional tests broken by separate apps/add page
|
||||
* wireguard: Fix auto-adding client when no domains are configured
|
||||
* wireguard: Fix issues with newline in public key when adding client
|
||||
* wireguard: Improve reliability functional tests by waiting after ops
|
||||
* bin: Rename main binary from plinth to freedombox
|
||||
* nextcloud: test: Fix functional tests with version 26
|
||||
|
||||
[ James Valleroy ]
|
||||
* locale: Move lo to freedombox path
|
||||
* locale: Update translation strings
|
||||
* doc: Fetch latest manual
|
||||
|
||||
[ Daniel Nylander ]
|
||||
* Translated using Weblate (Swedish)
|
||||
|
||||
-- James Valleroy <jvalleroy@mailbox.org> Mon, 14 Sep 2026 20:30:46 -0400
|
||||
|
||||
freedombox (26.11.1~bpo13+1) trixie-backports; urgency=medium
|
||||
|
||||
* Rebuild for trixie-backports.
|
||||
|
||||
170
debian/copyright
vendored
170
debian/copyright
vendored
@ -5,8 +5,8 @@ Files: *
|
||||
Copyright: 2011-2026 FreedomBox Authors
|
||||
License: AGPL-3+
|
||||
|
||||
Files: plinth/modules/jsxc/static/icons/jsxc.png
|
||||
plinth/modules/jsxc/static/icons/jsxc.svg
|
||||
Files: freedombox/modules/jsxc/static/icons/jsxc.png
|
||||
freedombox/modules/jsxc/static/icons/jsxc.svg
|
||||
Copyright: 2011-2019 FreedomBox Authors
|
||||
License: AGPL-3+
|
||||
|
||||
@ -42,42 +42,42 @@ Copyright: 2011-2025 The Bootstrap Authors
|
||||
Comment: https://getbootstrap.com/docs/5.3/customize/color-modes/
|
||||
License: CC-BY-3.0
|
||||
|
||||
Files: plinth/modules/bepasty/static/icons/bepasty.svg
|
||||
Files: freedombox/modules/bepasty/static/icons/bepasty.svg
|
||||
Copyright: (c) 2014 by the Bepasty Team, see the AUTHORS file.
|
||||
Comment: https://github.com/bepasty/bepasty-server/blob/master/src/bepasty/static/app/bepasty.svg
|
||||
License: BSD-2-clause
|
||||
|
||||
Files: plinth/modules/cockpit/static/icons/cockpit.svg
|
||||
Files: freedombox/modules/cockpit/static/icons/cockpit.svg
|
||||
Copyright: Cockpit Authors (https://github.com/cockpit-project/cockpit/blob/master/AUTHORS)
|
||||
Comment: https://github.com/cockpit-project/cockpit/blob/master/src/branding/default/logo.svg
|
||||
License: LGPL-2.1+
|
||||
|
||||
Files: plinth/modules/coturn/static/icons/coturn.png
|
||||
plinth/modules/coturn/static/icons/coturn.svg
|
||||
Files: freedombox/modules/coturn/static/icons/coturn.png
|
||||
freedombox/modules/coturn/static/icons/coturn.svg
|
||||
Copyright: Kmg Design (https://thenounproject.com/kmgdesignid/)
|
||||
Comment: Video Call by Kmg Design from the Noun Project https://thenounproject.com/term/video-call/3256092/
|
||||
License: CC-BY-3.0-US
|
||||
|
||||
Files: plinth/modules/deluge/static/icons/deluge.png
|
||||
plinth/modules/deluge/static/icons/deluge.svg
|
||||
Files: freedombox/modules/deluge/static/icons/deluge.png
|
||||
freedombox/modules/deluge/static/icons/deluge.svg
|
||||
Copyright: 2007 Andrew Wedderburn
|
||||
Comment: https://commons.wikimedia.org/wiki/File:Deluge-Logo.svg
|
||||
License: GPL-2+
|
||||
|
||||
Files: plinth/modules/ejabberd/static/icons/ejabberd.png
|
||||
plinth/modules/ejabberd/static/icons/ejabberd.svg
|
||||
plinth/modules/email/static/icons/email.png
|
||||
plinth/modules/email/static/icons/email.svg
|
||||
plinth/modules/gnome/static/icons/gnome.png
|
||||
plinth/modules/gnome/static/icons/gnome.svg
|
||||
plinth/modules/matrixsynapse/static/icons/matrixsynapse.svg
|
||||
plinth/modules/privoxy/static/icons/privoxy.png
|
||||
plinth/modules/privoxy/static/icons/privoxy.svg
|
||||
plinth/modules/radicale/static/icons/radicale.svg
|
||||
plinth/modules/rssbridge/static/icons/rssbridge.png
|
||||
plinth/modules/rssbridge/static/icons/rssbridge.svg
|
||||
plinth/modules/zoph/static/icons/zoph.png
|
||||
plinth/modules/zoph/static/icons/zoph.svg
|
||||
Files: freedombox/modules/ejabberd/static/icons/ejabberd.png
|
||||
freedombox/modules/ejabberd/static/icons/ejabberd.svg
|
||||
freedombox/modules/email/static/icons/email.png
|
||||
freedombox/modules/email/static/icons/email.svg
|
||||
freedombox/modules/gnome/static/icons/gnome.png
|
||||
freedombox/modules/gnome/static/icons/gnome.svg
|
||||
freedombox/modules/matrixsynapse/static/icons/matrixsynapse.svg
|
||||
freedombox/modules/privoxy/static/icons/privoxy.png
|
||||
freedombox/modules/privoxy/static/icons/privoxy.svg
|
||||
freedombox/modules/radicale/static/icons/radicale.svg
|
||||
freedombox/modules/rssbridge/static/icons/rssbridge.png
|
||||
freedombox/modules/rssbridge/static/icons/rssbridge.svg
|
||||
freedombox/modules/zoph/static/icons/zoph.png
|
||||
freedombox/modules/zoph/static/icons/zoph.svg
|
||||
static/themes/default/img/application.svg
|
||||
static/themes/default/img/network-connection.svg
|
||||
static/themes/default/img/network-connection-vertical.svg
|
||||
@ -100,109 +100,109 @@ Copyright: 2020 Adwaita Icon Theme Authors, GNOME Project
|
||||
Comment: https://github.com/GNOME/adwaita-icon-theme/ http://www.gnome.org
|
||||
License: LGPL-3 or CC-BY-SA-3.0-US
|
||||
|
||||
Files: plinth/modules/featherwiki/static/icons/featherwiki.png
|
||||
plinth/modules/featherwiki/static/icons/featherwiki.svg
|
||||
Files: freedombox/modules/featherwiki/static/icons/featherwiki.png
|
||||
freedombox/modules/featherwiki/static/icons/featherwiki.svg
|
||||
Copyright: 2022 Robbie Antenesse <dev@alamantus.com>
|
||||
Comment: https://codeberg.org/Alamantus/FeatherWiki/src/branch/main/logo.svg
|
||||
License: AGPL-3+
|
||||
|
||||
Files: plinth/modules/gitweb/static/icons/gitweb.png
|
||||
plinth/modules/gitweb/static/icons/gitweb.svg
|
||||
Files: freedombox/modules/gitweb/static/icons/gitweb.png
|
||||
freedombox/modules/gitweb/static/icons/gitweb.svg
|
||||
Copyright: 2010 Git Authors
|
||||
Comment: https://github.com/git/git/blob/master/gitweb/static/git-logo.png
|
||||
License: GPL-2
|
||||
|
||||
Files: plinth/modules/homeassistant/static/icons/homeassistant.png
|
||||
plinth/modules/homeassistant/static/icons/homeassistant.svg
|
||||
Files: freedombox/modules/homeassistant/static/icons/homeassistant.png
|
||||
freedombox/modules/homeassistant/static/icons/homeassistant.svg
|
||||
Copyright: Home Assistant Core Developers
|
||||
Comment: https://github.com/home-assistant/core/blob/dev/tests/components/image_upload/logo.png
|
||||
License: Apache-2.0
|
||||
|
||||
Files: plinth/modules/ikiwiki/static/icons/ikiwiki.png
|
||||
plinth/modules/ikiwiki/static/icons/ikiwiki.svg
|
||||
Files: freedombox/modules/ikiwiki/static/icons/ikiwiki.png
|
||||
freedombox/modules/ikiwiki/static/icons/ikiwiki.svg
|
||||
Copyright: 2006 Recai Oktaş <roktas@debian.org>
|
||||
Comment: https://commons.wikimedia.org/wiki/File:Ikiwiki.svg
|
||||
License: GPL-2+
|
||||
|
||||
Files: plinth/modules/infinoted/static/icons/infinoted.png
|
||||
plinth/modules/infinoted/static/icons/infinoted.svg
|
||||
Files: freedombox/modules/infinoted/static/icons/infinoted.png
|
||||
freedombox/modules/infinoted/static/icons/infinoted.svg
|
||||
Copyright: 2008-2014 Armin Burgmeier <armin@arbur.net>
|
||||
License: ISC
|
||||
|
||||
Files: plinth/modules/janus/static/icons/janus.png
|
||||
plinth/modules/janus/static/icons/janus.svg
|
||||
plinth/modules/janus/static/janus-video-room.css
|
||||
plinth/modules/janus/static/janus-video-room.js
|
||||
plinth/modules/janus/templates/janus_video_room.html
|
||||
Files: freedombox/modules/janus/static/icons/janus.png
|
||||
freedombox/modules/janus/static/icons/janus.svg
|
||||
freedombox/modules/janus/static/janus-video-room.css
|
||||
freedombox/modules/janus/static/janus-video-room.js
|
||||
freedombox/modules/janus/templates/janus_video_room.html
|
||||
Copyright: 2014-2025 Meetecho
|
||||
License: GPL-3 with OpenSSL exception
|
||||
|
||||
Files: plinth/modules/kiwix/static/icons/kiwix.png
|
||||
plinth/modules/kiwix/static/icons/kiwix.svg
|
||||
Files: freedombox/modules/kiwix/static/icons/kiwix.png
|
||||
freedombox/modules/kiwix/static/icons/kiwix.svg
|
||||
Copyright: 2020 The other Kiwix guy
|
||||
Comment: https://commons.wikimedia.org/wiki/File:Kiwix_logo_v3.svg
|
||||
License: CC-BY-SA-4.0
|
||||
|
||||
Files: plinth/modules/matrixsynapse/static/icons/matrixsynapse.png
|
||||
Files: freedombox/modules/matrixsynapse/static/icons/matrixsynapse.png
|
||||
Copyright: 2017 Kishan Raval
|
||||
Comment: https://github.com/thekishanraval/Logos
|
||||
License: GPL-3+
|
||||
|
||||
Files: plinth/modules/mediawiki/static/icons/mediawiki.png
|
||||
plinth/modules/mediawiki/static/icons/mediawiki.svg
|
||||
Files: freedombox/modules/mediawiki/static/icons/mediawiki.png
|
||||
freedombox/modules/mediawiki/static/icons/mediawiki.svg
|
||||
Copyright: 2020 Serhio Magpie
|
||||
Comment: https://commons.wikimedia.org/wiki/File:MediaWiki-2020-icon.svg
|
||||
License: CC-BY-SA-4.0
|
||||
|
||||
Files: plinth/modules/minetest/static/icons/minetest.png
|
||||
Files: freedombox/modules/minetest/static/icons/minetest.png
|
||||
Copyright: 2011 erlehmann
|
||||
License: CC-BY-SA-3.0
|
||||
|
||||
Files: plinth/modules/minetest/static/icons/minetest.svg
|
||||
Files: freedombox/modules/minetest/static/icons/minetest.svg
|
||||
Copyright: 2015 Calinou, Nils Dagsson Moskopp
|
||||
Comment: https://github.com/luanti-org/luanti/blob/master/misc/luanti.svg
|
||||
License: CC-BY-SA-3.0
|
||||
|
||||
Files: plinth/modules/miniflux/static/icons/miniflux.png
|
||||
plinth/modules/miniflux/static/icons/miniflux.svg
|
||||
Files: freedombox/modules/miniflux/static/icons/miniflux.png
|
||||
freedombox/modules/miniflux/static/icons/miniflux.svg
|
||||
Copyright: 2018, 2019 Frédéric Guillot
|
||||
Comment: https://github.com/miniflux/logo
|
||||
License: CC-BY-SA-4.0
|
||||
|
||||
Files: plinth/modules/mumble/static/icons/mumble.png
|
||||
Files: freedombox/modules/mumble/static/icons/mumble.png
|
||||
Copyright: 2009 Martin Skilnand
|
||||
Comment: https://commons.wikimedia.org/wiki/File:Icons_mumble.svg
|
||||
License: BSD-3-clause
|
||||
|
||||
Files: plinth/modules/mumble/static/icons/mumble.svg
|
||||
Files: freedombox/modules/mumble/static/icons/mumble.svg
|
||||
Copyright: 2005-2019 The Mumble Developers
|
||||
Comment: https://github.com/mumble-voip/mumble/blob/master/icons/mumble.svg
|
||||
https://github.com/mumble-voip/mumble/blob/master/LICENSE
|
||||
License: BSD-3-clause
|
||||
|
||||
Files: plinth/modules/nextcloud/static/icons/nextcloud.png
|
||||
plinth/modules/nextcloud/static/icons/nextcloud.svg
|
||||
Files: freedombox/modules/nextcloud/static/icons/nextcloud.png
|
||||
freedombox/modules/nextcloud/static/icons/nextcloud.svg
|
||||
Copyright: 2016 Nextcloud GmbH.
|
||||
Comment: https://nextcloud.com/trademarks/
|
||||
License: AGPL-3+
|
||||
|
||||
Files: plinth/modules/openvpn/static/icons/openvpn.png
|
||||
Files: freedombox/modules/openvpn/static/icons/openvpn.png
|
||||
Copyright: 2017 Kishan Raval
|
||||
Comment: https://github.com/thekishanraval/Logos
|
||||
License: GPL-3+
|
||||
|
||||
Files: plinth/modules/openvpn/static/icons/openvpn.svg
|
||||
Files: freedombox/modules/openvpn/static/icons/openvpn.svg
|
||||
Copyright: OpenVPN Technologies, Inc.
|
||||
Comment: https://commons.wikimedia.org/wiki/File:Ovpntech_logo-s_REVISED.png
|
||||
License: CC-BY-SA-3.0
|
||||
|
||||
Files: plinth/modules/quassel/static/icons/quassel.png
|
||||
plinth/modules/quassel/static/icons/quassel.svg
|
||||
Files: freedombox/modules/quassel/static/icons/quassel.png
|
||||
freedombox/modules/quassel/static/icons/quassel.svg
|
||||
Copyright: 2005-2019 Quassel Project <devel@quassel-irc.org>
|
||||
Comment: https://github.com/quassel/quassel/blob/master/pics/quassel-64.svg
|
||||
License: GPL-2 or GPL-3
|
||||
|
||||
Files: plinth/modules/radicale/static/icons/radicale.png
|
||||
Files: freedombox/modules/radicale/static/icons/radicale.png
|
||||
Copyright: 2008, Nicolas Kandel
|
||||
2008, Pascal Halter
|
||||
2008-2017, Guillaume Ayoub <guillaume.ayoub@kozea.fr>
|
||||
@ -210,7 +210,7 @@ Copyright: 2008, Nicolas Kandel
|
||||
2017, Unrud <unrud@outlook.com>
|
||||
License: GPL-3+
|
||||
|
||||
Files: plinth/modules/roundcube/static/icons/roundcube.png
|
||||
Files: freedombox/modules/roundcube/static/icons/roundcube.png
|
||||
Copyright: 2000 Edmund Grimley Evans <edmundo@rano.org>
|
||||
2013 Thomas Yu - Sian, Liu
|
||||
Copyright (C) 2005-2017, The Roundcube Dev Team
|
||||
@ -218,21 +218,21 @@ Copyright: 2000 Edmund Grimley Evans <edmundo@rano.org>
|
||||
2005-2007, Jon Abernathy <jon@chuggnutt.com>
|
||||
License: GPL-3+
|
||||
|
||||
Files: plinth/modules/roundcube/static/icons/roundcube.svg
|
||||
Files: freedombox/modules/roundcube/static/icons/roundcube.svg
|
||||
Copyright: Thomas B. (https://github.com/thomascube)
|
||||
Aleksander Machniak (https://github.com/alecpl)
|
||||
Comment: https://raw.githubusercontent.com/roundcube/roundcubemail/master/skins/elastic/images/logo.svg
|
||||
License: CC-BY-SA-3.0
|
||||
|
||||
Files: plinth/modules/samba/static/icons/samba.png
|
||||
plinth/modules/samba/static/icons/samba.svg
|
||||
Files: freedombox/modules/samba/static/icons/samba.png
|
||||
freedombox/modules/samba/static/icons/samba.svg
|
||||
Copyright: None
|
||||
Comment: 2010 Samba Team
|
||||
https://commons.wikimedia.org/wiki/File:Samba_logo_2010.svg
|
||||
License: public-domain
|
||||
|
||||
Files: plinth/modules/searx/static/icons/searx.png
|
||||
plinth/modules/searx/static/icons/searx.svg
|
||||
Files: freedombox/modules/searx/static/icons/searx.png
|
||||
freedombox/modules/searx/static/icons/searx.svg
|
||||
Copyright:
|
||||
2013-2017 Adam Tauber <asciimoo@gmail.com>
|
||||
2016 Alexandre Flament <alex@al-f.net>
|
||||
@ -240,84 +240,84 @@ Copyright:
|
||||
2014 Thomas Pointhuber <thomas.pointhuber@gmx.at>
|
||||
License: AGPL-3+
|
||||
|
||||
Files: plinth/modules/shaarli/static/icons/shaarli.png
|
||||
plinth/modules/shaarli/static/icons/shaarli.svg
|
||||
Files: freedombox/modules/shaarli/static/icons/shaarli.png
|
||||
freedombox/modules/shaarli/static/icons/shaarli.svg
|
||||
Copyright: 2011-2015 Sébastien SAUVAGE <sebsauvage@sebsauvage.net>
|
||||
2011-2018 The Shaarli Community
|
||||
Comment: https://github.com/shaarli/Shaarli/blob/master/doc/md/images/doc-logo.svg
|
||||
https://github.com/shaarli/Shaarli/blob/master/assets/default/img/favicon.png
|
||||
License: Zlib
|
||||
|
||||
Files: plinth/modules/shadowsocks/static/icons/shadowsocks.png
|
||||
plinth/modules/shadowsocksserver/static/icons/shadowsocks.png
|
||||
Files: freedombox/modules/shadowsocks/static/icons/shadowsocks.png
|
||||
freedombox/modules/shadowsocksserver/static/icons/shadowsocks.png
|
||||
Copyright: 2014-2018 Symeon Huang (librehat) <hzwhuang@gmail.com>
|
||||
Comment: https://commons.wikimedia.org/wiki/File:Shadowsocks_logo.png
|
||||
License: LGPL-3+
|
||||
|
||||
Files: plinth/modules/shadowsocks/static/icons/shadowsocks.svg
|
||||
plinth/modules/shadowsocksserver/static/icons/shadowsocks.svg
|
||||
Files: freedombox/modules/shadowsocks/static/icons/shadowsocks.svg
|
||||
freedombox/modules/shadowsocksserver/static/icons/shadowsocks.svg
|
||||
Copyright: Clowwindy
|
||||
Comment: https://commons.wikimedia.org/wiki/File:Shadowsocks-Logo.svg
|
||||
License: Apache-2.0
|
||||
|
||||
Files: plinth/modules/sharing/static/icons/sharing.png
|
||||
plinth/modules/sharing/static/icons/sharing.svg
|
||||
Files: freedombox/modules/sharing/static/icons/sharing.png
|
||||
freedombox/modules/sharing/static/icons/sharing.svg
|
||||
Copyright: Interface (https://www.shareicon.net/author/interface)
|
||||
Comment: https://www.shareicon.net/universal-interface-interface-sharing-share-697502
|
||||
License: CC-BY-3.0
|
||||
|
||||
Files: plinth/modules/sogo/static/icons/sogo.png
|
||||
plinth/modules/sogo/static/icons/sogo.svg
|
||||
Files: freedombox/modules/sogo/static/icons/sogo.png
|
||||
freedombox/modules/sogo/static/icons/sogo.svg
|
||||
Copyright: 2024 Inverse inc./Alinto
|
||||
Comment: https://github.com/Alinto/sogo/blob/master/COPYING.GPL
|
||||
License: GPL-2
|
||||
|
||||
Files: plinth/modules/syncthing/static/icons/syncthing.png
|
||||
Files: freedombox/modules/syncthing/static/icons/syncthing.png
|
||||
Copyright: 2015 Jack Palevich <jack.palevich@gmail.com>
|
||||
2014 The Syncthing Authors
|
||||
2015 Audrius Butkevicius and Contributors
|
||||
License: MPL-2.0
|
||||
|
||||
Files: plinth/modules/syncthing/static/icons/syncthing.svg
|
||||
Files: freedombox/modules/syncthing/static/icons/syncthing.svg
|
||||
Copyright: Jakob Borg and the Syncthing project
|
||||
Comment: https://commons.wikimedia.org/wiki/File:SyncthingLogoHorizontal.svg
|
||||
License: MPL-2.0
|
||||
|
||||
Files: plinth/modules/tiddlywiki/static/icons/tiddlywiki.svg
|
||||
plinth/modules/tiddlywiki/static/icons/tiddlywiki.png
|
||||
Files: freedombox/modules/tiddlywiki/static/icons/tiddlywiki.svg
|
||||
freedombox/modules/tiddlywiki/static/icons/tiddlywiki.png
|
||||
Copyright: 2004-2007 Jeremy Ruston <jeremy@jermolene.com>
|
||||
2007-2016 UnaMesa Association
|
||||
Comment: https://github.com/Jermolene/TiddlyWiki5/blob/086506012d98e9db34c7d96dc27aea249a9bdbc8/editions/introduction/tiddlers/images/Motovun%20Jack.svg
|
||||
License: BSD-3-clause
|
||||
|
||||
Files: plinth/modules/tor/static/icons/tor.png
|
||||
plinth/modules/tor/static/icons/tor.svg
|
||||
Files: freedombox/modules/tor/static/icons/tor.png
|
||||
freedombox/modules/tor/static/icons/tor.svg
|
||||
Copyright: The Tor Project, Inc.
|
||||
Comment: https://commons.wikimedia.org/wiki/File:Tor_logo1.png
|
||||
https://commons.wikimedia.org/wiki/File:Tor-logo-2011-flat.svg
|
||||
License: CC-BY-3.0-US
|
||||
|
||||
Files: plinth/modules/transmission/static/icons/transmission.png
|
||||
plinth/modules/transmission/static/icons/transmission.svg
|
||||
Files: freedombox/modules/transmission/static/icons/transmission.png
|
||||
freedombox/modules/transmission/static/icons/transmission.svg
|
||||
Copyright: Transmission Authors
|
||||
Comment: https://github.com/transmission/transmission/blob/master/gtk/icons/hicolor_apps_scalable_transmission.svg
|
||||
License: GPL-3
|
||||
|
||||
Files: plinth/modules/upgrades/data/usr/share/augeas/lenses/aptsources.aug
|
||||
plinth/modules/upgrades/data/usr/share/augeas/lenses/tests/test_aptsources.aug
|
||||
Files: freedombox/modules/upgrades/data/usr/share/augeas/lenses/aptsources.aug
|
||||
freedombox/modules/upgrades/data/usr/share/augeas/lenses/tests/test_aptsources.aug
|
||||
Copyright: 2007-2025 David Lutterkort
|
||||
Comment: https://github.com/hercules-team/augeas/blob/master/lenses/aptsources.aug
|
||||
https://github.com/hercules-team/augeas/blob/master/lenses/tests/test_aptsources.aug
|
||||
License: LGPL-2.1+
|
||||
|
||||
Files: plinth/modules/wordpress/static/icons/wordpress.png
|
||||
plinth/modules/wordpress/static/icons/wordpress.svg
|
||||
Files: freedombox/modules/wordpress/static/icons/wordpress.png
|
||||
freedombox/modules/wordpress/static/icons/wordpress.svg
|
||||
Copyright: 2011-2021 WordPress Contributors
|
||||
Comment: https://github.com/WordPress/wordpress-develop/blob/master/src/wp-admin/images/wordpress-logo.svg
|
||||
License: GPL-2+
|
||||
|
||||
Files: plinth/modules/wireguard/static/icons/wireguard.png
|
||||
plinth/modules/wireguard/static/icons/wireguard.svg
|
||||
Files: freedombox/modules/wireguard/static/icons/wireguard.png
|
||||
freedombox/modules/wireguard/static/icons/wireguard.svg
|
||||
Copyright: 2019 WireGuard LLC
|
||||
Comment: https://git.zx2c4.com/wireguard-windows/plain/ui/icon/wireguard.svg
|
||||
License: Expat
|
||||
|
||||
2
debian/freedombox.links
vendored
Normal file
2
debian/freedombox.links
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
usr/bin/freedombox usr/bin/plinth
|
||||
usr/share/man/man1/freedombox.1.gz usr/share/man/man1/plinth.1.gz
|
||||
21
debian/freedombox.lintian-overrides
vendored
21
debian/freedombox.lintian-overrides
vendored
@ -1,20 +1,19 @@
|
||||
# Apache configuration for the Plinth itself is shipped with proper
|
||||
# name plinth.conf. However, due to the nature of the package, Plinth
|
||||
# takes the responsibility of configuring various other services
|
||||
# behind Apache. The upstream hence ships various Apache
|
||||
# configuration files which are enabled and disabled when user
|
||||
# requests.
|
||||
# Apache configuration for the FreedomBox service itself is shipped with proper
|
||||
# name freedombox.conf. However, due to the nature of the package, FreedomBox
|
||||
# takes the responsibility of configuring various other services behind Apache.
|
||||
# The upstream hence ships various Apache configuration files which are enabled
|
||||
# and disabled when user requests.
|
||||
freedombox binary: non-standard-apache2-configuration-name *
|
||||
|
||||
# Plinth depends on Apache2 and cannot work with just any web server. Instead of
|
||||
# being a simple web application it is an administration console that configures
|
||||
# web servers. At some point we would like to work with other web servers but
|
||||
# that requires significant effort.
|
||||
# FreedomBox depends on Apache2 and cannot work with just any web server.
|
||||
# Instead of being a simple web application it is an administration console that
|
||||
# configures web servers. At some point we would like to work with other web
|
||||
# servers but that requires significant effort.
|
||||
freedombox binary: web-application-works-only-with-apache
|
||||
|
||||
# Not documentation
|
||||
freedombox: package-contains-documentation-outside-usr-share-doc [usr/share/plinth/static/jslicense.html]
|
||||
freedombox: package-contains-documentation-outside-usr-share-doc [usr/lib/python3/dist-packages/plinth-*.dist-info/top_level.txt]
|
||||
freedombox: package-contains-documentation-outside-usr-share-doc [usr/lib/python3/dist-packages/freedombox-*.dist-info/top_level.txt]
|
||||
|
||||
# This executable is meant to executed from systemd service file and is not
|
||||
# meant for user. However, don't install to /usr/libexec and follow systemd
|
||||
|
||||
2
debian/freedombox.manpages
vendored
2
debian/freedombox.manpages
vendored
@ -1,2 +1,2 @@
|
||||
./doc/freedombox-cmd.1
|
||||
./doc/plinth.1
|
||||
./doc/freedombox.1
|
||||
|
||||
4
debian/tests/control
vendored
4
debian/tests/control
vendored
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Smoke test to check various basics on an installed version of Plinth. This
|
||||
# Smoke test to check various basics on an installed version of FreedomBox. This
|
||||
# checks that the following aspects are working okay:
|
||||
# - Python runtime
|
||||
# - Python library dependencies
|
||||
@ -13,7 +13,7 @@ Restrictions: needs-root, breaks-testbed
|
||||
#
|
||||
# Run unit and integration tests on installed files.
|
||||
#
|
||||
Test-Command: PYTHONPATH='/usr/lib/python3/dist-packages/' py.test-3 -p no:cacheprovider --cov=plinth --cov-report=html:debci/htmlcov --cov-report=term
|
||||
Test-Command: PYTHONPATH='/usr/lib/python3/dist-packages/' py.test-3 -p no:cacheprovider --cov=freedombox --cov-report=html:debci/htmlcov --cov-report=term
|
||||
Depends: e2fsprogs, git, python3-pytest, python3-pytest-cov, python3-pytest-django, @
|
||||
Restrictions: breaks-testbed
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ SCRIPTS_DIR=scripts
|
||||
|
||||
manual-pdfs=$(foreach lang,$(MANUAL_LANGUAGES),manual/$(lang)/freedombox-manual.pdf)
|
||||
manual-xmls=$(patsubst %.pdf,%.xml,$(manual-pdfs))
|
||||
OUTPUTS=$(manual-pdfs) plinth.1 freedombox-cmd.1
|
||||
OUTPUTS=$(manual-pdfs) freedombox.1 freedombox-cmd.1
|
||||
|
||||
INSTALL_OPTS=-D --mode=644
|
||||
|
||||
@ -33,7 +33,7 @@ endif
|
||||
all: $(OUTPUTS) manual-pages
|
||||
|
||||
install: all
|
||||
install $(INSTALL_OPTS) -t $(MAN_INSTALL_DIR)/man1 plinth.1
|
||||
install $(INSTALL_OPTS) -t $(MAN_INSTALL_DIR)/man1 freedombox.1
|
||||
for file in $(manual-pages-part-html) $(manual-pdfs); do \
|
||||
install $(INSTALL_OPTS) -t $(INSTALL_DIR)/$$(dirname $${file}) \
|
||||
$${file} ; \
|
||||
|
||||
@ -20,7 +20,7 @@ from datetime import datetime
|
||||
import django
|
||||
|
||||
sys.path.insert(0, os.path.abspath('../../'))
|
||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'plinth.settings'
|
||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'freedombox.settings'
|
||||
django.setup()
|
||||
|
||||
# -- Project information -----------------------------------------------------
|
||||
|
||||
@ -6,5 +6,5 @@ Action Utils
|
||||
Several utilities to help with the implementation of actions and diagnostic
|
||||
tests are implemented in this module.
|
||||
|
||||
.. automodule:: plinth.action_utils
|
||||
.. automodule:: freedombox.action_utils
|
||||
:members:
|
||||
|
||||
@ -1,16 +1,14 @@
|
||||
.. SPDX-License-Identifier: CC-BY-SA-4.0
|
||||
|
||||
Actions
|
||||
^^^^^^^
|
||||
Privileged Actions
|
||||
^^^^^^^^^^^^^^^^^^
|
||||
|
||||
FreedomBox's web front does not directly change any aspect of the underlying
|
||||
operating system. Instead, it calls upon **actions**, as shell commands. Actions
|
||||
live in ``/usr/share/plinth/actions`` directory. They require no interaction
|
||||
beyond passing command line arguments or taking sensitive arguments via stdin.
|
||||
They change the operation of the services and apps of the FreedomBox and nothing
|
||||
else. These actions are also directly usable by a skilled administrator.
|
||||
FreedomBox Service performs most changes to the underlying operating system
|
||||
using remote calls into the **freedombox-privileged** daemon or other daemons
|
||||
such as NetworkManager and UDisks.
|
||||
|
||||
The following documentation for the ``actions`` module.
|
||||
The following documentation for the ``actions`` module which contains function
|
||||
decorators to mark a method to run with privileged permissions.
|
||||
|
||||
.. automodule:: plinth.actions
|
||||
.. automodule:: freedombox.actions
|
||||
:members: privileged
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
App
|
||||
---
|
||||
|
||||
.. autoclass:: plinth.app.App
|
||||
.. autoclass:: freedombox.app.App
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
Backups
|
||||
^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.modules.backups.components.BackupRestore
|
||||
.. autoclass:: freedombox.modules.backups.components.BackupRestore
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
Configuration
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.config.DropinConfigs
|
||||
.. autoclass:: freedombox.config.DropinConfigs
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
Container
|
||||
^^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.container.Container
|
||||
.. autoclass:: freedombox.container.Container
|
||||
:members:
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
Coturn
|
||||
^^^^^^
|
||||
|
||||
.. autoclass:: plinth.modules.coturn.components.TurnConsumer
|
||||
.. autoclass:: freedombox.modules.coturn.components.TurnConsumer
|
||||
:members:
|
||||
|
||||
.. autoclass:: plinth.modules.coturn.components.TurnConfiguration
|
||||
.. autoclass:: freedombox.modules.coturn.components.TurnConfiguration
|
||||
:members:
|
||||
|
||||
@ -3,11 +3,11 @@
|
||||
Daemon
|
||||
^^^^^^
|
||||
|
||||
.. autoclass:: plinth.daemon.Daemon
|
||||
.. autoclass:: freedombox.daemon.Daemon
|
||||
:members:
|
||||
|
||||
.. autoclass:: plinth.daemon.RelatedDaemon
|
||||
.. autoclass:: freedombox.daemon.RelatedDaemon
|
||||
:members:
|
||||
|
||||
.. autoclass:: plinth.daemon.SharedDaemon
|
||||
.. autoclass:: freedombox.daemon.SharedDaemon
|
||||
:members:
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
Domain Name
|
||||
^^^^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.modules.names.components.DomainName
|
||||
.. autoclass:: freedombox.modules.names.components.DomainName
|
||||
:members:
|
||||
|
||||
.. autoclass:: plinth.modules.names.components.DomainType
|
||||
.. autoclass:: freedombox.modules.names.components.DomainType
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
EnableState
|
||||
^^^^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.app.EnableState
|
||||
.. autoclass:: freedombox.app.EnableState
|
||||
:members:
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
Firewall
|
||||
^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.modules.firewall.components.Firewall
|
||||
.. autoclass:: freedombox.modules.firewall.components.Firewall
|
||||
:members:
|
||||
|
||||
.. autoclass:: plinth.modules.firewall.components.FirewallLocalProtection
|
||||
.. autoclass:: freedombox.modules.firewall.components.FirewallLocalProtection
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
Frontpage
|
||||
^^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.frontpage.Shortcut
|
||||
.. autoclass:: freedombox.frontpage.Shortcut
|
||||
:members:
|
||||
|
||||
@ -27,20 +27,20 @@ Components
|
||||
Base Classes
|
||||
^^^^^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.app.Component
|
||||
.. autoclass:: freedombox.app.Component
|
||||
:members:
|
||||
|
||||
.. autoclass:: plinth.app.LeaderComponent
|
||||
.. autoclass:: freedombox.app.LeaderComponent
|
||||
:members:
|
||||
|
||||
.. autoclass:: plinth.app.FollowerComponent
|
||||
.. autoclass:: freedombox.app.FollowerComponent
|
||||
:members:
|
||||
|
||||
Other Classes
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.diagnostic_check.DiagnosticCheck
|
||||
.. autoclass:: freedombox.diagnostic_check.DiagnosticCheck
|
||||
:members:
|
||||
|
||||
.. autoclass:: plinth.diagnostic_check.Result
|
||||
.. autoclass:: freedombox.diagnostic_check.Result
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
Info
|
||||
^^^^
|
||||
|
||||
.. autoclass:: plinth.app.Info
|
||||
.. autoclass:: freedombox.app.Info
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
Let's Encrypt
|
||||
^^^^^^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.modules.letsencrypt.components.LetsEncrypt
|
||||
.. autoclass:: freedombox.modules.letsencrypt.components.LetsEncrypt
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
Menu
|
||||
^^^^
|
||||
|
||||
.. autoclass:: plinth.menu.Menu
|
||||
.. autoclass:: freedombox.menu.Menu
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
Packages
|
||||
^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.package.Packages
|
||||
.. autoclass:: freedombox.package.Packages
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
StaticFiles
|
||||
^^^^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.web_server.StaticFiles
|
||||
.. autoclass:: freedombox.web_server.StaticFiles
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
Users
|
||||
^^^^^
|
||||
|
||||
.. autoclass:: plinth.modules.users.components.UsersAndGroups
|
||||
.. autoclass:: freedombox.modules.users.components.UsersAndGroups
|
||||
:members:
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
Webserver
|
||||
^^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.modules.apache.components.Webserver
|
||||
.. autoclass:: freedombox.modules.apache.components.Webserver
|
||||
:members:
|
||||
|
||||
.. autoclass:: plinth.modules.apache.components.WebserverRoot
|
||||
.. autoclass:: freedombox.modules.apache.components.WebserverRoot
|
||||
:members:
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
Forms
|
||||
-----
|
||||
|
||||
.. autoclass:: plinth.forms.DomainSelectionForm
|
||||
.. autoclass:: freedombox.forms.DomainSelectionForm
|
||||
:members:
|
||||
|
||||
.. autoclass:: plinth.forms.CheckboxSelectMultipleWithReadOnly
|
||||
.. autoclass:: freedombox.forms.CheckboxSelectMultipleWithReadOnly
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
Notification
|
||||
^^^^^^^^^^^^
|
||||
|
||||
.. autoclass:: plinth.notification.Notification
|
||||
.. autoclass:: freedombox.notification.Notification
|
||||
:members:
|
||||
|
||||
@ -3,5 +3,5 @@
|
||||
Views
|
||||
-----
|
||||
|
||||
.. autoclass:: plinth.views.AppView
|
||||
.. autoclass:: freedombox.views.AppView
|
||||
:members:
|
||||
|
||||
@ -6,56 +6,56 @@ Full Code
|
||||
Transmission app is already included in FreedomBox. Here is the full source for
|
||||
the module for reference.
|
||||
|
||||
plinth/modules/transmission/__init__.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
freedombox/modules/transmission/__init__.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../plinth/modules/transmission/__init__.py
|
||||
.. literalinclude:: ../../../freedombox/modules/transmission/__init__.py
|
||||
:language: python3
|
||||
|
||||
plinth/modules/transmission/forms.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
freedombox/modules/transmission/forms.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../plinth/modules/transmission/forms.py
|
||||
.. literalinclude:: ../../../freedombox/modules/transmission/forms.py
|
||||
:language: python3
|
||||
|
||||
plinth/modules/transmission/manifest.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
freedombox/modules/transmission/manifest.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../plinth/modules/transmission/manifest.py
|
||||
.. literalinclude:: ../../../freedombox/modules/transmission/manifest.py
|
||||
:language: python3
|
||||
|
||||
plinth/modules/transmission/privileged.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../plinth/modules/transmission/privileged.py
|
||||
:language: python3
|
||||
|
||||
plinth/modules/transmission/urls.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../plinth/modules/transmission/urls.py
|
||||
:language: python3
|
||||
|
||||
plinth/modules/transmission/views.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../plinth/modules/transmission/views.py
|
||||
:language: python3
|
||||
|
||||
plinth/modules/transmission/data/usr/share/freedombox/modules-enabled/transmission
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../plinth/modules/transmission/data/usr/share/freedombox/modules-enabled/transmission
|
||||
:language: text
|
||||
|
||||
plinth/modules/transmission/data/usr/share/freedombox/etc/apache2/conf-available/transmission-plinth.conf
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../plinth/modules/transmission/data/usr/share/freedombox/etc/apache2/conf-available/transmission-plinth.conf
|
||||
:language: apache
|
||||
|
||||
plinth/modules/transmission/tests/__init__.py
|
||||
freedombox/modules/transmission/privileged.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../plinth/modules/transmission/tests/__init__.py
|
||||
.. literalinclude:: ../../../freedombox/modules/transmission/privileged.py
|
||||
:language: python3
|
||||
|
||||
freedombox/modules/transmission/urls.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../freedombox/modules/transmission/urls.py
|
||||
:language: python3
|
||||
|
||||
freedombox/modules/transmission/views.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../freedombox/modules/transmission/views.py
|
||||
:language: python3
|
||||
|
||||
freedombox/modules/transmission/data/usr/share/freedombox/modules-enabled/transmission
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../freedombox/modules/transmission/data/usr/share/freedombox/modules-enabled/transmission
|
||||
:language: text
|
||||
|
||||
freedombox/modules/transmission/data/usr/share/freedombox/etc/apache2/conf-available/transmission-plinth.conf
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../freedombox/modules/transmission/data/usr/share/freedombox/etc/apache2/conf-available/transmission-plinth.conf
|
||||
:language: apache
|
||||
|
||||
freedombox/modules/transmission/tests/__init__.py
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. literalinclude:: ../../../freedombox/modules/transmission/tests/__init__.py
|
||||
:language: python3
|
||||
|
||||
@ -3,11 +3,11 @@
|
||||
Part 4: Components
|
||||
------------------
|
||||
|
||||
Each :class:`~plinth.app.App` contains various :class:`~plinth.app.Component`
|
||||
components that each provide one small functionality needed by the app. Each of
|
||||
these components are instantiated and added to the app as children. The
|
||||
:class:`~plinth.menu.Menu` object added in the previous step is one such
|
||||
component.
|
||||
Each :class:`~freedombox.app.App` contains various
|
||||
:class:`~freedombox.app.Component` components that each provide one small
|
||||
functionality needed by the app. Each of these components are instantiated and
|
||||
added to the app as children. The :class:`~freedombox.menu.Menu` object added in
|
||||
the previous step is one such component.
|
||||
|
||||
Providing basic information about the app
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
@ -20,7 +20,7 @@ function normally.
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from plinth import app as app_module
|
||||
from freedombox import app as app_module
|
||||
|
||||
from . import manifest
|
||||
|
||||
@ -44,7 +44,7 @@ needs to be called again. name, icon_filename, description, manual_page,
|
||||
clients, and tags provide information that is shown on the app's main page. The
|
||||
donation_url encourages our users to contribute to upstream projects in order
|
||||
ensure their long term sustainability. More information about the parameters is
|
||||
available in :class:`~plinth.app.Info` class documentation.
|
||||
available in :class:`~freedombox.app.Info` class documentation.
|
||||
|
||||
The description of app should provide basic information on what the app is about
|
||||
and how to use it. It is impractical, however, to explain everything about the
|
||||
@ -82,13 +82,13 @@ running in the system to work. When the app is enabled, the daemon should be
|
||||
enabled. When the app is disabled, the daemon should be disabled. We should also
|
||||
show the status of whether the daemon is running in the app's view. All of these
|
||||
concerns are automatically handled by the framework if a
|
||||
:class:`~plinth.daemon.Daemon` component is added to the app. Let us do that in
|
||||
our app's class.
|
||||
:class:`~freedombox.daemon.Daemon` component is added to the app. Let us do that
|
||||
in our app's class.
|
||||
|
||||
.. code-block:: python3
|
||||
:caption: ``__init__.py``
|
||||
|
||||
from plinth.daemon import Daemon
|
||||
from freedombox.daemon import Daemon
|
||||
|
||||
class TransmissionApp(app_module.App):
|
||||
...
|
||||
@ -101,8 +101,8 @@ our app's class.
|
||||
self.add(daemon)
|
||||
|
||||
|
||||
The first argument to instantiate the :class:`~plinth.daemon.Daemon` class is a
|
||||
unique ID. The second is the name of the `systemd
|
||||
The first argument to instantiate the :class:`~freedombox.daemon.Daemon` class
|
||||
is a unique ID. The second is the name of the `systemd
|
||||
<https://www.freedesktop.org/wiki/Software/systemd/>`_ unit file which manages
|
||||
the daemon. The final argument is the list of ports that this daemon listens on.
|
||||
This information is used to check if the daemon is listening on the expected
|
||||
@ -113,14 +113,14 @@ Package management
|
||||
|
||||
Transmission server is installed through a set of packages fetched from Debian
|
||||
package repositories. The packages required for this are passed on to a
|
||||
:class:`~plinth.package.Packages` component which takes care of installing,
|
||||
:class:`~freedombox.package.Packages` component which takes care of installing,
|
||||
upgrading and uninstalling the Debian packages. An app might require one or more
|
||||
Debian packages to be installed.
|
||||
|
||||
.. code-block:: python3
|
||||
:caption: ``__init__.py``
|
||||
|
||||
from plinth.package import Packages
|
||||
from freedombox.package import Packages
|
||||
|
||||
|
||||
class TransmissionApp(app_module.App):
|
||||
@ -146,13 +146,13 @@ write a configuration snippet for Apache, the default web server on FreedomBox.
|
||||
This configuration snippet needs to be activated when our app is enabled. The
|
||||
configuration snippet needs to be deactivated when our app is disabled. All of
|
||||
these concerns are automatically handled by the framework if a
|
||||
:class:`~plinth.modules.apache.components.Webserver` component is added to the
|
||||
app. Let us do that in our app's class.
|
||||
:class:`~freedombox.modules.apache.components.Webserver` component is added to
|
||||
the app. Let us do that in our app's class.
|
||||
|
||||
.. code-block:: python3
|
||||
:caption: ``__init__.py``
|
||||
|
||||
from plinth.modules.apache.components import Webserver
|
||||
from freedombox.modules.apache.components import Webserver
|
||||
|
||||
class TransmissionApp(app_module.App):
|
||||
...
|
||||
@ -165,13 +165,13 @@ app. Let us do that in our app's class.
|
||||
self.add(webserver)
|
||||
|
||||
The first argument to instantiate the
|
||||
:class:`~plinth.modules.apache.components.Webserver` class is a unique ID. The
|
||||
second is the name of the Apache2 web server configuration snippet that contains
|
||||
the directives to proxy Transmission web interface via Apache2. We then need to
|
||||
create the configuration file itself in ``transmission-plinth.conf``. The
|
||||
final argument is the list of URLs that the app exposes to the users of the app.
|
||||
This information is used to check if the URLs are accessible as expected when
|
||||
the user requests diagnostic tests on the app.
|
||||
:class:`~freedombox.modules.apache.components.Webserver` class is a unique ID.
|
||||
The second is the name of the Apache2 web server configuration snippet that
|
||||
contains the directives to proxy Transmission web interface via Apache2. We then
|
||||
need to create the configuration file itself in ``transmission-plinth.conf``.
|
||||
The final argument is the list of URLs that the app exposes to the users of the
|
||||
app. This information is used to check if the URLs are accessible as expected
|
||||
when the user requests diagnostic tests on the app.
|
||||
|
||||
Simply creating and shipping a configuration file into ``/etc`` folder creates
|
||||
some hassles. Consider the following scenario: a debian package, either
|
||||
@ -181,13 +181,13 @@ debian package provides a newer version of the configuration file with, say,
|
||||
more tweaks. As a result, a configuration file prompt is shown to the user
|
||||
during package upgrade process. In case of unattended upgrades, the package is
|
||||
not upgraded at all. To avoid such problems, FreedomBox provides the
|
||||
:class:`~plinth.config.DropinConfigs` component. Let us add it in our app's
|
||||
:class:`~freedombox.config.DropinConfigs` component. Let us add it in our app's
|
||||
class.
|
||||
|
||||
.. code-block:: python3
|
||||
:caption: ``__init__.py``
|
||||
|
||||
from plinth.config import DropinConfigs
|
||||
from freedombox.config import DropinConfigs
|
||||
|
||||
class TransmissionApp(app_module.App):
|
||||
...
|
||||
@ -200,9 +200,9 @@ class.
|
||||
])
|
||||
self.add(dropin_configs)
|
||||
|
||||
The first argument to instantiate the :class:`~plinth.config.DropinConfigs`
|
||||
The first argument to instantiate the :class:`~freedombox.config.DropinConfigs`
|
||||
class is the unique ID. The second argument is the list of configuration files
|
||||
as paths is ``/etc/``. The :class:`~plinth.config.DropinConfigs` component
|
||||
as paths is ``/etc/``. The :class:`~freedombox.config.DropinConfigs` component
|
||||
requires that a file be shipped into ``/usr/share/freedombox/etc`` instead of
|
||||
``/etc``. The component will handle the creation of a symlink from ``/usr`` path
|
||||
to ``/etc`` path. To ship the file, we can simply create file in the ``data/``
|
||||
@ -231,13 +231,13 @@ special port since the web ports are always kept open. However, it is still good
|
||||
to specify that we operate on http/https ports so that users can be provided
|
||||
this information along with additional information on whether the service is
|
||||
available over Internet. Create the
|
||||
:class:`~plinth.modules.firewall.components.Firewall` component during app
|
||||
:class:`~freedombox.modules.firewall.components.Firewall` component during app
|
||||
initialization.
|
||||
|
||||
.. code-block:: python3
|
||||
:caption: ``__init__.py``
|
||||
|
||||
from plinth.modules.firewall.components import Firewall
|
||||
from freedombox.modules.firewall.components import Firewall
|
||||
|
||||
class TransmissionApp(app_module.App):
|
||||
...
|
||||
@ -268,7 +268,7 @@ with the FreedomBox framework in ``__init.py__``.
|
||||
.. code-block:: python3
|
||||
:caption: ``__init__.py``
|
||||
|
||||
from plinth.modules.users.components import UsersAndGroups
|
||||
from freedombox.modules.users.components import UsersAndGroups
|
||||
|
||||
class TransmissionApp(app_module.App):
|
||||
...
|
||||
@ -303,12 +303,12 @@ since only they can configure the app. Other users who have access to this app
|
||||
should have a way of discovering the app. This is done by providing a link in
|
||||
the front page of FreedomBox web interface. This is the page that user's see
|
||||
when they visit FreedomBox. To provide this shortcut, a
|
||||
:class:`~plinth.frontpage.Shortcut` component can added to the app.
|
||||
:class:`~freedombox.frontpage.Shortcut` component can added to the app.
|
||||
|
||||
.. code-block:: python3
|
||||
:caption: ``__init__.py``
|
||||
|
||||
from plinth import frontpage
|
||||
from freedombox import frontpage
|
||||
|
||||
group = ('bit-torrent', 'Download files using BitTorrent applications')
|
||||
|
||||
@ -344,15 +344,15 @@ Each app in FreedomBox needs to provide the ability to backup and restore its
|
||||
configuration and data. Apart from providing durability to users' data, this
|
||||
allows the user to migrate from one machine to another. FreedomBox framework
|
||||
provides a component for handling these operations. Create the
|
||||
:class:`~plinth.modules.backups.components.BackupRestore` component during app
|
||||
initialization.
|
||||
:class:`~freedombox.modules.backups.components.BackupRestore` component during
|
||||
app initialization.
|
||||
|
||||
In ``__init__.py``, add:
|
||||
|
||||
.. code-block:: python3
|
||||
:caption: ``__init__.py``
|
||||
|
||||
from plinth.modules.backups.components import BackupRestore
|
||||
from freedombox.modules.backups.components import BackupRestore
|
||||
|
||||
from . import manifest
|
||||
|
||||
|
||||
@ -101,7 +101,7 @@ the user submits it. Let us implement that in ``views.py``.
|
||||
|
||||
from django.contrib import messages
|
||||
|
||||
from plinth import actions, views
|
||||
from freedombox import actions, views
|
||||
|
||||
from .forms import TransmissionForm
|
||||
|
||||
@ -161,8 +161,8 @@ for transmission daemon. We will do this by creating a file ``privileged.py``.
|
||||
import json
|
||||
import pathlib
|
||||
|
||||
from plinth import action_utils
|
||||
from plinth.actions import privileged
|
||||
from freedombox import action_utils
|
||||
from freedombox.actions import privileged
|
||||
|
||||
_transmission_config = pathlib.Path('/etc/transmission-daemon/settings.json')
|
||||
|
||||
@ -187,8 +187,8 @@ for transmission daemon. We will do this by creating a file ``privileged.py``.
|
||||
action_utils.service_reload('transmission-daemon')
|
||||
|
||||
This is a simple Python3 module but it runs in a separate process with superuser
|
||||
privileges due to the :meth:`plinth.actions.privileged` decorator. All such
|
||||
privileges due to the :meth:`freedombox.actions.privileged` decorator. All such
|
||||
methods must have full type annotations for the method parameters. Further, the
|
||||
parameters and return value must be JSON serializable. It may use various helper
|
||||
utilities provided by the FreedomBox framework in :obj:`plinth.action_utils` to
|
||||
easily perform it's duties.
|
||||
utilities provided by the FreedomBox framework in :obj:`freedombox.action_utils`
|
||||
to easily perform it's duties.
|
||||
|
||||
@ -13,9 +13,9 @@ framework as part of the components used by an app. FreedomBox takes care of
|
||||
calling the diagnostics method and displaying the list in a formatted manner.
|
||||
|
||||
To implement additional diagnostic tests on top of those provided by the
|
||||
framework, the method :meth:`plinth.app.App.diagnose` has to be overridden or in
|
||||
a component that belongs to the app, the method
|
||||
:meth:`plinth.app.Component.diagnose` has to be overridden. The methods must
|
||||
framework, the method :meth:`freedombox.app.App.diagnose` has to be overridden
|
||||
or in a component that belongs to the app, the method
|
||||
:meth:`freedombox.app.Component.diagnose` has to be overridden. The methods must
|
||||
return a list in which each item is the result of a test performed. The item
|
||||
itself is a two-tuple containing the display name of the test followed by the
|
||||
result as ``passed``, ``failed`` or ``error``.
|
||||
@ -36,7 +36,7 @@ result as ``passed``, ``failed`` or ``error``.
|
||||
The user can trigger the diagnostics test by going to **System -> Diagnostics**
|
||||
page. This runs diagnostics for all the applications. Users can also run
|
||||
diagnostics specifically for this app from the app's page. A diagnostics menu
|
||||
item is shown by the :class:`plinth.views.AppView` and `app.html` template
|
||||
item is shown by the :class:`freedombox.views.AppView` and `app.html` template
|
||||
automatically when ``diagnose()`` method is overridden in the app or a
|
||||
component.
|
||||
|
||||
|
||||
@ -11,8 +11,8 @@ Creating the project structure
|
||||
Create a directory structure as follows with empty files. We will fill them up
|
||||
in a step-by-step manner::
|
||||
|
||||
─┬ <plinth_root>/
|
||||
└─┬ plinth/
|
||||
─┬ <freedombox_root>/
|
||||
└─┬ freedombox/
|
||||
└─┬ modules/
|
||||
└─┬ transmission/
|
||||
├─ __init__.py
|
||||
@ -41,46 +41,46 @@ The file ``__init__.py`` indicates that the directory in which it is present is
|
||||
a Python module. For now, it is an empty file.
|
||||
|
||||
FreedomBox's build system will automatically install the
|
||||
``plinth/modules/transmission`` directory (along with other files described
|
||||
``freedombox/modules/transmission`` directory (along with other files described
|
||||
later) to an appropriate location. If you are creating an app that stays
|
||||
independent and outside of FreedomBox source tree, then build system in your
|
||||
source tree will need to install it to a proper location on the system. The
|
||||
``plinth/modules/`` directory is a Python3 `namespace package
|
||||
``freedombox/modules/`` directory is a Python3 `namespace package
|
||||
<https://www.python.org/dev/peps/pep-0420/>`_. So, you can install it with the
|
||||
``plinth/modules/`` directory structure into any Python path and still be
|
||||
discovered as ``plinth.modules.*``.
|
||||
``freedombox/modules/`` directory structure into any Python path and still be
|
||||
discovered as ``freedombox.modules.*``.
|
||||
|
||||
Tell FreedomBox that our app exists
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The first thing to do is tell FreedomBox that our app exists. This is done by
|
||||
writing a small file with the Python import path to our app and placing it in
|
||||
``plinth/modules/transmission/data/usr/share/freedombox/modules-enabled/``. Let
|
||||
us create this file ``transmission``:
|
||||
``freedombox/modules/transmission/data/usr/share/freedombox/modules-enabled/``.
|
||||
Let us create this file ``transmission``:
|
||||
|
||||
.. code-block:: text
|
||||
:caption: ``plinth/modules/transmission/data/usr/share/freedombox/modules-enabled/transmission``
|
||||
:caption: ``freedombox/modules/transmission/data/usr/share/freedombox/modules-enabled/transmission``
|
||||
|
||||
plinth.modules.transmission
|
||||
freedombox.modules.transmission
|
||||
|
||||
This file is automatically installed to
|
||||
``/usr/share/freedombox/modules-enabled/`` by FreedomBox's build system. If we
|
||||
are writing a module that resides independently outside the FreedomBox's source
|
||||
code, the setup script will need to copy it to the target location. Further, it
|
||||
is not necessary for the app to be part of the ``plinth.modules`` namespace. It
|
||||
can, for example, be ``freedombox_transmission``.
|
||||
is not necessary for the app to be part of the ``freedombox.modules`` namespace.
|
||||
It can, for example, be ``freedombox_transmission``.
|
||||
|
||||
Creating the App class
|
||||
^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
In the FreedomBox framework, each app must be a class derived from the
|
||||
:class:`plinth.app.App`. Let us do that in ``__init__.py``. We will fill up the
|
||||
class later.
|
||||
:class:`freedombox.app.App`. Let us do that in ``__init__.py``. We will fill up
|
||||
the class later.
|
||||
|
||||
.. code-block:: python3
|
||||
:caption: ``__init__.py``
|
||||
|
||||
from plinth import app as app_module
|
||||
from freedombox import app as app_module
|
||||
|
||||
class TransmissionApp(app_module.App):
|
||||
"""FreedomBox app for Transmission."""
|
||||
|
||||
@ -22,7 +22,7 @@ write the following:
|
||||
]
|
||||
|
||||
This routes the ``/apps/transmission/`` URL to a view called
|
||||
``TransmissionAppView`` defined in ``plinth/modules/transmission/views.py``.
|
||||
``TransmissionAppView`` defined in ``freedombox/modules/transmission/views.py``.
|
||||
This is no different than how routing URLs is done in Django. See :doc:`Django
|
||||
URL dispatcher <django:topics/http/urls>` for more information.
|
||||
|
||||
@ -36,7 +36,7 @@ a link in FreedomBox web interface. Let us add a link in the apps list. In
|
||||
.. code-block:: python3
|
||||
:caption: ``__init__.py``
|
||||
|
||||
from plinth import menu
|
||||
from freedombox import menu
|
||||
|
||||
class TransmissionApp(app_module.App):
|
||||
...
|
||||
@ -63,7 +63,7 @@ menu item we want to present.
|
||||
|
||||
* The third parameter is the name of the icon to use when showing the menu
|
||||
item. An SVG file and a PNG should be created in the
|
||||
``plinth/modules/transmission/static/icons/`` directory.
|
||||
``freedombox/modules/transmission/static/icons/`` directory.
|
||||
|
||||
* The fourth parameter is the list of tags to show on the menu item.
|
||||
|
||||
@ -87,15 +87,15 @@ view to show the app page for our app. In ``views.py``, let us add a view.
|
||||
.. code-block:: python3
|
||||
:caption: ``views.py``
|
||||
|
||||
from plinth import views
|
||||
from plinth.modules import transmission
|
||||
from freedombox import views
|
||||
from freedombox.modules import transmission
|
||||
|
||||
class TransmissionAppView(views.AppView):
|
||||
"""Serve configuration page."""
|
||||
app_id = 'transmission'
|
||||
|
||||
The base view :class:`~plinth.views.AppView` takes care of a lot of details for
|
||||
us. First, it shows basic information about the app like name, description,
|
||||
The base view :class:`~freedombox.views.AppView` takes care of a lot of details
|
||||
for us. First, it shows basic information about the app like name, description,
|
||||
desktop/mobiles clients for the service (described later), link to the manual
|
||||
page (described later), link to diagnostics button, etc. Then it shows the
|
||||
status of the app whether it is running and can also present a form for
|
||||
|
||||
@ -5,22 +5,22 @@
|
||||
-->
|
||||
<refentry>
|
||||
<refmeta>
|
||||
<refentrytitle><application>plinth</application></refentrytitle>
|
||||
<refentrytitle><application>freedombox</application></refentrytitle>
|
||||
<manvolnum>1</manvolnum>
|
||||
<refmiscinfo class="manual">FreedomBox</refmiscinfo>
|
||||
<refmiscinfo class="version"> </refmiscinfo>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname><application>plinth</application></refname>
|
||||
<refname><application>freedombox</application></refname>
|
||||
<refpurpose>
|
||||
a web front end for administering FreedomBox
|
||||
An inexpensive server at home.
|
||||
</refpurpose>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>plinth</command>
|
||||
<command>freedombox</command>
|
||||
<arg><option>-h, </option><option>--help</option></arg>
|
||||
<arg><option>--server_dir</option><arg choice="req">SERVER_DIR</arg></arg>
|
||||
<arg><option>--develop</option></arg>
|
||||
@ -53,14 +53,13 @@
|
||||
data stays with the users.
|
||||
</para>
|
||||
<para>
|
||||
Plinth is a web interface to administer the functions of the
|
||||
FreedomBox. It is extensible and is made of modules. Each
|
||||
module provides a simplified user interface to control the
|
||||
underlying functionality of a specific application of
|
||||
FreedomBox. As FreedomBox can act as a wireless router, it is
|
||||
possible to configure networking from Plinth. Plinth allows
|
||||
configuration of basic system parameters such as time zone,
|
||||
hostname and automatic upgrade settings.
|
||||
FreedomBox Service (Plinth) has a web interface to administer its
|
||||
functions. It is extensible and is made of modules. Each module provides
|
||||
a simplified user interface to control the underlying functionality of a
|
||||
specific application of FreedomBox. As FreedomBox can act as a wireless
|
||||
router, it is possible to configure networking. FreedomBox allows
|
||||
configuration of basic system parameters such as time zone, hostname and
|
||||
automatic upgrade settings.
|
||||
</para>
|
||||
</refsect1>
|
||||
|
||||
@ -71,9 +70,9 @@
|
||||
<term><option>--server_dir SERVER_DIR</option></term>
|
||||
<listitem>
|
||||
<para>
|
||||
This the URL fragment under which Plinth will provide its services.
|
||||
Plinth is shipped with a default value of
|
||||
<filename>/freedombox</filename>. This means that Plinth will be
|
||||
This the URL fragment under which FreedomBox will provide its services.
|
||||
FreedomBox is shipped with a default value of
|
||||
<filename>/freedombox</filename>. This means that FreedomBox will be
|
||||
available as http://localhost:8000/freedombox by default.
|
||||
</para>
|
||||
</listitem>
|
||||
@ -86,8 +85,8 @@
|
||||
from the current working directory. Enables extra debug messages,
|
||||
enable Django debug mode for detailed error pages and turn off
|
||||
Django security features. Monitor source files for changes and
|
||||
restart Plinth on modifications. Die if there is an error during
|
||||
module initialization.
|
||||
restart FreedomBox Service on modifications. Die if there is an
|
||||
error during module initialization.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
@ -95,7 +94,7 @@
|
||||
<term><option>--diagnose</option></term>
|
||||
<listitem>
|
||||
<para>
|
||||
If provided, Plinth loads modules, performs initialization
|
||||
If provided, FreedomBox loads modules, performs initialization
|
||||
but does start the web server. Instead it runs diagnostic
|
||||
tests on each module and exits.
|
||||
</para>
|
||||
@ -166,7 +165,7 @@
|
||||
<refsect1>
|
||||
<title>Configuration</title>
|
||||
<para>
|
||||
Plinth reads various configuration options from the files
|
||||
FreedomBox Service reads various configuration options from the files
|
||||
<filename>/usr/share/freedombox/freedombox.config</filename>,
|
||||
<filename>/usr/share/freedombox/freedombox.config.d/*.config</filename>,
|
||||
<filename>/etc/plinth/plinth.config</filename>,
|
||||
@ -182,26 +181,26 @@
|
||||
<title>Examples</title>
|
||||
|
||||
<example>
|
||||
<title>Start Plinth with default options</title>
|
||||
<synopsis>$ plinth</synopsis>
|
||||
<title>Start FreedomBox Service with default options</title>
|
||||
<synopsis>$ freedombox</synopsis>
|
||||
<para>
|
||||
Run Plinth as guided by configuration file.
|
||||
Run FreedomBox Service as guided by configuration file.
|
||||
</para>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>Run Plinth with different URL prefix</title>
|
||||
<synopsis>$ plinth --server_dir='/myurl'</synopsis>
|
||||
<title>Run FreedomBox Service with different URL prefix</title>
|
||||
<synopsis>$ freedombox --server_dir='/myurl'</synopsis>
|
||||
<para>
|
||||
Run Plinth with the '/myurl' prefix. Note that Apache forwards requests
|
||||
to '/freedombox' by default, so /myurl is not accessible outside of your
|
||||
FreedomBox without adapting the apache configuration.
|
||||
Run FreedomBox with the '/myurl' prefix. Note that Apache forwards
|
||||
requests to '/freedombox' by default, so /myurl is not accessible
|
||||
outside of your FreedomBox without adapting the apache configuration.
|
||||
</para>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<title>Run Plinth in development mode</title>
|
||||
<synopsis>$ plinth --develop</synopsis>
|
||||
<title>Run FreedomBox Service in development mode</title>
|
||||
<synopsis>$ freedombox --develop</synopsis>
|
||||
<para>
|
||||
Run in development mode on the terminal. Enable auto-reloading and
|
||||
more extensive debugging.
|
||||
@ -213,7 +212,7 @@
|
||||
<title>Bugs</title>
|
||||
<para>
|
||||
See <ulink
|
||||
url="https://salsa.debian.org/freedombox-team/freedombox/issues">Plinth
|
||||
url="https://salsa.debian.org/freedombox-team/freedombox/issues">FreedomBox
|
||||
issue tracker</ulink> for a full list of known issues and TODO items.
|
||||
</para>
|
||||
</refsect1>
|
||||
@ -222,7 +221,7 @@
|
||||
<title>Author</title>
|
||||
<para>
|
||||
<author>
|
||||
<firstname>Plinth Developers</firstname>
|
||||
<firstname>FreedomBox Developers</firstname>
|
||||
<contrib>Original author</contrib>
|
||||
</author>
|
||||
</para>
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
!FreedomBox is a [[DebianPureBlends|pure blend]] of Debian. This means that all the work on !FreedomBox is available in Debian as packages. It also means that any machine running Debian can be turned into a !FreedomBox.
|
||||
|
||||
This page describes the process of installing !FreedomBox on a Debian system. Currently, !FreedomBox works in Debian Stable (bookworm), Testing (trixie), and Unstable (sid).
|
||||
This page describes the process of installing !FreedomBox on a Debian system. Currently, !FreedomBox works in Debian Stable (trixie), Testing (forky), and Unstable (sid).
|
||||
|
||||
'''Important:''' Read [[FreedomBox/Hardware|general advice]] about hardware before building a !FreedomBox with this approach.
|
||||
|
||||
@ -21,13 +21,15 @@ This page describes the process of installing !FreedomBox on a Debian system. Cu
|
||||
'''Use a fresh Debian installation'''
|
||||
|
||||
Installing !FreedomBox changes your Debian system in many important ways. This includes installing a firewall and regenerating server certificates. It is hence recommended that you install !FreedomBox on a fresh Debian installation instead of an existing setup.
|
||||
|
||||
During installation of Debian, it is recommended that you choose btrfs as the filesystem for the root partition. Btrfs filesystem is needed for the Snapshots feature to work.
|
||||
}}}
|
||||
|
||||
=== Installing on Debian 12 (bookworm) or newer ===
|
||||
=== Installing on Debian 13 (trixie) or newer ===
|
||||
|
||||
Check the Troubleshooting section below, for any tips or workarounds that might help during the install.
|
||||
|
||||
1. [[InstallingDebianOn|Install Debian]] 12 (Bookworm) or newer on your hardware. During installation choosing "Btrfs" for root filesystem type is recommended as !FreedomBox uses it take regular snapshots of the system.
|
||||
1. [[InstallingDebianOn|Install Debian]] 13 (Trixie) or newer on your hardware. During installation choosing "Btrfs" for root filesystem type is recommended as !FreedomBox uses it take regular snapshots of the system.
|
||||
|
||||
1. Update your package list.
|
||||
|
||||
@ -47,6 +49,16 @@ $ sudo DEBIAN_FRONTEND=noninteractive apt-get install freedombox
|
||||
|
||||
1. You can start [[FreedomBox/Manual/QuickStart|using]] !FreedomBox. During initial wizard, you will need to enter the secret noted above.
|
||||
|
||||
=== Difference between Debian Package and Disk Image ===
|
||||
|
||||
Following are the differences between setup using a !FreedomBox image vs. installing !FreedomBox using a Debian package on an existing Debian installation:
|
||||
|
||||
1. '''Filesystem:''' The disk images have btrfs as the filesystem. When installing a Debian package, the existing filesystem is not altered. The snapshots feature is currently only available if btrfs is the filesystem. So, for those wanting to install freedombox .deb package, it is recommended that they install Debian on a btrfs filesystem first.
|
||||
|
||||
1. '''First Wizard:''' When installing from a Debian package, !FreedomBox will ask for a secret (stored at a path on the disk) during first wizard. The secret is for security and has no relevance after the first wizard is completed. This secret is not asked if first wizard is run from a disk image (as hardware is expected to be in possession of the user and the user won't be able to easily peak the secret on the disk without running the first wizard first).
|
||||
|
||||
1. '''Networking:''' When disk image is booted, all the Ethernet and Wi-Fi devices are automatically configured to be managed by Network Manager. When !FreedomBox is installed from Debian package, existing network connections are not reconfigured. These network interfaces can later be reconfigured (by commenting out entries in /etc/network/interfaces) to be managed by Network Manager.
|
||||
|
||||
=== Tips and Troubleshooting ===
|
||||
|
||||
1. !FreedomBox uses !NetworkManager to manage network configuration. If you have configured your network interfaces using Debian installer or by editing `/etc/network/interfaces`, !FreedomBox will not manage those interfaces. (See [[https://bugs.debian.org/797614|bug #797614]].) To let !FreedomBox/NetworkManager manage your network interfaces, edit the `/etc/network/interfaces` manually and ensure that it contains only the following:
|
||||
|
||||
@ -8,6 +8,38 @@ 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.12 (2026-09-14) ==
|
||||
|
||||
=== Highlights ===
|
||||
|
||||
* locale: Add Lao translation
|
||||
* radicale: Redirect from .well-known URLs only temporarily
|
||||
* wireguard: Fix auto-adding client when no domains are configured
|
||||
* wireguard: Fix issues with newline in public key when adding client
|
||||
|
||||
=== Other Changes ===
|
||||
|
||||
* *: Additional import path related changes
|
||||
* *: All other changes need for new import path
|
||||
* *: Miscellaneous changes to work with reduce the use of term 'plinth'
|
||||
* *: Update additional documentation/comments with new import path
|
||||
* *: Update import path in modules-enabled configuration files
|
||||
* *: Update imports statements from plinth to freedombox
|
||||
* bin: Rename main binary from plinth to freedombox
|
||||
* container: Fix failure with defining a new VM
|
||||
* d/copyright: Update copyright file
|
||||
* django: Changes for new import path
|
||||
* django: Rename DB tables from plinth_ to freedombox_
|
||||
* doc/dev: Update developer documentation with new import path
|
||||
* errors: Rename !PlinthError to !FbxError
|
||||
* locale: Move lo to freedombox path
|
||||
* locale: Update translations for Czech, French, Lao, Swedish
|
||||
* nextcloud: test: Fix functional tests with version 26
|
||||
* plinth/*: Rename plinth/ folder to freedombox/
|
||||
* radicale: tests: Don't fail if Nextcloud is enabled
|
||||
* tags: tests: Fix functional tests broken by separate apps/add page
|
||||
* wireguard: Improve reliability functional tests by waiting after ops
|
||||
|
||||
== FreedomBox 26.11.1 (2026-08-19) ==
|
||||
|
||||
* apache: Stop installing uwsgi by default
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
!FreedomBox is a [[DebianPureBlends|pure blend]] of Debian. This means that all the work on !FreedomBox is available in Debian as packages. It also means that any machine running Debian can be turned into a !FreedomBox.
|
||||
|
||||
This page describes the process of installing !FreedomBox on a Debian system. Currently, !FreedomBox works in Debian Stable (bookworm), Testing (trixie), and Unstable (sid).
|
||||
This page describes the process of installing !FreedomBox on a Debian system. Currently, !FreedomBox works in Debian Stable (trixie), Testing (forky), and Unstable (sid).
|
||||
|
||||
'''Important:''' Read [[FreedomBox/Hardware|general advice]] about hardware before building a !FreedomBox with this approach.
|
||||
|
||||
@ -21,13 +21,15 @@ This page describes the process of installing !FreedomBox on a Debian system. Cu
|
||||
'''Use a fresh Debian installation'''
|
||||
|
||||
Installing !FreedomBox changes your Debian system in many important ways. This includes installing a firewall and regenerating server certificates. It is hence recommended that you install !FreedomBox on a fresh Debian installation instead of an existing setup.
|
||||
|
||||
During installation of Debian, it is recommended that you choose btrfs as the filesystem for the root partition. Btrfs filesystem is needed for the Snapshots feature to work.
|
||||
}}}
|
||||
|
||||
=== Installing on Debian 12 (bookworm) or newer ===
|
||||
=== Installing on Debian 13 (trixie) or newer ===
|
||||
|
||||
Check the Troubleshooting section below, for any tips or workarounds that might help during the install.
|
||||
|
||||
1. [[InstallingDebianOn|Install Debian]] 12 (Bookworm) or newer on your hardware. During installation choosing "Btrfs" for root filesystem type is recommended as !FreedomBox uses it take regular snapshots of the system.
|
||||
1. [[InstallingDebianOn|Install Debian]] 13 (Trixie) or newer on your hardware. During installation choosing "Btrfs" for root filesystem type is recommended as !FreedomBox uses it take regular snapshots of the system.
|
||||
|
||||
1. Update your package list.
|
||||
|
||||
@ -47,6 +49,16 @@ $ sudo DEBIAN_FRONTEND=noninteractive apt-get install freedombox
|
||||
|
||||
1. You can start [[FreedomBox/Manual/QuickStart|using]] !FreedomBox. During initial wizard, you will need to enter the secret noted above.
|
||||
|
||||
=== Difference between Debian Package and Disk Image ===
|
||||
|
||||
Following are the differences between setup using a !FreedomBox image vs. installing !FreedomBox using a Debian package on an existing Debian installation:
|
||||
|
||||
1. '''Filesystem:''' The disk images have btrfs as the filesystem. When installing a Debian package, the existing filesystem is not altered. The snapshots feature is currently only available if btrfs is the filesystem. So, for those wanting to install freedombox .deb package, it is recommended that they install Debian on a btrfs filesystem first.
|
||||
|
||||
1. '''First Wizard:''' When installing from a Debian package, !FreedomBox will ask for a secret (stored at a path on the disk) during first wizard. The secret is for security and has no relevance after the first wizard is completed. This secret is not asked if first wizard is run from a disk image (as hardware is expected to be in possession of the user and the user won't be able to easily peak the secret on the disk without running the first wizard first).
|
||||
|
||||
1. '''Networking:''' When disk image is booted, all the Ethernet and Wi-Fi devices are automatically configured to be managed by Network Manager. When !FreedomBox is installed from Debian package, existing network connections are not reconfigured. These network interfaces can later be reconfigured (by commenting out entries in /etc/network/interfaces) to be managed by Network Manager.
|
||||
|
||||
=== Tips and Troubleshooting ===
|
||||
|
||||
1. !FreedomBox uses !NetworkManager to manage network configuration. If you have configured your network interfaces using Debian installer or by editing `/etc/network/interfaces`, !FreedomBox will not manage those interfaces. (See [[https://bugs.debian.org/797614|bug #797614]].) To let !FreedomBox/NetworkManager manage your network interfaces, edit the `/etc/network/interfaces` manually and ensure that it contains only the following:
|
||||
|
||||
@ -8,6 +8,38 @@ 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.12 (2026-09-14) ==
|
||||
|
||||
=== Highlights ===
|
||||
|
||||
* locale: Add Lao translation
|
||||
* radicale: Redirect from .well-known URLs only temporarily
|
||||
* wireguard: Fix auto-adding client when no domains are configured
|
||||
* wireguard: Fix issues with newline in public key when adding client
|
||||
|
||||
=== Other Changes ===
|
||||
|
||||
* *: Additional import path related changes
|
||||
* *: All other changes need for new import path
|
||||
* *: Miscellaneous changes to work with reduce the use of term 'plinth'
|
||||
* *: Update additional documentation/comments with new import path
|
||||
* *: Update import path in modules-enabled configuration files
|
||||
* *: Update imports statements from plinth to freedombox
|
||||
* bin: Rename main binary from plinth to freedombox
|
||||
* container: Fix failure with defining a new VM
|
||||
* d/copyright: Update copyright file
|
||||
* django: Changes for new import path
|
||||
* django: Rename DB tables from plinth_ to freedombox_
|
||||
* doc/dev: Update developer documentation with new import path
|
||||
* errors: Rename !PlinthError to !FbxError
|
||||
* locale: Move lo to freedombox path
|
||||
* locale: Update translations for Czech, French, Lao, Swedish
|
||||
* nextcloud: test: Fix functional tests with version 26
|
||||
* plinth/*: Rename plinth/ folder to freedombox/
|
||||
* radicale: tests: Don't fail if Nextcloud is enabled
|
||||
* tags: tests: Fix functional tests broken by separate apps/add page
|
||||
* wireguard: Improve reliability functional tests by waiting after ops
|
||||
|
||||
== FreedomBox 26.11.1 (2026-08-19) ==
|
||||
|
||||
* apache: Stop installing uwsgi by default
|
||||
|
||||
@ -51,7 +51,9 @@ Por omisión las direcciones web de artículos de blog de nueva creación son co
|
||||
|
||||
=== Actualizaciones automáticas ===
|
||||
|
||||
Como con todas las demás apps, !FreedomBox (si no se deshabilitan) maneja las actualizaciones funcionales y de seguridad para !WordPress automáticamente. Tras una actualización de versión menor !WordPress efectúa automáticamente cambios en la estructura de la base de datos. No obstante, tras una actualización de versión mayor como un salto bianual de distribución los cambios en la base de datos no son automáticos. Para esto necesitarás ingresar a !WordPress y dispararlos manualmente.
|
||||
Como con todas las demás apps, !FreedomBox (mientras permanezca habilitada la funcionalidad de autoactualización) maneja las actualizaciones funcionales y de seguridad para !WordPress automáticamente. Nótese que el actualizador propio de !WordPress no puede actualizar el núcleo de !WordPress ni plugins que se instalen desde paquetes Debian. Solo se puede usar para actualizar plugins adicionales añadidos a la instalación.
|
||||
|
||||
Tras una actualización de versión menor !WordPress efectúa automáticamente cambios en la estructura de la base de datos. No obstante, tras una actualización de versión mayor como un salto bianual de distribución los cambios en la base de datos no son automáticos. Para esto necesitarás ingresar a !WordPress y dispararlos manualmente.
|
||||
|
||||
=== Plugins y Temas ===
|
||||
|
||||
|
||||
@ -1192,12 +1192,12 @@ from="## BEGIN_INCLUDE", to="## END_INCLUDE")>>')
|
||||
>>> parse_wiki('{{{#!wiki caution\\n\\nOnce some other app is set as the \
|
||||
home page, you can only navigate to the !FreedomBox Service (Plinth) by \
|
||||
typing https://myfreedombox.rocks/freedombox/ into the browser. <<BR>>\\n\
|
||||
''/freedombox'' can also be used as an alias to ''/plinth''\\n}}}')
|
||||
''/plinth'' can also be used as an alias to ''/freedombox''\\n}}}')
|
||||
[Admonition('caution', [Paragraph([PlainText('Once some other app is set \
|
||||
as the home page, you can only navigate to the FreedomBox Service (Plinth) by \
|
||||
typing '), Url('https://myfreedombox.rocks/freedombox/'), PlainText(' into the \
|
||||
browser. ')]), Paragraph([PlainText('/freedombox can also be used as an alias \
|
||||
to /plinth ')])])]
|
||||
browser. ')]), Paragraph([PlainText('/plinth can also be used as an alias \
|
||||
to /freedombox ')])])]
|
||||
|
||||
>>> parse_wiki('{{{\\nmulti-line\\n\
|
||||
preformatted text (source code)\\n}}}''')
|
||||
@ -1773,8 +1773,8 @@ Code</ulink>'
|
||||
'<ulink url="https://bugs.debian.org/1234#">Bug</ulink>'
|
||||
|
||||
>>> generate_inner_docbook([Link('DebianPkg:freedombox', \
|
||||
[PlainText('Plinth')])])
|
||||
'<ulink url="https://packages.debian.org/freedombox#">Plinth</ulink>'
|
||||
[PlainText('FreedomBox')])])
|
||||
'<ulink url="https://packages.debian.org/freedombox#">FreedomBox</ulink>'
|
||||
|
||||
>>> generate_inner_docbook([Link('AliothList:freedombox-discuss', \
|
||||
[PlainText('Discuss')])])
|
||||
|
||||
@ -3,4 +3,4 @@
|
||||
Package init file.
|
||||
"""
|
||||
|
||||
__version__ = '26.11.1'
|
||||
__version__ = '26.12'
|
||||
@ -29,7 +29,7 @@ def parse_arguments():
|
||||
help='web server path under which to serve')
|
||||
parser.add_argument(
|
||||
'--develop', action='store_true', default=None,
|
||||
help=('run Plinth *insecurely* from current folder; '
|
||||
help=('run FreedomBox Service *insecurely* from current folder; '
|
||||
'enable auto-reloading and debugging options'))
|
||||
parser.add_argument('--setup', default=False, nargs='*',
|
||||
help='run setup tasks on all essential apps and exit')
|
||||
@ -18,9 +18,9 @@ from . import actions
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Flag on disk to indicate if freedombox package was held by
|
||||
# plinth. This is a backup in case the process is interrupted and hold
|
||||
# is not released.
|
||||
# Flag on disk to indicate if freedombox package was held by FreedomBox
|
||||
# Service. This is a backup in case the process is interrupted and hold is not
|
||||
# released.
|
||||
apt_hold_flag = pathlib.Path('/var/lib/freedombox/package-held')
|
||||
|
||||
|
||||
@ -790,7 +790,7 @@ def move_uploaded_file(source: str | pathlib.Path,
|
||||
If allow_overwrite is set to False and destination file exists, an
|
||||
exception is raised.
|
||||
"""
|
||||
from plinth import settings
|
||||
from freedombox import settings
|
||||
|
||||
if isinstance(source, str):
|
||||
source = pathlib.Path(source)
|
||||
@ -14,7 +14,7 @@ import traceback
|
||||
import types
|
||||
import typing
|
||||
|
||||
from plinth import cfg, module_loader
|
||||
from freedombox import cfg, module_loader
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -463,8 +463,8 @@ def _privileged_call(module_name, action_name, arguments, log_error=True):
|
||||
raise SyntaxError('Invalid module name')
|
||||
|
||||
cfg.read()
|
||||
if module_name == 'plinth':
|
||||
import_path = 'plinth'
|
||||
if module_name == 'freedombox':
|
||||
import_path = 'freedombox'
|
||||
else:
|
||||
try:
|
||||
import_path = module_loader.get_module_import_path(module_name)
|
||||
@ -9,9 +9,9 @@ import inspect
|
||||
import logging
|
||||
from typing import ClassVar, TypeAlias
|
||||
|
||||
from plinth import cfg
|
||||
from plinth.diagnostic_check import DiagnosticCheck
|
||||
from plinth.signals import post_app_loading
|
||||
from freedombox import cfg
|
||||
from freedombox.diagnostic_check import DiagnosticCheck
|
||||
from freedombox.signals import post_app_loading
|
||||
|
||||
from . import clients as clients_module
|
||||
from . import db
|
||||
@ -130,7 +130,7 @@ class App:
|
||||
def info(self):
|
||||
"""Return the information component of the app.
|
||||
|
||||
It is mandatory to have one :class:`~plinth.app.Info` component in
|
||||
It is mandatory to have one :class:`~freedombox.app.Info` component in
|
||||
every app to provide basic information about the app. Trying to access
|
||||
this property without having the Info component will result in a
|
||||
KeyError exception being raised. The lookup for the Info component is
|
||||
@ -230,7 +230,7 @@ class App:
|
||||
"""Run diagnostics and return results.
|
||||
|
||||
Return value must be a list of results. Each result is a
|
||||
:class:`~plinth.diagnostic_check.DiagnosticCheck` with a
|
||||
:class:`~freedombox.diagnostic_check.DiagnosticCheck` with a
|
||||
unique check_id, a user visible description of the test, the result,
|
||||
test parameters, and the component ID. The test result is a string
|
||||
enumeration from 'failed', 'passed', 'error', 'warning' and 'not_done'.
|
||||
@ -314,7 +314,7 @@ class App:
|
||||
|
||||
This is typically true if the apps has daemons or containers.
|
||||
"""
|
||||
from plinth import log
|
||||
from freedombox import log
|
||||
for component in self.components.values():
|
||||
if isinstance(component, log.LogEmitter):
|
||||
return True
|
||||
@ -323,7 +323,7 @@ class App:
|
||||
|
||||
def get_logs(self) -> _list_type[dict[str, str]]:
|
||||
"""Return the logs in a dictionary format."""
|
||||
from plinth import log
|
||||
from freedombox import log
|
||||
logs: list[dict[str, str]] = []
|
||||
for component in self.components.values():
|
||||
if isinstance(component, log.LogEmitter):
|
||||
@ -380,7 +380,7 @@ class Component:
|
||||
"""Run diagnostics and return results.
|
||||
|
||||
Return value must be a list of results. Each result is a
|
||||
:class:`~plinth.diagnostic_check.DiagnosticCheck` with a
|
||||
:class:`~freedombox.diagnostic_check.DiagnosticCheck` with a
|
||||
unique check_id, a user visible description of the test, the result,
|
||||
test parameters, and the component ID. The test result is a string
|
||||
enumeration from 'failed', 'passed', 'error', 'warning' and 'not_done'.
|
||||
@ -533,7 +533,7 @@ class Info(FollowerComponent):
|
||||
'clients' is the list of applications that can be used with the
|
||||
services provided by this app. This is used to suggest installation of
|
||||
compatible clients on desktop, web and mobile. This is a list of
|
||||
dictionaries who structure is documented in plinth.clients.
|
||||
dictionaries who structure is documented in freedombox.clients.
|
||||
|
||||
'donation_url' is a link to a webpage that describes how to
|
||||
donate to the upstream project.
|
||||
@ -611,17 +611,17 @@ class EnableState(LeaderComponent):
|
||||
|
||||
def is_enabled(self):
|
||||
"""Return whether the app/component is enabled."""
|
||||
from plinth import kvstore
|
||||
from freedombox import kvstore
|
||||
return kvstore.get_default(self.key, False)
|
||||
|
||||
def enable(self):
|
||||
"""Store that the app/component is enabled."""
|
||||
from plinth import kvstore
|
||||
from freedombox import kvstore
|
||||
kvstore.set(self.key, True)
|
||||
|
||||
def disable(self):
|
||||
"""Store that the app/component is disabled."""
|
||||
from plinth import kvstore
|
||||
from freedombox import kvstore
|
||||
kvstore.set(self.key, False)
|
||||
|
||||
|
||||
@ -22,7 +22,7 @@ server_dir = '/freedombox'
|
||||
host = '127.0.0.1'
|
||||
port = 8000
|
||||
|
||||
# Enable the following only if Plinth is behind a proxy server. The
|
||||
# Enable the following only if FreedomBox is behind a proxy server. The
|
||||
# proxy server should properly clean and the following HTTP headers:
|
||||
# X-Forwarded-For
|
||||
# X-Forwarded-Host
|
||||
@ -5,9 +5,9 @@ import pathlib
|
||||
|
||||
from django.utils.translation import gettext_noop
|
||||
|
||||
from plinth.diagnostic_check import (DiagnosticCheck,
|
||||
DiagnosticCheckParameters, Result)
|
||||
from plinth.privileged import config as privileged
|
||||
from freedombox.diagnostic_check import (DiagnosticCheck,
|
||||
DiagnosticCheckParameters, Result)
|
||||
from freedombox.privileged import config as privileged
|
||||
|
||||
from . import app as app_module
|
||||
|
||||
@ -62,7 +62,7 @@ def pytest_collection_modifyitems(config, items):
|
||||
@pytest.fixture(name='load_cfg')
|
||||
def fixture_load_cfg():
|
||||
"""Load test configuration."""
|
||||
from plinth import cfg
|
||||
from freedombox import cfg
|
||||
|
||||
keys = ('file_root', 'data_dir', 'custom_static_dir', 'store_file',
|
||||
'doc_dir', 'server_dir', 'host', 'port', 'use_x_forwarded_for',
|
||||
@ -73,7 +73,7 @@ def fixture_load_cfg():
|
||||
saved_state[key] = getattr(cfg, key)
|
||||
|
||||
root_dir = pathlib.Path(__file__).resolve().parent
|
||||
cfg_file = root_dir / 'plinth' / 'develop.config'
|
||||
cfg_file = root_dir / 'freedombox' / 'develop.config'
|
||||
cfg.read_file(str(cfg_file))
|
||||
yield cfg
|
||||
|
||||
@ -187,10 +187,10 @@ def fixture_mock_run_as_user():
|
||||
"""A fixture to override action_utils.run_as_user."""
|
||||
|
||||
def _bypass_runuser(*args, username, **kwargs):
|
||||
from plinth import action_utils
|
||||
from freedombox import action_utils
|
||||
return action_utils.run(*args, **kwargs)
|
||||
|
||||
with patch('plinth.action_utils.run_as_user') as mock:
|
||||
with patch('freedombox.action_utils.run_as_user') as mock:
|
||||
mock.side_effect = _bypass_runuser
|
||||
yield
|
||||
|
||||
@ -287,7 +287,7 @@ def fixture_host_sudo(host):
|
||||
@pytest.fixture(name='test_menu')
|
||||
def fixture_test_menu():
|
||||
"""Initialized menu module."""
|
||||
from plinth import menu as menu_module
|
||||
from freedombox import menu as menu_module
|
||||
|
||||
menu_module.Menu._all_menus = set()
|
||||
menu_module.init()
|
||||
@ -5,10 +5,10 @@ import contextlib
|
||||
|
||||
from django.utils.translation import gettext_noop
|
||||
|
||||
from plinth import app, log, privileged
|
||||
from plinth.daemon import diagnose_port_listening
|
||||
from plinth.diagnostic_check import (DiagnosticCheck,
|
||||
DiagnosticCheckParameters, Result)
|
||||
from freedombox import app, log, privileged
|
||||
from freedombox.daemon import diagnose_port_listening
|
||||
from freedombox.diagnostic_check import (DiagnosticCheck,
|
||||
DiagnosticCheckParameters, Result)
|
||||
|
||||
|
||||
class Container(app.LeaderComponent, log.LogEmitter):
|
||||
@ -89,7 +89,7 @@ class Container(app.LeaderComponent, log.LogEmitter):
|
||||
@contextlib.contextmanager
|
||||
def ensure_running(self):
|
||||
"""Ensure a service is running and return to previous state."""
|
||||
from plinth.privileged import service as service_privileged
|
||||
from freedombox.privileged import service as service_privileged
|
||||
starting_state = self.is_running()
|
||||
if not starting_state:
|
||||
service_privileged.enable(self.name)
|
||||
@ -121,7 +121,7 @@ class Container(app.LeaderComponent, log.LogEmitter):
|
||||
def diagnose(self) -> list[DiagnosticCheck]:
|
||||
"""Check if the container is running..
|
||||
|
||||
See :py:meth:`plinth.app.Component.diagnose`.
|
||||
See :py:meth:`freedombox.app.Component.diagnose`.
|
||||
"""
|
||||
results = []
|
||||
results.append(self._diagnose_unit_is_running())
|
||||
@ -6,8 +6,8 @@ Django context processors to provide common data to templates.
|
||||
from django.utils.translation import gettext as _
|
||||
from django.utils.translation import gettext_noop
|
||||
|
||||
from plinth import cfg, views, web_server
|
||||
from plinth.utils import is_user_admin
|
||||
from freedombox import cfg, views, web_server
|
||||
from freedombox.utils import is_user_admin
|
||||
|
||||
|
||||
def common(request):
|
||||
@ -20,7 +20,7 @@ def common(request):
|
||||
# the brand name 'FreedomBox' itself to be translated.
|
||||
gettext_noop('FreedomBox')
|
||||
|
||||
from plinth.notification import Notification
|
||||
from freedombox.notification import Notification
|
||||
notifications_context = Notification.get_display_context(
|
||||
request, user=request.user)
|
||||
|
||||
@ -8,9 +8,9 @@ import subprocess
|
||||
import psutil
|
||||
from django.utils.translation import gettext_noop
|
||||
|
||||
from plinth import action_utils, app, log
|
||||
from plinth.diagnostic_check import (DiagnosticCheck,
|
||||
DiagnosticCheckParameters, Result)
|
||||
from freedombox import action_utils, app, log
|
||||
from freedombox.diagnostic_check import (DiagnosticCheck,
|
||||
DiagnosticCheckParameters, Result)
|
||||
|
||||
|
||||
class Daemon(app.LeaderComponent, log.LogEmitter):
|
||||
@ -71,14 +71,14 @@ class Daemon(app.LeaderComponent, log.LogEmitter):
|
||||
|
||||
def enable(self):
|
||||
"""Run operations to enable the daemon/unit."""
|
||||
from plinth.privileged import service as service_privileged
|
||||
from freedombox.privileged import service as service_privileged
|
||||
service_privileged.enable(self.unit)
|
||||
if self.alias:
|
||||
service_privileged.enable(self.alias)
|
||||
|
||||
def disable(self):
|
||||
"""Run operations to disable the daemon/unit."""
|
||||
from plinth.privileged import service as service_privileged
|
||||
from freedombox.privileged import service as service_privileged
|
||||
service_privileged.disable(self.unit)
|
||||
if self.alias:
|
||||
service_privileged.disable(self.alias)
|
||||
@ -90,7 +90,7 @@ class Daemon(app.LeaderComponent, log.LogEmitter):
|
||||
@contextlib.contextmanager
|
||||
def ensure_running(self):
|
||||
"""Ensure a service is running and return to previous state."""
|
||||
from plinth.privileged import service as service_privileged
|
||||
from freedombox.privileged import service as service_privileged
|
||||
|
||||
if action_utils.service_show(self.unit)['LoadState'] == 'not-found':
|
||||
# The service's package not installed yet, don't try to start it
|
||||
@ -111,7 +111,7 @@ class Daemon(app.LeaderComponent, log.LogEmitter):
|
||||
def diagnose(self) -> list[DiagnosticCheck]:
|
||||
"""Check if the daemon is running and listening on expected ports.
|
||||
|
||||
See :py:meth:`plinth.app.Component.diagnose`.
|
||||
See :py:meth:`freedombox.app.Component.diagnose`.
|
||||
|
||||
"""
|
||||
results = []
|
||||
@ -7,7 +7,7 @@ Uses utilities from 'postgres' package such as 'psql' and 'pg_dump'.
|
||||
import os
|
||||
import pathlib
|
||||
|
||||
from plinth import action_utils
|
||||
from freedombox import action_utils
|
||||
|
||||
|
||||
def _run_as(command, **kwargs):
|
||||
@ -6,7 +6,7 @@ Expose some API over D-Bus.
|
||||
import logging
|
||||
import threading
|
||||
|
||||
from plinth.utils import import_from_gi
|
||||
from freedombox.utils import import_from_gi
|
||||
|
||||
from . import setup
|
||||
|
||||
@ -95,7 +95,7 @@ class DBusServer():
|
||||
self.package_handler = PackageHandler()
|
||||
self.package_handler.register(connection)
|
||||
|
||||
from plinth.modules.letsencrypt.dbus import LetsEncrypt
|
||||
from freedombox.modules.letsencrypt.dbus import LetsEncrypt
|
||||
lets_encrypt = LetsEncrypt()
|
||||
lets_encrypt.register(connection)
|
||||
|
||||
@ -9,7 +9,7 @@ from typing import TypeAlias
|
||||
|
||||
from django.utils.translation import gettext
|
||||
|
||||
from plinth.utils import SafeFormatter
|
||||
from freedombox.utils import SafeFormatter
|
||||
|
||||
DiagnosticCheckParameters: TypeAlias = dict[str, str | int | bool | None]
|
||||
|
||||
@ -4,22 +4,22 @@ Project specific errors
|
||||
"""
|
||||
|
||||
|
||||
class PlinthError(Exception):
|
||||
class FbxError(Exception):
|
||||
"""Base class for all FreedomBox specific errors."""
|
||||
|
||||
|
||||
class PackageNotInstalledError(PlinthError):
|
||||
class PackageNotInstalledError(FbxError):
|
||||
"""Could not complete module setup due to missing package."""
|
||||
|
||||
|
||||
class DomainNotRegisteredError(PlinthError):
|
||||
class DomainNotRegisteredError(FbxError):
|
||||
"""
|
||||
An action couldn't be performed because this
|
||||
FreedomBox doesn't have a registered domain
|
||||
"""
|
||||
|
||||
|
||||
class MissingPackageError(PlinthError):
|
||||
class MissingPackageError(FbxError):
|
||||
"""Package is not available to be installed at this time."""
|
||||
|
||||
def __init__(self, name):
|
||||
@ -11,12 +11,12 @@ from django.utils import translation
|
||||
from django.utils.translation import get_language_info
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
import plinth
|
||||
import freedombox
|
||||
|
||||
|
||||
def _get_repository_choices():
|
||||
"""Return the list of available repositories."""
|
||||
import plinth.modules.backups.repository as repository_module
|
||||
import freedombox.modules.backups.repository as repository_module
|
||||
choices = [(repository.uuid, repository.name)
|
||||
for repository in repository_module.get_repositories()
|
||||
if repository.is_usable()]
|
||||
@ -54,7 +54,7 @@ class DomainSelectionForm(forms.Form):
|
||||
def __init__(self, show_none=False, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
from plinth.modules.names.components import DomainName
|
||||
from freedombox.modules.names.components import DomainName
|
||||
domains = list(DomainName.list_names())
|
||||
|
||||
choices = list(zip(domains, domains))
|
||||
@ -70,7 +70,7 @@ class DomainSelectionForm(forms.Form):
|
||||
|
||||
def _get_domain_choices():
|
||||
"""Double domain entries for inclusion in the choice field."""
|
||||
from plinth.modules.names import get_available_tls_domains
|
||||
from freedombox.modules.names import get_available_tls_domains
|
||||
return ((domain, domain) for domain in get_available_tls_domains())
|
||||
|
||||
|
||||
@ -109,9 +109,9 @@ class LanguageSelectionFormMixin:
|
||||
|
||||
for language_code, language_name in settings.LANGUAGES:
|
||||
locale_code = translation.to_locale(language_code)
|
||||
plinth_dir = os.path.dirname(plinth.__file__)
|
||||
freedombox_dir = os.path.dirname(freedombox.__file__)
|
||||
if language_code == 'en' or os.path.exists(
|
||||
os.path.join(plinth_dir, 'locale', locale_code)):
|
||||
os.path.join(freedombox_dir, 'locale', locale_code)):
|
||||
supported_languages.append(
|
||||
(language_code,
|
||||
_get_local_name(language_code, language_name)))
|
||||
@ -6,8 +6,8 @@ import logging
|
||||
import pathlib
|
||||
from typing import ClassVar
|
||||
|
||||
from plinth import app, cfg
|
||||
from plinth.modules.users import privileged as users_privileged
|
||||
from freedombox import app, cfg
|
||||
from freedombox.modules.users import privileged as users_privileged
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -7,8 +7,8 @@ import logging
|
||||
import random
|
||||
import threading
|
||||
|
||||
from plinth import dbus, network
|
||||
from plinth.utils import import_from_gi
|
||||
from freedombox import dbus, network
|
||||
from freedombox.utils import import_from_gi
|
||||
|
||||
from . import cfg
|
||||
|
||||
@ -8,7 +8,7 @@ from . import db
|
||||
|
||||
def get(key):
|
||||
"""Return the value of a key"""
|
||||
from plinth.models import KVStore
|
||||
from freedombox.models import KVStore
|
||||
|
||||
with db.lock:
|
||||
# pylint: disable-msg=E1101
|
||||
@ -26,7 +26,7 @@ def get_default(key, default_value):
|
||||
|
||||
def set(key, value): # pylint: disable-msg=W0622
|
||||
"""Store the value of a key"""
|
||||
from plinth.models import KVStore
|
||||
from freedombox.models import KVStore
|
||||
with db.lock:
|
||||
store = KVStore(key=key, value=value)
|
||||
store.save()
|
||||
@ -34,7 +34,7 @@ def set(key, value): # pylint: disable-msg=W0622
|
||||
|
||||
def delete(key, ignore_missing=False):
|
||||
"""Delete a key"""
|
||||
from plinth.models import KVStore
|
||||
from freedombox.models import KVStore
|
||||
with db.lock:
|
||||
try:
|
||||
return KVStore.objects.get(key=key).delete()
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user