x-ui.sh 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. #!/bin/bash
  2. red='\033[0;31m'
  3. green='\033[0;32m'
  4. yellow='\033[0;33m'
  5. plain='\033[0m'
  6. # check root
  7. [[ $EUID -ne 0 ]] && echo -e "${red}Error: ${plain}¡Debe utilizar el usuario root para ejecutar este script!\n" && exit 1
  8. # check os
  9. if [[ -f /etc/redhat-release ]]; then
  10. release="centos"
  11. elif cat /etc/issue | grep -Eqi "debian"; then
  12. release="debian"
  13. elif cat /etc/issue | grep -Eqi "ubuntu"; then
  14. release="ubuntu"
  15. elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then
  16. release="centos"
  17. elif cat /proc/version | grep -Eqi "debian"; then
  18. release="debian"
  19. elif cat /proc/version | grep -Eqi "ubuntu"; then
  20. release="ubuntu"
  21. elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then
  22. release="centos"
  23. else
  24. echo -e "${red} No se detecta la versión del sistema, póngase en contacto con el autor del script.${plain}\n" && exit 1
  25. fi
  26. os_version=""
  27. # os version
  28. if [[ -f /etc/os-release ]]; then
  29. os_version=$(awk -F'[= ."]' '/VERSION_ID/{print $3}' /etc/os-release)
  30. fi
  31. if [[ -z "$os_version" && -f /etc/lsb-release ]]; then
  32. os_version=$(awk -F'[= ."]+' '/DISTRIB_RELEASE/{print $2}' /etc/lsb-release)
  33. fi
  34. if [[ x"${release}" == x"centos" ]]; then
  35. if [[ ${os_version} -le 6 ]]; then
  36. echo -e "${red}Por Favor Use - CentOS 7 o sistema superior!${plain}\n" && exit 1
  37. fi
  38. elif [[ x"${release}" == x"ubuntu" ]]; then
  39. if [[ ${os_version} -lt 16 ]]; then
  40. echo -e "${red}¡Utilice Ubuntu 16 o una versión superior del sistema!${plain}\n" && exit 1
  41. fi
  42. elif [[ x"${release}" == x"debian" ]]; then
  43. if [[ ${os_version} -lt 8 ]]; then
  44. echo -e "${red}¡Utilice Debian 8 o un sistema de versión superior!${plain}\n" && exit 1
  45. fi
  46. fi
  47. confirm() {
  48. if [[ $# > 1 ]]; then
  49. echo && read -p "$1 [Defauld$2]: " temp
  50. if [[ "${temp}" == "" ]]; then
  51. temp=$2
  52. fi
  53. else
  54. read -p "$1 [y/n]: " temp
  55. fi
  56. if [[ "${temp}" == "y" || "${temp}" == "Y" ]]; then
  57. return 0
  58. else
  59. return 1
  60. fi
  61. }
  62. confirm_restart() {
  63. confirm "Ya sea para reiniciar el panel, reiniciar el panel también reiniciará xray" "y"
  64. if [[ $? == 0 ]]; then
  65. restart
  66. else
  67. show_menu
  68. fi
  69. }
  70. before_show_menu() {
  71. echo && echo -n -e "${yellow}Presione enter para regresar al menú principal: ${plain}" && read temp
  72. show_menu
  73. }
  74. install() {
  75. bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)
  76. if [[ $? == 0 ]]; then
  77. if [[ $# == 0 ]]; then
  78. start
  79. else
  80. start 0
  81. fi
  82. fi
  83. }
  84. update() {
  85. confirm "Esta función reinstalará a la fuerza la última versión actual y los datos no se perderán. ¿Desea continuar?" "n"
  86. if [[ $? != 0 ]]; then
  87. echo -e "${red}Cancelado${plain}"
  88. if [[ $# == 0 ]]; then
  89. before_show_menu
  90. fi
  91. return 0
  92. fi
  93. bash <(curl -Ls https://raw.githubusercontent.com/vaxilu/x-ui/master/install.sh)
  94. if [[ $? == 0 ]]; then
  95. echo -e "${green}La actualización está completa y el panel se ha reiniciado automáticamente${plain}"
  96. exit 0
  97. fi
  98. }
  99. uninstall() {
  100. confirm "¿Está seguro de que desea desinstalar el panel, xray también lo desinstalará? " "n"
  101. if [[ $? != 0 ]]; then
  102. if [[ $# == 0 ]]; then
  103. show_menu
  104. fi
  105. return 0
  106. fi
  107. systemctl stop x-ui
  108. systemctl disable x-ui
  109. rm /etc/systemd/system/x-ui.service -f
  110. systemctl daemon-reload
  111. systemctl reset-failed
  112. rm /etc/x-ui/ -rf
  113. rm /usr/local/x-ui/ -rf
  114. rm /usr/bin/x-ui -f
  115. echo ""
  116. echo -e "La desinstalación se realizó correctamente. Si desea eliminar esta secuencia de comandos, salga de la secuencia de comandos y ejecute ${green}rm /usr/bin/x-ui -f${plain}Borrar"
  117. echo ""
  118. if [[ $# == 0 ]]; then
  119. before_show_menu
  120. fi
  121. }
  122. reset_user() {
  123. confirm "¿Está seguro de que desea restablecer el nombre de usuario y la contraseña a admin " "n"
  124. if [[ $? != 0 ]]; then
  125. if [[ $# == 0 ]]; then
  126. show_menu
  127. fi
  128. return 0
  129. fi
  130. /usr/local/x-ui/x-ui setting -username admin -password admin
  131. echo -e "El nombre de usuario y la contraseña se han restablecido a ${green}admin${plain}, Reinicia el panel ahora"
  132. confirm_restart
  133. }
  134. reset_config() {
  135. confirm "¿Está seguro de que desea restablecer todas las configuraciones del panel? No se perderán los datos de la cuenta, ni se cambiará el nombre de usuario ni la contraseña" "n"
  136. if [[ $? != 0 ]]; then
  137. if [[ $# == 0 ]]; then
  138. show_menu
  139. fi
  140. return 0
  141. fi
  142. /usr/local/x-ui/x-ui setting -reset
  143. echo -e "Todos los paneles se han restablecido a los valores predeterminados, ahora reinicie los paneles y utilice los valores predeterminados. ${green}65432${plain}Panel de acceso al puerto"
  144. confirm_restart
  145. }
  146. set_port() {
  147. echo && echo -n -e "Ingrese el número de puerto [1-65535]: " && read port
  148. if [[ -z "${port}" ]]; then
  149. echo -e "${yellow}Cancelado${plain}"
  150. before_show_menu
  151. else
  152. /usr/local/x-ui/x-ui setting -port ${port}
  153. echo -e "Después de configurar el puerto, reinicie el panel y use el puerto recién configurado${green} ${port} ${plain}Panel de acceso"
  154. confirm_restart
  155. fi
  156. }
  157. start() {
  158. check_status
  159. if [[ $? == 0 ]]; then
  160. echo ""
  161. echo -e "${green}El panel ya se está ejecutando, no es necesario comenzar de nuevo, si necesita reiniciar, seleccione reiniciar${plain}"
  162. else
  163. systemctl start x-ui
  164. sleep 2
  165. check_status
  166. if [[ $? == 0 ]]; then
  167. echo -e "${green}x-ui Comenzó exitosamente${plain}"
  168. else
  169. echo -e "${red}El panel no pudo iniciarse. Puede deberse a que tardó más de dos segundos en iniciarse. Verifique la información de registro más tarde.${plain}"
  170. fi
  171. fi
  172. if [[ $# == 0 ]]; then
  173. before_show_menu
  174. fi
  175. }
  176. stop() {
  177. check_status
  178. if [[ $? == 1 ]]; then
  179. echo ""
  180. echo -e "${green}面板已停止,无需再次停止${plain}"
  181. else
  182. systemctl stop x-ui
  183. sleep 2
  184. check_status
  185. if [[ $? == 1 ]]; then
  186. echo -e "${green}x-ui 与 xray 停止成功${plain}"
  187. else
  188. echo -e "${red}面板停止失败,可能是因为停止时间超过了两秒,请稍后查看日志信息${plain}"
  189. fi
  190. fi
  191. if [[ $# == 0 ]]; then
  192. before_show_menu
  193. fi
  194. }
  195. restart() {
  196. systemctl restart x-ui
  197. sleep 2
  198. check_status
  199. if [[ $? == 0 ]]; then
  200. echo -e "${green}x-ui y xray REINCIADO EXITOSAMENTE${plain}"
  201. else
  202. echo -e "${red}El reinicio del panel falló, puede deberse a que el tiempo de inicio supera los dos segundos, verifique la información de registro más tarde${plain}"
  203. fi
  204. if [[ $# == 0 ]]; then
  205. before_show_menu
  206. fi
  207. }
  208. status() {
  209. systemctl status x-ui -l
  210. if [[ $# == 0 ]]; then
  211. before_show_menu
  212. fi
  213. }
  214. enable() {
  215. systemctl enable x-ui
  216. if [[ $? == 0 ]]; then
  217. echo -e "${green}x-ui Configure el inicio automático de encendido correctamente${plain}"
  218. else
  219. echo -e "${red}x-ui No se pudo configurar el inicio automático después del encendido${plain}"
  220. fi
  221. if [[ $# == 0 ]]; then
  222. before_show_menu
  223. fi
  224. }
  225. disable() {
  226. systemctl disable x-ui
  227. if [[ $? == 0 ]]; then
  228. echo -e "${green}x-ui Cancelar el inicio automático de encendido con éxito${plain}"
  229. else
  230. echo -e "${red}x-ui Cancelar la falla de arranque${plain}"
  231. fi
  232. if [[ $# == 0 ]]; then
  233. before_show_menu
  234. fi
  235. }
  236. show_log() {
  237. journalctl -u x-ui.service -e --no-pager -f
  238. if [[ $# == 0 ]]; then
  239. before_show_menu
  240. fi
  241. }
  242. migrate_v2_ui() {
  243. /usr/local/x-ui/x-ui v2-ui
  244. before_show_menu
  245. }
  246. install_bbr() {
  247. # temporary workaround for installing bbr
  248. bash <(curl -L -s https://raw.githubusercontent.com/teddysun/across/master/bbr.sh)
  249. echo ""
  250. before_show_menu
  251. }
  252. update_shell() {
  253. wget -O /usr/bin/x-ui -N --no-check-certificate https://github.com/vaxilu/x-ui/raw/master/x-ui.sh
  254. if [[ $? != 0 ]]; then
  255. echo ""
  256. echo -e "${red}No se pudo descargar el script, verifique si la máquina se puede conectar a Github${plain}"
  257. before_show_menu
  258. else
  259. chmod +x /usr/bin/x-ui
  260. echo -e "${green}La secuencia de comandos de actualización se realizó correctamente. Vuelva a ejecutar la secuencia de comandos.${plain}" && exit 0
  261. fi
  262. }
  263. # 0: running, 1: not running, 2: not installed
  264. check_status() {
  265. if [[ ! -f /etc/systemd/system/x-ui.service ]]; then
  266. return 2
  267. fi
  268. temp=$(systemctl status x-ui | grep Active | awk '{print $3}' | cut -d "(" -f2 | cut -d ")" -f1)
  269. if [[ x"${temp}" == x"running" ]]; then
  270. return 0
  271. else
  272. return 1
  273. fi
  274. }
  275. check_enabled() {
  276. temp=$(systemctl is-enabled x-ui)
  277. if [[ x"${temp}" == x"enabled" ]]; then
  278. return 0
  279. else
  280. return 1;
  281. fi
  282. }
  283. check_uninstall() {
  284. check_status
  285. if [[ $? != 2 ]]; then
  286. echo ""
  287. echo -e "${red}El panel se ha instalado, no repita la instalación${plain}"
  288. if [[ $# == 0 ]]; then
  289. before_show_menu
  290. fi
  291. return 1
  292. else
  293. return 0
  294. fi
  295. }
  296. check_install() {
  297. check_status
  298. if [[ $? == 2 ]]; then
  299. echo ""
  300. echo -e "${red}Primero instale el panel ${plain}"
  301. if [[ $# == 0 ]]; then
  302. before_show_menu
  303. fi
  304. return 1
  305. else
  306. return 0
  307. fi
  308. }
  309. show_status() {
  310. check_status
  311. case $? in
  312. 0)
  313. echo -e "Estado del panel: ${green} EJECUTANDO ${plain}"
  314. show_enable_status
  315. ;;
  316. 1)
  317. echo -e "Estado del panel: ${yellow}NO EJECUTADO ${plain}"
  318. show_enable_status
  319. ;;
  320. 2)
  321. echo -e "Estado del panel: ${red}No Instalao${plain}"
  322. esac
  323. show_xray_status
  324. }
  325. show_enable_status() {
  326. check_enabled
  327. if [[ $? == 0 ]]; then
  328. echo -e "Ejecucion al Iniciar: ${green}SI${plain}"
  329. else
  330. echo -e "Ejecucion al Iniciar: ${red}NO${plain}"
  331. fi
  332. }
  333. check_xray_status() {
  334. count=$(ps -ef | grep "xray-linux" | grep -v "grep" | wc -l)
  335. if [[ count -ne 0 ]]; then
  336. return 0
  337. else
  338. return 1
  339. fi
  340. }
  341. show_xray_status() {
  342. check_xray_status
  343. if [[ $? == 0 ]]; then
  344. echo -e "xray ESTADO: ${green}EJECUTANDO{plain}"
  345. else
  346. echo -e "xray ESTADO: ${red}NO EJECUTADO${plain}"
  347. fi
  348. }
  349. show_usage() {
  350. echo "x-ui Cómo usar scripts de administración (Traduccion ChumoGHADM)"
  351. echo "------------------------------------------"
  352. echo "x-ui - Menú de gestión de pantalla (más funciones)"
  353. echo "x-ui - Menú de gestión de pantalla (más funciones)"
  354. echo "x-ui start - Inicie el panel x-ui"
  355. echo "x-ui stop - Detener el panel x-ui"
  356. echo "x-ui restart - Reinicie el panel x-ui"
  357. echo "x-ui status - Ver el estado de x-ui"
  358. echo "x-ui enable - AutoEjecutar al Arranque"
  359. echo "x-ui disable - Desactivar AutoEjecutar al Arranque "
  360. echo "x-ui log - Ver registro x-ui"
  361. echo "x-ui update - Actualizar el panel x-ui"
  362. echo "x-ui install - Instalar el panel x-ui"
  363. echo "x-ui uninstall - Desinstalar el panel x-ui"
  364. echo "------------------------------------------"
  365. }
  366. show_menu() {
  367. echo -e "
  368. ${green}x-ui Script de gestión del panel${plain}
  369. ${green}0.${plain} Salir
  370. ————————————————
  371. ${green}1.${plain}Instalar x-ui
  372. ${green}2.${plain}Actualizar x-ui
  373. ${green}3.${plain}Desinstalar x-ui
  374. ————————————————
  375. ${green}4.${plain}Restablecer nombre de usuario y contraseña
  376. ${green}5.${plain}Restablecer la configuración del panel
  377. ${green}6.${plain}Establecer el puerto del panel
  378. ————————————————
  379. ${green}7.${plain}Iniciar x-ui
  380. ${green}8.${plain}Detener x-ui
  381. ${green}9.${plain}Reiniciar x-ui
  382. ${green}10.${plain}Ver el estado de x-ui
  383. ${green}11.${plain}Ver registro x-ui
  384. ————————————————
  385. ${green}12.${plain} Encender AutoEjecucion
  386. ${green}13.${plain} Cancelar AutoEjecucion
  387. ————————————————
  388. ${green}14.${plain} Instalación de bbr (el último kernel)
  389. "
  390. show_status
  391. echo && read -p "请输入选择 [0-14]: " num
  392. case "${num}" in
  393. 0) exit 0
  394. ;;
  395. 1) check_uninstall && install
  396. ;;
  397. 2) check_install && update
  398. ;;
  399. 3) check_install && uninstall
  400. ;;
  401. 4) check_install && reset_user
  402. ;;
  403. 5) check_install && reset_config
  404. ;;
  405. 6) check_install && set_port
  406. ;;
  407. 7) check_install && start
  408. ;;
  409. 8) check_install && stop
  410. ;;
  411. 9) check_install && restart
  412. ;;
  413. 10) check_install && status
  414. ;;
  415. 11) check_install && show_log
  416. ;;
  417. 12) check_install && enable
  418. ;;
  419. 13) check_install && disable
  420. ;;
  421. 14) install_bbr
  422. ;;
  423. *) echo -e "${red}请输入正确的数字 [0-14]${plain}"
  424. ;;
  425. esac
  426. }
  427. if [[ $# > 0 ]]; then
  428. case $1 in
  429. "start") check_install 0 && start 0
  430. ;;
  431. "stop") check_install 0 && stop 0
  432. ;;
  433. "restart") check_install 0 && restart 0
  434. ;;
  435. "status") check_install 0 && status 0
  436. ;;
  437. "enable") check_install 0 && enable 0
  438. ;;
  439. "disable") check_install 0 && disable 0
  440. ;;
  441. "log") check_install 0 && show_log 0
  442. ;;
  443. "v2-ui") check_install 0 && migrate_v2_ui 0
  444. ;;
  445. "update") check_install 0 && update 0
  446. ;;
  447. "install") check_uninstall 0 && install 0
  448. ;;
  449. "uninstall") check_install 0 && uninstall 0
  450. ;;
  451. *) show_usage
  452. esac
  453. else
  454. show_menu
  455. fi