ec0139d7e35c67147e7d78ff101f242a3ef52b60
[distributedratelimiting.git] / drl / README
1 2-20-08
2
3 Use this to capture the rates from the individual slices.  
4
5  while true; do /sbin/tc -s class show dev eth0 | grep -A 3 11f8 | grep -A
6  1 "class htb" | grep Sent | cut -d " " -f 3; sleep 1; done > GRD_pl_drl_34
7
8
9
10
11
12 2-15-08
13
14 Damn sysnet33 db won't come up.  says /tmp is full in the chroot
15 myplc/plc/root/var/log/pglog, but it's not full.  
16 So I'm trying to replace the loopback filesystem with something clean from
17 the RPM. 
18 using cpio --no-absolute-filenames
19 And 
20 rpm2cpio <rpm> | cpio -diu 
21 but u is don't prompt. so I'll issue
22 rpm2cpio <rpm> | cpio -di --no-absolute_filenames
23
24 OK, did this, then I copied over root.img to where I have it installed. 
25 And it all worked!  Sweet.  The image is mostly independent of the data! 
26
27
28
29
30
31
32 ADDING A PL NODE
33 1.) turn off crond for restarting ulogd
34 in pl_netflow:/etc/crond.d/netflow
35 edited the line that calls init.d/netflow restart
36 because I don't want it to keep restarting ulogd as I test it. 
37 2.) Allow pl_netflow to run tc
38 I am also changing the pl_netflow.conf in /etc/vservers/pl_netflow.conf
39 So that S_CAPS="CAP_NET_ADMIN"
40 Then, from the root slice, vserver pl_netflow restart. 
41 3.) copy over the ./start script from the pl_netflow /root directory.
42 4.) put bwlimit_drl.py into /usr/share/util-vserver/bwlimit2.py on the root
43 slice
44 put bwlimit_drl.py into /usr/share/util-vserver/bwlimit_drl.py on the
45 pl_netflow slice.
46 Future, make the names consistent
47 5.) pull the sch_netem.ko over and insmod it. 
48
49 cd /lib/modules/2.6.12-1.1398_FC4.5.planetlab/kernel/net/sched/
50 [root@sysnet32 sched]# scp -i ~/.ssh/root_ssh_key.rsa root@sysnet34:/lib/modules/2.6.12-1.1398_FC4.5.planetlab/kernel/net/sched/sch_netem_plab.ko .
51 insmod sch_netem_plab.ko
52
53 6.) [root@vserver:pl_netflow ~]/etc/init.d/ulogd stop
54 7.) vserver pl_netflow enter
55 8.)     copy over ulogd.  run ./start
56 9.) Edit the ulogd configuration script.   
57
58
59 2-12-08
60
61 bwlimit.py cannot look up the slice names in the pl_netflow slice b/c there
62 are not entries in the /etc/passwd file for the slices.  Of course there
63 aren't.  Even ulogd_NETFLOW.c replaces /etc/passwd with /dev/null.   
64
65 so in the short term I will copy over the roots /etc/passwd and place it
66 where the new bwlimit_drl exists.   /usr/share/util-vserver/passwd_drl
67 I can have the root periodically copy this file into the pl_netflow slice
68 in a cron job, or whenever a new slice is created.   
69
70 This is a hack.  There are probably better ways, but it's a moving target.  
71 Now hack bwlimit_drl to use that file to look up slice contexts. 
72
73
74
75 HTB DOCS http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm
76
77 2-10-08
78
79 We probably have to put the netem at the bottom of the tbf.  If we put it
80 in the middle, say off of the 1:10 class, then we need to direct all
81 traffic that would have been directed to a lower class in the htb to the
82 1:10 class.  Then the traffic has to be directed to the lower classes and
83 be accounted for directly.   This screws with how traffic classification is
84 done; I don't even know if it will obey the tb appropriately either, since
85 the best you can do is put another htb qdisc below the netem class.  And
86 there is no way to directly have that qdisc borrow from the "parent" one
87 that's just been terminated by the netem qdisc.  Got that? 
88
89
90
91
92
93
94 2-7-08
95
96 Screwing around with all the kernel configs has forced the build process to
97 rebuild all the kernels.   blech.   
98
99
100 BUILDING NETEM for plab machines: 
101 Kevin made an ubunto chroot install on his linux machine and built 3.3 gcc
102 in it, and then copied over the source linux tree that had the .config
103 stolen from sysnet34 /proc/config.gz.  We also had to change the magic
104 string so that it believed it was bulit to fc 4.5, not 4.7. 
105 Use insmod
106 /lib/modules/2.6.12-1.1398_FC4.5.planetlab/kernel/net/sched/sch_netem_plab.ko
107
108
109 see sysnet35:/root/myplc/build/SOURCES/CRAP/linux-2.6.12/.config
110
111
112 We added a node at the root qdisc and it succesfully appears to delay
113 packets.  So now let's figure out how to add it to the bwlimit.py code so
114 that it is always present and can be tweaked (replaced) when running
115 ulogd. 
116
117 ----
118 tc qdisc del dev eth0 root handle 1:
119 tc qdisc add dev eth0 parent 1: handle 2: htb default 1fff
120 And everything then falls out of 2:
121
122 But this will netem everything out of hte host, leaving nothing for
123 "exempt" slices like the root.  Not what we want. 
124
125 We place a netem qdisc at the leaf of every non-exempt slice traffic class
126 in the HTB. 
127
128 2-5-08
129
130 in pl_netflow vserver
131 /etc/cron.d/netflow  keeps restarting netflow init.d script which keeps
132 restarting ulogd if started by hand.   Fucking buggy. 
133
134 in root vserver
135 see pl_mom cron job
136 which runs bwmon and pl_mop. pl_mop makes sure pl_netflow is running. 
137
138 !!!!!<CHANGE TO SYSNET34>!!!!! 
139 in sysnet34 pl_netflow:/etc/crond.d/netflow
140 edited the line that calls init.d/netflow restart
141 because I don't want it to keep restarting ulogd as I test it. 
142 !!!!!
143 I am also changing the pl_netflow.conf in /etc/vservers/pl_netflow.conf
144 So that S_CAPS="CAP_NET_ADMIN"
145 Then, from the root slice, vserver pl_netflow restart. 
146
147 <changing kernel config files in build/linux-x-x-x/configs directory
148 i686-smp-plab
149 i686-onelab
150 i686-planetlab
151 all added CONFIG_NET_SCH_NETEM=m
152
153
154 2-1-08
155
156 GRD dropping.  Use netem, which is accessible also through tc.   
157 I believe what we want to do is put the netem on the interface for all
158 traffic?  OK, that's not going to work for setting up for traffic that goes
159 to "blessed" destinations.   
160
161 We will 1.) set up a qdisc for netem on the device, and have it affect all
162 traffic in the htb first. 
163 Then we will try to set up a netem only for certain traffic in the htb. 
164
165
166 Can you list all of the destinations or iproute2 rules used to classify
167 traffic to tc classes?
168
169 so we have a couple of options.  We can look at the tc source in iproute2
170 code I downloaded on sysnet35.  However, this is pretty low-level code; we
171 have to communicate over a netlink socket in order to feed commands to TC.   
172 The alternative is to fork/exec from ulogd when we need to issue new tc
173 commands.   In the short term, let's do this.  
174
175
176
177 12-31-08
178
179 so the hack is to change the ceilings on all of the child slice classes.
180 That's one thing to do for all outbound traffic.  Theoretically we should
181 be able to just set the rule for 1:10 but that doesn't seem to be working.   
182
183
184 1.) /usr/share/util-vserver/bwlimit.py -v init
185 2.) /usr/share/util-vserver/bwlimit.py -v on pl_drl  1 8bit 1gbit 8bit 1gbit
186 3.) /usr/share/util-vserver/bwlimit.py -v on pl_drl_two  1 8bit 1gbit 8bit 1gbit
187
188 You can change the 1:10 class, and then you can off/on the slice limits.
189 The script makes sure to set the ceilings of the children classes to the
190 ceiling of the parents.  
191
192 Fine.   That's how they want it, that's how they'll get it.   What we need
193 to make sure is that the individual slices still share the outgoing
194 bandwidth appropriately.  
195
196 I'm not too sure what the traffic control does for you when they share
197 everything identically.   Let's assume that they want it.  
198
199 For FPS the limiter is a token bucket.  We want to simply set the rate to
200 something with this token bucket.  We should be able to do this exactly
201 with the right TC command.   No problem.  
202
203 For GRD the limiter is a packet dropper.  Drop X % of packets.   Let me
204 look at the outgoing schedulers.   It doesn't look like we will be able to
205 do it with TC.   We may be able to do it with a netfilter module.  Probably
206 a custom module.  They probably use netfilter commands to assign packets to
207 tc classes anyhow.   so we need to add similar rules.  
208
209 So for now let's focus on FPS.   In this case we need to be able to
210 interact with TC from the ulogd program, either through a call or
211 directly.  
212
213
214
215
216
217 12-29-08
218
219 check this out.  The example looks familiar to how tc is used in plab.
220 http://edseek.com/~jasonb/articles/traffic_shaping/class.html
221
222
223 qdiscs are added at the very bottom for each class whose minor number is
224 the xid.   There is one parent qdisc which allows you to add classes.  That
225 is the htb classfull qdisc.   The bottom qdisc's are pfifo's which I
226 believe are classless.  pfifo is the scheduler that all leaf nodes of
227 classful qdiscs are assigned.  The only thing you can do is to determine
228 the size the queue.  This is scheduling, not shaping. 
229
230 You can add other schedulers: sfq, which tries to be flow fair.  
231 tbf:  token bucket filter.  tbf is now a classful qdisc. 
232
233
234 You had better make sure that your rates of your child classes do not
235 exceed the rate of the parent class.   those are the minimums.   What about
236 the ceilings?   That says how much you can borrow.   Classes borrow in
237 proportion to the minimum rates that they are assigned.  Individual
238 ceilings should not exceed the parents rate.  Because it says how much you
239 can borrow when no one else is using anything.  
240
241 So do I have to write all new rules for all slices that are active when we
242 want to constrain them all?  
243
244 What happens when the parents rate/ceiling is less than the maximum that
245 they can borrow?  That apparently doesn't do any damm thing. But this is
246 probably why the script makes sure that the ceilings don't go above the
247 1:10 or 1:1.  It never checks for 1:20, which is probably b/c they always
248 expect it to have a ceiling equal to bandwidth max. 
249
250 OK.   If we set the ceiling of the child class to the ceiling of the
251 parent, tokens are borrowed appropriately.  If the ceiling is greater of
252 the child, then it looks like cburst has a lot to do with it.   So I have
253 to see what is happening with cburst. 
254
255
256 Setting 1:1 to rate 5mb no ceiling
257 setting 1:10 to rate 8 ceil 5mb
258 setting 1:1myslice rate 8 ceil 1gbit
259
260 This configuration does not work. 
261
262 when 1myslice ceil is > then parent ceil, looks like no borrowing occurs
263 unless the cburst is very low.  if you set cburst to 0, then tc sets cburst
264 to something that allows the class to reach its ceiling. 
265
266
267
268 HOWTO: Set a ceiling on a particular slice.  
269 /usr/share/util-vaserver/bwlimit.py on pl_drl 1 8bit 500kbit 8bit 1gib
270 The first arg is share.   Works in the way you expect.
271 The next is min guaranteed.  The next is max or ceiling.  This is the one
272 to set.  The next two are min/ceiling for special destinations.
273
274 HOWTO:  Set a ceiling on all slices leaving a node. 
275 1.) We can change the ceiling for the 1:10 subclass. 
276 this should limit all traffic for all slices to non-exempted destinations
277
278  /sbin/tc class replace dev eth0 parent 1:1 classid 1:10 htb rate 8bit ceil 500kbit
279 This does not work. 
280
281 2.) We can change the ceiling for the 1:1 root class. 
282
283  /sbin/tc class replace dev eth0 parent 1: classid 1:1 htb rate 500kbit
284 modified this to 
285  /sbin/tc class replace dev eth0 parent 1: classid 1:1 htb rate 8bit ceil 500kbit
286 With no effect. 
287
288 Mucking with classid 1:1 seems to make the machine very unhappy.  
289
290
291 bwlimit seems to set the bottom classes ceilings to the ceiling of the 1:10
292 block.  Then why have the 1:10 block? 
293
294
295
296 Do 1&2, and neither have any effect.
297
298 It looks like only the bottom most class has any affect.  If I re-init the
299 bwlimit.py script, then a rule parent 1:10 leaf 1:1fff seems to get all the
300 traffic.  And it is the limit that seems to matter. 
301
302 I see.  1fff is the deafult_xid.  So when something has not been caught
303 earlier this is where it goes to be limited and caught. 
304
305
306 tcp netperf tests for rate limiting from a slice. 
307 Experiment with 34->35.   Logged in to the pl_drl slice to issue the
308 netperf.
309
310 vserver pl_drl status
311 vserver pl_drl_two status
312
313 vservers aren't running until you log in to them. so the above command
314 won't return something useful until that point. 
315
316
317
318 12-18-08
319
320 /etc/init.d/ncsd restart or reload (caches ldap information) this is for
321 the sysnet machines. 
322
323
324 The files that you care about are in the release.   they are
325 /usr/share/util-vaserver/bwlimit.py
326 This is what makes the calls to TC to do the traffic control.  
327
328
329
330 OK:  Logging in to the drl slice, and setting up the netperf
331 server/client. 
332 ssh -i ~/.ssh/myplc_admin.rsa -l pl_drl sysnet34.ucsd.edu
333
334 So I'm sending netperf outbound flows from the pl_drl slice
335 and it is getting recorded in the class htb 1:11f8 (which is context 504).
336 When you do a vserver list, though, it says there's only a 503 (though when
337 you log in to 503, it says the "security context" is 504). 
338
339
340  1111  /usr/share/util-vserver/bwlimit.py -d eth0 -v init
341  1115  /usr/share/util-vserver/bwlimit.py -d eth0 on pl_drl 1 1kbit 10kbit 1kbit 10kbit  
342
343
344 11-14-07
345
346
347 planetlab website login
348 kyocum@cs.ucsd.edu
349 ate smurfs as well
350 sysnet35 kyocum - big Dog - and killing name root
351
352
353 symlink cvs source code to a ulogd/drl directory. 
354
355 for file  in '*.h'; do echo $file; rm /root/myplc/ulogd/drl/$file ; done
356 for file  in '*.c'; do echo $file;  ln -s /root/ratelimiting/myplc/$file /root/myplc/ulogd/drl/. ; done
357
358
359 11-11-07
360
361 Brought back 32 and 33 from power offs.  32 is mounting everything read
362 only.  34 is working fine, but it was never powered off.  
363
364
365
366 10-29-07
367 Back from NSDI, SOSP, Texas, and firestorm.  Will modify ulogd to perform
368 DRL.   Will first use GRD, as we can drop based on simple probabilities.
369 Though we should be able to see all the packets that are coming in to the
370 machine using ulogd. 
371
372
373
374
375 9-16-07
376
377 vserver pl_netflow enter
378 scp root@sysnet35:~/myplc/build/RPMS/i386/ulogd-1.02-11.i386.rpm .
379
380 Where does the output go?   
381
382
383 9-14-07 #2
384
385 Now let's try to install the ulog srpm that was created on one of the myplc
386 nodes. 
387
388 sysnet32,34: myplc nodes
389 sysnet35: build box
390 sysnet33: myplc controller
391
392 On 34, entering vserver for ulogd, downloading srpm, and trying to
393 install. 
394
395 /etc/rc.d/init.d/ulogd stop
396 rpm -e --nodeps ulogd
397 rpm -Uvh ulogd-1.02-11.i386.rpm
398 /etc/rc.d/init.d/ulogd start
399
400
401 9-14-07
402
403 Have installed FC4 on sysnet35.  Am following Marc's instructions in his email.Check out rc1 build and rc1 ulogd.   
404 OK, I'm trying to build things using marc's instructions and not the entire
405 myplc build envi
406 ronment that is in the GUIDE.  I'll try that next.  
407 Ok, I've set it all up.  I'm using
408 mirrors.kernel.org 
409 and fedora/core/4/os 
410 --
411 Ok, now I'm about to cd into build and make ulogd . . .
412 q
413
414 xPWD=$PWD
415 cvs -d :pserver:anonymous@cvs.planet-lab.org:/cvs co -r planetlab-4_1-rc1
416 build
417 cvs -d :pserver:anonymous@cvs.planet-lab.org:/cvs co -r planetlab-4_1-rc1
418 ulogd
419 cd build
420 mkdir SPEC SOURCES
421 cd SPEC
422 # note that you will need these symlinks to use the full paths --- NOT
423 relative paths
424 # which is why I am using $xPWD
425 ln -fs $xPWD/ulogd/ulogd.spec ulogd.spec
426 cd ../SOURCES
427 ln -fs $xPWD/ulogd ulogd
428 cd ..
429 make ulogd
430
431 Assuming the dependencies are set up right, this should first suck down the
432 kernel and mysql modules via CVS, build them (which may take some time),
433 and then build ulogd.
434
435 Success!!!!!
436
437 Now, check out ratelimiting but add root to cvs group number 30008
438 groupadd -g 30008 cvs (add group def)
439
440
441 8-17-07
442
443 Made two slices.  pl_drl_one and pl_drl_two
444 to log in to the slices I uploaded a key, myplc_admin.{rsa,pub}
445
446 sake:~/.ssh grant$ ssh -i myplc_admin.rsa -l pl_drl_one sysnet34
447
448
449 We want to modify ULOGD
450
451 can't run it.  root@sysnet34 sbin]# ./ulogd --help
452 ./ulogd: error while loading shared libraries: libproper.so.0: cannot open
453 shared object file: No such file or directory
454
455 trying chroot to the netflow slice first. 
456 That seems to do the trick.  
457
458 bash-3.00# ./ulogd 
459 Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `raw'
460 Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `oob'
461 Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `ip'
462 Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `tcp'
463 Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `icmp'
464 Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `udp'
465 Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `ahesp'
466 Fri Aug 17 20:05:08 2007 <3> ulogd.c:300 registering interpreter `gre'
467 Fri Aug 17 20:05:08 2007 <5> ulogd.c:355 registering output `netflow'
468 ERROR: Unable to create netlink socket: Bad file descriptor
469 8-21-07
470
471 get yum to work on sysnet34.
472 in /etc/yum.conf, changed reposdir=/etc/yum.repos.d/
473 http://onelab-build.inria.fr/websvn/filedetails.php?repname=OneLab&path=%2Fnew_plc_www%2Ftrunk%2FPlanetLabConf%2Fyum.conf.php
474 has a crazy yum.conf file. 
475 yum install cvs
476 yum install gcc
477
478 [root@sysnet34 2.6.12-1.1398_FC4.5.planetlab]# cd /usr/src/
479 [root@sysnet34 src]# mkdir kernels
480
481 Install the kernel source the lib/modules directory symlinks to
482 /usr/src/kernels/ 
483 where we place 2.6.12-1.1398_FC4.5.planetlab
484
485 Checkout kernel:
486 cvs co -r planetlab-4_1-rc1 linux-2.6
487 placed in /usr/src/kernels/
488
489 Building PLAB kernel: 
490
491 fuck yum, no ncurses devel, no yum supository. 
492 wget http://coblitz.planet-lab.org/pub/fedora/linux/core/updates/4/x86_64/ncurses-devel-5.4-19.fc4.i386.rpm
493 rpm -i ncurses----
494
495 OK, now the stupid make menuconfig worked, but we're going to copy a kernel
496 config from /proc/config.gz 
497 zcat config.gz > /root/kernels/linux-2.6/.config
498 make O=/root/kernels/linux-2.6/build/ oldconfig 
499
500 So none of that worked, copy config to .config in top level directory.
501 then run menuconfig, then save config, then compile. that works. 
502
503 Yay!
504
505 ./build/include/linux/version.h
506 so config that shit. 
507
508 Configuring ulogd
509 ./configure --with-kernel=/root/kernels/linux-2.6/build/
510 config success!
511
512 download RPM and install from location above. 
513 mysql-devel-4.1.20-1.FC4.1.x86_64.rpm
514 rpm -i <>
515
516 Ok, had to re-enable yum.conf to use yum.repos.d
517 had to modify yum.repos.d/fedora-devel so that it wasn't used. 
518 then I could yum install openssl-devel and mysql-devel
519
520 The linker is bitching about mysql objects not being present. 
521 trying yum install mysql.i386
522 already installed trying
523 yum install ulogd-pgsql.i386 <no help>
524 yum install ulogd-mysql.i386 <no help>
525 yum install mysqlclient10-devel.i386
526
527 Ok, all that is shit.   Marc sent me a yumrepos.tgz that is on my
528 desktop. I put all the files in the right place on 34.  He then sent me a
529 yum install line that is this. 
530
531 yum -y install beecrypt-devel bzip2 coreutils cpio createrepo curl
532 curl-devel cvs db4-devel dev diffutils dnsmasq docbook-utils-pdf dosfstools
533 doxygen expect gcc-c++ gd glibc glibc-common gnupg gperf gzip httpd install
534 iptables less libpcap libpcap-devel libtool linuxdoc-tools mailx make
535 metadata mkisofs mod_python mod_ssl mysql mysql-devel mysql-server nasm
536 ncurses-devel openssh openssl php php-devel php-gd php-pgsql postgresql
537 postgresql-devel postgresql-python postgresql-server python python-devel
538 PyXML readline-devel redhat-rpm-config rpm rpm-build rpm-devel rsync
539 sendmail sendmail-cf sharutils sudo tar tetex-latex time vconfig vixie-cron
540 wget xmlsec1 xmlsec1-openssl yum
541
542 which should make the box a build box. 
543
544 Of course, what I should really be doing is making a fresh FC4 node as my
545 build environment, but whatever.  
546
547
548 ------
549
550 Ok, trying to figure out if there is a way to "start" the pl_netflow
551 vserver.  Don't know if it's currently running.  Perhaps it is.
552 vserver-stat shows 4 vservers, besides the root context, 0. 
553 #503 is pl_netflow.  The other two are the two drl slices. 
554 Each vserver has a configuration file shown here: 
555 [root@sysnet34 sbin]# more /etc/vservers/pl_netflow.conf 
556
557 To enter a vserver context you can say
558 vserver <name> enter
559
560 To run ulogd
561
562 vserver pl_netflow enter
563 cd /usr/sbin
564 ./ulogd
565
566 The configuration file is in 
567 /etc/ulogd.conf
568 /var/log/ulogd.log
569
570
571
572
573 8-07
574 Installing myPLC.  Trying to build rate limiting infrastructure on top of
575 it. 
576
577
578 sysnet33.   has only mounted /dev/xen_vg/dom0 on /
579 that is only 2GB.  There is another LVM called /dev/xen_vg/lvol0.
580 It has 10GB.  We will try to mount that. 
581 Display with lvmdisplay
582
583 The underlying disk partition is /dev/sda3 (physical volume)
584 display pv's with pvdisplay
585
586 adding line in /etc/fstab to mount lvol0 on /lvol0
587 This partition has plenty of space.  Everything looks good. 
588
589 use linux authconfig to see if it's using ldap for user authentication
590 to disable selinux
591 http://www.crypt.gen.nz/selinux/disable_selinux.html
592 It was already disabled, see /etc/selinux/config 
593 INSTALLED in /lvol0
594 I edited /lvol0/myplc/etc/sysconfig/plc
595 I symlinked /etc/init.d/plc --> installed
596 I symlinked /etc/sysconfig/plc --> installed
597
598 I edited etc/sysconfig/plc to point to my installation in /lvol0/myplc
599
600 root@localhost.localdomain
601 made a new account as well.
602 kyocum@cs.ucsd.edu
603 8smurf2
604
605 ---
606
607 Trying to install the images for the new nodes.  They are in /lvol0/myplc/plc/root/data/var/www/html/download
608
609 on sysnet33,
610 yum install mkisofs
611 ./bootcustom.sh DRL.iso plnode34.txt 
612
613
614 ---
615
616 Machines come up in debug mode.  They have insufficient resources.
617 Probably disk space.   Need to modify the boot script that is sent over
618 from myplc (beckerr), or we can add a "/minhw" to the node type in the
619 controller. The boot program is at: 
620
621 -bash-3.00$ pwd
622 /lvol0/myplc/plc/data/var/www/html/boot/bootmanager.sh
623 nope just contains binary of bootmanager.
624 /lvol0/myplc/plc/root/etc/plc.d/bootmanager is where it's at. nope.
625 qq/usr/share/bootmanager/
626
627
628 Generally, running BootManager by hand is the standard procedure. Set the 
629 machine to "Boot" state via your PLC API or web server. When the machine
630 sfails 
631 to boot, hit Ctrl-C, login as root/root, cd /tmp/source, and run 
632 "./BootManager.py". Figure out where it dies, then start adding prints in
633 the 
634 appropriate places to figure out why.
635
636
637