Tagging module Monitor - Monitor-3.0-18
[monitor.git] / Monitor.spec
index 48fe7c5..91590d2 100644 (file)
@@ -5,8 +5,8 @@
 %define url $URL: svn+ssh://svn.planet-lab.org/svn/monitor/trunk/monitor.spec $
 
 %define name monitor
 %define url $URL: svn+ssh://svn.planet-lab.org/svn/monitor/trunk/monitor.spec $
 
 %define name monitor
-%define version 1.1
-%define taglevel 0
+%define version 3.0
+%define taglevel 18
 
 %define release %{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}}
 %global python_sitearch        %( python -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)" )
 
 %define release %{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}}
 %global python_sitearch        %( python -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)" )
@@ -33,6 +33,8 @@ system, syncing the PLC db with the monitoring database, notifying users,
 interacting with PCU hardware, applying penalties to sites that violate
 acceptable use.
 
 interacting with PCU hardware, applying penalties to sites that violate
 acceptable use.
 
+######################################## CLIENT
+
 %package client
 Summary: Monitor hooks for a PLC node
 Group: Applications/System
 %package client
 Summary: Monitor hooks for a PLC node
 Group: Applications/System
@@ -44,36 +46,81 @@ The client scripts handle account creation inside of a node.  This will
 include configuration setup for the monitoring agent running on the node.  It
 will also include any cron or init scripts needed to perform this kind of
 maintenance.
 include configuration setup for the monitoring agent running on the node.  It
 will also include any cron or init scripts needed to perform this kind of
 maintenance.
-
-%package server
+######################################## Server Deps
+%package server-deps
 Summary: Monitor hooks for the PLC server.
 Group: Applications/System
 
 Requires: python
 Summary: Monitor hooks for the PLC server.
 Group: Applications/System
 
 Requires: python
-Requires: python-sqlalchemy
-Requires: python-elixir
+Requires: python-setuptools-devel
+Requires: python-peak-util-extremes
+Requires: TurboGears
 
 
+Requires: compat-libstdc++-296
 Requires: openssh-clients
 Requires: perl-libwww-perl
 Requires: perl-IO-Socket-SSL 
 Requires: MySQL-python
 Requires: openssh-clients
 Requires: perl-libwww-perl
 Requires: perl-IO-Socket-SSL 
 Requires: MySQL-python
-Requires: rt3 == 3.4.1
 Requires: nmap
 Requires: nmap
+Requires: rt3
+
+Requires: plewww-plekit
+
+#Requires: zabbix-client
+#Requires: zabbix-gui
+#Requires: zabbix-server
+
+%description server-deps
+The server side include all python modules and scripts needed to fully
+
+######################################## Server
+%package server
+Summary: Monitor hooks for the PLC server.
+Group: Applications/System
+
+Requires: python
+
+Requires: monitor-server-deps
+Requires: monitor-pcucontrol
 Requires: PLCWWW >= 4.2
 Requires: PLCWWW >= 4.2
-Requires: bootcd-planetlab-i386 >= 4.2
+Requires: bootcd-%{pldistro}-%{_arch} >= 4.2
 
 %description server
 The server side include all python modules and scripts needed to fully
 operation, track, and interact with any third-party monitoring software, such
 as Zabbix DB.
 
 
 %description server
 The server side include all python modules and scripts needed to fully
 operation, track, and interact with any third-party monitoring software, such
 as Zabbix DB.
 
+######################################## PCU Control
+
+%package pcucontrol
+summary: pcu controls for monitor and plcapi
+group: applications/system
+requires: python
+requires: OpenIPMI-tools
+
+%description pcucontrol
+both monitor and the plcapi use a set of common commands to reboot machines
+using their external or internal pcus.  this package is a library of several
+supported models.
+
+####################################### RunlevelAgent
+%package runlevelagent
+summary: the RunlevelAgent that reports node runlevels
+group: applications/system
+requires: python
+
+%description runlevelagent
+The RunlevelAgent starts as early as possible during boot-up and production
+mode to actively report the observed runlevel to PLC and update the
+'last_contact' field.
+
 %prep
 %setup -q
 
 %build
 # NOTE: the build uses g++ cmdamt/
 # NOTE: TMPDIR is needed here b/c the tmpfs of the build vserver is too small.
 %prep
 %setup -q
 
 %build
 # NOTE: the build uses g++ cmdamt/
 # NOTE: TMPDIR is needed here b/c the tmpfs of the build vserver is too small.
-cd cmdamt
+cd pcucontrol/models/intelamt
 export TMPDIR=$PWD/tmp
 make
 cd ..
 export TMPDIR=$PWD/tmp
 make
 cd ..
@@ -91,8 +138,11 @@ install -d $RPM_BUILD_ROOT/data/var/lib/%{name}/archive-pdb
 install -d $RPM_BUILD_ROOT/var/lib/%{name}
 install -d $RPM_BUILD_ROOT/var/lib/%{name}/archive-pdb
 install -d $RPM_BUILD_ROOT/var/www/cgi-bin/monitor/
 install -d $RPM_BUILD_ROOT/var/lib/%{name}
 install -d $RPM_BUILD_ROOT/var/lib/%{name}/archive-pdb
 install -d $RPM_BUILD_ROOT/var/www/cgi-bin/monitor/
+install -d $RPM_BUILD_ROOT/var/www/html/monitorlog/
 
 
+install -D -m 644 monitor.functions $RPM_BUILD_ROOT/%{_sysconfdir}/plc.d/monitor.functions
 install -D -m 755 monitor-server.init $RPM_BUILD_ROOT/%{_sysconfdir}/plc.d/monitor
 install -D -m 755 monitor-server.init $RPM_BUILD_ROOT/%{_sysconfdir}/plc.d/monitor
+install -D -m 755 zabbix/monitor-zabbix.init $RPM_BUILD_ROOT/%{_sysconfdir}/plc.d/zabbix
 
 echo " * Installing core scripts"
 rsync -a --exclude www --exclude archive-pdb --exclude .svn --exclude CVS \
 
 echo " * Installing core scripts"
 rsync -a --exclude www --exclude archive-pdb --exclude .svn --exclude CVS \
@@ -100,6 +150,7 @@ rsync -a --exclude www --exclude archive-pdb --exclude .svn --exclude CVS \
 
 echo " * Installing web pages"
 rsync -a www/ $RPM_BUILD_ROOT/var/www/cgi-bin/monitor/
 
 echo " * Installing web pages"
 rsync -a www/ $RPM_BUILD_ROOT/var/www/cgi-bin/monitor/
+rsync -a log/ $RPM_BUILD_ROOT/var/www/html/monitorlog/
 
 echo " * Installing cron job for automated polling"
 install -D -m 644 monitor-server.cron $RPM_BUILD_ROOT/%{_sysconfdir}/cron.d/monitor-server.cron
 
 echo " * Installing cron job for automated polling"
 install -D -m 644 monitor-server.cron $RPM_BUILD_ROOT/%{_sysconfdir}/cron.d/monitor-server.cron
@@ -113,21 +164,33 @@ rsync -a monitor/ $RPM_BUILD_ROOT/%{python_sitearch}/monitor/
 #for file in __init__.py database.py config.py ; do 
 #      install -D -m 644 monitor/$file $RPM_BUILD_ROOT/%{python_sitearch}/monitor/$file
 #done
 #for file in __init__.py database.py config.py ; do 
 #      install -D -m 644 monitor/$file $RPM_BUILD_ROOT/%{python_sitearch}/monitor/$file
 #done
+rsync -a pcucontrol/ $RPM_BUILD_ROOT/%{python_sitearch}/pcucontrol/
 install -D -m 755 threadpool.py $RPM_BUILD_ROOT/%{python_sitearch}/threadpool.py
 
 touch $RPM_BUILD_ROOT/var/www/cgi-bin/monitor/monitorconfig.php
 chmod 777 $RPM_BUILD_ROOT/var/www/cgi-bin/monitor/monitorconfig.php
 
 install -D -m 755 threadpool.py $RPM_BUILD_ROOT/%{python_sitearch}/threadpool.py
 
 touch $RPM_BUILD_ROOT/var/www/cgi-bin/monitor/monitorconfig.php
 chmod 777 $RPM_BUILD_ROOT/var/www/cgi-bin/monitor/monitorconfig.php
 
-install -D -m 755 monitor-default.conf $RPM_BUILD_ROOT/etc/monitor.conf
-cp $RPM_BUILD_ROOT/usr/share/%{name}/monitorconfig-default.py $RPM_BUILD_ROOT/usr/share/%{name}/monitorconfig.py
+#install -D -m 755 monitor-default.conf $RPM_BUILD_ROOT/etc/monitor.conf
+#cp $RPM_BUILD_ROOT/usr/share/%{name}/monitorconfig-default.py $RPM_BUILD_ROOT/usr/share/%{name}/monitorconfig.py
+
+#################### RunlevelAgent
+install -D -m 755 RunlevelAgent.py $RPM_BUILD_ROOT/usr/bin/RunlevelAgent.py
+install -D -m 755 monitor-runlevelagent.init $RPM_BUILD_ROOT/%{_initrddir}/monitor-runlevelagent
+
+mkdir -p $RPM_BUILD_ROOT/var/log
+touch $RPM_BUILD_ROOT/var/log/server-deps.log
+
 
 %clean
 rm -rf $RPM_BUILD_ROOT
 
 
 %clean
 rm -rf $RPM_BUILD_ROOT
 
+%files server-deps
+/var/log/server-deps.log
+
 %files server
 %defattr(-,root,root)
 %files server
 %defattr(-,root,root)
-%config /usr/share/%{name}/monitorconfig.py
-%config /etc/monitor.conf
+#%config /usr/share/%{name}/monitorconfig.py
+#%config /etc/monitor.conf
 /usr/share/%{name}
 /var/lib/%{name}
 /var/www/cgi-bin/monitor
 /usr/share/%{name}
 /var/lib/%{name}
 /var/www/cgi-bin/monitor
@@ -136,21 +199,69 @@ rm -rf $RPM_BUILD_ROOT
 %{python_sitearch}/threadpool.pyc
 %{python_sitearch}/threadpool.pyo
 %{python_sitearch}/monitor
 %{python_sitearch}/threadpool.pyc
 %{python_sitearch}/threadpool.pyo
 %{python_sitearch}/monitor
+%{_sysconfdir}/plc.d/monitor
+%{_sysconfdir}/plc.d/monitor.functions
+%{_sysconfdir}/plc.d/zabbix
 
 %files client
 %defattr(-,root,root)
 %{_initrddir}/monitor
 %{_sysconfdir}/cron.d/monitor
 
 
 %files client
 %defattr(-,root,root)
 %{_initrddir}/monitor
 %{_sysconfdir}/cron.d/monitor
 
+%files pcucontrol
+%{python_sitearch}/pcucontrol
+
+%files runlevelagent
+/usr/bin/RunlevelAgent.py
+/usr/bin/RunlevelAgent.pyo
+/usr/bin/RunlevelAgent.pyc
+/%{_initrddir}/monitor-runlevelagent
+
+%post server-deps
+#easy_install --build-directory /var/tmp -UZ ElementTree
+##easy_install --build-directory /var/tmp -UZ http://pypi.python.org/packages/2.5/E/Extremes/Extremes-1.1-py2.5.egg
+
+
+## TODO: something is bad wrong with this approach.
+easy_install --build-directory /var/tmp -UZ http://files.turbogears.org/eggs/TurboGears-1.0.7-py2.5.egg
+easy_install --build-directory /var/tmp -UZ http://pypi.python.org/packages/source/S/SQLAlchemy/SQLAlchemy-0.5.3.tar.gz
+easy_install --build-directory /var/tmp -UZ Elixir
+
+# crazy openssl libs for racadm binary
+ln -s /lib/libssl.so.0.9.8b /usr/lib/libssl.so.2
+mkdir /usr/share/monitor/.ssh
+chmod 700 /usr/share/monitor/.ssh
+
+if grep 'pam_loginuid.so' /etc/pam.d/crond ; then
+    sed -i -e 's/^session    required   pam_loginuid.so/#session    required   pam_loginuid.so/g' /etc/pam.d/crond
+fi
+# NOTE: add the default xml stuff if it's not already in the default xml config.
+if ! grep '<category id="plc_monitor">' /etc/planetlab/default_config.xml ; then 
+    sed -i 's|<category id="plc_net">| <category id="plc_monitor">\n <name>Monitor Service Configuration</name>\n <description>Monitor</description>\n <variablelist>\n <variable id="enabled" type="boolean">\n <name>Enabled</name>\n <value>true</value>\n <description>Enable on this machine.</description>\n </variable>\n <variable id="email">\n <value></value>\n </variable>\n <variable id="dbpassword">\n <value></value>\n </variable>\n <variable id="host" type="hostname">\n <name>Hostname</name>\n <value>pl-virtual-06.cs.princeton.edu</value>\n <description>The fully qualified hostname.</description>\n </variable>\n <variable id="ip" type="ip">\n <name>IP Address</name>\n <value/>\n <description>The IP address of the monitor server.</description>\n </variable>\n </variablelist>\n </category>\n <category id="plc_net">|' /etc/planetlab/default_config.xml
+fi
+if ! grep '<category id="plc_zabbix">' /etc/planetlab/default_config.xml ; then 
+    sed -i 's|<category id="plc_net">| <category id="plc_zabbix">\n <name>Zabbix Configuration</name>\n <description>Zabbix</description>\n <variablelist>\n <variable id="enabled" type="boolean">\n <name>Enabled</name>\n <value>false</value>\n <description>Enable on this machine.</description>\n </variable>\n <variable id="host" type="hostname">\n <name>Hostname</name>\n <value>localhost.localdomain</value>\n <description>The fully qualified hostname.</description>\n </variable>\n <variable id="ip" type="ip">\n <name>IP Address</name>\n <value/>\n <description>The IP address of the Zabbix server.</description>\n </variable>\n </variablelist>\n </category>\n <category id="plc_net">|' /etc/planetlab/default_config.xml
+fi
+
+# NOTE: enable monitor by default, since we're installing it.
+plc-config --save /etc/planetlab/default_config.xml \
+                       --category plc_monitor --variable enabled --value true
+
 %post server
 # TODO: this will be nice when we have a web-based service running., such as
 #              an API server or so on.
 # TODO: create real monitorconfig.py from monitorconfig-default.py
 # TODO: create monitorconfig.php using phpconfig.py 
 %post server
 # TODO: this will be nice when we have a web-based service running., such as
 #              an API server or so on.
 # TODO: create real monitorconfig.py from monitorconfig-default.py
 # TODO: create monitorconfig.php using phpconfig.py 
-# TODO: create symlink in /var/lib/monitor-server for chroot environments
+# TODO: create symlink in /var/lib/monitor for chroot environments
 # TODO: update the content of automate_pl03.sh 
 # TODO: Use the installed version of bootcd to create custom boot images. ( or, use the api now).
 
 # TODO: update the content of automate_pl03.sh 
 # TODO: Use the installed version of bootcd to create custom boot images. ( or, use the api now).
 
+# NOTE: generate the python defines from zabbix include files.
+#php /usr/share/%{name}/zabbix/getdefines.php > %{python_sitearch}/monitor/database/zabbixapi/defines.py
+
+# apply patches to zabbix
+#patch -d /var/www/html/zabbix/ -p0 < /usr/share/%{name}/zabbix/zabbix-auto-login.diff
+
 #chkconfig --add monitor-server
 #chkconfig monitor-server on
 
 #chkconfig --add monitor-server
 #chkconfig monitor-server on
 
@@ -158,7 +269,99 @@ rm -rf $RPM_BUILD_ROOT
 chkconfig --add monitor
 chkconfig monitor on
 
 chkconfig --add monitor
 chkconfig monitor on
 
+%post runlevelagent
+chkconfig --add monitor-runlevelagent
+chkconfig monitor-runlevelagent on
+if [ "$PL_BOOTCD" != "1" ] ; then
+       service monitor-runlevelagent restart
+fi
+
+
 %changelog
 %changelog
+* Sun Jun 28 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-18
+- bug fixes.
+- improved templates and views
+- cleaned controller code for web
+- added IPMI requirement to pcucontrol package.
+
+* Thu Jun 18 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-17
+- added bootmanager log links
+- addressed root cause of IntegrityErrors ; big deal
+- adjusted templates to accomodate fix for IntegrityErrors
+- added session.flush() to bootman.py to write out ActionsRecords
+- fixed policy to either pause penalties or apply them ; not both.
+
+-* Wed Jun 17 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-16
+-- Added Rpyc from 1.0 branch.
+-- add pcuhistory
+-- add setup-agent for password protected keys.
+-- other minor improvements.
+
+* Wed Jun 17 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-15
+- automate install
+- auto-close tickets
+
+* Fri Jun 12 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-14
+- update web
+- update policy
+- added statistics dir
+
+* Mon Jun 08 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-13
+- remove plccache from controllers, all lookups from db.
+- reformat emailTxt messags
+- updated bootstates in bootman.py
+
+* Tue Jun 02 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-12
+- tag of latest changes.
+- need to test end to end.
+
+* Sat May 30 2009 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - Monitor-3.0-11
+- big merge from the 2.0 branch
+
+* Tue May 26 2009 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - Monitor-3.0-10
+- minor improvements in rendering with sortable tables
+
+* Tue May 19 2009 Baris Metin <Talip-Baris.Metin@sophia.inria.fr> - Monitor-3.0-9
+
+* Fri May 15 2009 Thierry Parmentelat <thierry.parmentelat@sophia.inria.fr> - Monitor-3.0-8
+- first draft with sortable tables + checkpoint
+
+* Fri May 15 2009 Baris Metin <tmetin@sophia.inria.fr>
+- use plekit tables from plewww.
+- depend on plewww-plekit
+
+* Tue May 12 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-7
+- make docs a noop
+- fix for package name dependency
+- correct docs
+
+* Mon May 04 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-6
+- add improved docs to the latest build and tag.
+
+* Mon May 04 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-5
+- add documentation hooks for adding in-line docs like NM and PLCAPI
+
+* Fri May 01 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-4
+- Rough pass over monitor-3.0 to allow it to work with 4.3 API.
+- replaced GetNodeNetworks, nodeinterface_ids and using new bootstates
+- 'safeboot', 'failboot', 'reinstall', etc.
+
+* Tue Apr 28 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-3
+- same as 2.0-12 tag.
+
+* Mon Apr 27 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-2
+- merge from 2.0, remove more zabbix code, simplify install, etc.
+
+* Thu Apr 16 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-3.0-1
+- major merge from 2.0 branch.
+- ready to be updated with 4.3 and web changes.
+
+* Fri Feb 27 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-2.0-1
+- preparing to make a 2.0 branch for monitor.
+
+* Mon Jan 05 2009 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-2.0-0
+- new changes are significantly different, that I'm upping the number for clarity.
+
 * Wed Sep 24 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-1.0-8
 - These are all changes in the latest Monitor code.  I will branch this version
 - next, before making additional large changes.
 * Wed Sep 24 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - Monitor-1.0-8
 - These are all changes in the latest Monitor code.  I will branch this version
 - next, before making additional large changes.
@@ -190,4 +393,4 @@ chkconfig monitor on
 * Mon Apr 07 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - monitor-1.0-0
 - initial addition.
 
 * Mon Apr 07 2008 Stephen Soltesz <soltesz@cs.princeton.edu> - monitor-1.0-0
 - initial addition.
 
-%define module_current_branch 1.0
+%define module_current_branch 2.0