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