|
@@ -0,0 +1,394 @@
|
|
|
+#!/bin/bash
|
|
|
+MY_PATH="`dirname \"$0\"`" # relative
|
|
|
+# echo "1"$MY_PATH
|
|
|
+MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
|
|
|
+
|
|
|
+
|
|
|
+function set-title() {
|
|
|
+ if [[ -z "$ORIG" ]]; then
|
|
|
+ ORIG=$PS1
|
|
|
+ fi
|
|
|
+ TITLE="\[\e]2;$*\a\]"
|
|
|
+ PS1=${ORIG}${TITLE}
|
|
|
+}
|
|
|
+set-title 【可视柜台应用程序安装脚本】
|
|
|
+clear
|
|
|
+
|
|
|
+installType=@INSTALLSCRIPT_TYPE@
|
|
|
+echo "[RVCTermianal] === Install Start === "
|
|
|
+echo 安装脚本模式: $installType
|
|
|
+
|
|
|
+curr_timestamp=`date "+%Y%m%d-%H%M%S.%3N"`
|
|
|
+lightdm_file=/etc/lightdm/lightdm.conf
|
|
|
+rvc_pkg_rvc=${MY_PATH}/rvc
|
|
|
+rvc_install_path_root="/opt"
|
|
|
+rvc_install_path_rvc_dir=${rvc_install_path_root}/rvc
|
|
|
+rvc_install_path_Run_dir=${rvc_install_path_root}/Run
|
|
|
+rvc_install_path_hardware_dir=${rvc_install_path_Run_dir}/hardwarecfg
|
|
|
+rvc_install_path_versions_dir=${rvc_install_path_Run_dir}/version
|
|
|
+res=0
|
|
|
+
|
|
|
+#设置开机自动登录用户(有做冗余判断)
|
|
|
+setup_autologin()
|
|
|
+{
|
|
|
+ given_user=$1
|
|
|
+ given_sudoers_file=$2
|
|
|
+
|
|
|
+ if [ ! -f "$given_sudoers_file" ]; then
|
|
|
+ echo "[Seat:*]" > $given_sudoers_file
|
|
|
+ # echo "autologin-guest=false" >> $given_sudoers_file
|
|
|
+ echo "autologin-user=$given_user" >> $given_sudoers_file
|
|
|
+ echo "autologin-user-timeout=0" >> $given_sudoers_file
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ "$(grep -c "^\\s*autologin-user=${given_user}" $given_sudoers_file)" -gt 0 ]; then
|
|
|
+ echo "autologin-user is already setted in ^lightdm.conf^"
|
|
|
+ else
|
|
|
+ echo "setting autologin-user in ^$given_sudoers_file^"
|
|
|
+ #sed -i.bak -E "s|^#(autologin-user=).*|\\1$given_user|;s|^#(autologin-user-timeout=).*|\\0|" $given_sudoers_file
|
|
|
+ sed -i "s/^\s*#\s*autologin-user=/autologin-user=/g;s/autologin-user=.*$/autologin-user=$given_user/g" $given_sudoers_file
|
|
|
+ #sed -i "s/^#autologin-user=$/autologin-user=${given_user}/" $given_sudoers_file
|
|
|
+ #sed -i "s/^#autologin-user-timeout=$/autologin-user-timeout=0/" $given_sudoers_file
|
|
|
+ sed -i "s/^\s*#\s*autologin-user-timeout=/autologin-user-timeout=/g;s/autologin-user-timeout=.*$/autologin-user-timeout=0/g" $given_sudoers_file
|
|
|
+ fi
|
|
|
+}
|
|
|
+
|
|
|
+#设置免密使用root权限(有做冗余判断)
|
|
|
+sudo_priviledge()
|
|
|
+{
|
|
|
+
|
|
|
+ given_user=$1
|
|
|
+ given_sudoers_file=$2
|
|
|
+
|
|
|
+ if [ -e ${given_sudoers_file}.tmp -o "$(pidof visudo)" ]; then
|
|
|
+ echo "[ERROR]: ${given_sudoers_file} is working now, wait a little and then try again later"
|
|
|
+ return 2
|
|
|
+ fi
|
|
|
+
|
|
|
+ ret=0
|
|
|
+ echo "[INFO]: to process editing sudoers file..."
|
|
|
+ cp ${given_sudoers_file} ${given_sudoers_file}.tmp
|
|
|
+ chmod 0640 ${given_sudoers_file}.tmp
|
|
|
+ cat ${given_sudoers_file}.tmp | grep 'includedir /etc/sudoers.d' > /dev/null
|
|
|
+ if [ $? = 0 ]; then
|
|
|
+ echo "[INFO]: '#includedir /etc/sudoers.d' already exists in /etc/sudoers file"
|
|
|
+ else
|
|
|
+ echo "#includedir /etc/sudoers.d" >> ${given_sudoers_file}.tmp
|
|
|
+ ret=1
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ "`cat /etc/sudoers | grep ${given_user} | grep ALL=\(ALL\)`" != "" ]; then
|
|
|
+ echo "[WARN]: sudoers file has been loaded up all(all) config"
|
|
|
+ else
|
|
|
+ new_entry="${given_user} ALL=(ALL) ALL"
|
|
|
+ echo "${new_entry}" >> ${given_sudoers_file}.tmp
|
|
|
+ ret=1
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ "`cat /etc/sudoers|grep ${given_user}|grep Run`" != "" ]; then
|
|
|
+ echo "[WARN]: sudoers file has been loaded up rvc config"
|
|
|
+ else
|
|
|
+ new_entry="${given_user} ALL=(ALL) NOPASSWD: /opt/Run/version/*, NOPASSWD: /bin/sh, NOPASSWD: /bin/bash"
|
|
|
+ echo "${new_entry}" >> ${given_sudoers_file}.tmp
|
|
|
+ ret=1
|
|
|
+ fi
|
|
|
+
|
|
|
+ chmod 0440 ${given_sudoers_file}.tmp
|
|
|
+
|
|
|
+ if visudo -c -f ${given_sudoers_file}.tmp ; then
|
|
|
+ echo check syntax correct on ${given_sudoers_file}.tmp
|
|
|
+ else
|
|
|
+ echo "[ERROR]: syntax check failed on file ${given_sudoers_file}"
|
|
|
+ rm ${given_sudoers_file}.tmp
|
|
|
+ #if [ -f "${given_sudoers_file}.backup" ]; then
|
|
|
+ #fi
|
|
|
+ return 3
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ $ret -eq 1 ]; then
|
|
|
+ echo "[SUCCESS]: config file has been change !!"
|
|
|
+ cp ${given_sudoers_file} ${given_sudoers_file}.backup
|
|
|
+ mv ${given_sudoers_file}.tmp ${given_sudoers_file}
|
|
|
+ ret=0
|
|
|
+ else
|
|
|
+ echo "[WARN]: config file not change"
|
|
|
+ rm ${given_sudoers_file}.tmp
|
|
|
+ ret=0
|
|
|
+ fi
|
|
|
+
|
|
|
+ return $ret
|
|
|
+}
|
|
|
+
|
|
|
+# check root priviledge
|
|
|
+if [ $(id -u) != 0 ]; then
|
|
|
+ #红底白字
|
|
|
+ echo -e "\033[41;37m [ERROR] === 该安装脚本需要以ROOT权限启动,请在命令行窗口添加sudo指令执行 'sudo bash $0',如果无法执行相关指令,请先确认系统已开启开发者模式 === \033[0m"
|
|
|
+ echo "10 秒后退出"
|
|
|
+ for i in $(seq 1 10);do echo $i 秒......; sleep 1s; done
|
|
|
+ exit 0
|
|
|
+fi
|
|
|
+
|
|
|
+#获取当前登录的用户名称,这里可以考虑用另外一种优化的方法
|
|
|
+rvc_user=$USER
|
|
|
+if [ -z "$rvc_user" -o "$rvc_user" = "root" ]; then
|
|
|
+ users=$(cat /etc/passwd | awk -F: '$3>=500' | cut -f 1 -d :)
|
|
|
+ echo "user list: $users"
|
|
|
+ cnt=0
|
|
|
+ for var in $(echo ${users} | awk '{split($0,arr,",");for(i in arr) print arr[i]}')
|
|
|
+ do
|
|
|
+ if [ ${var} != 'nobody' -a ${var} != 'systemd-coredump' -a ${var} != 'liuwt' -a ${var} != 'deepin-anything-server' ]; then
|
|
|
+ cnt=$((${cnt}+1))
|
|
|
+ rvc_user=${var}
|
|
|
+ fi
|
|
|
+ done
|
|
|
+ if [ $cnt -ne 1 ]; then
|
|
|
+ echo "too many users: $cnt"
|
|
|
+ rvc_user=''
|
|
|
+ else
|
|
|
+ echo "aim user: $rvc_user"
|
|
|
+ fi
|
|
|
+fi
|
|
|
+
|
|
|
+#上保险,即另外一种优化的方法
|
|
|
+if [ -z "$rvc_user" -o "$rvc_user" = "root" ]; then
|
|
|
+ name=$(whoami)
|
|
|
+ exec="bash $ABS_CURRENT_PATH/sub_install_user.sh"
|
|
|
+ pid=$(pgrep startdde)
|
|
|
+ . <(xargs -0 bash -c 'printf "export %q\n" "$@"' -- </proc/$pid/environ)
|
|
|
+ name=$(ps -o uname= -p "${pid}")
|
|
|
+ echo new fetch name: $name
|
|
|
+ rvc_user=$name
|
|
|
+fi
|
|
|
+
|
|
|
+if [ $installType -eq 4 ]; then
|
|
|
+ rm /etc/xdg/autostart/spexplorerauto.desktop > /dev/null 2>&1
|
|
|
+ rm /usr/share/applications/spexplorerauto.desktop > /dev/null 2>&1
|
|
|
+ rm -rf /opt/rvc > /dev/null 2>&1
|
|
|
+ rm -rf /opt/Run > /dev/null 2>&1
|
|
|
+ rm -rf /opt/wlog > /dev/null 2>&1
|
|
|
+
|
|
|
+ echo "[INFO]: set menu tool as show mode..."
|
|
|
+ gsettings set com.deepin.dde.dock hide-mode keep-showing
|
|
|
+ echo "[INFO]: set menu tool as show mode done!"
|
|
|
+
|
|
|
+ papers_dir=/usr/share/wallpapers/deepin
|
|
|
+ papers_bak_dir=/usr/share/wallpapers/deepin_bak
|
|
|
+ if [ -d $papers_bak_dir ]; then
|
|
|
+ rm -rf $papers_dir/* > /dev/null 2>&1
|
|
|
+ cp $papers_bak_dir/* $papers_dir > /dev/null 2>&1
|
|
|
+ rm -rf $papers_bak_dir > /dev/null 2>&1
|
|
|
+ fi
|
|
|
+
|
|
|
+ if [ -z "$rvc_user" ]; then
|
|
|
+ echo -e "\033[41;37m [ERROR]: 无法获取当前用户名称(用户名为空),退出程序 \033[0m"
|
|
|
+ exit 1
|
|
|
+ elif [ "$rvc_user" = "root" ]; then
|
|
|
+ echo -e "\033[41;37m [ERROR]: 无法获取当前用户名称(用户名无效),退出程序 \033[0m"
|
|
|
+ exit 2
|
|
|
+ fi
|
|
|
+ rm /home/$rvc_user/Desktop/spexplorerauto.desktop > /dev/null 2>&1
|
|
|
+
|
|
|
+ echo [INFO]恢复桌面组件应用程序的执行权限
|
|
|
+ sudo chmod +x /usr/bin/dde-desktop
|
|
|
+ sudo chmod +x /usr/bin/dde-dock
|
|
|
+
|
|
|
+ echo -e "\033[42;37m [INFO]: === 所有安装步骤执行成功,正常退出=== \033[0m"
|
|
|
+ exit 0
|
|
|
+fi
|
|
|
+
|
|
|
+echo "to clear the rvc terminal processes..."
|
|
|
+killall -9 spshell > /dev/null 2>&1
|
|
|
+killall -9 sphost > /dev/null 2>&1
|
|
|
+killall -9 guardian > /dev/null 2>&1
|
|
|
+killall -9 uosbrowser > /dev/null 2>&1
|
|
|
+killall -9 browser > /dev/null 2>&1
|
|
|
+killall -s 9 `ps -aux | grep browser | awk '{print $2}'` > /dev/null 2>&1
|
|
|
+
|
|
|
+echo "============== previous installation custom scripts start =============="
|
|
|
+user1=$(ps -o user= -p $$ | awk '{print $1}')
|
|
|
+echo "user1: $user1"
|
|
|
+user2=$(whoami)
|
|
|
+echo "user2: $user2"
|
|
|
+#user3=$(logname)
|
|
|
+#echo "user3: $user3"
|
|
|
+
|
|
|
+# 备份壁纸
|
|
|
+papers_dir=/usr/share/wallpapers/deepin
|
|
|
+papers_bak_dir=/usr/share/wallpapers/deepin_bak
|
|
|
+
|
|
|
+if [ -f "${papers_dir}/WallPaper1920.png" ]; then
|
|
|
+ echo "[INFO]: CMB WallPaper has been exist, skip latter copy procedure"
|
|
|
+else
|
|
|
+ if [ ! -d $papers_bak_dir ]; then
|
|
|
+ mkdir -p ${papers_bak_dir}
|
|
|
+ cp $papers_dir/* $papers_bak_dir
|
|
|
+ fi
|
|
|
+ rm -rf $papers_dir/* > /dev/null 2>&1
|
|
|
+ cp ${rvc_pkg_rvc}/Resources/WallPaper1280.png ${papers_dir}
|
|
|
+ cp ${rvc_pkg_rvc}/Resources/WallPaper1920.png ${papers_dir}
|
|
|
+fi
|
|
|
+
|
|
|
+echo "============== previous installation custom scripts done =============="
|
|
|
+
|
|
|
+
|
|
|
+echo "============== during installation custom scripts start =============="
|
|
|
+#拷贝终端版本
|
|
|
+
|
|
|
+# fetch the version full path at pkg
|
|
|
+version_dir=$(find ${MY_PATH}/Run/version/ -maxdepth 1 -regex ".*[0-9\.]$" -type d)
|
|
|
+echo version dir: $version_dir
|
|
|
+slen=${#MY_PATH}
|
|
|
+rel_version_dir=${version_dir:$slen+1}
|
|
|
+echo ${rel_version_dir}
|
|
|
+
|
|
|
+# 如果版本中有root.ini,移除测试的root.ini文件
|
|
|
+if [ -f ${MY_PATH}/Run/hardwarecfg/root.ini ]; then
|
|
|
+ sudo rm ${MY_PATH}/Run/hardwarecfg/root.ini
|
|
|
+fi
|
|
|
+if [ -d ${MY_PATH}/Run/runinfo ]; then
|
|
|
+ sudo rm -rf ${MY_PATH}/Run/runinfo
|
|
|
+fi
|
|
|
+
|
|
|
+if [ ! -f $rvc_install_path_hardware_dir/root.ini ]; then
|
|
|
+ #delete /opt/Run
|
|
|
+ sudo rm -rf ${rvc_install_path_Run_dir} > /dev/null 2>&1
|
|
|
+ sudo rm -rf ${rvc_install_path_rvc_dir} > /dev/null 2>&1
|
|
|
+fi
|
|
|
+
|
|
|
+#copy the Run pkg to run path
|
|
|
+echo to copy Run package...
|
|
|
+if [ ! -d $rvc_install_path_Run_dir ]; then
|
|
|
+ sudo mkdir -p ${rvc_install_path_Run_dir}
|
|
|
+fi
|
|
|
+
|
|
|
+sudo cp -rvf $MY_PATH/Run ${rvc_install_path_root}
|
|
|
+echo copy Run package completely!
|
|
|
+
|
|
|
+#copy the res pkg to rvc path
|
|
|
+echo to copy rvc Audio files...
|
|
|
+if [ ! -d $rvc_install_path_rvc_dir ]; then
|
|
|
+ sudo mkdir -p ${rvc_install_path_rvc_dir}
|
|
|
+fi
|
|
|
+if [ ! -d $rvc_install_path_rvc_dir/adData ]; then
|
|
|
+ sudo mkdir -p ${rvc_install_path_rvc_dir}/adData
|
|
|
+fi
|
|
|
+if [ ! -d $rvc_install_path_rvc_dir/Resources ]; then
|
|
|
+ sudo mkdir -p ${rvc_install_path_rvc_dir}/Resources
|
|
|
+fi
|
|
|
+sudo cp -rvf $MY_PATH/rvc/adData/Audio ${rvc_install_path_rvc_dir}/adData
|
|
|
+echo copy rvc Audio files completely!
|
|
|
+#sudo cp -rvf $MY_PATH/rvc/adData/Video ${rvc_install_path_rvc_dir}/adData
|
|
|
+#echo copy rvc Video files completely!
|
|
|
+echo "[INFO]: Copy application icon to Resource dir..."
|
|
|
+cp ${rvc_pkg_rvc}/Resources/logo.png ${rvc_install_path_rvc_dir}/Resources
|
|
|
+
|
|
|
+
|
|
|
+echo "[INFO]: change the run scripts priviledge..."
|
|
|
+echo ${rvc_install_path_rvc_dir}
|
|
|
+echo ${rvc_install_path_root}/${rel_version_dir}
|
|
|
+sudo chmod 777 ${rvc_install_path_root}
|
|
|
+sudo chmod a+rw -R ${rvc_install_path_rvc_dir}
|
|
|
+sudo chmod a+rw -R ${rvc_install_path_hardware_dir}
|
|
|
+
|
|
|
+sudo chmod 777 -R ${rvc_install_path_root}/${rel_version_dir}
|
|
|
+sudo chmod 777 ${rvc_install_path_versions_dir}/spexplorer.sh
|
|
|
+sudo chmod 777 ${rvc_install_path_versions_dir}/sudo_spexplorer.sh
|
|
|
+sudo chmod a+rw ${rvc_install_path_versions_dir}/active.txt
|
|
|
+sudo chmod a+rw ${rvc_install_path_versions_dir}
|
|
|
+sudo chmod a+rw ${rvc_install_path_Run_dir}
|
|
|
+
|
|
|
+echo "[INFO]: change the run scripts priviledge done!"
|
|
|
+
|
|
|
+echo "============== during installation custom scripts done =============="
|
|
|
+
|
|
|
+echo "============== post installation custom scripts start =============="
|
|
|
+
|
|
|
+sudoers_file=/etc/sudoers
|
|
|
+if [ -z "$rvc_user" ]; then
|
|
|
+ echo -e "\033[41;37m [ERROR]: 无法获取当前用户名称(用户名为空),退出程序 \033[0m"
|
|
|
+ exit 1
|
|
|
+elif [ "$rvc_user" = "root" ]; then
|
|
|
+ echo -e "\033[41;37m [ERROR]: 无法获取当前用户名称(用户名无效),退出程序 \033[0m"
|
|
|
+ exit 2
|
|
|
+fi
|
|
|
+
|
|
|
+echo "[INFO]: Going to add entry into /etc/sudoers file for user: $rvc_user"
|
|
|
+
|
|
|
+if [ ! -d '/etc/sudoers.d' ]; then
|
|
|
+ mkidr /etc/sudoers.d
|
|
|
+ chmod 750 /etc/sudoers.d
|
|
|
+fi
|
|
|
+
|
|
|
+sudo_priviledge ${rvc_user} ${sudoers_file}
|
|
|
+res=$?
|
|
|
+if [ $res -eq 0 ]; then
|
|
|
+
|
|
|
+ # 清理桌面数据
|
|
|
+ echo "[INFO]: rm file under desktop directory..."
|
|
|
+ rm -rf /home/$rvc_user/Desktop/* > /dev/null 2>&1
|
|
|
+ echo "[INFO]: rm file under desktop directory done!"
|
|
|
+
|
|
|
+ echo "[INFO]: setup user $rvc_user auto login.."
|
|
|
+ setup_autologin ${rvc_user} ${lightdm_file}
|
|
|
+
|
|
|
+ #设置桌面图标
|
|
|
+ echo "[INFO]: Copy application shortkeys to menu tools..."
|
|
|
+ cp ${rvc_pkg_rvc}/Resources/spexplorerauto.desktop /usr/share/applications
|
|
|
+ echo "[INFO]: Active application icon autorun after boot..."
|
|
|
+ cp ${rvc_pkg_rvc}/Resources/spexplorerauto.desktop /etc/xdg/autostart/
|
|
|
+ echo "[INFO]: Copy application icon to desktop..."
|
|
|
+ cp ${rvc_pkg_rvc}/Resources/spexplorerauto.desktop /home/$rvc_user/Desktop
|
|
|
+
|
|
|
+ if [ $installType -eq 1 ]; then
|
|
|
+ echo [INFO]去除桌面组件应用程序的执行权限,实现开机黑屏
|
|
|
+ sudo chmod -x /usr/bin/dde-desktop
|
|
|
+ sudo chmod -x /usr/bin/dde-dock
|
|
|
+ fi
|
|
|
+else
|
|
|
+ echo -e "\033[41;37m [ERROR]: 设置SUDO权限失败!! \033[0m"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+#去掉密钥环,之前出现过这种问题,统信指示移除该文件即可
|
|
|
+keyring_file=/home/$rvc_user/.local/share/keyrings/login.keyring
|
|
|
+if [ -f "$keyring_file" ]; then
|
|
|
+ rm $keyring_file
|
|
|
+ echo "[INFO]: remove keyring file."
|
|
|
+fi
|
|
|
+
|
|
|
+# 设置隐藏菜单栏
|
|
|
+echo "[INFO]: set menu tool as hidden mode..."
|
|
|
+gsettings set com.deepin.dde.dock hide-mode keep-hidden
|
|
|
+echo "[INFO]: set menu tool as hidden mode done!"
|
|
|
+
|
|
|
+browserDownURLDEV="http://99.12.23.78/uos/uosbrowser_5.3.52-1.zip"
|
|
|
+broswerDownPRD="http://ecsnp01.s3ecs.itcenter.cmbchina.cn:9020/lr18.24-upgrade-pack-prd/uosbrowser_5.3.52-1_22061501_02/origin/uosbrowser_5.3.52-1_22061501.zip?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240508T120010Z&X-Amz-SignedHeaders=host&X-Amz-Expires=604800&X-Amz-Credential=lr18.24-upgrade-prd%2F20240508%2Fcn-north-1%2Fs3%2Faws4_request&X-Amz-Signature=67950161ab9de5d35b7556a6fe4e8d102b1269cc72c22784f009d36d654d4413"
|
|
|
+browserDownURL=${browserDownURLDEV}
|
|
|
+if [ $installType -eq 0 ]; then
|
|
|
+ echo ${browserDownURL}
|
|
|
+ if [ "`dpkg -l | grep org.deepin.browser | awk '{print $3}'`" == "" ]; then
|
|
|
+ echo "[WARN]: 未安装最新的UOS浏览器,将自动下载安装UOS浏览器"
|
|
|
+ echo 下载最新的UOS浏览器...
|
|
|
+ rm -rf ${MY_PATH}/Tmp > /dev/null 2>&1
|
|
|
+ mkdir -p ${MY_PATH}/Tmp > /dev/null 2>&1
|
|
|
+ mkdir -p ${MY_PATH}/Tmp/Extra > /dev/null 2>&1
|
|
|
+ wget -nv ${browserDownURL} -O ${MY_PATH}/Tmp/UOSBrowser.zip
|
|
|
+ if [ $? -ne 0 ]; then
|
|
|
+ echo "[WARN]下载最新的UOS浏览器失败"
|
|
|
+ else
|
|
|
+ echo 下载最新的UOS浏览器 完成!
|
|
|
+ unzip -q ${MY_PATH}/Tmp/UOSBrowser.zip -d ${MY_PATH}/Tmp/Extra
|
|
|
+ chmod 777 -R ${MY_PATH}/Tmp/Extra
|
|
|
+ sudo dpkg -i ${MY_PATH}/Tmp/Extra/**/*.deb
|
|
|
+ fi
|
|
|
+ rm -rf ${MY_PATH}/Tmp > /dev/null 2>&1
|
|
|
+ else
|
|
|
+ echo "[INFO]: 已安装最新的UOS浏览器"
|
|
|
+ fi
|
|
|
+fi
|
|
|
+
|
|
|
+echo "============== post installation custom scripts done =============="
|
|
|
+
|
|
|
+#绿底白字
|
|
|
+echo -e "\033[42;37m [INFO]: === 所有安装步骤执行成功,正常退出=== \033[0m"
|
|
|
+exit 0
|