199 lines
5.3 KiB
Plaintext
Executable File

# Intended to be sourced by other scripts
export SOLO_IP=10.1.1.10
export ARTOO_IP=10.1.1.1
SCP="scp -o StrictHostKeyChecking=no ${RSA_KEY}"
SSH="ssh -o StrictHostKeyChecking=no ${RSA_KEY}"
sl_init_environment() {
system=`uname -a | awk '{print $1}'`
if [ $system == "Darwin" ]; then
if [ ! -e /usr/local/bin/md5sum ] && [ ! -e /opt/local/bin/md5sum ]; then
echo "md5sum missing: please install md5sha1sum using macports or brew"
return 1
fi
export MD5SUM='md5sum --check'
else
export MD5SUM='md5sum --check --quiet'
fi
return 0
}
# sl_start_update [ip] [filename] [message]
# print message, then start update of 'ip' with 'filename'
# sl_start_update [ip] [filename]
# print default message, then start update of 'ip' with 'filename'
# sl_start_update [ip] [filename] -
# silently start update of 'ip' with 'filename'
sl_start_update() {
${MD5SUM} ${2}.md5 > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "ERROR checking md5 for ${2}.md5"
exit
fi
msg="updating ${1} with ${2}"
if [ "${3}_" != "_" ]; then
msg=${3}
fi
if [ "${msg}" != "-" ]; then
echo ${msg}
fi
ssh-keygen -R ${1} &> /dev/null
${SSH} root@${1} "rm -rf /log/updates" &> /dev/null
${SSH} root@${1} "mkdir -p /log/updates" &> /dev/null
${SSH} root@${1} "touch /log/updates/UPDATE" &> /dev/null
${SCP} ${2} root@${1}:/log/updates/
${SCP} ${2}.md5 root@${1}:/log/updates/
${SSH} root@${1} "shutdown -r now"
}
# sl_start_makegolden [ip] [message]
# print message, then start makegold on 'ip'
# sl_start_makegolden [ip]
# print default message, then start makegold on 'ip'
# sl_start_makegolden [ip] -
# silently start makegold on 'ip'
sl_start_makegolden() {
msg="makegold on ${1}"
if [ "${2}_" != "_" ]; then
msg=${2}
fi
if [ "${msg}" != "-" ]; then
echo ${msg}
fi
ssh-keygen -R ${1} &> /dev/null
${SCP} ./makeGolden.sh root@${1}: &> /dev/null
${SSH} root@${1} "chmod +x ./makeGolden.sh"
${SSH} root@${1} "./makeGolden.sh"
}
# sl_start_factory [ip] [message]
# print message, then start factory reset on 'ip'
# sl_start_factory [ip]
# print default message, then start factory reset on 'ip'
# sl_start_factory [ip] -
# silently start factory reset on 'ip'
sl_start_factory() {
msg="starting factory reset on ${1}"
if [ "${2}_" != "_" ]; then
msg=${2}
fi
if [ "${msg}" != "-" ]; then
echo ${msg}
fi
ssh-keygen -R ${1} &> /dev/null
${SSH} root@${1} "mkdir -p /log/updates" &> /dev/null
${SSH} root@${1} "touch /log/updates/FACTORYRESET" &> /dev/null
${SSH} root@${1} "shutdown -r now"
}
# sl_wait_target [ip] [message]
# print message, then dots until ip is pingable, then ok
# sl_wait_target [ip]
# print default message, then dots until ip is pingable, then ok
# sl_wait_target [ip] -
# silently wait until ip is pingable
sl_wait_target() {
msg="waiting for ${1}"
if [ "${2}_" != "_" ]; then
msg=${2}
fi
if [ "${msg}" != "-" ]; then
echo -n "${msg} ..."
fi
# wait for it to be pingable (network up)
while ! ping -c1 -W1 ${1} &> /dev/null; do
if [ "${msg}" != "-" ]; then echo -n "."; fi
done
# wait for it to be accepting ssh connections
while ! ${SSH} root@${1} "true" &> /dev/null; do
sleep 1
if [ "${msg}" != "-" ]; then echo -n "-"; fi
done
# wait for it to be in runlevel 3, 4, or 5
sl_get_runlevel ${1}
runlevel=$?
until [ "${runlevel}_" == "3_" ] || [ "${runlevel}_" == "4_" ] || [ "${runlevel}_" == "5_" ]; do
sleep 1
sl_get_runlevel ${1}
if [ "${msg}" != "-" ]; then echo -n "+"; fi
done
if [ "${msg}" != "-" ]; then echo " ok"; fi
}
# sl_get_runlevel [ip]
sl_get_runlevel() {
rl=`${SSH} root@${1} 'runlevel'`
for w in ${rl}; do
a=${w}
done
return ${a}
}
# sl_check_update_files [filename] ...
sl_check_update_files() {
result=0
if [ -z "${MD5SUM}" ]; then
echo "MD5SUM not set in environment"
result=1
fi
until [ -z "${1}" ]; do
if [ ! -f "${1}" ]; then
echo "${1} missing"
result=1
elif [ ! -f "${1}.md5" ]; then
echo "${1}.md5 missing"
result=1
elif [ ! -z "${MD5SUM}" ]; then
${MD5SUM} ${1}.md5 > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "${1}.md5 incorrect"
result=1
fi
fi
shift
done
return ${result}
}
# sl_get_version [ip] [which]
sl_get_version() {
echo `${SSH} root@${1} "cat /${2} | head -n 1"`
}
# sl_clean_firmware [ip]
# forces loading firmware on next boot if the build's version is different
# from what is already loaded
sl_clean_firmware() {
ssh-keygen -R ${1} &> /dev/null
${SSH} root@${1} "rm -rf /mnt/rootfs.rw/firmware" &> /dev/null
}
# sl_start_update_pixhawk [ip] [filename] [message]
sl_start_update_pixhawk() {
msg="starting update of pixhawk to ${2} ... "
if [ "${3}_" != "_" ]; then
msg=${3}
fi
if [ "${msg}" != "-" ]; then
echo -n "${msg}"
fi
ssh-keygen -R ${1} &> /dev/null
${SCP} ${2} root@${1}:/firmware/ &> /dev/null
${SSH} root@${1} "shutdown -r now"
if [ "${msg}" != "-" ]; then
echo "ok"
fi
}