Release v20.1 to unstable

-----BEGIN PGP SIGNATURE-----
 
 iQJKBAABCgA0FiEEfWrbdQ+RCFWJSEvmd8DHXntlCAgFAl4vlZIWHGp2YWxsZXJv
 eUBtYWlsYm94Lm9yZwAKCRB3wMdee2UICGc/D/9RqXiYH6Cde3ogSyMEzT6W0EXG
 iFBBzo4XOAlU95jn8NrB4a2yCIAieB6Mz8HJtOKnm5jC8WxDAivM7w9jZXMwR4wF
 bIsoM3J+rkgX1OSQxvCHvqiSh2CJabLuuvw761BLi70JsflDMqSHoHKwxqqwQqru
 eKPkvfdeKyILtRSlQB9oHWpa1eyH9zvO3oHbMG0K0L70eXgeANbB0bTdWB9BwHrE
 fZ3s2gWs90T3ghQqaX7nzlz2rzXtpxqkA+jw6gZKxMB79OEBDnjY3/0zA8EJhFfb
 7in/D2LRMldXK3jW/rZ3XTeKTjqNWbD99oLkJg6YD5yIlHIA8ZsEogoChoN9wo9l
 8qM80IEGYXds0x492Ytn92/EOshMN5IV+3gA0G8VK0bK5AhRldFyQpywBb7eKJ+I
 CEIOk2Xd+1n6FtKtuoZ/CpbqMWSqZsiHouAGy8rTloMzABRT3E0e09j4bhS/wxHl
 Zm+huZXrI6nF6aJVXvbZzxuWPxL5YE/W6JRMie6SM+sMosHFoHxVEzAZqMNs6+e9
 WH+y9kUdG/+ut/2sGmzDw+/KJcBB9ExxbJSj9InweeOvFFFvqBroGaUNfQYPxohv
 4InGIgvrx/2ImA1D5RmzVB88duMtlJWgr7V6CM5r+2wGoCaRWVo7dNCz2s9u38yR
 jLPE4pjVdQWgCKdXeg==
 =AXLO
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQJKBAABCgA0FiEEfWrbdQ+RCFWJSEvmd8DHXntlCAgFAl4yyNIWHGp2YWxsZXJv
 eUBtYWlsYm94Lm9yZwAKCRB3wMdee2UICIm0D/0fO+/NZS89qykMC8OKKdtQlK6h
 wzppRXle1ewcJRiuViB6QY3gYlmoOFMnxDz1hqVJHLvs+EDsXi64WywdhrJ3TLfU
 7rmNnTTn9IqpSx8dqUnkmjqrn9+3xGjLBzRnmnGzQ96hu7Zrbbx8GKgzWccteg8B
 bJcEX2Dx3lB84OeSMBrvx9vKgYvDnoMar9wOWWpDIn2oJ8khn2xCidQUd+YvckYU
 IX4j4n8MTtGYRSUGl2/PZiN+bMvdYQTDHEBtpO7QDRPsLyKXtASEoMdiun7qyxOd
 94mPg0c5OqH7RgWtqoQFu2DUU5avZ81jFCLSDzblTftCyp0clakA59LpsI8EZjL/
 M4A2GYXUiVpIytu8sIRs0kOyEZoUpl1pMq9LZ2nb/LU+VhAAU4k3a27qnaKZnZ7r
 wUJiEF8PFNsdRl+S7iVsEZn9LhW7PLtJFJ/guCxZ73BTqxUPlD8oGoOkFUKoKrgr
 7YIkLD1Q87ZB5Ec+wt0TZ+H9mZ4Ue3QAwpEgXf7ocPzFhkGBjztzJxMOHQYcso9Y
 2O8+qzMwVFUc87vVmspSm6P15MocwDcEES+RujNv2tIlHckz1sgBySI1PurXq98W
 /gg+AaFsYBldVnhwLG0QkCPA0GWm+yBRVOiQRYJDrBtJsfd/63WFXBvgepKK/C6Z
 hEbR53ujs9T6hfaFxA==
 =42if
 -----END PGP SIGNATURE-----

Merge tag 'v20.1' into debian/buster-backports

Release v20.1 to unstable

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
James Valleroy 2020-01-30 07:15:12 -05:00
commit a1f6502672
216 changed files with 24742 additions and 8389 deletions

View File

@ -171,6 +171,7 @@ $ pip3 install pytest-splinter
$ sudo apt install python3-pytest-bdd
$ sudo apt install xvfb python3-pytest-xvfb # optional, to avoid opening browser windows
$ sudo apt install firefox
$ sudo apt install smbclient # optional, to test samba
```
- Install the latest version of geckodriver. It is usually a single binary which
@ -187,6 +188,9 @@ The VM should have NAT port-forwarding enabled so that 4430 on the
host forwards to 443 on the guest. From where the tests are running, the web
interface of FreedomBox should be accessible at https://localhost:4430/.
To run samba tests, port 4450 on the host should be forwarded to port 445
on the guest.
### Setup FreedomBox Service for tests
Via Plinth, create a new user as follows:
@ -202,7 +206,7 @@ tests will create the required user using FreedomBox's first boot process.
**When inside a VM you will need to target the guest VM**
```bash
export FREEDOMBOX_URL=https://localhost
export FREEDOMBOX_URL=https://localhost FREEDOMBOX_SAMBA_PORT=445
```
You will be running `py.test-3`.

1
Vagrantfile vendored
View File

@ -19,6 +19,7 @@
Vagrant.configure(2) do |config|
config.vm.box = "freedombox/plinth-dev"
config.vm.network "forwarded_port", guest: 443, host: 4430
config.vm.network "forwarded_port", guest: 445, host: 4450
config.vm.synced_folder ".", "/vagrant", owner: "plinth", group: "plinth"
config.vm.provider "virtualbox" do |vb|
vb.cpus = 2

View File

@ -20,6 +20,7 @@ Configuration helper for BitTorrent web client.
"""
import argparse
import json
import os
import shutil
import subprocess
@ -80,6 +81,16 @@ def parse_arguments():
subparsers.add_parser('setup', help='Setup deluge')
subparsers.add_parser('get-configuration',
help='Return the current configuration')
subparser = subparsers.add_parser('set-configuration',
help='Set the configuration parameter')
subparser.add_argument('parameter',
help='Name of the configuration parameter')
subparser.add_argument('value',
help='Value of the configuration parameter')
subparsers.required = True
return parser.parse_args()
@ -141,6 +152,29 @@ def _set_deluged_daemon_options():
aug.save()
def subcommand_get_configuration(_):
"""Return the current deluged configuration in JSON format."""
deluged_conf_file = os.path.join(DELUGE_CONF_DIR, 'core.conf')
if config is None:
script = 'from deluge import config;\
conf = config.Config(filename="{0}");\
print(conf["download_location"])'.format(deluged_conf_file)
output = subprocess.check_output(['python2', '-c', script]).decode()
download_location = output.strip()
else:
conf = config.Config(filename=deluged_conf_file)
download_location = conf["download_location"]
print(json.dumps({'download_location': download_location}))
def subcommand_set_configuration(arguments):
"""Set the deluged configuration."""
if arguments.parameter != 'download_location':
return
_set_configuration('core.conf', arguments.parameter, arguments.value)
def subcommand_setup(_):
"""Perform initial setup for deluge."""
@ -155,7 +189,7 @@ def subcommand_setup(_):
action_utils.service_restart('deluge-web')
action_utils.service_restart('deluged')
# wait processes to start
time.sleep(5)
time.sleep(10)
# configure deluge-web to autoconnect to the default deluged daemon, also
# restarts deluged and deluge-web services again to create config files

View File

@ -1,75 +0,0 @@
#!/usr/bin/python3
#
# This file is part of FreedomBox.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
"""
Configuration helper for repro SIP proxy.
"""
import argparse
from plinth import action_utils
CONFIG = '/etc/repro/repro.config'
def parse_arguments():
"""Return parsed command line arguments as dictionary."""
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
subparsers.add_parser('setup', help='Configure repro')
subparsers.required = True
return parser.parse_args()
def subcommand_setup(_):
"""Configure repro."""
with open(CONFIG, 'r') as conf:
lines = conf.readlines()
with open(CONFIG, 'w') as conf:
for line in lines:
if line.startswith('Database1Path'):
# workaround for Debian bug #803113
conf.write('Database1Path = /var/lib/repro\n')
elif line.startswith('TLSPort'):
conf.write('TLSPort = 5061\n')
elif line.startswith('DisableHttpAuth'):
# let apache handle authentication
conf.write('DisableHttpAuth = true\n')
else:
conf.write(line)
action_utils.service_restart('repro')
# We have introduced new firewalld service files and wish to use
# them.
action_utils.service_reload('firewalld')
def main():
"""Parse arguments and perform all duties."""
arguments = parse_arguments()
subcommand = arguments.subcommand.replace('-', '_')
subcommand_method = globals()['subcommand_' + subcommand]
subcommand_method(arguments)
if __name__ == '__main__':
main()

View File

@ -24,7 +24,6 @@ import configparser
import json
import os
import shutil
import stat
import subprocess
SHARES_CONF_BACKUP_FILE = '/var/lib/plinth/backups-data/samba-shares-dump.conf'
@ -120,8 +119,6 @@ def _create_share(mount_point, share_type, windows_filesystem=False):
share_path = os.path.join(mount_point, shares_path, subdir)
os.makedirs(share_path, exist_ok=True)
_make_mounts_readable_by_others(mount_point)
# FAT and NTFS partitions don't support setting permissions
if not windows_filesystem:
if share_type in ['open', 'group']:
@ -235,13 +232,6 @@ def _get_shares_path(mount_point):
return 'FreedomBox/shares/'
def _make_mounts_readable_by_others(mount_point):
"""Make mounted devices readable/traversible by others."""
dirname = os.path.dirname(mount_point)
stats = os.stat(dirname)
os.chmod(dirname, stats.st_mode | stat.S_IROTH | stat.S_IXOTH)
def _set_open_share_permissions(directory):
"""Set file and directory permissions for open share."""
shutil.chown(directory, group='freedombox-share')

View File

@ -23,6 +23,7 @@ import argparse
import json
import os
import re
import stat
import subprocess
import sys
@ -34,6 +35,8 @@ def parse_arguments():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
subparsers.add_parser('setup', help='Configure storage after install')
subparser = subparsers.add_parser(
'is-partition-expandable',
help='Return whether a given partition can be expanded')
@ -56,6 +59,9 @@ def parse_arguments():
help='Validate a directory')
subparser.add_argument('--path', help='Path of the directory',
required=True)
subparser.add_argument('--check-creatable', required=False, default=False,
action='store_true',
help='Check that the directory is creatable')
subparser.add_argument('--check-writable', required=False, default=False,
action='store_true',
help='Check that the directory is writable')
@ -317,6 +323,20 @@ def umount_all_filesystems_of_drive(drive_object_path):
umount_filesystem(obj.get_filesystem())
def subcommand_setup(_):
"""Configure storage."""
# create udisks2 default mount directory
mounts_directory = '/media/root'
try:
os.mkdir(mounts_directory)
except FileExistsError:
pass
# make the directory readable and traversible by other users
stats = os.stat(mounts_directory)
os.chmod(mounts_directory, stats.st_mode | stat.S_IROTH | stat.S_IXOTH)
def subcommand_usage_info(_):
"""Get information about disk space usage."""
command = [
@ -329,14 +349,32 @@ def subcommand_usage_info(_):
def subcommand_validate_directory(arguments):
"""Validate a directory"""
directory = arguments.path
if not os.path.exists(directory):
print('ValidationError: 1')
def part_exists(path):
"""Returns part of the path that exists."""
if not path or os.path.exists(path):
return path
return part_exists(os.path.dirname(path))
if arguments.check_creatable:
directory = part_exists(directory)
if not directory:
directory = '.'
else:
if not os.path.exists(directory):
# doesn't exist
print('ValidationError: 1')
if not os.path.isdir(directory):
# is not a directory
print('ValidationError: 2')
if not os.access(directory, os.R_OK):
# is not readable
print('ValidationError: 3')
if arguments.check_writable and not os.access(directory, os.W_OK):
print('ValidationError: 4')
if arguments.check_writable or arguments.check_creatable:
if not os.access(directory, os.W_OK):
# is not writable
print('ValidationError: 4')
def main():

96
actions/wireguard Executable file
View File

@ -0,0 +1,96 @@
#!/usr/bin/python3
#
# This file is part of FreedomBox.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
"""
Configuration helper for WireGuard.
"""
import argparse
import json
import subprocess
SERVER_INTERFACE = 'wg0'
def parse_arguments():
"""Return parsed command line arguments as dictionary."""
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
subparsers.add_parser('get-info',
help='Get info for each configured interface')
subparsers.required = True
return parser.parse_args()
def _get_info():
"""Return info for each configured interface."""
output = subprocess.check_output(['wg', 'show', 'all',
'dump']).decode().strip()
lines = output.split('\n')
interfaces = {}
for line in lines:
if not line:
continue
fields = line.split()
fields = [field if field != '(none)' else None for field in fields]
interface_name = fields[0]
if interface_name in interfaces:
latest_handshake = int(fields[5]) if int(fields[5]) else None
peer = {
'public_key': fields[1],
'preshared_key': fields[2],
'endpoint': fields[3],
'allowed_ips': fields[4],
'latest_handshake': latest_handshake,
'transfer_rx': fields[6],
'transfer_tx': fields[7],
'persistent_keepalive': fields[8],
}
interfaces[interface_name]['peers'].append(peer)
else:
interfaces[interface_name] = {
'interface_name': interface_name,
'private_key': fields[1],
'public_key': fields[2],
'listen_port': fields[3],
'fwmark': fields[4],
'peers': [],
}
return interfaces
def subcommand_get_info(_):
"""Print info for each configured interface."""
print(json.dumps(_get_info()))
def main():
"""Parse arguments and perform all duties."""
arguments = parse_arguments()
subcommand = arguments.subcommand.replace('-', '_')
subcommand_method = globals()['subcommand_' + subcommand]
subcommand_method(arguments)
if __name__ == '__main__':
main()

View File

110
debian/changelog vendored
View File

@ -1,3 +1,113 @@
plinth (20.1) unstable; urgency=medium
[ ikmaak ]
* Translated using Weblate (Dutch)
* Translated using Weblate (Dutch)
[ Allan Nordhøy ]
* samba: Fix spelling
* Translated using Weblate (Norwegian Bokmål)
* Translated using Weblate (German)
* Translated using Weblate (Spanish)
* Translated using Weblate (Norwegian Bokmål)
* Translated using Weblate (Swedish)
[ Veiko Aasa ]
* samba: Add unit and functional tests
* deluge: Allow one to set a download directory
* deluge: Fix installation failure on slow machine
* storage: Make external disk mounts accessible by other users
* gitweb: Add link to the manual page
* gitweb: Fix functional tests if git user and email is not configured
[ Sunil Mohan Adapa ]
* style: Fix incorrect margins for containers in mobile view
* style: Fix responsiveness for app header
* network: Fix activating connections that don't have real devices
* network: Allow setting the auto-connect property on a connection
* network: Add method to re-activate connections after an update
* wireguard: Show large buttons in show client/server pages
* wireguard: Cosmetic fixes by yapf and isort
* wireguard: Don't error out when wg0 server is not setup
* wireguard: Add ability to set private key in client addition
* wireguard: Accept all IPs on server in a client setup
* wireguard: Update descriptions in form labels
* wireguard: Only use network manager for connections to servers
* wireguard: Handle client connections through network manager
* wireguard: Update descriptions for client vs. server clarity
* wireguard: Generate private key if needed when editing server
* wireguard: Add validations in forms
* wireguard: Ensure tests work without latest network manager
* wireguard: Implement enabling/disabling app using a stored flag
* wireguard: Enable/disable connections along with the app
* wireguard: When a connection is edited, reactivate to apply changes
* wireguard: Show public key even when connection is not active
[ Thomas Vincent ]
* Translated using Weblate (French)
[ Nektarios Katakis ]
* Translated using Weblate (Greek)
* Translated using Weblate (Greek)
* Translated using Weblate (Greek)
* networks: form for configuring router
* networks: create view & url for new form
* networks: add link to main page for router config form
* networks: add first boot step for router config helper
* networks: modify as first boot wizard step
* networks: save router config to kvstore
[ James Valleroy ]
* Translated using Weblate (French)
* wireguard: Add skeleton for new app
* wireguard: Implement adding client
* wireguard: Show list of added clients
* wireguard: Allow deleting a client
* wireguard: Add client info view
* wireguard: Form to add server
* wireguard: List peers in client section
* wireguard: Add server information view
* wireguard: Generate key pair
* wireguard: Show this box's public key
* wireguard: Create network manager connection
* wireguard: Encode public keys for use in URLs
* wireguard: Refactor actions file
* wireguard: Add views for editing and deleting clients and servers
* wireguard: Make setup idempotent
* wireguard: Write pre-shared key to tempfile
* wireguard: Use network API to handle connections
* wireguard: Add icon
* wireguard: Replace nmcli use with libnm
* restore: Remove app
* repro: Remove app
* networks: Update text for router setup
* bind: Enable systemd sandbox options for bind9 service
* functional_tests: Update geckodriver version to v0.26.0
* locale: Update translation strings
* doc: Fetch latest manual
* debian: Rename TODO.Debian to TODO
* debian: Add Expat license to copyright
* debian: Update standards version to 4.5.0
[ Dietmar ]
* Translated using Weblate (German)
[ nautilusx ]
* Translated using Weblate (German)
* Translated using Weblate (German)
[ Joseph Nuthalapati ]
* functional-tests: Login only once per session
* functional-tests: Africa/Addis_Abada is gone?
* functional-tests: Add tag @service-discovery
* functional-tests: Make nav_to_module efficient
* functional-tests: Avoid unnecessary trips to Home
* functional-tests: Avoid warnings about markers
* functional-tests: Minor refactoring
* functional-tests: Mark backups and security with @system
-- James Valleroy <jvalleroy@mailbox.org> Mon, 27 Jan 2020 19:23:04 -0500
plinth (20.0~bpo10+1) buster-backports; urgency=medium
* Rebuild for buster-backports.

4
debian/control vendored
View File

@ -31,6 +31,7 @@ Build-Depends:
python3-django-stronghold (>= 0.3.0),
python3-flake8,
python3-gi,
python3-markupsafe,
python3-paramiko,
python3-psutil,
python3-pytest,
@ -44,7 +45,7 @@ Build-Depends:
python3-yaml,
xmlto,
xsltproc
Standards-Version: 4.4.1
Standards-Version: 4.5.0
Homepage: https://salsa.debian.org/freedombox-team/plinth
Vcs-Git: https://salsa.debian.org/freedombox-team/plinth.git
Vcs-Browser: https://salsa.debian.org/freedombox-team/plinth
@ -99,6 +100,7 @@ Depends:
python3-django-captcha,
python3-django-stronghold,
python3-gi,
python3-markupsafe,
python3-paramiko,
python3-psutil,
python3-requests,

26
debian/copyright vendored
View File

@ -56,8 +56,6 @@ Files: static/themes/default/icons/diaspora.png
static/themes/default/icons/privoxy.png
static/themes/default/icons/privoxy.svg
static/themes/default/icons/radicale.svg
static/themes/default/icons/repro.png
static/themes/default/icons/repro.svg
static/themes/default/img/network-*
Copyright: None
Comment: Placed into public domain by authors (or)
@ -261,6 +259,11 @@ Copyright: 2007 ruli (https://thenounproject.com/2007ruli/)
Comment: https://thenounproject.com/icon/1206946/
License: CC-BY-SA-3.0
Files: static/themes/default/icons/wireguard.png
static/themes/default/icons/wireguard.svg
Copyright: 2019 WireGuard LLC
Comment: https://git.zx2c4.com/wireguard-windows/plain/ui/icon/wireguard.svg
License: Expat
Files: static/themes/default/img/network-computer.svg
Copyright: 2008 GNOME icon artists
@ -2501,6 +2504,25 @@ License: CC-BY-SA-3.0
Creative Commons may be contacted at http://creativecommons.org/.
License: Expat
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
.
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
License: GPL-2
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -7,3 +7,5 @@ rm_conffile /etc/plinth/modules-enabled/owncloud 0.15.1+ds-2~
rm_conffile /etc/plinth/modules-enabled/system 0.15.1+ds-2~
rm_conffile /etc/plinth/modules-enabled/disks 0.15.3+ds-1~
rm_conffile /etc/plinth/modules-enabled/udiskie 0.39.0~
rm_conffile /etc/plinth/modules-enabled/restore 20.1~
rm_conffile /etc/plinth/modules-enabled/repro 20.1~

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2563,17 +2563,17 @@ echo "UPDATE users SET admin=1 WHERE name='@username:domainname'" | sudo sqlite3
</section>
<section>
<title>Access</title>
<para>GitWeb can be accessed after installation e.g. by the web client through <ulink url="https://&lt;my"/> freedombox name&gt;/gitweb </para>
<para>GitWeb can be accessed after installation e.g. by the web client through <ulink url="https://&lt;my_freedombox_name&gt;/gitweb"/> </para>
</section>
<section>
<title>HTTP basic auth</title>
<para>GitWeb on FreedomBox currently supports HTTP remotes only. To avoid having to enter the password each time you pull/push to the repository, you can edit your remote to include the credentials. </para>
<para>
<emphasis>Example:</emphasis>
<ulink url="https://username@password:my.freedombox.rocks/gitweb/myrepo"/>
<ulink url="https://username:password@my.freedombox.rocks/gitweb/myrepo"/>
</para>
<para>Your username and password will be encrypted. Someone monitoring the network traffic will notice the domain name only.</para>
<para><emphasis role="strong">Note:</emphasis> If using this method, your password will be stored in plain text in the local repository's .git/config file. </para>
<para><emphasis role="strong">Note:</emphasis> If using this method, your password will be stored in plain text in the local repository's .git/config file. For this reason, you should create a <ulink url="https://wiki.debian.org/FreedomBox/Manual/FreedomBox#">FreedomBox</ulink> user who has only access to the gitweb and not to use an admin account. </para>
</section>
<section>
<title>Mirroring</title>
@ -3018,7 +3018,7 @@ echo "newpassword" | su mumble-server -s /bin/sh -c "/usr/sbin/murmurd -ini /etc
<para>MediaWiki on FreedomBox is configured to be publicly readable and privately editable. Only logged in users can make edits to the wiki. This configuration prevents spam and vandalism on the wiki. </para>
<section>
<title>User management</title>
<para>Users can be created by the MediaWiki administrator (user "admin") only. The "admin" user can also be used to reset passwords of MediaWiki users. The administrator password, if forgotten can be reset anytime from the MediaWiki page in the Plinth UI. </para>
<para>Users can be created by the MediaWiki administrator (user "admin") only. The "admin" user can also be used to reset passwords of MediaWiki users. The administrator password, if forgotten can be reset anytime from the MediaWiki app page in web interface. </para>
</section>
<section>
<title>Use cases</title>
@ -3050,11 +3050,22 @@ echo "newpassword" | su mumble-server -s /bin/sh -c "/usr/sbin/murmurd -ini /etc
</section>
<section>
<title>Editing Wiki Content</title>
<para>The MediaWiki installation on FreedomBox ships with a basic editor with a toolbar for common options like Bold, Italics etc. Click on the Advanced section for more options like Headings, bullet lists etc. </para>
<para>
<inlinemediaobject>
<imageobject>
<imagedata fileref="https://wiki.debian.org/FreedomBox/Manual/MediaWiki?action=AttachFile&amp;do=get&amp;target=mediawiki-toolbar.png"/>
</imageobject>
<textobject>
<phrase>mediawiki-toolbar.png</phrase>
</textobject>
</inlinemediaobject>
</para>
<section>
<title>Visual Editor</title>
<itemizedlist>
<listitem override="none">
<para>MediaWiki's new Visual Editor gives a WYSIWYG user interface to creating wiki pages. Unfortunately, it is not yet available in the current version of MediaWiki on Debian. A workaround is to use write your content using the Visual Editor in <ulink url="https://en.wikipedia.org/wiki/Wikipedia:Sandbox">Wikipedia's Sandbox</ulink>, switching to source editing mode and copying the content into your wiki. </para>
<para>MediaWiki's new Visual Editor gives a WYSIWYG user interface to creating wiki pages. This is still a Beta feature and is not provided by default with MediaWiki. A workaround is to use write your content using the Visual Editor in <ulink url="https://en.wikipedia.org/wiki/Wikipedia:Sandbox">Wikipedia's Sandbox</ulink>, switching to source editing mode and copying the content into your wiki. </para>
</listitem>
</itemizedlist>
</section>
@ -3075,6 +3086,15 @@ echo "newpassword" | su mumble-server -s /bin/sh -c "/usr/sbin/murmurd -ini /etc
</itemizedlist>
</section>
</section>
<section>
<title>Customization</title>
<section>
<title>Skins</title>
<para>MediaWiki's default skin is usually Vector. The default skin set by FreedomBox is Timeless. </para>
<para>Vector is a skin best-suited for viewing on desktop browsers. It is not suitable for mobile screen sizes. Wikimedia sites host a separate mobile site. It is not worth hosting a separate mobile site for small MediaWiki installations like those on FreedomBox. Using a mobile-friendly skin like Timeless is a cheaper way of solving the problem. </para>
<para>Administrators can choose a default skin from the app configuration. Users of the site also have the choice of viewing it with a different skin. </para>
</section>
</section>
</section>
</section>
<section>
@ -10036,6 +10056,65 @@ wget https://www.thinkpenguin.com/files/ath9k_firmware_free-version/htc_7010.fw]
<section>
<title>Release Notes</title>
<para>The following are the release notes for each FreedomBox version. </para>
<section>
<title>FreedomBox 20.1 (2020-01-27)</title>
<itemizedlist>
<listitem>
<para>deluge: Allow to set a download directory </para>
</listitem>
<listitem>
<para>deluge: Fix installation failure on slow machine </para>
</listitem>
<listitem>
<para>storage: Make external disk mounts accessible to other users </para>
</listitem>
<listitem>
<para>gitweb: Add link to the manual page </para>
</listitem>
<listitem>
<para>style: Fix incorrect margins for containers in mobile view </para>
</listitem>
<listitem>
<para>style: Fix responsiveness for app header </para>
</listitem>
<listitem>
<para>network: Fix activating connections that don't have real devices </para>
</listitem>
<listitem>
<para>wireguard: Add WireGuard VPN app </para>
</listitem>
<listitem>
<para>networks: Add router configuration page </para>
</listitem>
<listitem>
<para>networks: Add first boot step for router config helper </para>
</listitem>
<listitem>
<para>bind: Enable sandboxing for bind service </para>
</listitem>
<listitem>
<para>Translated using Weblate (Dutch) </para>
</listitem>
<listitem>
<para>Translated using Weblate (Norwegian Bokmål) </para>
</listitem>
<listitem>
<para>Translated using Weblate (German) </para>
</listitem>
<listitem>
<para>Translated using Weblate (Spanish) </para>
</listitem>
<listitem>
<para>Translated using Weblate (Swedish) </para>
</listitem>
<listitem>
<para>Translated using Weblate (French) </para>
</listitem>
<listitem>
<para>Translated using Weblate (Greek) </para>
</listitem>
</itemizedlist>
</section>
<section>
<title>FreedomBox 20.0 (2020-01-13)</title>
<itemizedlist>

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

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