From 0f6d1a768aa03d38861c5011333135a8068eac2c Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Thu, 14 Jan 2010 12:12:54 +0000 Subject: [PATCH] iterate --- Makefile | 2 +- README | 6 +- bootmanager.spec | 13 ++-- build.sh | 12 ++-- nodeconfig/boot/index.php | 23 +++---- nodeconfig/boot/upload-bmlog.php | 112 +++++++++++++++++++++++++++++++ support-files/desc | 1 - support-files/uudecode.gz | Bin 4317 -> 0 bytes 8 files changed, 139 insertions(+), 30 deletions(-) create mode 100755 nodeconfig/boot/upload-bmlog.php delete mode 100644 support-files/desc delete mode 100755 support-files/uudecode.gz diff --git a/Makefile b/Makefile index 7769042..e427288 100644 --- a/Makefile +++ b/Makefile @@ -42,6 +42,6 @@ endif ########## tags: - find . '(' -name '*.py' -o -name '*.spec' ')' | xargs etags + find . -type f | egrep -v '/\.svn/|~$$' | xargs etags .PHONY: tags diff --git a/README b/README index 09a756f..262af5d 100644 --- a/README +++ b/README @@ -5,8 +5,8 @@ the entry point for the boot CD is installed in /var/www/html/boot/index.php the bootmanager rpm installs most of its stuff in /usr/share/bootmanager/regular/ -all signed scripts are stored into - /var/www/html/bootmanager +and the default signed script is created as + /var/www/html/boot/bootmanager_regular.sh.sgn === If you need to create an alternate version for a specific 'deployment' @@ -27,4 +27,4 @@ which should do everything needed === It's also possible to attach a (signed) bm script to a unique node by renaming a .sgn into -/var/www/html/bootmanager/_bootmanager.sh.sgn +/var/www/html/boot/bootmanager_.sh.sgn diff --git a/bootmanager.spec b/bootmanager.spec index 1a3cff3..0ef34e5 100644 --- a/bootmanager.spec +++ b/bootmanager.spec @@ -29,9 +29,10 @@ Requires: PLCAPI >= 4.3 # the python code packaged in these are shipped on the node as well Requires: pypcilib pyplnet monitor-runlevelagent -# plc.d/bootmanager is moving +### avoid having yum complain about updates, as stuff is moving around +# plc.d/bootmanager Conflicts: myplc <= 4.3-37 -# nodeconfig/boot/index.php is moving +# nodeconfig/boot/* Conflicts: nodeconfig <= 4.3-7 AutoReqProv: no @@ -57,15 +58,17 @@ install -m 644 README $RPM_BUILD_ROOT/%{_datadir}/%{name}/README # formerly in the nodeconfig module install -D -m 755 nodeconfig/boot/index.php $RPM_BUILD_ROOT/var/www/html/boot/index.php +install -D -m 755 nodeconfig/boot/upload-bmlog.php $RPM_BUILD_ROOT/var/www/html/boot/upload-bmlog.php # formerly in the MyPLC module -install -D -m 755 plc.d/bootmanager $RPM_BUILD_ROOT/etc/pld.c/bootmanager +install -D -m 755 plc.d/bootmanager $RPM_BUILD_ROOT/etc/plc.d/bootmanager %clean rm -rf $RPM_BUILD_ROOT %post -# signing of botmanager.sh occurs as part of plc.d/bootmanager +# signing of botmanager.sh occurs as part of /etc/plc.d/bootmanager +# which in turn invokes build.sh # NOTE: do not run this agent when installed on a myplc. # xxx - a bit hacky maybe @@ -76,7 +79,7 @@ chkconfig --del monitor-runlevelagent %defattr(-,root,root,-) %{_datadir}/%{name} /var/www/html/boot/index.php -/etc/pld.c/bootmanager +/etc/plc.d/bootmanager %changelog * Sat Jan 09 2010 Thierry Parmentelat - BootManager-4.3-16 diff --git a/build.sh b/build.sh index 6362ca6..06e9f00 100755 --- a/build.sh +++ b/build.sh @@ -32,15 +32,15 @@ cd $(dirname $0) sed -i -e "s|SUPPORT_FILE_DIR=.*|SUPPORT_FILE_DIR=$BOOTSTRAPDIR|" source/configuration # Source bootmanager configuration -. $srcdir/source/configuration +. source/configuration # Write boot script. nodeconfig/boot/index.php retrieves the contents of this script # after checking the node id -BMDIR=/var/www/html/bootmanager +BMDIR=/var/www/html/boot mkdir -p $BMDIR -DEST_SCRIPT="$BMDIR/${DEPLOYMENT}_bootmanager.sh" +DEST_SCRIPT="$BMDIR/bootmanager_${DEPLOYMENT}.sh" # Remove the old version or any sym links prior to re-writing rm -f ${DEST_SCRIPT} rm -f ${DEST_SCRIPT}.sgn @@ -88,14 +88,12 @@ cat < $DEST_SCRIPT # Do not tolerate errors set -e -UUDECODE=/usr/bin/uudecode - -($UUDECODE | /bin/tar -C /tmp -xj) << _EOF_ +(/usr/bin/uudecode | /bin/tar -C /tmp -xj) << _EOF_ EOF # Embed the uuencoded tarball in the script -tar -cj -C $srcdir source/ -C $extra_libs source/ | uuencode -m - >> $DEST_SCRIPT +tar -cj source/ -C $extra_libs source/ | uuencode -m - >> $DEST_SCRIPT # wrap up the script echo '_EOF_' >> $DEST_SCRIPT diff --git a/nodeconfig/boot/index.php b/nodeconfig/boot/index.php index 81ec490..fc64e3d 100755 --- a/nodeconfig/boot/index.php +++ b/nodeconfig/boot/index.php @@ -13,10 +13,10 @@ require_once 'plc_api.php'; global $adm; // location for signed scripts -$bmdir="/var/www/html/bootmanager"; +$bmdir="/var/www/html/boot"; +$bmext=".sh.sgn"; -// Default bootmanager -$bootmanager = "bootmanager.sh.sgn"; +$candidates = array(); // Look up the node $interfaces = $adm->GetInterfaces(array('ip' => $_SERVER['REMOTE_ADDR'])); @@ -58,23 +58,20 @@ if (isset($node)) { // Custom bootmanager for the node, e.g. // planetlab-1.cs.princeton.edu_bootmanager.sh.sgn - $bootmanagers = array(strtolower($node['hostname']) . "_" . $bootmanager); + $candidates [] = "bootmanager" . "_" . strtolower($node['hostname']); // Custom bootmanager for the deployment tag, e.g. - - if (!empty($node['nodegroup_ids'])) { - $nodegroups = $adm->GetNodeDeployment($node['nodegroup_ids']); - foreach ($nodegroups as $nodegroup) { - $bootmanagers[] = strtolower($nodegroup['groupname']) . "_" . $bootmanager; - } + $deployment = $adm->GetNodeDeployment($node['node_id']); + if ( ! empty ($deployment) ) { + $candidates[] = "bootmanager" . "_" . $deployment; } } // Default bootmanager -$bootmanagers[] = "regular_" . $bootmanager; +$candidates[] = "bootmanager_regular"; -foreach ($bootmanagers as $bootmanager) { - $candidate=$bmdir . "/" . $bootmanager; +foreach ($candidates as $bootmanager) { + $candidate=$bmdir . "/" . $bootmanager . $bmext ; if (file_exists($candidate)) { readfile($candidate); exit(); diff --git a/nodeconfig/boot/upload-bmlog.php b/nodeconfig/boot/upload-bmlog.php new file mode 100755 index 0000000..6e29e23 --- /dev/null +++ b/nodeconfig/boot/upload-bmlog.php @@ -0,0 +1,112 @@ +GetInterfaces(array("ip"=>$ip)); +if (! empty($interfaces) ) { + $interface=$interfaces[0]; + $node_id=$interface['node_id']; + $nodes=$adm->GetNodes($node_id,array("hostname")); + if (!empty($nodes)) { + $hostname=$nodes[0]['hostname']; + } + } + +// store the actual data in /var/log/bm/raw/2008-11-31-20-02-onelab01.inria.fr-138.96.250.141.txt + +$rawdir=$logdir . "/raw"; +$date=strftime("%Y-%m-%d-%H-%M"); +$log_name=$date . "-" . $hostname . "-" . $ip . ".txt"; +$log_path=$rawdir . "/" . $log_name; +$month=strftime("%Y-%m"); +$time=strftime("%d-%H-%M"); + +mkdir_if_needed ($rawdir); + +//////////////////////////////////////// + +$log=fopen($log_path,"w") or die ("Cannot open logfile "+$log_path); + +$uploaded_name= $_FILES['log']['tmp_name']; +$uploaded_size=filesize($uploaded_name); + +fprintf ($log, "BootManager log created on: %s-%s\n",$month,$time); +fprintf( $log, "From IP: %s\n",$ip); +fprintf( $log, "hostname: %s\n",$hostname); +fprintf ( $log, "uploaded file: %s (%d bytes)\n",$uploaded_name,$uploaded_size); +if ( ( strcmp($hostname,$default_hostname)==0) && ( $uploaded_size >= $limit_bytes) ) { + fprintf ( $log, "contents from an unrecognized IP address was truncated to %d bytes\n",$limit_bytes); + $truncated=TRUE; + $uploaded_size=$limit_bytes; + } else { + $truncated=FALSE; + } + +fprintf( $log, "-----------------\n\n" ); +$uploaded = fopen($uploaded_name,'r'); +$contents = fread($uploaded, $uploaded_size); +fclose($uploaded); +fwrite($log,$contents); +if ($truncated) + fwrite ($log, " ..<" . "truncated" . ">..\n"); +fclose($log); + +//////////////////////////////////////// + +// create symlinks for easy browsing + +// /var/log/bm/per-month/2008-11/onelab1.inria.fr/31-20-02.bmlog +$linkdir=$logdir; +$linkdir=$linkdir . "/per-month"; +mkdir_if_needed ($linkdir); +$linkdir=$linkdir . "/" . $month; +mkdir_if_needed ($linkdir); +$linkdir = $linkdir . "/" . $hostname; +mkdir_if_needed ($linkdir); +$link = $linkdir . "/" . $time ; +symlink ("../../../raw/".$log_name,$link); + +# /var/log/bm/per-hostname/onelab1.inria.fr/2008-11-31-20-02.bmlog +$linkdir=$logdir; +$linkdir=$linkdir . "/per-hostname"; +mkdir_if_needed ($linkdir); +$linkdir=$linkdir . "/" . $hostname; +mkdir_if_needed ($linkdir); +$link = $linkdir . "/" . $month . "-" . $time ; +symlink ("../../raw/".$log_name,$link); + +# /var/log/bm/per-ip/138.96.250.141/2008-11-31-20-02.bmlog +$linkdir=$logdir; +$linkdir=$linkdir . "/per-ip"; +mkdir_if_needed ($linkdir); +$linkdir=$linkdir . "/" . $ip; +mkdir_if_needed ($linkdir); +$link = $linkdir . "/" . $month . "-" . $time ; +symlink ("../../raw/".$log_name,$link); + +?> diff --git a/support-files/desc b/support-files/desc deleted file mode 100644 index c19c2a3..0000000 --- a/support-files/desc +++ /dev/null @@ -1 +0,0 @@ -The BuildSupport directory is used to build tarballs of files necessary during the install, including files to bootstrap RPM, handle booting off of lvm volumes, and partitioning disks. diff --git a/support-files/uudecode.gz b/support-files/uudecode.gz deleted file mode 100755 index 040c34faa8ffdc3823e1864161b26750f9ae4688..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4317 zcmV<35F+m%iwFp8#AiYP19f#|Wn*t-WdOBVe{@q-p1*0+Hk3jN7DcES##F$eDKOOm zEK$=BT58}ckTL&v*Em)iVe(t?5eJ%AI{bOIwH}`$-{r=G#PnIkT}mHk(ajx3XN06NHF{;5^*}azIazO;AKaiuRc;fSU-v zNsgH$@QZi>o@tB$z|RWBIPZIb#t4p4$J+$Cay$#HG#;Wcz*)ipxl#vUHqp-}-2fZm zHpAFM7d00f*JcTPvc!KY@1KzPf?R@ z&IX0m)OeZ#np0!0TH@4{CJkI}uM5iDUKR+{I=yw!)VPxvSU}M{zFMb8!8l1|&e~cf z5MXtF#n-5KNgj22eKjD`+&(W;n%o-OP68p@uW1ZwwXDwVQM^8mb9FVr zfZ~Ep4|YS@a^s~%WZv%oPA;mW$@gEx z)u;(3UKa}GJQTX!6Cn8xIX5d`G+T0Kigl1PUgUpHftdH4+r)h5%n>(GDcCtVD8&cYHnx*evOBCsn_4JRpq)XtbirdurG+ia|SjAZC9LM3gim;{<97hCH zl*QChjw2E((mr*F4rB(vp#&JYU#ZphL%1RRl8L)?FkBjRcc z_n+g4yxPkB=Qw6SJ;?p%IA%gU#QofL+b*Ncv^S;wB(?fM_EIddfk%X3& zJ{PMV>^aS8Xx>9h$|;Xoa8CPK(iSU>ys6z1?GGo+&jC-rnduJpzL5h`Q_tyWzu;}( zO|K3l^H$i%=%z6IQGtri^ttev!uSp*^*pk1-M){CY3AbEova-TDf*z@(!r>QZp`sW zvMZgAn(fI=Lom|Xe3X*W+R3}aNn7-d@TH~JC&p1{{Mi)s#g9W_{9pLvCp?t3_lJ@G zJq~MUHW9a+vUV;rB`##qefa#+?g6vqR6EwPwe!trksbPy?W86=WZGL4zMLICZI1Ns zJ(*G{KCQ41>@BAf7tC~%5t4PIkS!#nw=>%R_0`@*9A8)Z(3hMx%X)lWwjc}rudVxh zZs@{Nz8ZKG<86pg7mwp^yIJsBl9RvWQ$2IA;{(c%6L@)v{vrM=H!(xNZ5}oWMV<@?=tx?msq(MC%OGZ2u;JeuzFDBf<`rI z@C2Tq@n^Zac?U@L`$kW!%}FH8an4(juN`jbwjS?p`D1^m@}SvLsm+xM!yosd>-pOB zWufa!tj&|Mz%|}T8$2JnmTzsYr4Up1GV5{P-4gjr7dl3eYIAtLkUVQMUY3Q-8KxU$ z{&|F`O9oM)4)pD{HrEkb=o;~VoAVpUFJ{Okaq!L&`M-=C{2QjLl~meaC>~r@XB&)9 z44AtwWLY~C<3z6MiPrW7#0xE*ZI?J@RyXo)ECXzFQzGEZb2@=qT;lbgx9xx-nP zcpWB_wPJ>Z2i@nh#+{=aicR5`AP0|JC+%@s7_H0rgzZeY#`G_20v4&=VUa}lqpNmV*8CHF1hEL$mSjNW-!=w+W~!DQXU8YL`$xq;|}VJ zzuF9GScUMu*q*#ZeBpsCYjY_vg05@P0l7|h3yL#>BKXr-RY4>XjqFAon%|*F4aQyt z(zO!W@LBWe^IB=F4Sk`-rNP|L4@^ue7Lkr|KCHX_1H#h(W*G^bnTw%S*Ni8aAP+4p z4d#cMOw8IGqfS2WC)N|0P(lTOuW3q&cIae2JgU9Q2uIJxlvpHNGT858F)m4^=GMqIhd(<1gdCM1&9Cd8_^x}Q)c_I@A{ zH-)VCZDPhZnh+k3v~-E&<5ql3$}6=W#v%u)w}kaEwgfMX+J+^J+_y$Pq(l*Av--er z+0@N3!MD@N#b~zJEyL!IwE7CEPgSL5s&zGq)xamV_t&GqmZ zBRf-nOIE#+$5tT0mcflksEf}_L#z#Vu?LC}$PO@9*vZ!;bQfPgbyE03U*(*)UHGHoSakut4aS0&ST;nGH0(w^2NlV~ zSGoAh#LzJy(OC59|oOMZ;E--EsRtsp+y@ z1nm|2Gi3kOOo)~TJdy@$`B3GezURpsP`T9oE>F1eDl>i!n!A6RSXqdR%L zk9>F%-<9zg{^$I0et-A%tVQnxtkM5$P4E9bI+rgR@?Q;~DIg&d8ju86URlUd{i{|MyYlXwPVZ)At!4`5SARXmN%7t|VqS}FE$nBsNivy#AK z+Zvy38zHl79=BKFJ?m7TU$b$lC3NvVx5uN@J3WGEyHfA=ivQB>&VX`Hxvj)!E7`m? zzgqMTqh&5-N15CO+sP%B1en)H;(Z>EZ>QT^Zwu^dAgPbpW|su!Fqh(WD=ynkzgxrD z@>R>fF9vFzUa*PHD+qzCRnn?G!GPk|y}`Y0TS;J6#yxJ6bZ|q!S+Bqf+veq~R##O! z9FBYzP@Vpu=Jo_wSuo%)1FDqCT{G3Ucn3+cmD*OU*#N$hKt3yXEO5-18*XD>d%ym5 zAHmY{yYKn#!bOYktyn@>B>^*KWt($y^DN`?#}`bPXf2#H`KF>NH{UY#R>3uGdhu;D zZnw?+)*beeJ7>+FbJw@$mO9Gj&0p}HZ=m}B?^^HQg*mX5mLl_J(RBN54L-kOb9?Ew zf$ua@;Mw<_UYAqz5w+7_A8b&(TEM3HY}g>RVO!JZ4bX^UYsk>iXn-fEKCJnCj(nS~ zRGlle*+yP2cc9VZBu3R8u<>z{Wy3BfxORX`t`Z}cSSvPt#9;Oab|2Uc>uL#-iYxUi zwVE!4Y(~FWaQG{6iI(RIwxx_MW5ee`ct=nC#B9O&$sxH1y>g$~g4c?QX0ruv1;sx$ zTTn+!P2y|=n{`v99Mpl;^uWh1X@ZF}7@WP}OoNeJ+@Fh>E!YRgCLPW_u=z(1cHdFz zCzE`zg9@SV(TG_;PWeU`&Z6}D%cOINVB$~BmKg*Ng8K;85Nsvz66_&(g5Z|~M+iCz z{+-}`g3AO$1QT0`pTI$IAHf=ett~g&*Yv{JHlKZJxPJ#?V8F3?_#cGp+xosS_=7>0 zQtNXm4wte$SkKtI-tWA~904_;`8DTu=5Tv8#ox#rRI?Pv{ST}v)tvRrp*jO9bGUYS zspg4R^D{@iH|Wsov=OPHF~8ygow#ZAXprotf4=YUs3U}ie6%#2%%P|?b$%QXIBIF7 z1W18s9ky z<7bd2d0rwf{p=3seL0d2xxNzToQ84zymFS*4LYoWV!E+q30@N$KAS9KVjX}EYo@|1 z*2-x6zRUO;^nnh!{wN80(4bd8*F@itq{A9Hnj`!$>czE=iStI#VU3;35o^ro2a;}! zfevdD2agFkKHfm5NcmXvs0oQ&xsFH0Z<~ScU7~xJZdy$v=>U%z=y0yxNJ{2S9H!IH zQXV(Zp#~kgdH77usCOqD&VvNeC5Y~@;lR`;+r0)lmEO$MX(P{V_4}x#g9v`+J#F|r z*GSiDpwsZS^c8dm40PDf-u)GNpOL