mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-02 20:02:29 +01:00
All (almost) files belonging to the systemvm aer now centralize in the systemvm directory. The code for the separate functions is still in the services directory. This will make the code easier to understand and makes it clear that the systemvm is a separate item. It alos means that it can be excluded from the build entirely by not adding the systemvm profile, this will speed up the compiles somewhat.
227 lines
6.7 KiB
Bash
227 lines
6.7 KiB
Bash
#!/bin/sh
|
|
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
# Script to write information about the guest to XenStore.
|
|
#
|
|
# Information collected (if --memory NOT passed in):
|
|
# - Distribution name
|
|
# - Distribution version (major and minor)
|
|
# - Kernel version (uname)
|
|
# - IP address for each Ethernet interface
|
|
#
|
|
# Information collected (if --memory IS passed in):
|
|
# - memtotal
|
|
# - memfree
|
|
#
|
|
# Memory stats are separated out because they change all the time
|
|
# and so we may not want to update them as frequently
|
|
|
|
LANG="C"
|
|
export LANG
|
|
|
|
|
|
XE_LINUX_DISTRIBUTION_CACHE=/var/cache/xe-linux-distribution
|
|
|
|
IPADDR_RE="\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}"
|
|
|
|
export PATH=/usr/sbin:/usr/bin:/sbin:/bin
|
|
XENSTORE=${XENSTORE:-xenstore}
|
|
|
|
XENSTORE_UPDATED=0
|
|
|
|
# parse command line opts
|
|
|
|
MEMORY_MODE=0 # do not update memory stats
|
|
while [ $# -ge 1 ] ; do
|
|
if [ "$1" = "--memory" ] ; then
|
|
MEMORY_MODE=1 # update only memory stats
|
|
fi
|
|
shift
|
|
done
|
|
|
|
xenstore_write_cached() {
|
|
key="$1" newval="$2"
|
|
cache=/var/cache/xenstore/$key
|
|
if [ -f $cache ] ; then
|
|
# cache exists
|
|
oldval=$(cat "$cache")
|
|
if [ "$oldval" = "$newval" ] ; then
|
|
# value unchanged
|
|
return 0
|
|
fi
|
|
else
|
|
# cache does not exist
|
|
if [ -e $cache ] ; then
|
|
# something (directory?) in its way
|
|
rm -rf $cache
|
|
fi
|
|
fi
|
|
|
|
# try to write and update cache if successfull
|
|
if $XENSTORE write "$key" "$newval" ; then
|
|
mkdir -p $(dirname "$cache")
|
|
echo -n "$newval" > "$cache"
|
|
XENSTORE_UPDATED=1
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
# If we detect a domain change then delete our cache and force a refresh
|
|
domid=$(xenstore-read "domid")
|
|
cache=/var/cache/xenstore/unique-domain-id
|
|
newval=$(xenstore-read "/local/domain/${domid}/unique-domain-id")
|
|
if [ -e $cache ]; then
|
|
oldval=$(cat "$cache")
|
|
if [ "$oldval" != "$newval" ]; then
|
|
# domain changed
|
|
rm -rf /var/cache/xenstore
|
|
fi
|
|
fi
|
|
mkdir -p $(dirname "$cache")
|
|
echo -n "$newval" > "$cache"
|
|
|
|
xenstore_rm_cached() {
|
|
key="$1"
|
|
cache=/var/cache/xenstore/$key
|
|
if [ ! -e $cache ] ; then
|
|
return 1
|
|
fi
|
|
# try to write and update cache if successfull
|
|
if $XENSTORE rm "$key" ; then
|
|
rm -rf "$cache"
|
|
XENSTORE_UPDATED=1
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
xenstore_list_interfaces_cached() {
|
|
topdir=/var/cache/xenstore/attr
|
|
if [ -d $topdir ] ; then
|
|
cd $topdir
|
|
for dir in * ; do
|
|
[ -f $dir/ip ] && echo $dir
|
|
done
|
|
fi
|
|
}
|
|
|
|
if [ $MEMORY_MODE -eq 1 ] ; then
|
|
# Update the memory information
|
|
eval $(cat /proc/meminfo | \
|
|
sed -n -e 's/MemTotal\: *\([0-9]*\)[^$]*/memtotal=\1/gp;' \
|
|
-e 's/MemFree\: *\([0-9]*\)[^$]*/memfree=\1/gp;')
|
|
|
|
xenstore_write_cached "data/meminfo_total" "${memtotal}"
|
|
xenstore_write_cached "data/meminfo_free" "${memfree}"
|
|
fi
|
|
|
|
|
|
|
|
# e.g.
|
|
# $ ip addr show
|
|
# 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
|
|
# link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
|
|
# inet 127.0.0.1/8 scope host lo
|
|
# inet6 ::1/128 scope host
|
|
# valid_lft forever preferred_lft forever
|
|
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
|
|
# link/ether 00:13:20:95:e8:74 brd ff:ff:ff:ff:ff:ff
|
|
# inet 172.31.0.57/20 brd 172.31.15.255 scope global eth0
|
|
# inet6 fe80::213:20ff:fe95:e874/64 scope link
|
|
# valid_lft forever preferred_lft forever
|
|
# 3: sit0: <NOARP> mtu 1480 qdisc noop
|
|
# link/sit 0.0.0.0 brd 0.0.0.0
|
|
|
|
#eval $(ip addr show | \
|
|
# sed -n -e 's/^[[:digit:]]*: \([a-z0-9]*\): .*/ifs="\$ifs \1"; current="\1"; /gp;' \
|
|
# -e 's/^[[:space:]]\{4\}inet \('${IPADDR_RE}'\)\/.*/eval inet_\${current}="\1"; /gp;')
|
|
|
|
# e.g.
|
|
# eth0 Link encap:Ethernet HWaddr 00:13:20:95:E8:74
|
|
# inet addr:172.31.0.57 Bcast:172.31.15.255 Mask:255.255.240.0
|
|
# inet6 addr: fe80::213:20ff:fe95:e874/64 Scope:Link
|
|
# UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
|
|
# RX packets:98001128 errors:0 dropped:0 overruns:0 frame:0
|
|
# TX packets:87728920 errors:0 dropped:0 overruns:0 carrier:0
|
|
# collisions:0 txqueuelen:1000
|
|
# RX bytes:35864034092 (33.4 GiB) TX bytes:27544025180 (25.6 GiB)
|
|
# Interrupt:177
|
|
#
|
|
# lo Link encap:Local Loopback
|
|
# inet addr:127.0.0.1 Mask:255.0.0.0
|
|
# inet6 addr: ::1/128 Scope:Host
|
|
# UP LOOPBACK RUNNING MTU:16436 Metric:1
|
|
# RX packets:32928 errors:0 dropped:0 overruns:0 frame:0
|
|
# TX packets:32928 errors:0 dropped:0 overruns:0 carrier:0
|
|
# collisions:0 txqueuelen:0
|
|
# RX bytes:3604609 (3.4 MiB) TX bytes:3604609 (3.4 MiB)
|
|
|
|
eval $(/sbin/ifconfig | \
|
|
sed -n -e '/^[0-9a-z][0-9a-z]*\:/,/^$/d' \
|
|
-e 's/^\([0-9a-z][0-9a-z]*\) .*/ifs="\$ifs \1"; current="\1"; /gp;' \
|
|
-e 's/ *inet addr:\('$IPADDR_RE'\) .*/eval inet_\${current}="\1"; /gp;')
|
|
|
|
# network
|
|
for if in $ifs ; do
|
|
|
|
[ "${if}" = "lo" ] && continue
|
|
inet=$(eval echo \${inet_${if}})
|
|
[ -z "${inet}" ] && continue
|
|
|
|
xenstore_write_cached "attr/${if}/ip" "${inet}"
|
|
done
|
|
|
|
# remove any interfaces that have been unplugged or downed
|
|
for at in $(xenstore_list_interfaces_cached) ; do
|
|
for if in $ifs ; do
|
|
[ "${if}" = "${at}" ] && continue 2
|
|
done
|
|
xenstore_rm_cached "attr/${at}"
|
|
done
|
|
|
|
# distro
|
|
if [ -f ${XE_LINUX_DISTRIBUTION_CACHE} ] ; then
|
|
. ${XE_LINUX_DISTRIBUTION_CACHE}
|
|
for key in os_name os_majorver os_minorver os_uname os_distro ; do
|
|
new=$(eval echo \${${key}})
|
|
[ -n "${new}" ] || continue
|
|
xenstore_write_cached "data/${key}" "${new}"
|
|
done
|
|
fi
|
|
|
|
# whether I support ballooning or not
|
|
xenstore_write_cached "control/feature-balloon" "1"
|
|
|
|
# whether I support ballooning or not
|
|
xenstore_write_cached "control/feature-balloon" "1"
|
|
|
|
# build time addons
|
|
xenstore_write_cached "attr/PVAddons/MajorVersion" "5"
|
|
xenstore_write_cached "attr/PVAddons/MinorVersion" "6"
|
|
xenstore_write_cached "attr/PVAddons/MicroVersion" "0"
|
|
xenstore_write_cached "attr/PVAddons/BuildVersion" "31188"
|
|
xenstore_write_cached "attr/PVAddons/Installed" "1"
|
|
|
|
# update xenstore if necc
|
|
if [ $XENSTORE_UPDATED -eq 1 ] ; then
|
|
xenstore_write_cached "data/updated" "$(date)"
|
|
fi
|
|
|