minidlna: Move sysctl config to /etc/sysctl.d/50-freedombox.conf

/etc/sysctl.conf is owned by procps package.

Test: Run minidlna install on fresh image.
- /etc/sysctl.conf is not modified.
- /etc/sysctl.d/50-freedombox.conf has the expected content.
- /proc/sys/fs/inotify/max_user_watches contains 100000.

- Running with these changes upgrades app version and triggers a setup. Changes
in /etc/sysctl.conf are removed. After undoing the changes /etc/sysctl.conf is
identical to pristine version installed from procps package. This can be
obtained by running; rm -f /etc/sysctl.conf ; apt install --reinstall procps -o
Dpkg::Options::=--force-confmiss

Closes #1802.

Signed-off-by: James Valleroy <jvalleroy@mailbox.org>
[sunil: Undo changes done in /etc/sysctl.conf in older versions]
[sunil: Increment app version to trigger configuration migration]
[sunil: Ensure that app is not re-enabled during migration]
Signed-off-by: Sunil Mohan Adapa <sunil@medhas.org>
Reviewed-by: James Valleroy <jvalleroy@mailbox.org>
This commit is contained in:
James Valleroy 2020-05-15 12:15:58 -04:00
parent 0b1219a90c
commit 3c85846fa2
No known key found for this signature in database
GPG Key ID: 77C0C75E7B650808
2 changed files with 31 additions and 10 deletions

View File

@ -15,6 +15,11 @@ from plinth.utils import grep
CONFIG_PATH = '/etc/minidlna.conf'
SYSCTL_CONF = '''# This file is managed and overwritten by FreedomBox.
# Helps minidlna monitor changes in large media directories
fs.inotify.max_user_watches = 100000
'''
def parse_arguments():
"""Return parsed command line arguments as dictionary."""
@ -33,19 +38,34 @@ def parse_arguments():
return parser.parse_args()
def _undo_old_configuration_changes():
"""Restore /etc/sysctl.conf to before our changes.
Older version of minidlna app in FreedomBox < 20.9 wrote to
/etc/sysctl.conf directly. This will cause conffile prompt during upgrade
of procps package. Undo the changes so that upgrade can happen smoothly.
"""
aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD +
augeas.Augeas.NO_MODL_AUTOLOAD)
aug.set('/augeas/load/Sysctl/lens', 'Sysctl.lns')
aug.set('/augeas/load/Sysctl/incl[last() + 1]', '/etc/sysctl.conf')
aug.load()
key_path = '/files/etc/sysctl.conf/fs.inotify.max_user_watches'
if aug.get(key_path) == '100000':
aug.remove(key_path)
aug.save()
def subcommand_setup(arguments):
"""
Increase inotify watches per folder to allow minidlna to
monitor changes in large media-dirs.
"""
aug = augeas.Augeas(
flags=augeas.Augeas.NO_LOAD + augeas.Augeas.NO_MODL_AUTOLOAD)
aug.set('/augeas/load/Sysctl/lens', 'Sysctl.lns')
aug.set('/augeas/load/Sysctl/incl[last() + 1]', '/etc/sysctl.conf')
aug.load()
aug.set('/files/etc/sysctl.conf/fs.inotify.max_user_watches', '100000')
aug.save()
_undo_old_configuration_changes()
with open('/etc/sysctl.d/50-freedombox-minidlna.conf', 'w') as conf:
conf.write(SYSCTL_CONF)
subprocess.run(['systemctl', 'restart', 'systemd-sysctl'], check=True)

View File

@ -13,7 +13,7 @@ from plinth.modules.users.components import UsersAndGroups
from .manifest import backup, clients # noqa
version = 1
version = 2
managed_packages = ['minidlna']
@ -94,4 +94,5 @@ def setup(helper, old_version=None):
"""Install and configure the package"""
helper.install(managed_packages)
helper.call('post', actions.superuser_run, 'minidlna', ['setup'])
helper.call('post', app.enable)
if not old_version:
helper.call('post', app.enable)