1 |
diff -Nur e-smith-base-5.8.0.old/createlinks e-smith-base-5.8.0/createlinks |
2 |
--- e-smith-base-5.8.0.old/createlinks 2016-04-11 22:14:33.297000000 -0400 |
3 |
+++ e-smith-base-5.8.0/createlinks 2016-04-11 22:47:13.131000000 -0400 |
4 |
@@ -375,6 +375,7 @@ |
5 |
|
6 |
$event = "post-install"; |
7 |
|
8 |
+event_link("fix-startup", $event, "05"); |
9 |
event_link("rotate_timestamped_logfiles", $event, "05"); |
10 |
event_link("init-accounts", $event, "05"); |
11 |
event_link("init-passwords", $event, "10"); |
12 |
@@ -388,6 +389,7 @@ |
13 |
|
14 |
$event = "post-upgrade"; |
15 |
|
16 |
+event_link("fix-startup", $event, "05"); |
17 |
event_link("rotate_timestamped_logfiles", $event, "05"); |
18 |
event_link("init-accounts", $event, "05"); |
19 |
event_link("conf-startup", $event, "10"); |
20 |
@@ -538,15 +540,8 @@ |
21 |
my %service2order = |
22 |
( |
23 |
# Start rsyslog up before network! |
24 |
- rsyslog => "05", |
25 |
- #klogd => "06", |
26 |
- 'bootstrap-console' => "10", |
27 |
raidmonitor => "15", |
28 |
network => "37", |
29 |
- irqbalance => "39", |
30 |
- crond => "40", |
31 |
- smartd => "40", |
32 |
- acpid => "44", |
33 |
dhcpd => "65", |
34 |
'local' => "99", |
35 |
); |
36 |
@@ -581,3 +576,10 @@ |
37 |
|
38 |
# no template headers for /etc/pam_ldap.secret |
39 |
safe_touch("root/etc/e-smith/templates/etc/pam_ldap.secret/template-begin"); |
40 |
+ |
41 |
+ |
42 |
+system('mkdir -p root/usr/lib/systemd/system/multi-user.target.wants/'); |
43 |
+ unlink "root/usr/lib/systemd/system/multi-user.target.wants/bootstrap-console.service"; |
44 |
+symlink("/usr/lib/systemd/system/bootstrap-console.service", |
45 |
+ "root/usr/lib/systemd/system/multi-user.target.wants/bootstrap-console.service") |
46 |
+ or die "Can't symlink to root/usr/lib/systemd/system/multi-user.target.wants/bootstrap-console.service: $!"; |
47 |
diff -Nur e-smith-base-5.8.0.old/root/etc/e-smith/events/actions/fix-startup e-smith-base-5.8.0/root/etc/e-smith/events/actions/fix-startup |
48 |
--- e-smith-base-5.8.0.old/root/etc/e-smith/events/actions/fix-startup 1969-12-31 19:00:00.000000000 -0500 |
49 |
+++ e-smith-base-5.8.0/root/etc/e-smith/events/actions/fix-startup 2016-04-11 22:48:23.867000000 -0400 |
50 |
@@ -0,0 +1,42 @@ |
51 |
+#! /usr/bin/perl |
52 |
+ |
53 |
+use strict; |
54 |
+use warnings; |
55 |
+use DirHandle; |
56 |
+my $d = DirHandle->new("/etc/rc7.d"); |
57 |
+ |
58 |
+my @d = |
59 |
+ sort { $a->{order} cmp $b->{order} } |
60 |
+ map { /^S(\d+)([\w\-.]+)/ ; { name => $2 , order => $1 } } |
61 |
+ grep { /^S/ } $d->read; |
62 |
+ |
63 |
+my $equivalent = {'oidentd'=> 'identd', |
64 |
+ 'nut'=> 'ups', |
65 |
+ 'raidmonitor' => 'mdmonitor' |
66 |
+ }; |
67 |
+ |
68 |
+ |
69 |
+foreach my $service (@d) |
70 |
+{ |
71 |
+my $sv=$service->{'name'}; |
72 |
+next if $sv eq 'bootstrap-console'; |
73 |
+$sv= $equivalent->{$sv} || $sv; |
74 |
+#print "$sv: "; |
75 |
+ if (-e "/lib/systemd/system/multi-user.target.wants/$sv.service") |
76 |
+ { |
77 |
+ #print "systemd (lib) "; |
78 |
+ system(qw(systemctl disable), $sv); |
79 |
+ } |
80 |
+ elsif (-e "/etc/systemd/system/multi-user.target.wants/$sv.service") |
81 |
+ { |
82 |
+ #print "systemd (etc)"; |
83 |
+ system(qw(systemctl disable), $sv); |
84 |
+ } |
85 |
+ elsif (-e "/etc/init.d/$sv") |
86 |
+ { |
87 |
+ #print "chkconfig $sv off "; |
88 |
+ system("chkconfig", $sv, "off"); |
89 |
+ #print "\n"; |
90 |
+ } |
91 |
+ #else {print "\n";} |
92 |
+} |
93 |
diff -Nur e-smith-base-5.8.0.old/root/sbin/e-smith/bootstrap-console e-smith-base-5.8.0/root/sbin/e-smith/bootstrap-console |
94 |
--- e-smith-base-5.8.0.old/root/sbin/e-smith/bootstrap-console 2014-03-23 22:47:25.000000000 -0400 |
95 |
+++ e-smith-base-5.8.0/root/sbin/e-smith/bootstrap-console 2016-04-11 22:42:48.072000000 -0400 |
96 |
@@ -48,6 +48,11 @@ |
97 |
use esmith::console::save_config; |
98 |
esmith::console::save_config->new->doit($console, $db); |
99 |
|
100 |
+$ARGV[0] = 'tty'; |
101 |
+$console = esmith::console->new(); |
102 |
+use esmith::console::startup; |
103 |
+esmith::console::startup->new->doit($console,$db); |
104 |
+ |
105 |
system("/usr/bin/tput", "clear"); |
106 |
exit (0); |
107 |
|
108 |
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/boostrap-console.service |
109 |
--- e-smith-base-5.8.0.old/root/usr/lib/systemd/system/bootstrap-console.service 1969-12-31 19:00:00.000000000 -0500 |
110 |
+++ e-smith-base-5.8.0/root/usr/lib/systemd/system/bootstrap-console.service 2016-04-11 22:23:50.332000000 -0400 |
111 |
@@ -0,0 +1,27 @@ |
112 |
+[Unit] |
113 |
+Description=SME server bootstrap-console |
114 |
+DefaultDependencies=no |
115 |
+Conflicts=shutdown.target |
116 |
+After=livesys.service plymouth-quit-wait.service |
117 |
+After=systemd-vconsole-setup.service |
118 |
+Before=getty@tty1.service |
119 |
+Before=shutdown.target |
120 |
+ |
121 |
+[Service] |
122 |
+Environment=HOME=/root |
123 |
+WorkingDirectory=/root |
124 |
+ExecStartPre=-/bin/plymouth quit |
125 |
+ExecStart=/sbin/e-smith/bootstrap-console |
126 |
+Type=oneshot |
127 |
+Restart=no |
128 |
+TimeoutSec=0 |
129 |
+StandardInput=tty |
130 |
+StandardOutput=tty |
131 |
+StandardError=tty |
132 |
+KillMode=process |
133 |
+IgnoreSIGPIPE=no |
134 |
+SendSIGHUP=yes |
135 |
+ |
136 |
+[Install] |
137 |
+WantedBy=multi-user.target |
138 |
+ |
139 |
diff -Nur e-smith-base-5.8.0.old/root/usr/share/perl5/vendor_perl/esmith/console/startup.pm e-smith-base-5.8.0/root/usr/share/perl5/vendor_perl/esmith/console/startup.pm |
140 |
--- e-smith-base-5.8.0.old/root/usr/share/perl5/vendor_perl/esmith/console/startup.pm 1969-12-31 19:00:00.000000000 -0500 |
141 |
+++ e-smith-base-5.8.0/root/usr/share/perl5/vendor_perl/esmith/console/startup.pm 2016-04-11 22:36:08.133000000 -0400 |
142 |
@@ -0,0 +1,132 @@ |
143 |
+package esmith::console::startup; |
144 |
+use Locale::gettext; |
145 |
+use esmith::console; |
146 |
+use esmith::ConfigDB; |
147 |
+use strict; |
148 |
+use warnings; |
149 |
+ |
150 |
+sub new |
151 |
+{ |
152 |
+ my $class = shift; |
153 |
+ my $self = { |
154 |
+ @_, |
155 |
+ }; |
156 |
+ bless $self, $class; |
157 |
+ return $self; |
158 |
+} |
159 |
+ |
160 |
+sub startup_callback { |
161 |
+ my $fd = shift; |
162 |
+ my @out = (); |
163 |
+ my $done = 0; |
164 |
+ |
165 |
+ use DirHandle; |
166 |
+ my $d = DirHandle->new("/etc/rc7.d"); |
167 |
+ my @services = sort |
168 |
+ { |
169 |
+ $a =~ /^S(\d+)/; my $A = $1; |
170 |
+ $b =~ /^S(\d+)/; my $B = $1; |
171 |
+ $A <=> $B |
172 |
+ } grep { /^S/ } $d->read; |
173 |
+ my $rows = 12; |
174 |
+ my $status_col = 65; |
175 |
+ |
176 |
+ my $db = esmith::ConfigDB->open_ro; |
177 |
+ my $rec = $db->get('smb'); |
178 |
+ my $i=0; |
179 |
+ foreach (@services) { |
180 |
+ $i=$i+1; |
181 |
+ next unless /^S(\d+)([^\.][\.\w\-]+)$/; |
182 |
+ next unless $2 eq "smb"; |
183 |
+ splice @services,$i-1 , 1, "S${1}4smbd", "S${1}5nmbd" unless ($rec and $rec->prop('status') eq 'disabled'); |
184 |
+ last; |
185 |
+ } |
186 |
+ |
187 |
+ |
188 |
+ open(STDOUT, ">&STDERR"); |
189 |
+ foreach (@services) |
190 |
+ { |
191 |
+ sleep 1; |
192 |
+ my $percent = int(($done * 100) / ($#services + 1)); |
193 |
+ $done += 1; |
194 |
+ my $link = $_; |
195 |
+ #warn "Looking at symlink $_\n"; |
196 |
+ next unless /^S\d+([^\.][\.\w\-]+)$/; # Untaint service name |
197 |
+ my $service = $1; |
198 |
+ #my $db = esmith::ConfigDB->open_ro; |
199 |
+ $rec = $db->get($service); |
200 |
+ do |
201 |
+ { |
202 |
+ warn "not starting disabled service $service\n"; |
203 |
+ next; |
204 |
+ } unless ($rec and $rec->prop('status') eq 'enabled'); |
205 |
+ my $prompt = "starting "; |
206 |
+ my $supervised = -x "/service/$service/run"; |
207 |
+ my @cmd; |
208 |
+ if (-x "/service/$service/run") |
209 |
+ { |
210 |
+ $prompt .= " supervised service $service"; |
211 |
+ warn "starting supervised service $service\n"; |
212 |
+ @cmd = ("sv", "up", "/service/$service"); |
213 |
+ } |
214 |
+ elsif (-x "/etc/init.d/$service") |
215 |
+ { |
216 |
+ $prompt .= " unsupervised service $service"; |
217 |
+ warn "starting unsupervised service $service\n"; |
218 |
+ @cmd = ("/etc/init.d/$service", "start"); |
219 |
+ } |
220 |
+ else |
221 |
+ { |
222 |
+ warn "ignoring unknown service $service: bogus start symlink $link\n"; |
223 |
+ next; |
224 |
+ } |
225 |
+ |
226 |
+ push @out, "$prompt\n"; |
227 |
+ print $fd "XXX\n"; |
228 |
+ print $fd "$percent\n"; |
229 |
+ my @show = $#out > $rows ? @out[$#out - $rows .. $#out] : @out; |
230 |
+ do { print $fd $_ } foreach @show; |
231 |
+ print $fd "XXX\n"; |
232 |
+ $prompt .= " " x ($status_col - length($prompt)); |
233 |
+ $prompt .= system(@cmd) ? "\\Z1FAILED\\Zn" : "\\Z2OK\\Zn"; |
234 |
+ $out[-1] = "$prompt\n"; |
235 |
+ @show = $#out > $rows ? @out[$#out - $rows .. $#out] : @out; |
236 |
+ print $fd "XXX\n"; |
237 |
+ print $fd "$percent\n"; |
238 |
+ do { print $fd $_ } foreach @show; |
239 |
+ print $fd "XXX\n"; |
240 |
+ } |
241 |
+ print $fd "100\n"; |
242 |
+ sleep 2; |
243 |
+ return undef; |
244 |
+}; |
245 |
+ |
246 |
+my $console = esmith::console->new; |
247 |
+ |
248 |
+sub doit |
249 |
+{ |
250 |
+ my ($self, $console, $db) = @_; |
251 |
+ |
252 |
+ $console->infobox |
253 |
+ ( |
254 |
+ title => gettext("Starting system services"), |
255 |
+ text => "\n" . |
256 |
+ gettext("Please standby while system services are started ..." |
257 |
+), |
258 |
+ ); |
259 |
+ |
260 |
+ system(qw(touch /var/lock/subsys/backup-running)); |
261 |
+ system(qw(chown admin /var/lock/subsys/backup-running)); |
262 |
+ sleep(6); # Wait to be certain that all runsv services have been started. |
263 |
+ $console->gauge(\&startup_callback, |
264 |
+ text => '', |
265 |
+ title => 'Starting system services', |
266 |
+ colors => 1, |
267 |
+ no_collapse => 1); |
268 |
+} |
269 |
+ |
270 |
+#use esmith::console; |
271 |
+#use esmith::ConfigDB; |
272 |
+#esmith::console::startup->new->doit(esmith::console->new(), |
273 |
+# esmith::ConfigDB->open); |
274 |
+1; |