openwrt中taiscale自动安装脚本详解

openwrt中taiscale自动安装脚本详解

一、代码仓库地址

https://github.com/adyanth/openwrt-tailscale-enabler

二、代码仓库中脚本文件详解

主要包含三个脚本分别是etc/init.d/tailscaleusr/bin/tailscaleusr/bin/tailscaled ,接下来逐个分析一下脚本中的具体内容:

在这里插入图片描述

1、etc/init.d/tailscale

这个脚本在 OpenWRT 系统初始化时执行,用于控制 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 监听 VPN 数据包的端口号。# 远程节点将自动获悉新端口号,但如果要设置外部防火墙规则,则可能需要配置此项。procd_append_param command --port 41641# OpenWRT 的 /var 是链接到 /tmp 的,所以将持久状态写到别的地方。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 # 将标准输出重定向到系统日志。procd_set_param stderr 1 # 将标准错误输出也重定向到系统日志。procd_close_instance  # 关闭 procd 实例。
}# stop_service 函数定义了服务停止时的行为。
stop_service() {/usr/bin/tailscaled --cleanup  # 执行 Tailscale 守护进程的清理操作。
}
2、usr/bin/tailscale

这个脚本首先检测系统架构并下载适用于该架构的 Tailscale 版本。它还确保下载最新版本的 Tailscale。脚本使用 wget 工具从 Tailscale 官方网站下载 tar 压缩包,并将其解压到 /tmp 目录。最后,脚本尝试运行解压后的 Tailscale 程序。脚本具体内容如下:

#!/bin/sh# 当脚本中的任何命令执行失败时,脚本将停止执行。
set -e# 检查是否已有 /tmp/tailscale 文件,如果没有,则执行后续安装步骤。
if [ ! -f /tmp/tailscale ]; then# 获取当前系统的架构类型。arch=$(uname -m)# 对于 MIPS 架构,进一步确定是大端(be)还是小端(le)。if [ "$arch" == "mips" ]; thenendianness=$(echo -n I | hexdump -o | awk '{ print (substr($2,6,1)=="1") ? "le" : ""; exit }')# 对于其他架构类型,进行名称调整以匹配 Tailscale 的命名规则。elif [ "$arch" == "armv7l" ]; thenarch=armelif [ "$arch" == "aarch64" ]; thenarch=arm64elif [ "$arch" == "x86_64" ]; thenarch=amd64fi# 设置 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" ]; thentailscale_version=$latest_versionfi# 组合出完整的 Tailscale 版本号。version="${tailscale_version}_${arch}${endianness}"# 显示下载信息。echo "Downloading Tailscale ${version} .."# 创建文件列表,用于指定 tar 命令解压哪些文件。echo -e "tailscale_${version}/tailscale" > /tmp/tailscale_${version}_files.txt# 如果 /tmp/tailscaled 文件不存在,则将其添加到文件列表中。if [ ! -f /tmp/tailscaled ]; thenecho -e "tailscale_${version}/tailscaled" >> /tmp/tailscale_${version}_files.txtfi# 下载并解压 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/* /tmprm -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
  1. wget -O- https://pkgs.tailscale.com/stable/
    • 这个命令使用 wget 从指定的 URL 下载数据。
    • -O- 参数指示 wget 将下载的内容输出到标准输出(stdout),而不是保存为文件。
  2. | grep tailscale_
    • 通过管道(|),将 wget 的输出传递给 grep 命令。
    • grep 命令搜索包含 “tailscale_” 的文本行。
  3. | head -1
    • 再次通过管道将 grep 的输出传递给 head 命令。
    • head -1 命令提取传入数据的第一行。
  4. | cut -d'_' -f 2
    • 最后,将 head 的输出传递给 cut 命令。
    • cut 命令按照指定的分隔符(这里是下划线 _)分割文本,并提取第二段文本(-f 2)。
3、usr/bin/tailscaled

这个脚本的主要作用是检查并下载最新版本的 Tailscale,然后在 /tmp 目录下运行它。脚本首先确定运行它的系统的架构类型,然后下载并解压适合该架构的 Tailscale 版本。如果 /tmp/tailscaled 文件已存在,脚本不会执行下载和安装步骤。脚本具体内容如下:

#!/bin/sh# 当任何语句的执行结果不是true时就退出脚本
set -e# 检查/tmp/tailscaled文件是否存在,如果不存在,则执行后续的安装步骤
if [ ! -f /tmp/tailscaled ]; then# 获取系统的架构类型arch=$(uname -m)# 如果架构是mips,则进一步确定是大端(be)还是小端(le)if [ "$arch" == "mips" ]; thenendianness=$(echo -n I | hexdump -o | awk '{ print (substr($2,6,1)=="1") ? "le" : ""; exit }')# 对于其他架构类型,进行名称调整以匹配 Tailscale 的要求elif [ "$arch" == "armv7l" ]; thenarch=armelif [ "$arch" == "aarch64" ]; thenarch=arm64elif [ "$arch" == "x86_64" ]; thenarch=amd64fi# 设置 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" ]; thentailscale_version=$latest_versionfi# 组合出完整的 Tailscale 版本号version="${tailscale_version}_${arch}${endianness}"# 显示下载信息echo "Downloading Tailscale ${version} .."# 记录要下载的文件列表echo -e "tailscale_${version}/tailscaled" > /tmp/tailscale_${version}_files.txt# 从 Tailscale 的官方网站下载并解压相应版本的 Tailscalewget -O- https://pkgs.tailscale.com/stable/tailscale_${version}.tgz | tar x -zvf - -C /tmp -T /tmp/tailscale_${version}_files.txt# 移动解压后的文件并清理临时文件mv /tmp/tailscale_$version/* /tmprm -rf /tmp/tailscale_${version}*# 显示下载完成信息echo "Done!"
fi# 执行 Tailscale
/tmp/tailscaled "$@"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/228474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.1【窗口】窗口简介与窗口组

一,窗口简介 Windows用于显示内容,并将不同生成的内容组合在一起。每个不同的呈现器都可以在同一个进程中,也可以在另一个或多个进程中。 Screen中的窗口概念与你在传统窗口系统中可能习惯的略有不同。在Screen中,当内容来自不同来源时,应用程序被分成几个窗口,当应用程…

Linux查看进程PID以及杀掉进程的方法

目录 参考链接 前言 查看进程PID PS命令 ps -le命令 查找父进程 杀死进程 参考链接 【Linux 】 ps命令详解,查看进程pid_linux查看pid 对应的程序-CSDN博客 Linux查看进程PID的方法(linux查进程的pid)附带自动kill 掉_linux查看pid 对…

DDA 算法

CAD 算法是计算机辅助设计的算法,几何算法是解决几何问题的算法 CAD 算法是指在计算机辅助设计软件中使用的算法,用于实现各种设计和绘图功能,CAD 广泛应用于建筑、机械、电子等领域,可以大大提高设计效率和精度 绘图算法是 CAD…

机器学习算法---聚类

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

大数据机器学习与深度学习——过拟合、欠拟合及机器学习算法分类

大数据机器学习与深度学习——过拟合、欠拟合及机器学习算法分类 过拟合,欠拟合 针对模型的拟合,这里引入两个概念:过拟合,欠拟合。 过拟合:在机器学习任务中,我们通常将数据集分为两部分:训…

03进程基础-学习笔记

Process 进程 进程为操作系统的基本调度单位,占用系统资源(cpu,内存)完成特定任务,所有说进程是操作系统的标准执行单元 进程与程序的差别 程序是静态资源,存储与电脑磁盘中(disk磁盘资源)程序执行后会创建进程,负责完成功能&a…

Python-flask 入门代码

python与pycharm安装 过程略,网上很多,记得为pycharm配置默认解释器 虚拟环境 pipenv # 全局安装虚拟环境 # 可加-U参数,明确全局安装,不加好像也可以? pip3 install pipenv #检查安装情况 pipenv --version # ---控制台输出…

机械硬盘和固态硬盘速度测试

利用ubuntu自带的disk磁盘管理软件对手头的三个硬盘做压力测试,disk软件挺好用的,再也不用命令了。 第一个是致态的1T固态硬盘,速度1.8GB/S。 ST机械硬盘,速度只有300多MB/S. 三星固态硬盘,速度1.4GB/s。

汽车发动机市场调研:预计2029年将达到642亿美元

过去汽车发动机行业快速发展,很多产品都出现供不应求,甚至加价销售的状况,而随着产能过剩、需求下滑,未来汽车发动机行业的价格竞争将愈发激烈,形成新的供需矛盾。根据动力源类型,汽车可分类为传统燃油汽车…

MATLAB2022安装下载教程

安装包需从夸克网盘自取: 链接:https://pan.quark.cn/s/373ffc9213a1 提取码:N7PW 1.将安装包解压 2.以管理员的身份运行文件夹中的setup文件 3.点击高级选项--->我有文件安装密钥 4. 选择【是】,进入下一步 5.输入密钥 0532…

【PHP入门】1.1-PHP初步语法

-PHP语法初步- PHP是一种运行在服务器端的脚本语言&#xff0c;可以嵌入到HTML中。 1.1.1PHP代码标记 在PHP历史发展中&#xff0c;可以使用多种标记来区分PHP脚本 ASP标记&#xff1a; <% php代码 %>短标记&#xff1a; <? Php代码 ?>&#xff0c;以上两种…

智能优化算法应用:基于供需算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于供需算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于供需算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.供需算法4.实验参数设定5.算法结果6.参考文献7.MA…

大模型自定义算子优化方案学习笔记:CUDA算子定义、算子编译、正反向梯度实现

01算子优化的意义 随着大模型应用的普及以及算力紧缺&#xff0c;下一步对于计算性能的追求一定是技术的核心方向。因为目前大模型的计算逻辑是由一个个独立的算子或者说OP正反向求导实现的&#xff0c;底层往往调用的是GPU提供的CUDA的驱动程序。如果不能对于整个计算过程学习…

货物数据处理pandas版

1求和 from openpyxl import load_workbook import pandas as pddef print_hi(name):# Use a breakpoint in the code line below to debug your script.print(fHi, {name}) # Press CtrlF8 to toggle the breakpoint.# Press the green button in the gutter to run the scr…

【C++学习————引用】

【C学习——————引用】 欢迎阅读新一期的c模块————引用 ✒️个人主页&#xff1a;-Joker- &#x1f3f7;️专栏&#xff1a;C &#x1f4dc;代码仓库&#xff1a;c_code &#x1f339;&#x1f339;欢迎大佬们的阅读和三连关注&#xff0c;顺着评论回访&#x1f339;&a…

对可恢复的情况使用受检异常

在Java中&#xff0c;受检异常&#xff08;Checked Exception&#xff09;通常用于表示程序能够预期并且可能进行恢复的异常情况。这类异常是在编译时由编译器强制进行处理的&#xff0c;使得程序员必须显式处理这些异常&#xff0c;或者在方法签名中使用 throws 关键字声明。 …

react之项目打包,本地预览,路由懒加载,打包体积分析以及如何配置CDN

react之项目打包,本地预览,路由懒加载,打包体积分析以及如何配置CDN 一、项目打包二、项目本地预览三、路由懒加载四、打包体积分析五、配置CDN 一、项目打包 执行命令 npm run build根目录下生成的build文件夹 及时打包后的文件 二、项目本地预览 1.全局安装本地服务包 npm…

【Linux】介绍:进程退出、进程等待、进程程序替换

目录 一、进程退出 _exit函数 exit函数 _exit()与exit比较 return退出 二、进程等待 wait方法 waitpid方法 三、进程程序替换 替换函数 函数解释 命名理解 使用举例 一、进程退出 正常终止&#xff08;可以通过 echo $? 查看进程退出码&#xff09;&#xff1a;1.…

Ubuntu22.04切换用户

一、只有一个用户时没有切换用户菜单项 1、用户信息 cat /etc/passwd 2、系统菜单 二、添加用户 添加新用户ym&#xff0c;全名yang mi 三、有两个及以上的用户时出现切换用户菜单项 1、用户信息 cat /etc/passwd 2、系统菜单 四、切换用户 1、点击上图中Switch User …

爬虫 scrapy ——scrapy shell调试及下载当当网数据(十一)

目录 一、scrapy shell 1.什么是scrapy shell&#xff1f; 2.安装 ipython 3.使用scrapy shell 二、当当网案例 1.在items.py中定义数据结构 2.在dang.py中解析数据 3.使用pipeline保存 4.多条管道的使用 5.多页下载 参考 一、scrapy shell 1.什么是scrapy shell&am…