openwrt中taiscale自动安装脚本详解

news2024/12/23 9:44:22

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" ]; 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} .."

    # 创建文件列表,用于指定 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
  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" ]; 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

# 执行 Tailscale
/tmp/tailscaled "$@"

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

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

相关文章

数字孪生Web3D智慧机房可视化运维云平台建设方案

前言 进入信息化时代,数字经济发展如火如荼,数据中心作为全行业数智化转型的智慧基座,重要性日益凸显。与此同时,随着东数西算工程落地和新型算力网络体系构建,数据中心建设规模和业务总量不断增长,机房管理…

【深度学习目标检测】九、基于yolov5的安全帽识别(python,目标检测)

YOLOv5是目标检测领域一种非常优秀的模型,其具有以下几个优势: 1. 高精度:YOLOv5相比于其前身YOLOv4,在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进,如更深的网络结构、更多的特征层和更高分辨率的输入图…

“四十不纵欲,五十不纵情,六十不纵……”这三样东西,影响一生

著名文豪曹植曾在诗作中写道:“清时难屡得,嘉会不可常。天地无终极,人命若朝霞。” 天地之悠悠无穷无尽,而人生之寿命短如晨霜稍纵即逝,几十年时光也不过是弹指一挥间。 纵使曾经怀有豪情万丈,总饱含凌云…

HarmonyOS给应用添加消息通知

给您的应用添加通知 通知介绍 通知旨在让用户以合适的方式及时获得有用的新消息,帮助用户高效地处理任务。应用可以通过通知接口发送通知消息,用户可以通过通知栏查看通知内容,也可以点击通知来打开应用,通知主要有以下使用场景…

MY SQL数据库系统

一、认识MY SQL: MySQL是-个真正的多线程.多用户的SQL 数据库服务.凭借其高性能、高可靠和易于使用的特性.成为服务器领域中最受欢迎的开源数据库系统。在2008年以前,MySQL项目由MySaLAB公司进行开发、发布和支持,之后…

【精选】计算机网络教程(第1章计算机网络概述)

目录 前言 第1章计算机网络概述 1、计算机网络的分类 2、典型的网络交换方式主要分为两种 3、计算机网络体系结构——原理体系结构 结语 前言 总结计算机网络教程课程期末必记知识点。 第1章计算机网络概述 1、计算机网络的分类 按网络的覆盖范围进行分类 局域网&#xf…

Linux---文本搜索命令

1. grep命令的使用 命令说明grep文本搜索 grep命令效果图: 2. grep命令选项的使用 命令选项说明-i忽略大小写-n显示匹配行号-v显示不包含匹配文本的所有行 -i命令选项效果图: -n命令选项效果图: -v命令选项效果图: 3. grep命令结合正则表达式的使用 正则表达式说明^以指…

部署LVS的NET模式

实验准备 #负载调度器# 192.168.116.40 #内网 12.0.0.100 #外网 先添加双网卡 #web服务器# 192.168.116.20 #web1 192.168.116.30 #web2 #nfs共享服务# 192.168.116.10 #nfs systemctl stop firewalld setenforce 0 1.nfs共享文件 1…

Unity 常用资料

1. Layer layer本质是按序左移的一个Int32数字,int32有4个字节》32位,故可以支持32个层级。系统自身使用了5个层,意味着用户还有27个层可以使用。 0000 0000 0000 0000 0000 0000 0000 0000 可以且只能任意位为1。unity具体的0-31的层级分布…

【观测宇宙】

这个网站一眼看清整个宇宙。可观测范围一亿光年。 Cocosmos | 掌上宇宙 作者开发介绍:Cocosmos 序章 | 掌中宇宙,浩瀚星海,一眼万年 (qq.com)

HPM6750系列--第十篇 时钟系统

一、目的 上一篇中《HPM6750系列--第九篇 GPIO详解(基本操作)》我们讲解了HPM6750 GPIO相关内容,再进一步讲解其他外设功能之前,我们有必要先讲解一下时钟系统。 时钟可以说是微控制器系统中的心脏,外设必须依赖时钟才…

Java反序列化漏洞-CC1利用链分析

文章目录 一、前置知识1. 反射2. Commons Collections是什么3. 环境准备 二、分析利用链1. Transformer2. InvokeTransformer执行命令 3. ConstantTransformer4. ChainedTransformer执行命令 5. TransformedMap6. AbstractInputCheckedMapDecorator7. AnnotationInvocationHand…

软件设计师——数据结构(一)

📑前言 本文主要是【数据结构】——软件设计师——数据结构的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f304…

基于Python数据可视化的网易云音乐歌单分析系统

目录 《Python数据分析初探》项目报告 基于Python数据可视化的网易云音乐歌单分析系统一、项目简介(一)项目背景(二)项目过程 二、项目设计流程图(一)基于Python数据可视化的网易云音乐歌单分析系统的整体…

栈(C语言版)

一.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守 后进先出 LIFO ( Last In First Out )的原则。…

【图像分类】【深度学习】【Pytorch版本】 ResNeXt模型算法详解

【图像分类】【深度学习】【Pytorch版本】 ResNeXt模型算法详解 文章目录 【图像分类】【深度学习】【Pytorch版本】 ResNeXt模型算法详解前言ResNeXt讲解分组卷积(Group Converlution)分割-变换-合并策略(split-transform-merge)ResNeXt模型结构 ResNeXt Pytorch代码完整代码总…

Vue3页面如何设置rem单位的依据“根font-size”的两种方式

最近在对项目做整体的自适应。我们可以通过设置meta的viewport属性设置屏幕的缩放,但有时候,屏幕缩放了但字体大小也需要做相应的调整才能达到更好的自适应效果。我们很容易想到使用媒体查询rem来实现字体的自适应。 rem单位:“rem” 是 “ro…

XXE实体注入漏洞知识点

什么是XXE漏洞? XXE,即XML外部实体注入漏洞,XXE 漏洞发生在应用程序解析 XML 输入时, 没有禁止外部实体的加载 ,导致可加载恶意外部文件,造成文件读取、命令执行、攻击内网网站等危险。 XXE漏洞触发的点…

甜酷女孩穿搭 I 时尚与保暖都兼具的羽绒服

这款工装风羽绒服 酷酷的中性风 清新温柔的杏紫两色 采用定制复合面料 顺滑平整硬朗的材质 具有防水功能 下雪下雨天也不用担心哦 90白鹅绒,立领连帽设计 帽子做的是可拆卸 可以切换两种风格 袖口采用可调节魔术贴设计 下摆可调节抽绳设计 处处透着细节…

Content-Type是什么

目录 Content-Type是什么 获取方式 设置方式 常见类型 application/x-www-form-urlencoded multipart/form-data application/json text/xml text/html text/plain Content-Type是什么 Content-Type出现在请求标头和响应标头中,意思是内容类型&#xff0…