From 5e8e332ce38f771991f443fd9114f6f997ad1f89 Mon Sep 17 00:00:00 2001 From: rd-sw Date: Wed, 27 Apr 2022 13:02:07 +0000 Subject: [PATCH] =?utf8?q?ROBOX=EF=BC=9AUpload=20robox=20scripts=20for=20I?= =?utf8?q?EC=20release=206?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit RT Signed-off-by: rd-sw Change-Id: I1695c71cb291273b926370bc9a84528107663ef0 --- src/use_cases/robox/deploy_robox.sh | 154 +++++++++++++ src/use_cases/robox/load_components.sh | 77 +++++++ src/use_cases/robox/loadimages.sh | 26 +++ src/use_cases/robox/setupenv/arm64_env_setup.sh | 176 +++++++++++++++ src/use_cases/robox/setupenv/build_android.sh | 115 ++++++++++ src/use_cases/robox/setupenv/xorg.conf | 27 +++ src/use_cases/robox/sm_ctrl.sh | 243 +++++++++++++++++++++ .../robox/test_config/ys_perf_exporter.yml | 110 ++++++++++ src/use_cases/robox/test_config/ys_prometheus.yml | 39 ++++ 9 files changed, 967 insertions(+) create mode 100644 src/use_cases/robox/deploy_robox.sh create mode 100644 src/use_cases/robox/load_components.sh create mode 100644 src/use_cases/robox/loadimages.sh create mode 100644 src/use_cases/robox/setupenv/arm64_env_setup.sh create mode 100755 src/use_cases/robox/setupenv/build_android.sh create mode 100644 src/use_cases/robox/setupenv/xorg.conf create mode 100755 src/use_cases/robox/sm_ctrl.sh create mode 100755 src/use_cases/robox/test_config/ys_perf_exporter.yml create mode 100755 src/use_cases/robox/test_config/ys_prometheus.yml diff --git a/src/use_cases/robox/deploy_robox.sh b/src/use_cases/robox/deploy_robox.sh new file mode 100644 index 0000000..e46e194 --- /dev/null +++ b/src/use_cases/robox/deploy_robox.sh @@ -0,0 +1,154 @@ +#!/bin/bash + +INSTANCE_NUM=4 +ROBOX_TEMPLATE_YAML=$(cat < /dev/null +else +echo "$ROBOX_TEMPLATE_YAML" | kubectl delete -f - > /dev/null +fi +echo $? +sleep 2 +watch -n 1 kubectl get node,pods,svc -o wide -n kube-system -n default diff --git a/src/use_cases/robox/load_components.sh b/src/use_cases/robox/load_components.sh new file mode 100644 index 0000000..dcd1e8b --- /dev/null +++ b/src/use_cases/robox/load_components.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +ROBOX_DIR=/usr/share/local/robox +function download_and_install() +{ + if [ ! -e ${ROBOX_DIR}/$1 ]; then + sudo wget -p ${ROBOX_DIR} https://github.com/ysemi-computing/RoboxWidget/blob/main/components/$1 + fi + sudo cp ${ROBOX_DIR}/$1 /usr/bin/ + sudo chmod -f 777 /usr/bin/$1 +} + +if [ "$(arch)" = "x86_64" ]; then + echo "components only support on arch arm64" + exit +fi + +sudo mkdir -p ${ROBOX_DIR} +which node_exporter +if [ $? -ne 0 ]; then + echo "node_exporter not found, downloading !!!!" + download_and_install node_exporter +fi + +which perf_exporter +if [ $? -ne 0 ]; then + echo "perf_exporter not found, downloading !!!!" + download_and_install perf_exporter +fi + +which prometheus +if [ $? -ne 0 ]; then + echo "prometheus not found, downloading !!!!" + download_and_install prometheus +fi + +which grafana-server +if [ $? -ne 0 ]; then + echo "grafana not found, downloading !!!!" + download_and_install grafana-server +fi + +# update configuration file +if [ ! -e ${ROBOX_DIR}/ys_perf_exporter ]; then + sudo wget -P ${ROBOX_DIR} https://github.com/ysemi-computing/RoboxWidget/blob/main/config/ys_perf_exporter.yml +fi +sudo cp -f ${ROBOX_DIR}/ys_perf_exporter /etc/perf_exporter + +if [ ! -e ${ROBOX_DIR}/ys_prometheus.yml ]; then + sudo wget -P ${ROBOX_DIR} https://github.com/ysemi-computing/RoboxWidget/blob/main/config/ys_prometheus.yml +fi + +# start basic components +echo "starting node_exporter" +ps aux | grep -v grep | grep node_exporter +if [ $? -ne 0 ]; then + sudo node_exporter & +fi + +echo "starting perf_exporter" +ps aux | grep -v grep | grep perf_exporter +if [ $? -ne 0 ]; then + sudo perf_exporter & +fi + +echo "starting prometheus" +ps aux | grep -v grep | grep prometheus +if [ $? -ne 0 ]; then + sudo prometheus --config.file=${ROBOX_DIR}/ys_prometheus.yml & +fi + +echo "starting grafana-server" +ps aux | grep -v grep | grep grafana-server +if [ $? -ne 0 ]; then + sudo grafana-server & +fi + diff --git a/src/use_cases/robox/loadimages.sh b/src/use_cases/robox/loadimages.sh new file mode 100644 index 0000000..500e0cd --- /dev/null +++ b/src/use_cases/robox/loadimages.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +IMAGES_DIR=~/images +IMAGE_MOUNT_DIR=${IMAGES_DIR}/images/android +mkdir -p ${IMAGES_DIR}/images/android + +if [ ! -e /dev/binder1 ]; then + echo "try to insmod binder" + sudo modprobe ashmem_linux + sudo rmmod binder_linux || true; sudo modprobe binder_linux num_devices=254 + sudo chmod 777 /dev/ashmem /dev/binder* +else + echo "binder already loaded" +fi + +if [[ $(sudo docker images -a | grep robox) ]]; then + echo "robox images already loaded" +else + sudo mount ${IMAGES_DIR}/android.img ${IMAGE_MOUNT_DIR} + cd ${IMAGE_MOUNT_DIR} || exit + sudo tar --numeric-owner -cf- . | sudo docker import - android:robox + sleep 1 + if [[ $(sudo docker images -a | grep robox) ]]; then + echo "docker image loads successfully!" + fi +fi diff --git a/src/use_cases/robox/setupenv/arm64_env_setup.sh b/src/use_cases/robox/setupenv/arm64_env_setup.sh new file mode 100644 index 0000000..00eecc9 --- /dev/null +++ b/src/use_cases/robox/setupenv/arm64_env_setup.sh @@ -0,0 +1,176 @@ +#!/bin/bash + +set -e + +ROBOX_SRC=download/robox + +stage1(){ + echo "Enable source" + sudo sed -i "s/^# deb-src/ deb-src/g" /etc/apt/sources.list + echo "update" + sudo apt update + + echo "Install dependency" + sudo apt install -y dpkg libncurses5-dev libncursesw5-dev libssl-dev cmake cmake-data debhelper dbus google-mock libboost-dev libboost-filesystem-dev libboost-log-dev libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-test-dev libboost-thread-dev libcap-dev libsystemd-dev libdbus-1-dev libegl1-mesa-dev libgles2-mesa-dev libglib2.0-dev libglm-dev libgtest-dev liblxc1 libproperties-cpp-dev libprotobuf-dev libsdl2-dev libsdl2-image-dev lxc-dev pkg-config protobuf-compiler + +#TODO compare "Ubuntu 18.04.1 LTS \n \l" in /etc/issue + sudo apt install -y libboost-filesystem1.62.0 libboost-system1.62.0 docker.io dkms libboost-iostreams1.62.0 + + sudo apt install -y build-essential + sudo apt install -y mesa-common-dev + + echo "install libprocess-cpp3 and libdbus(and dev)" + #TODO compare "Ubuntu 18.04.1 LTS \n \l" in /etc/issue + wget http://launchpadlibrarian.net/291649807/libprocess-cpp3_3.0.1-0ubuntu5_arm64.deb + wget http://launchpadlibrarian.net/291804794/libdbus-cpp5_5.0.0+16.10.20160809-0ubuntu2_arm64.deb + wget http://launchpadlibrarian.net/291804785/libdbus-cpp-dev_5.0.0+16.10.20160809-0ubuntu2_arm64.deb + sudo dpkg -i libprocess-cpp3_3.0.1-0ubuntu5_arm64.deb + sudo dpkg -i libdbus-cpp5_5.0.0+16.10.20160809-0ubuntu2_arm64.deb + sudo dpkg -i libdbus-cpp-dev_5.0.0+16.10.20160809-0ubuntu2_arm64.deb + rm libprocess-cpp3_3.0.1-0ubuntu5_arm64.deb + rm libdbus-cpp5_5.0.0+16.10.20160809-0ubuntu2_arm64.deb + rm libdbus-cpp-dev_5.0.0+16.10.20160809-0ubuntu2_arm64.deb + + echo "Check docker storage driver type" + STORAGE_DRV=`sudo docker info |grep Storage | sed "s/\ //g" | cut -d : -f 2` + if [ "$STORAGE_DRV" == "overlay2" ] || [ "$STORAGE_DRV" == "overlay" ]; then + echo "Docker Storage driver ok" + else + echo "ERROR: docker storage driver should be overlay2" + exit + fi + + echo install desktop + sudo apt install -y xfce4 xfce4-* xrdp + + echo "setup remote desktop" + echo "enable remote desktop for current user" + echo "xfce4-session" > ~/.xsession + echo "enable remote desktop for root" + sudo su -c 'echo "xfce4-session" > /root/.xsession' + sudo /etc/init.d/xrdp restart + + echo "Install the current latest kernel in ubuntu 18.04.1" + #sudo apt install -y linux-generic=4.15.0.163.152 + echo "Please reboot to continue, or the location of kernel module might be wrong!" + exit +} + +stage2() { + echo "Install kernel source" + sudo apt install linux-source-4.15.0 + + echo "downloading robox" + if [ -d "$ROBOX_SRC" ]; then + pushd $ROBOX_SRC + COMMIT=`git log --oneline -n1 e74a3c6cb1be683d31f742b2c8344d0e28577536` + if [ "$COMMIT" != "" ]; then + echo "robox exist, skip git clone" + else + cd .. + rm -rf robox + git clone https://github.com/kunpengcompute/robox.git + cd robox + fi + else + mkdir -p download + pushd download + git clone https://github.com/kunpengcompute/robox.git + cd robox + fi + echo "checkout to tested commit" + git checkout -f e74a3c6cb1be683d31f742b2c8344d0e28577536 + popd + + echo "build anbox module" + pushd $ROBOX_SRC/kernel/robox-modules/ + sudo mkdir -p /etc/modules-load.d/ + sudo cp -p anbox.conf /etc/modules-load.d/ + sudo cp -p 99-anbox.rules /lib/udev/rules.d/ + sudo cp -prT ashmem /usr/src/anbox-ashmem-1 + sudo cp -prT binder /usr/src/anbox-binder-1 + sudo dkms install anbox-ashmem/1 + sudo dkms install anbox-binder/1 + popd + + echo "Install ashmem and binder modules" + sudo modprobe ashmem_linux + sudo rmmod binder_linux || true; sudo modprobe binder_linux num_devices=254 + echo "check if module insert correctly" + lsmod|grep -e ashmem_linux -e binder_linux + sudo chmod 777 /dev/ashmem /dev/binder* + echo "Press any key to continue" + read + + echo "build robox" + mkdir -p download/robox/build + pushd download/robox/build + cmake .. + echo "TODO: make it to idempotent" + sudo sed -i "s/^\#ifndef GLM_ENABLE_EXPERIMENTAL/\#define GLM_ENABLE_EXPERIMENTAL\n\#ifndef GLM_ENABLE_EXPERIMENTAL/g" /usr/include/glm/gtx/transform.hpp + make -j5 + sudo make install + popd + + echo "Enable graphics" + sudo apt install -y xfce4 mesa-utils x11vnc vainfo + + echo "STEP: Installation mesa. mesa is a OpenGL library" + echo "### Clone mesa ###" + mkdir -p sources + pushd sources + if [ ! -d mesa ]; then + sudo apt-get install -y apt-transport-https ca-certificates + sudo update-ca-certificates + git clone https://anongit.freedesktop.org/git/mesa/mesa.git + fi + cd mesa + git checkout -f mesa-19.0.8 + + echo "### Build mesa ###" + sudo apt build-dep -y mesa + sudo apt install -y libomxil-bellagio-dev libva-dev llvm-7 llvm-7-dev python-mako + ./autogen.sh --enable-texture-float --with-gallium-drivers=radeonsi,swrast --with-dri-drivers=radeon,swrast --with-platforms=drm,x11 --enable-glx-tls --enable-shared-glapi --enable-dri3 --enable-lmsensors --enable-gbm --enable-xa --enable-osmesa --enable-vdpau --enable-nine --enable-omx-bellagio --enable-va --with-llvm-prefix=/usr/lib/llvm-7 --enable-llvm --target=aarch64-linux-gnu CFLAGS="-fsigned-char -O2" CPPFLAGS="-fsigned-char -O2" CXXFLAGS="-fsigned-char -O2" --enable-autotools + make -j5 && sudo make install + echo "TODO: make it to idempotent" + sudo sed -i "s/^/\/usr\/local\/lib\n/g" /etc/ld.so.conf + sudo ldconfig + popd +} + +setup_android_image() { + echo "Downloading Android image" + ANDROID_IMG=android.img + ANDROID_MD5=`md5sum $ANDROID_IMG | cut -d \ -f 1` + if [ "$ANDROID_MD5" = "fc44fce9ddfcdca737200468bcb5615e" ]; then + echo "Huawei Android image already exist, skip download" + elif [ -f images/android.img ]; then + echo "Another Android image exist, skip download" + ANDROID_IMG=android.img + else + mkdir -p images + wget https://mirrors.huaweicloud.com/kunpeng/archive/kunpeng_solution/native/android.img -o images/android.img + echo "Downloaded" + fi + + mkdir -p images/android + sudo mount images/$ANDROID_IMG images/android + pushd images/android + sudo tar --numeric-owner -cf - . | sudo docker import - android:robox + popd + sudo umount images/android +} + +configure_gpu(){ + sudo cp -p script/xorg.conf /etc/X11 + IDS=`lspci |grep "AMD.*7100" | cut -d \ -f 1 | sed "s/[:.]/ /g"` + BUSID= ;for id in $IDS; do BUSID+=`echo -n "$((16#$id)) "`; done + BUSID=`echo $BUSID | sed "s/ /:/g" | sed "s/ $//g"` + sudo sed -i "s/BusID \"pci:.*:.*:.*\"\ *$/BusID \"pci:$BUSID\"/g" /etc/X11/xorg.conf +} + +echo "SHOULD Allow apt installer restart service without prompt" +stage1 +stage2 +setup_android_image +configure_gpu diff --git a/src/use_cases/robox/setupenv/build_android.sh b/src/use_cases/robox/setupenv/build_android.sh new file mode 100755 index 0000000..6d03b37 --- /dev/null +++ b/src/use_cases/robox/setupenv/build_android.sh @@ -0,0 +1,115 @@ +#!/bin/bash +set -e + +ANDROID=anbox-work +ROBOX=robox +EXAGEAR=$ROBOX/Exagear + +echo "please set git user and email. e.g." +echo git config --global user.email "you@example.com" +echo git config --global user.name "Your Name" +echo "make use both termial and git could accesss google.com, press enter to continue" +read + +#if [ 0 -gt 1 ]; then +echo "prepare environment" +sudo sed -i "s/# deb-src/ deb-src/g" /etc/apt/sources.list +sudo apt update +sudo apt install -y openjdk-8-jdk +sudo apt install -y libx11-dev libreadline6-dev libgl1-mesa-dev g++-multilib +sudo apt install -y git flex bison gperf build-essential libncurses5-dev +sudo apt install -y tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev +sudo apt install -y dpkg-dev libsdl1.2-dev +sudo apt install -y git-core gnupg flex bison gperf build-essential +sudo apt install -y zip curl zlib1g-dev gcc-multilib g++-multilib +sudo apt install -y libc6-dev +sudo apt install -y lib32ncurses5-dev x11proto-core-dev libx11-dev +sudo apt install -y libgl1-mesa-dev libxml2-utils xsltproc unzip m4 +sudo apt install -y lib32z-dev ccache +sudo apt install -y bc python flex bison gperf libsdl-dev build-essential zip curl + +if [ ! -d robox ]; then + echo "clone robox" + git clone https://github.com/kunpengcompute/robox.git +else + echo "robox directory exist, skip, clone robox" +fi + +echo "try to clone Android" +if [ ! -x /usr/bin/repo ]; then + sudo apt install -y repo + #do not use the official repo because it it too new. + #if [ ! -x ~/bin/repo ]; then + #echo "get repo" + #mkdir ~/bin + #PATH=~/bin:$PATH + #curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo + #chmod a+x ~/bin/repo + #echo "replace with python3" + #sed -i "s/#\!\/usr\/bin\/env python$/#\!\/usr\/bin\/env python3/g" ~/bin/repo +else + echo "repo exist, skip" +fi + +if [ ! -d anbox-work ]; then + echo "clone anbox android code" + mkdir -p anbox-work + cd anbox-work + repo init -u https://github.com/anbox/platform_manifests.git -b anbox + # total disk size is about 160G + repo sync -j16 + echo "fallback the code" + cp -p robox/binaryFiles/snapshot20191206.xml anbox-work/.repo/manifests/ + cd anbox-work + repo init -m snapshot20191206.xml + repo sync --force-sync frameworks/opt/net/wifi + repo sync -d -j16 + cd - +else + echo "anbox-work exist, skip to clone anbox android code" + echo "fallback the code locally" + cp -p robox/binaryFiles/snapshot20191206.xml anbox-work/.repo/manifests/ + cd anbox-work + repo init -m snapshot20191206.xml + repo sync --force-sync frameworks/opt/net/wifi + repo sync -d -j16 --local-only + cd - +fi + +echo "replace anbox code" +rm -rf $ANDROID/vendor/anbox +cp -rp $ROBOX $ANDROID/vendor/anbox +#fi # if [ 0 -gt 1 ]; then + +echo "The exagear" +cp -p $EXAGEAR/android/android-7.1.1_r13.patch $ANDROID +cp -pr $EXAGEAR/android/vendor $ANDROID +ls $ANDROID/vendor/ +# +cp -pr $ROBOX/patch/android-7.1.1_r13-V1.0/* $ANDROID +status=`cat script/status` +if [ ! "PATCH_ANDROID_DONE" == $status ]; then + echo "Patching Android" + cp -pr $ROBOX/patch/patch.sh $ANDROID + cd $ANDROID + sh patch.sh + echo PATCH_ANDROID_DONE > script/status + cd - +else + echo "Patch has already finished, skip patch" +fi + +echo "build Android" +cd $ANDROID +#setup build environment +source build/envsetup.sh +#choose compile env +lunch anbox_arm64-userdebug +export JACK_EXTRA_CURL_OPTIONS=-k +export LC_ALL=C +make -j16 + +echo "generate the android.img" +cd vendor/anbox && ./scripts/create-package.sh $PWD/../../out/target/product/arm64/ramdisk.img $PWD/../../out/target/product/arm64/system.img +ls -lh android.img + diff --git a/src/use_cases/robox/setupenv/xorg.conf b/src/use_cases/robox/setupenv/xorg.conf new file mode 100644 index 0000000..b5566ef --- /dev/null +++ b/src/use_cases/robox/setupenv/xorg.conf @@ -0,0 +1,27 @@ +Section "ServerFlags" + Option "DontVTSwitch" "on" + Option "AutoAddDevices" "off" + Option "AutoEnableDevices" "off" + Option "AutoAddGPU" "off" + Option "AutoBindGPU" "off" +EndSection +Section "Device" + Identifier "AMD" + Driver "amdgpu" + BusID "pci:01:00:00" +EndSection +Section "Monitor" + Identifier "monitor0" + Modeline "1280x720" 74.50 1280 1344 1472 1664 720 723 728 748 -hsync +vsync + Option "enable" "true" +EndSection +Section "Screen" + Identifier "screen0" + Device "AMD" + Monitor "monitor0" + DefaultDepth 24 + SubSection "Display" + Depth 24 + Modes "1280x720" + EndSubSection +EndSection diff --git a/src/use_cases/robox/sm_ctrl.sh b/src/use_cases/robox/sm_ctrl.sh new file mode 100755 index 0000000..1559be1 --- /dev/null +++ b/src/use_cases/robox/sm_ctrl.sh @@ -0,0 +1,243 @@ +#!/bin/bash + +#PATH=download/robox/build/src:$PATH +XDG_RUNTIME_DIR=/run/user/$(id -u) +export XDG_RUNTIME_DIR +#export DBUS_SESSION_BUS_ADDRESS=/run/user/$(id -u)/bus +ANBOX="anbox" +SESSIONMANAGER="$ANBOX session-manager" +BINDMOUNTDIR=$HOME/anbox-data +ANBOX_LOG_LEVEL="debug" +EGL_LOG_LEVEL="debug" +SESSIONMANAGERPID="" +instance=0 +instance="" +FAILED=255 +DISPLAY=:0 +display="" + +function warning() { + echo -e "\e[01;31m${instancenum}: $* \e[0m" +} + +function out() { + if [[ "$QUIET" == "true" ]]; then return; fi + echo -e "\e[01;32m${instancenum}: $* \e[0m" +} + +function debug() { + if [[ "$DEBUG" != "true" ]]; then return; fi + echo -e "\e[01;33m${instancenum}: $* \e[0m" +} + +function check_and_remove_docker() +{ + echo "check_and_remove_docker $instance" + sudo docker ps -a | grep $instance$ > /dev/null 2>&1 + if [[ $? -eq 0 ]]; then + #sudo docker stop $instance + sudo docker rm -f $instance + fi + #out "`sudo docker ps -a | grep $instance`" +} + +function start_framebuffer() +{ + out "${instancenum}: STARTING Frame Buffer" + cmd="sudo Xorg -config /etc/X11/xorg0.conf $display -sharevts" + + # LEE: Might need a sleep here + ps aux | grep Xorg | grep "Xorg[[:space:]]*$display " > /dev/null + if [ $? -gt 0 ]; then + warning "\e[01;31m Create Xorg service\e[0m" + debug $cmd + eval $cmd & + sleep 3 + else + out "The Xorg service has been created \e[0m" + fi +} + +function start_session_manager() +{ + + windowing="" + warning "BINDMOUNTDIR:${BINDMOUNTDIR}, XDG_RUNTIME_DIR:${XDG_RUNTIME_DIR}" + if [ -d ${XDG_RUNTIME_DIR}/anbox/${instancenum} ]; then + sudo rm -rfv ${XDG_RUNTIME_DIR}/anbox/${instancenum} + sudo rm -rfv ${BINDMOUNTDIR}/${instancenum} + fi + + PID=$(ps aux | grep session-manager | grep "run-multiple=${instancenum}" | column -t | cut -d$' ' -f3) + if [[ "$PID" != "" ]]; then + out "exsist , STOPPING Session Manager (${PID})" + kill -9 ${PID} + else + out "NOT stopping Session Manager, it's not running" + fi + + ## can't run as root + cpurange=$((4*instancenum))-$((4*instancenum+3)) + #taskset -c $cpurange anbox session-manager --run-multiple=1 --standalone --experimental windowing="" --window-size=720,1280 + cmd="taskset -c $cpurange $SESSIONMANAGER --run-multiple=${instancenum} --standalone --single-window --experimental $windowing --window-size=720,1280" + + echo $cmd + export DISPLAY=$DISPLAY + export EGL_PLATFORM=x11 + export EGL_LOG_LEVEL="fatal" + export SDL_VIDEODRIVER=x11 + + #eval $cmd + eval "${cmd}" & + if [ $? -ne 0 ]; then + warning "session manager failed" + exit + fi + SESSIONMANAGERPID=$(ps aux | grep session-manager | grep "run-multiple=${instancenum}" | column -t | cut -d$' ' -f3) + + TIMEOUT=0 + while true; do + ps -h $SESSIONMANAGERPID > /dev/null + if [[ $? -gt 0 ]]; then + if [[ $TIMEOUT -gt 2 ]]; then + warning "FAILED to start the Session Manager" + return $FAILED + else + TIMEOUT=$(($TIMEOUT+1)) + fi + sleep 2 + else + break + fi + done +} + +function configure_networking() +{ + #unique_ip=${instancenum} + unique_ip=$(ps -ef | grep "proxy" | grep "172.17.0" | awk '{print $16}' | awk -F "." '{print $4}' | sort -nur | sed -n '1p') + if [[ ! $unique_ip ]]; then + unique_ip=1 + fi + unique_ip=$(($unique_ip + 1)) + final_ip=172.17.0.$unique_ip + + out "CREATING network configuration (using $final_ip)" + + mkdir -p ${BINDMOUNTDIR}/${instancenum}/data/misc/ethernet + echo "mkdir -p ${BINDMOUNTDIR}/${instancenum}/data/misc/ethernet" + + $ANBOX generate-ip-config --ip=$final_ip --gateway=172.17.0.1 + if [[ $? -ne 0 ]]; then + warning "FAILED to configure Networking" + return $FAILED + fi + + cp ipconfig.txt ${BINDMOUNTDIR}/${instancenum}/data/misc/ethernet +} + +function start() +{ + ps aux | grep -v grep | grep "$instance \|$instance$" > /dev/null + if [[ $? -eq 0 ]]; then + OUT=$(ps aux | grep -v grep | grep "$instance \|$instance$") + out $OUT + warning "$instance is already running -- please stop it before continuing" + return $FAILED + fi + + sudo docker network inspect bridge | grep \"$instance\" > /dev/null + if [[ $? -eq 0 ]]; then + sudo docker network disconnect -f bridge $instance + fi + + # Export current log level values + export ANBOX_LOG_LEVEL=$ANBOX_LOG_LEVEL + export EGL_LOG_LEVEL=$EGL_LOG_LEVEL + start_framebuffer + # Raise system resource limits - required for many containers + sudo sysctl -w fs.inotify.max_user_instances=8192 > /dev/null + sudo sysctl -w fs.file-max=1000000 > /dev/null + sudo sysctl -w kernel.shmmni=24576 > /dev/null + sudo sysctl -w kernel.pid_max=200000 > /dev/null + + ulimit -n 4096 + ulimit -s unlimited + ulimit -c unlimited + + start_session_manager + + debug "Ensuring all sockets are useable" + +} + +function stop() +{ + + ps aux | grep -v grep | grep "run-multiple=${instancenum}" > /dev/null + if [[ $? -ne 0 ]]; then + out "Nothing to do" + # Remove possible remnent files anyway, just in case + sudo rm -rf ${XDG_RUNTIME_DIR}/anbox/${instancenum} + sudo rm -rf ${BINDMOUNTDIR}/${instancenum} + exit 0 + fi + # Stop Docker + sudo docker ps -a | grep $instance$ > /dev/null + if [[ $? -eq 0 ]]; then + out "REMOVING Docker" + sudo docker rm -f $instance + if [[ $? -ne 0 ]]; then + warning "FAILED to remove Docker container" + fi + else + out "NOT stopping Docker, it's not running" + fi + + # Stop Session Manager + PID=$(ps aux | grep -v "grep" | grep "session-manager" | grep "run-multiple=${instancenum}" | column -t | cut -d$' ' -f3) + if [[ "$PID" != "" ]]; then + out "STOPPING Session Manager (${PID})" + if [[ "$PERF" == "true" ]]; then + kill -INT ${PID} + else + kill -9 ${PID} + fi + else + out "NOT stopping Session Manager, it's not running" + fi + + out sudo rm -rf ${XDG_RUNTIME_DIR}/anbox/${instancenum} + out sudo rm -rf ${BINDMOUNTDIR}/${instancenum} + + + sudo rm -f /tmp/.X${instancenum}-lock + + # Remove unattached shared memory (VNC does not free it properly) + IDS=$(ipcs -m | grep '^0x' | grep "$USER" | awk '{print $2, $6}' | grep ' 0$' | awk '{print $1}') + for id in $IDS; do + ipcrm shm "${id}" &> /dev/null + done +} + +main () +{ + mkdir -p "${XDG_RUNTIME_DIR}" + #mkdir -p $DBUS_SESSION_BUS_ADDRESS + instancenum=$2 + instance=instance${instancenum} + if [[ "$1" == "start" ]]; then + out "Attempting to start instance $instance\n" + start + elif [[ "$1" == "kill" ]]; then + kill + elif [[ "$1" == "stop" ]]; then + out "Attempting to stop instance $instance\n" + stop + fi + + return $? +} + +main "$@" +exit $? diff --git a/src/use_cases/robox/test_config/ys_perf_exporter.yml b/src/use_cases/robox/test_config/ys_perf_exporter.yml new file mode 100755 index 0000000..b9ab0e3 --- /dev/null +++ b/src/use_cases/robox/test_config/ys_perf_exporter.yml @@ -0,0 +1,110 @@ +{ + "kmem": { + "events": [ + ["instructions", "instructions_retired"], + "cycles" + ], + "custom_events": [ + { + "type": 4, + "config": [ + "0x5300c0" + ], + "name": "instructions_retired" + } + ] + }, + "kmem": { + "events": [ + "mm_page_free" + ], + "custom_events": [ + { + "type": 18, + "config": [ + "0x5300" + ], + "name": "cas_count_write1" + } + ] + }, + "kmem": { + "events": [ + "mm_page_alloc" + ], + "custom_events": [ + { + "type": 19, + "config": [ + "0x5301" + ], + "name": "cas_count_write2" + } + ] + }, + "kmem": { + "events": [ + "kfree" + ], + "custom_events": [ + { + "type": 20, + "config": [ + "0x5302" + ], + "name": "cas_count_write3" + } + ] + }, + "kmem": { + "events": [ + "kmalloc" + ], + "custom_events": [ + { + "type": 21, + "config": [ + "0x5303" + ], + "name": "cas_count_write4" + } + ] + }, + "sched": { + "events": [ + "sched_wakeup" + ], + "custom_events": [ + { + "type": 22, + "config": [ + "0x5304" + ], + "name": "cas_count_write5" + } + ] + }, + "sched": { + "events": [ + "sched_migrate_task" + ], + "custom_events": [ + { + "type": 23, + "config": [ + "0x5305" + ], + "name": "cas_count_write6" + } + ] + }, + "custom_events": [ + { + "type": 1, + "config": [ + "0x04" + ], + "name": "cache-misses" + } + ] +} diff --git a/src/use_cases/robox/test_config/ys_prometheus.yml b/src/use_cases/robox/test_config/ys_prometheus.yml new file mode 100755 index 0000000..60d9787 --- /dev/null +++ b/src/use_cases/robox/test_config/ys_prometheus.yml @@ -0,0 +1,39 @@ +# my global config +global: + scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. + evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. + # scrape_timeout is set to the global default (10s). + +# Alertmanager configuration +alerting: + alertmanagers: + - static_configs: + - targets: + # - alertmanager:9093 + +# Load rules once and periodically evaluate them according to the global 'evaluation_interval'. +rule_files: + # - "first_rules.yml" + # - "second_rules.yml" + +# A scrape configuration containing exactly one endpoint to scrape: +# Here it's Prometheus itself. +scrape_configs: + # The job name is added as a label `job=` to any timeseries scraped from this config. + #- job_name: "prometheus" + - job_name: cadvisor + + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + # + static_configs: + - targets: ['localhost:8080'] + - job_name: prometheus + static_configs: + - targets: ['localhost:9090'] + - job_name: node + static_configs: + - targets: ['localhost:9100'] + - job_name: perf + static_configs: + - targets: ['localhost:8585'] -- 2.16.6