Compare commits

..

No commits in common. "main" and "v24.14" have entirely different histories.
main ... v24.14

1122 changed files with 134057 additions and 259486 deletions

View File

@ -1,40 +0,0 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
FROM debian:stable
CMD /sbin/init
USER root:root
ENV DEBIAN_FRONTEND=noninteractive
RUN echo "deb http://deb.debian.org/debian trixie-backports main" > /etc/apt/sources.list.d/backports.list; echo "deb-src http://deb.debian.org/debian trixie-backports main" >> /etc/apt/sources.list.d/backports.list
RUN apt-get update
# Update all packages
RUN apt-get dist-upgrade -y
# Install freedombox package so that plint:plinth user/group are created etc.
RUN apt-get install -y freedombox/trixie-backports
RUN systemctl disable plinth.service
# Don't ask for the secret in first wizard
RUN rm -f /var/lib/plinth/firstboot-wizard-secret
# Dependencies of the freedombox Debian package
RUN apt-get build-dep -y freedombox/trixie-backports
# Build and test dependencies
RUN apt-get install -y \
build-essential \
parted \
sshpass \
wget
# Install functional test dependencies
ADD https://salsa.debian.org/freedombox-team/freedombox/-/raw/main/plinth/tests/functional/install.sh /usr/src/install.sh
RUN bash /usr/src/install.sh; rm -f /usr/src/install.sh
# Allow daemons to start when container is started
RUN rm -f /usr/sbin/policy-rc.d

View File

@ -19,11 +19,10 @@ RUN apt-get build-dep -y .
RUN apt-get install -y build-essential \ RUN apt-get install -y build-essential \
# Test dependencies # Test dependencies
sshpass parted \ sshpass parted \
sudo python3-pip \ sudo python3-pip
python3-flake8
# Module dependencies # Module dependencies
RUN apt-get install -y $(./run --list-dependencies) RUN apt-get install -y $(./run --list-dependencies)
# Coverage should know that test_functional.py files are tests # Coverage should know that test_functional.py files are tests
RUN pip3 install --break-system-packages splinter RUN pip3 install --break-system-packages splinter pytest-bdd

View File

@ -1,27 +1,66 @@
--- ---
# SPDX-License-Identifier: AGPL-3.0-or-later # SPDX-License-Identifier: AGPL-3.0-or-later
.run-functional-tests: .app-server:
stage: functional-tests stage: functional-tests
needs: []
dependencies: [] dependencies: []
tags:
- functional-tests
timeout: 10h
# Need to find another way of running the cleanup step even on failure
allow_failure: true
except: except:
- $GITLAB_USER_LOGIN == "weblate" - $GITLAB_USER_LOGIN == "weblate"
script:
- BUILD_JOB_ID=$(curl -s "https://salsa.debian.org/api/v4/projects/$CI_PROJECT_ID/pipelines/$CI_PIPELINE_ID/jobs?scope[]=success" | jq -r '.[] | select(.name==env.BUILD_JOB_NAME) | .id')
- export AWS_DEFAULT_REGION=us-east-1
- |
aws lambda invoke --function-name launch_app_server --payload '{"launch_template_name": "'"$LAUNCH_TEMPLATE_NAME"'", "instance_name": "'"$INSTANCE_NAME"'", "ci_project_id": "'"$CI_PROJECT_ID"'", "build_job_id": "'"$BUILD_JOB_ID"'"}' response.json
- echo "APP_SERVER_IP_1=$(jq -r '.app_server_ip' response.json)" >> app-servers.env
- echo "INSTANCE_ID_1=$(jq -r '.instance_id' response.json)" >> app-servers.env
- |
aws lambda invoke --function-name launch_app_server --payload '{"launch_template_name": "'"$LAUNCH_TEMPLATE_NAME"'", "instance_name": "'"$INSTANCE_NAME"'", "ci_project_id": "'"$CI_PROJECT_ID"'", "build_job_id": "'"$BUILD_JOB_ID"'"}' response.json
- echo "APP_SERVER_IP_2=$(jq -r '.app_server_ip' response.json)" >> app-servers.env
- echo "INSTANCE_ID_2=$(jq -r '.instance_id' response.json)" >> app-servers.env
tags:
- functional-tests
artifacts:
reports:
dotenv: app-servers.env
.run-functional-tests:
stage: functional-tests
timeout: 3h
# Need to find another way of running the cleanup step even on failure
allow_failure: true
when: delayed
# Wait for the app-server to come up. Saves time for the CI runners.
start_in: 3 minutes
before_script: before_script:
- apt-get update - apt-get update
- apt-get -y install make - apt-get install -y sudo curl wget
- make provision-dev - ./plinth/tests/functional/install.sh
- make wait-while-first-setup - adduser tester --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password && echo "tester:password" | chpasswd
script: script:
- FREDOMBOX_URL=https://localhost FREEDOMBOX_SSH_PORT=22 FREEDOMBOX_SAMBA_PORT=445 pytest -v --durations=10 --include-functional --splinter-headless --instafail --template=html1/index.html --report=functional-tests.html - cp -r . /home/tester/freedombox && chown -R tester:tester /home/tester/freedombox
- |
sudo APP_SERVER_URL_1="https://$APP_SERVER_IP_1" APP_SERVER_URL_2="https://$APP_SERVER_IP_2" -u tester bash -c \
'cd /home/tester/freedombox && py.test-3 -v --durations=10 --include-functional --splinter-headless -n 2 --dist=loadscope --template=html1/index.html --report=functional-tests.html'
after_script:
- echo "INSTANCE_ID_1=$INSTANCE_ID_1" >> app-servers.env
- echo "INSTANCE_ID_2=$INSTANCE_ID_2" >> app-servers.env
- cp /home/tester/freedombox/functional-tests.html .
- cp -r /home/tester/freedombox/screenshots/ .
artifacts: artifacts:
when: always when: always
reports:
dotenv: app-servers.env
paths: paths:
- functional-tests.html - functional-tests.html
- screenshots/ - screenshots/
- plinth.log
# Does not run if the previous job times out or is cancelled
.terminate-app-server:
stage: functional-tests
script:
- export AWS_DEFAULT_REGION=us-east-1
- |
aws lambda invoke --function-name terminate_app_server --payload '{"instance_id": "'"$INSTANCE_ID_1"'"}' response.json
aws lambda invoke --function-name terminate_app_server --payload '{"instance_id": "'"$INSTANCE_ID_2"'"}' response.json
tags:
- functional-tests

View File

@ -1,21 +0,0 @@
concurrent = 1
check_interval = 0
[[runners]]
name = "freedombox-functional"
url = "https://salsa.debian.org"
token = "<insert-server-provided-token-here>"
executor = "custom"
builds_dir = "/freedombox"
cache_dir = "/cache"
[runners.custom]
prepare_exec = "/var/lib/fbx-functional/bin/prepare.sh"
prepare_exec_timeout = 1200
run_exec = "/var/lib/fbx-functional/bin/run.sh"
cleanup_exec = "/var/lib/fbx-functional/bin/cleanup.sh"
cleanup_exec_timeout = 1200
graceful_kill_timeout = 200
force_kill_timeout = 200

View File

@ -1,7 +0,0 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
This directory contains a custom driver for Gitlab-CI Runner. This is used to
run functional tests.
Based on https://docs.gitlab.com/runner/executors/custom_examples/lxd.html under
Expat license.

View File

@ -1,4 +0,0 @@
#!/usr/bin/bash
# SPDX-License-Identifier: AGPL-3.0-or-later
CONTAINER_ID="runner-$CUSTOM_ENV_CI_RUNNER_ID-project-$CUSTOM_ENV_CI_PROJECT_ID-concurrent-$CUSTOM_ENV_CI_CONCURRENT_PROJECT_ID-$CUSTOM_ENV_CI_JOB_ID"

View File

@ -1,10 +0,0 @@
#!/usr/bin/bash
# SPDX-License-Identifier: AGPL-3.0-or-later
current_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source ${current_dir}/base.sh # Get variables from base.
echo "Deleting container $CONTAINER_ID"
podman container stop "$CONTAINER_ID"
podman container rm -f "$CONTAINER_ID"

View File

@ -1,48 +0,0 @@
#!/usr/bin/bash
# SPDX-License-Identifier: AGPL-3.0-or-later
current_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source ${current_dir}/base.sh # Get variables from base.
set -eo pipefail
# trap any error, and mark it as a system failure.
trap "exit $SYSTEM_FAILURE_EXIT_CODE" ERR
start_container () {
if podman container exists "$CONTAINER_ID" ; then
echo 'Found old container, deleting'
podman container stop "$CONTAINER_ID"
podman container rm -f "$CONTAINER_ID"
fi
podman pull registry.salsa.debian.org/freedombox-team/freedombox:functional-tests-stable
podman run --name "$CONTAINER_ID" --systemd=always \
--privileged \
--cap-add=SYS_ADMIN --cap-add=NET_ADMIN --cap-add=MKNOD \
--detach registry.salsa.debian.org/freedombox-team/freedombox:functional-tests-stable /sbin/init
if podman exec "$CONTAINER_ID" systemctl is-system-running --wait; then
echo 'Container started.'
else
echo 'Container started degraded.'
fi
}
install_dependencies () {
podman exec "$CONTAINER_ID" /usr/bin/bash <<EOF
set -eo pipefail
echo 'Package: *' > /etc/apt/preferences.d/unstable
echo 'Pin: release a=unstable' >> /etc/apt/preferences.d/unstable
echo 'Pin-Priority: 400' >> /etc/apt/preferences.d/unstable
echo 'deb http://deb.debian.org/debian unstable main' > /etc/apt/sources.list.d/unstable.list
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y gitlab-runner git-lfs
EOF
}
echo "Running in $CONTAINER_ID"
start_container
install_dependencies

View File

@ -1,14 +0,0 @@
#!/usr/bin/bash
# SPDX-License-Identifier: AGPL-3.0-or-later
set -eo pipefail
current_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source ${current_dir}/base.sh # Get variables from base.
podman exec --interactive "$CONTAINER_ID" /bin/bash < "${1}"
if [ $? -ne 0 ]; then
# Exit using the variable, to make the build as failure in GitLab
# CI.
exit $BUILD_FAILURE_EXIT_CODE
fi

View File

@ -1,11 +0,0 @@
#! /bin/bash
# SPDX-License-Identifier: AGPL-3.0-or-later
CONTAINER=$1
CONTAINER="${CONTAINER:-gitlabci}"
podman login registry.salsa.debian.org
# Build and upload a new image to the container registry
podman build -t registry.salsa.debian.org/freedombox-team/freedombox:${CONTAINER} -f .ci/Containerfile.${CONTAINER} .
podman push registry.salsa.debian.org/freedombox-team/freedombox:${CONTAINER}

View File

@ -0,0 +1,8 @@
#! /bin/bash
# SPDX-License-Identifier: AGPL-3.0-or-later
docker login registry.salsa.debian.org
# Build and upload a new image to the container registry
DOCKER_BUILDKIT=1 docker build -t registry.salsa.debian.org/freedombox-team/freedombox:gitlabci -f .ci/Dockerfile.gitlabci .
docker push registry.salsa.debian.org/freedombox-team/freedombox:gitlabci

2
.gitignore vendored
View File

@ -4,7 +4,7 @@
doc/manual/*/*.pdf doc/manual/*/*.pdf
doc/manual/*/*.html doc/manual/*/*.html
doc/manual/*/*.xml doc/manual/*/*.xml
doc/*.1 doc/plinth.1
doc/dev/_build doc/dev/_build
\#* \#*
.#* .#*

View File

@ -47,16 +47,73 @@ doc-tests:
script: script:
- make check-doc - make check-doc
run-functional-tests-stable: .app-server-stable:
variables:
LAUNCH_TEMPLATE_NAME: functional-tests-stable
INSTANCE_NAME: app-server-stable
BUILD_JOB_NAME: build-backports
extends: .app-server
.run-functional-tests-stable:
needs:
- job: app-server-stable
artifacts: true
extends: .run-functional-tests extends: .run-functional-tests
.terminate-app-server-stable:
needs:
- job: run-functional-tests-stable
artifacts: true
extends: .terminate-app-server
.app-server-testing:
variables:
LAUNCH_TEMPLATE_NAME: functional-tests-testing
INSTANCE_NAME: app-server-testing
BUILD_JOB_NAME: build
extends: .app-server
.run-functional-tests-testing:
needs:
- job: app-server-testing
artifacts: true
extends: .run-functional-tests
.terminate-app-server-testing:
needs:
- job: run-functional-tests-testing
artifacts: true
extends: .terminate-app-server
.app-server-unstable:
variables:
LAUNCH_TEMPLATE_NAME: functional-tests-unstable
INSTANCE_NAME: app-server-unstable
BUILD_JOB_NAME: build
extends: .app-server
.run-functional-tests-unstable:
needs:
- job: app-server-unstable
artifacts: true
extends: .run-functional-tests
.terminate-app-server-unstable:
needs:
- job: run-functional-tests-unstable
artifacts: true
extends: .terminate-app-server
extract-source:
extends: .provisioning-extract-source
build: build:
extends: .build-package extends: .build-package
build-backports: build-backports:
extends: .build-package extends: .build-package
variables: variables:
RELEASE: trixie-backports RELEASE: bookworm-backports
build i386: build i386:
extends: .build-package-i386 extends: .build-package-i386
@ -79,9 +136,8 @@ lintian:
# autopkgtest is flaky due to # autopkgtest is flaky due to
# https://salsa.debian.org/freedombox-team/freedombox/-/issues/2077 # https://salsa.debian.org/freedombox-team/freedombox/-/issues/2077
autopkgtest: #autopkgtest:
extends: .test-autopkgtest # extends: .test-autopkgtest
allow_failure: true
blhc: blhc:
extends: .test-blhc extends: .test-blhc

View File

@ -0,0 +1,16 @@
#!/usr/bin/python3
# -*- mode: python -*-
# SPDX-License-Identifier: AGPL-3.0-or-later
"""Set required permissions for user "plinth" to run plinth in dev setup."""
import pathlib
content = '''
Cmnd_Alias FREEDOMBOX_ACTION_DEV = /usr/share/plinth/actions/actions, /freedombox/actions/actions
Defaults!FREEDOMBOX_ACTION_DEV closefrom_override
plinth ALL=(ALL:ALL) NOPASSWD:SETENV : FREEDOMBOX_ACTION_DEV
fbx ALL=(ALL:ALL) NOPASSWD : ALL
'''
sudoers_file = pathlib.Path('/etc/sudoers.d/01-freedombox-development')
sudoers_file.write_text(content)

View File

@ -34,8 +34,8 @@ Naming conventions:
tools `yapf` and `isort`. Please check also with `flake8`. tools `yapf` and `isort`. Please check also with `flake8`.
* Please include one single feature per merge request, to keep the review simple * Please include one single feature per merge request, to keep the review simple
and focused on one topic. (This might still mean hundreds of lines of code.) and focused on one topic. (This might still mean hundreds of lines of code.)
Use a branch other than `main`, so you can create multiple merge requests Use a branch other than `master`, so you can create multiple merge requests
and still keep merging from `main`. Depending on the complexity of your and still keep merging from `master`. Depending on the complexity of your
merge request, it may take a while until it is reviewed and merged. merge request, it may take a while until it is reviewed and merged.
* Keep your commits organized logically and as small as possible. If commit B * Keep your commits organized logically and as small as possible. If commit B
fixes a mistake in commit A, both of which are part of the same merge request, fixes a mistake in commit A, both of which are part of the same merge request,

View File

@ -1,9 +1,9 @@
# License to Copy FreedomBox Service (Plinth) # License to Copy FreedomBox Service (Plinth)
FreedomBox Service (Plinth) is Copyright 2011, 2012, 2013, 2014, 2015, 2016, FreedomBox Service (Plinth) is Copyright 2011, 2012, 2013, 2014, 2015,
2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025 FreedomBox Authors. See Git 2016, 2017, 2018, 2019 FreedomBox Authors. See Git log in the source
log in the source repository for a full list of authors. It is distributed under repository for a full list of authors. It is distributed under the GNU
the GNU Affero General Public License, Version 3 or later. A copy of AGPLv3 is Affero General Public License, Version 3 or later. A copy of AGPLv3 is
available [from the Free Software available [from the Free Software
Foundation](http://www.gnu.org/licenses/agpl.html). Foundation](http://www.gnu.org/licenses/agpl.html).

View File

@ -66,7 +66,7 @@ development environment inside a systemd-nspawn container.
folder: (This step requires at least 16GB of free disk space) folder: (This step requires at least 16GB of free disk space)
```bash ```bash
host$ ./container start host$ ./container up
``` ```
1. To run unit tests: 1. To run unit tests:
@ -97,43 +97,23 @@ development environment inside a systemd-nspawn container.
1. Using an environment variable. 1. Using an environment variable.
```bash ```bash
host$ DISTRIBUTION=stable ./container start host$ DISTRIBUTION=stable ./container up
host$ DISTRIBUTION=stable ./container ssh host$ DISTRIBUTION=stable ./container ssh
``` ```
```bash ```bash
host$ export DISTRIBUTION=stable host$ export DISTRIBUTION=stable
host$ ./container start host$ ./container up
host$ ./container ssh host$ ./container ssh
``` ```
2. Using the `--distribution` option for each command. 2. Using the `--distribution` option for each command.
```bash ```bash
host$ ./container start --distribution=stable host$ ./container up --distribution=stable
host$ ./container ssh --distribution=stable host$ ./container ssh --distribution=stable
``` ```
#### Using KVM Virtual Machine
The `./container` script, shipped with FreedomBox source code, can manage the
development environment inside a KVM-based virtual machine using libvirt. This
is an alternative to using containers described above (but the name of the
script is still 'container' even when managing virtual machines). Some hardware,
such as additional disks, can be better tested with virtual machine than with
containers.
Containers and a virtual machines of the same or different distribution all be
used simultaneously as they all use different disk images.
1. To use virtual machines instead of container, append the option
'--machine-type=vm' to all the ./container commands described above. For
example, to bring up a virtual machine instead of a container run:
```bash
host$ ./container start --machine-type=vm
```
#### Using after Setup #### Using after Setup
After logging into the container, the source code is available in `/freedombox` After logging into the container, the source code is available in `/freedombox`
@ -143,12 +123,12 @@ directory:
guest$ cd /freedombox guest$ cd /freedombox
``` ```
FreedomBox Service runs as plinth.service in the container. This service Run the development version of FreedomBox Service in the container using the
restarts when it detects a change to the source code file. This provides a quick following command. This command continuously deploys your code changes into the
feedback cycle during development. To watch service logs run: container providing a quick feedback cycle during development.
```bash ```bash
guest$ sudo freedombox-logs guest$ freedombox-develop
``` ```
If you have changed any system configuration files during your development, If you have changed any system configuration files during your development,
@ -156,17 +136,16 @@ you will need to run the following to install those files properly on to the
system and their changes to reflect properly. system and their changes to reflect properly.
```bash ```bash
guest$ sudo make build install ; guest$ sudo make build install
guest$ sudo systemctl restart plinth.service
``` ```
Note: This development container has automatic upgrades disabled by default. Note: This development container has automatic upgrades disabled by default.
#### Troubleshooting #### Troubleshooting
* Sometimes `host$ ./container destroy && ./container start` doesn't work. In such * Sometimes `host$ ./container destroy && ./container up` doesn't work. In such
cases, try to delete the hidden `.container` folder and then `host$ cases, try to delete the hidden `.container` folder and then `host$
./container start`. ./container up`.
* Not all kinds of changes are automatically updated. Try `guest$ sudo mount -o * Not all kinds of changes are automatically updated. Try `guest$ sudo mount -o
remount /freedombox`. remount /freedombox`.
* I am getting an error that says `lo` is not managed by Network Manager * I am getting an error that says `lo` is not managed by Network Manager
@ -178,7 +157,7 @@ Note: This development container has automatic upgrades disabled by default.
```bash ```bash
host$ sudo touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf host$ sudo touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf
host$ sudo service network-manager restart host$ sudo service network-manager restart
host$ ./container destroy && ./container start host$ ./container destroy && ./container up
``` ```
* File/directory not found errors when running tests can be fixed by clearing `__pycache__` directories. * File/directory not found errors when running tests can be fixed by clearing `__pycache__` directories.
@ -374,12 +353,13 @@ After logging into the virtual machine (VM), the source code is available in
vm$ cd /freedombox vm$ cd /freedombox
``` ```
FreedomBox Service runs as plinth.service in the virtual machine. This service Run the development version of FreedomBox Service (Plinth) from your source
restarts when it detects a change to the source code file. This provides a quick directory in the virtual machine using the following command. This command
feedback cycle during development. To watch service logs run: continuously deploys your code changes into the virtual machine providing a
quick feedback cycle during development.
```bash ```bash
vm$ sudo freedombox-logs vm$ freedombox-develop
``` ```
If you have changed any system configuration files during your development, If you have changed any system configuration files during your development,
@ -416,7 +396,7 @@ for more details.
### Translating literals (contributing translations) ### Translating literals (contributing translations)
The easiest way to start translating is with your browser, by using The easiest way to start translating is with your browser, by using
[Weblate](https://hosted.weblate.org/projects/freedombox/freedombox/). [Weblate](https://hosted.weblate.org/projects/freedombox/plinth/).
Your changes will automatically get pushed to the code repository. Your changes will automatically get pushed to the code repository.
Alternatively, you can directly edit the `.po` file in your language directory Alternatively, you can directly edit the `.po` file in your language directory
@ -609,19 +589,6 @@ installed.
$ py.test-3 -n 4 --dist=loadfile --include-functional -m essential $ py.test-3 -n 4 --dist=loadfile --include-functional -m essential
``` ```
#### Enabling all apps
When testing distribution upgrades from a stable release to next stable release
or testing, it is beneficial to install all available FreedomBox applications.
There is a script available to perform operation.
In the VM or container, run the following command:
```
guest$ cd /freedombox
guest$ sudo make build install
guest$ plinth/tests/functional/enable-all-apps
```
[back to index](#hacking) [back to index](#hacking)

View File

@ -35,7 +35,7 @@ FreedomBox [Manual](https://wiki.debian.org/FreedomBox/Manual/)'s
3. Access FreedomBox UI: 3. Access FreedomBox UI:
UI should be accessible at http://localhost:8000/freedombox UI should be accessible at http://localhost:8000/plinth
If you are installing FreedomBox Service (Plinth) for development purposes, see If you are installing FreedomBox Service (Plinth) for development purposes, see
HACKING.md instead. HACKING.md instead.

View File

@ -19,10 +19,7 @@ DISABLED_APPS_TO_REMOVE := \
restore \ restore \
repro \ repro \
tahoe \ tahoe \
mldonkey \ mldonkey
i2p \
ttrss \
sso
APP_FILES_TO_REMOVE := $(foreach app,$(DISABLED_APPS_TO_REMOVE),$(ENABLED_APPS_PATH)/$(app)) APP_FILES_TO_REMOVE := $(foreach app,$(DISABLED_APPS_TO_REMOVE),$(ENABLED_APPS_PATH)/$(app))
@ -39,7 +36,6 @@ DIRECTORIES_TO_CREATE := \
STATIC_FILES_DIRECTORY := $(DESTDIR)/usr/share/plinth/static STATIC_FILES_DIRECTORY := $(DESTDIR)/usr/share/plinth/static
BIN_DIR := $(DESTDIR)/usr/bin BIN_DIR := $(DESTDIR)/usr/bin
LIB_DIR := $(DESTDIR)/usr/lib
FIND_ARGS := \ FIND_ARGS := \
-not -iname "*.log" \ -not -iname "*.log" \
@ -53,19 +49,14 @@ FIND_ARGS := \
-not -iname ".*" \ -not -iname ".*" \
-not -iname "sessionid*" \ -not -iname "sessionid*" \
-not -iname "~*" \ -not -iname "~*" \
-not -iname "django-secret.key" \ -not -iname "django-secret.key"
-not -iwholename "*/.mypy_cache/*"
ROOT_DATA_FILES := $(shell find data -type f $(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 plinth/modules/*/data) -type f $(FIND_ARGS))
update-translations: update-translations:
$(DJANGO_ADMIN) makemessages --all --domain django --keep-pot \ cd plinth; $(DJANGO_ADMIN) makemessages --all --domain django --keep-pot --verbosity=1
--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 .
configure: configure:
# Nothing to do # Nothing to do
@ -78,7 +69,6 @@ build:
$(MAKE) -C doc -j 8 $(MAKE) -C doc -j 8
# Build .whl package # Build .whl package
rm -f dist/plinth-*.whl
$(PYTHON) -m build --no-isolation --skip-dependency-check --wheel $(PYTHON) -m build --no-isolation --skip-dependency-check --wheel
install: install:
@ -102,12 +92,12 @@ install:
$(INSTALL) -d $(DESTDIR)$${lib_dir} && \ $(INSTALL) -d $(DESTDIR)$${lib_dir} && \
rm -rf $(DESTDIR)$${lib_dir}/plinth $(DESTDIR)$${lib_dir}/plinth*.dist-info && \ rm -rf $(DESTDIR)$${lib_dir}/plinth $(DESTDIR)$${lib_dir}/plinth*.dist-info && \
mv $${temp}/plinth $${temp}/plinth*.dist-info $(DESTDIR)$${lib_dir} && \ 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/COPYING.md && \
rm -f $(DESTDIR)$${lib_dir}/plinth*.dist-info/direct_url.json && \ rm -f $(DESTDIR)$${lib_dir}/plinth*.dist-info/direct_url.json && \
$(INSTALL) -D -t $(BIN_DIR) bin/plinth $(INSTALL) -D -t $(BIN_DIR) bin/plinth
$(INSTALL) -D -t $(LIB_DIR)/freedombox bin/freedombox-privileged
$(INSTALL) -D -t $(BIN_DIR) bin/freedombox-cmd # Actions
$(INSTALL) -D -t $(BIN_DIR) bin/freedombox-change-password $(INSTALL) -D -t $(DESTDIR)/usr/share/plinth/actions actions/actions
# Static web server files # Static web server files
rm -rf $(STATIC_FILES_DIRECTORY) rm -rf $(STATIC_FILES_DIRECTORY)
@ -142,7 +132,7 @@ check-tests-cov:
# Code quality checking using flake8 # Code quality checking using flake8
check-code: check-code:
$(PYTHON) -m flake8 plinth container $(PYTHON) -m flake8 plinth actions/actions container
# Static type checking using mypy # Static type checking using mypy
check-type: check-type:
@ -157,23 +147,6 @@ clean:
rm -rf Plinth.egg-info rm -rf Plinth.egg-info
find plinth/locale -name *.mo -delete find plinth/locale -name *.mo -delete
define DEVELOP_SERVICE_CONF
[Service]
Environment=FREEDOMBOX_DEVELOP=1
Environment=PYTHONPATH=/freedombox/
endef
export DEVELOP_SERVICE_CONF
define DEVELOP_LOGS_SCRIPT
#!/usr/bin/bash
set -e
set -x
journalctl --follow --unit=plinth.service --unit=freedombox-privileged.service
endef
export DEVELOP_LOGS_SCRIPT
# Run basic setup for a developer environment (VM or container) # Run basic setup for a developer environment (VM or container)
provision-dev: provision-dev:
# Install newer build dependencies if any # Install newer build dependencies if any
@ -183,29 +156,9 @@ provision-dev:
# Install latest code over .deb # Install latest code over .deb
$(MAKE) build install $(MAKE) build install
# Configure privileged and web daemon for development setup
mkdir -p /etc/systemd/system/freedombox-privileged.service.d/
echo "$$DEVELOP_SERVICE_CONF" > /etc/systemd/system/freedombox-privileged.service.d/develop.conf
mkdir -p /etc/systemd/system/plinth.service.d/
echo "$$DEVELOP_SERVICE_CONF" > /etc/systemd/system/plinth.service.d/develop.conf
# Create a command to easily watch service logs
echo "$$DEVELOP_LOGS_SCRIPT" > /usr/bin/freedombox-logs
chmod 755 /usr/bin/freedombox-logs
# Reload newer systemd units, ignore failure # Reload newer systemd units, ignore failure
-systemctl daemon-reload -systemctl daemon-reload
# Enable privileged daemon
-systemctl stop freedombox-privileged.service
-test -d /run/systemd/system && \
systemctl enable --now freedombox-privileged.socket
# Enable and restart plinth service if it is running
-systemctl enable plinth.service
-systemctl restart plinth.service
# Stop any ongoing upgrade, ignore failure # Stop any ongoing upgrade, ignore failure
-killall -9 unattended-upgr -killall -9 unattended-upgr
@ -221,21 +174,10 @@ provision-dev:
$$(sudo -u plinth ./run --develop --list-dependencies) $$(sudo -u plinth ./run --develop --list-dependencies)
apt-mark unhold freedombox apt-mark unhold freedombox
# DNS resolution may be broken by upgrade to systemd-resolved. See
# #1079819 and ##1032937.
-systemctl restart systemd-resolved
-nmcli general reload dns-rc
# Install additional packages # Install additional packages
DEBIAN_FRONTEND=noninteractive apt-get install --yes ncurses-term \ DEBIAN_FRONTEND=noninteractive apt-get install --yes ncurses-term \
sshpass bash-completion sshpass bash-completion
wait-while-first-setup:
while [ x$$(curl -k https://localhost/freedombox/status/ 2> /dev/null | \
json_pp 2> /dev/null | grep 'is_first_setup_running' | \
tr -d '[:space:]' | cut -d':' -f2 ) != 'xfalse' ] ; do \
sleep 1; echo -n .; done
.PHONY: \ .PHONY: \
build \ build \
check \ check \
@ -248,5 +190,4 @@ wait-while-first-setup:
configure \ configure \
install \ install \
provision \ provision \
update-translations \ update-translations
wait-while-first-setup

View File

@ -1,4 +1,4 @@
[![pipeline status](https://salsa.debian.org/freedombox-team/freedombox/badges/main/pipeline.svg)](https://salsa.debian.org/freedombox-team/freedombox/commits/main) [![pipeline status](https://salsa.debian.org/freedombox-team/freedombox/badges/master/pipeline.svg)](https://salsa.debian.org/freedombox-team/freedombox/commits/master)
[![Translation status](https://hosted.weblate.org/widgets/freedombox/-/svg-badge.svg)](https://hosted.weblate.org/engage/freedombox/?utm_source=widget) [![Translation status](https://hosted.weblate.org/widgets/freedombox/-/svg-badge.svg)](https://hosted.weblate.org/engage/freedombox/?utm_source=widget)
[![Debian Unstable](https://badges.debian.net/badges/debian/unstable/freedombox/version.svg)](https://packages.debian.org/unstable/freedombox) [![Debian Unstable](https://badges.debian.net/badges/debian/unstable/freedombox/version.svg)](https://packages.debian.org/unstable/freedombox)
[![Debian Testing](https://badges.debian.net/badges/debian/testing/freedombox/version.svg)](https://packages.debian.org/testing/freedombox) [![Debian Testing](https://badges.debian.net/badges/debian/testing/freedombox/version.svg)](https://packages.debian.org/testing/freedombox)
@ -58,16 +58,8 @@ HACKING.md.
# Contributing # Contributing
See the [HACKING.md](https://salsa.debian.org/freedombox-team/freedombox/blob/main/HACKING.md) file for contributing to FreedomBox Service (Plinth). See the [HACKING.md](https://salsa.debian.org/freedombox-team/freedombox/blob/master/HACKING.md) file for contributing to FreedomBox Service (Plinth).
# Localization # Localization
[![Translation status](https://hosted.weblate.org/widget/freedombox/horizontal-auto.svg)](https://hosted.weblate.org/engage/freedombox/) [![Translation status](https://hosted.weblate.org/widgets/freedombox/-/287x66-white.png)](https://hosted.weblate.org/engage/freedombox/?utm_source=widget)
# License
[![GNU AGPLv3 Image](https://www.gnu.org/graphics/agplv3-155x51.png)](https://www.gnu.org/licenses/agpl-3.0.html)
FreedomBox is distributed under the GNU Affero General Public License, Version 3
or later. A copy of [AGPLv3](http://www.gnu.org/licenses/agpl.html) is available
from the Free Software Foundation.

24
Vagrantfile vendored
View File

@ -6,13 +6,13 @@ require 'etc'
Vagrant.configure(2) do |config| Vagrant.configure(2) do |config|
config.vm.box = "freedombox/freedombox-testing-dev" config.vm.box = "freedombox/freedombox-testing-dev"
config.vm.network "public_network" config.vm.network "forwarded_port", guest: 443, host: 4430
config.vm.network "forwarded_port", guest: 445, host: 4450
config.vm.synced_folder ".", "/freedombox", owner: "plinth", group: "plinth" config.vm.synced_folder ".", "/freedombox", owner: "plinth", group: "plinth"
config.vm.provider "virtualbox" do |vb| config.vm.provider "virtualbox" do |vb|
vb.cpus = Etc.nprocessors vb.cpus = Etc.nprocessors
vb.memory = 2048 vb.memory = 2048
vb.linked_clone = true vb.linked_clone = true
vb.customize ["modifyvm", :id, "--firmware", "efi"]
end end
config.vm.provision "shell", run: 'always', inline: <<-SHELL config.vm.provision "shell", run: 'always', inline: <<-SHELL
# Disable automatic upgrades # Disable automatic upgrades
@ -24,18 +24,24 @@ Vagrant.configure(2) do |config|
config.vm.provision "shell", inline: <<-SHELL config.vm.provision "shell", inline: <<-SHELL
cd /freedombox/ cd /freedombox/
make provision-dev make provision-dev
echo 'alias freedombox-develop="cd /freedombox; sudo -u plinth /freedombox/run --develop"' >> /home/vagrant/.bashrc
SHELL SHELL
config.vm.provision "tests", run: "never", type: "shell", path: "plinth/tests/functional/install.sh" config.vm.provision "tests", run: "never", type: "shell", path: "plinth/tests/functional/install.sh"
config.vm.post_up_message = "FreedomBox virtual machine is ready config.vm.post_up_message = "FreedomBox virtual machine is ready
for development. To get the IP address: for development. You can run the development version of Plinth using
the following command.
$ vagrant ssh $ vagrant ssh
$ ip address show $ freedombox-develop
Plinth will be available at https://localhost:4430/plinth (with
FreedomBox interface will be available at https://<ip address>/freedombox an invalid SSL certificate).
(with an invalid SSL certificate). To watch logs:
$ vagrant ssh
$ sudo freedombox-logs
" "
config.trigger.after [:up, :resume, :reload] do |trigger|
trigger.info = "Set plinth user permissions for development environment"
trigger.run_remote = {
path: ".vagrant-scripts/plinth-user-permissions.py"
}
end
config.vm.boot_timeout=1200 config.vm.boot_timeout=1200
end end

7
actions/actions Executable file
View File

@ -0,0 +1,7 @@
#!/usr/bin/python3
# SPDX-License-Identifier: AGPL-3.0-or-later
from plinth.actions import privileged_main
if __name__ == '__main__':
privileged_main()

View File

@ -1,61 +0,0 @@
#!/usr/bin/python3
# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Utility to change user password in FreedomBox's Django database.
Usage:
$ freedombox-change-password <username>
"""
import argparse
import getpass
import sys
import plinth.web_framework
from plinth.modules.users import privileged
def main():
"""Ask for new password, setup Django and update a user's password."""
try:
plinth.web_framework.init()
except Exception:
_print('Error initializing Django.')
return
parser = argparse.ArgumentParser()
parser.add_argument('username',
help='Username of the account to change password for')
args = parser.parse_args()
username = args.username
password = getpass.getpass('Enter new password: ')
try:
_change_password(username, password)
privileged._set_user_password(username, password)
privileged._set_samba_user(username, password)
_print('Password updated in web interface, LDAP, and samba databases.')
except Exception as exception:
_print('Error setting password:', str(exception))
def _print(*args, **kwargs):
"""Write to stderr."""
print(*args, **kwargs, file=sys.stderr)
def _change_password(username: str, password: str):
"""Update the password in SQLite database file."""
from django.contrib.auth.models import User
try:
user = User.objects.get(username=username)
user.set_password(password)
user.save()
except User.DoesNotExist:
_print('User account does not exist:', username)
raise
if __name__ == '__main__':
main()

View File

@ -1,6 +0,0 @@
#!/usr/bin/python3
# SPDX-License-Identifier: AGPL-3.0-or-later
import plinth.privileged_daemon
plinth.privileged_daemon.client_main()

View File

@ -1,6 +0,0 @@
#!/usr/bin/python3
# SPDX-License-Identifier: AGPL-3.0-or-later
import plinth.privileged_daemon
plinth.privileged_daemon.main()

1332
container

File diff suppressed because it is too large Load Diff

View File

@ -16,14 +16,8 @@
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
# Automatically obtained certificates from Let's Encrypt # Automatically obtained certificates from Let's Encrypt
<IfFile /etc/letsencrypt/live/$domain/privkey.pem> SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem
SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem
SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem
</IfFile>
<IfFile !/etc/letsencrypt/live/$domain/privkey.pem>
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
</IfFile>
<FilesMatch "\.(cgi|shtml|phtml|php)$"> <FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars SSLOptions +StdEnvVars
@ -31,19 +25,6 @@
<Directory /usr/lib/cgi-bin> <Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars SSLOptions +StdEnvVars
</Directory> </Directory>
<IfFile /etc/apache2/includes/all-domains-include-freedombox.conf>
Include includes/all-domains-include-freedombox.conf
</IfFile>
<IfFile /etc/apache2/includes/all-domains-include.conf>
Include includes/all-domains-include.conf
</IfFile>
<IfFile /etc/apache2/includes/$domain-include-freedombox.conf>
Include includes/$domain-include-freedombox.conf
</IfFile>
<IfFile /etc/apache2/includes/$domain-include.conf>
Include includes/$domain-include.conf
</IfFile>
</VirtualHost> </VirtualHost>
</IfModule> </IfModule>
</Macro> </Macro>

View File

@ -12,7 +12,6 @@
# Don't redirect for onion sites as it is not needed and leads to # Don't redirect for onion sites as it is not needed and leads to
# unnecessary warning. # unnecessary warning.
RewriteCond %{HTTP_HOST} !^.*\.onion$ [NC] RewriteCond %{HTTP_HOST} !^.*\.onion$ [NC]
RewriteCond %{REQUEST_URI} !^/freedombox/apache/discover-idp/$ [NC]
ReWriteCond %{HTTPS} !=on ReWriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</LocationMatch> </LocationMatch>

View File

@ -39,16 +39,53 @@
</If> </If>
## ##
## Redirect traffic on home to /freedombox as part of turning the machine ## Redirect traffic on home to /plinth as part of turning the machine
## into FreedomBox server. Plinth then acts as a portal to reach all ## into FreedomBox server. Plinth then acts as a portal to reach all
## other services. ## other services.
## ##
<IfFile !/etc/apache2/conf-enabled/freedombox-apache-homepage.conf> RedirectMatch "^/$" "/plinth"
RedirectMatch "^/$" "/freedombox"
</IfFile>
## ##
## On all sites, provide FreedomBox on a default path: /freedombox ## Disable sending Referer (sic) header from FreedomBox web interface to
## external websites. This improves privacy by not disclosing FreedomBox
## domains/URLs to external domains. Apps such as blogs which want to popularize
## themselves with referrer header may still do so.
##
## A strict Content Security Policy.
## - @fonts are allowed only from FreedomBox itself.
## - <frame>/<iframe> sources are disabled.
## - <img> sources are allowed only from FreedomBox itself.
## - Manifest file is not allowed as there is none yet.
## - <audio>, <video>, <track> tags are not allowed yet.
## - <object>, <embed>, <applet> tags are not allowed yet.
## - Allow JS from FreedomBox itself (no inline and attribute scripts).
## - Allow inline CSS and CSS files from Freedombox itself.
## - Web worker sources are allowed only from FreedomBox itself (for JSXC).
## - All other fetch sources including Ajax are not allowed from FreedomBox
## itself.
## - <base> tag is not allowed.
## - No plugins types are alllowed since object-src is 'none'.
## - Form action should be to FreedomBox itself.
## - This interface may be not embedded in <frame>, <iframe>, etc. tags.
## - When serving HTTPS, don't allow HTTP assets.
##
## Enable strict sandboxing enabled with some exceptions:
## - Allow running Javascript.
## - Allow popups as sometimes we use <a target=_blank>
## - Allow forms to support configuration forms.
## -
##
## Disable browser guessing of MIME types. FreedoBox already sets good content
## types for all the common file types.
##
<LocationMatch "^/(plinth|freedombox)">
Header set Referrer-Policy 'same-origin'
Header set Content-Security-Policy "font-src 'self'; frame-src 'none'; img-src 'self'; manifest-src 'none'; media-src 'none'; object-src 'none'; script-src 'self'; style-src 'self'; worker-src 'self'; default-src 'self'; base-uri 'none'; sandbox allow-scripts allow-popups allow-forms allow-same-origin allow-downloads; form-action 'self'; frame-ancestors 'none'; block-all-mixed-content;"
Header set X-Content-Type-Options 'nosniff'
</LocationMatch>
##
## On all sites, provide FreedomBox on a default path: /plinth
## ##
## Requires the following Apache modules to be enabled: ## Requires the following Apache modules to be enabled:
## mod_headers ## mod_headers
@ -56,8 +93,7 @@
## mod_proxy_http ## mod_proxy_http
## ##
<Location /freedombox> <Location /freedombox>
ProxyPass http://127.0.0.1:8000/freedombox ProxyPass http://127.0.0.1:8000/plinth
ProxyPreserveHost On
## Send the scheme from user's request to enable Plinth to redirect ## Send the scheme from user's request to enable Plinth to redirect
## URLs, set cookies, set absolute URLs (if any) properly. ## URLs, set cookies, set absolute URLs (if any) properly.
RequestHeader set X-Forwarded-Proto 'https' env=HTTPS RequestHeader set X-Forwarded-Proto 'https' env=HTTPS
@ -71,20 +107,7 @@
RequestHeader unset X-Forwarded-For RequestHeader unset X-Forwarded-For
</Location> </Location>
<Location /plinth> <Location /plinth>
ProxyPass http://127.0.0.1:8000/freedombox ProxyPass http://127.0.0.1:8000/plinth
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto 'https' env=HTTPS
RequestHeader unset X-Forwarded-For
</Location>
<Location /.well-known/openid-configuration>
ProxyPass http://127.0.0.1:8000/freedombox/o/.well-known/openid-configuration
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto 'https' env=HTTPS
RequestHeader unset X-Forwarded-For
</Location>
<Location /.well-known/jwks.json>
ProxyPass http://127.0.0.1:8000/freedombox/o/.well-known/jwks.json
ProxyPreserveHost On
RequestHeader set X-Forwarded-Proto 'https' env=HTTPS RequestHeader set X-Forwarded-Proto 'https' env=HTTPS
RequestHeader unset X-Forwarded-For RequestHeader unset X-Forwarded-For
</Location> </Location>
@ -96,7 +119,7 @@
<Location ~ ^/favicon\.ico$> <Location ~ ^/favicon\.ico$>
<IfModule mod_rewrite.c> <IfModule mod_rewrite.c>
RewriteEngine On RewriteEngine On
RewriteRule /favicon\.ico$ "/freedombox/static/theme/img/favicon.ico" [PT] RewriteRule /favicon\.ico$ "/plinth/static/theme/img/favicon.ico" [PT]
</IfModule> </IfModule>
</Location> </Location>
@ -126,12 +149,3 @@ ErrorLog "|/usr/bin/systemd-cat --identifier=apache-error"
# records its own timestamp. # records its own timestamp.
ErrorLogFormat "[%-m:%l] [pid %P:tid %{g}T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i" ErrorLogFormat "[%-m:%l] [pid %P:tid %{g}T] %7F: %E: [client\ %a] %M% ,\ referer\ %{Referer}i"
CustomLog "|/usr/bin/systemd-cat --identifier=apache-access" vhost_combined CustomLog "|/usr/bin/systemd-cat --identifier=apache-access" vhost_combined
## When showing an index page for a directory listing, ensure that viewport's
## width is the same as the device's width. Directory index pages generated by
## mod_autoindex are reasonably suitable for mobile devices. However, without
## the directive, mobile devices will assume the page to be not-mobile friendly
## and use a larger view port than the device size.
<IfModule mod_autoindex.c>
IndexHeadInsert "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"
</IfModule>

View File

@ -1,3 +1,11 @@
#
# Allow plinth user to run plinth action scripts with superuser privileges
# without needing a password.
#
Cmnd_Alias FREEDOMBOX_ACTION = /usr/share/plinth/actions/actions
Defaults!FREEDOMBOX_ACTION closefrom_override
plinth ALL=(ALL:ALL) NOPASSWD:FREEDOMBOX_ACTION
# #
# On FreedomBox, allow all users in the 'admin' LDAP group to execute # On FreedomBox, allow all users in the 'admin' LDAP group to execute
# commands as root. # commands as root.

View File

@ -1,27 +0,0 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
[Unit]
Description=FreedomBox Privileged Service
Documentation=https://wiki.debian.org/FreedomBox/
# Don't hit the start rate limiting.
StartLimitIntervalSec=0
# Stop/restart along with .socket unit (invoked from dpkg scripts).
PartOf=freedombox-privileged.socket
# Uploaded files in /var/tmp/ are shared with FreedomBox web service.
JoinsNamespaceOf=plinth.service
[Service]
Type=notify
ExecStart=/usr/lib/freedombox/freedombox-privileged
TimeoutSec=300s
User=root
Group=root
NotifyAccess=main
# Uploaded files in /var/tmp/ are shared with FreedomBox web service by joining
# namespaces.
PrivateTmp=yes
Restart=on-failure
# Don't restart too fast
RestartSec=1
RestartSteps=3
RestartMaxDelaySec=5

View File

@ -1,16 +0,0 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
[Unit]
Description=FreedomBox Privileged Service Socket
Documentation=https://wiki.debian.org/FreedomBox/
[Socket]
Accept=no
ListenStream=/run/freedombox/privileged.socket
SocketUser=root
SocketGroup=root
SocketMode=0666
DirectoryMode=755
[Install]
WantedBy=sockets.target

View File

@ -5,13 +5,9 @@ Description=FreedomBox Service (Plinth)
Documentation=man:plinth(1) Documentation=man:plinth(1)
After=network.target After=network.target
StartLimitIntervalSec=0 StartLimitIntervalSec=0
# Uploaded files in /var/tmp/ are shared with FreedomBox privileged service.
JoinsNamespaceOf=freedombox-privileged.service
[Service] [Service]
Type=notify
ExecStart=/usr/bin/plinth ExecStart=/usr/bin/plinth
TimeoutSec=300s
Restart=on-failure Restart=on-failure
RestartSec=5 RestartSec=5
ExecReload=/bin/kill -HUP $MAINPID ExecReload=/bin/kill -HUP $MAINPID
@ -19,10 +15,6 @@ User=plinth
Group=plinth Group=plinth
StandardOutput=null StandardOutput=null
StandardError=null StandardError=null
NotifyAccess=main
# Uploaded files in /var/tmp/ are shared with FreedomBox privileged service by
# joining namespaces.
PrivateTmp=yes
[Install] [Install]
WantedBy=multi-user.target WantedBy=multi-user.target

2403
debian/changelog vendored

File diff suppressed because it is too large Load Diff

132
debian/control vendored
View File

@ -1,5 +1,6 @@
Source: freedombox Source: freedombox
Section: web Section: web
Priority: optional
Maintainer: FreedomBox packaging team <freedombox-pkg-team@lists.alioth.debian.org> Maintainer: FreedomBox packaging team <freedombox-pkg-team@lists.alioth.debian.org>
Uploaders: Uploaders:
Tzafrir Cohen <tzafrir@debian.org>, Tzafrir Cohen <tzafrir@debian.org>,
@ -14,70 +15,80 @@ Build-Depends:
dblatex, dblatex,
dh-python, dh-python,
docbook-xsl, docbook-xsl,
e2fsprogs <!nocheck>, e2fsprogs,
gir1.2-nm-1.0, gir1.2-nm-1.0,
libjs-bootstrap5 <!nocheck>, libjs-bootstrap4,
libjs-htmx <!nocheck>,
# Older libjs-bootstrap5 does not have proper dependency on popper.js >= 2.0
node-popper2 <!nocheck>,
pybuild-plugin-pyproject, pybuild-plugin-pyproject,
python3-all:any, python3-all:any,
python3-apt <!nocheck>, python3-apt,
python3-augeas, python3-augeas,
python3-bootstrapform <!nocheck>, python3-bootstrapform,
python3-build, python3-build,
python3-cherrypy3, python3-cherrypy3,
python3-configobj <!nocheck>, python3-configobj,
python3-cryptography <!nocheck>,
python3-dbus, python3-dbus,
python3-django <!nocheck>, python3-django (>= 1.11),
python3-django-axes <!nocheck>, python3-django-axes (>= 5.0.0),
python3-django-captcha <!nocheck>, python3-django-captcha,
# Explictly depend on ipware as it is optional dependecy of django-axes # Explictly depend on ipware as it is optional dependecy for future versions
python3-django-ipware <!nocheck>, # of django-axes.
python3-django-oauth-toolkit <!nocheck>, python3-django-ipware (>= 3),
python3-django-stronghold <!nocheck>, python3-django-stronghold (>= 0.3.0),
python3-flake8,
python3-gi, python3-gi,
python3-markupsafe, python3-markupsafe,
python3-mypy <!nocheck>, python3-mypy,
python3-pampy <!nocheck>, python3-openssl,
python3-pexpect, python3-pampy,
python3-paramiko,
python3-pip, python3-pip,
python3-psutil, python3-psutil,
python3-pytest <!nocheck>, python3-pytest,
python3-pytest-cov <!nocheck>, python3-pytest-cov,
python3-pytest-django <!nocheck>, python3-pytest-django,
python3-pytest-runner <!nocheck>, python3-pytest-runner,
python3-requests, python3-requests,
python3-ruamel.yaml, python3-ruamel.yaml,
python3-setuptools, python3-setuptools,
python3-systemd, python3-setuptools-git,
python3-typeshed <!nocheck>, # python3-tomli is not available in Bullseye
python3-tomli | python3-coverage (<< 6.0),
python3-typeshed,
python3-yaml, python3-yaml,
sshpass <!nocheck>, sshpass,
xmlto, xmlto,
xsltproc xsltproc
Standards-Version: 4.7.3 Standards-Version: 4.6.2
Homepage: https://salsa.debian.org/freedombox-team/freedombox Homepage: https://salsa.debian.org/freedombox-team/freedombox
Vcs-Git: https://salsa.debian.org/freedombox-team/freedombox.git Vcs-Git: https://salsa.debian.org/freedombox-team/freedombox.git
Vcs-Browser: https://salsa.debian.org/freedombox-team/freedombox Vcs-Browser: https://salsa.debian.org/freedombox-team/freedombox
Rules-Requires-Root: no
Package: freedombox Package: freedombox
Breaks: Breaks:
freedombox-setup (<< 0.13~),
plinth (<< 0.46.0~),
# Ensure fuse gets replaced by fuse3 on upgrades from buster s.t. sshfs can be installed. # Ensure fuse gets replaced by fuse3 on upgrades from buster s.t. sshfs can be installed.
fuse (<< 3), fuse (<< 3),
# If ufw is installed, remove it. See issue 2247. # If ufw is installed, remove it. See issue 2247.
ufw, ufw,
Replaces:
freedombox-setup (<< 0.13~),
plinth (<< 0.46.0~),
Architecture: all Architecture: all
Provides: plinth
Depends: Depends:
${python3:Depends}, ${python3:Depends},
${misc:Depends}, ${misc:Depends},
${freedombox:Depends}, ${freedombox:Depends},
adduser, adduser,
augeas-tools, augeas-tools,
bind9-dnsutils,
curl, curl,
debconf, debconf,
dnsutils,
e2fsprogs,
fonts-fork-awesome,
fonts-lato,
# sgdisk is used in storage app to expand GPT disks # sgdisk is used in storage app to expand GPT disks
gdisk, gdisk,
gettext, gettext,
@ -87,13 +98,14 @@ Depends:
ldapscripts, ldapscripts,
# For gdbus used to call hooks into service # For gdbus used to call hooks into service
libglib2.0-bin, libglib2.0-bin,
libjs-bootstrap5, libjs-bootstrap4,
libjs-htmx, libjs-jquery,
libjs-modernizr,
lsof, lsof,
netcat-openbsd, netcat-openbsd,
network-manager, network-manager,
# Older libjs-bootstrap5 does not have proper dependency on popper.js >= 2.0 # Ensure that nscd is installed rather than unscd.
node-popper2, nscd (>= 2),
ppp, ppp,
pppoe, pppoe,
python3-apt, python3-apt,
@ -103,17 +115,17 @@ Depends:
python3-cherrypy3, python3-cherrypy3,
python3-configobj, python3-configobj,
python3-dbus, python3-dbus,
python3-django, python3-django (>= 1.11),
python3-django-axes, python3-django-axes (>= 5.0.0),
python3-django-captcha, python3-django-captcha,
# Explictly depend on ipware as it is optional dependecy of django-axes # Explictly depend on ipware as it is optional dependecy for future versions
python3-django-ipware, # of django-axes.
python3-django-oauth-toolkit, python3-django-ipware (>= 3),
python3-django-stronghold, python3-django-stronghold,
python3-gi, python3-gi,
python3-markupsafe, python3-markupsafe,
python3-pampy, python3-pampy,
python3-pexpect, python3-paramiko,
python3-psutil, python3-psutil,
python3-requests, python3-requests,
python3-ruamel.yaml, python3-ruamel.yaml,
@ -122,29 +134,65 @@ Depends:
sudo, sudo,
wget, wget,
# Ensure fuse gets replaced by fuse3 on upgrades from buster s.t. sshfs can be installed. # Ensure fuse gets replaced by fuse3 on upgrades from buster s.t. sshfs can be installed.
fuse3, fuse3 (>= 3),
Recommends: Recommends:
# Temporarily moved from Depends due to piuparts bug #1010967. # Priority: standard
e2fsprogs, bzip2,
# Provides brctl for controlling bridges
bridge-utils,
# Read, write to char devices
devio,
# Create, repair DOS filesystems
dosfstools,
# Priority: standard
file,
# Wifi firmware # Wifi firmware
firmware-ath9k-htc, firmware-ath9k-htc,
# FreedomBox documentation # FreedomBox documentation
freedombox-doc-en, freedombox-doc-en,
freedombox-doc-es, freedombox-doc-es,
# Provide entropy using HAVEGE algorithm
haveged,
# Monitor system resources
htop,
# Monitor network traffic statistics
iftop,
# Basic network utitlity ping
iputils-ping,
# Manage wireless devices
iw,
# Resolve gateway.localhost
libnss-gw-name,
# Resolve .local address using mDNS # Resolve .local address using mDNS
libnss-mdns, libnss-mdns,
# Resolve current hostname without /etc/hosts # Resolve current hostname without /etc/hosts
libnss-myhostname, libnss-myhostname,
# Block repeated failed PAM login attempts
libpam-abl,
# Priority: standard # Priority: standard
locales, locales,
# Precompiled data for all locales # Precompiled data for all locales
locales-all, locales-all,
# Priority: standard # Priority: standard
openssh-client, openssh-client,
# Priority: standard
pciutils,
# Used by unattended-upgrades to check if running on AC power # Used by unattended-upgrades to check if running on AC power
powermgmt-base, powermgmt-base,
# fuser, killall, pstree and other utilities # fuser, pstree and other utilities
psmisc, psmisc,
# Manage /etc/resolv.conf
resolvconf,
# Tool to kill WLAN, Bluetooth and moble broadband
rfkill,
# Monitor network traffic
tcpdump,
# Basic editor, VIM style
vim-tiny,
# Priority: standard
whois,
# Basic editor, Emacs style
zile,
Description: easy to manage, privacy oriented home server Description: easy to manage, privacy oriented home server
FreedomBox is designed to be your own inexpensive server at home. It runs free FreedomBox is designed to be your own inexpensive server at home. It runs free
software and offers an increasing number of services ranging from a calendar or software and offers an increasing number of services ranging from a calendar or

345
debian/copyright vendored
View File

@ -2,7 +2,7 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Source: https://salsa.debian.org/freedombox-team/freedombox Source: https://salsa.debian.org/freedombox-team/freedombox
Files: * Files: *
Copyright: 2011-2026 FreedomBox Authors Copyright: 2011-2024 FreedomBox Authors
License: AGPL-3+ License: AGPL-3+
Files: plinth/modules/jsxc/static/icons/jsxc.png Files: plinth/modules/jsxc/static/icons/jsxc.png
@ -15,7 +15,7 @@ Files: doc/*.xml
doc/*.png doc/*.png
doc/*.jpg doc/*.jpg
doc/*.wiki doc/*.wiki
Copyright: 2011-2025 FreedomBox Authors Copyright: 2011-2023 FreedomBox Authors
License: CC-BY-SA-4.0 License: CC-BY-SA-4.0
Files: doc/visual_design/apple-touch-icon* Files: doc/visual_design/apple-touch-icon*
@ -38,11 +38,6 @@ Copyright: Marie Van den Broeck (https://thenounproject.com/marie49/)
Comment: https://thenounproject.com/icon/162372/ Comment: https://thenounproject.com/icon/162372/
License: CC-BY-SA-3.0 License: CC-BY-SA-3.0
Files: static/themes/default/js/color-modes.js
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: plinth/modules/bepasty/static/icons/bepasty.svg
Copyright: (c) 2014 by the Bepasty Team, see the AUTHORS file. 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 Comment: https://github.com/bepasty/bepasty-server/blob/master/src/bepasty/static/app/bepasty.svg
@ -69,8 +64,6 @@ Files: plinth/modules/ejabberd/static/icons/ejabberd.png
plinth/modules/ejabberd/static/icons/ejabberd.svg plinth/modules/ejabberd/static/icons/ejabberd.svg
plinth/modules/email/static/icons/email.png plinth/modules/email/static/icons/email.png
plinth/modules/email/static/icons/email.svg 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/matrixsynapse/static/icons/matrixsynapse.svg
plinth/modules/privoxy/static/icons/privoxy.png plinth/modules/privoxy/static/icons/privoxy.png
plinth/modules/privoxy/static/icons/privoxy.svg plinth/modules/privoxy/static/icons/privoxy.svg
@ -79,7 +72,6 @@ Files: plinth/modules/ejabberd/static/icons/ejabberd.png
plinth/modules/rssbridge/static/icons/rssbridge.svg plinth/modules/rssbridge/static/icons/rssbridge.svg
plinth/modules/zoph/static/icons/zoph.png plinth/modules/zoph/static/icons/zoph.png
plinth/modules/zoph/static/icons/zoph.svg plinth/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.svg
static/themes/default/img/network-connection-vertical.svg static/themes/default/img/network-connection-vertical.svg
static/themes/default/img/network-ethernet.svg static/themes/default/img/network-ethernet.svg
@ -101,11 +93,13 @@ Copyright: 2020 Adwaita Icon Theme Authors, GNOME Project
Comment: https://github.com/GNOME/adwaita-icon-theme/ http://www.gnome.org Comment: https://github.com/GNOME/adwaita-icon-theme/ http://www.gnome.org
License: LGPL-3 or CC-BY-SA-3.0-US License: LGPL-3 or CC-BY-SA-3.0-US
Files: plinth/modules/featherwiki/static/icons/featherwiki.png Files: static/themes/default/icons/f-droid.png
plinth/modules/featherwiki/static/icons/featherwiki.svg static/themes/default/icons/f-droid.svg
Copyright: 2022 Robbie Antenesse <dev@alamantus.com> Copyright: 2012 William Theaker
Comment: https://codeberg.org/Alamantus/FeatherWiki/src/branch/main/logo.svg 2013 Robert Martinez
License: AGPL-3+ 2015 Andrew Nayenko
Comment: https://gitlab.com/fdroid/artwork/blob/master/fdroid-logo-2015/fdroid-logo.svg
License: CC-BY-SA-3.0 or GPL-3+
Files: plinth/modules/gitweb/static/icons/gitweb.png Files: plinth/modules/gitweb/static/icons/gitweb.png
plinth/modules/gitweb/static/icons/gitweb.svg plinth/modules/gitweb/static/icons/gitweb.svg
@ -113,11 +107,14 @@ Copyright: 2010 Git Authors
Comment: https://github.com/git/git/blob/master/gitweb/static/git-logo.png Comment: https://github.com/git/git/blob/master/gitweb/static/git-logo.png
License: GPL-2 License: GPL-2
Files: plinth/modules/homeassistant/static/icons/homeassistant.png Files: static/themes/default/icons/google-play.png
plinth/modules/homeassistant/static/icons/homeassistant.svg Copyright: Chameleon Design (https://thenounproject.com/Chamedesign/)
Copyright: Home Assistant Core Developers Comment: https://thenounproject.com/icon/887917/
Comment: https://github.com/home-assistant/core/blob/dev/tests/components/image_upload/logo.png License: CC-BY-3.0-US
License: Apache-2.0
Files: static/themes/default/icons/gnu-linux.png
Copyright: 2017 Cowemoji
License: CC0-1.0
Files: plinth/modules/ikiwiki/static/icons/ikiwiki.png Files: plinth/modules/ikiwiki/static/icons/ikiwiki.png
plinth/modules/ikiwiki/static/icons/ikiwiki.svg plinth/modules/ikiwiki/static/icons/ikiwiki.svg
@ -132,10 +129,7 @@ License: ISC
Files: plinth/modules/janus/static/icons/janus.png Files: plinth/modules/janus/static/icons/janus.png
plinth/modules/janus/static/icons/janus.svg plinth/modules/janus/static/icons/janus.svg
plinth/modules/janus/static/janus-video-room.css Copyright: 2014-2022 Meetecho
plinth/modules/janus/static/janus-video-room.js
plinth/modules/janus/templates/janus_video_room.html
Copyright: 2014-2025 Meetecho
License: GPL-3 with OpenSSL exception License: GPL-3 with OpenSSL exception
Files: plinth/modules/kiwix/static/icons/kiwix.png Files: plinth/modules/kiwix/static/icons/kiwix.png
@ -144,6 +138,12 @@ Copyright: 2020 The other Kiwix guy
Comment: https://commons.wikimedia.org/wiki/File:Kiwix_logo_v3.svg Comment: https://commons.wikimedia.org/wiki/File:Kiwix_logo_v3.svg
License: CC-BY-SA-4.0 License: CC-BY-SA-4.0
Files: static/themes/default/icons/macos.png
static/themes/default/icons/macos.svg
Copyright: Vectors Market (https://thenounproject.com/vectorsmarket/)
Comment: https://thenounproject.com/icon/1203053/
License: CC-BY-SA-3.0
Files: plinth/modules/matrixsynapse/static/icons/matrixsynapse.png Files: plinth/modules/matrixsynapse/static/icons/matrixsynapse.png
Copyright: 2017 Kishan Raval Copyright: 2017 Kishan Raval
Comment: https://github.com/thekishanraval/Logos Comment: https://github.com/thekishanraval/Logos
@ -161,15 +161,9 @@ License: CC-BY-SA-3.0
Files: plinth/modules/minetest/static/icons/minetest.svg Files: plinth/modules/minetest/static/icons/minetest.svg
Copyright: 2015 Calinou, Nils Dagsson Moskopp Copyright: 2015 Calinou, Nils Dagsson Moskopp
Comment: https://github.com/luanti-org/luanti/blob/master/misc/luanti.svg Comment: https://github.com/minetest/minetest/blob/master/misc/minetest.svg
License: CC-BY-SA-3.0 License: CC-BY-SA-3.0
Files: plinth/modules/miniflux/static/icons/miniflux.png
plinth/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: plinth/modules/mumble/static/icons/mumble.png
Copyright: 2009 Martin Skilnand Copyright: 2009 Martin Skilnand
Comment: https://commons.wikimedia.org/wiki/File:Icons_mumble.svg Comment: https://commons.wikimedia.org/wiki/File:Icons_mumble.svg
@ -267,12 +261,6 @@ Copyright: Interface (https://www.shareicon.net/author/interface)
Comment: https://www.shareicon.net/universal-interface-interface-sharing-share-697502 Comment: https://www.shareicon.net/universal-interface-interface-sharing-share-697502
License: CC-BY-3.0 License: CC-BY-3.0
Files: plinth/modules/sogo/static/icons/sogo.png
plinth/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: plinth/modules/syncthing/static/icons/syncthing.png
Copyright: 2015 Jack Palevich <jack.palevich@gmail.com> Copyright: 2015 Jack Palevich <jack.palevich@gmail.com>
2014 The Syncthing Authors 2014 The Syncthing Authors
@ -284,13 +272,6 @@ Copyright: Jakob Borg and the Syncthing project
Comment: https://commons.wikimedia.org/wiki/File:SyncthingLogoHorizontal.svg Comment: https://commons.wikimedia.org/wiki/File:SyncthingLogoHorizontal.svg
License: MPL-2.0 License: MPL-2.0
Files: plinth/modules/tiddlywiki/static/icons/tiddlywiki.svg
plinth/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 Files: plinth/modules/tor/static/icons/tor.png
plinth/modules/tor/static/icons/tor.svg plinth/modules/tor/static/icons/tor.svg
Copyright: The Tor Project, Inc. Copyright: The Tor Project, Inc.
@ -304,12 +285,14 @@ Copyright: Transmission Authors
Comment: https://github.com/transmission/transmission/blob/master/gtk/icons/hicolor_apps_scalable_transmission.svg Comment: https://github.com/transmission/transmission/blob/master/gtk/icons/hicolor_apps_scalable_transmission.svg
License: GPL-3 License: GPL-3
Files: plinth/modules/upgrades/data/usr/share/augeas/lenses/aptsources.aug Files: plinth/modules/ttrss/static/icons/ttrss.png
plinth/modules/upgrades/data/usr/share/augeas/lenses/tests/test_aptsources.aug Copyright: Mark James <mjames@gmail.com>
Copyright: 2007-2025 David Lutterkort License: CC-BY-3.0
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 Files: plinth/modules/ttrss/static/icons/ttrss.svg
License: LGPL-2.1+ Copyright: 2005 Andrew Dolgov
Comment: https://git.tt-rss.org/fox/tt-rss/src/master/images/favicon-72px.png
License: GPL-3+
Files: plinth/modules/wordpress/static/icons/wordpress.png Files: plinth/modules/wordpress/static/icons/wordpress.png
plinth/modules/wordpress/static/icons/wordpress.svg plinth/modules/wordpress/static/icons/wordpress.svg
@ -317,6 +300,12 @@ Copyright: 2011-2021 WordPress Contributors
Comment: https://github.com/WordPress/wordpress-develop/blob/master/src/wp-admin/images/wordpress-logo.svg Comment: https://github.com/WordPress/wordpress-develop/blob/master/src/wp-admin/images/wordpress-logo.svg
License: GPL-2+ License: GPL-2+
Files: static/themes/default/icons/windows.png
static/themes/default/icons/windows.svg
Copyright: 2007 ruli (https://thenounproject.com/2007ruli/)
Comment: https://thenounproject.com/icon/1206946/
License: CC-BY-SA-3.0
Files: plinth/modules/wireguard/static/icons/wireguard.png Files: plinth/modules/wireguard/static/icons/wireguard.png
plinth/modules/wireguard/static/icons/wireguard.svg plinth/modules/wireguard/static/icons/wireguard.svg
Copyright: 2019 WireGuard LLC Copyright: 2019 WireGuard LLC
@ -328,88 +317,13 @@ Copyright: 2008 GNOME icon artists
Comment: https://commons.wikimedia.org/wiki/File:Gnome-computer.svg Comment: https://commons.wikimedia.org/wiki/File:Gnome-computer.svg
License: LGPL-3+ or CC-BY-SA-3.0 License: LGPL-3+ or CC-BY-SA-3.0
Files: static/themes/default/icons/adjust.svg Files: static/themes/default/lato/*
static/themes/default/icons/android.svg Copyright: (c) 2010-2014, Łukasz Dziedzic
static/themes/default/icons/arrow-right.svg
static/themes/default/icons/ban.svg
static/themes/default/icons/bar-chart.svg
static/themes/default/icons/bars.svg
static/themes/default/icons/bell-o.svg
static/themes/default/icons/book.svg
static/themes/default/icons/check-circle.svg
static/themes/default/icons/check.svg
static/themes/default/icons/chevron-right.svg
static/themes/default/icons/clock-o.svg
static/themes/default/icons/cog.svg
static/themes/default/icons/comments.svg
static/themes/default/icons/compass.svg
static/themes/default/icons/debian.svg
static/themes/default/icons/download.svg
static/themes/default/icons/eject.svg
static/themes/default/icons/exclamation-triangle.svg
static/themes/default/icons/external-link.svg
static/themes/default/icons/eye-slash.svg
static/themes/default/icons/eye.svg
static/themes/default/icons/f-droid.svg
static/themes/default/icons/files-o.svg
static/themes/default/icons/film.svg
static/themes/default/icons/flag.svg
static/themes/default/icons/freedombox.svg
static/themes/default/icons/frown-o.svg
static/themes/default/icons/globe-w.svg
static/themes/default/icons/gnu-linux.svg
static/themes/default/icons/google-play.svg
static/themes/default/icons/hdd-o.svg
static/themes/default/icons/heartbeat.svg
static/themes/default/icons/heart.svg
static/themes/default/icons/home.svg
static/themes/default/icons/hourglass-o.svg
static/themes/default/icons/info-circle.svg
static/themes/default/icons/key.svg
static/themes/default/icons/life-ring.svg
static/themes/default/icons/line-chart.svg
static/themes/default/icons/lock.svg
static/themes/default/icons/macos.svg
static/themes/default/icons/moon.svg
static/themes/default/icons/pencil-square-o.svg
static/themes/default/icons/plus.svg
static/themes/default/icons/poweroff.svg
static/themes/default/icons/question-circle.svg
static/themes/default/icons/refresh.svg
static/themes/default/icons/repeat.svg
static/themes/default/icons/rocket.svg
static/themes/default/icons/shield.svg
static/themes/default/icons/signal.svg
static/themes/default/icons/smile-o.svg
static/themes/default/icons/spinner.svg
static/themes/default/icons/star.svg
static/themes/default/icons/sun.svg
static/themes/default/icons/tags.svg
static/themes/default/icons/tag.svg
static/themes/default/icons/terminal.svg
static/themes/default/icons/th.svg
static/themes/default/icons/times.svg
static/themes/default/icons/trash-o.svg
static/themes/default/icons/trash.svg
static/themes/default/icons/upload.svg
static/themes/default/icons/user.svg
static/themes/default/icons/users.svg
static/themes/default/icons/wifi.svg
static/themes/default/icons/windows.svg
static/themes/default/icons/wrench.svg
Copyright: 2018, Fork Awesome
Comment: https://github.com/ForkAwesome/Fork-Awesome/tree/master/src/icons/svg/
License: OFL-1.1 License: OFL-1.1
Files: static/themes/default/icons/fedora.svg
static/themes/default/icons/homebrew.svg
Copyright: 2026, Simple Icons
Comment: https://github.com/simple-icons/simple-icons/
License: CC0-1.0
Files: debian/* Files: debian/*
Copyright: 2013 Tzafrir Cohen Copyright: 2013 Tzafrir Cohen
2013-2026 FreedomBox Authors 2013-2024 FreedomBox Authors
License: GPL-2+ License: GPL-2+
License: AGPL-3+ License: AGPL-3+
@ -2876,6 +2790,90 @@ License: MPL-2.0
On Debian systems, the complete text of the Mozilla Public License, v. 2.0 can On Debian systems, the complete text of the Mozilla Public License, v. 2.0 can
be found in "/usr/share/common-licenses/MPL-2.0". be found in "/usr/share/common-licenses/MPL-2.0".
License: OFL-1.1
PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.
.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.
.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.
.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
.
"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).
.
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.
.
"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.
.
PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
.
1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.
.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font
name as presented to the users.
.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
.
5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.
.
TERMINATION
This license becomes null and void if any of the above conditions are
not met.
.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
License: public-domain License: public-domain
This software has been placed into the public domain by its authors. This software has been placed into the public domain by its authors.
@ -2898,94 +2896,3 @@ License: Zlib
. .
3. This notice may not be removed or altered from any source 3. This notice may not be removed or altered from any source
distribution. distribution.
License: OFL-1.1
This Font Software is licensed under the SIL Open Font License,
Version 1.1.
.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
.
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
.
PREAMBLE The goals of the Open Font License (OFL) are to stimulate
worldwide development of collaborative font projects, to support the font
creation efforts of academic and linguistic communities, and to provide
a free and open framework in which fonts may be shared and improved in
partnership with others.
.
The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves.
The fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply to
any document created using the fonts or their derivatives.
.
DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such.
This may include source files, build scripts and documentation.
.
"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).
.
"Original Version" refers to the collection of Font Software components
as distributed by the Copyright Holder(s).
.
"Modified Version" refers to any derivative made by adding to, deleting,
or substituting ? in part or in whole ?
any of the components of the Original Version, by changing formats or
by porting the Font Software to a new environment.
.
"Author" refers to any designer, engineer, programmer, technical writer
or other person who contributed to the Font Software.
.
PERMISSION & CONDITIONS
.
Permission is hereby granted, free of charge, to any person obtaining a
copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:
.
1) Neither the Font Software nor any of its individual components, in
Original or Modified Versions, may be sold by itself.
.
2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.
.
3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the
corresponding Copyright Holder. This restriction only applies to the
primary font name as presented to the users.
.
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.
.
5) The Font Software, modified or unmodified, in part or in whole, must
be distributed entirely under this license, and must not be distributed
under any other license. The requirement for fonts to remain under
this license does not apply to any document created using the Font
Software.
.
TERMINATION
This license becomes null and void if any of the above conditions are not met.
.
DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER
DEALINGS IN THE FONT SOFTWARE.

View File

@ -19,12 +19,3 @@ freedombox binary: web-application-works-only-with-apache
# Not documentation # 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/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/plinth-*.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
# convention instead.
freedombox: executable-in-usr-lib [usr/lib/freedombox/freedombox-privileged]
# [Install] section is missing for the privileged daemon service because it is
# socket activated.
freedombox: systemd-service-file-missing-install-key [usr/lib/systemd/system/freedombox-privileged.service]

View File

@ -1,2 +1 @@
./doc/freedombox-cmd.1
./doc/plinth.1 ./doc/plinth.1

43
debian/freedombox.preinst vendored Executable file
View File

@ -0,0 +1,43 @@
#!/bin/sh
set -e
case "$1" in
upgrade)
# Handle removing freedombox-setup-repositories.timer from 20.5.
if dpkg --compare-versions "$2" le 20.7; then
if [ -x "/usr/bin/deb-systemd-invoke" ]; then
deb-systemd-invoke stop freedombox-setup-repositories.timer >/dev/null 2>/dev/null || true
fi
if [ -x "/usr/bin/deb-systemd-helper" ]; then
deb-systemd-helper purge freedombox-setup-repositories.timer >/dev/null || true
deb-systemd-helper unmask freedombox-setup-repositories.timer >/dev/null || true
fi
if [ -d /run/systemd/system ]; then
systemctl daemon-reload
fi
fi
# Handle removing freedombox-udiskie.service from 20.9.
if dpkg --compare-versions "$2" le 20.9; then
if [ -x "/usr/bin/deb-systemd-invoke" ]; then
deb-systemd-invoke stop freedombox-udiskie.service >/dev/null 2>/dev/null || true
fi
if [ -x "/usr/bin/deb-systemd-helper" ]; then
deb-systemd-helper purge freedombox-udiskie.service >/dev/null || true
deb-systemd-helper unmask freedombox-udiskie.service >/dev/null || true
fi
if [ -d /run/systemd/system ]; then
systemctl daemon-reload
fi
fi
;;
esac
#DEBHELPER#
exit 0

6
debian/gbp.conf vendored
View File

@ -1,9 +1,3 @@
[DEFAULT]
debian-branch = main
[buildpackage]
export-dir = ../build-area/
[dch] [dch]
git-log = --no-merges git-log = --no-merges
multimaint-merge = True multimaint-merge = True

36
debian/po/ca.po vendored
View File

@ -1,36 +0,0 @@
# Catalan translation of plinth's debconf messages
# Copyright © 2024 Free Software Foundation, Inc.
# This file is distributed under the same license as the plinth package.
# poc senderi <pocsenderi@protonmail.com>, 2024.
#
msgid ""
msgstr ""
"Project-Id-Version: plinth\n"
"Report-Msgid-Bugs-To: plinth@packages.debian.org\n"
"POT-Creation-Date: 2019-11-18 18:11-0500\n"
"PO-Revision-Date: 2024-11-05 22:18+0100\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Last-Translator: poc senderi <pocsenderi@protonmail.com>\n"
"Language-Team: Catalan <debian-l10n-catalan@lists.debian.org>\n"
"X-Generator: Poedit 2.4.2\n"
#. Type: note
#. Description
#: ../templates:1001
msgid "FreedomBox first wizard secret - ${secret}"
msgstr "Secret per a l'engegada inicial del «wizard» de FreedomBox - ${secret}"
#. Type: note
#. Description
#: ../templates:1001
msgid ""
"Please note down the above secret. You will be asked to enter this in the "
"first screen after you launch the FreedomBox web interface. In case you lose "
"it, you can retrieve it by running the following command:"
msgstr ""
"Anoteu el secret anterior. Us serà demanat a la primera pantalla després "
"d'engegar la interfície web del FreedomBox. En cas que el perdeu, el podeu "
"recuperar executant la següent ordre:"

34
debian/po/pt.po vendored
View File

@ -1,33 +1,31 @@
# Translation of freedombox debconf messages to European Portuguese # Translation of plinth debconf templates to Portuguese
# Copyright (C) 2019 FreedomBox packaging team <freedombox-pkg-team@lists.alioth.debian.org> # Copyright (C) 2019 FreedomBox packaging team <freedombox-pkg-team@lists.alioth.debian.org>
# This file is distributed under the same license as the freedombox package. # This file is distributed under the same license as the plinth package.
#
# Rui Branco - DebianPT <ruipb@debianpt.org>, 2018. # Rui Branco - DebianPT <ruipb@debianpt.org>, 2018.
# Américo Monteiro <a_monteiro@gmx.com>, 2025. #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: freedombox 25.9.1\n" "Project-Id-Version: plinth 0.37.0\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: plinth@packages.debian.org\n"
"POT-Creation-Date: 2025-06-07 15:09+0000\n" "POT-Creation-Date: 2019-11-18 18:11-0500\n"
"PO-Revision-Date: 2025-06-07 20:00+0100\n" "PO-Revision-Date: 2018-09-27 15:33+0100\n"
"Last-Translator: Américo Monteiro <a_monteiro@gmx.com>\n" "Last-Translator: Rui Branco - DebianPT <ruipb@debianpt.org>\n"
"Language-Team: Portuguese <>\n" "Language-Team: Portuguese <traduz@debianpt.org>\n"
"Language: pt\n" "Language: pt\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Lokalize 22.12.3\n"
#. Type: note #. Type: note
#. Description #. Description
#: ../freedombox.templates:1001 #: ../templates:1001
msgid "FreedomBox first wizard secret - ${secret}" msgid "FreedomBox first wizard secret - ${secret}"
msgstr "Primeiro segredo de feiticeiro FreedomBox - ${secret}" msgstr "Primeiro segredo FreedomBox - ${secret}"
#. Type: note #. Type: note
#. Description #. Description
#: ../freedombox.templates:1001 #: ../templates:1001
#, fuzzy
#| msgid "" #| msgid ""
#| "Please save this string. You will be asked to enter this in the first " #| "Please save this string. You will be asked to enter this in the first "
#| "screen after you launch the FreedomBox interface. In case you lose it, " #| "screen after you launch the FreedomBox interface. In case you lose it, "
@ -37,6 +35,6 @@ msgid ""
"first screen after you launch the FreedomBox web interface. In case you lose " "first screen after you launch the FreedomBox web interface. In case you lose "
"it, you can retrieve it by running the following command:" "it, you can retrieve it by running the following command:"
msgstr "" msgstr ""
"Por favor anote o segredo em cima. Irá ser-lhe pedido o introduzir no " "Por favor guarde esta 'string'. Ser-lhe-á pedido para a introduzir na "
"primeiro ecrã após lançar a interface web do FreedomBox. No caso de o " "primeira tela assim que lance a interface FreedomBox. No caso de a perder, "
"perder, consegue o obter ao correr o seguinte comando:" "poderá encontrá-la no ficheiro /var/lib/plinth/firstboot-wizard-secret."

18
debian/rules vendored
View File

@ -1,7 +1,5 @@
#!/usr/bin/make -f #!/usr/bin/make -f
include /usr/share/dpkg/pkg-info.mk
export DH_VERBOSE=1 export DH_VERBOSE=1
export PYBUILD_DESTDIR=debian/tmp export PYBUILD_DESTDIR=debian/tmp
export PYBUILD_SYSTEM=custom export PYBUILD_SYSTEM=custom
@ -11,8 +9,6 @@ export PYBUILD_INSTALL_ARGS=make PYTHON={interpreter} DESTDIR={destdir} install
export PYBUILD_CLEAN_ARGS=make clean export PYBUILD_CLEAN_ARGS=make clean
export PYBUILD_TEST_ARGS=make PYTHON={interpreter} check-tests export PYBUILD_TEST_ARGS=make PYTHON={interpreter} check-tests
FBX_VERSION := $(shell ./run --develop --version | awk 'NF{ print $$NF }')
%: %:
dh $@ --with python3 --buildsystem=pybuild dh $@ --with python3 --buildsystem=pybuild
@ -23,12 +19,10 @@ override_dh_auto_install-indep:
# Ensure the list of dependencies is not empty. # Ensure the list of dependencies is not empty.
test -s debian/freedombox.substvars || exit 1 test -s debian/freedombox.substvars || exit 1
# Check that FreedomBox version number is matching.
ifneq ($(FBX_VERSION),$(DEB_VERSION))
>&2 echo "WARNING: FreedomBox version $(FBX_VERSION) does not match package version $(DEB_VERSION)."
endif
override_dh_installsystemd: override_dh_installsystemd:
# Do not enable or start any service other than FreedomBox service. # Do not enable or start any service other than FreedomBox service. Use
dh_installsystemd --package=freedombox plinth.service \ # of --tmpdir is a hack to workaround an issue with dh_installsystemd
freedombox-privileged.socket # (as of debhelper 13.5.2) that still has hardcoded search path of
# /lib/systemd/system for searching systemd services. See #987989 and
# reversion of its changes.
dh_installsystemd --tmpdir=debian/tmp/usr --package=freedombox plinth.service

View File

@ -5,4 +5,8 @@
very-long-line-length-in-source-file * [doc/manual/*.raw.wiki:*] very-long-line-length-in-source-file * [doc/manual/*.raw.wiki:*]
# Misc. files which can't be fixed to have short line lengths. # Misc. files which can't be fixed to have short line lengths.
very-long-line-length-in-source-file * [plinth/modules/deluge/tests/data/sample.torrent:*]
very-long-line-length-in-source-file * [plinth/modules/transmission/tests/data/sample.torrent:*]
very-long-line-length-in-source-file * [doc/visual_design/FreedomBox-Logo.7z:*]
very-long-line-length-in-source-file * [plinth/modules/i2p/tests/data/router.config:*]
very-long-line-length-in-source-file * [COPYING.md:*] very-long-line-length-in-source-file * [COPYING.md:*]

View File

@ -8,11 +8,10 @@
# - Module inititailzation for essential modules # - Module inititailzation for essential modules
# #
Test-Command: plinth --list-apps 2> /dev/null Test-Command: plinth --list-apps 2> /dev/null
Restrictions: needs-root, breaks-testbed Restrictions: needs-root
# #
# Run unit and integration tests on installed files. # 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=plinth --cov-report=html:debci/htmlcov --cov-report=term
Depends: e2fsprogs, git, python3-pytest, python3-pytest-cov, python3-pytest-django, @ Depends: git, python3-openssl, python3-pytest, python3-pytest-cov, python3-pytest-django, python3-tomli | python3-coverage (<< 6.0), @
Restrictions: breaks-testbed

View File

@ -13,7 +13,7 @@ SCRIPTS_DIR=scripts
manual-pdfs=$(foreach lang,$(MANUAL_LANGUAGES),manual/$(lang)/freedombox-manual.pdf) manual-pdfs=$(foreach lang,$(MANUAL_LANGUAGES),manual/$(lang)/freedombox-manual.pdf)
manual-xmls=$(patsubst %.pdf,%.xml,$(manual-pdfs)) manual-xmls=$(patsubst %.pdf,%.xml,$(manual-pdfs))
OUTPUTS=$(manual-pdfs) plinth.1 freedombox-cmd.1 OUTPUTS=$(manual-pdfs) plinth.1
INSTALL_OPTS=-D --mode=644 INSTALL_OPTS=-D --mode=644
@ -109,25 +109,20 @@ manual-pages-xml:=$(patsubst %.raw.wiki, %.xml, $(manual-pages-raw-wiki))
manual-pages: $(manual-pages-part-html) manual-pages: $(manual-pages-part-html)
$(manual-pdfs): %.pdf: %.xml $(manual-pdfs): %.pdf: %.xml
@echo "[PDF] $<" xmlto $(XMLTO_DEBUG_FLAGS) --with-dblatex pdf -o $(dir $@) $<
@xmlto $(XMLTO_DEBUG_FLAGS) --with-dblatex pdf -o $(dir $@) $< 2> /dev/null
$(manual-pages-part-html): %.part.html: %.xml $(manual-pages-part-html): %.part.html: %.xml
@echo "[XSLT] $<" xsltproc /usr/share/xml/docbook/stylesheet/docbook-xsl/xhtml5/docbook.xsl $< | \
@xsltproc /usr/share/xml/docbook/stylesheet/docbook-xsl/xhtml5/docbook.xsl $< 2> /dev/null | \
perl -pe 'BEGIN {undef $$/} s/.*<body[^>]*>(.*)<\/body\s*>.*/$$1/si' > $@ perl -pe 'BEGIN {undef $$/} s/.*<body[^>]*>(.*)<\/body\s*>.*/$$1/si' > $@
@rm -f docbook.css @rm -f $(dir $@)docbook.css
$(manual-xmls) $(manual-pages-xml): %.xml: %.raw.wiki $(SCRIPTS_DIR)/wikiparser.py $(manual-xmls) $(manual-pages-xml): %.xml: %.raw.wiki $(SCRIPTS_DIR)/wikiparser.py
@echo "[WIKIPARSE] $<" $(SCRIPTS_DIR)/wikiparser.py $< | xmllint --format - > $@
@$(SCRIPTS_DIR)/wikiparser.py $< | xmllint --format - > $@
%.1: %.xml %.1: %.xml
@echo "[MAN] $<" xmlto man $<
@xmlto man $< 2> /dev/null
.PHONY: clean .PHONY: clean
clean: clean:
@echo "[RM] {part-htmls} {xmls} {manuals} {outputs}" rm -f $(manual-pages-part-html) $(manual-pages-xml) $(manual-xmls)
@rm -f $(manual-pages-part-html) $(manual-pages-xml) $(manual-xmls) rm -f $(OUTPUTS)
@rm -f $(OUTPUTS)

View File

@ -19,12 +19,6 @@ Install the following Debian packages:
* python3-sphinx * python3-sphinx
* python3-sphinx-autobuild * python3-sphinx-autobuild
* python3-sphinx-book-theme
* python3-django
* python3-django-axes
* python3-django-captcha
* python3-django-ipware
* python3-django-stronghold
If your preferred text editor doesn't have support for the reStructuredText If your preferred text editor doesn't have support for the reStructuredText
format, you can install a simple desktop application called ReText. It has live format, you can install a simple desktop application called ReText. It has live

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,15 @@
{%- extends "alabaster/layout.html" %}
{%- block footer %}
<div class="footer">
{% if show_copyright %}&copy;{{ copyright }} | {% endif %}
Licensed under the <a href="https://creativecommons.org/licenses/by-sa/4.0/">
CC BY-SA 4.0</a> license
{%- if show_source and has_source and sourcename %}
{% if show_copyright or theme_show_powered_by %}|{% endif %}
<a href="{{ pathto('_sources/' + sourcename, true)|e }}"
rel="nofollow">{{ _('Page source') }}</a>
{%- endif %}
</div>
{% endblock %}

View File

@ -15,19 +15,14 @@ list see the documentation: http://www.sphinx-doc.org/en/master/config
# #
import os import os
import sys import sys
from datetime import datetime
import django
sys.path.insert(0, os.path.abspath('../../')) sys.path.insert(0, os.path.abspath('../../'))
os.environ['DJANGO_SETTINGS_MODULE'] = 'plinth.settings'
django.setup()
# -- Project information ----------------------------------------------------- # -- Project information -----------------------------------------------------
# pylint: disable=invalid-name # pylint: disable=invalid-name
project = 'FreedomBox' project = 'FreedomBox'
copyright = f'2021-{datetime.now().year}' copyright = '2021-2023, FreedomBox Authors'
author = 'FreedomBox Authors' author = 'FreedomBox Authors'
# The short X.Y version # The short X.Y version
@ -83,23 +78,15 @@ pygments_style = None
# The theme to use for HTML and HTML Help pages. See the documentation for # The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes. # a list of builtin themes.
# #
html_theme = 'sphinx_book_theme' html_theme = 'alabaster'
# Theme options are theme-specific and customize the look and feel of a theme # Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the # further. For a list of options available for each theme, see the
# documentation. # documentation.
# #
html_theme_options = { html_theme_options = {
'home_page_in_toc': True, 'fixed_sidebar': True,
'repository_provider': 'gitlab', 'show_related': True,
'repository_url': 'https://salsa.debian.org/freedombox-team/freedombox/',
'use_edit_page_button': True,
'use_source_button': True,
'use_repository_button': True,
'use_issues_button': True,
'path_to_docs': 'doc/dev/',
'extra_footer': 'Licensed under the <a href="https://creativecommons.org/'
'licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.',
} }
# Add any paths that contain custom static files (such as style sheets) here, # Add any paths that contain custom static files (such as style sheets) here,
@ -215,11 +202,13 @@ autodoc_mock_imports = [
'captcha', 'captcha',
'cherrypy', 'cherrypy',
'configobj', 'configobj',
'cryptography',
'dbus', 'dbus',
'django',
'gi', 'gi',
'markupsafe', 'markupsafe',
'OpenSSL',
'pam', 'pam',
'paramiko',
'psutil', 'psutil',
'pytest', 'pytest',
'requests', 'requests',
@ -230,4 +219,3 @@ autodoc_mock_imports = [
] ]
html_favicon = './_static/favicon.ico' html_favicon = './_static/favicon.ico'
html_logo = './_static/logo.svg'

View File

@ -1,7 +0,0 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
Container
^^^^^^^^^
.. autoclass:: plinth.container.Container
:members:

View File

@ -4,7 +4,6 @@ Components
---------- ----------
.. toctree:: .. toctree::
:maxdepth: 2
:caption: Available components: :caption: Available components:
info info
@ -22,7 +21,6 @@ Components
staticfiles staticfiles
backups backups
coturn coturn
container
Base Classes Base Classes
^^^^^^^^^^^^ ^^^^^^^^^^^^

View File

@ -6,5 +6,5 @@ Webserver
.. autoclass:: plinth.modules.apache.components.Webserver .. autoclass:: plinth.modules.apache.components.Webserver
:members: :members:
.. autoclass:: plinth.modules.apache.components.WebserverRoot .. autoclass:: plinth.modules.apache.components.Uwsgi
:members: :members:

View File

@ -11,7 +11,6 @@ all the FreedomBox apps currently reside in FreedomBox source repository itself
and are updated when the API is updated. and are updated when the API is updated.
.. toctree:: .. toctree::
:maxdepth: 2
app app
components/index components/index

View File

@ -30,21 +30,23 @@ function normally.
def __init__(self): def __init__(self):
... ...
info = app_module.Info( info = app_module.Info(app_id=self.app_id, version=1,
app_id=self.app_id, version=1, name=_('Transmission'), name=_('Transmission'),
icon_filename='transmission', description=_description, icon_filename='transmission',
manual_page='Transmission', clients=manifest.clients, short_description=_('BitTorrent Web Client'),
donation_url='https://transmissionbt.com/donate/', description=description,
tags=manifest.tags) manual_page='Transmission',
clients=manifest.clients,
donation_url='https://transmissionbt.com/donate/')
self.add(info) self.add(info)
The first argument is app_id that is same as the ID for the app. The version is The first argument is app_id that is same as the ID for the app. The version is
the version number for this app that must be incremented whenever setup() method the version number for this app that must be incremented whenever setup() method
needs to be called again. name, icon_filename, description, manual_page, needs to be called again. name, icon_filename, short_description, description,
clients, and tags provide information that is shown on the app's main page. The manual_page and clients provide information that is shown on the app's main
donation_url encourages our users to contribute to upstream projects in order page. The donation_url encourages our users to contribute to upstream projects
ensure their long term sustainability. More information about the parameters is in order ensure their long term sustainability. More information about the
available in :class:`~plinth.app.Info` class documentation. parameters is available in :class:`~plinth.app.Info` class documentation.
The description of app should provide basic information on what the app is about 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 and how to use it. It is impractical, however, to explain everything about the
@ -291,8 +293,10 @@ file ``transmission-plinth.conf``, add the following.
<Location /transmission> <Location /transmission>
... ...
Use AuthOpenIDConnect Include includes/freedombox-single-sign-on.conf
Use RequireGroup bit-torrent <IfModule mod_auth_pubtkt.c>
TKTAuthToken "admin" "bit-torrent"
</IfModule>
</Location> </Location>
Showing a shortcut in the front page Showing a shortcut in the front page
@ -318,24 +322,22 @@ when they visit FreedomBox. To provide this shortcut, a
def __init__(self): def __init__(self):
... ...
shortcut = frontpage.Shortcut('shortcut-transmission', info.name, shortcut = frontpage.Shortcut(
icon=info.icon_filename, 'shortcut-transmission', name, short_description=short_description,
url='/transmission', icon='transmission', url='/transmission', clients=clients,
clients=info.clients, tags=info.tags, login_required=True, allowed_groups=[group[0]])
login_required=True,
allowed_groups=list(groups))
self.add(shortcut) self.add(shortcut)
The first parameter, as usual, is a unique ID. The next two parameters are basic The first parameter, as usual, is a unique ID. The next three parameters are
information about the app similar to the menu item. The URL parameter specifies basic information about the app similar to the menu item. The URL parameter
the URL that the user should be directed to when the shortcut is clicked. This specifies the URL that the user should be directed to when the shortcut is
is the web interface provided by our app. The next parameter provides a list of clicked. This is the web interface provided by our app. The next parameter
clients. This is useful for the FreedomBox mobile app when the information is provides a list of clients. This is useful for the FreedomBox mobile app when
used to suggest installing mobile apps. This is described in a later section of the information is used to suggest installing mobile apps. This is described in
this tutorial. The next parameter specifies the list of tags to show on the a later section of this tutorial. The next parameter specifies whether anonymous
shortcut. The next parameter specifies whether anonymous users who are not users who are not logged into FreedomBox should be shown this shortcut. The
logged into FreedomBox should be shown this shortcut. The final parameter final parameter further restricts to which group of users this shortcut must be
further restricts to which group of users this shortcut must be shown. shown.
Adding backup/restore functionality Adding backup/restore functionality
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -89,23 +89,22 @@ the Django's localization methods to make that happen.
info = app_module.Info(... info = app_module.Info(...
name=_('Transmission'), name=_('Transmission'),
description=[_('Transmission is a...'),
_('BitTorrent is a peer-to-peer...')],
... ...
tags=[_('File sharing'), _('BitTorrent'), ...]) short_description=_('BitTorrent Web Client'),
...) ...)
Notice that the app's name, description, tags, etc. are wrapped in the ``_()`` Notice that the app's name, description, etc. are wrapped in the ``_()`` method
method calls. This needs to be done for the rest of our app. We use the call. This needs to be done for the rest of our app. We use the
:obj:`~django.utils.translation.gettext_lazy` in some cases and we use the :obj:`~django.utils.translation.gettext_lazy` in some cases and we use the
regular :obj:`~django.utils.translation.gettext` in other cases. This is because regular :obj:`~django.utils.translation.gettext` in other cases. This is
in the second case the :obj:`~django.utils.translation.gettext` lookup is made because in the second case the :obj:`~django.utils.translation.gettext` lookup
once and reused for every user looking at the interface. These users may each is made once and reused for every user looking at the interface. These users may
have a different language set for their interface. Lookup made for one language each have a different language set for their interface. Lookup made for one
for a user should not be used for other users. The ``_lazy`` methods provided by language for a user should not be used for other users. The ``_lazy`` methods
Django makes sure that the return value is an object that will actually be provided by Django makes sure that the return value is an object that will
converted to string at the final moment when the string is being displayed. In actually be converted to string at the final moment when the string is being
the first case, the lookup is made and string is returned immediately. displayed. In the first case, the lookup is made and string is returned
immediately.
All of this is the usual way internationalization is done in Django. See All of this is the usual way internationalization is done in Django. See
:doc:`Internationalization and localization <django:topics/i18n/index>` :doc:`Internationalization and localization <django:topics/i18n/index>`

View File

@ -45,7 +45,7 @@ a link in FreedomBox web interface. Let us add a link in the apps list. In
... ...
menu_item = menu.Menu('menu-transmission', 'Transmission', menu_item = menu.Menu('menu-transmission', 'Transmission',
'transmission', info.tags, 'BitTorrrent Web Client', 'transmission',
'transmission:index', parent_url_name='apps') 'transmission:index', parent_url_name='apps')
self.add(menu_item) self.add(menu_item)
@ -61,12 +61,12 @@ menu item we want to present.
* The second parameter is the display name to use for our menu item which * The second parameter is the display name to use for our menu item which
happens to be the name of the app as well. happens to be the name of the app as well.
* The third parameter is the name of the icon to use when showing the menu * The third parameter is a short description for the menu item.
* The fourth 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 item. An SVG file and a PNG should be created in the
``plinth/modules/transmission/static/icons/`` directory. ``plinth/modules/transmission/static/icons/`` directory.
* The fourth parameter is the list of tags to show on the menu item.
* The fifth parameter is the URL that the user should be directed to when the * The fifth parameter is the URL that the user should be directed to when the
menu item is clicked. This is a Django URL name and we have already created a menu item is clicked. This is a Django URL name and we have already created a
URL with this name. Note that when including our app's URLs, FreedomBox will URL with this name. Note that when including our app's URLs, FreedomBox will

View File

@ -1,160 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.docbook.org/xml/4.4/docbookx.dtd">
<!--
# SPDX-License-Identifier: AGPL-3.0-or-later
-->
<refentry>
<refmeta>
<refentrytitle><application>freedombox-cmd</application></refentrytitle>
<manvolnum>1</manvolnum>
<refmiscinfo class="manual">FreedomBox Command Line Utility</refmiscinfo>
<refmiscinfo class="version"> </refmiscinfo>
</refmeta>
<refnamediv>
<refname><application>freedombox-cmd</application></refname>
<refpurpose>
command line utility to perform FreedomBox operations
</refpurpose>
</refnamediv>
<refsynopsisdiv>
<cmdsynopsis>
<command>freedombox-cmd</command>
<arg><option>-h, </option><option>--help</option></arg>
<arg choice="req">module</arg>
<arg choice="req">action</arg>
<arg><option>--no-args</option></arg>
</cmdsynopsis>
</refsynopsisdiv>
<refsect1>
<title>Description</title>
<para>
FreedomBox is a community project to develop, design and promote
personal servers running free software for private, personal
communications. It is a networking appliance designed to allow
interfacing with the rest of the Internet under conditions of
protected privacy and data security. It hosts applications such
as blog, wiki, website, social network, email, web proxy and a
Tor relay on a device that can replace a wireless router so that
data stays with the users.
</para>
<para>
freedombox-cmd is a command line interface to some of the operations
performed by FreedomBox. It is typically not needed by the end users who
use FreedomBox's web interface. The command may be used in some cases
while debugging problems, especially where the web interface is not
accessible or when a piece of functionality that is not provided in the
web interface needs to be triggered.
</para>
<para>
The command is simply a client to the FreedomBox's privileged daemon and
relays user's request to it. It waits for the request to complete and
prints the output of the operation or an error message collected form the
daemon. The daemon only allows connections from an pre-allowed list of
user accounts. So, be sure to run the command as 'root' superuser.
</para>
</refsect1>
<refsect1>
<title>Options</title>
<variablelist>
<varlistentry>
<term><option>module</option></term>
<listitem>
<para>
Name of the module from which to execute an action.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>action</option></term>
<listitem>
<para>
Name of the action to execute. It should found in the provided
module.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--no-args</option></term>
<listitem>
<para>
Don't try to read the arguments to the command on the standard
input. Instead, assume that the operation does not have any
arguments and execute the method without arguments.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--help</option></term>
<listitem>
<para>
Show brief help about arguments allowed for this command.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>Examples</title>
<example>
<title>Re-run FreedomBox network setup</title>
<synopsis>$ sudo freedombox-cmd networks setup --no-args</synopsis>
<para>
When FreedomBox starts for the first time, it will setup Network Manager
connections suitable for the hardware found. If you wish to re-create
these connections at a later time, you can re-run setup for the Networks
app using the web interface or run this command on a terminal.
</para>
</example>
<example>
<title>Delete a user account from LDAP database</title>
<synopsis>$ echo '{"args": ["USERNAME", "AUTH_USER", "AUTH_PASSWORD"], "kwargs": {}}' | sudo freedombox-cmd users remove_user</synopsis>
<para>
USERNAME is the name of the user account that must be removed. AUTH_USER
is name of the user account that is authorizing this operation.
AUTH_PASSWORD is the password for user account that is authorizing this
operation. This operation may be needed if FreedomBox's sqlite3 database
is wiped, removing the user accounts in the database but the
corresponding entries from LDAP database are not removed. A new user
with that name can't be created until the LDAP account is also removed.
</para>
</example>
<example>
<title>Set the logging mode to persistent</title>
<synopsis>$ echo '{"args": ["persistent"], "kwargs": {}}' | sudo freedombox-cmd config set_logging_mode</synopsis>
<para>
By default, FreedomBox sets up systemd-journald to 'volatile' logging.
This means that logs will not be stored on the disk and will be lost
after a reboot. If you are tackling a problem and wish to store the logs
persistently, you can change the setting in the web interface or run
this command.
</para>
</example>
</refsect1>
<refsect1>
<title>Bugs</title>
<para>
See <ulink
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>
<refsect1>
<title>Author</title>
<para>
<author>
<firstname>FreedomBox Developers</firstname>
<contrib>Original author</contrib>
</author>
</para>
</refsect1>
</refentry>

View File

@ -43,7 +43,7 @@ An alternative to downloading these images is to [[InstallingDebianOn/Allwinner|
=== Known Issues === === Known Issues ===
* Revision G2 (written on the board): The current stable Debian11/bullseye image (from 2021-08-27) '''will not start an Ethernet connection!''' This means you can not continue with the installation process at first. This can be fixed by following [[https://wiki.debian.org/InstallingDebianOn/Allwinner#Olimex_A20-OLinuXino-LIME2__rev._F_and_newer_and_Debian11.2F_bullseye_kernel | this description]] after you [[https://wiki.debian.org/FreedomBox/Download#Installation | copied the image to your SD card]]. Or you Download and use the [[https://ftp.freedombox.org/pub/freedombox/hardware/pioneer/|Pioneer Edition image]] to fix the issue. It contains a slightly [[https://salsa.debian.org/freedombox-team/u-boot/commit/2cb18893ef|modified u-boot]]. * Revision G2 (written on the board): The current stable Debian11/bullseye image (from 2021-08-27) '''will not start an Ethernet connection!''' This means you can not continue with the installation process at first. This can be fixed by following [[https://wiki.debian.org/InstallingDebianOn/Allwinner#Olimex_A20-OLinuXino-LIME2__rev._F_and_newer_and_Debian11.2F_bullseye_kernel | this description]] after you [[https://wiki.debian.org/FreedomBox/Download#Installation | copied the image to your SD card]]. Or you Download and use the [[https://ftp.freedombox.org/pub/freedombox/pioneer/|Pioneer Edition image]] to fix the issue. It contains a slightly [[https://salsa.debian.org/freedombox-team/u-boot/commit/2cb18893ef|modified u-boot]].
* Revision G2 hardware has also [[DebianBug:927397|poor performance when transmitting Ethernet data in Gigabit mode]] for older FreedomBox releases. The procedure above or for rev. C fixes this. * Revision G2 hardware has also [[DebianBug:927397|poor performance when transmitting Ethernet data in Gigabit mode]] for older FreedomBox releases. The procedure above or for rev. C fixes this.
* Revision C hardware has [[DebianBug:845128|poor performance when receiving Ethernet data in Gigabit mode]]. To workaround the problem, you can switch to 100 Mbps mode instead of Gigabit mode. Login to your !FreedomBox as root (or plugin the SD card into another computer) and create the file /etc/NetworkManager/dispatcher.d/20-fix-ethernet-problem with the following contents: * Revision C hardware has [[DebianBug:845128|poor performance when receiving Ethernet data in Gigabit mode]]. To workaround the problem, you can switch to 100 Mbps mode instead of Gigabit mode. Login to your !FreedomBox as root (or plugin the SD card into another computer) and create the file /etc/NetworkManager/dispatcher.d/20-fix-ethernet-problem with the following contents:

View File

@ -2,7 +2,7 @@
{{attachment:apu1d.jpg|PC Engines APU 1D|width=632,height=319}} {{attachment:apu1d.jpg|PC Engines APU 1D|width=632,height=319}}
[[https://www.pcengines.ch/apu.htm|PC Engines APU]] boards are single board computers with 3 Gigabit ethernet ports, a powerful AMD64 APU and Coreboot firmware. !FreedomBox images built for AMD64 machines are tested to work well for [[http://www.pcengines.ch/apu1d.htm|APU1D]] and [[http://www.pcengines.ch/apu3b2.htm|APU3B ]] models and are expected to work also well on the other, very similar versions. [[http://www.pcengines.ch/apu1d.htm|PC Engines APU 1D]] is a single board computer with 3 Gigabit ethernet ports, a powerful AMD APU and Coreboot firmware. !FreedomBox images built for AMD64 machines are tested to work well for it.
'''Important:''' Read [[FreedomBox/Hardware|general advice]] about hardware before building a !FreedomBox with this single board computer. '''Important:''' Read [[FreedomBox/Hardware|general advice]] about hardware before building a !FreedomBox with this single board computer.
@ -21,26 +21,31 @@ Although untested, the following similar hardware is also likely to work well wi
* [[http://www.pcengines.ch/apu2c4.htm|apu2c4]] * [[http://www.pcengines.ch/apu2c4.htm|apu2c4]]
* [[http://www.pcengines.ch/apu3a2.htm|apu3a2]] * [[http://www.pcengines.ch/apu3a2.htm|apu3a2]]
* [[http://www.pcengines.ch/apu3a4.htm|apu3a4]] * [[http://www.pcengines.ch/apu3a4.htm|apu3a4]]
* [[http://www.pcengines.ch/apu3b2.htm|apu3b2]]
* [[http://www.pcengines.ch/apu3b4.htm|apu3b4]] * [[http://www.pcengines.ch/apu3b4.htm|apu3b4]]
=== Installation === * Using i386 image:
* [[http://www.pcengines.ch/alix1d.htm|alix1d]]
* [[http://www.pcengines.ch/alix1e.htm|alix1e]]
* [[http://www.pcengines.ch/alix2d2.htm|alix2d2]]
* [[http://www.pcengines.ch/alix2d3.htm|alix2d3]]
* [[http://www.pcengines.ch/alix2d13.htm|alix2d13]]
* [[http://www.pcengines.ch/alix3d2.htm|alix3d2]]
* [[http://www.pcengines.ch/alix3d3.htm|alix3d3]]
* [[http://www.pcengines.ch/alix6f2.htm|alix6f2]]
=== Download ===
!FreedomBox disk [[FreedomBox/Download|images]] for this hardware are available. Follow the instructions on the [[FreedomBox/Download|download]] page to create a !FreedomBox SD card, USB disk, SSD or hard drive and boot into !FreedomBox. Pick the image meant for all amd64 machines. !FreedomBox disk [[FreedomBox/Download|images]] for this hardware are available. Follow the instructions on the [[FreedomBox/Download|download]] page to create a !FreedomBox SD card, USB disk, SSD or hard drive and boot into !FreedomBox. Pick the image meant for all amd64 machines.
An alternative to downloading these images is to [[InstallingDebianOn/Alix3d2|install Debian]] on the APU and then [[FreedomBox/Hardware/Debian|install FreedomBox]] on it. An alternative to downloading these images is to [[InstallingDebianOn/Alix3d2|install Debian]] on the APU and then [[FreedomBox/Hardware/Debian|install FreedomBox]] on it.
An [[https://github.com/huubsch/APU-Installation-HomeAssistant-Freedombox|installation manual]] tested on the APU3B is available on GitHub, including flashing with UEFI-BIOS
=== Networking === === Networking ===
The first network port, the left most one in the above picture, is configured by !FreedomBox to be an upstream Internet link and the remaining 2 ports are configured for local computers to connect to. The first network port, the left most one in the above picture, is configured by !FreedomBox to be an upstream Internet link and the remaining 2 ports are configured for local computers to connect to.
=== Availability === === Availability ===
PCEngines announced the [[https://www.pcengines.ch/eol.htm|phase-out]] of these boards in June 2023.
In 2024 [[https://pcengines.github.io/|Dasharo announced the support of APU-boards]] : coreboot + SeaBIOS and coreboot+UEFI.
* Price: 110 - 170 USD (depending on the board and supplier) * Price: 110 - 170 USD (depending on the board and supplier)
* [[http://www.pcengines.ch/order.htm|PC Engines]] * [[http://www.pcengines.ch/order.htm|PC Engines]]
* [[http://www.pcengines.ch/order.htm|Full list of suppliers]] * [[http://www.pcengines.ch/order.htm|Full list of suppliers]]
@ -48,17 +53,18 @@ In 2024 [[https://pcengines.github.io/|Dasharo announced the support of APU-boar
=== Hardware === === Hardware ===
* Open Hardware: No * Open Hardware: No
* CPU: [[http://www.amd.com/en-gb/products/embedded/processors/g-series|AMD G series T40E]]; [[https://teklager.se/en/amd-gx-412tc-cpu-specification/|GX-412TC]], 1 GHz quad core (depending on model) * CPU: [[http://www.amd.com/en-gb/products/embedded/processors/g-series|AMD G series T40E]]
* RAM: 2 GB DDR3-1066 DRAM - 4 GB (depending on model) * RAM: 2 GB DDR3-1066 DRAM
* Storage: SD card, External USB, mSATA module * Storage: SD card, External USB
* Architecture: amd64 * Architecture: amd64
* Ethernet: 3 Gigabit Ethernet ports * Ethernet: 3 Gigabit Ethernet ports
* WiFi: wle200nx / wle600vx / wle900vx miniPCI express wireless modules * !WiFi: None, use a [[FreedomBox/Hardware/USBWiFi|USB WiFi device]]
* SATA: 1 mSATA-module and 1 SATA * SATA: 1 m-SATA and 1 SATA
=== Non-Free Status === === Non-Free Status ===
* Non-free blobs required: No * Non-free blobs required: No
* !WiFi: Not available
* Boot firmware: [[http://www.pcengines.ch/apu1d.htm|Coreboot]] * Boot firmware: [[http://www.pcengines.ch/apu1d.htm|Coreboot]]
## END_INCLUDE ## END_INCLUDE
@ -66,4 +72,4 @@ In 2024 [[https://pcengines.github.io/|Dasharo announced the support of APU-boar
<<Include(FreedomBox/Portal)>> <<Include(FreedomBox/Portal)>>
---- ----
CategoryFreedomBox CategoryFreedomBox CategoryFreedomBox

View File

@ -14,15 +14,13 @@
=== What is User Websites? === === What is User Websites? ===
User websites is a feature that allows any (even non-admin) user on a !FreedomBox to host their own website simply by copying files to well known location in their home directory on the !FreedomBox server. The URL for the website will look like `https://mydomain.example/~myusername/`. The website will be available on the local network and/or the internet according to the network and firewall setup. If the copied files are HTML pages, they will show up as a website. If they are other types of files such as photos or documents. A list of those files is shown and a visitor will be able to view or download them. User websites is a standard location for webservers to allow host users to expose static files on the filesystem as a website to the local network and/or the internet according to the network and firewall setup.
Apache is the web server used in !FreedomBox and this feature is implemented using an Apache module. The standard webserver in !FreedomBox is Apache and this is implemented by means of a specific Apache module.
=== Screenshot === === Screenshot ===
{{attachment:user-websites-folder.png|User Website copied to FreedomBox using GNOME File Browser}} /* Add when/if an interface is made for FreedomBox */
{{attachment:user-websites-browser.png|User Website accessed using a browser}}
=== Using User Websites === === Using User Websites ===
@ -32,8 +30,9 @@ To serve documents, place the files in the designated directory in a !FreedomBox
This directory is: '''public_html''' This directory is: '''public_html'''
Thus, the absolute path for the directory of a user named ''fbx'' with home directory in ''/home/fbx'' will be '''/home/fbx/public_html'''. Thus the absolute path for the directory of a user named fbx with home directory in /home/fbx will be '''/home/fbx/public_html'''.
The User Websites feature will serve documents placed in this directory when requests for documents with the URI path ''~fbx'' are received. For example, if `mydomain.example` is your domain then a request for the URL `https://mydomain.example/~fbx/photo.jpg` will display the file in `/home/fbx/public_html/photo.jpg`. If a file named ''index.html'' is placed in the directory, it will shown when no file name is provided in the URL. So, the URL `https://mydomain.example/~fbx/` will show the HTML page `/home/fbx/public_html/index.html` User websites will serve documents placed in this directory when requests for documents with the URI path "~fbx" are received. For the the `example.org` domain thus a request for the document `example.org/~fbx/index.html` will transfer the file in `/home/fbx/public_html/index.html`.
=== Creating public_html folder and uploading documents === === Creating public_html folder and uploading documents ===
@ -45,7 +44,7 @@ Linux standard desktop file managers use to support remote filesystem access thr
* Gnome's Nautilus: * Gnome's Nautilus:
1. To lauch Nautilus you can seek its archive icon, or search ether its name or the word "file". 1. To lauch Nautilus you can seek its archive icon, or search ether its name or the word "file".
1. At the bottom of the left pane you'll find an option "+ Other locations". 1. At the bottom of the left pane you'll find an option "+ Other locations".
1. It leads you to a list of locations. Find "`freedombox SFTP server`" (english literal for all desktop languages). Click on it. If you don't find this, you can instead type `sftp://username@freedombox.local` in the address bar. 1. It leads you to a list of locations. Find "`freedombox SFTP server`" (english literal for all desktop languages). Click on it.
1. The first time you'll be asked for your user and password. Enter your !FreedomBox user and its password. The dialog will also offer you some options to remember it for some time. 1. The first time you'll be asked for your user and password. Enter your !FreedomBox user and its password. The dialog will also offer you some options to remember it for some time.
* Plasma file manager AKA Dolphin: * Plasma file manager AKA Dolphin:
1. Click on the location bar at the top of the window. 1. Click on the location bar at the top of the window.
@ -77,8 +76,7 @@ Usually any Unix system, including Linux in all (most) of its flavours and Mac,
Examples: Examples:
Connect to !FreedomBox via SSH: Connect to !FreedomBox via SSH:
1. (replacing `username` with a valid !FreedomBox user name and `freedombox.local` with your !FreedomBox's domain name or IP): 1. (replacing `username` with a valid !FreedomBox user name and `freedombox.local` with your !FreedomBox's domain name or IP): {{{
{{{
$ ssh username@freedombox.local $ ssh username@freedombox.local
}}} }}}
1. If your data is ok and your !FreedomBox reachable, the first time you'll be asked to confirm its signature. 1. If your data is ok and your !FreedomBox reachable, the first time you'll be asked to confirm its signature.
@ -87,41 +85,36 @@ $ ssh username@freedombox.local
1. The prompt changes to `username@freedombox:~$`. 1. The prompt changes to `username@freedombox:~$`.
Once connected create your website folder with: Once connected create your website folder with:
{{{ {{{
username@freedombox:~$ mkdir ~/public_html username@freedombox:~$ mkdir ~/public_html
}}} }}}
...or one for another user: ...or one for another user:
1. use the `sudo` prefix like 1. use the `sudo` prefix like {{{
{{{
username@freedombox:~$ sudo mkdir /home/<the_other_user>/public_html username@freedombox:~$ sudo mkdir /home/<the_other_user>/public_html
}}}, and introduce your password.
1. When you create a folder, by default it belongs to you no matter where it is created. Thus you'll then need to set its ownership to the other user: {{{
username@freedombox:~$ sudo chown <the_other_user>:<the_other_user> /home/<the_other_user>/public_htm
}}} }}}
and introduce your password. 1. Better check it before you disconnect that `public_html' is listed among the contents of the other user's home folder.
1. When you create a folder, by default it belongs to you no matter where it is created. Thus you'll then need to set its ownership to the other user:
{{{
username@freedombox:~$ sudo chown <the_other_user>:<the_other_user> /home/<the_other_user>/public_html
}}}
1. Better check it before you disconnect that `public_html` is listed among the contents of the other user's home folder.
{{{ {{{
username@freedombox:~$ ls -l /home/<the_other_user> username@freedombox:~$ ls -l /home/<the_other_user>
... ...
drwxr-xr-x 2 <the_other_user> <the_other_user> 4096 jan 29 17:39 public_html drwxr-xr-x 2 <the_other_user> <the_other_user> 4096 jan 29 17:39 public_html
... ...
}}} }}}. The name of the other user must appear '''twice''' in the `public_html` line and its permissions should be '''`drwxr-xr-x`'''.
The name of the other user must appear '''twice''' in the `public_html` line and its permissions should be '''`drwxr-xr-x`'''.
Then any user can upload their files to their respective folders with any of the graphical clients. Ask them to check it. Then any user can upload their files to their respective folders with any of the graphical clients. Ask them to check it.
It is a good security practice to exit instead of to just wait for the connection to time out: It is a good security practice to exit instead of to just wait for the connection to time out:
{{{ {{{
username@freedombox:~$ exit username@freedombox:~$ exit
}}} }}}
If then you want to also upload the web content through the command line you can If then you want to also upload the web content through the command line you can
{{{ {{{
$ scp path/to/files username@freedombox.local:public_html/ $ scp path/to/files username@freedombox.local:public_html/
}}} }}}. It will ask your password in !FreedomBox. You should then be able to navigate your browser to the corresponding url and see the files.
It will ask your password in !FreedomBox. You should then be able to navigate your browser to the corresponding url and see the files.
Learn more about ssh, scp and sftp with `$ man ssh`, `$ man scp` and `$ man sftp`. Learn more about ssh, scp and sftp with `$ man ssh`, `$ man scp` and `$ man sftp`.
@ -129,10 +122,10 @@ Learn more about ssh, scp and sftp with `$ man ssh`, `$ man scp` and `$ man sftp
=== External Links === === External Links ===
* Upstream Project: https://httpd.apache.org/ * Upstream Project: https://httpd.apache.org/
* Upstream Documentation: * Debian Apache Wiki: https://wiki.debian.org/Apache
* User Documentation:
* https://httpd.apache.org/docs/2.4/mod/mod_userdir.html * https://httpd.apache.org/docs/2.4/mod/mod_userdir.html
* https://httpd.apache.org/docs/2.4/howto/public_html.html * https://httpd.apache.org/docs/2.4/howto/public_html.html
* Debian Apache Wiki: https://wiki.debian.org/Apache
## END_INCLUDE ## END_INCLUDE

View File

@ -131,7 +131,7 @@ If you are a user experience designer, you can help !FreedomBox with the followi
* UI experience for the !FreedomBox Service web interface * UI experience for the !FreedomBox Service web interface
* Web design for [[https://freedombox.org|freedombox.org]], [[https://freedomboxfoundation.org|freedomboxfoundation.org]] and the [[FreedomBox|wiki]] pages * Web design for [[https://freedombox.org|freedombox.org]], [[https://freedomboxfoundation.org|freedomboxfoundation.org]] and the [[FreedomBox|wiki]] pages
* Logo and branding (we currently have [[https://salsa.debian.org/freedombox-team/freedombox/tree/main/static/themes/default|an identity manual and logos]]) * Logo and branding (we currently have [[https://salsa.debian.org/freedombox-team/freedombox/tree/master/static/themes/default|an identity manual and logos]])
* Possible designs for custom !FreedomBox cases on single board computers * Possible designs for custom !FreedomBox cases on single board computers
* [[../Design|User experience design]] * [[../Design|User experience design]]

View File

@ -37,4 +37,4 @@ The Cubieboard 2 is a single board computer based on the Allwinner A20 processor
CategoryFreedomBox CategoryFreedomBox
Cubieboard 2 image is licensed under the [[https://creativecommons.org/licenses/by-sa/2.0/|Creative Commons Attribution-Share Alike 2.0 Generic license]] by [[https://commons.wikimedia.org/wiki/File:Cubieboard_2_-_Top_(14673300334).jpg|Gareth Halfacree]]. Cubieboard 2 image is licensed under a Creative Commons Attribution-!ShareAlike 2.0 Generic License by [[https://www.flickr.com/photos/120586634@N05/14673300334/in/photolist-pMbdDm-omCuYN-o5kVMu-dy9jTD-dy99Kz|Flickr]].

View File

@ -1,86 +0,0 @@
#language en
##TAG:TRANSLATION-HEADER-START
~- [[FreedomBox/Customization|English]] - [[es/FreedomBox/Customization|Español]] - [[DebianWiki/EditorGuide#translation|(+)]] -~
##TAG:TRANSLATION-HEADER-END
== FreedomBox Customization ==
<<TableOfContents()>>
## BEGIN_INCLUDE
Though !FreedomBox's philosophy is to have the user make as few decisions as possible about the !FreedomBox itself, a few options for customization have been provided to facilitate some advanced use cases.
=== Change Default App ===
''Available since version:'' 0.36.0 <<BR>>
''Skill level:'' Basic
''Use Case'': A !FreedomBox that primarily runs only one public-facing application whose web application is set as the landing page when someone visits the domain name of the !FreedomBox over the internet. <<BR>>
e.g. A university using !MediaWiki running on !FreedomBox as a course wiki wants its students typing in the domain name into their browser to directly go to the wiki bypassing the !FreedomBox home page.
''Configuration:'' Change the [[FreedomBox/Manual/Configure#Default_App|Default App]] in the configure page to whichever app you want to be served as default.
=== Custom Shortcuts ===
''Available since version:'' 0.40.0 <<BR>>
''Skill level:'' Advanced
''Use Case:'' The administrator of a community deployment of !FreedomBox manually installs a few additional unsupported applications on the !FreedomBox and wants users to be able to transparently access them through the web and mobile applications of !FreedomBox.
''Note:'' This feature is meant to be used with applications that are end-user facing, i.e have a web or mobile client.
'''Configuration:'''
!FreedomBox reads custom shortcuts you have created from various files paths on the server. A shortcuts file can be any file with `.json` extension in the following directories: `/etc/freedombox/custom-shortcuts.json.d/`, `/var/lib/freedombox/custom-shortcuts.json.d/` and `/usr/share/freedombox/custom-shortcuts.json.d/`. Or they can be a file named `custom-shortcuts.json` in these directories: `/etc/freedombox/`, `/etc/plinth/` (only for compatibility), `/var/lib/freedombox/` and `/usr/share/freedombox/`. The file should follow the same JSON schema as the !FreedomBox API. You can refer to the JSON schema by visiting `https://<my-freedombox-url>/plinth/api/1/shortcuts`.
As an example, to add one additional shortcut for [[https://nextcloud.com|NextCloud]] app, create a file called `/etc/freedombox/custom-shortcuts.json.d/nextcloud.json` (create directories as needed).
{{{#!highlight json
{
"shortcuts": [{
"name": "NextCloud",
"description": ["Nextcloud is a suite of client-server software for creating and using file hosting services."],
"icon_url": "/plinth/custom/static/icons/nextcloud.png",
"clients": [{
"name": "nextcloud",
"platforms": [{
"type": "web",
"url": "/nextcloud"
}]
}],
"tags" : ["Groupware", "File sync"]
}]
}
}}}
The corresponding icons for the shortcuts listed in the above file should be placed in the directory `/var/www/plinth/custom/static/icons/`. The file names of the icons should match with those provided in `/etc/freedombox/custom-shortcuts.json.d/nextcloud.json`.
After adding an entry for !NextCloud in `nextcloud.json` and an icon, restart Plinth by executing the command {{{ systemctl restart plinth }}} on the !FreedomBox. You can also restart the !FreedomBox from the web interface.
After restart the Plinth home page will display an additional shortcut for !NextCloud as shown below: <<BR>>
{{attachment:nextcloud-frontpage-shortcut.png|NextCloud custom shortcut on the Plinth home page}}
The same shortcut will also be displayed in any Android apps connected to the !FreedomBox. <<BR>>
{{attachment:android-app-custom-shortcut.jpg|NextCloud custom shortcut in the Android app}}
=== Custom Styling ===
''Available since version:'' 24.25 <<BR>>
''Skill level:'' Advanced
''Use Case:'' The administrator of a community or home deployment of !FreedomBox wants to customize the web page styling of !FreedomBox.
''Configuration'': Create a file in the path `/var/www/plinth/custom/static/css/user.css` and write [[https://developer.mozilla.org/en-US/docs/Web/CSS|CSS]] styling rules. This
file has the highest priority as per the [[https://developer.mozilla.org/en-US/docs/Web/CSS/Cascade|cascading rules]]. Use the web browser's developer console to understand which rules to override and how much [[https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity|specificity]] is needed.
{{attachment:customization_styling.png|Home page with customized styling}}
## END_INCLUDE
<<Include(FreedomBox/Portal)>>
----
CategoryFreedomBox

View File

@ -23,11 +23,17 @@ This page describes the process of installing !FreedomBox on a Debian system. Cu
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. 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.
}}} }}}
{{{#!wiki caution
'''Console/GUI logins for non-admin users will be disabled'''
After !FreedomBox is fully setup, your system will no longer allow users not belonging to the ''admin'' group to log in to the system via console, secure shell (SSH) or graphical login. This behaviour can be disabled from the [[FreedomBox/Manual/Security|Security]] page. Use the administrator account created during !FreedomBox first boot for console logins and add further user accounts to ''admin'' group, if necessary.
}}}
=== Installing on Debian 12 (bookworm) or newer === === Installing on Debian 12 (bookworm) or newer ===
Check the Troubleshooting section below, for any tips or workarounds that might help during the install. 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]] 12 (bookworm), or Unstable (sid) on your hardware.
1. Update your package list. 1. Update your package list.

View File

@ -1,28 +0,0 @@
<<TableOfContents(3)>>
## BEGIN_INCLUDE
!FreedomBox is built on the Debian operating system. Approximately every two years, there is a new stable Debian release. !FreedomBox provides the option of [[FreedomBox/Manual/Upgrades#Auto-Update_to_Next_Stable_Release|automatically handling the upgrade]] to the new version of Debian after it is released. A distribution update will bring in major features and changes. Sometimes, old features will stop working. This page documents the expected changes and transitions during a distribution upgrade. If you dislike these changes, you can keep each distribution for at least [[LTS|5 years]] before updating.
The current stable release is Debian 12 "bookworm". It was released on June 10, 2023. Below are additional considerations to have in mind when upgrading to a new release of Debian.
== Debian 13 "trixie" ==
Estimated release date is around August 2025.
=== TT-RSS no longer supported ===
The [[DebianPts:tt-rss]] package has been removed from the next Debian release. It is recommended to move to one of the following options as a replacement:
* [[FreedomBox/Manual/Miniflux|Miniflux]]
* [[FreedomBox/Manual/Nextcloud|Nextcloud News]]
=== Searx app no longer supported ===
The [[DebianPts:searx]] package has been removed from the next Debian release. There is currently no replacement for Searx app in !FreedomBox. Searx app will no longer received security updates, so it is recommended to stop using the app, and to uninstall it.
## END_INCLUDE
<<Include(FreedomBox/Portal)>>
----
CategoryFreedomBox

View File

@ -44,11 +44,36 @@ It is important to verify the images you have downloaded to ensure that the file
* First open a terminal and import the public keys of the !FreedomBox developers who built the images: * First open a terminal and import the public keys of the !FreedomBox developers who built the images:
{{{ {{{
$ gpg --keyserver keyserver.ubuntu.com --recv-keys BCBEBD57A11F70B23782BC5736C361440C9BC971
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 7D6ADB750F91085589484BE677C0C75E7B650808
# This is the FreedomBox CI server's key
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8
# This is the new FreedomBox CI server's key # This is the new FreedomBox CI server's key
$ gpg --keyserver keyserver.ubuntu.com --recv-keys D4B069124FCF43AA1FCD7FBC2ACFC1E15AF82D8C $ gpg --keyserver keyserver.ubuntu.com --recv-keys D4B069124FCF43AA1FCD7FBC2ACFC1E15AF82D8C
}}} }}}
* Next, verify the fingerprint of the public keys: * Next, verify the fingerprint of the public keys:
{{{ {{{
$ gpg --fingerprint BCBEBD57A11F70B23782BC5736C361440C9BC971
pub 4096R/0C9BC971 2011-11-12
Key fingerprint = BCBE BD57 A11F 70B2 3782 BC57 36C3 6144 0C9B C971
uid Sunil Mohan Adapa <sunil@medhas.org>
sub 4096R/4C1D4B57 2011-11-12
$ gpg --fingerprint 7D6ADB750F91085589484BE677C0C75E7B650808
pub 4096R/7B650808 2015-06-07 [expires: 2020-06-05]
Key fingerprint = 7D6A DB75 0F91 0855 8948 4BE6 77C0 C75E 7B65 0808
uid James Valleroy <jvalleroy@mailbox.org>
uid James Valleroy <jvalleroy@freedombox.org>
sub 4096R/25D22BF4 2015-06-07 [expires: 2020-06-05]
sub 4096R/DDA11207 2015-07-03 [expires: 2020-07-01]
sub 2048R/2A624357 2015-12-22
$ gpg --fingerprint 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8
pub rsa4096 2018-06-06 [SC]
013D 86D8 BA32 EAB4 A669 1BF8 5D41 53D6 FE18 8FC8
uid [ unknown] FreedomBox CI (Continuous Integration server) <admin@freedombox.org>
sub rsa4096 2018-06-06 [E]
$ gpg --fingerprint D4B069124FCF43AA1FCD7FBC2ACFC1E15AF82D8C $ gpg --fingerprint D4B069124FCF43AA1FCD7FBC2ACFC1E15AF82D8C
pub rsa4096 2022-03-09 [SC] pub rsa4096 2022-03-09 [SC]
D4B0 6912 4FCF 43AA 1FCD 7FBC 2ACF C1E1 5AF8 2D8C D4B0 6912 4FCF 43AA 1FCD 7FBC 2ACF C1E1 5AF8 2D8C
@ -57,7 +82,7 @@ sub rsa4096 2022-03-09 [E]
}}} }}}
* Finally, verify your downloaded image with its signature file `.sig`. For example: * Finally, verify your downloaded image with its signature file `.sig`. For example:
{{{ {{{
$ gpg --verify freedombox-bookworm_all-amd64.img.xz.sig $ $ gpg --verify freedombox-bookworm_all-amd64.img.xz.sig
gpg: assuming signed data in 'freedombox-bookworm_all-amd64.img.xz' gpg: assuming signed data in 'freedombox-bookworm_all-amd64.img.xz'
gpg: Signature made Wed 14 Jun 2023 03:22:04 PM PDT gpg: Signature made Wed 14 Jun 2023 03:22:04 PM PDT
gpg: using RSA key D4B069124FCF43AA1FCD7FBC2ACFC1E15AF82D8C gpg: using RSA key D4B069124FCF43AA1FCD7FBC2ACFC1E15AF82D8C
@ -151,7 +176,7 @@ On MacOS (OSX) you can use programs like ''balenaetcher'' and ''rosaimagewriter'
=== From within FreedomBox === === From within FreedomBox ===
!FreedomBox is made up of several software programs and you can obtain the source code to any of them. These instructions are similar to obtaining and [[https://www.debian.org/doc/manuals/maint-guide/build.en.html|building]] [[https://wiki.debian.org/Packaging/SourcePackage#How_to_Download_a_source_package|source code]] [[https://wiki.debian.org/BuildingTutorial|for Debian]] since !FreedomBox is a pure blend of Debian. Using this process you can obtain the source code to the exact version of the package you are currently using in !FreedomBox. !FreedomBox is made up of several software programs and you can obtain the source code to any of them. These instructions are similar to obtaining and [[https://www.debian.org/doc/manuals/maint-guide/build.en.html|building]] [[https://www.debian.org/doc/manuals/apt-howto/ch-sourcehandling.en.html|source code]] [[https://wiki.debian.org/BuildingTutorial|for Debian]] since !FreedomBox is a pure blend of Debian. Using this process you can obtain the source code to the exact version of the package you are currently using in !FreedomBox.
1. To see the list of software packages installed on your !FreedomBox, run the following in a terminal: 1. To see the list of software packages installed on your !FreedomBox, run the following in a terminal:
{{{ {{{
@ -198,7 +223,7 @@ cd <source_directory>
=== Building Disk Images === === Building Disk Images ===
You can also build !FreedomBox disk images for various hardware platforms using the freedom-maker tool. This is also available as a Debian package and source code for it may be obtained using the above methods. [[https://salsa.debian.org/freedombox-team/freedom-maker/blob/main/README.md|Build instructions]] for creating disk images are available as part of the source code for freedom-maker package. You can also build !FreedomBox disk images for various hardware platforms using the freedom-maker tool. This is also available as a Debian package and source code for it may be obtained using the above methods. [[https://salsa.debian.org/freedombox-team/freedom-maker/blob/master/README.md|Build instructions]] for creating disk images are available as part of the source code for freedom-maker package.
!FreedomBox disk images are built and uploaded to official servers using automated Continuous Integration infrastructure. This infrastructure is available as [[https://salsa.debian.org/freedombox-team/infrastructure|source code]] too and provides accurate information on how !FreedomBox images are built. !FreedomBox disk images are built and uploaded to official servers using automated Continuous Integration infrastructure. This infrastructure is available as [[https://salsa.debian.org/freedombox-team/infrastructure|source code]] too and provides accurate information on how !FreedomBox images are built.
@ -225,37 +250,6 @@ dd if=temp/usr/lib/u-boot/A20-OLinuXino-Lime2/u-boot-sunxi-with-spl.bin of=<lime
The resulting image will have the modified u-boot in it. The resulting image will have the modified u-boot in it.
=== Old Signing Keys ===
Some very old disk images of !FreedomBox have been signed by different GPG keys than the one listed above. Those signatures are still valid and can be verified using the older keys.
{{{
$ gpg --keyserver keyserver.ubuntu.com --recv-keys BCBEBD57A11F70B23782BC5736C361440C9BC971
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 7D6ADB750F91085589484BE677C0C75E7B650808
# This is the FreedomBox CI server's key
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8
$ gpg --fingerprint BCBEBD57A11F70B23782BC5736C361440C9BC971
pub 4096R/0C9BC971 2011-11-12
Key fingerprint = BCBE BD57 A11F 70B2 3782 BC57 36C3 6144 0C9B C971
uid Sunil Mohan Adapa <sunil@medhas.org>
sub 4096R/4C1D4B57 2011-11-12
$ gpg --fingerprint 7D6ADB750F91085589484BE677C0C75E7B650808
pub 4096R/7B650808 2015-06-07 [expires: 2020-06-05]
Key fingerprint = 7D6A DB75 0F91 0855 8948 4BE6 77C0 C75E 7B65 0808
uid James Valleroy <jvalleroy@mailbox.org>
uid James Valleroy <jvalleroy@freedombox.org>
sub 4096R/25D22BF4 2015-06-07 [expires: 2020-06-05]
sub 4096R/DDA11207 2015-07-03 [expires: 2020-07-01]
sub 2048R/2A624357 2015-12-22
$ gpg --fingerprint 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8
pub rsa4096 2018-06-06 [SC]
013D 86D8 BA32 EAB4 A669 1BF8 5D41 53D6 FE18 8FC8
uid [ unknown] FreedomBox CI (Continuous Integration server) <admin@freedombox.org>
sub rsa4096 2018-06-06 [E]
}}}
## END_INCLUDE ## END_INCLUDE
<<Include(FreedomBox/Portal)>> <<Include(FreedomBox/Portal)>>

View File

@ -16,12 +16,6 @@ Dynamic DNS service providers assist in working around a problem. First they pr
For this to work, every time you connect to the Internet, you will have to tell your Dynamic DNS provider what your current IP address is. Hence you need special software on your server to perform this operation. The Dynamic DNS function in !FreedomBox will allow users without a static public IP address to push the current public IP address to a Dynamic DNS Server. This allows you to expose services on !FreedomBox, such as ownCloud, to the Internet. For this to work, every time you connect to the Internet, you will have to tell your Dynamic DNS provider what your current IP address is. Hence you need special software on your server to perform this operation. The Dynamic DNS function in !FreedomBox will allow users without a static public IP address to push the current public IP address to a Dynamic DNS Server. This allows you to expose services on !FreedomBox, such as ownCloud, to the Internet.
=== A Free Domain for your FreedomBox ===
You can get a free domain name for your !FreedomBox using the free Dynamic DNS service provided by the !FreedomBox community at https://ddns.freedombox.org . With this service, your domain name will look like ''myaccount.fbx.one'' or ''myaccount.freedombox.rocks'' where ''myaccount'' is the account you created on the service.
The service also provides you with free unlimited number of subdomains. For this, login to the account, go to ''Change Settings'', check the option ''Wild Card'', and click ''Save Changes''. After this you can add any number of subdomains like ''foo.myaccount.fbx.one'' to your !FreedomBox in ''System -> Names -> Add Domain (regular)''. TLS certificates (for HTTPS) will be automatically obtained by !FreedomBox using Let's Encrypt for these subdomains. Subdomains are especially useful for applications that require being hosted on a separate domain, such as [[FreedomBox/Manual/HomeAssistant|Home Assistant]].
=== GnuDIP vs. Update URL === === GnuDIP vs. Update URL ===
There are two main mechanism to notify the Dynamic DNS server of your new IP address; using the ''GnuDIP'' protocol and using the ''Update URL'' mechanism. There are two main mechanism to notify the Dynamic DNS server of your new IP address; using the ''GnuDIP'' protocol and using the ''Update URL'' mechanism.
@ -33,6 +27,7 @@ On the other hand, the GnuDIP protocol will only transport a salted MD5 value of
=== Using the GnuDIP protocol === === Using the GnuDIP protocol ===
1. Register an account with any Dynamic DNS service provider. A free service provided by the !FreedomBox community is available at https://ddns.freedombox.org . 1. Register an account with any Dynamic DNS service provider. A free service provided by the !FreedomBox community is available at https://ddns.freedombox.org .
1. In !FreedomBox UI, enable the Dynamic DNS Service. 1. In !FreedomBox UI, enable the Dynamic DNS Service.
1. Select ''GnuDIP'' as ''Service type'', enter your Dynamic DNS service provider address (for example, ddns.freedombox.org) into ''GnuDIP Server Address'' field. 1. Select ''GnuDIP'' as ''Service type'', enter your Dynamic DNS service provider address (for example, ddns.freedombox.org) into ''GnuDIP Server Address'' field.

View File

@ -1,158 +0,0 @@
#language en
##TAG:TRANSLATION-HEADER-START
~- [[FreedomBox/Guide/ExposeLocalService|English]] - [[es/FreedomBox/Guide/ExposeLocalService|Español]] - [[DebianWiki/EditorGuide#translation|(+)]] -~
##TAG:TRANSLATION-HEADER-END
<<TableOfContents>>
## BEGIN_INCLUDE
== Expose a Local Service to Internet using FreedomBox ==
This guide describes to expose a local service you have on your LAN to the internet using a !FreedomBox that is already exposed on the internet.
=== Goal ===
* ''You have a !FreedomBox running'' with a working domain already setup. You are able to access your !FreedomBox using a URL such as `https://www.mysite.example/` .
* ''You have a different server running a local service'' on LAN that you wish to expose to the Internet on the same domain as your !FreedomBox. The local service must be a web service using the HTTP protocol (it is also possible to setup non-HTTP service, but that is a different approach). Optionally, you can have special domain assigned specifically for this local service.
* You wish for ''!FreedomBox to handle the TLS certificates'' for this domain as !FreedomBox typically does. Your local service need not setup and manage TLS certificates.
* Optionally, you may want to ''limit access to local service using !FreedomBox credentials''. Only users with a !FreedomBox account (and belonging to a chosen group) will be able to access this service. The local service will not be available to general public on the Internet. This way you can host local services that dont implement their own authentication or local services with their own authentication mechanisms disabled.
=== Exposing Local LAN servers ===
* To expose the service, create an Apache configuration file in `/etc/apache2/conf-available/` and write a `ProxyPass` directive. Assuming your local service is running on a computer with IP address `192.168.0.20` on port `3000`, you can do this by running a command (as a root user on the terminal):
{{{#!highlight bash
cat > /etc/apache2/conf-available/my-local-service.conf <<EOL
ProxyPass /myservice http://192.168.0.20:3000/
EOL
}}}
* Then, enable this Apache configuration. Run the following command:
{{{#!highlight bash
a2enconf my-local-service
}}}
* Then reload Apache web server.
{{{#!highlight bash
systemctl reload apache2
}}}
You can now access your local service at the following URL `https://www.mysite.example/myservice/` . Note that the URL is a secure URL with `https://`. The certificates will be managed by FreedomBox/Lets Encrypt. All your other apps and services work as usual. You can add any number services you want this way.
=== Running the Service on FreedomBox Itself ===
The above approach will also work if the local service is running on !FreedomBox itself. In this case, the `ProxyPass` directive in the configuration should be modified to look like `ProxyPass /myservice http://127.0.0.1:3000/`.
=== Disabling the service ===
To disable exposing the local service:
1. Disable the Apache configuration file.
{{{#!highlight bash
a2disconf my-local-service
}}}
1. Then, reload Apache web server.
{{{#!highlight bash
systemctl reload apache2
}}}
=== Adding Authentication ===
You can configure the service to be available to only users with !FreedomBox account. This is a good choice if:
* The local service that is exposed to the Internet should not be available to everyone. And,
* The local service does not provide its own authentication mechanism. Or,
* The local service provides its own authentication but you dont want to maintain a different set of user accounts for that service and want to reuse your !FreedomBox user accounts.
1. Update the Apache configuration file `/etc/apache2/conf-available/my-local-service.conf` to look like the following.
{{{#!highlight apache
<Location /myservice/>
Include includes/freedombox-single-sign-on.conf
ProxyPass http://192.168.0.20:3000/
</Location>
}}}
1. Then, reload Apache web server.
{{{#!highlight bash
systemctl reload apache2
}}}
If you wish for only some groups of users to be able to access the service, another change to the configuration is needed. Make the configuration look like the following if you wish to allow users of “web-search” group and also users of “admin” group to access the local service. All other users even if they have a valid !FreedomBox account will be denied access.
{{{#!highlight apache
<Location /myservice/>
Include includes/freedombox-single-sign-on.conf
<IfModule mod_auth_pubtkt.c>
TKTAuthToken "web-search" "admin"
</IfModule>
ProxyPass http://192.168.0.20:3000/
</Location>
}}}
=== Hosting the Service on a Separate Domain ===
Some services and web applications hosted under a URL fragment such as `/myservice/` do not work well. They require an entire domain or subdomain to be dedicated to them. In these cases too, !FreedomBox can expose local services.
1. First acquire a domain or a subdomain.
* If your domain is a custom domain that you own, go to the DNS settings on your domain name provider and add a subdomain. You can create a CNAME record that simply points to the main domain.
* If you are using !FreedomBox Dynamic DNS service, then login into https://ddns.freedombox.org and enable the “Wildcard” option. With this change, for a domain (such as `example.fbx.one`), all subdomains (such as `myservice.example.fbx.one`) of your domain will point to your main domain.
1. Add the new domain into !FreedomBox. Goto System → Name Services → Domain (regular) → Add. For example, add `myservice.mysite.example`.
1. Then create an Apache configuration file at `/etc/apache2/includes/<domainname>-include.conf`. For our example this is: `/etc/apache2/includes/myservice.mysite.example-include.conf`. The contents of the file should be:
{{{#!highlight apache
ProxyPass / http://192.168.0.20:3000/
}}}
1. Modify the above file for authentication if necessary by adding the `Include` and `<IfModule>` configuration directives as shown in the authentication section above.
=== Troubleshooting ===
When your setup does not work as expected, to debug, run a temporary web service on your !FreedomBox.
1. Create a temporary directory with an index.html page on the !FreedomBox.
{{{#!highlight bash
mkdir temp
cd temp
cat > index.html <<EOL
<!DOCTYPE html>
<html>
<head>
<title>My test page</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
EOL
}}}
1. Run a temporary web server (press Control-C to terminate):
{{{#!highlight bash
python3 -m http.server 3000
}}}
1. Update the Apache configuration to point to this temporary service on !FreedomBox.
{{{#!highlight apache
ProxyPass /myservice http://127.0.0.1:3000/
}}}
=== Extras ===
There are many additional features that Apache can provide to improve the local service. For these, [[https://httpd.apache.org/docs/current/|explore Apache documentation]]. Some features include:
* Serving static files such as JS, CSS, and media files from local directory without invoking the local service to improve performance.
* Caching the responses from the local service to improve performance.
* Setting additional headers for security, cache control, etc.
* Modify the HTTP header responses from the service when it does not work well to hosting under a URL fragment such as `/myservice/`.
* Perform redirects from `http://` URL to `https://` and setting HSTS header.
* Load balancing among multiple local services for high availability, scaling, etc.
* And more.
## END_INCLUDE
Back to [[FreedomBox/Features|Features introduction]] or [[FreedomBox/Manual|manual]] pages.
<<Include(FreedomBox/Portal)>>
----
CategoryFreedomBox

View File

@ -1,85 +0,0 @@
#language en
##TAG:TRANSLATION-HEADER-START
~- [[FreedomBox/Manual/FeatherWiki|English]] - [[es/FreedomBox/Manual/FeatherWiki|Español]] - [[DebianWiki/EditorGuide#translation|(+)]]-~
##TAG:TRANSLATION-HEADER-END
<<TableOfContents()>>
## BEGIN_INCLUDE
== Feather Wiki (Personal Notebooks) ==
||<tablestyle="float: right;"> {{attachment:Feather-Wiki-on-FreedomBox.png|Feather Wiki icon}} ||
'''Available since''': version 24.17
Feather Wiki is a simple tool to create personal wikis on the web. Each wiki is self-contained within a single HTML file stored on your !FreedomBox. Only !FreedomBox users can read or write to the wiki files. It is also possible to "publish" a Feather Wiki file from within the application.
=== A Nest of Feather Wikis ===
Feather Wiki is a web application that runs entirely in the browser. !FreedomBox implements a Feather Wiki Nest, i.e. an application that can store and manage several Feather Wiki files.
Feather Wiki is a web quine, like its more popular, older and more feature-rich cousin !TiddlyWiki. Every wiki file contains an entire copy of the source code (HTML, CSS and !JavaScript) along with your content, which makes it extremely portable.
The Nest is essentially a !WebDAV server provided by !FreedomBox's Apache web server, so Feather Wiki doesn't require installation of any additional packages. It requires no additional system resources either, since Apache is always running.
=== Setting up wikis ===
Creating and deleting wiki files is handled by the !FreedomBox app itself. Every new wiki file is created from the latest available version of the empty Feather Wiki file downloaded from the official website. Deletion cannot be undone. You have to either restore the deleted file from a backup or import any saved local copy into a new wiki file. Uploading your existing Feather Wiki files is supported if they are at least v1.8.0 (Skylark). For older Feather Wiki files, you can use the import option as described below.
To import an old Feather Wiki file, first create a new wiki on your !FreedomBox.The page called "Wiki Settings" in Feather Wiki provides a button that lets you import the contents of an existing wiki file into a new wiki by uploading the file from your local machine.
Upgrading Feather Wiki is a manual process that is very similar to importing.
1. Save a local copy of the wiki file.
2. Delete the wiki file from the server.
3. Create a new empty wiki file (this will be of the latest version by default).
4. Open the new wiki.
5. Import the contents of your local copy into the new wiki from the "Wiki Settings" page.
{{attachment:Feather-Wiki-Settings.png|Wiki Settings page|width=800}}
=== Publishing a wiki ===
The Feather Wiki app on !FreedomBox doesn't provide a "public access" option, unlike !MediaWiki. To share your wiki file with someone who doesn't have an account on your !FreedomBox or to publish the file on the Internet, follow these steps:
1. Save a local copy of the wiki file.
2. Open the local copy in a web browser.
3. Go to "Wiki Settings" page and enable the "Publish" setting. (This makes the wiki non-editable. Hence the local copy.)
4. Save the local copy.
Now you can share the HTML file or publish it on the web using [[FreedomBox/Manual/Apache_userdir|Apache userdir]] or placing it under the /var/www/html directory on your !FreedomBox.
=== As many wikis as you need ===
The source code of Feather Wiki is tiny - less than 60 kilobytes. You are encouraged to create as many wiki files as you need, since the storage cost of each file is negligible, even on a !FreedomBox running from an SD card.
The shortcut for Feather Wiki app opens a page with the list of wiki files stored on !FreedomBox. Creating a front page shortcut for each wiki file (like Ikiwiki does) would clutter the front page, considering the number of Feather Wiki files people might create.
=== Use cases ===
* '''Notebook:''' A student can use Feather Wiki as a web notebook with one wiki file per course. About 40 files for a bachelor's degree!
* '''Self-publishing:''' An author can self-publish an online book using Feather Wiki as a !GitBook alternative.
* '''Refile:''' One wiki file as a general notes dump that can be refiled later into more organized formats.
* One wiki file for each issue of a magazine (indie web zine) maybe with some custom CSS added.
* Simple internal websites for organizations to publish information.
* One Feather Wiki file for each of your projects. Keep all project-related notes and tasks in one file.
* Shipping documentation/user-guide with your product, in a single file.
For more inspiration, see the [[https://feather.wiki/?page=gallery|Gallery]] on the official website.
You might want to configure your wiki with different [[https://feather.wiki/?page=extensions|extensions]] for Feather Wiki depending on the use case.
=== External links ===
* Website: https://feather.wiki
* Source code for Feather Wiki: https://codeberg.org/Alamantus/FeatherWiki
## END_INCLUDE
Back to [[FreedomBox/Features|Features introduction]] or [[FreedomBox/Manual|manual]] pages.
<<Include(FreedomBox/Portal)>>
----
CategoryFreedomBox

View File

@ -12,17 +12,7 @@ In addition to supporting various single board computers and other devices, any
== Recommended Hardware == == Recommended Hardware ==
=== Libre Crafts FreedomBox === On April 22nd, 2019, the !FreedomBox Foundation announced the [[https://freedomboxfoundation.org/buy/|sales]] of the Pioneer Edition !FreedomBox Home Server Kits. This is the recommended pre-installed hardware for all users who don't wish to build their own !FreedomBox by choosing the right components, downloading the image and preparing an SD card with !FreedomBox.
Libre Crafts in an endeavor from the !FreedomBox developers themselves to bring you a powerful !FreedomBox device capable of hosting even the most demanding home server needs. The device is crafted, tested, and delivered to you by !FreedomBox developers. Your purchase helps !FreedomBox development.
This hardware features a powerful CPU, plenty of main memory, a fast OS disk, ability to add two high capacity hard disk drives, dual multi-gigabit Ethernet ports, all with a low power consumption. Use it to host all your photos, to backup all home devices, as a NAS, as home automation hub, as a desktop computer, and more all at once.
||<style="text-align: center;"> [[FreedomBox/Hardware/LibreCrafts|{{attachment:libre-crafts.png|Libre Crafts FreedomBox|height=300}}]]<<BR>> [[FreedomBox/Hardware/LibreCrafts|Libre Crafts FreedomBox]] ||
=== Olimex's FreedomBox Pioneer Edition ===
On April 22nd, 2019, the !FreedomBox Foundation announced the [[https://freedomboxfoundation.org/buy/|sales]] of the Pioneer Edition !FreedomBox Home Server Kits. This pre-installed hardware is for all users who don't wish to build their own !FreedomBox by choosing the right components, downloading the image and preparing an SD card with !FreedomBox.
The kit includes all the hardware needed for launching a !FreedomBox home server on an Olimex A20-OLinuXino-LIME2 board. This product provides the perfect combination of open source hardware and free and open source software. By purchasing this product, you also support the !FreedomBox Foundation's efforts to create and promote its free and open source server software. The kit includes all the hardware needed for launching a !FreedomBox home server on an Olimex A20-OLinuXino-LIME2 board. This product provides the perfect combination of open source hardware and free and open source software. By purchasing this product, you also support the !FreedomBox Foundation's efforts to create and promote its free and open source server software.
@ -170,6 +160,7 @@ All !FreedomBox disk images for different hardware is built by the project using
|| '''Image''' || '''Includes main?''' || '''Includes non-free-firmware?''' || '''Non-free firmware included''' || || '''Image''' || '''Includes main?''' || '''Includes non-free-firmware?''' || '''Non-free firmware included''' ||
|| 32-bit ARM (armhf) || (./) || || || || 32-bit ARM (armhf) || (./) || || ||
|| 32-bit x86 (i386) || (./) || (./) || DebianPkg:amd64-microcode, DebianPkg:intel-microcode (see [[Microcode]]) ||
|| 64-bit ARM (arm64) || (./) || || || || 64-bit ARM (arm64) || (./) || || ||
|| 64-bit x86 (amd64) || (./) || (./) || DebianPkg:amd64-microcode, DebianPkg:intel-microcode (see [[Microcode]]) || || 64-bit x86 (amd64) || (./) || (./) || DebianPkg:amd64-microcode, DebianPkg:intel-microcode (see [[Microcode]]) ||
|| A20 OLinuXino Lime || (./) || || || || A20 OLinuXino Lime || (./) || || ||
@ -187,6 +178,7 @@ All !FreedomBox disk images for different hardware is built by the project using
|| Pine A64+ || (./) || || || || Pine A64+ || (./) || || ||
|| Pioneer Edition !FreedomBox || (./) || || || || Pioneer Edition !FreedomBox || (./) || || ||
|| QEMU/KVM amd64 || (./) || || || || QEMU/KVM amd64 || (./) || || ||
|| QEMU/KVM i386 || (./) || || ||
|| Raspberry Pi 2 || (./) || (./) || DebianPkg:raspi-firmware || || Raspberry Pi 2 || (./) || (./) || DebianPkg:raspi-firmware ||
|| Raspberry Pi 3 Model B || (./) || (./) || DebianPkg:raspi-firmware, DebianPkg:firmware-brcm80211 || || Raspberry Pi 3 Model B || (./) || (./) || DebianPkg:raspi-firmware, DebianPkg:firmware-brcm80211 ||
|| Raspberry Pi 3 Model B+ || (./) || (./) || DebianPkg:raspi-firmware, DebianPkg:firmware-brcm80211 || || Raspberry Pi 3 Model B+ || (./) || (./) || DebianPkg:raspi-firmware, DebianPkg:firmware-brcm80211 ||
@ -194,6 +186,7 @@ All !FreedomBox disk images for different hardware is built by the project using
|| Rock64 || (./) || || || || Rock64 || (./) || || ||
|| !RockPro64 || (./) || || || || !RockPro64 || (./) || || ||
|| !VirtualBox for amd64 || (./) || || || || !VirtualBox for amd64 || (./) || || ||
|| !VirtualBox for i386 || (./) || || ||
## END_INCLUDE ## END_INCLUDE

View File

@ -1,78 +0,0 @@
#language en
##TAG:TRANSLATION-HEADER-START
~- [[FreedomBox/Manual/HomeAssistant|English]] - [[es/FreedomBox/Manual/HomeAssistant|Español]] - [[DebianWiki/EditorGuide#translation|(+)]]-~
##TAG:TRANSLATION-HEADER-END
<<TableOfContents()>>
## BEGIN_INCLUDE
== Home Assistant ==
||<tablestyle="float: right;"> {{attachment:homeassistant.png|Home Assistant icon}} ||
'''Available since''': version 25.10
Home Assistant is a home automation hub with emphasis on local control and privacy. It integrates with thousands of devices including smart bulbs, alarms, presence sensors, door bells, thermostats, irrigation timers, energy monitors, etc.
Please note that Home Assistant is installed and run inside a container provided by the Home Assistant project. Security, quality, privacy and legal reviews are done by the upstream project and not by Debian/FreedomBox. Updates are performed following an independent cycle.
Home Assistant app is considered experimental in !FreedomBox as it is fairly new to our ecosystem. You may face issues working with it or the app may undergo major breaking changes.
=== Hardware ===
Home Assistant can detect, configure, and use various devices on the local network. For example, if a device is connected using Wi-Fi or LAN to the same network as !FreedomBox, Home Assistant can detect, configure, and use the device. Other home automation protocols such as Thread, !ZigBee, and Z-Wave are also supported but require additional hardware to be connected to your !FreedomBox. For example, if you have a door sensor that speaks !ZigBee, you need to attach a !ZigBee USB dongle to your !FreedomBox. Home Assistant can then detect and use the door sensor on the !ZigBee network. '''Note:''' if you attach any such hardware to FreedomBox after you install the Home Assistant app, then you need to disable and re-enable the Home Assistant app before the hardware can be discovered and used by Home Assistant.
Home Assistant is a comprehensive solution for your home automation needs supporting thousands of devices. You can check whether a device is supported by Home Assistant by visiting the [[https://www.home-assistant.io/integrations/|integrations]] page. Other devices which are not listed may also be supported when they are similar to supported devices. It is recommended that you purchase hardware that advertises support for Home Assistant.
Many home automation devices connect to or send data to their manufacturers' servers. This can be a serious violation of your home's privacy. These devices may also stop working when their manufacturer goes bankrupt, decides to close the product line, or forces you to purchase newer models. It is strongly recommended that you purchase hardware that works locally with a home automation hub (in this case Home Assistant) without connecting to manufacturer's servers. These are listed under the categories "Local Push" or "Local Polling" in the Home Assistant's integrations page.
=== Need for Subdomain ===
Unlike most other apps in !FreedomBox which work on a path like `https://mydomain.example/app`, Home Assistant requires a separate dedicated subdomain such as `https://homeassistant.mydomain.example`. Before configuring the Home Assistant app, you must create a subdomain using System -> [[FreedomBox/Manual/NameServices|Name Services]]. See the documentation for Name Services to understand how you can acquire a subdomain.
=== Setup ===
After the app is installed, Home Assistant web interface must be setup. An administrator account is created at this time. Home Assistant maintains its own user accounts separate from user accounts created on !FreedomBox.
{{attachment:homeassistant-setup-step-1.png|Setup - Step 1}}
{{attachment:homeassistant-setup-step-2.png|Setup - Step 2}}
{{attachment:homeassistant-setup-step-3.png|Setup - Step 3}}
{{attachment:homeassistant-setup-step-4.png|Setup - Step 4}}
{{attachment:homeassistant-setup-step-5.png|Setup - Step 5}}
When new USB dongles are added to make Home Assistant talk to devices on networks like Thread, !ZigBee, and Z-Wave, then setup operation must be re-run on the app. This operation is available in the Extras menu drop down with gears icon in the Home Assistant app page. Setup must also be re-run when the hardware is removed. Otherwise, Home Assistant service will fail to start.
=== Usage ===
Home Assistant provides a fully functional web application and a mobile application. Simply login and start using:
{{attachment:homeassistant-login.png|Login}}
{{attachment:homeassistant-ui.png|Web UI}}
{{attachment:homeassistant-app.png|Mobile App}}
=== Advanced Manual Configuration ===
If you wish to perform your own customization to Home Assistant setup, feel free to edit Home Assistant configuration files manually. Configuration, scenes, automations, scripts, secrets, database, and log files are all stored in the directory `/var/lib/home-assistant-freedombox/config` directory. You will need to disable and re-enable the app after configuration changes for them to take effect. Note that when !FreedomBox itself modifies these files, it will not preserve comments and other formatting.
=== External links ===
* Website: https://www.home-assistant.io/
* Source code for Home Assistant: https://github.com/home-assistant/core
* Source code for Home Assistant container image: https://github.com/home-assistant/docker
## END_INCLUDE
Back to [[FreedomBox/Features|Features introduction]] or [[FreedomBox/Manual|manual]] pages.
<<Include(FreedomBox/Portal)>>
----
CategoryFreedomBox

View File

@ -0,0 +1,36 @@
#language en
##TAG:TRANSLATION-HEADER-START
~- [[de/FreedomBox/Manual/I2P|Deutsch]] - [[FreedomBox/Manual/I2P|English]] - [[es/FreedomBox/Manual/I2P|Español]] - [[DebianWiki/EditorGuide#translation|(+)]] -~
##TAG:TRANSLATION-HEADER-END
<<TableOfContents()>>
## BEGIN_INCLUDE
== I2P (Anonymity Network) ==
||<tablestyle="float: right;"> {{attachment:I2P-icon_en_V01.png|I2P icon}} ||
=== About I2P ===
The Invisible Internet Project is an anonymous network layer intended to protect communication from censorship and surveillance. I2P provides anonymity by sending encrypted traffic through a volunteer-run network distributed around the world.
=== Services Offered ===
The following services are offered via I2P in !FreedomBox by default. Additional services may be available when enabled from I2P router console that can be launched from !FreedomBox web interface.
* '''Anonymous Internet browsing''': I2P can be used to browse Internet anonymously. For this, configure your browser (preferable a Tor Browser) to connect to I2P proxy. This can be done by setting HTTP proxy and HTTPS proxy to ''freedombox.local'' (or your !FreedomBox's local IP address) and ports to ''4444'' and ''4445'' respectively. This service is available only when you are reaching !FreedomBox using local network (networks in internal zone) and not available when connecting to !FreedomBox from the Internet. One exception to this is when you connect to !FreedomBox's VPN service from Internet you can still use this service.
* '''Reaching eepsites''': I2P network can host websites that can remain anonymous. These are called eepsites and end with .i2p in their domain name. For example, http://i2p-projekt.i2p/ is the website for I2P project in the I2P network. eepsites are not reachable using a regular browser via regular Internet connection. To browse eepsites, your browser needs to be configured to use HTTP, HTTPS proxies as described above. This service is available only when you are reaching !FreedomBox using local network (networks in internal zone) and not available when connecting to !FreedomBox from the Internet. One exception to this is when you connect to !FreedomBox's VPN service from Internet you can still use this service.
* '''Anonymous torrent downloads''': I2PSnark, an application for anonymously downloading and sharing files over the !BitTorrent network is available in I2P and enabled by default in !FreedomBox. This application is controlled via a web interface that can be launched from 'Anonymous torrents' section of I2P app in !FreedomBox web interface or from the I2P router console interface. Only logged-in users belonging to 'Manage I2P application' group can use this service.
* '''IRC network''': I2P network contains an IRC network called Irc2P. This network hosts the I2P project's official IRC channel among other channels. This service is enabled by default in !FreedomBox. To use it, open your favourite IRC client. Then configure it to connect to host ''freedombox.local'' (or your !FreedomBox's local IP address) with port number ''6668''. This service is available only when you are reaching !FreedomBox using local network (networks in internal zone) and not available when connecting to !FreedomBox from the Internet. One exception to this is when you connect to !FreedomBox's VPN service from Internet you can still use this service.
* '''I2P router console''': This is the central management interface for I2P. It shows the current status of I2P, bandwidth statistics and allows modifying various configuration settings. You can tune your participation in the I2P network and use/edit a list of your favourite I2P sites (eepsites). Only logged-in users belonging to 'Manage I2P application' group can use this service.
=== External links ===
* Upstream website: https://geti2p.net/en/
* User documentation: https://i2pd.readthedocs.io/en/latest/
## END_INCLUDE
Back to [[FreedomBox/Features|Features introduction]] or [[FreedomBox/Manual|manual]] pages.
<<Include(FreedomBox/Portal)>>

View File

@ -1,55 +0,0 @@
#language en
##TAG:TRANSLATION-HEADER-START
Translations ~- [[DebianWiki/EditorGuide#translation|(+)]] - [[FreedomBox/Manual/Kiwix|English]] - [[es/FreedomBox/Manual/Kiwix|Español]] -~
##TAG:TRANSLATION-HEADER-END
<<TableOfContents()>>
## BEGIN_INCLUDE
== Kiwix (Offline Wikipedia) ==
'''Available since:''' version 23.19
||<tablestyle="float: right;"> {{attachment:kiwix-tile.png|Kiwix icon}} ||
[[https://en.wikipedia.org/wiki/Kiwix|Kiwix]] can serve archives of websites offline. It was originally created to serve an offline version of Wikipedia, the free encyclopedia.
=== Use Cases ===
[[https://en.wikibooks.org/wiki/FreedomBox_for_Communities|FreedomBox for Communities]] was already using Kiwix years before it was officially included as an app. Kiwix was used to serve content over community Wi-Fi networks in [[https://en.wikipedia.org/wiki/Gangadevipalli#Free_Community_WiFi|villages]] of India with unreliable or insufficient Internet access. In addition to an offline Wikipedia, Kiwix served
* the archive "Wikipedia for Schools" which was used by school teachers and students for homework assignments and as a teaching aid.
* the archive "!WikiSource (in Telugu)" which served as a digital library.
Kiwix is also useful when you have reliable Internet access.
1. Archival and preservation: Archives of websites can be created and preserved as ZIM files. These archives can be served using Kiwix.
2. Fast access to slow websites: An offline archive can be faster to access than a website.
3. Access to websites that can be temporarily unavailable. For example, the Low Tech Magazine is hosted on a solar-powered single-board computer and could go offline sometimes. There is a Kiwix archive available for it which can be hosted locally.
=== Kiwix on FreedomBox ===
!FreedomBox serves the Debian package called kiwix-tools which allows managing and serving content archives in ZIM file format. ZIM files can be added or removed by a !FreedomBox administrator or any user in the "kiwix" user group.
Kiwix on !FreedomBox is available via web interface only. There are mobile and desktop clients for Kiwix, but they can only read local archives. They cannot pull content from Kiwix hosted on !FreedomBox.
The web interface of Kiwix is available for public access by default.
=== Finding content archives ===
To find content for Kiwix, go to [[https://library.kiwix.org|library.kiwix.org]]. You can download archives (called "books") using direct download or using BitTorrent. The website itself is a Kiwix installation, so you can have a preview of the content before downloading, to check that the archive is not broken.
An alternative source of the same files is [[https://wiki.kiwix.org/wiki/Main_Page|wiki.kiwix.org]], a wiki with download links and more information about the Kiwix project.
=== Creating content archives ===
The [[https://openzim.org/|OpenZim]] project maintains tools to create ZIM files. The tool [[https://github.com/openzim/zimit|zimit]] is a complete solution that can scrape a website and create a ZIM file. You can also request a ZIM archive using the website [[https://youzim.it|youzim.it]].
=== External links ===
* Upstream project: https://kiwix.org/
* Upstream documentation: https://kiwix.org/frequently-asked-questions/
## END_INCLUDE
Back to [[FreedomBox/Features|Features introduction]] or [[FreedomBox/Manual|manual]] pages.
<<Include(FreedomBox/Portal)>>
----
CategoryFreedomBox

View File

@ -24,7 +24,7 @@ Freedom Maker is [[https://www.gnu.org/philosophy/|Free Software]] licensed unde
=== Building FreedomBox Images === === Building FreedomBox Images ===
* You can get Freedom Maker from its [[https://salsa.debian.org/freedombox-team/freedom-maker.git|Git repository]] and follow the instructions in the README to [[https://salsa.debian.org/freedombox-team/freedom-maker/blob/main/README.md|build a FreedomBox image]]. * You can get Freedom Maker from its [[https://salsa.debian.org/freedombox-team/freedom-maker.git|Git repository]] and follow the instructions in the README to [[https://salsa.debian.org/freedombox-team/freedom-maker/blob/master/README.md|build a FreedomBox image]].
=== Support === === Support ===

View File

@ -41,14 +41,9 @@ After that, save your changes, restart minetest one more time, then you should b
=== External links === === External links ===
* Upstream Project: https://www.minetest.net * Website: https://www.minetest.net
* Upstream Documentation: https://wiki.minetest.net * Wiki: https://wiki.minetest.net
* [[Games/Minetest|Debian Minetest Wiki]] * Using !Minetest in Education: https://www.minetest.net/education/
* Using Minetest in Education: https://www.minetest.net/education/
==== Client Apps ====
* Debian: the client app package name is DebianPkg:minetest.
* Other platforms: https://www.minetest.net/downloads/
## END_INCLUDE ## END_INCLUDE

View File

@ -74,7 +74,6 @@ your language.
=== External links === === External links ===
* Upstream project site: http://minidlna.sourceforge.net * Upstream project site: http://minidlna.sourceforge.net
* Upstream documentation and support: https://sourceforge.net/projects/minidlna/support
* Debian MiniDLNA wiki: https://wiki.debian.org/minidlna * Debian MiniDLNA wiki: https://wiki.debian.org/minidlna
* About DLNA: https://en.wikipedia.org/wiki/Digital_Living_Network_Alliance * About DLNA: https://en.wikipedia.org/wiki/Digital_Living_Network_Alliance

View File

@ -1,69 +0,0 @@
#language en
##TAG:TRANSLATION-HEADER-START
~- [[FreedomBox/Manual/Miniflux|English]] - [[es/FreedomBox/Manual/Miniflux|Español]] - [[DebianWiki/EditorGuide#translation|(+)]] -~
##TAG:TRANSLATION-HEADER-END
<<TableOfContents()>>
## BEGIN_INCLUDE
== Miniflux (News Feed Reader) ==
||<tablestyle="float: right;"> {{attachment:Miniflux-icon_en_v01.png|Miniflux icon}} ||
'''Available since:''' !FreedomBox on Debian 13 (Trixie)
Miniflux is a minimalist and opinionated news feed reader supporting a wide variety of feed formats - RSS, ATOM, RDF and JSON. It is an alternative to [[FreedomBox/Manual/TinyTinyRSS|Tiny Tiny RSS]] on !FreedomBox.
=== Clients ===
The primary web interface is mobile-friendly and optimized for readability. Miniflux is a progressive web application. It can be added to the home screen on mobile and accessed like a native application.
Miniflux server provides an API for clients. It is also compatible with existing applications built for Fever or Google Reader API. There is a listing of [[https://miniflux.app/docs/apps.html|clients]] for various desktop and mobile platforms on the official website.
=== Reader ===
Miniflux's reader supports several content types. In addition to the usual blog posts and comics which most feed readers support, you can also listen to podcasts and play videos from within Miniflux. !YouTube videos are played using youtube-nocookie.com or (optional) a proxy like invidious.io to prevent tracking your preferences across websites. Miniflux also removes tracking pixels and all external !JavaScript.
Miniflux has a content scraper that allows you to fetch and read the full article even if the site only publishes a summary in their feed. Only the relevant content is scraped, providing a reading experience similar to Firefox Reader View. This scraper is also capable of fetching the video duration from !YouTube or Invidious.
=== Other Features ===
Miniflux provides some quality-of-life features like full-text search (powered by PostgreSQL database), [[https://miniflux.app/docs/rules.html|filtering rules]], [[https://miniflux.app/docs/keyboard_shortcuts.html|keyboard shortcuts]] and touch events. There are integrations with several applications like read-it-later solutions, bookmarking tools (Shaarli) and messaging apps (Matrix). If you don't use Shaarli, starring an article within Miniflux is equivalent to bookmarking it.
Miniflux doesn't permit installing additional plugins or themes. You can pick one of the existing light/dark themes or install a browser extension to read in a different theme.
=== Miniflux on FreedomBox ===
==== User Management ====
Miniflux does not integrate with the existing single sign-on mechanisms in !FreedomBox. The !FreedomBox app for Miniflux provides an option to create administrator users. Once an administrator user is created, any further users (administrator or not) can be created and managed from within Miniflux settings.
The !FreedomBox app also provides an option to reset any Miniflux user's password. This is especially convenient in the case where there is only one person using Miniflux. Without this option, in case the only user of Miniflux forgets their password, another administrator user must be created to reset this user's password from Miniflux settings.
Since Miniflux accounts are not tied to !FreedomBox accounts, you can provide Miniflux accounts to your friends who do not have accounts on your !FreedomBox.
==== Migrating from Tiny Tiny RSS ====
TODO
==== Integrations ====
1. Adding a bookmark to Shaarli
2. Posting feeds to a Matrix channel
3. RSS-Bridge
=== External links ===
* Upstream project: https://miniflux.app
* Upstream documentation: https://miniflux.app/docs/index.html
## END_INCLUDE
Back to [[FreedomBox/Features|Features introduction]] or [[FreedomBox/Manual|manual]] pages.
<<Include(FreedomBox/Portal)>>
----
CategoryFreedomBox

View File

@ -10,61 +10,7 @@
== Name Services == == Name Services ==
Name Services provides an overview of ways the box can be reached from the public Internet: domain name, Tor Onion Service, and Pagekite. For each type of name, it is shown whether the HTTP, HTTPS, and SSH services are enabled or disabled for incoming connections through the given name. It also shows and allows configuring how !FreedomBox performs domain name resolutions. Name Services provides an overview of ways the box can be reached from the public Internet: domain name, Tor Onion Service, and Pagekite. For each type of name, it is shown whether the HTTP, HTTPS, and SSH services are enabled or disabled for incoming connections through the given name.
=== Adding Domain Name to FreedomBox ===
Domain names are unique names assigned to computers and servers to identify and reach them easily without having remember their more technical (IP) addresses.
Adding at least one domain name to your !FreedomBox through one of the supported methods is necessary if you wish to access various apps from outside of your home network. Even at home, adding a domain name allows you to have a TLS certificate that is essential for accessing apps securely through HTTPS. The following types of domains are supported:
* A regular domain that is purchased from a domain registrar. These domains looks like `mydomain.example`. These types of domains require that your !FreedomBox machine or your home network router have a public IP address provided by your ISP. All apps can be accessed using these domains.
* A dynamic domain that can obtained from a dynamic DNS provider. !FreedomBox foundation provides a free dynamic DNS domain for all !FreedomBox users at https://ddns.freedombox.org . These domains look like `mydomain.fbx.one` or `mydomain.freedombox.rocks`. These types of domains require that your !FreedomBox machine or your home network router have a public IP address provided by your ISP. The public IP may be changed by the ISP regularly and DNS records will be updated accordingly. All apps can be accessed using these domains. These types of domains are configured using the [[FreedomBox/Manual/DynamicDNS|Dynamic DNS]] app in !FreedomBox.
* A Tor Onion domain that can be obtained by setting up Tor app. These domains look like `mysitenameyx4fi3l6x2gyzmtmgxjyqyorj9qsb5r543izcwymle.onion`. These types of domains don't require a public IP address from your ISP. However, only web or SSH based services/apps work on this type of domain. Further, only users of Tor will be able to reach these domains. A regular browser will not be able to reach these services. These types of domains are configured using the [[FreedomBox/Manual/Tor|Tor]] app in !FreedomBox.
* A !PageKite domain that can obtained from a !PageKite service provider. This service can be purchased at https://pagekite.net . These domains look like `https://mydomain.pagekite.net`. These types of domains don't require a public IP address from your ISP. However, only web or SSH based services/apps work on this type of domain. These types of domains are configured using the [[FreedomBox/Manual/PageKite|PageKite]] app in !FreedomBox.
=== Subdomains ===
Subdomains are similar to domains, but reside under the a domain name. For example, for a domain `mydomain.example` a subdomain could be `myapp.mydomain.example`. Some applications such as [[FreedomBox/Manual/HomeAssistant|Home Assistant]] in !FreedomBox require you to setup and access them over a subdomain instead of a URL path. You can obtain and setup subdomains in the following ways:
* If you own a regular domain (as described above), you can login to the web console provided by your domain registrar and add a subdomain. Make the subdomain a CNAME of the original domain or assign A and AAAA records similar to the original domain. See your domain registrar's documentation for more information. After adding DNS entries for the subdomain, let !FreedomBox know that it can use the subdomain by adding it as another regular domain. TLS certificates (for HTTPS) will be automatically obtained by !FreedomBox using Let's Encrypt for these subdomains.
* If you have a dynamic domain name from !FreedomBox foundation, you can also get an unlimited number of free subdomains. For this, login to your account at https://ddns.freedombox.org, go to `Change Settings`, check the option `Wild Card`, and click `Save Changes`. After this you can add any number of subdomains like `foo.myaccount.fbx.one` to your !FreedomBox in `System` -> `Names` -> `Add Domain (regular)`. TLS certificates (for HTTPS) will be automatically obtained by !FreedomBox using Let's Encrypt for these subdomains. Also see [[FreedomBox/Manual/DynamicDNS|Dynamic DNS]] documentation page.
=== systemd-resolved ===
From release 24.19, !FreedomBox uses systemd-resolved as caching DNS resolver and replaces resolvconf for managing DNS server configuration. This improves privacy and security. Newer installations will come with systemd-resolved and older machines will automatically switch after an upgrade to this new release.
systemd-resolved automatically acquires DNS servers from Network Manager, the default and recommended way to configure networks on !FreedomBox. However, if you are manually managing network configuration by editing /etc/network/interfaces, you will need to ensure that the DNS servers acquired are passed on to systemd-resolved. Otherwise, Fallback DNS servers will be used. See below.
=== Support for DNS-over-TLS and DNSSEC ===
systemd-resolved supports DNS-over-TLS. This protocol allows encrypting DNS
communication between !FreedomBox and the DNS server if your DNS server
(typically provided by your ISP, sometimes a separate service) has support for
it. This improves both privacy and security as it makes it harder for
intermediaries to see the communication or manipulate it. New settings for
enabling DNS-over-TLS are available at the global level (for all network interfaces) in Name Services app and at the per-connection level in the Networks app's connection settings.
systemd-resolved supports DNSSEC. This standard allows website owners to sign
their DNS records allowing clients to authenticate them. This improves security
by making it harder to manipulate DNS responses. If your DNS server supports
this feature, it can be turned on. New setting for enabling DNSSEC is available
in the Name Services app.
You can detect whether your current DNS supports DNS-over-TLS and DNSSEC by turning them on in the settings one at a time and running the diagnostics for the Names app. There is a diagnostic check which detects whether you can successfully resolve the domain name deb.debian.org.
=== Setting a custom DNS server ===
If your current DNS server provided by your ISP does not support DNS-over-TLS or DNSSEC
features, is censoring some domains names, or if you don't trust them enough,
you can instead use one of the publicly available DNS servers. This can be done by
editing network connections in the Networks app and adding DNS servers manually.
You will need to deactivate and re-activate the network connection (or restart
!FreedomBox) for the settings to become active. After this, Names app will show you the
currently configured DNS servers.
=== Fallback DNS servers ===
In some cases, when internet connection is available to the system by no DNS servers are known to systemd-resolved, the fallback DNS servers are used. This may happen, for example, due to misconfiguration when manually managing network configuration instead of using !FreedomBox's default, the Network Manager. These fallback DNS servers, as defaulted by the upstream systemd project, include servers from Cloudflare and Google DNS servers. This has privacy implications but we felt that it was important to avoid !FreedomBox from becoming unreachable due to misconfiguration. It was a difficult decision. Once you have proper DNS configuration and you know that it works, you can turn off fallback DNS servers using a new setting in the Privacy app. There is also a renewed notification in the web interface that will attract your attention towards this. You may also edit the list of Fallback DNS servers by creating a configuration file for systemd-resolved. See [[https://www.freedesktop.org/software/systemd/man/latest/systemd-resolved.html|systemd-resolved documentation]].
## END_INCLUDE ## END_INCLUDE

View File

@ -1,58 +0,0 @@
#language en
##TAG:TRANSLATION-HEADER-START
~- [[FreedomBox/Manual/Nextcloud|English]] - [[DebianWiki/EditorGuide#translation|(+)]] -~
##TAG:TRANSLATION-HEADER-END
<<TableOfContents()>>
## BEGIN_INCLUDE
== Nextcloud (File Storage & Collaboration) ==
||<tablestyle="float: right;"> {{attachment:nextcloud.png|Nextcloud icon}} ||
'''Available since''': !FreedomBox 24.8
=== What is Nextcloud? ===
This page is new and needs a Nexcloud user to help with the content. This could be you!
Nextcloud is a self-hosted productivity platform which provides private and secure functions for file sharing, collaborative work, and more. Nextcloud includes the Nextcloud server, client applications for desktop computers, and mobile clients. The Nextcloud server provides a well integrated web interface.
All users of !FreedomBox can use Nextcloud. To perform administrative actions, use the "nextcloud-admin" user after setting a password here.
Please note that Nextcloud is installed and run inside a container provided by the Nextcloud community. Security, quality, privacy and legal reviews are done by the upstream project and not by Debian/FreedomBox. Updates are performed following an independent cycle.
{{{#!wiki comment
=== Screenshot ===
Please add a screenshot of your Nextcloud suitable for public display.
}}}
{{{#!wiki comment
=== Using Nextcloud ===
If you are a Nextcloud user share how this is done.
}}}
=== External Links ===
* Upstream Project: https://nextcloud.com/
* Upstream documentation: https://nextcloud.com/support/
* Upstream support forum: https://help.nextcloud.com/
* Source code for Nextcloud: https://download.nextcloud.com/server/releases/
* Source code for the container image: https://github.com/nextcloud/docker (includes links to source code for other components)
* Debian Nextcloud wiki: https://wiki.debian.org/Nextcloud
{{{#!wiki comment
=== Client Apps ===
If this app has or needs client applications (apart from a web browser) list these here. As a Debian pure-blend the FreedomBox wiki should be suggesting client software that adheres to the Debian Free Software Guidelines. If this is not possible it should be noted.
}}}
## END_INCLUDE
Back to [[FreedomBox/Features|Features introduction]] or [[FreedomBox/Manual|manual]] pages.
<<Include(FreedomBox/Portal)>>
----
CategoryFreedomBox

View File

@ -127,6 +127,7 @@ The following services are known to '''work''':
* [[FreedomBox/Manual/Privoxy|Privoxy]], * [[FreedomBox/Manual/Privoxy|Privoxy]],
* [[FreedomBox/Manual/Tor|Tor Socks]], * [[FreedomBox/Manual/Tor|Tor Socks]],
* [[FreedomBox/Manual/Shadowsocks|Shadowsocks]], * [[FreedomBox/Manual/Shadowsocks|Shadowsocks]],
* [[FreedomBox/Manual/I2P|I2P Proxy]] and
* [[FreedomBox/Manual/Samba|Samba]]. * [[FreedomBox/Manual/Samba|Samba]].
Some services are known '''not''' to work at this time: Some services are known '''not''' to work at this time:
@ -137,7 +138,6 @@ Some services are known '''not''' to work at this time:
=== External Links === === External Links ===
* Upstream Project: https://openvpn.net/ * Upstream Project: https://openvpn.net/
* Upstream documentation: https://openvpn.net/connect-docs/
* Debian OpenVPN wiki: https://wiki.debian.org/OpenVPN * Debian OpenVPN wiki: https://wiki.debian.org/OpenVPN
* Wiki / Tracker: https://community.openvpn.net/openvpn * Wiki / Tracker: https://community.openvpn.net/openvpn

View File

@ -25,8 +25,7 @@ The [[https://www.olimex.com/Products/OLinuXino/Home-Server/Pioneer-FreedomBox-H
* an optional storage add-on for hard disk (HDD) or solid-state drive (SSD) * an optional storage add-on for hard disk (HDD) or solid-state drive (SSD)
=== Recommended Hardware === === Recommended Hardware ===
This is the hardware recommended for all users who just want a turn-key !FreedomBox, and '''don't''' want to '''build''' their own one.
This is a hardware recommended for all users who just want a turn-key !FreedomBox, and '''don't''' want to '''build''' their own one.
(Building your own !FreedomBox means some technical stuff like choosing and buying the right components, downloading the image and preparing the SD card). (Building your own !FreedomBox means some technical stuff like choosing and buying the right components, downloading the image and preparing the SD card).
@ -146,7 +145,7 @@ cd <source_directory>
==== Building Disk Images ==== ==== Building Disk Images ====
You can also build !FreedomBox disk images for various hardware platforms using the freedom-maker tool. This is also available as a Debian package and source code for it may be obtained using the above methods. [[https://salsa.debian.org/freedombox-team/freedom-maker/blob/main/README.md|Build instructions]] for creating disk images are available as part of the source code for freedom-maker package. You can also build !FreedomBox disk images for various hardware platforms using the freedom-maker tool. This is also available as a Debian package and source code for it may be obtained using the above methods. [[https://salsa.debian.org/freedombox-team/freedom-maker/blob/master/README.md|Build instructions]] for creating disk images are available as part of the source code for freedom-maker package.
!FreedomBox disk images are built and uploaded to official servers using automated Continuous Integration infrastructure. This infrastructure is available as [[https://salsa.debian.org/freedombox-team/infrastructure|source code]] too and provides accurate information on how !FreedomBox images are built. !FreedomBox disk images are built and uploaded to official servers using automated Continuous Integration infrastructure. This infrastructure is available as [[https://salsa.debian.org/freedombox-team/infrastructure|source code]] too and provides accurate information on how !FreedomBox images are built.

View File

@ -14,7 +14,7 @@
$ sudo apt-get install freedombox $ sudo apt-get install freedombox
}}} }}}
* You can also get !FreedomBox Service from its [[https://salsa.debian.org/freedombox-team/freedombox/|Git repository]] and [[https://salsa.debian.org/freedombox-team/freedombox/blob/main/INSTALL.md|install from source]]. * You can also get !FreedomBox Service from its [[https://salsa.debian.org/freedombox-team/freedombox/|Git repository]] and [[https://salsa.debian.org/freedombox-team/freedombox/blob/master/INSTALL.md|install from source]].
=== Screenshots === === Screenshots ===
@ -49,7 +49,7 @@ We are looking for help to improve !FreedomBox Service. You can contribute to !
* The primary Git repository is hosted at [[https://salsa.debian.org/freedombox-team/freedombox/|FreedomBox Salsa Page]]. * The primary Git repository is hosted at [[https://salsa.debian.org/freedombox-team/freedombox/|FreedomBox Salsa Page]].
* Instructions for [[https://salsa.debian.org/freedombox-team/freedombox/blob/main/INSTALL.md|installing from source]] and [[https://salsa.debian.org/freedombox-team/freedombox/blob/main/HACKING.md|hacking the source]] are available. * Instructions for [[https://salsa.debian.org/freedombox-team/freedombox/blob/master/INSTALL.md|installing from source]] and [[https://salsa.debian.org/freedombox-team/freedombox/blob/master/HACKING.md|hacking the source]] are available.
* List of bugs, TODO items and feature requests are available on the [[https://salsa.debian.org/freedombox-team/freedombox/issues|issue tracker]]. * List of bugs, TODO items and feature requests are available on the [[https://salsa.debian.org/freedombox-team/freedombox/issues|issue tracker]].

View File

@ -51,8 +51,8 @@ The default installation should provide a reasonable starting point for most. Th
=== External links === === External links ===
* Upstream project: https://www.privoxy.org * Website: https://www.privoxy.org
* Upstream documentation: https://www.privoxy.org/user-manual/index.html * User manual: https://www.privoxy.org/user-manual/index.html
## END_INCLUDE ## END_INCLUDE

View File

@ -92,7 +92,7 @@ By the way, the German verb ''quasseln'' means ''talking a lot'', to ''jabber''.
=== External links === === External links ===
* Upstream Project: https://quassel-irc.org * Upstream Project: https://quassel-irc.org
* Upstream documentation: https://bugs.quassel-irc.org/projects/quassel-irc/wiki * Wiki: https://bugs.quassel-irc.org/projects/quassel-irc/wiki
## END_INCLUDE ## END_INCLUDE

View File

@ -15,35 +15,18 @@ The easy way is to [[https://freedomboxfoundation.org/buy/|buy]] a !FreedomBox k
Alternatively you may choose to build it yourself, by gathering all the components: Alternatively you may choose to build it yourself, by gathering all the components:
* A supported [[FreedomBox/Hardware|device]] (including any device that can run Debian). We will call that the !FreedomBox in the rest of this manual. * A supported [[FreedomBox/Hardware|device]] (including any device that can run Debian). We will call that the !FreedomBox in the rest of this manual.
* A power cable for your device. * A power cable for your device.
* An Ethernet cable. * An ethernet cable.
* A microSD card (or equivalent storage media for your device), prepared according to the instructions on the [[FreedomBox/Download|Download]] page. * A microSD card (or equivalent storage media for your device), prepared according to the instructions on the [[FreedomBox/Download|Download]] page.
== How to get started == == How to get started ==
1. Plug one end of your Ethernet cord into your !FreedomBox's Ethernet port, and plug the other end into your router. 1. Plug one end of your ethernet cord into your !FreedomBox's ethernet port, and plug the other end into your router.
1. Power on the !FreedomBox. 1. Power on the !FreedomBox.
* '''Note:''' On most single board computers, don't expect any output on a monitor connected via HDMI as the support may not exist in the kernel. See below to access and control your !FreedomBox via network. * '''Note:''' On most single board computers, don't expect any output on a monitor connected via HDMI as the support may not exist in the kernel. See below to access and control your !FreedomBox via network.
1. On first boot, !FreedomBox will perform its initial setup (older versions of !FreedomBox reboot after this step). This process may take several minutes on some machines. After giving it about 10 minutes, proceed to the next step. 1. On first boot, !FreedomBox will perform its initial setup (older versions of !FreedomBox reboot after this step). This process may take several minutes on some machines. After giving it about 10 minutes, proceed to the next step.
1. After the !FreedomBox has finished its initial setup, you can access its web interface through your web browser. 1. After the !FreedomBox has finished its initial setup, you can access its web interface through your web browser.
* If your computer is connected directly to the !FreedomBox through a second (LAN) ethernet port, you can browse to: http://freedombox/ or http://10.42.0.1/.
* If your computer supports mDNS (GNU/Linux, Mac OSX or Windows with mDNS software installed), you can browse to: http://freedombox.local/ (or http://the-hostname-you-entered-during-install.local/) * If your computer supports mDNS (GNU/Linux, Mac OSX or Windows with mDNS software installed), you can browse to: http://freedombox.local/ (or http://the-hostname-you-entered-during-install.local/)
* If your computer is connected to a monitor and !FreedomBox is able to display text to it, then the login prompt shows the web address. It looks like this:
{{{
Debian GNU/Linux 13 freedombox tty1
FreedomBox
To start using FreedomBox and to create an account, access using a web browser
one of the following URLs.
http://freedombox.local/
http://192.168.0.2/
http://[fe80::7207:12ff:fe34:5678]/
...
freedombox login:
}}}
* If your computer is connected directly to the !FreedomBox through a second (LAN) Ethernet port, you can browse to: http://freedombox/ or http://10.42.0.1/.
* If you know your way around the router's web interface, you can look up the IP address of the !FreedomBox there, and browse to that address. * If you know your way around the router's web interface, you can look up the IP address of the !FreedomBox there, and browse to that address.
* If none of these methods are available, then you will need to figure out the IP address of your !FreedomBox. You can use the "nmap" program from your computer to find its IP address: * If none of these methods are available, then you will need to figure out the IP address of your !FreedomBox. You can use the "nmap" program from your computer to find its IP address:
{{{ {{{
@ -73,7 +56,8 @@ Alternatively you may choose to build it yourself, by gathering all the componen
1. On accessing !FreedomBox's web interface your browser will warn you that it communicates securely but that it regards the security certificate for doing so as invalid. This is a fact you need to accept because the certificate is auto generated on the box and therefore "self-signed" (the browser might also use words such as "untrusted", "not private", "privacy error" or "unknown issuer/authority"). Telling your browser that you are aware of this might involve pressing buttons such as "I understand the Risks", "proceed to ... (unsafe)" or "Add exception". After installation this certificate can be changed to a normal one using the Let's Encrypt option. 1. On accessing !FreedomBox's web interface your browser will warn you that it communicates securely but that it regards the security certificate for doing so as invalid. This is a fact you need to accept because the certificate is auto generated on the box and therefore "self-signed" (the browser might also use words such as "untrusted", "not private", "privacy error" or "unknown issuer/authority"). Telling your browser that you are aware of this might involve pressing buttons such as "I understand the Risks", "proceed to ... (unsafe)" or "Add exception". After installation this certificate can be changed to a normal one using the Let's Encrypt option.
. {{attachment:ui_insecure_connection.png|Self-signed certificate warning|width=500}} . {{attachment:ui_insecure_connection.png|Self-signed certificate warning|width=600}}
. {{attachment:ui_add_security_exception.png|Add Security Exception|width=400}}
If the domain name you are using already has a valid certificate from a recognised Certificate Authority, such as from Let's Encrypt, you may not be able to access the web interface. This means that the option to continue will not be offered. This might occur, for example, if you are reinstalling your !FreedomBox or are otherwise reusing a domain name that has an associated certificate. If the domain name you are using already has a valid certificate from a recognised Certificate Authority, such as from Let's Encrypt, you may not be able to access the web interface. This means that the option to continue will not be offered. This might occur, for example, if you are reinstalling your !FreedomBox or are otherwise reusing a domain name that has an associated certificate.
@ -90,11 +74,8 @@ Alternatively you may choose to build it yourself, by gathering all the componen
1. The next page asks you to provide a user name and password. Fill in the form, and then click "Create Account." 1. The next page asks you to provide a user name and password. Fill in the form, and then click "Create Account."
* Note: The user that you create here has ``Admin`` privileges and can also [[FreedomBox/Manual/SecureShell|log in using ssh]]. For additional security, you may want to use a separate account for administrative tasks and for your normal, daily use. You can add more users later. * Note: The user that you create here has ``Admin`` privileges and can also [[FreedomBox/Manual/SecureShell|log in using ssh]]. For additional security, you may want to use a separate account for administrative tasks and for your normal, daily use. You can add more users later.
. {{attachment:ui_firstboot_account.png|Account|width=500}} . {{attachment:ui_firstboot_account.png|Account|width=500}}
1. After completing the form, you will be logged in to !FreedomBox's web interface and asked if you wish to receive more frequent updates (recommended). 1. After completing the form, you will be logged in to !FreedomBox's web interface and able to access apps and configuration through the interface.
. {{attachment:ui_firstboot_feature_updates.png|Feature Updates|width=500}}
1. Setup is complete. Now you can examine and possibly update several key configuration items or see which apps are available. Until you dismiss them, notifications accessible from the menu bar will remind you to review the key configuration items.
. {{attachment:ui_firstboot_complete.png|Complete|width=500}} . {{attachment:ui_firstboot_complete.png|Complete|width=500}}
. {{attachment:ui_firstboot_complete_notification.png|Complete|width=500}}
Now you can try [[FreedomBox/Features|any of the Apps]] that are available on !FreedomBox. Now you can try [[FreedomBox/Features|any of the Apps]] that are available on !FreedomBox.
@ -112,7 +93,7 @@ The front page includes shortcuts to apps that have been installed and are enabl
=== Apps menu === === Apps menu ===
The Apps menu can be accessed by clicking the grid icon, next to the !FreedomBox logo. This page lists all of the apps that are available for installing on !FreedomBox. Click the name of an app to visit its page, where you can install and configure it. Currently installed and enabled apps are shown above the remaining available apps. The Apps menu can be accessed by clicking the grid icon, next to the !FreedomBox logo. This page lists all of the apps that are available for installing on !FreedomBox. Click the name of an app to visit its page, where you can install and configure it.
{{attachment:ui_apps.png|Apps|width=600}} {{attachment:ui_apps.png|Apps|width=600}}

View File

@ -142,8 +142,8 @@ If you are using a contacts file exported from another service or application, i
=== External links === === External links ===
* Upstream Project: https://radicale.org/3.0.html * Upstream Project: https://radicale.org/3.0.html
* Upstream Documentation: https://radicale.org/v3.html#documentation-1
* Debian Radicale wiki: https://wiki.debian.org/Radicale * Debian Radicale wiki: https://wiki.debian.org/Radicale
* User Documentation: https://radicale.org/v3.html#documentation-1
## END_INCLUDE ## END_INCLUDE

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
{{attachment:rockpro64.jpg|RockPro64|width=640,height=385}} {{attachment:rockpro64.jpg|RockPro64|width=640,height=385}}
Pine64's [[https://pine64.org/devices/rockpro64/|RockPro64]] is a powerful single board computer. It uses the Rockchip RK3399 Hexa Core ARM64 processor. !FreedomBox images are built and tested for this device. Pine64's [[https://www.pine64.org/rockpro64/|RockPro64]] is a powerful single board computer. It uses the Rockchip RK3399 Hexa Core ARM64 processor. !FreedomBox images are built and tested for this device.
'''Important:''' Read [[FreedomBox/Hardware|general advice]] about hardware before building a !FreedomBox with this single board computer. '''Important:''' Read [[FreedomBox/Hardware|general advice]] about hardware before building a !FreedomBox with this single board computer.

View File

@ -66,8 +66,8 @@ stored on a Samba share, the last one to save the file wins.
=== External links === === External links ===
* Upstream Project: https://www.samba.org * Upstream Project: https://www.samba.org
* Upstream documentation: https://www.samba.org/samba/docs
* Debian Samba wiki: https://wiki.debian.org/Samba * Debian Samba wiki: https://wiki.debian.org/Samba
* User documentation: https://www.samba.org/samba/docs
## END_INCLUDE ## END_INCLUDE

View File

@ -56,8 +56,8 @@ Searx uses HTTP POST instead of GET by default to send your search queries to th
=== External links === === External links ===
* Upstream Project: https://searx.github.io/searx/ * Upstream Project: https://searx.github.io/searx/
* Upstream documentation: https://searx.github.io/searx/user/index.html
* Searx wiki: https://github.com/searx/searx/wiki * Searx wiki: https://github.com/searx/searx/wiki
* User documentation: https://searx.github.io/searx/user/index.html
## END_INCLUDE ## END_INCLUDE

View File

@ -23,7 +23,7 @@ Shaarli is personal (single-user) bookmarking application to install on your !Fr
=== External links === === External links ===
* Upstream Project: https://shaarli.readthedocs.io/en/master/index.html * Upstream Project: https://shaarli.readthedocs.io/en/master/index.html
* Upstream documentation: https://shaarli.readthedocs.io/en/master/Usage.html * User documentation: https://shaarli.readthedocs.io/en/master/Usage.html
## END_INCLUDE ## END_INCLUDE

View File

@ -57,7 +57,7 @@ If your !FreedomBox is behind a router, you will need to set up port forwarding
=== External links === === External links ===
* Upstream Project: https://shadowsocks.org/ * Upstream Project: https://shadowsocks.org/
* Upstream Documentation: https://shadowsocks.org/doc/what-is-shadowsocks.html * User Documentation: https://shadowsocks.org/doc/what-is-shadowsocks.html
## END_INCLUDE ## END_INCLUDE

View File

@ -20,13 +20,15 @@ The content can be shared publicly or restricted to the users of listed allowed
=== Setting Up Shares === === Setting Up Shares ===
* In !FreedomBox web interface, enable the Sharing App. Only admins can create, edit or remove shares. They'll find the Sharing app in the Apps section of the !FreedomBox web interface. Many shares can coexist in the same server. For the users to access the content through their browser it must exist and have a share. A share is an entry in the Sharing app relating:
* Add a new share * the Name (an thereby the URL) with which the users will ask for the content,
* Give it a name (an thereby the URL) with which the users will ask for the content. In the example above it would be called ''content_name''. * the Disk Path of the content to be served and
* The Disk Path of the content to be served. This path is relative to ''root'' on your !FreedomBox. For instance ''/var/lib/freedombox/sharing/content_name'' might be a choice. * the sharing mode. On restricted mode, it also has the list of allowed groups.
* Sharing mode. On restricted mode, it also has the list of allowed groups. Only groups recognized by !FreedomBox service can be combined in the list of allowed groups. Groups created in the CLI won't be offered by the Sharing app. Many shares can coexist in the same server.
* Create the directory specified under ''Disk Path'' on your !FreedomBox through ''Cockpit'', ''Nautilus'' or remote login.
* Make sure the user, who will provide the content, has write access to that directory for instance by making him the owner of that directory. Only admins can create, edit or remove shares. They'll find the Sharing app in the Apps section of !FreedomBox web interface. Sharing app is an easy to use web application with an evident interface.
Each share has its own sharing mode (public or restricted) setting. Only groups recognized by !FreedomBox service can be combined in the list of allowed groups. Groups created in the CLI won't be offered by the Sharing app.
=== Providing/Updating Content === === Providing/Updating Content ===
@ -44,8 +46,8 @@ Sharing will share the content using the built-in Apache web server.
=== External Links === === External Links ===
* Upstream Project: https://projects.apache.org/project.html?httpd-http_server * Upstream Project: https://projects.apache.org/project.html?httpd-http_server
* Upstream Documentation: https://httpd.apache.org/docs/2.4/en/mod/mod_alias.html
* Debian Apache Wiki: https://wiki.debian.org/Apache * Debian Apache Wiki: https://wiki.debian.org/Apache
* User Documentation: https://httpd.apache.org/docs/2.4/en/mod/mod_alias.html
## END_INCLUDE ## END_INCLUDE

View File

@ -64,8 +64,8 @@ If your notes are only ever going to be personal, a simpler solution exists. It
=== External links === === External links ===
* Upstream project: https://syncthing.net * Website: https://syncthing.net
* Upstream documentation: https://docs.syncthing.net * User documentation: https://docs.syncthing.net
## END_INCLUDE ## END_INCLUDE

View File

@ -1,83 +0,0 @@
#language en
##TAG:TRANSLATION-HEADER-START
~- [[FreedomBox/Manual/TiddlyWiki|English]] - [[es/FreedomBox/Manual/TiddlyWiki|Español]] - [[DebianWiki/EditorGuide#translation|(+)]]-~
##TAG:TRANSLATION-HEADER-END
<<TableOfContents()>>
## BEGIN_INCLUDE
== TiddlyWiki (Non-linear Notebooks) ==
||<tablestyle="float: right;"> {{attachment:TiddlyWiki-on-FreedomBox.png|TiddlyWiki icon}} ||
'''Available since''': version 24.17
!TiddlyWiki is an interactive, nonlinear web notebook for capturing and organizing complex information. It can serve as a knowledge management system for one person. It is portable (single HTML file), highly customizable and easy to use. Despite being a single HTML file, !TiddlyWiki can embed multiple types of media - images, audio, video and PDF files (or refer to them by file paths, not as portable). It can also store data in JSON format.
=== TiddlyWiki on FreedomBox ===
!FreedomBox includes a native implementation of a Feather Wiki Nest (a server to save your wiki files). The same is used to host !TiddlyWiki files. This implementation is not as efficient as the official !TiddlyWiki server which can save one Tiddler at a time, instead of saving the entire HTML file.
==== Bandwidth considerations with the Autosave setting ====
Each empty !TiddlyWiki file (2.4 MB) is 40x the size of an empty Feather Wiki file (60 KB). !TiddlyWiki has autosave enabled by default. This causes the entire wiki file to be transmitted to the server, each time an individual Tiddler is saved. You might write long wiki pages in Feather Wiki, but !TiddlyWiki encourages writing lots of short Tiddlers which results in more saves for the same amount of text. !TiddlyWiki files tend to grow large as you add media content, with people growing their wikis to 100 MB in size over the years.
If you are editing while using mobile data or you are connected via a dial-up connection, hundreds of (2.4 MB + content) saves can add up quickly. In such cases, it is recommended to disable autosave from the settings and save manually.
{{attachment:TiddlyWiki-Autosave.png|TiddlyWiki Autosave Settings|width=800}}
=== Use cases ===
* '''Personal Wiki''': !TiddlyWiki can be used as a personal wiki to store all kinds of information in short notes called Tiddlers. It can hold a small database of your personal knowledge that is linked in a graph and easy to search and organize.
* '''Research Notes''': !TiddlyWiki can be used as a zettelkasten or a second brain. This can lead to new creative insights across different concepts.
* '''Encrypted Journal/Diary''': !TiddlyWiki supports [[https://tiddlywiki.com/static/Encryption.html|password-protection]] and journal entries (a Tiddler with today's date as the title). Your personal diary/journal can be one !TiddlyWiki file. Engineering Daybooks is a similar use case, but for work.
* !TiddlyWiki can be used as a project management tool, e.g. for wedding planning.
* !TiddlyWiki's !WikiText though declarative can be used to create interactive content such as flash cards and automatically-updating lists. There is support for templates and !JavaScript macros.
* '''Linkblog''': A !TiddlyWiki file can work as a replacement for Shaarli if you want to keep all of your bookmarks private.
* !TiddlyWiki can be used as a bug tracker for your projects on !GitWeb.
=== Upgrades ===
Upgrading !TiddlyWiki is a manual process.
1. Save a local copy of the file from your browser. Right click -> Save page as...
2. Use the web-based [[https://tiddlywiki.com/upgrade.html|Upgrade Wizard]] from the official website.
3. After downloading the upgraded file, load it into a browser to verify your content.
4. Replace the older file on your !FreedomBox with the upgraded file.
If you ever lose a !TiddlyWiki file, you can always retrieve a slightly outdated copy from the Backups app. It is better to keep your local copy after the upgrade, in case you want to revert.
=== Tips ===
==== Setting a favicon ====
Unlike Feather Wiki, !TiddlyWiki does not automatically use your !FreedomBox's favicon. To set it, follow these steps:
1. Create a new tiddler with the title `$:/favicon.ico`. Leave the content section empty
2. In the `Type` dropdown, select `ICO icon (image/x-icon)`
3. In the `Add a new field:` section, set the first field to `_canonical_uri` and the second field to `https://<your-freedombox-url>/favicon.ico`
4. Save the new tiddler and the wiki
'''Reference''': [[https://tiddlywiki.com/static/Setting%2520a%2520favicon.html|Setting a favicon: TiddlyWiki]]
You can also have a custom image as the favicon for each !TiddlyWiki. Using a distinct favicon makes it easier to identify the tab in your browser. Let's say your !TiddlyWiki file is your personal journal and you want to set the favicon to the image "notebook.png" which looks like a diary
1. Open the folder the image is in, using your desktop file explorer
2. Drag and drop the file into your !TiddlyWiki's browser tab
3. A special tiddler called `$:/import` will be opened
4. In the special tiddler, you will have an option to rename the file. Set the file name to `$:/favicon.ico`
5. Click the `Import` button and save the wiki
=== External links ===
* Website: https://tiddlywiki.com
* Grok !TiddlyWiki (online e-book): https://groktiddlywiki.com/read/
* Source code for TiddlyWiki: https://github.com/TiddlyWiki/TiddlyWiki5
## END_INCLUDE
Back to [[FreedomBox/Features|Features introduction]] or [[FreedomBox/Manual|manual]] pages.
<<Include(FreedomBox/Portal)>>
----
CategoryFreedomBox

View File

@ -11,7 +11,7 @@
== Tiny Tiny RSS (News Feed Reader) == == Tiny Tiny RSS (News Feed Reader) ==
||<tablestyle="float: right;"> {{attachment:TinyTinyRSS-icon_en_V01.png|Tiny Tiny RSS icon}} || ||<tablestyle="float: right;"> {{attachment:TinyTinyRSS-icon_en_V01.png|Tiny Tiny RSS icon}} ||
'''Available since''': This app is no longer available since Debian Trixie. Please migrate to [[FreedomBox/Manual/Miniflux|Miniflux]] or [[FreedomBox/Manual/Nextcloud|Nextcloud News]]. '''Available since''': version 0.9
Tiny Tiny RSS is a news feed (RSS/Atom) reader and aggregator, designed to allow reading news from any location, while feeling as close to a real desktop application as possible. Tiny Tiny RSS is a news feed (RSS/Atom) reader and aggregator, designed to allow reading news from any location, while feeling as close to a real desktop application as possible.
@ -90,8 +90,8 @@ To configure, first install the application, then in the setting page, set URL a
=== External links === === External links ===
* Upstream project: https://tt-rss.org * Website: https://tt-rss.org
* Upstream Documentation: https://tt-rss.org/wiki.php * User Documentation: https://tt-rss.org/wiki.php

View File

@ -17,8 +17,6 @@
Tor is a network of servers operated by volunteers. It allows users of these servers to improve their privacy and security while surfing on the Internet. You and your friends are able to access to your !FreedomBox via Tor network without revealing its IP address. Activating Tor application on your !FreedomBox, you will be able to offer remote services (chat, wiki, file sharing, etc...) without showing your location. This application will give you a better protection than a public web server because you will be less exposed to intrusive people on the web. Tor is a network of servers operated by volunteers. It allows users of these servers to improve their privacy and security while surfing on the Internet. You and your friends are able to access to your !FreedomBox via Tor network without revealing its IP address. Activating Tor application on your !FreedomBox, you will be able to offer remote services (chat, wiki, file sharing, etc...) without showing your location. This application will give you a better protection than a public web server because you will be less exposed to intrusive people on the web.
To download software packages over Tor, or to run a SOCKS proxy, see the [[FreedomBox/Manual/TorProxy|Tor Proxy app]].
=== Using Tor to browse anonymously === === Using Tor to browse anonymously ===
Tor Browser is the recommended way to browse the web using Tor. You can download the Tor Browser from https://www.torproject.org/projects/torbrowser.html and follow the instructions on that site to install and run it. Tor Browser is the recommended way to browse the web using Tor. You can download the Tor Browser from https://www.torproject.org/projects/torbrowser.html and follow the instructions on that site to install and run it.
@ -29,7 +27,7 @@ To enable Tor Onion Service, first navigate to the Anonymity Network (Tor) page.
After a while, the page will refresh and under Status, you will see a table listing the Onion Service .onion address. Copy the entire address (ending in .onion) and paste it into the Tor Browser's address field, and you should be able to access your !FreedomBox. (You may see a certificate warning because !FreedomBox has a self-signed certificate.) After a while, the page will refresh and under Status, you will see a table listing the Onion Service .onion address. Copy the entire address (ending in .onion) and paste it into the Tor Browser's address field, and you should be able to access your !FreedomBox. (You may see a certificate warning because !FreedomBox has a self-signed certificate.)
{{attachment:Tor-OnionService_en_V01.png|Tor Configuration - FreedomBox|width=800}} {{attachment:tor_browser_plinth.png|Tor Configuration - FreedomBox|width=800}}
Currently only HTTP (port 80), HTTPS (port 443), and SSH (port 22) are accessible through the Tor Onion Service configured on the !FreedomBox. Currently only HTTP (port 80), HTTPS (port 443), and SSH (port 22) are accessible through the Tor Onion Service configured on the !FreedomBox.
@ -55,10 +53,45 @@ The requirements to run a relay are listed in the [[https://community.torproject
* required that a Tor relay be allowed to use a minimum of 100 GByte of outbound and of incoming traffic per month. * required that a Tor relay be allowed to use a minimum of 100 GByte of outbound and of incoming traffic per month.
* recommended that a <40 Mbit/s non-exit relay should have at least 512 MB of RAM available; A relay faster than 40 Mbit/s should have at least 1 GB of RAM. * recommended that a <40 Mbit/s non-exit relay should have at least 512 MB of RAM available; A relay faster than 40 Mbit/s should have at least 1 GB of RAM.
=== (Advanced) Usage as a SOCKS proxy ===
!FreedomBox provides a Tor SOCKS port that other applications can connect to, in
order to route their traffic over the Tor network. This port is accessible on
any interfaces configured in the internal firewall zone. To configure the
application, set SOCKS Host to the internal network connection's IP address, and
set the SOCKS Port to 9050.
==== Example with Firefox ====
Your web browser can be configured to use the Tor network for all of your
browsing activity. This allows for censorship circumvention and also hides your
IP address from websites during regular browsing. For anonymity, using tor
browser is recommended.
Configure your local !FreedomBox IP address and port 9050 as a SOCKS v5 proxy in
Firefox. There are extensions to allow for easily turning the proxy on and off.
{{attachment:tor-socks-firefox.png|Configuring Firefox with Tor SOCKS proxy|width=800}}
With the SOCKS proxy configured, you can now access any onion URL directly
from Firefox. !FreedomBox itself has an onion v3 address that you can connect to
over the Tor network (bookmark this for use in emergency situations).
=== Circumventing Tor censorship ===
If your ISP is trying to block Tor traffic, you can use tor bridge relays to connect to the tor network.
1. Get the bridge configuration from the [[https://bridges.torproject.org/bridges|Tor BridgeDB]]
{{attachment:tor-bridge-db.png|Tor BridgeDB|width=800}}
2. Add the lines to your !FreedomBox Tor configuration as show below.
{{attachment:tor-bridge-configuration.png|Tor Configuration Page|width=800}}
=== External links === === External links ===
* Upstream project: https://www.torproject.org * Website: https://www.torproject.org
* Upstream documentation: https://support.torproject.org/ * User documentation: https://support.torproject.org/
## END_INCLUDE ## END_INCLUDE

View File

@ -1,75 +0,0 @@
#language en
##TAG:TRANSLATION-HEADER-START
~- [[FreedomBox/Manual/TorProxy|English]] - [[es/FreedomBox/Manual/TorProxy|Español]] - [[DebianWiki/EditorGuide#translation|(+)]] -~
##TAG:TRANSLATION-HEADER-END
<<TableOfContents()>>
## BEGIN_INCLUDE
== Tor Proxy (Anonymity Network) ==
||<tablestyle="float: right;"> {{attachment:TorProxy-icon_en_V01.png|Tor Proxy icon}} ||
'''Available since''': version 23.14
=== What is Tor Proxy? ===
Tor is a network of servers operated by volunteers. It allows users of these servers to improve their privacy and security while surfing on the Internet.
The Tor Proxy app provides an option to download software packages over Tor for added anonymity. It also provides a web proxy on your !FreedomBox for internal networks, which can be used by various apps to access the internet via the Tor network. In case of ISP censorship, upstream bridges can be configured to circumvented the censorship.
For using Tor Onion Service, or running a Tor relay, see the [[FreedomBox/Manual/Tor|Tor app]] instead.
=== Using Tor Browser to browse anonymously ===
Tor Browser is the recommended way to browse the web using Tor. You can download the Tor Browser from https://www.torproject.org/projects/torbrowser.html and follow the instructions on that site to install and run it.
=== (Advanced) Using Tor Proxy as a SOCKS proxy ===
Tor Proxy provides a SOCKS port that other applications can connect to, in order to route their traffic over the Tor network. This port is accessible on any interfaces configured in the internal firewall zone. To configure the application, set SOCKS Host to the internal network connection's IP address, and set the SOCKS Port to 9050.
==== Example with Firefox ====
Your web browser can be configured to use the Tor network for all of your browsing activity. This allows for censorship circumvention and also hides your IP address from websites during regular browsing. For anonymity, using Tor Browser is recommended.
Configure your local !FreedomBox IP address and port 9050 as a SOCKS v5 proxy in Firefox. There are extensions to allow for easily turning the proxy on and off.
{{attachment:tor-socks-firefox.png|Configuring Firefox with Tor SOCKS proxy|width=800}}
With the SOCKS proxy configured, you can now access any onion URL directly from Firefox. If you have also enabled the [[FreedomBox/Manual/Tor|Tor app]], then !FreedomBox itself has an onion v3 address that you can connect to
over the Tor network (bookmark this for use in emergency situations).
=== Circumventing Tor censorship ===
If your ISP is trying to block Tor traffic, you can use tor bridge relays to connect to the Tor network.
1. Get the bridge configuration from the [[https://bridges.torproject.org/bridges|Tor BridgeDB]]
{{attachment:tor-bridge-db.png|Tor BridgeDB|width=800}}
2. Add the lines to your !FreedomBox Tor Proxy configuration as show below.
{{attachment:tor-bridge-configuration.png|Tor Configuration Page|width=800}}
=== External links ===
* Upstream project: https://www.torproject.org/
* Upstream end user documentation: https://support.torproject.org/
==== Client Apps ====
Links to recommended client apps, where applicable, can be found in !FreedomBox by select the Apps page, selecting the application tile, and clicking the '''> Client Apps''' button.
Tor Proxy may be used by configuring a proxy in your web browser. Alternately, you can use the Tor Browser.
* Tor Browser download: https://www.torproject.org/download/
## END_INCLUDE
Back to [[FreedomBox/Features|Features introduction]] or [[FreedomBox/Manual|manual]] pages.
<<Include(FreedomBox/Portal)>>
----
CategoryFreedomBox

Some files were not shown because too many files have changed in this diff Show More