2022-06-26 18:04:47 +08:00

136 lines
2.7 KiB
Bash
Executable File

#!/bin/sh
# Author Xiaobao(xiaobao@linkease.com)
ACTION=${1}
WRLOCK=/var/lock/ubuntu.lock
LOGFILE=/var/log/ubuntu.log
LOGEND="XU6J03M6"
shift 1
IMAGE_NAME=''
# linkease/desktop-ubuntu-full-arm64:latest
# linkease/desktop-ubuntu-standard-arm64:latest
# linkease/desktop-ubuntu-full-amd64:latest
# linkease/desktop-ubuntu-standard-amd64:latest
check_params() {
if [ -z "${WRLOCK}" ]; then
echo "lock file not found"
exit 1
fi
if [ -z "${LOGFILE}" ]; then
echo "logger file not found"
exit 1
fi
}
lock_run() {
local lock="$WRLOCK"
exec 300>$lock
flock -n 300 || return
do_run
flock -u 300
return
}
run_action() {
if check_params; then
lock_run
fi
}
get_image() {
local version=`uci get ubuntu.@ubuntu[0].version 2>/dev/null`
ARCH="arm64"
if echo `uname -m` | grep -Eqi 'x86_64'; then
ARCH='amd64'
elif echo `uname -m` | grep -Eqi 'aarch64'; then
ARCH='arm64'
else
ARCH='arm64'
fi
IMAGE_NAME=linkease/desktop-ubuntu-${version}-${ARCH}:latest
}
do_install() {
local PASSWORD=`uci get ubuntu.@ubuntu[0].password 2>/dev/null`
local PORT=`uci get ubuntu.@ubuntu[0].port 2>/dev/null`
[ -z "$PASSWORD" ] && PASSWORD="password"
[ -z "$PORT" ] && PORT=6901
echo "docker create pcnet" >>${LOGFILE}
docker network ls -f "name=docker-pcnet" | grep -q docker-pcnet || \
docker network create -d bridge --subnet=10.10.100.0/24 --ip-range=10.10.100.0/24 --gateway=10.10.100.1 docker-pcnet
get_image
echo "docker pull ${IMAGE_NAME}" >>${LOGFILE}
docker pull ${IMAGE_NAME} >>${LOGFILE} 2>&1
docker rm -f ubuntu
# --net="docker-pcnet" \
docker run -d --name ubuntu \
--dns=223.5.5.5 -u=0:0 \
-v=/mnt:/mnt:rslave \
--ip=10.10.100.9 \
--shm-size=512m \
-p ${PORT}:6901 \
-e VNC_PW=${PASSWORD} \
-e VNC_USE_HTTP=0 \
--restart unless-stopped \
$IMAGE_NAME >>${LOGFILE} 2>&1
RET=$?
if [ "${RET}" = "0" ]; then
# mark END, remove the log file
echo ${LOGEND} >> ${LOGFILE}
sleep 5
rm -f ${LOGFILE}
else
# reserve the log
echo "docker run ${IMAGE_NAME} failed" >>${LOGFILE}
echo ${LOGEND} >> ${LOGFILE}
fi
exit ${RET}
}
# run in lock
do_run() {
case ${ACTION} in
"install")
do_install
;;
"upgrade")
do_install
;;
esac
}
usage() {
echo "usage: wxedge sub-command"
echo "where sub-command is one of:"
echo " install Install the ubuntu"
echo " upgrade Upgrade the ubuntu"
echo " remove Remove the ubuntu"
}
case ${ACTION} in
"install")
run_action
;;
"upgrade")
run_action
;;
"remove")
docker rm -f ubuntu
;;
*)
usage
;;
esac