add openrc to the list of supported init system
This commit is contained in:
@@ -135,6 +135,12 @@ def main():
|
|||||||
"--uninstall",
|
"--uninstall",
|
||||||
help="uninstall systemd service file",
|
help="uninstall systemd service file",
|
||||||
action="store_true")
|
action="store_true")
|
||||||
|
exclusive.add_argument(
|
||||||
|
"-t",
|
||||||
|
"--configtest",
|
||||||
|
help="test config and exit",
|
||||||
|
action="store_true")
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
if args.version:
|
if args.version:
|
||||||
@@ -179,6 +185,10 @@ def main():
|
|||||||
logging.exception(f"config file '{args.config}': {e}")
|
logging.exception(f"config file '{args.config}': {e}")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
if args.configtest:
|
||||||
|
logging.info("config file ok")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
if args.debug:
|
if args.debug:
|
||||||
root_logger.setLevel(loglevel)
|
root_logger.setLevel(loglevel)
|
||||||
formatter = logging.Formatter(
|
formatter = logging.Formatter(
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import shutil
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
SYSTEMD_PATH = "/lib/systemd/system"
|
SYSTEMD_PATH = "/lib/systemd/system"
|
||||||
|
OPENRC = "/sbin/openrc"
|
||||||
|
|
||||||
|
|
||||||
def _check_root():
|
def _check_root():
|
||||||
@@ -31,7 +32,50 @@ def _check_root():
|
|||||||
|
|
||||||
|
|
||||||
def _check_systemd():
|
def _check_systemd():
|
||||||
return os.path.isdir(SYSTEMD_PATH)
|
systemd = os.path.isdir(SYSTEMD_PATH)
|
||||||
|
if systemd:
|
||||||
|
logging.info("systemd detected")
|
||||||
|
|
||||||
|
return systemd
|
||||||
|
|
||||||
|
|
||||||
|
def _check_openrc():
|
||||||
|
openrc = os.path.isfile(OPENRC) and os.access(OPENRC, os.X_OK)
|
||||||
|
if openrc:
|
||||||
|
logging.info("openrc detected")
|
||||||
|
|
||||||
|
return openrc
|
||||||
|
|
||||||
|
|
||||||
|
def _copy_missing_file(src, dst):
|
||||||
|
if os.path.exists(dst):
|
||||||
|
logging.info(f"=> file {dst} already installed")
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
logging.info(f"=> install file {dst}")
|
||||||
|
shutil.copy2(src, dst)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"=> unable to install file {dst}: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
def _delete_present_file(f):
|
||||||
|
if os.path.isfile(f):
|
||||||
|
try:
|
||||||
|
logging.info(f"=> uninstall file {f}")
|
||||||
|
os.remove(f)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"=> unable to uninstall file {f}: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
def _warn_exists(path):
|
||||||
|
if os.path.isdir(path):
|
||||||
|
logging.warning(
|
||||||
|
f"=> directory {path} is still present, "
|
||||||
|
f"you have to remove it manually")
|
||||||
|
else:
|
||||||
|
logging.warning(
|
||||||
|
f"=> file {path} is still present, "
|
||||||
|
f"you have to remove it manually")
|
||||||
|
|
||||||
|
|
||||||
def install(name):
|
def install(name):
|
||||||
@@ -40,44 +84,34 @@ def install(name):
|
|||||||
|
|
||||||
pkg_dir = os.path.dirname(__file__)
|
pkg_dir = os.path.dirname(__file__)
|
||||||
|
|
||||||
if not _check_systemd():
|
if _check_systemd():
|
||||||
logging.warning(
|
|
||||||
"systemd service file will not be installed,"
|
|
||||||
"because systemd is not installed")
|
|
||||||
else:
|
|
||||||
dst = f"{SYSTEMD_PATH}/{name}.service"
|
dst = f"{SYSTEMD_PATH}/{name}.service"
|
||||||
src = f"{pkg_dir}/misc/{name}.service"
|
src = f"{pkg_dir}/misc/systemd/{name}.service"
|
||||||
try:
|
_copy_missing_file(src, dst)
|
||||||
shutil.copy2(src, dst)
|
|
||||||
except Exception as e:
|
|
||||||
logging.error(f"unable to copy systemd service file: {e}")
|
|
||||||
else:
|
|
||||||
logging.info("systemd service file installed")
|
|
||||||
|
|
||||||
|
if _check_openrc():
|
||||||
|
files = [
|
||||||
|
(f"{pkg_dir}/misc/openrc/{name}.initd", f"/etc/init.d/{name}"),
|
||||||
|
(f"{pkg_dir}/misc/openrc/{name}.confd", f"/etc/conf.d/{name}")]
|
||||||
|
for src, dst in files:
|
||||||
|
_copy_missing_file(src, dst)
|
||||||
|
|
||||||
|
logging.info("install configuration file")
|
||||||
config_dir = f"/etc/{name}"
|
config_dir = f"/etc/{name}"
|
||||||
if os.path.isdir(config_dir):
|
if os.path.isdir(config_dir):
|
||||||
logging.info(f"config dir {config_dir} exists")
|
logging.info(f"=> directory {config_dir} exists already")
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
|
logging.info(f"=> create directory {config_dir}")
|
||||||
os.mkdir(config_dir)
|
os.mkdir(config_dir)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"unable to create config dir {config_dir}: {e}")
|
logging.error(f"=> unable to create directory {config_dir}: {e}")
|
||||||
sys.exit(3)
|
sys.exit(3)
|
||||||
else:
|
|
||||||
logging.info(f"config dir {config_dir} created")
|
|
||||||
|
|
||||||
dst = f"{config_dir}/config.py"
|
files = [
|
||||||
src = f"{pkg_dir}/docs/config.py.example"
|
(f"{pkg_dir}/docs/config.py.example", f"{config_dir}/config.py")]
|
||||||
if os.path.exists(dst):
|
for src, dst in files:
|
||||||
logging.info(f"config file {dst} exists")
|
_copy_missing_file(src, dst)
|
||||||
else:
|
|
||||||
try:
|
|
||||||
shutil.copy2(src, dst)
|
|
||||||
except Exception as e:
|
|
||||||
logging.error(f"unable to copy config file to {dst}: {e}")
|
|
||||||
sys.exit(4)
|
|
||||||
else:
|
|
||||||
logging.info(f"example config file copied to {dst}")
|
|
||||||
|
|
||||||
logging.info(f"{name} successfully installed")
|
logging.info(f"{name} successfully installed")
|
||||||
|
|
||||||
@@ -87,22 +121,12 @@ def uninstall(name):
|
|||||||
sys.exit(2)
|
sys.exit(2)
|
||||||
|
|
||||||
if _check_systemd():
|
if _check_systemd():
|
||||||
path = f"{SYSTEMD_PATH}/{name}.service"
|
_delete_present_file(f"{SYSTEMD_PATH}/{name}.service")
|
||||||
|
|
||||||
if not os.path.exists(path):
|
if _check_openrc():
|
||||||
logging.info("systemd service is not installed")
|
_delete_present_file(f"/etc/init.d/{name}")
|
||||||
else:
|
_warn_exists(f"/etc/conf.d/{name}")
|
||||||
try:
|
|
||||||
os.remove(path)
|
|
||||||
except Exception as e:
|
|
||||||
logging.error(f"unable to delete: {e}")
|
|
||||||
sys.exit(3)
|
|
||||||
else:
|
|
||||||
logging.info("systemd service file uninstalled")
|
|
||||||
|
|
||||||
config_dir = f"/etc/{name}"
|
_warn_exists(f"/etc/{name}")
|
||||||
if os.path.isdir(config_dir):
|
|
||||||
logging.warning(
|
|
||||||
f"config dir {config_dir} still exists, please delete manually")
|
|
||||||
|
|
||||||
logging.info(f"{name} successfully uninstalled")
|
logging.info(f"{name} successfully uninstalled")
|
||||||
|
|||||||
8
pyinotifyd/misc/openrc/pyinotifyd.confd
Normal file
8
pyinotifyd/misc/openrc/pyinotifyd.confd
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# /etc/conf.d/pyinotifyd: config file for /etc/init.d/pyinotifyd
|
||||||
|
|
||||||
|
# Start the daemon as the user. You can optionally append a group name here also.
|
||||||
|
# USER="daemon"
|
||||||
|
# USER="daemon:nobody"
|
||||||
|
|
||||||
|
# Optional parameters for pymodmilter
|
||||||
|
# PYINOTIFYD_OPTS=""
|
||||||
46
pyinotifyd/misc/openrc/pyinotifyd.initd
Executable file
46
pyinotifyd/misc/openrc/pyinotifyd.initd
Executable file
@@ -0,0 +1,46 @@
|
|||||||
|
#!/sbin/openrc-run
|
||||||
|
|
||||||
|
user=${USER:-root}
|
||||||
|
pyinotifyd_opts="${PYINOTIFYD_OPTS:-}"
|
||||||
|
|
||||||
|
pidfile="/run/${RC_SVCNAME}.pid"
|
||||||
|
command="/usr/bin/pyinotifyd"
|
||||||
|
command_args="${pyinotifyd_opts}"
|
||||||
|
command_background=true
|
||||||
|
start_stop_daemon_args="--user ${user}"
|
||||||
|
|
||||||
|
extra_commands="configtest"
|
||||||
|
|
||||||
|
depend() {
|
||||||
|
need net
|
||||||
|
before mta
|
||||||
|
}
|
||||||
|
|
||||||
|
checkconfig() {
|
||||||
|
output=$(${command} ${command_args} -t 2>&1)
|
||||||
|
ret=$?
|
||||||
|
if [ $ret -ne 0 ]; then
|
||||||
|
eerror "${SVCNAME} has detected an error in your configuration:"
|
||||||
|
printf "%s\n" "${output}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $ret
|
||||||
|
}
|
||||||
|
|
||||||
|
configtest() {
|
||||||
|
ebegin "Checking ${SVCNAME} configuration"
|
||||||
|
checkconfig
|
||||||
|
eend $?
|
||||||
|
}
|
||||||
|
|
||||||
|
start_pre() {
|
||||||
|
if [ "${RC_CMD}" != "restart" ]; then
|
||||||
|
checkconfig || return $?
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
stop_pre() {
|
||||||
|
if [ "${RC_CMD}" == "restart" ]; then
|
||||||
|
checkconfig || return $?
|
||||||
|
fi
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user