original.sh 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  1. #!/bin/bash
  2. MY_PATH="`dirname \"$0\"`" # relative
  3. # echo "1"$MY_PATH
  4. MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
  5. installType=0
  6. argument1=
  7. if [ $# -eq 1 ];then
  8. echo has arguments: $*
  9. argument1=$(echo $1 | awk '{ print tolower($0) }' )
  10. if [ "$argument1" = "uninstall" ]; then
  11. installType=4
  12. elif [ "$argument1" = "pure" ]; then
  13. installType=1
  14. fi
  15. else
  16. echo no any arguments.
  17. fi
  18. echo 安装脚本模式: $installType
  19. curr_timestamp=`date "+%Y%m%d-%H%M%S.%3N"`
  20. lightdm_file=/etc/lightdm/lightdm.conf
  21. rvc_pkg_rvc=${MY_PATH}/rvc
  22. rvc_install_path_root="/opt"
  23. rvc_install_path_rvc_dir=${rvc_install_path_root}/rvc
  24. rvc_install_path_Run_dir=${rvc_install_path_root}/Run
  25. rvc_install_path_hardware_dir=${rvc_install_path_Run_dir}/hardwarecfg
  26. rvc_install_path_versions_dir=${rvc_install_path_Run_dir}/version
  27. res=0
  28. #设置开机自动登录用户(有做冗余判断)
  29. setup_autologin()
  30. {
  31. given_user=$1
  32. given_sudoers_file=$2
  33. ret=0
  34. if [ ! -f "$given_sudoers_file" ]; then
  35. echo "[Seat:*]" > $given_sudoers_file
  36. # echo "autologin-guest=false" >> $given_sudoers_file
  37. echo "autologin-user=$given_user" >> $given_sudoers_file
  38. echo "autologin-user-timeout=0" >> $given_sudoers_file
  39. fi
  40. if [ "$(grep -c "^\\s*autologin-user=${given_user}" $given_sudoers_file)" -gt 0 ]; then
  41. echo "[WARN] autologin-user is already setted in ^lightdm.conf^"
  42. else
  43. echo "[INFO] setting autologin-user in ^$given_sudoers_file^"
  44. #sed -i.bak -E "s|^#(autologin-user=).*|\\1$given_user|;s|^#(autologin-user-timeout=).*|\\0|" $given_sudoers_file
  45. sed -i "s/^\s*#\s*autologin-user=/autologin-user=/g;s/autologin-user=.*$/autologin-user=$given_user/g" $given_sudoers_file
  46. #sed -i "s/^#autologin-user=$/autologin-user=${given_user}/" $given_sudoers_file
  47. #sed -i "s/^#autologin-user-timeout=$/autologin-user-timeout=0/" $given_sudoers_file
  48. sed -i "s/^\s*#\s*autologin-user-timeout=/autologin-user-timeout=/g;s/autologin-user-timeout=.*$/autologin-user-timeout=0/g" $given_sudoers_file
  49. fi
  50. return $ret
  51. }
  52. #设置免密使用root权限(有做冗余判断)
  53. sudo_priviledge()
  54. {
  55. given_user=$1
  56. given_sudoers_file=$2
  57. if [ -e ${given_sudoers_file}.tmp -o "$(pidof visudo)" ]; then
  58. echo "[ERROR] ${given_sudoers_file} is working now, wait a little and then try again later"
  59. return 2
  60. fi
  61. #pkexec chmod 0440 /etc/sudoers
  62. ret=0
  63. echo "[INFO] to process editing sudoers file..."
  64. cp ${given_sudoers_file} ${given_sudoers_file}.tmp
  65. chmod 0640 ${given_sudoers_file}.tmp
  66. cat ${given_sudoers_file}.tmp | grep 'includedir /etc/sudoers.d' > /dev/null
  67. if [ $? = 0 ]; then
  68. echo "[INFO] '#includedir /etc/sudoers.d' already exists in /etc/sudoers file"
  69. else
  70. echo "#includedir /etc/sudoers.d" >> ${given_sudoers_file}.tmp
  71. ret=1
  72. fi
  73. if [ "`cat /etc/sudoers | grep ${given_user} | grep ALL=\(ALL\)`" != "" ]; then
  74. echo "[WARN]: sudoers file has been loaded up all(all) config"
  75. else
  76. new_entry="${given_user} ALL=(ALL) ALL"
  77. echo "${new_entry}" >> ${given_sudoers_file}.tmp
  78. ret=1
  79. fi
  80. if [ "`cat /etc/sudoers|grep ${given_user}|grep /opt/Run/version/v2`" != "" ]; then
  81. echo "[WARN]: sudoers file has been loaded up rvc config"
  82. else
  83. new_entry="${given_user} ALL=(ALL) NOPASSWD: ALL, NOPASSWD: /opt/Run/version/v2"
  84. echo "[INFO] update sudoers file with all no need password"
  85. echo "${new_entry}" >> ${given_sudoers_file}.tmp
  86. ret=1
  87. fi
  88. chmod 0440 ${given_sudoers_file}.tmp
  89. if visudo -c -f ${given_sudoers_file}.tmp ; then
  90. echo check syntax correct on ${given_sudoers_file}.tmp
  91. else
  92. echo "[ERROR] syntax check failed on file ${given_sudoers_file}"
  93. rm ${given_sudoers_file}.tmp
  94. #if [ -f "${given_sudoers_file}.backup" ]; then
  95. #fi
  96. return 3
  97. fi
  98. if [ $ret -eq 1 ]; then
  99. echo "[SUCCESS]: config file has been change !!"
  100. cp ${given_sudoers_file} ${given_sudoers_file}.backup
  101. mv ${given_sudoers_file}.tmp ${given_sudoers_file}
  102. ret=0
  103. else
  104. echo "[WARN]: config file not change"
  105. rm ${given_sudoers_file}.tmp
  106. ret=0
  107. fi
  108. return $ret
  109. }
  110. # check root priviledge
  111. if [ $(id -u) != 0 ]; then
  112. #红底白字
  113. echo -e "\033[41;37m [ERROR] === 该安装脚本需要以ROOT权限启动,请在命令行窗口添加sudo指令执行 'sudo bash $0',如果无法执行相关指令,请先确认系统已开启开发者模式 === \033[0m"
  114. timoutsecs=10
  115. for i in $(seq ${timoutsecs} -1 1)
  116. do
  117. echo [INFO] ${i}s 后退出当前执行脚本
  118. sleep 1
  119. done
  120. exit 1
  121. fi
  122. #生产环境要求先安装浏览器再执行安装
  123. if [ $installType -eq 1 ]; then
  124. if [ "`dpkg -l | grep org.deepin.browser | awk '{print $3}'`" == "" ]; then
  125. echo -e "\033[41;37m [ERROR] 未安装指定的浏览器,请至下载站点下载并安装UOS浏览器后再执行此安装脚本! \033[0m"
  126. exit 1
  127. fi
  128. fi
  129. echo "[INFO] 清理可视柜台相关进程……"
  130. killall -9 spshell > /dev/null 2>&1
  131. killall -9 sphost > /dev/null 2>&1
  132. killall -9 guardian > /dev/null 2>&1
  133. killall -9 uosbrowser > /dev/null 2>&1
  134. killall -9 browser > /dev/null 2>&1
  135. killall -s 9 `ps -aux | grep browser | awk '{print $2}'` > /dev/null 2>&1
  136. echo "[INFO] 清理可视柜台相关进程OK!"
  137. #获取当前登录的用户名称,这里可以考虑用另外一种优化的方法
  138. echo [INFO] 获取当前登录的用户名
  139. user1=$(ps -o user= -p $$ | awk '{print $1}')
  140. echo "[DEBUG] user1: $user1"
  141. user2=$(whoami)
  142. echo "[DEBUG] user2: $user2"
  143. rvc_user=$USER
  144. if [ -z "$rvc_user" -o "$rvc_user" = "root" ]; then
  145. users=$(cat /etc/passwd | awk -F: '$3>=500' | cut -f 1 -d :)
  146. echo "[DEBUG] user list: $users"
  147. cnt=0
  148. for var in $(echo ${users} | awk '{split($0,arr,",");for(i in arr) print arr[i]}')
  149. do
  150. if [ ${var} != 'nobody' -a ${var} != 'systemd-coredump' -a ${var} != 'liuwt' -a ${var} != 'deepin-anything-server' ]; then
  151. cnt=$((${cnt}+1))
  152. rvc_user=${var}
  153. fi
  154. done
  155. if [ $cnt -ne 1 ]; then
  156. echo "[WARN] too many users: $cnt"
  157. rvc_user=''
  158. else
  159. echo "[DEBUG] aim user: $rvc_user"
  160. fi
  161. fi
  162. #上保险,即另外一种优化的方法
  163. if [ -z "$rvc_user" -o "$rvc_user" = "root" ]; then
  164. name=$(whoami)
  165. pid=$(pgrep startdde)
  166. . <(xargs -0 bash -c 'printf "export %q\n" "$@"' -- </proc/$pid/environ)
  167. name=$(ps -o uname= -p "${pid}")
  168. echo "[DEBUG] new fetch name: $name"
  169. rvc_user=$name
  170. fi
  171. if [ -z "$rvc_user" ]; then
  172. echo -e "\033[41;37m [ERROR] 无法获取当前用户名称(用户名为空),退出程序 \033[0m"
  173. exit 1
  174. elif [ "$rvc_user" = "root" ]; then
  175. echo -e "\033[41;37m [ERROR] 无法获取当前用户名称(用户名无效),退出程序 \033[0m"
  176. exit 2
  177. fi
  178. echo [INFO] 获取当前登录的用户名OK! 用户名:$rvc_user
  179. #卸载操作
  180. if [ $installType -eq 4 ]; then
  181. rm /etc/xdg/autostart/spexplorerauto.desktop > /dev/null 2>&1
  182. rm /usr/share/applications/spexplorerauto.desktop > /dev/null 2>&1
  183. rm -rf /opt/rvc > /dev/null 2>&1
  184. rm -rf /opt/Run > /dev/null 2>&1
  185. rm -rf /opt/wlog > /dev/null 2>&1
  186. echo "[INFO] set menu tool as show mode..."
  187. gsettings set com.deepin.dde.dock hide-mode keep-showing
  188. echo "[INFO] set menu tool as show mode done!"
  189. papers_dir=/usr/share/wallpapers/deepin
  190. papers_bak_dir=/usr/share/wallpapers/deepin_bak
  191. if [ -d $papers_bak_dir ]; then
  192. rm -rf $papers_dir/* > /dev/null 2>&1
  193. cp $papers_bak_dir/* $papers_dir > /dev/null 2>&1
  194. rm -rf $papers_bak_dir > /dev/null 2>&1
  195. fi
  196. rm /home/$rvc_user/Desktop/spexplorerauto.desktop > /dev/null 2>&1
  197. echo [INFO]恢复桌面组件应用程序的执行权限
  198. sudo chmod +x /usr/bin/dde-desktop
  199. sudo chmod +x /usr/bin/dde-dock
  200. sudo chmod +x /usr/bin/dde-launcher
  201. sudo chmod +x /usr/bin/dde-file-manager
  202. echo -e "\033[42;37m [INFO] === 所有安装步骤执行成功,正常退出=== \033[0m"
  203. exit 0
  204. fi
  205. # 如果版本中有root.ini,移除测试的root.ini文件
  206. if [ -f ${MY_PATH}/Run/hardwarecfg/root.ini ]; then
  207. sudo rm ${MY_PATH}/Run/hardwarecfg/root.ini
  208. fi
  209. if [ -d ${MY_PATH}/Run/runinfo ]; then
  210. sudo rm -rf ${MY_PATH}/Run/runinfo
  211. fi
  212. if [ -f $rvc_install_path_hardware_dir/root.ini ]; then
  213. echo [WARN] 存在root.ini文件,认为是存量安装,跳过版本清理操作
  214. else
  215. echo [INFO] 清理(删除)历史版本(如有)......
  216. sudo rm -rf ${rvc_install_path_Run_dir} > /dev/null 2>&1
  217. sudo rm -rf ${rvc_install_path_rvc_dir} > /dev/null 2>&1
  218. echo [INFO] 清理(删除)历史版本(如有)OK!
  219. fi
  220. echo 【0/1】拷贝RVC目录...
  221. if [ ! -d $rvc_install_path_rvc_dir ]; then
  222. sudo mkdir -p ${rvc_install_path_rvc_dir}
  223. fi
  224. if [ ! -d $rvc_install_path_rvc_dir/adData ]; then
  225. sudo mkdir -p ${rvc_install_path_rvc_dir}/adData
  226. fi
  227. if [ ! -d $rvc_install_path_rvc_dir/Resources ]; then
  228. sudo mkdir -p ${rvc_install_path_rvc_dir}/Resources
  229. fi
  230. sudo cp -rf ${rvc_pkg_rvc}/adData/Audio ${rvc_install_path_rvc_dir}/adData > /dev/null 2>&1
  231. sudo cp -rf ${rvc_pkg_rvc}/Resources ${rvc_install_path_rvc_dir}
  232. echo 【1/1】拷贝RVC目录OK!
  233. echo 【1/2】拷贝终端版本,文件数量较多,部分终端拷贝时间比较长,请稍加等候......
  234. if [ ! -d $rvc_install_path_Run_dir ]; then
  235. sudo mkdir -p ${rvc_install_path_Run_dir}
  236. fi
  237. sudo cp -rf $MY_PATH/Run ${rvc_install_path_root}
  238. echo 【2/2】拷贝终端版本OK!
  239. echo [INFO] 赋予应用相关文件执行权限
  240. echo [DEBUG] rvc_install_path_rvc_dir=${rvc_install_path_rvc_dir}
  241. echo [DEBUG] ${rvc_install_path_root}/${rel_version_dir}
  242. sudo chmod 777 ${rvc_install_path_root}
  243. sudo chmod a+rw -R ${rvc_install_path_rvc_dir}
  244. sudo chmod a+rw -R ${rvc_install_path_hardware_dir}
  245. sudo chmod 777 -R ${rvc_install_path_root}/${rel_version_dir}
  246. sudo chmod 777 ${rvc_install_path_versions_dir}/spexplorer.sh > /dev/null 2>&1
  247. sudo chmod 777 ${rvc_install_path_versions_dir}/sudo_spexplorer.sh > /dev/null 2>&1
  248. sudo chmod a+rw ${rvc_install_path_versions_dir}/active.txt
  249. sudo chmod a+rw ${rvc_install_path_versions_dir}
  250. sudo chmod a+rw ${rvc_install_path_Run_dir}
  251. echo [INFO] 赋予应用相关文件执行权限OK!
  252. echo 【2/3】拷贝系统桌面壁纸
  253. papers_dir=/usr/share/wallpapers/deepin
  254. papers_bak_dir=/usr/share/wallpapers/deepin_bak
  255. WallpaperPath=${rvc_pkg_rvc}/Resources/WallPaper1920.png
  256. if [ -f "${papers_dir}/WallPaper1920.png" ]; then
  257. echo [DEBUG] 指定壁纸已存在系统目录
  258. WallpaperPath=${papers_dir}/WallPaper1920.png
  259. rm ${papers_dir}/WallPaper1280.png > /dev/null 2>&1
  260. else
  261. if [ ! -d $papers_bak_dir ]; then
  262. mkdir -p ${papers_bak_dir}
  263. cp $papers_dir/* $papers_bak_dir
  264. fi
  265. rm -rf $papers_dir/* > /dev/null 2>&1
  266. cp ${rvc_pkg_rvc}/Resources/WallPaper1920.png ${papers_dir}
  267. WallpaperPath=${papers_dir}/WallPaper1920.png
  268. fi
  269. echo [DEBUG] WallpaperPath=$WallpaperPath
  270. echo [WARN] 清理桌面文件内容
  271. rm -rf /home/$rvc_user/Desktop/* > /dev/null 2>&1
  272. echo [INFO] 清理桌面文件内容OK!
  273. echo 【3/3】拷贝系统桌面壁纸OK!
  274. echo 【3/4】设置可视柜台应用程序开机自启动
  275. echo [INFO] 设置用户免密使用ROOT权限
  276. sudoers_file=/etc/sudoers
  277. echo "[INFO] Going to add entry into /etc/sudoers file for user: $rvc_user"
  278. if [ ! -d '/etc/sudoers.d' ]; then
  279. mkidr /etc/sudoers.d
  280. chmod 750 /etc/sudoers.d
  281. fi
  282. sudo_priviledge ${rvc_user} ${sudoers_file}
  283. res=$?
  284. if [ $res -eq 0 ]; then
  285. echo [INFO] 设置用户免密使用ROOT权限OK!
  286. else
  287. echo -e "\033[41;37m [ERROR] 设置用户免密使用ROOT权限失败!! \033[0m"
  288. exit 1
  289. fi
  290. echo [INFO] 设置用户自动登录
  291. setup_autologin ${rvc_user} ${lightdm_file}
  292. res=$?
  293. if [ $res -eq 0 ]; then
  294. echo [INFO] 设置用户自动登录OK!
  295. else
  296. echo -e "\033[41;37m [ERROR] 设置用户自动登录失败!! \033[0m"
  297. exit 1
  298. fi
  299. echo [INFO] 设置应用自启动和桌面图标
  300. echo "[INFO] Copy application shortkeys to menu tools..."
  301. cp ${rvc_pkg_rvc}/Resources/spexplorerauto.desktop /usr/share/applications
  302. echo "[INFO] Active application icon autorun after boot..."
  303. cp ${rvc_pkg_rvc}/Resources/spexplorerauto.desktop /etc/xdg/autostart/
  304. echo "[INFO] Copy application icon to desktop..."
  305. cp ${rvc_pkg_rvc}/Resources/spexplorerauto.desktop /home/$rvc_user/Desktop
  306. echo 【4/4】设置可视柜台应用程序开机自启动OK!
  307. #暂未商定结论,暂时不黑屏UOS
  308. if [ $installType -eq 5 ]; then
  309. echo [INFO]去除桌面组件应用程序的执行权限,实现开机黑屏
  310. sudo chmod -x /usr/bin/dde-desktop
  311. sudo chmod -x /usr/bin/dde-dock
  312. sudo chmod -x /usr/bin/dde-launcher
  313. sudo chmod -x /usr/bin/dde-file-manager
  314. fi
  315. #去掉密钥环,之前出现过这种问题,统信指示移除该文件即可
  316. keyring_file=/home/$rvc_user/.local/share/keyrings/login.keyring
  317. if [ -f "$keyring_file" ]; then
  318. rm $keyring_file
  319. echo "[INFO] remove keyring file."
  320. fi
  321. browserDownURLDEV="http://99.12.23.78/uos/uosbrowser_5.3.52-1.zip"
  322. fileManagerURLDEV="http://99.12.23.78/uos/dde-file-manager-5.2.11.2-arm64_fixed.zip"
  323. launcherURLDEV="http://99.12.23.78/uos/dde-launcher_5.3.0.45_arm64.zip"
  324. browserDownURL=${browserDownURLDEV}
  325. #测试环境才生效,生产环境无法确认下载链接地址
  326. if [ $installType -eq 0 ]; then
  327. echo -e "\033[43;37m [WARN] 开发测试环境检测和安装UOS浏览器和输入法补丁 \033[0m"
  328. if [ "`dpkg -l | grep org.deepin.browser | awk '{print $3}'`" == "" ]; then
  329. echo "[WARN] 未安装最新的UOS浏览器,将自动下载安装UOS浏览器"
  330. echo 下载最新的UOS浏览器...
  331. rm -rf ${MY_PATH}/Tmp > /dev/null 2>&1
  332. mkdir -p ${MY_PATH}/Tmp > /dev/null 2>&1
  333. mkdir -p ${MY_PATH}/Tmp/Extra > /dev/null 2>&1
  334. wget -nv ${browserDownURL} -O ${MY_PATH}/Tmp/UOSBrowser.zip
  335. if [ $? -ne 0 ]; then
  336. echo "[WARN]下载最新的UOS浏览器失败"
  337. else
  338. echo "[DEBUG] 下载最新的UOS浏览器 完成!"
  339. unzip -q ${MY_PATH}/Tmp/UOSBrowser.zip -d ${MY_PATH}/Tmp/Extra
  340. chmod 777 -R ${MY_PATH}/Tmp/Extra
  341. sudo dpkg -i ${MY_PATH}/Tmp/Extra/**/*.deb
  342. fi
  343. rm -rf ${MY_PATH}/Tmp > /dev/null 2>&1
  344. else
  345. echo "[INFO] 已安装最新的UOS浏览器"
  346. fi
  347. if [ "`dpkg -l | grep libdde-file-manager`" != "" ]; then
  348. currentInstallVersion=$(dpkg -l | grep libdde-file-manager | awk '{print $3}')
  349. echo "[INFO] Current libdde-file-manager version: $currentInstallVersion"
  350. if [ "$currentInstallVersion" = "5.2.11.2-1" ]; then
  351. echo "[INFO] 已安装最新输入法补丁"
  352. else
  353. echo "[WARN] 未安装最新输入法补丁,将自动下载安装"
  354. echo "[DEBUG] 下载最新输入法补丁..."
  355. rm -rf ${MY_PATH}/Tmp > /dev/null 2>&1
  356. mkdir -p ${MY_PATH}/Tmp > /dev/null 2>&1
  357. mkdir -p ${MY_PATH}/Tmp/Extra > /dev/null 2>&1
  358. wget -nv ${fileManagerURLDEV} -O ${MY_PATH}/Tmp/SogouFileManager.zip
  359. if [ $? -ne 0 ]; then
  360. echo "[WARN]下载最新输入法补丁失败"
  361. else
  362. echo "[DEBUG] 下载最新输入法补丁 完成!"
  363. unzip -q ${MY_PATH}/Tmp/SogouFileManager.zip -d ${MY_PATH}/Tmp/Extra
  364. chmod 777 -R ${MY_PATH}/Tmp/Extra
  365. sudo dpkg -i ${MY_PATH}/Tmp/Extra/**/*.deb
  366. fi
  367. rm -rf ${MY_PATH}/Tmp > /dev/null 2>&1
  368. fi
  369. fi
  370. if [ "`dpkg -l | grep dde-launcher`" != "" ]; then
  371. currentInstallVersion=$(dpkg -l | grep dde-launcher | awk '{print $3}')
  372. echo "[INFO] Current dde-launcher version: $currentInstallVersion"
  373. if [ "$currentInstallVersion" = "5.3.0.45+203445.2-1" ]; then
  374. echo "[INFO] 已安装最新输入法补丁(文件启动器)"
  375. else
  376. echo "[WARN] 未安装最新输入法补丁(文件启动器),将自动下载安装"
  377. echo "[DEBUG] 下载最新输入法补丁(文件启动器)..."
  378. rm -rf ${MY_PATH}/Tmp > /dev/null 2>&1
  379. mkdir -p ${MY_PATH}/Tmp > /dev/null 2>&1
  380. mkdir -p ${MY_PATH}/Tmp/Extra > /dev/null 2>&1
  381. wget -nv ${launcherURLDEV} -O ${MY_PATH}/Tmp/SogouLauncherMng.zip
  382. if [ $? -ne 0 ]; then
  383. echo "[WARN]下载最新输入法补丁(文件启动器)失败"
  384. else
  385. echo "[DEBUG] 下载最新输入法补丁(文件启动器) 完成!"
  386. unzip -q ${MY_PATH}/Tmp/SogouLauncherMng.zip -d ${MY_PATH}/Tmp/Extra
  387. chmod 777 -R ${MY_PATH}/Tmp/Extra
  388. sudo dpkg -i ${MY_PATH}/Tmp/Extra/**/*.deb
  389. fi
  390. rm -rf ${MY_PATH}/Tmp > /dev/null 2>&1
  391. fi
  392. fi
  393. fi
  394. #执行完删除自身
  395. rm -f $0
  396. exit 0