openwrt中taiscale自動安裝腳本方式
openwrt中taiscale自動安裝腳本
一、代碼倉庫地址
https://github.com/adyanth/openwrt-tailscale-enabler
二、代碼倉庫中腳本文件詳解
主要包含三個腳本分別是etc/init.d/tailscale
、usr/bin/tailscale
、usr/bin/tailscaled
,接下來逐個分析一下腳本中的具體內容:
1、etc/init.d/tailscale
這個腳本在 OpenWRT 系統(tǒng)初始化時執(zhí)行,用于控制 Tailscale 守護進程的啟動和停止。
腳本具體內容如下:
#!/bin/sh /etc/rc.common # 版權聲明,表明腳本歸 Google LLC 所有,使用 Apache-2.0 許可。 USE_PROCD=1 # 使用 procd,OpenWRT 的進程管理守護程序。 START=99 # 設置腳本啟動的順序,數字越大越后啟動。 STOP=1 # 設置腳本停止的順序,數字越小越先停止。 # start_service 函數定義了服務啟動時的行為。 start_service() { procd_open_instance # 開啟一個新的 procd 實例。 procd_set_param command /usr/bin/tailscaled # 設置要運行的命令(Tailscale 守護進程)。 # 設置 Tailscale 監(jiān)聽 VPN 數據包的端口號。 # 遠程節(jié)點將自動獲悉新端口號,但如果要設置外部防火墻規(guī)則,則可能需要配置此項。 procd_append_param command --port 41641 # OpenWRT 的 /var 是鏈接到 /tmp 的,所以將持久狀態(tài)寫到別的地方。 procd_append_param command --state /etc/config/tailscaled.state # 為 TLS 證書和 Taildrop 持久化文件 procd_append_param command --statedir /etc/tailscale/ procd_set_param respawn # 設置進程崩潰后自動重啟。 procd_set_param stdout 1 # 將標準輸出重定向到系統(tǒng)日志。 procd_set_param stderr 1 # 將標準錯誤輸出也重定向到系統(tǒng)日志。 procd_close_instance # 關閉 procd 實例。 } # stop_service 函數定義了服務停止時的行為。 stop_service() { /usr/bin/tailscaled --cleanup # 執(zhí)行 Tailscale 守護進程的清理操作。 }
2、usr/bin/tailscale
這個腳本首先檢測系統(tǒng)架構并下載適用于該架構的 Tailscale 版本。它還確保下載最新版本的 Tailscale。
腳本使用 wget 工具從 Tailscale 官方網站下載 tar 壓縮包,并將其解壓到 /tmp
目錄。最后,腳本嘗試運行解壓后的 Tailscale 程序。
腳本具體內容如下:
#!/bin/sh # 當腳本中的任何命令執(zhí)行失敗時,腳本將停止執(zhí)行。 set -e # 檢查是否已有 /tmp/tailscale 文件,如果沒有,則執(zhí)行后續(xù)安裝步驟。 if [ ! -f /tmp/tailscale ]; then # 獲取當前系統(tǒng)的架構類型。 arch=$(uname -m) # 對于 MIPS 架構,進一步確定是大端(be)還是小端(le)。 if [ "$arch" == "mips" ]; then endianness=$(echo -n I | hexdump -o | awk '{ print (substr($2,6,1)=="1") ? "le" : ""; exit }') # 對于其他架構類型,進行名稱調整以匹配 Tailscale 的命名規(guī)則。 elif [ "$arch" == "armv7l" ]; then arch=arm elif [ "$arch" == "aarch64" ]; then arch=arm64 elif [ "$arch" == "x86_64" ]; then arch=amd64 fi # 設置 Tailscale 的默認版本號。 tailscale_version="1.56.1" # 從 Tailscale 的官方網站獲取最新版本號。 latest_version=$(wget -O- https://pkgs.tailscale.com/stable/ | grep tailscale_ | head -1 | cut -d'_' -f 2) # 如果最新版本號與默認版本號不同,則使用最新版本號。 if [ "$tailscale_version" != "$latest_version" ]; then tailscale_version=$latest_version fi # 組合出完整的 Tailscale 版本號。 version="${tailscale_version}_${arch}${endianness}" # 顯示下載信息。 echo "Downloading Tailscale ${version} .." # 創(chuàng)建文件列表,用于指定 tar 命令解壓哪些文件。 echo -e "tailscale_${version}/tailscale" > /tmp/tailscale_${version}_files.txt # 如果 /tmp/tailscaled 文件不存在,則將其添加到文件列表中。 if [ ! -f /tmp/tailscaled ]; then echo -e "tailscale_${version}/tailscaled" >> /tmp/tailscale_${version}_files.txt fi # 下載并解壓 Tailscale。 wget -O- https://pkgs.tailscale.com/stable/tailscale_${version}.tgz | tar x -zvf - -C /tmp -T /tmp/tailscale_${version}_files.txt # 移動解壓后的文件到 /tmp 目錄,并清理不再需要的文件。 mv /tmp/tailscale_$version/* /tmp rm -rf /tmp/tailscale_${version}* # 顯示下載完成信息。 echo "Done!" fi # 運行 Tailscale,傳遞任何給腳本的參數。 /tmp/tailscale "$@"
這句詳細解釋一下每個命令具體含義:
wget -O- https://pkgs.tailscale.com/stable/ | grep tailscale_ | head -1 | cut -d'_' -f 2
wget -O- https://pkgs.tailscale.com/stable/
:
- 這個命令使用
wget
從指定的 URL 下載數據。 -O-
參數指示wget
將下載的內容輸出到標準輸出(stdout),而不是保存為文件。
| grep tailscale_
:
- 通過管道(
|
),將wget
的輸出傳遞給grep
命令。 grep
命令搜索包含 “tailscale_” 的文本行。
| head -1
:
- 再次通過管道將
grep
的輸出傳遞給head
命令。 head -1
命令提取傳入數據的第一行。
| cut -d'_' -f 2
:
- 最后,將
head
的輸出傳遞給cut
命令。 cut
命令按照指定的分隔符(這里是下劃線_
)分割文本,并提取第二段文本(-f 2
)。
3、usr/bin/tailscaled
這個腳本的主要作用是檢查并下載最新版本的 Tailscale,然后在 /tmp
目錄下運行它。
腳本首先確定運行它的系統(tǒng)的架構類型,然后下載并解壓適合該架構的 Tailscale 版本。
如果 /tmp/tailscaled
文件已存在,腳本不會執(zhí)行下載和安裝步驟。
腳本具體內容如下:
#!/bin/sh # 當任何語句的執(zhí)行結果不是true時就退出腳本 set -e # 檢查/tmp/tailscaled文件是否存在,如果不存在,則執(zhí)行后續(xù)的安裝步驟 if [ ! -f /tmp/tailscaled ]; then # 獲取系統(tǒng)的架構類型 arch=$(uname -m) # 如果架構是mips,則進一步確定是大端(be)還是小端(le) if [ "$arch" == "mips" ]; then endianness=$(echo -n I | hexdump -o | awk '{ print (substr($2,6,1)=="1") ? "le" : ""; exit }') # 對于其他架構類型,進行名稱調整以匹配 Tailscale 的要求 elif [ "$arch" == "armv7l" ]; then arch=arm elif [ "$arch" == "aarch64" ]; then arch=arm64 elif [ "$arch" == "x86_64" ]; then arch=amd64 fi # 設置 Tailscale 的默認版本 tailscale_version="1.56.1" # 從 Tailscale 的官方網站獲取最新版本號 latest_version=$(wget -O- https://pkgs.tailscale.com/stable/ | grep tailscale_ | head -1 | cut -d'_' -f 2) # 如果最新版本號與默認版本號不同,則使用最新版本 if [ "$tailscale_version" != "$latest_version" ]; then tailscale_version=$latest_version fi # 組合出完整的 Tailscale 版本號 version="${tailscale_version}_${arch}${endianness}" # 顯示下載信息 echo "Downloading Tailscale ${version} .." # 記錄要下載的文件列表 echo -e "tailscale_${version}/tailscaled" > /tmp/tailscale_${version}_files.txt # 從 Tailscale 的官方網站下載并解壓相應版本的 Tailscale wget -O- https://pkgs.tailscale.com/stable/tailscale_${version}.tgz | tar x -zvf - -C /tmp -T /tmp/tailscale_${version}_files.txt # 移動解壓后的文件并清理臨時文件 mv /tmp/tailscale_$version/* /tmp rm -rf /tmp/tailscale_${version}* # 顯示下載完成信息 echo "Done!" fi # 執(zhí)行 Tailscale /tmp/tailscaled "$@"
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Linux下查看CPU型號,內存大小,硬盤空間的命令(詳解)
下面小編就為大家?guī)硪黄狶inux下查看CPU型號,內存大小,硬盤空間的命令(詳解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11