blob: fb17a436336e071d9208aa90a6e31fe6f51cbadc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
#!/bin/sh
#---------------------------------------------------------------
# Project : Mandriva Linux
# Module : rpm-helper
# File : add-service
# Version : $Id$
# Authors : Frederic Lepied, Andrey Borzenkov
# Created On : Mon Jul 8 08:14:34 2002
# Purpose : helper script for rpm scriptlets to add a
# service.
#---------------------------------------------------------------
if [ x$1 = x--no-sysv ]; then
do_sysv=no
shift
else
do_sysv=yes
fi
if [ $# -lt 3 ]; then
echo "usage: $0 [--no-sysv] <pkg name> <number installed> [<service name>] [<unit name> ...]" 1>&2
exit 1
fi
# What init system are we currently using?
if /bin/mountpoint -q /sys/fs/cgroup/systemd; then
init=systemd
else
init=sysvinit
fi
pkg=$1 # name of the package
num=$2 # number of packages installed
if [ $do_sysv = yes ]; then
srv=$3 # name of the SysV script
shift 3
else
srv=
shift 2
fi
units="$*" # systemd units
units_to_enable= # units enabled by msec
# If only a sysvinit service is given, then deal with a systemd unit of the same
# name. Specific specs can enable specific unit names as needed but this should
# catch the most common usage.
if [ -z "$units" ]; then
units="$srv.service"
# We need to normalise the systemd unit name as the native unit may not have
# the same filename (sans it's .service suffix) as sysvinit script.
# In this case, symlinks are used to mask the sysvinit file, but for enabling
# and disabling units we must use the official name.
SYSTEMUNITDIR=/lib/systemd/system
USERUNITDIR=/etc/systemd/system
RUNTIMEUNITDIR=/run/systemd/system
searchunit=
if [ -f "$SYSTEMUNITDIR/$units" ]; then
searchunit=$(/usr/bin/readlink "$SYSTEMUNITDIR/$units")
elif [ -f "$USERUNITDIR/$units" ]; then
searchunit=$(/usr/bin/readlink "$USERUNITDIR/$units")
elif [ -f "$RUNTIMEUNITDIR/$units" ]; then
searchunit=$(/usr/bin/readlink "$RUNTIMEUNITDIR/$units")
fi
if [ -n "$searchunit" ]; then
units=$searchunit
fi
fi
add_service() {
# Add the service
if [ -r /etc/sysconfig/msec ]; then
. /etc/sysconfig/msec
fi
# High security: add only authorized services
LIST=/etc/security/msec/server
# during the install the symlink isn't done so find the right file
# by ourselves
if [ -n "$DURING_INSTALL" -a ! -f $LIST ]; then
LIST=/etc/security/msec/server.$SECURE_LEVEL
fi
# This is half-hearted support for msec: we check "srv" for a unit
# with name "srv.service". This should account for most(?) common
# case when SysV script srv is replaced by single unit srv.service
# If SysV name was supplied, we assume units are equivalent and do
# not need to be checked.
# TODO should msec support full unit name?
if [ -f $LIST ]; then
if [ -n "$srv" ]; then
if fgrep -qx "${srv}" $LIST; then
units_to_enable="$units"
else
srv=
fi
else
for i in $units; do
[ $i != ${i%.service} ] && ! fgrep -qx ${i%.service} $LIST && continue
[ $i != ${i%.socket} ] && ! fgrep -qx ${i%.socket} $LIST && continue
[ $i != ${i%.path} ] && ! fgrep -qx ${i%.path} $LIST && continue
units_to_enable="$units_to_enable $i"
done
fi
else
units_to_enable="$units"
fi
# Actually do enable/disable foo
if [ -n "$units_to_enable" ]; then
/bin/systemctl --quiet enable $units_to_enable >/dev/null
fi
if [ -n "$srv" -a -f /etc/rc.d/init.d/$srv ]; then
/sbin/chkconfig --add $srv
if [ -r /etc/sysconfig/system ]; then
. /etc/sysconfig/system
fi
# TODO what to do with system units here?
if [ -z "$ADD_SERVICES_TO_CURRENT_PROFILE_ONLY" ]; then
# add the service to all the profiles at once
if [ -d /etc/netprofile/profiles/default/services ]; then
for dir in /etc/netprofile/profiles/*/services; do
touch $dir/$srv
done
fi
fi
fi
}
if [ $num = 1 ]; then
# First install mode
add_service
else
# Upgrade mode.
if [ x$init = xsystemd ]; then
/bin/systemctl --quiet try-restart $units
elif [ -f /etc/rc.d/init.d/$srv ]; then
set -- /etc/rc3.d/S??$srv
if [ $# -gt 1 ]; then
echo 1>&2 "add-service: Error: $srv appears multiple times: $*"
fi
if [ -f "$1" ]; then
/sbin/chkconfig --add $srv
fi
# restart the service if already running
if [ -f /var/lock/subsys/$srv ]; then
/sbin/service $srv restart > /dev/null || :
fi
fi
fi
# add-service ends here
|