diff options
-rwxr-xr-x | continue_hacking | 2 | ||||
-rw-r--r-- | hacking-session-android-host.yaml | 36 | ||||
-rw-r--r-- | hacking-session-android-target.yaml | 26 | ||||
-rwxr-xr-x | invoke_session_debian | 50 | ||||
-rwxr-xr-x | invoke_session_oe | 44 | ||||
-rwxr-xr-x | setup_session_debian | 24 | ||||
-rwxr-xr-x | setup_session_oe | 35 |
7 files changed, 209 insertions, 8 deletions
diff --git a/continue_hacking b/continue_hacking new file mode 100755 index 0000000..c9488dd --- /dev/null +++ b/continue_hacking @@ -0,0 +1,2 @@ +#!/bin/bash +rm ~/.bash_logout diff --git a/hacking-session-android-host.yaml b/hacking-session-android-host.yaml new file mode 100644 index 0000000..1bfcbca --- /dev/null +++ b/hacking-session-android-host.yaml @@ -0,0 +1,36 @@ +metadata: + name: hacking-session-android-host + format: "Lava-Test-Shell Test Definition 1.0" + description: "Android hacking session over adb - host side" + maintainer: + - milosz.wasilewski@linaro.org + os: + - android + scope: + - functional + devices: + - kvm + +install: + deps: + - openssh-server + - wget + - android-tools-adb + +params: + PUB_KEY: None + GATEWAY: 10.0.0.1 + IRC_SERVER: irc.freenode.net + +run: + steps: + - lava-wait hacking-send-ip + - IPADDR=`awk -F '=' '{print $2}' /tmp/lava_multi_node_cache.txt` + - adb connect $IPADDR + - adb wait-for-device + - ./setup_session_debian "$PUB_KEY" + - export IRC_SERVER + - export IRC_USER + - export NOTIFY_URL + - ./invoke_session_debian "$GATEWAY" + - lava-sync hacking-finished diff --git a/hacking-session-android-target.yaml b/hacking-session-android-target.yaml new file mode 100644 index 0000000..966adc6 --- /dev/null +++ b/hacking-session-android-target.yaml @@ -0,0 +1,26 @@ +metadata: + name: lava-android-test-target + format: "Lava-Test-Shell Test Definition 1.0" + description: "Android multinode hacking session - target side" + maintainer: + - milosz.wasilewski@linaro.org + os: + - android + scope: + - functional + devices: + - arndale + - panda + - panda-es + - vexpress-a9 + - vexpress-tc2 + +run: + steps: + - lava-test-case step1-cat-build-info --shell cat /system/build.prop + - lava-test-case step2-get-adb --shell getprop service.adb.tcp.port + - lava-test-case step3-set-adb --shell setprop service.adb.tcp.port 5555 + - lava-test-case step4-stop-adbd --shell stop adbd + - lava-test-case step5-start-adbd --shell start adbd + - lava-test-case step6-send-ip --shell lava-send hacking-send-ip ipaddr=$(getprop dhcp.eth0.ipaddress) + - lava-test-case step7-multinode-sync --shell lava-sync hacking-finished diff --git a/invoke_session_debian b/invoke_session_debian index 4c78166..0db5805 100755 --- a/invoke_session_debian +++ b/invoke_session_debian @@ -3,7 +3,7 @@ # If gateway isn't set we will guess it based on the default route if [ -z "$1" ]; then - gateway=`ip route get 8.8.8.8 | cut -d ' ' -f3` + gateway=`ip route get 8.8.8.8 | grep via | cut -d ' ' -f3` else gateway=$1 fi @@ -35,10 +35,19 @@ echo "* REAL_USER=${REAL_USER}, USER=${USER}, SUDO_USER=${SUDO_USER}" echo "Please connect to: ${SSH_COMMAND} for access to (${hostname})" echo "*******************************************************************************************************" echo "" + +cat <<EOF > ~/.bash_logout +lava-test-case hacking-stopped-logout --result pass +stop_hacking +EOF + +IRC_AVAILABLE=false if [ ! -z "${IRC_USER}" ]; then if apt-get install -qq python-irc; then + IRC_AVAILABLE=true + TMP_IRC_USER=hs-${RANDOM} # make a unique user - cat <<EOF | python /usr/share/doc/python-irc/examples/irccat2.py ${IRC_SERVER} hs-${RANDOM} ${IRC_USER} + cat <<EOF | python /usr/share/doc/python-irc/examples/irccat2.py ${IRC_SERVER} ${TMP_IRC_USER} ${IRC_USER} Your hacking session is now ready Please connect to: ${SSH_COMMAND} @@ -54,10 +63,45 @@ echo "" mkdir -p /run mkdir -p /run/hacking echo $$ > /run/hacking/hacking.pid +TIMESTAMP=`stat -c %Y /run/hacking/hacking.pid` +STARTED=false +TERMINATED=false echo "Hacking session active..." +lava-test-case hacking-session-active --result pass +tail -f /var/log/syslog & +echo $! > /run/hacking/tail.pid while [ -f /run/hacking/hacking.pid ] do + date + echo "====================" + who + echo "====================" + echo "" sleep 10 + LOGGEDIN=`who | grep pts | wc -l` + if ! $STARTED && [ $LOGGEDIN -gt 0 ]; then + STARTED=true + elif ! $STARTED && [ $LOGGEDIN -eq 0 ]; then + NOW=`date +%s` + ELAPSED=`expr $NOW - $TIMESTAMP` + if [ $ELAPSED -gt 3600 ]; then + echo "No user logged in. Terminating session..." + TERMINATED=true + if ${IRC_AVAILABLE}; then + # make a unique user + cat <<EOF | python /usr/share/doc/python-irc/examples/irccat2.py ${IRC_SERVER} ${TMP_IRC_USER} ${IRC_USER} +Your hacking session was terminated due to inactivity +There was no user logged in for ${ELAPSED} seconds. +EOF + fi + lava-test-case hacking-session-terminated --result fail --measurement ${ELAPSED} --units seconds + stop_hacking + fi + fi done echo "Hacking session ended..." -echo "<LAVA_TEST_RUNNER>: exiting" +kill `cat /run/hacking/tail.pid` +rm /run/hacking/tail.pid +if ! ${TERMINATED}; then + lava-test-case hacking-session-terminated --result pass +fi diff --git a/invoke_session_oe b/invoke_session_oe index 59b7847..8b6fe0c 100755 --- a/invoke_session_oe +++ b/invoke_session_oe @@ -1,8 +1,13 @@ #!/bin/sh # Usage ./invoke_session <gateway> -# Hack for now until lava-test-shell is smart enough to know it's dispatcher ip -gateway=$1 +# If gateway isn't set we will guess it based on the default route +if [ -z "$1" ]; then + gateway=`ip route get 8.8.8.8 | grep via | cut -d ' ' -f3` +else + gateway=$1 +fi + echo "Target's Gateway: $gateway" # Copy invoke session @@ -31,13 +36,46 @@ echo ")" echo "*********************************************************************************************" echo "" echo "" + +cat <<EOF > ~/.bash_logout +stop_hacking +EOF + mkdir -p /run mkdir -p /run/hacking echo $$ > /run/hacking/hacking.pid +TIMESTAMP=`stat -c %Y /run/hacking/hacking.pid` +STARTED=false +TERMINATED=false echo "Hacking session active..." +lava-test-case hacking-session-active --result pass +tail -f /var/log/syslog & +echo $! > /run/hacking/tail.pid while [ -f /run/hacking/hacking.pid ] do + date + echo "====================" + who + echo "====================" + echo "" sleep 10 + LOGGEDIN=`who | grep pts | wc -l` + if ! $STARTED && [ $LOGGEDIN -gt 0 ]; then + STARTED=true + elif ! $STARTED && [ $LOGGEDIN -eq 0 ]; then + NOW=`date +%s` + ELAPSED=`expr $NOW - $TIMESTAMP` + if [ $ELAPSED -gt 3600 ]; then + TERMINATED=true + echo "No user logged in. Terminating session..." + lava-test-case hacking-session-terminated --result fail --measurement ${ELAPSED} --units seconds + stop_hacking + fi + fi done +kill `cat /run/hacking/tail.pid` +rm /run/hacking/tail.pid echo "Hacking session ended..." -echo "<LAVA_TEST_RUNNER>: exiting" +if ! ${TERMINATED}; then + lava-test-case hacking-session-terminated --result pass +fi diff --git a/setup_session_debian b/setup_session_debian index 2404015..f96553c 100755 --- a/setup_session_debian +++ b/setup_session_debian @@ -3,13 +3,24 @@ chmod a+x stop_hacking_debian cp stop_hacking_debian /bin/stop_hacking +chmod a+x continue_hacking +cp continue_hacking /bin/continue_hacking chmod a+x invoke_session_debian cp invoke_session_debian /bin/invoke_session +if [ $# -ne 1 ]; then + lava-test-case public-key-installed --result fail + exit 1 +fi + mkdir -p ~/.ssh/ echo $1 >> ~/.ssh/authorized_keys +if [ $? -ne 0 ]; then + lava-test-case public-key-installed --result fail +fi chmod 0600 ~/.ssh/authorized_keys echo "Public Key Installed: $1" +lava-test-case public-key-installed --result pass # Account for running under sudo if [ ! -z "${SUDO_USER}" ]; then @@ -17,6 +28,19 @@ if [ ! -z "${SUDO_USER}" ]; then chown -R ${SUDO_USER}:${SUDO_GID} ${HOME}/.ssh fi +grep -P "^LogLevel" /etc/ssh/sshd_config +if [ $? -eq 0 ]; then + sed -i "s/^LogLevel\ [A-Z]\+/LogLevel\ DEBUG/g" /etc/ssh/sshd_config +else + echo "LogLevel DEBUG" >> /etc/ssh/sshd_config +fi /etc/init.d/ssh restart echo "sshd re-started" +if [ $? -eq 0 ]; then + lava-test-case sshd-restart --result pass + echo "sshd re-started" +else + lava-test-case sshd-restart --result fail + echo "sshd re-start failed" +fi diff --git a/setup_session_oe b/setup_session_oe index a5d9bcc..2620427 100755 --- a/setup_session_oe +++ b/setup_session_oe @@ -3,12 +3,43 @@ chmod a+x stop_hacking_oe cp stop_hacking_oe /bin/stop_hacking +chmod a+x continue_hacking +cp continue_hacking /bin/continue_hacking chmod a+x invoke_session_oe cp invoke_session_oe /bin/invoke_session +if [ $# -ne 1 ]; then + lava-test-case public-key-installed --result fail + exit 1 +fi + mkdir -p ~/.ssh/ echo $1 >> ~/.ssh/authorized_keys +if [ $? -ne 0 ]; then + lava-test-case public-key-installed --result fail +fi +chmod 0600 ~/.ssh/authorized_keys echo "Public Key Installed: $1" +lava-test-case public-key-installed --result pass + +# Account for running under sudo +if [ ! -z "${SUDO_USER}" ]; then + echo "Fixing up ${HOME}/.ssh permissions to ${SUDO_USER}:${SUDO_GID}" + chown -R ${SUDO_USER}:${SUDO_GID} ${HOME}/.ssh +fi -/etc/init.d/sshd restart -echo "sshd re-started" +# Change SSHD log level to DEBUG +grep -P "^LogLevel" /etc/ssh/sshd_config +if [ $? -eq 0 ]; then + sed -i "s/^LogLevel\ [A-Z]\+/LogLevel\ DEBUG/g" /etc/ssh/sshd_config +else + echo "LogLevel DEBUG" >> /etc/ssh/sshd_config +fi +/etc/init.d/ssh restart +if [ $? -eq 0 ]; then + lava-test-case sshd-restart --result pass + echo "sshd re-started" +else + lava-test-case sshd-restart --result fail + echo "sshd re-start failed" +fi |