Inhaltsverzeichnis
VM's laden ihre HW-Infos beim Start in die DB
Damit man den Überblich über die eingesetzte HardWare behält, ist es sinnvoll, dass die openQRM-Client's sich beim Start vollkommen selbstständig mit ihren entsprechenden Daten in eine DB eintragen.
Dazu sind verschiedene Vorbereitungen nötig.
Archiv der Scripte und modifizierten PHP-Dateien
# tar tvf /root/openqrm_hw_cgibin.tar -rwxr-xr-x root/root 5562 2010-07-28 10:56 opt/bin/hardwareinfos_von_local-openqrm2db.sh -rwxr-xr-x root/root 2905 2010-07-23 18:50 usr/lib/cgi-bin/hwi2db.cgi -rwxr-xr-x root/root 1723 2010-07-23 18:52 usr/lib/cgi-bin/store.cgi -rw-r--r-- root/root 127 2010-07-16 11:11 var/www/store.php -rw-r--r-- root/src 5126 2010-07-08 12:09 usr/src/openqrm/trunk/src/web/base/top.php -rw-r--r-- root/root 5337 2010-07-27 14:34 usr/share/openqrm/web/base/top.php -rw-r--r-- root/root 2842 2010-07-23 18:51 opt/bin/hwi2db.sh -rw-r--r-- root/root 4871 2010-07-05 16:17 var/www/openqrm/base/server/appliance/appliance-hw_db.php -rw-r--r-- root/root 3347 2010-04-28 13:00 var/www/openqrm/base/server/appliance/appliance-hw_akt.php -rw-r--r-- root/root 3742 2010-06-29 14:26 usr/share/openqrm/web/boot-service/hardwareinfos_zum_server_schicken.sh -rw-r--r-- root/root 2115 2010-07-27 17:15 opt/etc/hardwareinfos.cfg -rwxr-xr-x root/root 14047 2010-07-28 10:53 usr/lib/cgi-bin/remconstab_aendern.cgi
Scripte und modifizierte PHP-Dateien
/usr/lib/cgi-bin/remconstab_aendern.cgi
#!/bin/sh
. /opt/etc/hardwareinfos.cfg
DATENDATEI="$(mktemp /tmp/remconstab.XXXXXXXXXXXX)"
### POST-Daten werden in eine Datei geschrieben
echo "$(dd bs=1 count=${CONTENT_LENGTH} 2> /dev/null | tr -s '&' '\n')" | tr -d '"' | awk '{print tolower($0)}' | sed -e 's#%3a#:#g' > ${DATENDATEI} 2>&1
. ${DATENDATEI}
### GET
AKTION="$(echo "${QUERY_STRING}" | awk -F'=' '{print $1}')"
WERT="$(echo "${QUERY_STRING}" | awk -F'=' '{print $2}')"
### Achtung!
# "action" englisch und klein geschrieben, ist die Variable aus dem POST-Datenstrom;
# "AKTION" deutsch und groß geschrieben, ist aus der GET-Zeile
echo 'Content-type: text/html
<link rel="stylesheet" type="text/css" href="/openqrm/base/css/htmlobject.css" />
<link rel="stylesheet" type="text/css" href="/cloud.css" />
<script type="text/javascript">
function currenttabToggle(id) {
document.getElementById(id).style.display = 'block';
document.getElementById('tab_' + id).className = 'current';
}
</script>
'
if [ "${AKTION}" = "anlegen" ] ; then
echo '
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">IP-Adresse der Remote-Console</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/remconstab_aendern.cgi">alle Remote IP-Adressen anzeigen</a></b>
<br>
<br>
<h1><img border=0 src="/cloudipgroups.png">eine neue Remote IP-Adresse eintragen</h1>
<br>
<form action=/cgi-bin/remconstab_aendern.cgi method=post>
<div class="htmlobject_box input" id="htmlobject_box_board_ip">
<div class="left"><label for="p4c443ec95a81b">board_ip</label></div>
<div class="right"><input title="Name" id="p4c443ec95a81b" maxlength="20" name="board_ip" value="[IP-Adresse]" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<div class="htmlobject_box input" id="htmlobject_box_mac1">
<div class="left"><label for="p4c443ec95a81b">mac1</label></div>
<div class="right"><input title="Name" id="p4c443ec95a81b" maxlength="20" name="mac1" value="[MAC-Adresse]" type="text"></div>
<div style="line-height:0px;height:0px;clear:both;" class="floatbreaker"> </div>
</div>
<input type=hidden name="action" value="eintragen">
<br>
<input type=submit value="eintragen">
<br>
</form>
<div style="line-height:0px;clear:both;"> </div>
</div>
'
elif [ "${action}" = "eintragen" ] ; then
### der "action"-Eintrag wird entfernt
sed -i -e 's/action=eintragen//' ${DATENDATEI}
echo '
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">IP-Adresse der Remote-Console</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/remconstab_aendern.cgi">alle IP-Adressen der Remote-Consolen anzeigen</a></b>
<br>
<br>
'
### die neue Gruppe wird erstelt
echo "INSERT INTO ${REMCONSTAB} ($(cat ${DATENDATEI}|awk -F'=' '{print $1}'|tr -s '\n' ','|sed 's/,$//')) VALUES ($(cat ${DATENDATEI} | awk -F'=' '{print $2}'|sed "s/.*/'&'/"|tr -s '\n' ','|sed "s/,'',$//"))" \
| mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
echo "
SELECT *
FROM ${REMCONSTAB}
WHERE board_ip='${board_ip}'
;" \
| mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
elif [ "${AKTION}" = "aendern" ] ; then
echo '
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">IP-Adresse der Remote-Console</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/remconstab_aendern.cgi">alle IP-Adressen der Remote-Consolen anzeigen</a></b>
<br>
<br>
'
echo "
<h1><img border=0 src='/cloudipgroups.png'>Datensatz zur IP-Adresse '${WERT}' Ändern</h1>
<br>
<form action=/cgi-bin/remconstab_aendern.cgi method=post>
"
echo "
<input type=hidden name=\"board_ip\" value=\"${WERT}\">
"
echo "
SELECT *
FROM ${REMCONSTAB}
WHERE board_ip='${WERT}'
;" \
| mysql -t -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
| egrep -v '[\+\|]---------' \
| tr -s '\t' ' ' \
| sed -e 's#| |#| "" |#g' -e 's#| |#| "" |#g' \
| nl \
| while read LFDNR ZEILE
do
if [ "${LFDNR}" = "1" ] ; then
KOPF="$(echo "${ZEILE}" | sed 's#|#\n#g' | egrep -v '^$' | awk '{print $1}')"
else
DATEN="$(echo "${ZEILE}" | sed 's#|#\n#g' | egrep -v '^$' | awk '{print $1}')"
echo "${KOPF}" | nl | fgrep -v board_ip | while read SPALTENNR SPALTENNAME
do
SPALTENWERT="$(echo "${DATEN}" | head -n${SPALTENNR} | tail -n1 | tr -d '"')"
if [ "${SPALTENNAME}" = "board_ip" ] ; then
echo "<input type=\"hidden\" name=\"${SPALTENNAME}\" value=\"${SPALTENWERT}\">"
else
echo "
<div class=\"htmlobject_box input\" id=\"htmlobject_box_${SPALTENNAME}\">
<div class=\"left\"><label for=\"p4c443ec95a81b\">${SPALTENNAME}</label></div>
<div class=\"right\"><input title=\"Name\" id=\"p4c443ec95a81b\" maxlength=\"20\" name=\"${SPALTENNAME}\" value=\"${SPALTENWERT}\" type=\"text\"></div>
<div style=\"line-height:0px;height:0px;clear:both;\" class=\"floatbreaker\"> </div>
</div>
"
fi
done
fi
done
echo '
<input type=hidden name="action" value="geaendert">
<br>
<input type=submit value="ändern">
<br>
</form>
<div style="line-height:0px;clear:both;"> </div>
</div>
'
elif [ "${action}" = "geaendert" ] ; then
sed -i -e 's#action=geaendert##' ${DATENDATEI}
echo '
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">IP-Adresse der Remote-Console</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/remconstab_aendern.cgi">IP-Adressen der Remote-Consolen anzeigen</a></b>
<br>
'
echo "UPDATE ${REMCONSTAB} SET $(cat ${DATENDATEI} | fgrep -v board_ip | sed -e "s#=#='#" -e "s#.*#&'#" -e "s#^'##" | tr -s '\n' ',' | sed -e 's#,$##') WHERE board_ip='${board_ip}';" \
| mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
echo "<BR>"
echo "SELECT * FROM ${REMCONSTAB} WHERE board_ip='${WERT}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
| tr -s '\n' ' ' \
| sed -e 's#> <#><#g' -e 's#></#> </#g' -e 's#><#>\n<#g' -e 's#</TD> </TR>#</TD>\n</TR>#g' | while read HTMLZEILE
do
SPALTENANFANG="$(echo "${HTMLZEILE}" | egrep '^<TR>$')"
if [ -n "${SPALTENANFANG}" ] ; then
SPALTENZAHL="0"
fi
SPALTENZAHL="$((${SPALTENZAHL}+1))"
TH="$(echo "${HTMLZEILE}" | egrep '^<TH>')"
if [ -z "${TH}" -a "${SPALTENZAHL}" = "2" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD>${ZELLENWERT} <a href=/cgi-bin/remconstab_aendern.cgi?loeschen=${ZELLENWERT}>loeschen</a> <a href=/cgi-bin/remconstab_aendern.cgi?aendern=${ZELLENWERT}>aendern</a></TD>"
else
echo "${HTMLZEILE}"
fi
done
echo "<BR><b>GEÄNDERT<B><BR>"
echo "SELECT * FROM ${REMCONSTAB} WHERE board_ip='${board_ip}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
elif [ "${AKTION}" = "loeschen" ] ; then
echo '
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">Remote IP-Adresse gelöscht</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/remconstab_aendern.cgi">alle Remote IP-Adressen anzeigen</a></b>
<br>
<br>
'
echo "<BR>"
echo "SELECT * FROM ${REMCONSTAB} WHERE board_ip='${WERT}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
echo "<b><a href="/cgi-bin/remconstab_aendern.cgi?geloescht=${WERT}">Remote IP-Adresse ${WERT} entgültig löschen</a></b>"
elif [ "${AKTION}" = "geloescht" ] ; then
echo '
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">Remote IP-Adresse gelöscht</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/remconstab_aendern.cgi">alle Remote IP-Adressen anzeigen</a></b>
<br>
<br>
'
echo "SELECT * FROM ${REMCONSTAB} WHERE board_ip='${WERT}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
echo "<BR>"
echo "DELETE FROM ${REMCONSTAB} WHERE board_ip='${WERT}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
echo "<BR><b>GELÖSCHT<B><BR>"
echo "SELECT * FROM ${REMCONSTAB} WHERE board_ip='${WERT}';" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
else
echo '
<div class="htmlobject_tabs">
<ul>
<li id="tab_currenttabtab0" class="current"><span><a href="" onclick="this.blur();">IP-Adressen der Remote-Consolen</a></span></li>
</ul>
</div>
<div style="line-height:0px;clear:both;"> </div>
<div class="htmlobject_tab_box" id="currenttabtab0"><style>
.htmlobject_tab_box {
}
</style>
<b><a href="/cgi-bin/remconstab_aendern.cgi?anlegen=neu">neue Remote IP-Adresse eintragen</a></b>
<br>
<br>
'
echo "
SELECT *
FROM ${REMCONSTAB}
ORDER BY ${REMCONSORDER} ASC
;" \
| mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} \
| tr -s '\n' ' ' \
| sed -e 's#> <#><#g' -e 's#></#> </#g' -e 's#><#>\n<#g' -e 's#</TD> </TR>#</TD>\n</TR>#g' | while read HTMLZEILE
do
SPALTENANFANG="$(echo "${HTMLZEILE}" | egrep '^<TR>$')"
if [ -n "${SPALTENANFANG}" ] ; then
SPALTENZAHL="0"
fi
SPALTENZAHL="$((${SPALTENZAHL}+1))"
TH="$(echo "${HTMLZEILE}" | egrep '^<TH>')"
if [ -z "${TH}" -a "${SPALTENZAHL}" = "2" ] ; then
ZELLENWERT="$(echo "${HTMLZEILE}" | sed -e 's#<TD>##' -e 's#</TD>##')"
echo "<TD><a href=/cgi-bin/remconstab_aendern.cgi?loeschen=${ZELLENWERT}>loeschen</a> <a href=/cgi-bin/remconstab_aendern.cgi?aendern=${ZELLENWERT}>aendern</a> ${ZELLENWERT}</TD>"
else
echo "${HTMLZEILE}"
fi
done
fi
rm -f ${DATENDATEI} ${ZAHLEN1} ${ZAHLEN2}
echo "<BR>
<BR>
</div>
"
echo '
</body>
</html>
'
/opt/etc/hardwareinfos.cfg
. /usr/share/openqrm/etc/openqrm-server.conf
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HWINFOTAB="hardware"
REMCONSTAB="remconsole"
REMCONSORDER="INET_ATON(board_ip)"
#------------------------------------------------------------------------------#
################################################################################
# echo "DROP TABLE hardware;" | mysql -N -h localhost -uroot -p openqrm
# ./hardwareinfos2db.sh 192.168.3.70
# echo "SELECT * FROM hardware;" | mysql -h localhost -u root -p openqrm
# echo "SELECT hostname,bios_release_date,bios_product_name,mac,cpu_anzahl,bus,htt,cpu_family,cpu_manufacturer,cpu_signature FROM hardware;" | mysql -t -h localhost -u root -p openqrm
################################################################################
echo "
CREATE DATABASE IF NOT EXISTS ${OPENQRM_DATABASE_NAME};
USE ${OPENQRM_DATABASE_NAME};
CREATE TABLE IF NOT EXISTS ${REMCONSTAB} (
board_ip VARCHAR(16),
mac1 VARCHAR(18),
PRIMARY KEY (board_ip)
) TYPE=MyISAM;
CREATE TABLE IF NOT EXISTS ${HWINFOTAB} (
rem_cons_ip VARCHAR(16) default NULL,
timestamp DATETIME,
resource_id SMALLINT,
resource_ip VARCHAR(32) default NULL,
hostname VARCHAR(254) default NULL,
appliance_id SMALLINT,
ip4 VARCHAR(4096) default NULL,
mac VARCHAR(2048) default NULL,
netif VARCHAR(4096) default NULL,
bios_release_date VARCHAR(256) default NULL,
bios_manufacturer VARCHAR(256) default NULL,
bios_product_name VARCHAR(256) default NULL,
bios_serial_number VARCHAR(256) default NULL,
cpu_anzahl SMALLINT,
bus VARCHAR(8) default NULL,
vm VARCHAR(8) default NULL,
htt SMALLINT,
cpu_family VARCHAR(256) default NULL,
cpu_manufacturer VARCHAR(256) default NULL,
cpu_id VARCHAR(256) default NULL,
cpu_signature VARCHAR(256) default NULL,
cpu_core_count SMALLINT,
cpu_core_enabled SMALLINT,
memtotal VARCHAR(256) default NULL,
hdd VARCHAR(256) default NULL,
PRIMARY KEY (resource_id),
KEY (bios_serial_number),
KEY mac (mac)
) TYPE=MyISAM;
" | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD}
#------------------------------------------------------------------------------#
/opt/bin/hardwareinfos_von_local-openqrm2db.sh
#!/bin/bash
#------------------------------------------------------------------------------#
#
# 2010-04-14: erstellt
# 2010-04-28: modifiziert
#
#------------------------------------------------------------------------------#
### VARIABLEN werden gesammelt bzw. gesetzt
if [ -r /usr/share/openqrm/etc/openqrm-server.conf ] ; then
. /opt/etc/hardwareinfos.cfg
export $(echo "SELECT appliance_id FROM appliance_info,resource_info WHERE appliance_resources=resource_id AND resource_id="0" LIMIT 1;" | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | tr -s '\n' '=' | sed 's/=$/\n/') #| awk -F'=' '{print $1"=\""$2"\""}')
export $(echo "SELECT resource_id FROM appliance_info,resource_info WHERE appliance_resources=resource_id AND resource_id="0" LIMIT 1;" | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | tr -s '\n' '=' | sed 's/=$/\n/') #| awk -F'=' '{print $1"=\""$2"\""}')
export $(echo "SELECT resource_ip FROM appliance_info,resource_info WHERE appliance_resources=resource_id AND resource_id="0" LIMIT 1;" | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | tr -s '\n' '=' | sed 's/=$/\n/') #| awk -F'=' '{print $1"=\""$2"\""}')
fi
if [ -r /var/openqrm/openqrm-resource.conf ] ; then
. /var/openqrm/openqrm-resource.conf
fi
HARDWAREINDEX="/var/tmp/$(cd /var/tmp/ && mktemp XXXXXXXXXXXXXXXX)"
DSPALTEN="/var/tmp/$(cd /var/tmp/ && mktemp XXXXXXXXXXXXXXXX)"
DWERTE="/var/tmp/$(cd /var/tmp/ && mktemp XXXXXXXXXXXXXXXX)"
#------------------------------------------------------------------------------#
PARAMETER="$(echo "$(
# TIMESTAMP
echo "timestamp=$(date +'%Y-%m-%d %H:%M:%S')"
# RESOURCEID
echo "resource_id=${resource_id}"
# RESOURCEIP
echo "resource_ip=${resource_ip}"
# Hostname
echo "hostname=$(hostname -f)"
# APPLIANCEID
echo "appliance_id=${appliance_id}"
# IP-Adressen
for i in $(ls /sys/class/net/ | egrep '.+[0-9]$');do ip -f inet addr show dev ${i} | egrep inet | egrep -v ':0$' | awk -v geraet=${i} '{print "IP4="geraet" "$2}';done
# MAC-Adressen
for i in $(find /sys/ -type f | fgrep 'address');do NETIF="$(echo "${i}"|awk -F'/' '{print $(NF-1)}')";cat ${i} | awk -v netif="${NETIF}" '{print "mac="netif,$1}';done
# Netzwerkgeschwindigkeiten
for i in $(ls /sys/class/net/ | egrep '.+[0-9]$');do ethtool ${i} | awk -v netif="${i}" '/[Ss]peed:/ {print "netif="netif,$NF}';done
# BIOS-Datum
dmidecode -t 0 | fgrep -i 'Release Date:' | sed -e 's/^[ \t]*/BIOS /' -e 's/: /=/'
# System-Infos
dmidecode -t 1 | egrep -i 'Manufacturer:|Product Name:|Serial Number:' | sed -e 's/^[ \t]*/BIOS /' -e 's/: /=/'
# Anzahl der CPUs
dmidecode -t processor | egrep -i 'Socket Designation:' | wc -l | awk '{print "CPU Anzahl="$1}'
# Bus: 64Bit oder nicht
egrep ^flags /proc/cpuinfo | tr -s ' ' '
' | egrep ^lm | uniq | awk '{print "bus="$1}'
# Hardwarevirtualisierung
egrep ^flags /proc/cpuinfo | tr -s ' ' '
' | egrep 'vmx|svm' | uniq | awk '{print "vm="$1}'
# Hyper-Threading oder nicht
awk -v alt='^$' -v neu='#' '{sub(alt, neu)} /physical id|core id|#/ && /0$|#/ {print $NF}' /proc/cpuinfo | uniq -c | awk '!/#|1 0/' | wc -l | awk '{$1 > 1 ; print "htt="$1}'
# CPU-Infos
dmidecode -t processor | sed -e '1,/^$/ d' -e '/^$/ q' -e 's/^ /CPU /' -e 's/^\t/CPU /' -e 's/: /=/' | egrep -i 'Family=|Manufacturer=|ID=|Signature=|Core Count=|Core Enabled='
# Hauptspeichergröße
egrep ^MemTotal /proc/meminfo | sed 's/:[ ]*/=/'
# Festplatten
fgrep -H 0 /sys/class/block/*/removable | egrep -v 'loop|ram|dm-' | awk -F'/' '{print $5}' | while read DEV;do echo "HDD=${DEV} $(cat /sys/class/block/${DEV}/size | awk -F'/' '{print $1/2048}') MB";done
)" | awk -F'=' '{wert=$2 ; gsub(" ", "_") ; variable=tolower($1) ; print variable"="wert}' | tr -d '"' | awk -F'=' '{print $1"=\""$2"\""}')"
. ${HARDWAREINDEX} 2>/dev/null
echo "${PARAMETER}" | tr -d '"' > ${HARDWAREINDEX}
#------------------------------------------------------------------------------#
# Tabelleninhalt nur ändern, wenn auch neue Daten da sind
if [ -s "${HARDWAREINDEX}" -a -n "${resource_id}" ] ; then
#------------------------------------------------------------------------------#
### Hardwareinfos werden aufbereitet
cat ${HARDWAREINDEX} | awk -F'=' '{print $1}' | sort | uniq | while read SPALTE
do
WERTE="$(cat ${HARDWAREINDEX} | fgrep "${SPALTE}=" | awk -F'=' '{print $2}' | tr -s '\n' '; ')"
echo "${SPALTE}" >> ${DSPALTEN}
echo "'${WERTE}'" >> ${DWERTE}
done
#------------------------------------------------------------------------------#
### Hardwareinfos werden in die DB geschrieben / ersetzt
WHCL="$(echo "SELECT mac FROM ${HWINFOTAB} WHERE resource_id=${resource_id};" | mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | tail -n1 | tr ';' '\n' | egrep -v '^[ \t]*$|00:00:00:00:00:00|0x122100' | awk '{print $NF}' | sort | uniq | tr -s '\n' ';' | sed -e "s/;/' OR mac1='/g" -e "s/ OR mac1='$//" -e "s/.*/mac1='&/")"
REMIP="'$(echo "SELECT board_ip FROM ${REMCONSTAB},${HWINFOTAB} WHERE ${WHCL} LIMIT 1;" | mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})'"
echo "DELETE FROM ${HWINFOTAB} WHERE resource_id=${resource_id}; INSERT INTO ${HWINFOTAB} (rem_cons_ip,$(cat ${DSPALTEN}|tr -s '\n' ','|sed 's/,$//')) VALUES (${REMIP},$(cat ${DWERTE}|tr -s '\n' ','|sed 's/,$//'))" | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
fi
#------------------------------------------------------------------------------#
# zum Schluß löschen
#mv -f ${HARDWAREINDEX} /tmp/HARDWAREINDEX
#mv -f ${DSPALTEN} /tmp/SPALTEN
#mv -f ${DWERTE} /tmp/WERTE
rm -f ${HARDWAREINDEX} ${DSPALTEN} ${DWERTE}
/usr/lib/cgi-bin/hwi2db.cgi
#!/bin/sh
#------------------------------------------------------------------------------#
# Dieses Script wird von dem VM-Gast
# aufgerufen (hardwareinfos_zum_server_schicken.sh).
#
# 2010-04-14: erstellt
# 2010-04-26: modifiziert
#
#------------------------------------------------------------------------------#
### VARIABLEN werden gesammelt bzw. gesetzt
if [ -r /usr/share/openqrm/etc/openqrm-server.conf ] ; then
. /opt/etc/hardwareinfos.cfg
else
exit
fi
HARDWAREINDEX="/var/tmp/$(cd /var/tmp/ && mktemp XXXXXXXXXXXXXXXX)"
DSPALTEN="/var/tmp/$(cd /var/tmp/ && mktemp XXXXXXXXXXXXXXXX)"
DWERTE="/var/tmp/$(cd /var/tmp/ && mktemp XXXXXXXXXXXXXXXX)"
#------------------------------------------------------------------------------#
### Hardwareinfos umgeformt
#HARDWAREINDEX="$(dd bs=1 count=${CONTENT_LENGTH} | sed 's/ *$//g' 2> /dev/null)"
#echo "${HARDWAREINDEX}" > ${HARDWAREINDEX}
dd bs=1 count=${CONTENT_LENGTH} | sed 's/ *$//g' > ${HARDWAREINDEX} 2> /dev/null
. ${HARDWAREINDEX} 2>/dev/null
#------------------------------------------------------------------------------#
# Tabelleninhalt nur ändern, wenn auch neue Daten da sind
if [ -s "${HARDWAREINDEX}" -a -n "${resource_id}" ] ; then
#------------------------------------------------------------------------------#
### Hardwareinfos werden aufbereitet
cat ${HARDWAREINDEX} | awk -F'=' '{print $1}' | sort | uniq | while read SPALTE
do
WERTE="$(cat ${HARDWAREINDEX} | fgrep "${SPALTE}=" | awk -F'=' '{print $2}' | tr -s '\n' '; ')"
echo "${SPALTE}" >> ${DSPALTEN}
echo "'${WERTE}'" >> ${DWERTE}
done
#------------------------------------------------------------------------------#
### Hardwareinfos werden in die DB geschrieben / ersetzt
WHCL="$(echo "SELECT mac FROM ${HWINFOTAB} WHERE resource_id=${resource_id};" | mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | tail -n1 | tr ';' '\n' | egrep -v '^[ \t]*$|00:00:00:00:00:00|0x122100' | awk '{print $NF}' | sort | uniq | tr -s '\n' ';' | sed -e "s/;/' OR mac1='/g" -e "s/ OR mac1='$//" -e "s/.*/mac1='&/")"
REMIP="'$(echo "SELECT board_ip FROM ${REMCONSTAB},${HWINFOTAB} WHERE ${WHCL} LIMIT 1;" | mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})'"
echo "DELETE FROM ${HWINFOTAB} WHERE resource_id=${resource_id}; INSERT INTO ${HWINFOTAB} (rem_cons_ip,$(cat ${DSPALTEN}|tr -s '\n' ','|sed 's/,$//')) VALUES (${REMIP},$(cat ${DWERTE}|tr -s '\n' ','|sed 's/,$//'))" | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
fi
#------------------------------------------------------------------------------#
# zum Schluß löschen
#mv -f ${HARDWAREINDEX} /tmp/HARDWAREINDEX
#mv -f ${DSPALTEN} /tmp/SPALTEN
#mv -f ${DWERTE} /tmp/WERTE
rm -f ${HARDWAREINDEX} ${DSPALTEN} ${DWERTE}
/opt/bin/hwi2db.sh
#!/bin/sh
#------------------------------------------------------------------------------#
# Dieses Script wird von dem Script
# /usr/share/openqrm/web/base/server/appliance/appliance-info.php
# aufgerufen.
#
# 2010-04-14: erstellt
# 2010-04-27: modifiziert
#
#------------------------------------------------------------------------------#
### RESOURCEIP-Check
if [ -z "${2}" ] ; then
echo "Sie müssen die Resource-ID des Zielrechners als Parameter mit übergeben!"
echo "${0} [resource_id] [appliance_id]"
exit 1
fi
#------------------------------------------------------------------------------#
### VARIABLEN werden gesammelt bzw. gesetzt
. /opt/etc/hardwareinfos.cfg
#------------------------------------------------------------------------------#
# Kommandodateien erstellen
TIMESTAMP="$(date +%s)"
TEMP1="$(cd /var/tmp/ && mktemp XXXXXXXXXXXXXXXXXXX)"
TEMP2="$(cd /var/tmp/ && mktemp XXXXXXXXXXXXXXXXXXX)"
CMD1="${OPENQRM_SERVER_BASE_DIR}/openqrm/var/spool/openqrm-queue.${TIMESTAMP}_1_${TEMP1}"
CMD2="${OPENQRM_SERVER_BASE_DIR}/openqrm/var/spool/openqrm-queue.${TIMESTAMP}_2_${TEMP2}"
chmod 0644 /var/tmp/${TEMP1} /var/tmp/${TEMP2}
# (/usr/share/openqrm/var/spool)
#------------------------------------------------------------------------------#
### hier wird mit Hilfe der "Resource ID" die "Resource IP" ermittelt
APPLIANCEID="${2}"
RESOURCEID="${1}"
RESOURCEIP="$(echo "SELECT resource_ip FROM resource_info WHERE resource_id='${RESOURCEID}' LIMIT 1;" | mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME})"
#echo "APPLIANCEID=${APPLIANCEID}"
#echo "RESOURCEID=${RESOURCEID}"
#echo "RESOURCEIP=${RESOURCEIP}"
#exit
#------------------------------------------------------------------------------#
### Nur weiter machen, wenn die Resource eine IP hat
if [ -z "${RESOURCEID}" ] ; then
echo "Diese Resource hat keine ID!"
exit 0
fi
if [ -z "${RESOURCEIP}" ] ; then
echo "Diese Resource hat keine IP!"
exit 0
fi
#------------------------------------------------------------------------------#
### Hardwareinfos werden gesammelt
# Script übertragen
echo "cat /usr/share/openqrm/web/boot-service/hardwareinfos_zum_server_schicken.sh | /usr/share/openqrm/bin/dbclient -K 10 -y -i /usr/share/openqrm/etc/dropbear/dropbear_rsa_host_key -p 1667 root@${RESOURCEIP} 'cat > hardwareinfos_zum_server_schicken.sh'" > ${CMD1}
# Script ausführen
echo "/usr/share/openqrm/bin/dbclient -K 10 -y -i /usr/share/openqrm/etc/dropbear/dropbear_rsa_host_key -p 1667 root@${RESOURCEIP} '/bin/bash hardwareinfos_zum_server_schicken.sh'" >> /var/tmp/${TEMP2}
sleep 1
mv -f /var/tmp/${TEMP2} ${CMD2}
#------------------------------------------------------------------------------#
rm -f /var/tmp/${TEMP1} /var/tmp/${TEMP2}
/usr/lib/cgi-bin/store.cgi
#!/bin/sh
. /usr/share/openqrm/etc/openqrm-server.conf
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
openQRM Nutzung der Storages
</title>
<meta name="generator" content="openQRM Nutzung der Storages" />
</head>
<body>
'
ROOTDEVICES="$(echo "SELECT
image_rootdevice,
count(image_rootdevice)
FROM appliance_info,image_info,resource_info,storage_info WHERE
appliance_imageid=image_id
AND
image_storageid=storage_id
AND
appliance_resources=resource_id
GROUP BY image_rootdevice
;" \
| mysql -N -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | while read image_rootdevice count_image_rootdevice
do
if [ -n "${count_image_rootdevice}" -a -n "${image_rootdevice}" ] ; then
if [ "${count_image_rootdevice}" -gt "1" ] ; then
echo "${image_rootdevice}"
fi
fi
done)"
if [ -n "${ROOTDEVICES}" ] ; then
echo "<BR>"
echo "<U><B>ACHTUNG!!!</B></U><BR>"
echo "<BR>"
echo "<U><B>diese "image_rootdevice"'s werden im Moment mehrfach verwendet:</B></U><BR>"
echo "<BR>"
for DROOTDEVICE in ${ROOTDEVICES}
do
echo "SELECT
appliance_id,
appliance_name,
appliance_state,
image_rootdevice,
image_id,
image_name,
resource_id,
resource_hostname
FROM appliance_info,image_info,resource_info,storage_info
WHERE
appliance_imageid=image_id
AND
image_storageid=storage_id
AND
appliance_resources=resource_id
AND
image_rootdevice='${DROOTDEVICE}'
ORDER BY appliance_id
;" \
| mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1
echo "<BR>"
echo "<BR>"
done
fi
echo "<U><B>sortiert nach image_rootdevice:</B></U><BR>"
echo "<BR>"
echo "SELECT
appliance_id,
appliance_name,
appliance_state,
image_rootdevice,
image_id,
image_name,
resource_id,
resource_hostname
FROM appliance_info,image_info,resource_info,storage_info
WHERE
appliance_imageid=image_id
AND
image_storageid=storage_id
AND
appliance_resources=resource_id
ORDER BY image_rootdevice
;" \
| mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1
#echo "<BR>"
#echo "<BR>"
#
#echo "SELECT
#appliance_id,
#appliance_name,
#appliance_virtualization,
#appliance_imageid,
#appliance_capabilities,
#appliance_resources,
#appliance_state,
#image_id,
#image_name,
#image_rootdevice,
#resource_id,
#resource_hostname,
#resource_imageid,
#resource_ip,
#resource_state,
#resource_vtype,
#resource_vhostid,
#storage_id,
#storage_name,
#storage_resource_id,
#storage_capabilities
#
#FROM appliance_info,image_info,resource_info,storage_info
#WHERE
#appliance_imageid=image_id
#AND
#image_storageid=storage_id
#AND
#appliance_resources=resource_id
#ORDER BY image_rootdevice
#;" \
#| mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1
# appliance_imageid=image_id
# image_storageid=storage_id
# appliance_resources=resource_id
# resource_imageid=image_id
# storage_resource_id=resource_id
echo "<BR>"
echo "<BR>"
#echo "SELECT image_id,image_name,image_version,image_type,image_rootdevice,image_rootfstype,image_storageid,storage_id,storage_name,storage_resource_id,storage_type FROM image_info,storage_info WHERE storage_id=image_storageid ;" | mysql -H -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} 2>&1
echo '
</body>
</html>
'
/var/www/store.php
<?php
$ausgabe = system("/bin/sh /usr/lib/cgi-bin/store.cgi", $retval);
echo "$ausgabe <br>";
echo "Fehler=$retval<br>";
?>
/var/www/openqrm/action/hardwareinfos_in_db_schreiben.php
<?php
$RootDir = $_SERVER["DOCUMENT_ROOT"].'/openqrm/base/';
require_once "$RootDir/include/openqrm-database-functions.php";
require_once "$RootDir/class/resource.class.php";
require_once "$RootDir/class/image.class.php";
require_once "$RootDir/class/image_authentication.class.php";
require_once "$RootDir/class/kernel.class.php";
require_once "$RootDir/class/plugin.class.php";
require_once "$RootDir/class/event.class.php";
require_once "$RootDir/class/openqrm_server.class.php";
global $RESOURCE_INFO_TABLE;
$resource_command = $_REQUEST["resource_command"];
$resource_id = $_REQUEST["resource_id"];
$resource_mac = $_REQUEST["resource_mac"];
$resource_ip = $_REQUEST["resource_ip"];
$resource_state = $_REQUEST["resource_state"];
$resource_event = $_REQUEST["resource_event"];
$resource_lastgood = $_SERVER['REQUEST_TIME'];
foreach ($_REQUEST as $key => $value) {
if (strncmp($key, "resource_", 9) == 0) {
$resource_fields[$key] = $value;
}
}
unset($resource_fields["resource_command"]);
// set lastgood
$resource_fields["resource_lastgood"]=$resource_lastgood;
// gather for event vars
$event_name = $_REQUEST["event_name"];
$event_priority = $_REQUEST["event_priority"];
$event_source = $_REQUEST["event_source"];
$event_description = $_REQUEST["event_description"];
$openqrm_server = new openqrm_server();
$OPENQRM_SERVER_IP_ADDRESS=$openqrm_server->get_ip_address();
global $OPENQRM_SERVER_IP_ADDRESS;
$event = new event();
switch ($resource_command) {
// get_parameter requires :
// resource_mac
case 'get_parameter':
// if resource-id = -1 we add a new resource first
if ($resource_id == "-1") {
// check if resource already exists
$resource = new resource();
if (!$resource->exists($resource_mac)) {
// add resource
$new_resource_id=openqrm_db_get_free_id('resource_id', $RESOURCE_INFO_TABLE);
$resource->id = $new_resource_id;
// check if resource_id is free
if (!$resource->is_id_free($resource->id)) {
$event->log("get_parameter", $_SERVER['REQUEST_TIME'], 3, "resource-monitor", "Given resource id $resource->id is already in use!", "", "", 0, 1, $resource->id);
echo "Given resource id $resource->id is already in use!";
exit();
}
$event->log("get_parameter", $_SERVER['REQUEST_TIME'], 5, "resource-monitor", "Adding new resource $new_resource_id ($resource_mac)", "", "", 0, 1, $resource->id);
# send add resource to openQRM-server
$openqrm_server->send_command("openqrm_server_add_resource $new_resource_id $resource_mac $resource_ip");
# add resource to db
$resource_fields["resource_id"]=$new_resource_id;
$resource_fields["resource_localboot"]=0;
$resource_fields["resource_vtype"]=1;
$resource_fields["resource_vhostid"]=$new_resource_id;
$resource->add($resource_fields);
}
}
if (strlen($resource_mac)) {
$resource = new resource();
$resource->get_instance_by_mac("$resource_mac");
// update the resource parameter in any way
$resource->update_info($resource->id, $resource_fields);
$resource->get_parameter($resource->id);
} else if (strlen($resource_id)) {
$resource = new resource();
$resource->get_instance_by_id($resource_id);
// update the resource parameter in any way
$resource->update_info($resource->id, $resource_fields);
$resource->get_parameter($resource->id);
}
exit();
break;
// update_info requires :
// resource_id
// array of resource_fields
case 'update_info':
$resource = new resource();
if (strlen($resource_id)) {
$resource->get_instance_by_id($resource_id);
if (!strcmp($resource->event, "reboot")) {
// we do not accept this stats since the resource will be rebooted
// reset the events field
$resource_reboot_fields=array();
$resource_reboot_fields["resource_state"]="transition";
$resource_reboot_fields["resource_event"]="";
$event->log("update_info", $_SERVER['REQUEST_TIME'], 5, "resource-monitor", "Rejecting statistics from rebooting resource $resource_id", "", "", 0, 0, $resource_id);
$resource->update_info($resource_id, $resource_reboot_fields);
} else {
$event->log("update_info", $_SERVER['REQUEST_TIME'], 5, "resource-monitor", "Processing statistics from resource $resource_id", "", "", 0, 0, $resource_id);
$resource->update_info($resource_id, $resource_fields);
}
}
// in case the openQRM-server sends its stats we check
// the states of all resources
if ("$resource_id" == "0") {
$event->log("update_info", $_SERVER['REQUEST_TIME'], 5, "resource-monitor", "Checking states of all resources", "", "", 0, 0, 0);
$resource->check_all_states();
// check if there are any image_authentications to manage
$image_auth = new image_authentication();
$image_auth->check_all_image_authentication();
// here a plugin hook for things which needs to be done periodically
$plugin = new plugin();
$enabled_plugins = $plugin->enabled();
foreach ($enabled_plugins as $index => $plugin_name) {
$plugin_monitor_hook = "$RootDir/plugins/$plugin_name/openqrm-$plugin_name-monitor-hook.php";
if (file_exists($plugin_monitor_hook)) {
$event->log("plugin_monitor_hook", $_SERVER['REQUEST_TIME'], 5, "resource-monitor.php", "Found plugin $plugin_name handling monitor event.", "", "", 0, 0, $resource_id);
require_once "$plugin_monitor_hook";
$monitor_function="openqrm_"."$plugin_name"."_monitor";
$monitor_function=str_replace("-", "_", $monitor_function);
$monitor_function();
}
}
}
exit();
break;
// update_status requires :
// resource_id
// resource_state
// resource_event
case 'update_status':
if (strlen($resource_id)) {
$resource = new resource();
$resource->update_status($resource_id, $resource_state, $resource_event);
}
exit();
break;
// post_event requires :
// resource_id
// event_name
// event_priority
// event_source
// event_description
case 'post_event':
if (strlen($resource_id)) {
$event->log($event_name, $_SERVER['REQUEST_TIME'], $event_priority, $event_source, $event_description, "", "", 0, 0, 0);
}
exit();
break;
default:
echo "No Such openQRM-command!";
break;
}
?>
/var/www/openqrm/base/server/appliance/appliance-hw_db.php
HW-Infos aus der DB anzeigen
<?php
#####################
#
# Class Query
# by OLIMAC
#
# 2010-04-21: modifiziert
#
#####################
#------------------------------------------------------------------------------#
# Konfiguration einlesen
#------------------------------------------------------------------------------#
Class Query {
var $con;
var $SQL = "";
var $ErrNo = 0;
var $ErrDesc = "";
var $LastInsertId = Null;
var $RecordCount = 0;
var $arr = array();
function Query(){
$this->arr = $this->ReadConfig();
$this->con = mysqli_connect($this->arr["OPENQRM_DATABASE_SERVER"], $this->arr["OPENQRM_DATABASE_USER"], $this->arr["OPENQRM_DATABASE_PASSWORD"], $this->arr["OPENQRM_DATABASE_NAME"]);
$this->ErrDesc = mysqli_error($this->con);
}
function SQLRowQuery($SQL){
$this->SQL = $SQL;
$res = mysqli_query($this->con, $SQL);
$row = mysqli_fetch_assoc($res);
$this->ErrDesc = mysqli_error($this->con);
return $row;
}
function SQLOp($SQL){
$this->SQL = $SQL;
$res = mysqli_query($this->con, $SQL);
$this->ErrDesc = mysqli_error($this->con);
$this->LastInsertId = mysqli_insert_id($this->con);
}
function SQLQuery($SQL){
$i=0;
$this->RecordCount = 0;
$this->SQL = $SQL;
$res = mysqli_query($this->con, $SQL);
$row = Array();
while($row[$i++] = mysqli_fetch_assoc($res));
array_pop($row);
$this->RecordCount = count($row);
$this->ErrDesc = mysqli_error($this->con);
return $row;
}
function ReadConfig(){
$arr = file("/usr/share/openqrm/etc/openqrm-server.conf");
foreach($arr as $line) {
$dmy = split("#", $line); # entferne kommentare
$line = $dmy[0];
$line = ereg_replace("'|\"|\t", "", $line); # entferne ", ', tab
if(preg_match("/^(.*?)=(.*?)$/",$line, $match)) {
$parameter = trim($match[1]);
$value = trim($match[2]);
$out[$parameter] = "$value";
}
}
return $out;
}
}
$abfrage = new Query();
#------------------------------------------------------------------------------#
# echo "SELECT * FROM hardware;" | mysql -t -h localhost -uroot -pwDfgAsw openqrm
#------------------------------------------------------------------------------#
echo "<style>td{background-color: white; font: 12px tahoma}th{background-color: f0f0f0; font: 12px tahoma; font-weight: bold}</style>";
echo "<div class=htmlobject_tab_box id=currenttabtab0><h1>Resource Hardware Infos</h1><br>";
# mit Hilfe der APPLIANCEID wird die RESOURCEID ermittelt
$resourceid = $abfrage->SQLRowQuery("SELECT resource_id FROM appliance_info,resource_info WHERE resource_id=appliance_resources and appliance_id='".addslashes($_GET[appliance_id])."' LIMIT 1;");
# APPLIANCEID anzeigen
#echo "APPLIANCEID=$_GET[appliance_id]<br>";
# RESOURCEID anzeigen
#echo "RESOURCEID=$resourceid[resource_id]<br>";
# der alte Datensatz aus der DB, mit besagter RESOURCEID, wird abgerufen und angezeigt
$erg = $abfrage->SQLQuery("SELECT * FROM hardware WHERE resource_id='$resourceid[resource_id]';");
echo "
<table border=0 cellpadding=10 cellspacing=1 style=\"background-color: silver;\">
<tr>
<th>rem_cons_ip</th>
<th>timestamp</th>
<th>resource_id</th>
<th>resource_ip</th>
<th>hostname</th>
<th>appliance_id</th>
<th>ip4</th>
<th>mac</th>
<th>netif</th>
<th>bios_release_date</th>
<th>bios_manufacturer</th>
<th>bios_product_name</th>
<th>bios_serial_number</th>
<th>cpu_anzahl</th>
<th>bus</th>
<th>vm</th>
<th>htt</th>
<th>cpu_family</th>
<th>cpu_manufacturer</th>
<th>cpu_id</th>
<th>cpu_signature</th>
<th>cpu_core_count</th>
<th>cpu_core_enabled</th>
<th>memtotal</th>
<th>hdd</th>
</tr>";
if(is_array($erg)) foreach($erg as $row){
echo "
<tr>
<td>$row[rem_cons_ip]</td>
<td>$row[timestamp]</td>
<td>$row[resource_id]</td>
<td>$row[resource_ip]</td>
<td>$row[hostname]</td>
<td>$row[appliance_id]</td>
<td>$row[ip4]</td>
<td>$row[mac]</td>
<td>$row[netif]</td>
<td>$row[bios_release_date]</td>
<td>$row[bios_manufacturer]</td>
<td>$row[bios_product_name]</td>
<td>$row[bios_serial_number]</td>
<td>$row[cpu_anzahl]</td><td>$row[bus]</td>
<td>$row[vm]</td><td>$row[htt]</td>
<td>$row[cpu_family]</td>
<td>$row[cpu_manufacturer]</td>
<td>$row[cpu_id]</td>
<td>$row[cpu_signature]</td>
<td>$row[cpu_core_count]</td>
<td>$row[cpu_core_enabled]</td>
<td>$row[memtotal]</td>
<td>$row[hdd]</td>
</tr>";
}
echo "</table>";
# aufgetretene Fehler
echo "$abfrage->ErrDesc<br>";
?>
/var/www/openqrm/base/server/appliance/appliance-hw_akt.php
HW-Infos aktualisieren
<?php
#####################
#
# Class Query
# by OLIMAC
#
# 2010-04-28: modifiziert
#
#####################
#------------------------------------------------------------------------------#
# Konfiguration einlesen
#------------------------------------------------------------------------------#
Class Query {
var $con;
var $SQL = "";
var $ErrNo = 0;
var $ErrDesc = "";
var $LastInsertId = Null;
var $RecordCount = 0;
var $arr = array();
function Query(){
$this->arr = $this->ReadConfig();
$this->con = mysqli_connect($this->arr["OPENQRM_DATABASE_SERVER"], $this->arr["OPENQRM_DATABASE_USER"], $this->arr["OPENQRM_DATABASE_PASSWORD"], $this->arr["OPENQRM_DATABASE_NAME"]);
$this->ErrDesc = mysqli_error($this->con);
}
function SQLRowQuery($SQL){
$this->SQL = $SQL;
$res = mysqli_query($this->con, $SQL);
$row = mysqli_fetch_assoc($res);
$this->ErrDesc = mysqli_error($this->con);
return $row;
}
function SQLOp($SQL){
$this->SQL = $SQL;
$res = mysqli_query($this->con, $SQL);
$this->ErrDesc = mysqli_error($this->con);
$this->LastInsertId = mysqli_insert_id($this->con);
}
function SQLQuery($SQL){
$i=0;
$this->RecordCount = 0;
$this->SQL = $SQL;
$res = mysqli_query($this->con, $SQL);
$row = Array();
while($row[$i++] = mysqli_fetch_assoc($res));
array_pop($row);
$this->RecordCount = count($row);
$this->ErrDesc = mysqli_error($this->con);
return $row;
}
function ReadConfig(){
$arr = file("/usr/share/openqrm/etc/openqrm-server.conf");
foreach($arr as $line) {
$dmy = split("#", $line); # entferne kommentare
$line = $dmy[0];
$line = ereg_replace("'|\"|\t", "", $line); # entferne ", ', tab
if(preg_match("/^(.*?)=(.*?)$/",$line, $match)) {
$parameter = trim($match[1]);
$value = trim($match[2]);
$out[$parameter] = "$value";
}
}
return $out;
}
}
$abfrage = new Query();
#------------------------------------------------------------------------------#
# echo "SELECT * FROM hardware;" | mysql -t -h localhost -uroot -pwDfgAsw openqrm
#------------------------------------------------------------------------------#
echo "<style>td{background-color: white; font: 12px tahoma}th{background-color: f0f0f0; font: 12px tahoma; font-weight: bold}</style>";
echo "<div class=htmlobject_tab_box id=currenttabtab0><h1>Hardware Infos in der HW-DB aktuallisieren</h1><br>";
# mit Hilfe der APPLIANCEID wird die RESOURCEID ermittelt
$resourceid = $abfrage->SQLRowQuery("SELECT resource_id FROM appliance_info,resource_info WHERE resource_id=appliance_resources and appliance_id='".addslashes($_GET[appliance_id])."' LIMIT 1;");
# mit Hilfe der APPLIANCEID wird die RESOURCEIP ermittelt
$resourceip = $abfrage->SQLRowQuery("SELECT resource_ip FROM appliance_info,resource_info WHERE resource_id=appliance_resources and appliance_id='".addslashes($_GET[appliance_id])."' LIMIT 1;");
# APPLIANCEID anzeigen
echo "APPLIANCEID=$_GET[appliance_id]<br>";
# RESOURCEID anzeigen
echo "RESOURCEID=$resourceid[resource_id]<br>";
# RESOURCEIP anzeigen
echo "RESOURCEIP=$resourceip[resource_ip]<br>";
### der VM-Gast soll die Daten in die HW-DB aktuallisieren
echo '<pre>';
$last_line = system("/bin/bash /opt/bin/hwi2db.sh $resourceid[resource_id] $_GET[appliance_id]", $retval);
echo "Fehler=$retval<br>";
echo '</pre>';
?>
[/var/www/openqrm|/usr/src/openqrm/trunk/src/web]/base/server/appliance/appliance-index.php
HW-Knöpfe in der Appliance-Liste
Diese Datei wird auch nur ergänzt um zusätzliche Knöpfe zu bekommen.
alt
...
$arHead['appliance_edit'] = array();
$arHead['appliance_edit']['title'] ='';
$arHead['appliance_edit']['sortable'] = false;
...
$virtualization = new virtualization();
$virtualization->get_instance_by_id($appliance_db["appliance_virtualization"]);
$appliance_virtualization_type=$virtualization->name;
$strEdit = '';
$strEdit = '<a href="appliance-edit.php?appliance_id='.$appliance_db["appliance_id"].'¤ttab=tab2"><img src="../../img/edit.png" width="24" height="24" alt="edit"/> Edit</a>';
$str = '<b>Kernel:</b> '.$kernel->name.'<br>
<b>Image:</b> '.$image->name.'<br>
<b>Resource:</b> '.$appliance_resources_str.'<br>
<b>Type:</b> '.$appliance_virtualization_type;
$arBody[] = array(
'appliance_state' => "<img src=$state_icon>",
'appliance_icon' => "<img width=24 height=24 src=$resource_icon_default>",
'appliance_id' => $appliance_db["appliance_id"],
'appliance_name' => $appliance_db["appliance_name"],
'appliance_kernelid' => '',
'appliance_imageid' => '',
'appliance_resources' => '',
'appliance_values' => $str,
'appliance_type' => '',
'appliance_comment' => $appliance_db["appliance_comment"],
'appliance_edit' => $strEdit,
);
...
neu
...
$arHead['appliance_edit'] = array();
$arHead['appliance_edit']['title'] ='';
$arHead['appliance_edit']['sortable'] = false;
$arHead['appliance_hw_db'] = array();
$arHead['appliance_hw_db']['title'] ='';
$arHead['appliance_hw_db']['sortable'] = false;
$arHead['appliance_hw_akt'] = array();
$arHead['appliance_hw_akt']['title'] ='';
$arHead['appliance_hw_akt']['sortable'] = false;
...
$virtualization = new virtualization();
$virtualization->get_instance_by_id($appliance_db["appliance_virtualization"]);
$appliance_virtualization_type=$virtualization->name;
#if($image_db["image_id"] != 1) {
$strEdit = '';
$strEdit = '<a href="appliance-edit.php?appliance_id='.$appliance_db["appliance_id"].'¤ttab=tab2"><img src="../../img/edit.png" width="24" height="24" alt="edit"/> Edit</a>';
#}
$strHWDB = '';
$strHWDB = '<a href="appliance-hw_db.php?appliance_id='.$appliance_db["appliance_id"].'¤ttab=tab2"><img src="../../img/edit.png" width="24" height="24" alt="hw_db"/> HW-DB</a>';
$strHWakt = '';
$strHWakt = '<a href="appliance-hw_akt.php?appliance_id='.$appliance_db["appliance_id"].'¤ttab=tab2"><img src="../../img/edit.png" width="24" height="24" alt="hw_akt"/> HW-akt</a>';
$str = '<b>Kernel:</b> '.$kernel->name.'<br>
<b>Image:</b> '.$image->name.'<br>
<b>Resource:</b> '.$appliance_resources_str.'<br>
<b>Type:</b> '.$appliance_virtualization_type;
$arBody[] = array(
'appliance_state' => "<img src=$state_icon>",
'appliance_icon' => "<img width=24 height=24 src=$resource_icon_default>",
'appliance_id' => $appliance_db["appliance_id"],
'appliance_name' => $appliance_db["appliance_name"],
'appliance_kernelid' => '',
'appliance_imageid' => '',
'appliance_resources' => '',
'appliance_values' => $str,
'appliance_type' => '',
'appliance_comment' => $appliance_db["appliance_comment"],
'appliance_edit' => $strEdit,
'appliance_hw_db' => $strHWDB,
'appliance_hw_akt' => $strHWakt,
);
...
[/usr/share/openqrm|/usr/src/openqrm/trunk/src]/web/base/top.php
Knopf auf der Oberfläche hinzufühgen
Diese Datei wird angepasst, damit man zwei zusätzliche Knöpfe auf der Oberfläche bekommt. Einen für den direkten Zugang zu einem Wiki und den anderen zum abrufen von speziellen Infos aus der DB.
Es wird dieser Originalbereich in der PHP-Datei ergänzt:
alt
...
<a id="Docu_box" href="server/zz_documentation/introduction.php" target="MainFrame">Documentation</a>
<a id="Login_box" href="server/user/user.php" target="MainFrame"><?php echo OPENQRM_USER_NAME; ?></a>
...
neu
So soll es danach aussehen:
...
<a id="Docu_box" href="server/zz_documentation/introduction.php" target="MainFrame">Documentation</a>
<a id="Docu_box" href="/store.php" target="MainFrame">QRM-Info</a>
<a id="Docu_box" href="http://wiki.server.net/wiki/" target="MainFrame">Wiki</a>
<a id="Login_box" href="server/user/user.php" target="MainFrame"><?php echo OPENQRM_USER_NAME; ?></a>
...
/opt/bin/hardwareinfos_zeigen.sh
HW-DB auslesen
Es ist auch möglich die Datenbank von Hand einzusehen, hier ein kleines Script dafür:
#!/bin/sh
#------------------------------------------------------------------------------#
# User-Check
if [ "$(id -u)" != "0" ] ; then
echo "Sie muessen 'root' sein"
exit 1
fi
#------------------------------------------------------------------------------#
# VARIABLEN werden gesammelt bzw. gesetzt
. /opt/etc/hardwareinfos.cfg
#OPENQRM_DATABASE_SERVER=localhost
#OPENQRM_DATABASE_NAME=openqrm
#OPENQRM_DATABASE_USER=root
#OPENQRM_DATABASE_PASSWORD=geheim
#------------------------------------------------------------------------------#
# DB-Tabelle auslesen
#echo "SELECT resource_id,hostname,bios_release_date,bios_product_name,mac,cpu_anzahl,bus,htt,cpu_family,cpu_manufacturer,cpu_signature FROM ${HWINFOTAB} ORDER BY resource_id;" | mysql -t -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
echo "SELECT resource_id,hostname,bios_release_date,bios_product_name,cpu_anzahl,bus,htt,cpu_family,cpu_manufacturer,cpu_signature FROM ${HWINFOTAB} ORDER BY resource_id;" | mysql -t -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME}
automatischer HW-Eintrag beim Start
Die VM's sollen sich beim hoch fahren vollkommen selbstständig in die HW-DB eintragen. Damit sie das auch machen, müssen folgende Arbeitsschritte noch durchgeführt werden.
ablegen des Scripts
Dieses Script muss auf der VM ausgeführt werden.
Damit es fehlerfrei funktionieren kann, müssen folgende Programme installiert sein:
- tr
- sed
- awk
- MySQL-Client
- date
- hostname
- ifconfig
- find
- fgrep
- egrep
- xargs
- cat
- dmidecode
- wc
- uniq
- if
- while
- read
- test
- wget
Die meisten davon sind Bestandteil des Betriebssystems aber dmidecode muss zum Beispiel extra installiert werden.
Das folgende Script sollte hier abgelegt werden:
# vi /usr/share/openqrm/web/boot-service/hardwareinfos_zum_server_schicken.sh
Weil das der übliche Ort für Scripte ist, den openQRM vorgesehen hat. Von hieraus werden die VM's sich die benötigten Scripte selbstständig holen.
#!/bin/bash
#------------------------------------------------------------------------------#
#
# 2010-04-21: erstellt
# 2010-04-28: modifiziert
# 2010-06-29: modifiziert
#
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#
if [ -r /usr/share/openqrm/etc/openqrm-server.conf ] ; then
. /opt/etc/hardwareinfos.cfg
export $(echo "SELECT appliance_id FROM appliance_info,resource_info WHERE appliance_resources=resource_id AND resource_id="0" LIMIT 1;" | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | tr -s '\n' '=' | sed 's/=$/\n/') #| awk -F'=' '{print $1"=\""$2"\""}')
export $(echo "SELECT resource_id FROM appliance_info,resource_info WHERE appliance_resources=resource_id AND resource_id="0" LIMIT 1;" | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | tr -s '\n' '=' | sed 's/=$/\n/') #| awk -F'=' '{print $1"=\""$2"\""}')
export $(echo "SELECT resource_ip FROM appliance_info,resource_info WHERE appliance_resources=resource_id AND resource_id="0" LIMIT 1;" | mysql -h ${OPENQRM_DATABASE_SERVER} -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} ${OPENQRM_DATABASE_NAME} | tr -s '\n' '=' | sed 's/=$/\n/') #| awk -F'=' '{print $1"=\""$2"\""}')
fi
if [ -r /var/openqrm/openqrm-resource.conf ] ; then
. /var/openqrm/openqrm-resource.conf
else
resource_openqrmserver="${resource_ip}"
fi
#------------------------------------------------------------------------------#
echo "$(
# TIMESTAMP
echo "timestamp=$(date +'%Y-%m-%d %H:%M:%S')"
# RESOURCEID
echo "resource_id=${resource_id}"
# RESOURCEIP
echo "resource_ip=${resource_ip}"
# Hostname
echo "hostname=$(hostname -f)"
# APPLIANCEID
echo "appliance_id=${appliance_id}"
# IP-Adressen
for i in $(ls /sys/class/net/ | egrep '.+[0-9]$');do ip -f inet addr show dev ${i} | egrep inet | egrep -v ':0$' | awk -v geraet=${i} '{print "IP4="geraet" "$2}';done
# MAC-Adressen
for i in $(find /sys/ -type f | fgrep 'address');do NETIF="$(echo "${i}"|awk -F'/' '{print $(NF-1)}')";cat ${i} | awk -v netif="${NETIF}" '{print "mac="netif,$1}';done
# Netzwerkgeschwindigkeiten
for i in $(ls /sys/class/net/ | egrep '.+[0-9]$');do ethtool ${i} | awk -v netif="${i}" '/[Ss]peed:/ {print "netif="netif,$NF}';done
# BIOS-Datum
dmidecode -t 0 | fgrep -i 'Release Date:' | sed -e 's/^[ \t]*/BIOS /' -e 's/: /=/'
# System-Infos
dmidecode -t 1 | egrep -i 'Manufacturer:|Product Name:|Serial Number:' | sed -e 's/^[ \t]*/BIOS /' -e 's/: /=/'
# Anzahl der CPUs
dmidecode -t processor | egrep -i 'Socket Designation:' | wc -l | awk '{print "CPU Anzahl="$1}'
# Bus: 64Bit oder nicht
egrep ^flags /proc/cpuinfo | tr -s ' ' '
' | egrep ^lm | uniq | awk '{print "bus="$1}'
# Hardwarevirtualisierung
egrep ^flags /proc/cpuinfo | tr -s ' ' '
' | egrep 'vmx|svm' | uniq | awk '{print "vm="$1}'
# Hyper-Threading oder nicht
awk -v alt='^$' -v neu='#' '{sub(alt, neu)} /physical id|core id|#/ && /0$|#/ {print $NF}' /proc/cpuinfo | uniq -c | awk '!/#|1 0/' | wc -l | awk '{$1 > 1 ; print "htt="$1}'
# CPU-Infos
dmidecode -t processor | sed -e '1,/^$/ d' -e '/^$/ q' -e 's/^ /CPU /' -e 's/^\t/CPU /' -e 's/: /=/' | egrep -i 'Family=|Manufacturer=|ID=|Signature=|Core Count=|Core Enabled='
# Hauptspeichergröße
egrep ^MemTotal /proc/meminfo | sed 's/:[ ]*/=/'
# Festplatten
fgrep -H 0 /sys/class/block/*/removable | egrep -v 'loop|ram|dm-' | awk -F'/' '{print $5}' | while read DEV;do echo "HDD=${DEV} $(cat /sys/class/block/${DEV}/size | awk -F'/' '{print $1/2048}') MB";done
)" | awk -F'=' '{gsub("^\t*", "") ; gsub("^ *", "") ; wert=$2 ; gsub(" ", "_") ; variable=tolower($1) ; print variable"="wert}' > /tmp/hardwareinfos.txt
#------------------------------------------------------------------------------#
wget -q --post-file=/tmp/hardwareinfos.txt http://${resource_openqrmserver}/cgi-bin/hwi2db.cgi
globale rc-Datei aller VM's
Möchte man noch eigene Scripte beim Bootvorgang mit einbauen, dann bietet sich diese Datei an. Sie wird bei jedem Bootvorgang einer VM abgearbeitet.
# vi /usr/share/openqrm/etc/templates/openqrm-linuxrc
Allerdings kann man auch verschiedene Kernel-Images bauen, in die dann verschiedene Versionen dieser Datei liegen.
Zuerst hatte ich für das Script "/usr/share/openqrm/web/boot-service/hardwareinfos_zum_server_schicken.sh" auch an diese Initialdatei gedacht. Aber nach einigen Tests hat sich herausgestellt, dass zum Zeitpunkt, wenn dieses Script durchgelaufen ist, beginnt erst der eigentliche Bootvorgang vom vorgesehenem Image.
Also ist das hier viel zu früh.
Script in die rc.local eintragen
Diese Startmethode wird bei Ubuntu sehr stiefmütterlich behandelt, deshalb sollte man sich vielleicht überlegen ob man mit der Zeit mitgehen möchte und diese Aktion nicht vielleicht im Upstart-Script zu verankert.
Unser Script bauen wir lieber am Ende in die /etc/rc.local ein. Das ist am sichersten, muss aber leider in jedem vorhandenem Image einmal gemacht werden. Sowie im "Golden", dann braucht es in keinem neuen Image mehr nachgezogen werden.
Die Befehlszeilen mit einem Kommentar schreiben wir in dieser Form rein:
# vi /etc/rc.local
### in die HW-DB eintragen
. /var/openqrm/openqrm-resource.conf
wget -q -O /root/hardwareinfos_zum_server_schicken.sh "$openqrm_web_protocol://${resource_openqrmserver}/openqrm/boot-service/hardwareinfos_zum_server_schicken.sh"
/bin/sh /root/hardwareinfos_zum_server_schicken.sh
exit 0
WICHTIG: Es muss vor dem "exit 0" stehen! Oder man entfernt das "exit 0" einfach.
Jetzt muss der rc.local-Dienst nur noch in die Liste der zu startenden Dienste eingetragen werden:
# update-rc.d rc.local defaults
Fertig!
