From a878c1a6109349c8f7182663fae60932a109af9c Mon Sep 17 00:00:00 2001 From: udeved Date: Mon, 28 May 2018 01:31:55 +0200 Subject: [PATCH 1/2] add openrccfg --- src/modules/openrccfg/main.py | 58 ++++++++++++++++++++++++++++ src/modules/openrccfg/module.desc | 5 +++ src/modules/openrccfg/openrccfg.conf | 8 ++++ 3 files changed, 71 insertions(+) create mode 100644 src/modules/openrccfg/main.py create mode 100644 src/modules/openrccfg/module.desc create mode 100644 src/modules/openrccfg/openrccfg.conf diff --git a/src/modules/openrccfg/main.py b/src/modules/openrccfg/main.py new file mode 100644 index 000000000..724b02c3f --- /dev/null +++ b/src/modules/openrccfg/main.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# === This file is part of Calamares - === +# +# Copyright 2016, Artoo +# Copyright 2017, Philip Müller +# Copyright 2018, Artoo +# +# Calamares is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Calamares 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Calamares. If not, see . + +import libcalamares + +from libcalamares.utils import target_env_call +from os.path import exists, join + + +class OpenrcController: + """This is the service controller + """ + + def __init__(self): + self.root = libcalamares.globalstorage.value('rootMountPoint') + self.services = libcalamares.job.configuration.get('services', []) + + def update(self, state): + """Update init scripts + """ + + for svc in self.services[state]: + if exists(self.root + "/etc/init.d/" + svc["name"]): + target_env_call( + ["rc-update", state, svc["name"], svc["runlevel"]] + ) + + def run(self): + """Run the controller + """ + + for state in self.services.keys(): + self.update(state) + +def run(): + """Setup services + """ + + return OpenrcController().run() diff --git a/src/modules/openrccfg/module.desc b/src/modules/openrccfg/module.desc new file mode 100644 index 000000000..1be7af923 --- /dev/null +++ b/src/modules/openrccfg/module.desc @@ -0,0 +1,5 @@ +--- +type: "job" +name: "openrccfg" +interface: "python" +script: "main.py" diff --git a/src/modules/openrccfg/openrccfg.conf b/src/modules/openrccfg/openrccfg.conf new file mode 100644 index 000000000..e10da15ce --- /dev/null +++ b/src/modules/openrccfg/openrccfg.conf @@ -0,0 +1,8 @@ +--- +services: + add: + - name: "NetworkManager" + runlevel: "default" +# del: +# - name: "hwclock" +# runlevel: "boot" From 88e082d53185b1b559feaca2c3062279a27111b3 Mon Sep 17 00:00:00 2001 From: udeved Date: Sun, 3 Jun 2018 22:30:08 +0200 Subject: [PATCH 2/2] openrccfg: add small documentation in conf, make service location configurable --- src/modules/openrccfg/main.py | 15 ++++++----- src/modules/openrccfg/openrccfg.conf | 37 +++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/src/modules/openrccfg/main.py b/src/modules/openrccfg/main.py index 724b02c3f..9dc6bf1ff 100644 --- a/src/modules/openrccfg/main.py +++ b/src/modules/openrccfg/main.py @@ -27,22 +27,25 @@ from os.path import exists, join class OpenrcController: - """This is the service controller + """This is the openrc service controller """ def __init__(self): self.root = libcalamares.globalstorage.value('rootMountPoint') self.services = libcalamares.job.configuration.get('services', []) + self.initdDir = libcalamares.job.configuration['initdDir'] + self.runlevelsDir = libcalamares.job.configuration['runlevelsDir'] def update(self, state): - """Update init scripts + """call rc-update for each service listed """ for svc in self.services[state]: - if exists(self.root + "/etc/init.d/" + svc["name"]): - target_env_call( - ["rc-update", state, svc["name"], svc["runlevel"]] - ) + if exists(self.root + self.initdDir + "/" + svc["name"]): + if exists(self.root + self.runlevelsDir + "/" + svc["runlevel"]): + target_env_call( + ["rc-update", state, svc["name"], svc["runlevel"]] + ) def run(self): """Run the controller diff --git a/src/modules/openrccfg/openrccfg.conf b/src/modules/openrccfg/openrccfg.conf index e10da15ce..efd56bc14 100644 --- a/src/modules/openrccfg/openrccfg.conf +++ b/src/modules/openrccfg/openrccfg.conf @@ -1,8 +1,39 @@ +# operccfg +# openrc services module to set service runlevels via rc-update in the chroot +# +# format of the conf +### +# services: +# add: +# - name: foo1 +# runlevel: default +# - name: foo2 +# runlevel: nonetwork +# del: +# - name: foo3 +# runlevel: default +# +# initdDir: /etc/init.d +# +# runlevelsDir: /etc/runlevels +#### +# add: list of services and their runlevels to add +# del: list of services and their runlevels to delete +# name: the service name +# runlevel: can hold any runlevel present on the target system +# initdDir: holds the openrc service directory location +# runlevelsDir: holds the runlevels directory location +# +# handle del with care and only use it if absolutely necessary +# if a service is listed in the conf but is not present/detected on the target system, +# or a runlevel does not exist, it will be ignored and skipped +# --- services: add: - name: "NetworkManager" runlevel: "default" -# del: -# - name: "hwclock" -# runlevel: "boot" + +initdDir: /etc/init.d + +runlevelsDir: /etc/runlevels