# Roger_Dialog專案套件-UPT V2.0-完整版 * 專案目標:Roger_Dialog專案套件-UPT V2.0 專案使用說明書 * 專案名稱:UPT v2.0 (User Personal Toolbox)[ユーザー ツールボックス] 個人工具箱 * 專案想法:身為一個專業的Engineer,在應付各不同的作業環境的時候需要安裝各種程式及套件,每個Engineer都會有自己習慣使用的工具,這是四個月課程中常常需要使用的指令程式與工具的整合,如果有需要更換VM或電腦時用此工具可以更快速的部屬環境 * 創作者:Roger * 創作日期:2024/2/29 * 最後更新:2024/3/2 * 適用系統:Ubuntu 20.04 up、Rucky Linux 8 up、CentOS 7 up 執行內容 * vim UPT.sh #新增一個sh檔, * 並給予執行權限 chmod +x UPT.sh ### 程式碼內容 ```python= dialog --title "Roger_Dialog安裝包專案" --msgbox "身為一個專業的工程師,當然要準備自己的小工具,這個工具的目的就是把平常需要使用的安裝程式,及功能打包成Dialog" 10 50 while true; do choice=$(dialog --title "選單模式" --menu "可上下選擇" 20 50 15 \ 1 "顯示網卡信息" \ 2 "查看Port" \ 3 "設置時區" \ 4 "查看現在時區" \ 5 "安裝程式" \ 6 "安裝PIP套件" \ 7 "ngrok token輸入" \ 8 "OpenAPI key" \ 9 "htop 系統訊息" \ 10 "啟動螢幕保護程式 cmatrix" \ 11 "解除安裝程式" \ 12 "ngrok port 輸入" \ 3>&1 1>&2 2>&3) # 檢查用戶選擇 case $choice in 1) # 創建一個臨時文件,用於保存 ifconfig 命令的輸出 ifconfig_file=$(mktemp) # 運行 ifconfig 命令,並將輸出保存到臨時文件中 ifconfig > "$ifconfig_file" # 使用 dialog 顯示臨時文件中的內容 dialog --title "網卡訊息" --textbox "$ifconfig_file" 50 70 --extra-button --extra-label "返回" # 删除臨時文件 rm "$ifconfig_file" # 用户選擇 ifconfig 命令 ifconfig ;; 2) # 創建一個臨時文件,用於保存 netstat 命令的輸出 netstat_file=$(mktemp) # 運行 ifconfig 命令,並將輸出保存到臨時文件中 netstat -tnpl > "$netstat_file" # 使用 dialog 顯示臨時文件中的内容 dialog --title "網路通道Port" --textbox "$netstat_file" 50 70 --extra-button --extra-label "返回" # 刪除臨時文件 rm "$netstat_file" # 執行 ifconfig 命令 netstat -tnpl ;; 3) # 設置時區 time_list=$(mktemp) timedatectl list-timezones > "$time_list" chosen_zone=$(dialog --title "時區設置" --radiolist "選擇時區" 50 70 0 --file "$time_list" --stdout ) if [ "$chosen_zone" = "extra" ]; then break fi sudo timedatectl set-timezone "$chosen_zone" >/dev/null 2>&1 if [ -n "$chosen_zone" ]; then dialog --msgbox "時區已設置為 $chosen_zone" 10 30 fi ;; 4) # 查看現在時區 time_now=$(mktemp) timedatectl > "$time_now" dialog --title "時區資訊" --textbox "$time_now" 15 60 --extra-button --extra-label "返回" ;; 5) # 用戶選擇 安裝程式 # 定義一個函數,用於安裝選定的軟件包 install_packages() { selected_packages="$1" if [[ -n "$selected_packages" ]]; then for package in $selected_packages; do if dpkg -l | grep -q "ii $package"; then dialog --title "安裝成功" --msgbox "$package 已安裝" 15 60 --extra-button --extra-label "返回" else { # 檢查是否要密碼 if sudo -n true 2>/dev/null; then sudo apt-get -y install $package echo "10" sleep 1 echo "30" echo "50" echo "80" sleep 1 echo "90" sleep 1 else # 輸入密碼 password=$(dialog --title "输入密碼" --clear --passwordbox "請輸入您的密碼:" 10 30 3>&1 1>&2 2>&3 3>&-) # 等待輸入密碼 echo "$password" | sudo -S apt-get -y install $package echo "10" sleep 1 echo "30" echo "50" echo "80" sleep 1 echo "90" sleep 1 fi } | dialog --title "安裝進度" --gauge "$package 正在安装..." 10 70 0 dialog --title "安装完成" --msgbox "$package 完成安装" 10 50 fi done else dialog --title "錯誤" --msgbox "沒有選擇任何安裝!" 30 50 fi } # 定義一个函數,用于安装 ngrok # 定義一个函數,用于安装 ngrok install_ngrok() { # 初始化進度0% echo "0" > progress.txt # 安装 ngrok 的命令,将安装過程输出重定向到 progress.txt 文件中 { echo "10" # 安装,進度 10% sleep 1 echo "30" # 安装,進度 30% echo "$password" | sudo -S curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null 2>&1 echo "50" # 安装,進度 50% echo "$password" | sudo -S sh -c 'echo "deb https://ngrok-agent.s3.amazonaws.com buster main" > /etc/apt/sources.list.d/ngrok.list' >/dev/null 2>&1 echo "$password" | sudo -S apt update >/dev/null 2>&1 echo "60" # 安装,進度 60% sleep 1 echo "$password" | sudo -S apt install ngrok >/dev/null 2>&1 echo "90" # 完成,進度 90% sleep 1 } | dialog --title "安裝進度" --gauge "正在安装..." 10 70 0 # 顯示安装完成的消息 dialog --title "完成安裝" --msgbox "Ngrok安裝完成!" 10 50 } update_new(){ # 檢查是否需要输入密碼 if [[ "$selected" == "update" ]]; then # 執行更新命令,將更新過程输出重定向到進度條中 { echo "10" # 安装,進度 10% sleep 1 echo "30" # 安装,進度 10% echo "$password" | sudo -S apt-get -y update >/dev/null 2>&1 echo "50" # 安装,進度 50% sleep 1 echo "90" # 安装,進度 90% sleep 1 } | dialog --title "更新進度" --gauge "正在更新..." 10 70 0 else # 提示用户输入密碼 #password=$(dialog --title "Password" --passwordbox "輸入密碼:" 10 50 3>&1 1>&2 2>&3) # 執行更新命令 echo "$password" | sudo -S apt-get -y update >/dev/null 2>&1 fi # 顯示更新完成的消息 dialog --title "Update" --msgbox "Update 完成!" 10 50 } dist-upgrade_new(){ # 檢查是否需要输入密碼 if [[ "$selected" == "dist-upgrade" ]]; then { echo "10" # 更新,進度 10% echo "$password" | sudo -S apt-get -y dist-upgrade >/dev/null 2>&1 echo "50" # 更新中,進度 50% sleep 1 echo "90" # 更新完成,進度 90% sleep 1 } | dialog --title "更新進度" --gauge "正在更新..." 10 70 0 # 顯示升级完成的消息框\ dialog --title "dist-upgrade" --msgbox "dist-upgrade 完成!" 10 50 # 返回 else # 提示用户输入密碼 password=$(dialog --title "Password" --passwordbox "輸入密碼:" 10 50 3>&1 1>&2 2>&3) # 執行升级命令 echo "$password" | sudo -S apt-get -y dist-upgrade >/dev/null 2>&1 # 顯示升级完成的消息 dialog --title "dist-upgrade" --msgbox "dist-upgrade 完成!" 10 50 fi } # 安裝包列表,每行一個,格式為 "安裝包名稱" "描述" packages=( "update" "用來取得遠端更新伺服器的套件檔案清單。" "dist-upgrade" "更新套件。" "apache2" "安裝 apache2" "net-tools" "安裝 net-tools" "openssh-server" "安裝SSH" "tree" "安裝tree" "curl" "安裝URL工具,安裝ngrok前必裝" "ngrok" "提供外部訪問本地伺服器的服務" "htop" "安裝htop查看,系統資訊" "cmatrix" "安裝炫爆螢幕保護程式" "mariadb-server" "安裝Mariadb-server" "mariadb-client" "安裝Mariadb-client" ) while true; do # 構建選擇菜單 selected=$(dialog --title "安裝選單" --menu "選擇要安裝的程式:" 20 50 15 "${packages[@]}" 3>&1 1>&2 2>&3) # 如果用户選擇了返回,跳出循環返回上一頁 if [[ -z "$selected" ]]; then break # 如果用戶選擇了 ngrok,則調用函數安裝 install_ngrok elif [[ "$selected" == "ngrok" ]]; then install_ngrok # 如果用戶選擇 update 則調用函數安裝 update_new elif [[ "$selected" == "update" ]]; then update_new # 如果用戶選擇 upgrade 則調用函數安裝 dist-upgrade_new elif [[ "$selected" == "dist-upgrade" ]]; then dist-upgrade_new # 如果用戶選擇了其他安裝包,則調用函數安裝選中的安裝包 elif [[ -n "$selected" ]]; then install_packages "$selected" fi done ;; 6) # 選擇 "安裝PIP套件" # 定義一個函數,用於安裝選定的安裝包 install_packages() { selected_packages="$1" # 檢查是否有選中的安裝包 if [[ -n "$selected_packages" ]]; then # 安裝選中的安裝包並將輸出重定向到 /dev/null { echo "20" # 開始安裝,進度 10% sleep 1 pip install "$selected_packages" > /dev/null 2>&1 echo "60" # 安装完成,進度 90% sleep 1 echo "90" # 安装完成,進度 90% sleep 1 } | dialog --title "pip安裝" --gauge "$selected 套件安裝中...." 10 30 dialog --title "pip安裝完成!" --msgbox "$selected 套件安裝成功!" 10 30 else dialog --title "錯誤" --msgbox "沒選擇任何安裝!" 10 30 fi } pip_update(){ echo "0" > progress.txt { echo "10" sleep 0.5 echo "20" sleep 0.5 echo "30" python3 -m pip install --upgrade pip > /dev/null 2>&1 echo "60" echo "90" sleep 1 } | dialog --title "pip 更新進度" --gauge "正在更新..." 10 70 0 # 顯示更新完成的消息 dialog --title "更新完成" --msgbox "pip 更新完成!" 10 50 } pip_install(){ echo "0" > progress.txt { echo "10" sleep 1 echo "20" sleep 0.5 echo "30" sudo apt-get install python3-pip > /dev/null 2>&1 echo "60" echo "90" sleep 0.5 } | dialog --title "pip 安裝進度" --gauge "python3-pip 正在安裝..." 10 70 0 # 顯示更新完成的消息 dialog --title "安裝成功" --msgbox "pip安裝完成!" 10 30 } # pip列表,格式為 "pip名稱" "描述" packages=( "pip" "pip安裝" "pip update" "更新pip套件" "numpy" "安裝numpy" "python-dotenv" "安裝dotenv" "requests" "安裝requests" "Flask-JWT-Extended" "安裝Flask-JWT-Extended" "Flask" "安裝Flask" "Flask-RESTful" "安裝Flask-RESTful" "PyMySQL" "安裝PyMySQL" "Werkzeug" "安裝Werkzeug" "lask-apispec" "安裝lask-apispec" "marshmallow" "安裝marshmallow" "marshmallow-enum" "安裝marshmallow-enum" "beautifulsoup4" "安裝beautifulsoup4" "selenium" "安裝selenium" "scikit-learn" "安裝scikit-learn" "tensorflow" "安裝tensorflow" "python3-venv" "安裝虛擬環境venv" "openai" "安裝openai" "line-bot-sdk" "安裝line-bot-sdk" ) while true; do # 構建選擇菜單 selected=$(dialog --title "PIP 套件安裝更新" --menu "套件安裝清單:" 40 60 15 "${packages[@]}" 3>&1 1>&2 2>&3) # 調用函數安裝選中的安裝包 if [[ "$selected" == "pip" ]]; then pip_install elif [[ "$selected" == "pip update" ]]; then pip_update elif [[ -n "$selected" ]]; then # 检查软件包是否已经安装 if pip show "$selected" >/dev/null 2>&1; then dialog --title "已安裝" --msgbox "$selected 已經安裝!" 10 50 else install_packages "$selected" fi else break # 如果沒有選中任何選項,則退出循環 fi done ;; 7) #輸入norok token authtoken=$(dialog --stdout --title "ngrok Authtoken" --inputbox "請輸入您的 ngrok authtoken:" 10 50) # 檢查是否输入了 authtoken if [ -n "$authtoken" ]; then # 添加 authtoken 到 ngrok 配置 ngrok config add-authtoken "$authtoken" # 顯示成功消息 dialog --title "完成!" --msgbox "ngrok Authtoken 添加成功" 10 50 else # 顯示錯誤消息 dialog --title "錯誤" --msgbox "ngrok Authtoken 取消輸入!" 10 50 fi ;; 8) #增加openapikey環境變數 opai=$(dialog --stdout --title "OpenAPI key" --inputbox "請輸入您的 Openapikey:" 10 50) if [ -n "$opai" ]; then # 添加 OpenAPI key 到環境變數 echo "export OPENAI_API_KEY=\"$opai\"" >> ~/.bashrc ; source ~/.bashrc # 成功消息 dialog --title "完成!" --msgbox "$opai 添加成功\n 有bug需使用 source ~/.bashrc 重啟" 10 50 ( source ~/.bashrc ) else # 錯誤消息 dialog --title "錯誤" --msgbox "OpenAPI key 取消輸入!" 10 50 fi ;; 9) # 檢查是否安装了 htop if ! command -v /usr/bin/htop &> /dev/null; then # 如果未安装 htop dialog --title "錯誤" --msgbox "尚未安裝 htop!" 10 30 else # 如果安装了 htop /usr/bin/htop fi ;; 10) if ! command -v /usr/bin/cmatrix &> /dev/null; then # 如果未安装 htop dialog --title "錯誤" --msgbox "尚未安裝 cmatrix!" 10 30 else # 如果安装了 htop /usr/bin/cmatrix fi ;; 11) # 用戶選擇 解除安裝程式 # 定義一個函數,用於解除安裝選定的軟件包 uninstall_packages() { selected_packages="$1" if [[ -n "$selected_packages" ]]; then { echo "10" sleep 1 echo "30" echo "$password" | sudo -S apt-get remove -y $selected_packages >/dev/null 2>&1 echo "50" sleep 1 echo "90" sleep 1 } | dialog --title "解除安裝進度" --gauge "$selected 正在解除安裝..." 10 70 0 if [ $? -eq 0 ]; then dialog --title "uninstallation Complete" --msgbox "$selected 解除完成安裝" 10 50 else dialog --title "解除安裝失敗" --msgbox "解除安裝 $selected_packages 失敗" 10 50 fi else dialog --title "錯誤" --msgbox "沒有選擇任何解除安裝!" 30 50 fi } # 安裝包列表,每行一個,格式為 "安裝包名稱" "描述" packages=( "apache2" "解除安裝 apache2" "net-tools" "解除安裝 net-tools" "openssh-server" "解除安裝 SSH" "tree" "解除安裝 tree" "curl" "解除安裝URL工具" "ngrok" "解除安裝 nogrok" "htop" "解除安裝 htop" "cmatrix" "解除安裝炫爆的螢幕保護程式" "mariadb-server" "解除安裝 Mariadb-server" "mariadb-client" "解除安裝 Mariadb-client" ) while true; do # 構建選擇菜單 selected=$(dialog --title "解除安裝程式選單" --menu "解除安裝程式清單:" 20 50 10 "${packages[@]}" 3>&1 1>&2 2>&3) # 如果用户選擇了返回,跳出循環返回上一頁 if [[ -z "$selected" ]]; then break # 如果用戶選擇了其他安裝包,則調用函數解除安裝選中的安裝包 elif [[ -n "$selected" ]]; then # 檢查是否安装 if dpkg-query -W -f='${Status}' "$selected" 2>/dev/null | grep -q "installed"; then uninstall_packages "$selected" else dialog --title "錯誤" --msgbox "$selected 未安裝!" 10 50 fi fi done ;; 12) ngrokhttp=$(dialog --stdout --title "ngrok http port" --inputbox "請輸入http port:" 10 50) # 檢查是否输入了 http port if [ -n "$ngrokhttp" ]; then # 添加 http port 到 ngrok 配置 ngrok http http://localhost:$ngrokhttp fi ;; *) # 其他選擇或者用户取消選擇 dialog --title "結束" --msgbox "你的信念決定未來成為什麼樣的人!" 10 30 break # 退出while退出 ;; esac done ``` --- ### 操作畫面說明 * Linux中新增使用者需要root權限,可以使用以下兩個方式執行 UPT.sh 1. sudo ./UPT.sh #使用sudo執行 UPT.sh 2. sudo su #使用sudo切換至root ![示範](https://hackmd.io/_uploads/BkoRGFxpa.png) --- ### 畫面(一):進入畫面 ![進入畫面](https://hackmd.io/_uploads/S1tBQtxaa.png) --- ### 畫面(二):主頁面選單模式 ![主頁面選單模式](https://hackmd.io/_uploads/ByNomKx66.png) --- ### 畫面(三):網卡訊息,顯示ifconfig資訊 ![網卡訊息](https://hackmd.io/_uploads/HJ8l4Fxap.png) --- ### 畫面(四):顯示目前Port資訊,可依需求修改 ![port](https://hackmd.io/_uploads/r1pO4Yg6T.png) --- ### 畫面(五):時區設置 ![時區設置](https://hackmd.io/_uploads/B1OKBtlT6.png) ![時區設置2](https://hackmd.io/_uploads/B1nFHYxap.png) --- ### 畫面(六):常用程式安裝,可依需求增加 ![安裝選單](https://hackmd.io/_uploads/HyLCLKxaT.png) 安裝中進度條 ![安裝中](https://hackmd.io/_uploads/rJxyvKe66.png) 安裝完成後會顯示完成 ![安裝完成](https://hackmd.io/_uploads/SJVJPKgap.png) 安裝過的程式會提醒已安裝 ![已安裝](https://hackmd.io/_uploads/rk0SDtlTa.png) --- ### 畫面(七):常用python套件安裝,可依需求增加 ![pip安裝套件選單](https://hackmd.io/_uploads/Skq8tYl66.png) pip安裝中進度條 ![pip安裝中](https://hackmd.io/_uploads/H1jm5tg6T.png) pip安裝完成提醒 ![pip安裝完成](https://hackmd.io/_uploads/By7O9FeT6.png) 安裝過pip套件會顯示已安裝 ![pip已安裝](https://hackmd.io/_uploads/rk15FFep6.png) --- ### 畫面(八):Ngrok token輸入 ![norok 輸入](https://hackmd.io/_uploads/SyQGiYx6p.png) ![輸入完成](https://hackmd.io/_uploads/BJYXsFlTa.png) --- ### 畫面(九):OpenAPI key 輸入 ![OPenAPIkey](https://hackmd.io/_uploads/BkydBcxpp.png) ![OPI添加成功](https://hackmd.io/_uploads/HynjmAe6p.png) 1. 輸入完後須輸入指令重啟.bashrc ``` source ~/.bashrc ``` 2. 並輸入查看指令有沒有設置成功 ``` echo $OPENAI_API_KEY ``` ![螢幕擷取畫面 2024-03-02 200759](https://hackmd.io/_uploads/HydnI9e6p.png) --- ### 畫面(十):htop 系統訊息 **如果尚未安裝htop會顯示未安裝,需要回程式安裝選單安裝** ![htop位安裝](https://hackmd.io/_uploads/HkvsDqxpT.png) ![螢2 201403](https://hackmd.io/_uploads/B19mOqx6p.png) ![htop執行](https://hackmd.io/_uploads/HkgYd5lp6.png) * F10退出htop會返回選單畫面 --- ### 畫面(十一):螢幕保護程式cmatrix **如果尚未安裝cmatrix會顯示未安裝,需要回程式安裝選單安裝** ![螢保衛裝](https://hackmd.io/_uploads/S1Wnt5gaa.png) ![瑩寶啟動](https://hackmd.io/_uploads/HyFM5cxap.png) * Ctrl + C 退出 cmatrix 會返回選單畫面 --- ### 畫面(十一):解除程式安裝,可依需求增加 解除安裝選單 ![解除安裝](https://hackmd.io/_uploads/BkHgs5gTT.png) 我們來嘗試解除安裝cmatrix螢幕保護程式 ![解除安裝中](https://hackmd.io/_uploads/r1x6gsce66.png) 解除安裝後會顯示完成 ![解除安裝完成](https://hackmd.io/_uploads/rk77iceTp.png) 解除安裝後再重複選會顯示錯誤 ![解除安裝未安裝](https://hackmd.io/_uploads/Hy5Hsqepa.png) --- ### 畫面(十二):ngrok http port輸入 安裝ngrok後輸入port就能外把界的請求轉發到你指定的Port ![4567](https://hackmd.io/_uploads/BJkLa5e66.png) ![nonononon](https://hackmd.io/_uploads/r1HZZjxT6.png) * Ctrl + C 退出 ngrok 會返回選單畫面 --- ### 結束畫面放激勵語錄 勉勵自己繼續努力 ![結束畫面](https://hackmd.io/_uploads/S10w-slap.png) --- ## 結束 謝謝