openwrt中taiscale自動安裝腳本方式
openwrt中taiscale自動安裝腳本
一、代碼倉庫地址
https://github.com/adyanth/openwrt-tailscale-enabler
二、代碼倉庫中腳本文件詳解
主要包含三個腳本分別是etc/init.d/tailscale、usr/bin/tailscale、usr/bin/tailscaled ,接下來逐個分析一下腳本中的具體內(nèi)容:

1、etc/init.d/tailscale
這個腳本在 OpenWRT 系統(tǒng)初始化時執(zhí)行,用于控制 Tailscale 守護(hù)進(jìn)程的啟動和停止。
腳本具體內(nèi)容如下:
#!/bin/sh /etc/rc.common
# 版權(quán)聲明,表明腳本歸 Google LLC 所有,使用 Apache-2.0 許可。
USE_PROCD=1 # 使用 procd,OpenWRT 的進(jìn)程管理守護(hù)程序。
START=99 # 設(shè)置腳本啟動的順序,數(shù)字越大越后啟動。
STOP=1 # 設(shè)置腳本停止的順序,數(shù)字越小越先停止。
# start_service 函數(shù)定義了服務(wù)啟動時的行為。
start_service() {
procd_open_instance # 開啟一個新的 procd 實例。
procd_set_param command /usr/bin/tailscaled # 設(shè)置要運(yùn)行的命令(Tailscale 守護(hù)進(jìn)程)。
# 設(shè)置 Tailscale 監(jiān)聽 VPN 數(shù)據(jù)包的端口號。
# 遠(yuǎn)程節(jié)點(diǎn)將自動獲悉新端口號,但如果要設(shè)置外部防火墻規(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 # 設(shè)置進(jìn)程崩潰后自動重啟。
procd_set_param stdout 1 # 將標(biāo)準(zhǔn)輸出重定向到系統(tǒng)日志。
procd_set_param stderr 1 # 將標(biāo)準(zhǔn)錯誤輸出也重定向到系統(tǒng)日志。
procd_close_instance # 關(guān)閉 procd 實例。
}
# stop_service 函數(shù)定義了服務(wù)停止時的行為。
stop_service() {
/usr/bin/tailscaled --cleanup # 執(zhí)行 Tailscale 守護(hù)進(jìn)程的清理操作。
}
2、usr/bin/tailscale
這個腳本首先檢測系統(tǒng)架構(gòu)并下載適用于該架構(gòu)的 Tailscale 版本。它還確保下載最新版本的 Tailscale。
腳本使用 wget 工具從 Tailscale 官方網(wǎng)站下載 tar 壓縮包,并將其解壓到 /tmp 目錄。最后,腳本嘗試運(yùn)行解壓后的 Tailscale 程序。
腳本具體內(nèi)容如下:
#!/bin/sh
# 當(dāng)腳本中的任何命令執(zhí)行失敗時,腳本將停止執(zhí)行。
set -e
# 檢查是否已有 /tmp/tailscale 文件,如果沒有,則執(zhí)行后續(xù)安裝步驟。
if [ ! -f /tmp/tailscale ]; then
# 獲取當(dāng)前系統(tǒng)的架構(gòu)類型。
arch=$(uname -m)
# 對于 MIPS 架構(gòu),進(jìn)一步確定是大端(be)還是小端(le)。
if [ "$arch" == "mips" ]; then
endianness=$(echo -n I | hexdump -o | awk '{ print (substr($2,6,1)=="1") ? "le" : ""; exit }')
# 對于其他架構(gòu)類型,進(jìn)行名稱調(diào)整以匹配 Tailscale 的命名規(guī)則。
elif [ "$arch" == "armv7l" ]; then
arch=arm
elif [ "$arch" == "aarch64" ]; then
arch=arm64
elif [ "$arch" == "x86_64" ]; then
arch=amd64
fi
# 設(shè)置 Tailscale 的默認(rèn)版本號。
tailscale_version="1.56.1"
# 從 Tailscale 的官方網(wǎng)站獲取最新版本號。
latest_version=$(wget -O- https://pkgs.tailscale.com/stable/ | grep tailscale_ | head -1 | cut -d'_' -f 2)
# 如果最新版本號與默認(rèn)版本號不同,則使用最新版本號。
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
# 運(yùn)行 Tailscale,傳遞任何給腳本的參數(shù)。
/tmp/tailscale "$@"
這句詳細(xì)解釋一下每個命令具體含義:
wget -O- https://pkgs.tailscale.com/stable/ | grep tailscale_ | head -1 | cut -d'_' -f 2
wget -O- https://pkgs.tailscale.com/stable/:
- 這個命令使用
wget從指定的 URL 下載數(shù)據(jù)。 -O-參數(shù)指示wget將下載的內(nèi)容輸出到標(biāo)準(zhǔn)輸出(stdout),而不是保存為文件。
| grep tailscale_:
- 通過管道(
|),將wget的輸出傳遞給grep命令。 grep命令搜索包含 “tailscale_” 的文本行。
| head -1:
- 再次通過管道將
grep的輸出傳遞給head命令。 head -1命令提取傳入數(shù)據(jù)的第一行。
| cut -d'_' -f 2:
- 最后,將
head的輸出傳遞給cut命令。 cut命令按照指定的分隔符(這里是下劃線_)分割文本,并提取第二段文本(-f 2)。
3、usr/bin/tailscaled
這個腳本的主要作用是檢查并下載最新版本的 Tailscale,然后在 /tmp 目錄下運(yùn)行它。
腳本首先確定運(yùn)行它的系統(tǒng)的架構(gòu)類型,然后下載并解壓適合該架構(gòu)的 Tailscale 版本。
如果 /tmp/tailscaled 文件已存在,腳本不會執(zhí)行下載和安裝步驟。
腳本具體內(nèi)容如下:
#!/bin/sh
# 當(dāng)任何語句的執(zhí)行結(jié)果不是true時就退出腳本
set -e
# 檢查/tmp/tailscaled文件是否存在,如果不存在,則執(zhí)行后續(xù)的安裝步驟
if [ ! -f /tmp/tailscaled ]; then
# 獲取系統(tǒng)的架構(gòu)類型
arch=$(uname -m)
# 如果架構(gòu)是mips,則進(jìn)一步確定是大端(be)還是小端(le)
if [ "$arch" == "mips" ]; then
endianness=$(echo -n I | hexdump -o | awk '{ print (substr($2,6,1)=="1") ? "le" : ""; exit }')
# 對于其他架構(gòu)類型,進(jìn)行名稱調(diào)整以匹配 Tailscale 的要求
elif [ "$arch" == "armv7l" ]; then
arch=arm
elif [ "$arch" == "aarch64" ]; then
arch=arm64
elif [ "$arch" == "x86_64" ]; then
arch=amd64
fi
# 設(shè)置 Tailscale 的默認(rèn)版本
tailscale_version="1.56.1"
# 從 Tailscale 的官方網(wǎng)站獲取最新版本號
latest_version=$(wget -O- https://pkgs.tailscale.com/stable/ | grep tailscale_ | head -1 | cut -d'_' -f 2)
# 如果最新版本號與默認(rèn)版本號不同,則使用最新版本
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 的官方網(wǎng)站下載并解壓相應(yīng)版本的 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 "$@"
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux虛擬機(jī)復(fù)制文件到Windows主機(jī)的解決辦法
這篇文章主要介紹了Linux虛擬機(jī)復(fù)制文件到Windows主機(jī)的解決辦法,文中通過代碼示例和圖文講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-07-07
Linux下查看CPU型號,內(nèi)存大小,硬盤空間的命令(詳解)
下面小編就為大家?guī)硪黄狶inux下查看CPU型號,內(nèi)存大小,硬盤空間的命令(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11
Linux服務(wù)器tomact 8.0啟動慢的完美解決方法
這篇文章主要介紹了Linux服務(wù)器tomact 8.0啟動慢的完美解決方法,需要的朋友可以參考下2017-08-08
Apache服務(wù)器主配置文件httpd.conf詳解
這篇文章主要介紹了Apache服務(wù)器主配置文件httpd.conf詳解,需要的朋友可以參考下2014-09-09
分享Linux 系統(tǒng)生成隨機(jī)密碼的10種方法
利用Linux系統(tǒng)生成隨機(jī)密碼的10種方法 Linux操作系統(tǒng)的一大優(yōu)點(diǎn)是對于同樣一件事情,你可以使用高達(dá)數(shù)百種方法來實現(xiàn)它。例如,你可以通過數(shù)十種方法來生成隨機(jī)密碼。本文將介紹生成隨機(jī)密碼的十種方法,感興趣的朋友一起學(xué)習(xí)吧2015-12-12
Apache SeaTunnel 集群部署超詳細(xì)教程
SeaTunnel Engine 的Master服務(wù)和Worker服務(wù)分離,每個服務(wù)單獨(dú)一個進(jìn)程,這篇文章主要介紹了Apache SeaTunnel 集群部署詳細(xì)教程,需要的朋友可以參考下2024-12-12
Apache Omid TSO 組件源碼實現(xiàn)原理解析
這篇文章主要介紹了Apache Omid TSO 組件源碼實現(xiàn)原理解析,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-07-07

