1 |
diff -Nur e-smith-base-5.8.0.old/root/etc/e-smith/events/actions/systemd-default e-smith-base-5.8.0/root/etc/e-smith/events/actions/systemd-default |
2 |
--- e-smith-base-5.8.0.old/root/etc/e-smith/events/actions/systemd-default 2020-12-05 22:56:11.568000000 -0500 |
3 |
+++ e-smith-base-5.8.0/root/etc/e-smith/events/actions/systemd-default 2020-12-05 23:22:36.254000000 -0500 |
4 |
@@ -1,5 +1,208 @@ |
5 |
-#!/usr/bin/bash |
6 |
-/usr/bin/systemctl enable sme-server.target |
7 |
-ln -fs sme-server.target /lib/systemd/system/default.target |
8 |
-/usr/bin/systemctl preset-all |
9 |
-/usr/bin/systemctl set-default sme-server.target |
10 |
+#!/usr/bin/perl -w |
11 |
+ |
12 |
+use strict; |
13 |
+use Errno; |
14 |
+use esmith::ConfigDB; |
15 |
+use File::Temp; |
16 |
+use esmith::templates; |
17 |
+use File::Basename; |
18 |
+use Cwd 'abs_path'; |
19 |
+ |
20 |
+my $conf = esmith::ConfigDB->open_ro; |
21 |
+ |
22 |
+ |
23 |
+my $event = $ARGV [0]; |
24 |
+my $second = $ARGV [1]; |
25 |
+ |
26 |
+my @servicedirpaths = ("/usr/lib/systemd/system/","/etc/systemd/system/"); |
27 |
+my @presetdirpaths = ("/usr/lib/systemd/system-preset/","/etc/systemd/system-preset/"); |
28 |
+my $filename = "/etc/systemd/system-preset/49-koozali.preset"; |
29 |
+my %services; |
30 |
+my %files; |
31 |
+my @WantedBy; |
32 |
+ |
33 |
+# make sure our target is enabled |
34 |
+system("/usr/bin/systemctl enable sme-server.target"); |
35 |
+# force the main default target in /usr/lib |
36 |
+#ln -fs sme-server.target /lib/systemd/system/default.target |
37 |
+my $old_qfn = "sme-server.target"; |
38 |
+my $new_qfn = "/lib/systemd/system/default.target"; |
39 |
+if (!symlink($old_qfn, $new_qfn)) { |
40 |
+ if ($!{EEXIST}) { |
41 |
+ unlink($new_qfn) |
42 |
+ or die("Can't remove \"$new_qfn\": $!\n"); |
43 |
+ symlink($old_qfn, $new_qfn) |
44 |
+ or die("Can't create symlink \"$new_qfn\": $!\n"); |
45 |
+ } else { |
46 |
+ die("Can't create symlink \"$new_qfn\": $!\n"); |
47 |
+ } |
48 |
+} |
49 |
+# we let the dedicated systemd command tryin to do what we will do later in this script |
50 |
+# as up to systemd 236 it is bugged see: |
51 |
+# https://github.com/systemd/systemd/pull/7158 and https://github.com/systemd/systemd/pull/7289 |
52 |
+system("/usr/bin/systemctl preset-all"); |
53 |
+# in case preset-all messed up with our default target |
54 |
+system("/usr/bin/systemctl set-default sme-server.target"); |
55 |
+ |
56 |
+ |
57 |
+#warn "expanding $filename\n"; |
58 |
+esmith::templates::processTemplate({ |
59 |
+ MORE_DATA => { }, |
60 |
+ TEMPLATE_PATH => $filename, |
61 |
+ OUTPUT_FILENAME => $filename, |
62 |
+ }); |
63 |
+ |
64 |
+# list both preset directories |
65 |
+# seek files to be removed from usr/lib if same basename exist |
66 |
+foreach my $d (@presetdirpaths) { |
67 |
+ opendir my $dir, "$d" or die "Cannot open directory: $!"; |
68 |
+ my @dirfiles = readdir $dir; |
69 |
+ closedir $dir; |
70 |
+ foreach my $fi (@dirfiles) { |
71 |
+ next unless ($fi =~ /.preset$/); |
72 |
+ $files{$fi}="$d$fi" |
73 |
+ } |
74 |
+} |
75 |
+ |
76 |
+# list wanted services in the sme-server.target |
77 |
+#Wants=acpid.service atd.service auditd.service avahi-daemon.service brandbot.path crond.service irqbalance.service nfs-client.target remote-fs.target rhel-configure.service rsyslog.service smartd.service yum-cron.service |
78 |
+my $smewants = `grep -P '^Wants=' /usr/lib/systemd/system/sme-server.target -rs`; |
79 |
+chomp $smewants; |
80 |
+my @smematches = ( $smewants =~ /([a-zA-Z0-9\-_]+\.service)/g ); |
81 |
+ |
82 |
+ |
83 |
+# parse all files on reverse order : lower number take precedence |
84 |
+# we ignore joker lines * |
85 |
+# we ignore @ lines |
86 |
+# we ignore multiple in one line |
87 |
+# our default at the end is to disable if not listed |
88 |
+foreach my $filen (reverse sort keys %files) { |
89 |
+#print "==============> $filen : ".$files{$filen} ."\n"; |
90 |
+ # parsing $filename content |
91 |
+ # should end with hash with 2 possible value : enable and disable |
92 |
+ # ignore lines starting with # or empty character |
93 |
+ open(FILE, '<', $files{$filen}) or die $!; |
94 |
+ while (<FILE>) { |
95 |
+ chomp; # remove newlines |
96 |
+ next if (/^\s+$/); |
97 |
+ next if (/^#/); |
98 |
+ s/^\s+//; # remove leading whitespace |
99 |
+ s/\s+$//; # remove trailing whitespace |
100 |
+ next unless length; # next rec unless anything left |
101 |
+# print $_ ."\n"; |
102 |
+ next unless (/^(enable|disable)\s+([a-zA-Z0-9\-_.@]+\.service)/); |
103 |
+# print $_ ."\n"; |
104 |
+ #ignore service that does not exists ! |
105 |
+ next unless ( -e "/usr/lib/systemd/system/$2" or -e "/etc/lib/systemd/system/$2" ); |
106 |
+ # eliminate duplicates, this way we keep only the last entry of the lowest file as we do it in reverse order of file, |
107 |
+ # but from top to bottom of file. |
108 |
+ $services{$2}=$1; |
109 |
+ |
110 |
+ # list all Services explicitely listed in preset that are also in Wants= or with WantedBy= sme-server.target |
111 |
+ my $service=$2; |
112 |
+ next if (/^$service$/ ~~ @WantedBy); |
113 |
+ if ( /^$service$/ ~~ @smematches ) { |
114 |
+ push(@WantedBy, $service); |
115 |
+ #print "want $service \n"; |
116 |
+ } |
117 |
+ else { |
118 |
+ my $wanted = `grep -P '^WantedBy=.*sme-server.target' /usr/lib/systemd/system/$service* /etc/systemd/system/$service* -rsh` ; |
119 |
+ chomp $wanted; |
120 |
+ push(@WantedBy , $service) unless ( $wanted eq "") ; |
121 |
+ print "want $service \n" unless ( $wanted eq "") ; |
122 |
+ } |
123 |
+ |
124 |
+ } |
125 |
+} |
126 |
+ |
127 |
+# then check content of /etc/systemd/system/sme-server.target.wants/ |
128 |
+# remove what is not in enable |
129 |
+my $d = "/etc/systemd/system/sme-server.target.wants/"; |
130 |
+opendir my $dir, "$d" or die "Cannot open directory: $!"; |
131 |
+my @dirfiles = readdir $dir; |
132 |
+closedir $dir; |
133 |
+foreach my $fi (@dirfiles) { |
134 |
+ # we ignore . and .. |
135 |
+ next if $fi =~ /\.+$/; |
136 |
+ # for the moment we only consider service files and ignore target, mount, device, socket... |
137 |
+ next unless ($fi =~ /.service$/); |
138 |
+ # remove if file but not a link |
139 |
+ print "remove $d$fi : not a link\n" unless ( -l "$d$fi"); |
140 |
+ unlink "$d$fi" unless ( -l "$d$fi"); |
141 |
+ # remove if link is not to an existing file |
142 |
+ my $absFilePath = abs_path("$d$fi") ; |
143 |
+ print "remove $d$fi target '$absFilePath' does not exist or is not regular file\n" unless ( -f "$absFilePath"); |
144 |
+ unlink "$d$fi" unless ( -f "$absFilePath"); |
145 |
+ # is not enable in preset : remove |
146 |
+ #print "==$fi \n"; |
147 |
+ if ( ! defined $services{$fi} or $services{$fi} ne "enable") { |
148 |
+ print "remove $d$fi as not enabled in preset\n"; |
149 |
+ unlink "$d$fi"; |
150 |
+ } |
151 |
+ # if not wanted remove |
152 |
+ unless ( /^$fi$/ ~~ @WantedBy) { |
153 |
+ print "remove $d$fi as not declared as WantedBy or in Wants for sme-server.target\n"; |
154 |
+ unlink "$d$fi"; |
155 |
+ } |
156 |
+} |
157 |
+ |
158 |
+ |
159 |
+# and we add wanted enabled services |
160 |
+# we only do it for sme-server.target, ignoring the remaining of WantedBy |
161 |
+foreach my $service (sort keys %services) { |
162 |
+ my $wanted= "not"; |
163 |
+ $wanted = "want" if ( /^$service$/ ~~ @WantedBy ); |
164 |
+ my $status = $services{$service}; |
165 |
+ my $linkedU = ( -e "/usr/lib/systemd/system/sme-server.target.wants/$service" ) ? "linked" : "not"; |
166 |
+ my $linkedE = ( -e "/etc/systemd/system/sme-server.target.wants/$service" ) ? "linked" : "not"; |
167 |
+ my $linkedD = ( -e "/etc/systemd/system/default.target.wants/$service" or -e "/usr/lib/systemd/system/default.target.wants/$service" ) ? "linked" : "not"; |
168 |
+ my $add = ($linkedU eq "not" and $linkedE eq "not" and $linkedD eq "not" and $status eq "enable" and $wanted eq "want") ? "ADDME!!" : ""; |
169 |
+ ## adding link if needed in /etc/systemd/system/sme-server.target.wants |
170 |
+ if ( $status eq "enable" and $linkedU eq "not" and $linkedE eq "not" and $linkedD eq "not" and $wanted eq "want"){ |
171 |
+ print "systemctl add-wants sme-server.target $service\n"; |
172 |
+ `systemctl add-wants sme-server.target $service `; |
173 |
+ } |
174 |
+} |
175 |
+ |
176 |
+ |
177 |
+ |
178 |
+# do something about /usr/lib/systemd/system/sme-server.target.wants/ |
179 |
+# we check for rpm owned and not rpm owned |
180 |
+# we only inform there, we do not do anything else |
181 |
+$d = "/usr/lib/systemd/system/sme-server.target.wants/"; |
182 |
+opendir $dir, "$d" or die "Cannot open directory: $!"; |
183 |
+@dirfiles = readdir $dir; |
184 |
+closedir $dir; |
185 |
+foreach my $fi (@dirfiles) { |
186 |
+ # we ignore . and .. |
187 |
+ next if $fi =~ /\.+$/; |
188 |
+ # for the moment we only consider service files and ignore target, mount, device, socket... |
189 |
+ next unless ($fi =~ /.service$/); |
190 |
+ # remove if file but not a link |
191 |
+ print "$d$fi is not a link\n" unless ( -l "$d$fi"); |
192 |
+ # remove if link is not to an existing file |
193 |
+ my $absFilePath = abs_path("$d$fi") ; |
194 |
+ print "$d$fi target '$absFilePath' does not exist or is not regular file\n" unless ( -f "$absFilePath"); |
195 |
+ # check if owned by rpm |
196 |
+ my $rpmowned = `rpm -qf $d$fi`; |
197 |
+ chomp $rpmowned; |
198 |
+ if ($rpmowned ne "" ) { |
199 |
+ #print "$d$fi is owned by $rpmowned\n"; |
200 |
+ #next; |
201 |
+ } else { |
202 |
+ print "$d$fi has been manually added\n"; |
203 |
+ } |
204 |
+ if ( ! defined $services{$fi} or $services{$fi} ne "enable") { |
205 |
+ print "$d$fi is not enabled in preset\n"; |
206 |
+ } |
207 |
+ # if not wanted remove |
208 |
+ # need to check its own files also here |
209 |
+ my $service = $fi; |
210 |
+ my $wanted = `grep -P '^WantedBy=.*sme-server.target' /usr/lib/systemd/system/$service* /etc/systemd/system/$service* -rsh` ; |
211 |
+ chomp $wanted; |
212 |
+ #unless ( /^$fi$/ ~~ @WantedBy ) { |
213 |
+ unless (grep(/^$fi$/, @WantedBy ) ) { |
214 |
+ print "$d$fi is not declared as WantedBy or in Wants for sme-server.target\n"; |
215 |
+ } |
216 |
+} |
217 |
+ |
218 |
diff -Nur e-smith-base-5.8.0.old/root/etc/e-smith/templates/etc/systemd/system-preset/49-koozali.preset/20services e-smith-base-5.8.0/root/etc/e-smith/templates/etc/systemd/system-preset/49-koozali.preset/20services |
219 |
--- e-smith-base-5.8.0.old/root/etc/e-smith/templates/etc/systemd/system-preset/49-koozali.preset/20services 2020-12-05 22:56:11.611000000 -0500 |
220 |
+++ e-smith-base-5.8.0/root/etc/e-smith/templates/etc/systemd/system-preset/49-koozali.preset/20services 2020-12-05 23:27:36.869000000 -0500 |
221 |
@@ -12,7 +12,7 @@ |
222 |
$status = "disable" if -e "/etc/rc.d/init.d/".$service->key || -e "/etc/rc.d/init.d/supervise/".$service->key; |
223 |
} |
224 |
$OUT .= "# Systemd service file does not exist : " unless -e "/usr/lib/systemd/system/$servicename" || -e "/etc/lib/systemd/system/$servicename"; |
225 |
- $OUT .= "$status $servicename\n"; |
226 |
+ $OUT .= "$status $servicename\n"; |
227 |
|
228 |
} |
229 |
|
230 |
diff -Nur e-smith-base-5.8.0.old/root/usr/lib/systemd/system/bootstrap-console.service e-smith-base-5.8.0/root/usr/lib/systemd/system/bootstrap-console.service |
231 |
--- e-smith-base-5.8.0.old/root/usr/lib/systemd/system/bootstrap-console.service 2020-12-05 22:56:11.447000000 -0500 |
232 |
+++ e-smith-base-5.8.0/root/usr/lib/systemd/system/bootstrap-console.service 2020-12-05 22:56:54.442000000 -0500 |
233 |
@@ -24,4 +24,4 @@ |
234 |
|
235 |
[Install] |
236 |
WantedBy=multi-user.target |
237 |
- |
238 |
+WantedBy=sme-server.target |
239 |
diff -Nur e-smith-base-5.8.0.old/root/usr/lib/systemd/system/sme-server.target e-smith-base-5.8.0/root/usr/lib/systemd/system/sme-server.target |
240 |
--- e-smith-base-5.8.0.old/root/usr/lib/systemd/system/sme-server.target 2020-12-05 22:56:11.555000000 -0500 |
241 |
+++ e-smith-base-5.8.0/root/usr/lib/systemd/system/sme-server.target 2020-12-05 23:09:13.423000000 -0500 |
242 |
@@ -1,4 +1,4 @@ |
243 |
-# This file is part of Koozali SME Server. |
244 |
+# This file is part of Koozali SME Server. |
245 |
# |
246 |
|
247 |
[Unit] |
248 |
@@ -9,3 +9,8 @@ |
249 |
After=basic.target rescue.service rescue.target |
250 |
AllowIsolate=yes |
251 |
Wants=acpid.service atd.service auditd.service avahi-daemon.service brandbot.path crond.service irqbalance.service nfs-client.target remote-fs.target rhel-configure.service rsyslog.service smartd.service yum-cron.service |
252 |
+Wants=dbus.service plymouth-quit-wait.service plymouth-quit.service systemd-logind.service systemd-update-utmp-runlevel.service systemd-user-sessions.service |
253 |
+Wants=php-fpm.service php55-php-fpm.service php56-php-fpm.service php70-php-fpm.service php71-php-fpm.service php72-php-fpm.service php73-php-fpm.service php74-php-fpm.service |
254 |
+Wants=runit.service bootstrap-console.service wan.service networking.service masq.service tinydns.service qpsmtpd.service sqpsmtpd.service qmail.service ftp.service dnscache.service dnscache.forwarder.service lpd.service dhcpd.service dovecot.service mariadb.service ntpd.service nut.service clamd.service freshclam.service httpd-admin.service httpd-e-smith.service ldap.service ldap.init.service local.service mysql.init.service spamd.service |
255 |
+ |
256 |
+ |
257 |
diff -Nur e-smith-base-5.8.0.old/root/usr/lib/systemd/system-preset/50-koozali.preset e-smith-base-5.8.0/root/usr/lib/systemd/system-preset/50-koozali.preset |
258 |
--- e-smith-base-5.8.0.old/root/usr/lib/systemd/system-preset/50-koozali.preset 1969-12-31 19:00:00.000000000 -0500 |
259 |
+++ e-smith-base-5.8.0/root/usr/lib/systemd/system-preset/50-koozali.preset 2020-12-05 23:25:48.139000000 -0500 |
260 |
@@ -0,0 +1,72 @@ |
261 |
+enable sme-server.target |
262 |
+disable multi-user.target |
263 |
+disable graphical.target |
264 |
+ |
265 |
+enable dbus.service |
266 |
+enable plymouth-quit-wait.service |
267 |
+enable plymouth-quit.service |
268 |
+enable systemd-logind.service |
269 |
+enable systemd-update-utmp-runlevel.service |
270 |
+enable systemd-user-sessions.service |
271 |
+ |
272 |
+enable runit.service |
273 |
+enable bootstrap-console.service |
274 |
+enable networking.service |
275 |
+enable wan.service |
276 |
+enable masq.service |
277 |
+enable php-fpm.service |
278 |
+enable php55-php-fpm.service |
279 |
+enable php56-php-fpm.service |
280 |
+enable php70-php-fpm.service |
281 |
+enable php71-php-fpm.service |
282 |
+enable php72-php-fpm.service |
283 |
+enable php73-php-fpm.service |
284 |
+enable php74-php-fpm.service |
285 |
+enable httpd-e-smith.service |
286 |
+enable httpd-admin.service |
287 |
+enable crond.service |
288 |
+disable dhcpd.service |
289 |
+enable dnscache.service |
290 |
+enable dnscache.forwarder.service |
291 |
+enable dovecot.service |
292 |
+enable irqbalance.service |
293 |
+disable isdn.service |
294 |
+enable lpd.service |
295 |
+enable ldap.service |
296 |
+enable ldap.init.service |
297 |
+enable local.service |
298 |
+ |
299 |
+#need to change after integration |
300 |
+#enable mariadb.service |
301 |
+ |
302 |
+# need change after deciding service name |
303 |
+# enable mdmonitor.service |
304 |
+# enable raidmonitor.service |
305 |
+ |
306 |
+enable ntpd.service |
307 |
+disable nut.service |
308 |
+disable oidentd.service |
309 |
+disable pptpd.service |
310 |
+enable qmail.service |
311 |
+enable qpsmtpd.service |
312 |
+disable radiusd.service |
313 |
+enable raidmonitor.service |
314 |
+enable rsyslog.service |
315 |
+enable smartd.service |
316 |
+ |
317 |
+#need to change after integration |
318 |
+#enable smb.service |
319 |
+#enable nmdb.service |
320 |
+#enable smbd.service |
321 |
+ |
322 |
+disable smtp-auth-proxy.service |
323 |
+disable spamd.service |
324 |
+disable sqpsmtpd.service |
325 |
+disable squid.service |
326 |
+disable sshd.service |
327 |
+enable tinydns.service |
328 |
+enable wan.service |
329 |
+disable nut-server.service |
330 |
+disable nut-monitor.service |
331 |
+disable ntpdate.service |
332 |
+ |
333 |
diff -Nur e-smith-base-5.8.0.old/root/usr/lib/systemd/system-preset/50koozali.preset e-smith-base-5.8.0/root/usr/lib/systemd/system-preset/50koozali.preset |
334 |
--- e-smith-base-5.8.0.old/root/usr/lib/systemd/system-preset/50koozali.preset 2020-12-05 22:56:11.568000000 -0500 |
335 |
+++ e-smith-base-5.8.0/root/usr/lib/systemd/system-preset/50koozali.preset 1969-12-31 19:00:00.000000000 -0500 |
336 |
@@ -1,18 +0,0 @@ |
337 |
-enable sme-server.target |
338 |
-disable multi-user.target |
339 |
-disable graphical.target |
340 |
- |
341 |
-enable runit.service |
342 |
-enable bootstrap-console.service |
343 |
-enable networking.service |
344 |
-enable wan.service |
345 |
-enable masq.service |
346 |
-enable php-fpm.service |
347 |
-enable php55-php-fpm.service |
348 |
-enable php56-php-fpm.service |
349 |
-enable php70-php-fpm.service |
350 |
-enable php71-php-fpm.service |
351 |
-enable php72-php-fpm.service |
352 |
-enable php73-php-fpm.service |
353 |
-enable php74-php-fpm.service |
354 |
- |