1 |
diff -Nur smeserver-yum-2.6.0.bz8705.old/root/usr/lib/yum-plugins/smeserver.py smeserver-yum-2.6.0.bz8705.new/root/usr/lib/yum-plugins/smeserver.py |
2 |
--- smeserver-yum-2.6.0.bz8705.old/root/usr/lib/yum-plugins/smeserver.py 2013-01-31 17:35:08.000000000 +0100 |
3 |
+++ smeserver-yum-2.6.0.bz8705.new/root/usr/lib/yum-plugins/smeserver.py 2017-02-19 22:03:21.922929438 +0100 |
4 |
@@ -14,72 +14,278 @@ |
5 |
signal_event = '/sbin/e-smith/signal-event' |
6 |
config_set = '/sbin/e-smith/config' |
7 |
status_file = '/var/run/yum.status' |
8 |
+expand_template = '/sbin/e-smith/expand-template' |
9 |
+service = '/sbin/e-smith/service' |
10 |
+ |
11 |
+eventlist = dict() |
12 |
+actionlist = dict() |
13 |
+templateslist = dict() |
14 |
+serviceslist = dict() |
15 |
+ |
16 |
+ |
17 |
+# list of packages that need a reboot |
18 |
+# if a package name starts with one these names, a reboot is needed |
19 |
+rebootpkgs = ['kernel', 'glibc', 'linux-firmware', 'systemd', 'udev', 'openssl-libs', 'gnutls', 'dbus', 'daemontools', 'lvm2', 'mdadm'] |
20 |
+ |
21 |
+# list of packages that need a service restart |
22 |
+# if a package name starts with one of these values, a service restart is needed |
23 |
+# since, for example, httpd means httpd-admin and httpd-e-smith, we won't use these names directly but via serviceslist (see below) |
24 |
+restartpkgs = ['httpd', 'openssh', 'openldap', 'squid', 'dovecot', 'nut', 'freeradius', 'iptables', 'mysql', 'php', 'pptpd', 'proftp', 'qmail', 'qpsmtpd', 'samba', 'spamassassin'] |
25 |
+servicenames = dict() |
26 |
+servicenames['httpd']='httpd-admin','httpd-e-smith' |
27 |
+servicenames['openssh']='sshd', |
28 |
+servicenames['openldap']='slapd', |
29 |
+servicenames['freeradius']='radiusd', |
30 |
+servicenames['iptables']='masq', |
31 |
+servicenames['mysql']='mysqld', |
32 |
+servicenames['php']='httpd-e-smith', |
33 |
+servicenames['proftp']='proftpd', |
34 |
+servicenames['samba']='smbd', |
35 |
+servicenames['spamassassin']='spamd', |
36 |
+servicenames['squid']='squid', |
37 |
+servicenames['dovecot']='dovecot','pop3','pop3s' |
38 |
+ |
39 |
|
40 |
smechange = False |
41 |
ourfile = False |
42 |
+erasing = False |
43 |
|
44 |
def report_yum_status(status): |
45 |
- fileHandle = open(status_file, 'w') |
46 |
- fileHandle.write(status) |
47 |
- fileHandle.close() |
48 |
+ fileHandle = open(status_file, 'w') |
49 |
+ fileHandle.write(status) |
50 |
+ fileHandle.close() |
51 |
|
52 |
def predownload_hook(conduit): |
53 |
- report_yum_status('predownload') |
54 |
+ report_yum_status('predownload') |
55 |
|
56 |
def postdownload_hook(conduit): |
57 |
- report_yum_status('postdownload') |
58 |
+ report_yum_status('postdownload') |
59 |
|
60 |
def prereposetup_hook(conduit): |
61 |
- global ourfile |
62 |
- ourfile = True |
63 |
- report_yum_status('prereposetup') |
64 |
+ global ourfile |
65 |
+ |
66 |
+ ourfile = True |
67 |
+ report_yum_status('prereposetup') |
68 |
|
69 |
def postreposetup_hook(conduit): |
70 |
- report_yum_status('postreposetup') |
71 |
+ report_yum_status('postreposetup') |
72 |
|
73 |
def exclude_hook(conduit): |
74 |
- report_yum_status('exclude') |
75 |
+ report_yum_status('exclude') |
76 |
|
77 |
def preresolve_hook(conduit): |
78 |
- report_yum_status('preresolve') |
79 |
+ report_yum_status('preresolve') |
80 |
|
81 |
def postresolve_hook(conduit): |
82 |
- report_yum_status('postresolve') |
83 |
+ report_yum_status('postresolve') |
84 |
|
85 |
def pretrans_hook(conduit): |
86 |
- report_yum_status('pretrans') |
87 |
- ts = conduit.getTsInfo() |
88 |
+ report_yum_status('pretrans') |
89 |
+ # Prefetch filelist for packages to be removed, |
90 |
+ # otherwise for updated packages headers will not be available |
91 |
+ ts = conduit.getTsInfo() |
92 |
+ removes = ts.getMembersWithState(output_states=TS_REMOVE_STATES) |
93 |
+ global smechange |
94 |
+ global eventlist |
95 |
+ global actionlist |
96 |
+ global templateslist |
97 |
+ global serviceslist |
98 |
+ global erasing |
99 |
+ |
100 |
+ for tsmem in removes: |
101 |
+ erasing = True |
102 |
+ (n, a, e, v, r) = tsmem.po.pkgtup |
103 |
+ #only for debug |
104 |
+ #print 'Package: ' + tsmem.name + ' remove' |
105 |
+ smeevent = tsmem.name + '-update' |
106 |
+ #only for debug |
107 |
+ #print smeevent |
108 |
+ if os.path.isdir(events_path + os.sep + smeevent): |
109 |
+ tmppath = events_path + os.sep + smeevent + os.sep |
110 |
+ eventlist[tsmem.name] = smeevent |
111 |
+ |
112 |
+ if os.path.isdir(tmppath + "templates2expand" + os.sep): |
113 |
+ tmppathtmpl = tmppath + "templates2expand" + os.sep |
114 |
+ for subdir, dirs, files in os.walk(tmppathtmpl): |
115 |
+ for file in files: |
116 |
+ mytmptemplate = os.path.join(subdir, file).replace(tmppathtmpl,os.sep) |
117 |
+ if not templateslist.has_key(mytmptemplate): |
118 |
+ templateslist[mytmptemplate]=mytmptemplate |
119 |
+ #tmptmplpath = subdir + os.sep + file |
120 |
+ #print (file) |
121 |
+ |
122 |
+ if os.path.isdir(tmppath + "services2adjust" + os.sep): |
123 |
+ tmppathsrv = tmppath + "services2adjust" + os.sep |
124 |
+ files = [f for f in os.listdir(tmppathsrv)] |
125 |
+ for f in files: |
126 |
+ if os.path.islink(tmppathsrv + f): |
127 |
+ #print "link " + f + ": " + (os.readlink(tmppathsrv + f)) |
128 |
+ mytmpserv = os.readlink(tmppathsrv + f) |
129 |
+ if not serviceslist.has_key(f): |
130 |
+ serviceslist[f]=mytmpserv |
131 |
+ else: |
132 |
+ #only for debug |
133 |
+ #print "old value: " + serviceslist[f] |
134 |
+ #print "new value: " + mytmpserv |
135 |
+ |
136 |
+ if mytmpserv == "restart": |
137 |
+ print "overriding all signals, forcing restart" |
138 |
+ serviceslist[f]="restart" |
139 |
+ |
140 |
+ else: |
141 |
+ if n.startswith('smeserver') or n.startswith('e-smith'): |
142 |
+ smechange = True |
143 |
+ |
144 |
+ #only for debug |
145 |
+ #print 'smechange: '+str(smechange) |
146 |
+ #print 'eventlist: '+ str(eventlist) |
147 |
+ #print 'templateslist: '+str(templateslist) |
148 |
+ #print 'serviceslist: '+str(serviceslist) |
149 |
|
150 |
def posttrans_hook(conduit): |
151 |
- global smechange |
152 |
- report_yum_status('posttrans') |
153 |
- ts = conduit.getTsInfo() |
154 |
- for tsmem in ts.getMembers(): |
155 |
- smeevent = 'yum-reconfigure-' + tsmem.name |
156 |
- if os.path.isdir(events_path + '/' + smeevent): |
157 |
- print "smeservers signal-event: " + smeevent |
158 |
- os.spawnl(os.P_WAIT, |
159 |
- signal_event, signal_event, smeevent) |
160 |
- |
161 |
- (n, a, e, v, r) = tsmem.po.pkgtup |
162 |
- if n.startswith('sme') or n.startswith('e-smith') or n.startswith('kernel') or r.endswith('sme'): |
163 |
- smechange = True |
164 |
- |
165 |
- if smechange: |
166 |
- os.spawnl(os.P_WAIT, config_set, config_set, 'set', 'UnsavedChanges', 'yes') |
167 |
- os.spawnl(os.P_WAIT, initialize_database, initialize_database) |
168 |
- os.spawnl(os.P_WAIT, navigation_conf, navigation_conf) |
169 |
+ report_yum_status('posttrans') |
170 |
+ ts = conduit.getTsInfo() |
171 |
+ |
172 |
+ global smechange |
173 |
+ global eventlist |
174 |
+ global actionlist |
175 |
+ global templateslist |
176 |
+ global serviceslist |
177 |
+ global erasing |
178 |
+ |
179 |
+ |
180 |
+ for tsmem in ts.getMembers(): |
181 |
+ (n, a, e, v, r) = tsmem.po.pkgtup |
182 |
+ |
183 |
+ #print 'smechange: '+str(smechange) |
184 |
+ |
185 |
+ # we're upgrading/installing/removing a rebootpkgs package.. a reboot is required |
186 |
+ for pkg in rebootpkgs: |
187 |
+ if n.startswith(pkg): |
188 |
+ #print 'Package: ' + tsmem.name + ' triggers reboot' |
189 |
+ smechange = True |
190 |
+ |
191 |
+ |
192 |
+ # check if we're upgrading a restartpkgs rpm |
193 |
+ for pkg in restartpkgs: |
194 |
+ #print pkg |
195 |
+ if n.startswith(pkg): |
196 |
+ if servicenames[pkg]: |
197 |
+ #print 'lista' |
198 |
+ for name in servicenames[pkg]: |
199 |
+ #print name |
200 |
+ if not serviceslist.has_key(name): |
201 |
+ serviceslist[name] = 'restart' |
202 |
+ else: |
203 |
+ #only for debug |
204 |
+ #print pkg |
205 |
+ if not serviceslist.has_key(pkg): |
206 |
+ serviceslist[pkg] = 'restart' |
207 |
+ |
208 |
+ |
209 |
+ #if smechange is true we can ignore the following part |
210 |
+ if not smechange and not erasing: |
211 |
+ |
212 |
+ #smeevent = 'yum-reconfigure-' + tsmem.name |
213 |
+ smeevent = tsmem.name + '-update' |
214 |
+ if os.path.isdir(events_path + os.sep + smeevent): |
215 |
+ tmppath = events_path + os.sep + smeevent + os.sep |
216 |
+ eventlist[tsmem.name] = smeevent |
217 |
+ |
218 |
+ files = [f for f in os.listdir(tmppath)] |
219 |
+ for f in files: |
220 |
+ if os.path.islink(tmppath + f): |
221 |
+ |
222 |
+ mytmpaction = os.path.realpath(os.readlink(tmppath + f)).replace("/root/rpmbuild/RPMS",events_path) |
223 |
+ #print "link " + f + ": " + mytmpaction |
224 |
+ |
225 |
+ if not actionlist.has_key(mytmpaction): |
226 |
+ actionlist[mytmpaction] = mytmpaction |
227 |
+ |
228 |
+ if os.path.isdir(tmppath + "templates2expand" + os.sep): |
229 |
+ tmppathtmpl = tmppath + "templates2expand" + os.sep |
230 |
+ for subdir, dirs, files in os.walk(tmppathtmpl): |
231 |
+ for file in files: |
232 |
+ mytmptemplate = os.path.join(subdir, file).replace(tmppathtmpl,os.sep) |
233 |
+ if not templateslist.has_key(mytmptemplate): |
234 |
+ templateslist[mytmptemplate]=mytmptemplate |
235 |
+ #tmptmplpath = subdir + os.sep + file |
236 |
+ #print (file) |
237 |
+ |
238 |
+ if os.path.isdir(tmppath + "services2adjust" + os.sep): |
239 |
+ tmppathsrv = tmppath + "services2adjust" + os.sep |
240 |
+ files = [f for f in os.listdir(tmppathsrv)] |
241 |
+ for f in files: |
242 |
+ if os.path.islink(tmppathsrv + f): |
243 |
+ #print "link " + f + ": " + (os.readlink(tmppathsrv + f)) |
244 |
+ mytmpserv = os.readlink(tmppathsrv + f) |
245 |
+ if not serviceslist.has_key(f): |
246 |
+ serviceslist[f]=mytmpserv |
247 |
+ else: |
248 |
+ #only for debug |
249 |
+ #print "old value: " + serviceslist[f] |
250 |
+ #print "new value: " + mytmpserv |
251 |
+ |
252 |
+ if mytmpserv == "restart": |
253 |
+ #only for debug |
254 |
+ print "overriding all signals, forcing restart" |
255 |
+ serviceslist[f]="restart" |
256 |
+ |
257 |
+ else: |
258 |
+ if n.startswith('smeserver') or n.startswith('e-smith'): |
259 |
+ smechange = True |
260 |
+ |
261 |
+ |
262 |
+ #only for debug |
263 |
+ #print 'smechange: '+str(smechange) |
264 |
+ #print 'post-trans' |
265 |
+ #print 'eventlist: '+ str(eventlist) |
266 |
+ #print 'templateslist: '+str(templateslist) |
267 |
+ #print 'serviceslist: '+str(serviceslist) |
268 |
+ |
269 |
+ # check if smechange is true or if eventlist has items.. in both cases we must initialize databases |
270 |
+ if smechange == True or len(eventlist)>0: |
271 |
+ print 'Initializing databases' |
272 |
+ os.spawnl(os.P_WAIT, initialize_database, initialize_database) |
273 |
+ |
274 |
+ # now, if smechange is false (no reboot needed), we can execute actions, expan templates and adjust services |
275 |
+ #if not smechange: |
276 |
+ |
277 |
+ if len(actionlist)>0: |
278 |
+ print "Executing actions" |
279 |
+ for kactions in actionlist: |
280 |
+ #print kactions |
281 |
+ if os.path.isfile(kactions): |
282 |
+ os.spawnl(os.P_WAIT, kactions, kactions) |
283 |
+ |
284 |
+ if len(templateslist)>0: |
285 |
+ print "Expanding templates" |
286 |
+ for ktemplates in templateslist: |
287 |
+ #print ktemplates |
288 |
+ if os.path.isfile(ktemplates): |
289 |
+ os.spawnl(os.P_WAIT, expand_template, expand_template, ktemplates) |
290 |
+ |
291 |
+ if len(serviceslist)>0: |
292 |
+ print "Adjusting services" |
293 |
+ for kservices in serviceslist: |
294 |
+ print kservices + ": " + serviceslist[kservices] |
295 |
+ os.spawnl(os.P_WAIT, service, service, kservices, serviceslist[kservices]) |
296 |
+ |
297 |
+ |
298 |
+ if smechange: |
299 |
+ os.spawnl(os.P_WAIT, config_set, config_set, 'set', 'UnsavedChanges', 'yes') |
300 |
+ os.spawnl(os.P_WAIT, navigation_conf, navigation_conf) |
301 |
|
302 |
def close_hook(conduit): |
303 |
- if ourfile and os.path.isfile('/var/run/yum.status'): |
304 |
- os.unlink('/var/run/yum.status') |
305 |
+ if ourfile and os.path.isfile('/var/run/yum.status'): |
306 |
+ os.unlink('/var/run/yum.status') |
307 |
|
308 |
- if smechange: |
309 |
- print "\n==============================================================" |
310 |
- print "WARNING: You now need to run BOTH of the following commands" |
311 |
- print "to ensure consistent system state:\n" |
312 |
- print "signal-event post-upgrade; signal-event reboot\n" |
313 |
- print "You should run these commands unless you are certain that" |
314 |
- print "yum made no changes to your system." |
315 |
- print "==============================================================" |
316 |
+ if smechange: |
317 |
+ print "\n==============================================================" |
318 |
+ print "WARNING: You now need to run BOTH of the following commands" |
319 |
+ print "to ensure consistent system state:\n" |
320 |
+ print "signal-event post-upgrade; signal-event reboot\n" |
321 |
+ print "You should run these commands unless you are certain that" |
322 |
+ print "yum made no changes to your system." |
323 |
+ print "==============================================================" |
324 |
|