mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
123 lines
2.7 KiB
Bash
Executable file
123 lines
2.7 KiB
Bash
Executable file
#!/bin/sh /etc/rc.common
|
|
|
|
START=01
|
|
USE_PROCD=1
|
|
#PROCD_DEBUG=1
|
|
NAME=cgrulesengd
|
|
|
|
CGBASEDIR=/sys/fs/cgroup
|
|
CGCONFIG="cgroups"
|
|
|
|
CGRULESCONF=/tmp/cgrules.conf
|
|
CGCONFIGCONF=/tmp/cgconfig.conf
|
|
|
|
|
|
cgroupinit_add_knob_val_to_list () {
|
|
CG_KNOB_VAL_LIST="$CG_KNOB_VAL_LIST
|
|
$1"
|
|
}
|
|
|
|
cgroupinit_create_group () {
|
|
local cgrp=$1
|
|
local dir curr
|
|
|
|
if [ "$cgrp" == "_root_" ]; then
|
|
dir=.
|
|
else
|
|
dir=$(echo $cgrp |tr '_' '/')
|
|
fi
|
|
|
|
echo -e "group $dir {" >> $CGCONFIGCONF
|
|
|
|
CG_KNOB_VAL_LIST=
|
|
config_list_foreach $cgrp option cgroupinit_add_knob_val_to_list
|
|
CG_KNOB_VAL_LIST=$(echo "$CG_KNOB_VAL_LIST" |sort)
|
|
curr="_none_"
|
|
|
|
for knob_val in $CG_KNOB_VAL_LIST ; do
|
|
local ctrlr knob val
|
|
|
|
knob=$(echo $knob_val |awk -F= '{print $1}')
|
|
ctrlr=$(echo $knob |awk -F. '{print $1}')
|
|
val=$(echo $knob_val |awk -F= '{print $2}')
|
|
|
|
if [ "$curr" != "$ctrlr" ]; then
|
|
[ "$curr" == "_none_" ] || echo -e "\t}" >> $CGCONFIGCONF
|
|
curr=$ctrlr
|
|
echo -e "\t$curr {" >> $CGCONFIGCONF
|
|
fi
|
|
|
|
echo -e "\t\t$knob = \"$val\";" >> $CGCONFIGCONF
|
|
done
|
|
|
|
[ "$curr" == "_none_" ] || echo -e "\t}" >> $CGCONFIGCONF
|
|
echo -e "}\n" >> $CGCONFIGCONF
|
|
}
|
|
|
|
cgroupinit_add_to_rules () {
|
|
local name_grp=$1
|
|
local name grp
|
|
|
|
name=$(echo $name_grp |awk -F= '{print $1}')
|
|
grp=$(echo $name_grp |awk -F= '{print $2}')
|
|
|
|
echo -e "*:$name\t*\t$grp" >> $CGRULESCONF
|
|
}
|
|
|
|
cgroupinit_generate_config () {
|
|
local enab defgrp
|
|
|
|
config_load $CGCONFIG
|
|
|
|
config_get enab cgroups enabled "1"
|
|
[ $enab -eq 0 ] && return 1
|
|
|
|
config_get defgrp cgroups defgroup "_undef_"
|
|
[ "$defgrp" == "_undef_" ] && return 1
|
|
|
|
# mount here instead of in cgconfigparser to get all options right
|
|
# mounting without any controllers listed means mount all available
|
|
if ! grep -q " $CGBASEDIR cgroup " /proc/mounts; then
|
|
mount -t cgroup -o nodev,noexec,nosuid cgroup $CGBASEDIR
|
|
[ $? -eq 0 ] || return 1
|
|
fi
|
|
|
|
echo -n '' > $CGCONFIGCONF
|
|
config_foreach cgroupinit_create_group cgroup
|
|
|
|
echo -n '' > $CGRULESCONF
|
|
config_list_foreach procmap procmap cgroupinit_add_to_rules
|
|
echo -e "*\t*\t$defgrp" >> $CGRULESCONF
|
|
|
|
return 0
|
|
}
|
|
|
|
# cgrulesengd has hardcoded paths for configuration files
|
|
# use symlinks to point to generated config files
|
|
cgroupinit_cgrulesengd_fixup () {
|
|
[ -r /etc/cgrules.conf ] || ln -s $CGRULESCONF /etc/cgrules.conf
|
|
[ -r /etc/cgconfig.conf ] || ln -s $CGCONFIGCONF /etc/cgconfig.conf
|
|
[ -d /etc/cgconfig.d ] || mkdir /etc/cgconfig.d
|
|
}
|
|
|
|
start_service () {
|
|
cgroupinit_generate_config
|
|
[ $? -eq 0 ] || return
|
|
|
|
cgroupinit_cgrulesengd_fixup
|
|
/usr/sbin/cgconfigparser -l $CGCONFIGCONF || return
|
|
|
|
procd_open_instance
|
|
procd_set_param command /usr/sbin/cgrulesengd --nodaemon --syslog
|
|
procd_set_param respawn
|
|
procd_close_instance
|
|
}
|
|
|
|
stop_service () {
|
|
/usr/sbin/cgclear
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger $CGCONFIG
|
|
}
|
|
|