# LYLN-Script **Repository Path**: lylnspace/lyln-script ## Basic Information - **Project Name**: LYLN-Script - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-24 - **Last Updated**: 2026-09-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LYLN-Script Yunzai Bot 的安装与管理脚本。装一次,之后日常操作都通过 `lyln` 命令完成: 启停、看日志、改配置、管插件。 ## 安装 需要 root 权限,仅支持 Linux。下面两条都验证过,任选其一。 **一、clone 安装**(最稳,推荐) ```bash git clone --depth=1 https://gitee.com/lylnspace/lyln-script ~/lyln-script bash ~/lyln-script/install.sh ``` **二、不解压 git,直接拿归档包** ```bash curl -sL https://gitee.com/lylnspace/lyln-script/repository/archive/main.zip -o /tmp/lyln.zip unzip -q -o /tmp/lyln.zip -d /tmp bash /tmp/lyln-script-main/install.sh ``` **一键方式(`raw` 接口恢复后可用)** ```bash bash <(curl -sL https://gitee.com/lylnspace/lyln-script/raw/main/start.sh) ``` > 注意:Gitee 对新建仓库的 `raw` 接口有内容审核,目前 `raw/main` > 与 `raw.giteeusercontent.com` 都返回 **HTTP 451**(`The content may contain > violation information`)。这时 `bash <(curl ...)` 会把 451 的说明文字当成 > 命令执行,报出 `line 1: The: command not found` 之类的东西 —— 这不是脚本的 > 问题,是取到的内容本身就不对。仓库本身是公开可用的,clone 与归档下载都正常。 > 审核通常几小时内自动解除,之后一键方式即可用;在那之前请用上面的一或二。 如果安装了 git 但只想更新脚本而不重装,之后随时可以: ```bash bash ~/lyln-script/install.sh update ``` ## 日常使用 装完之后只需要记住一个命令: ```bash lyln ``` 进去是四组功能: | 分组 | 内容 | | --- | --- | | 启停与日志 | 启动 / 停止 / 重启 / 看日志 / 启动 Redis | | 配置修改 | 主人账号 / 自动退群人数 / 好友申请 / 群邀请 / 直接编辑配置 | | 插件管理 | 市场安装 / 链接安装 / 更新 / 卸载 / 搜索 / 浏览市场 | | 维护操作 | 全部更新 / 重装依赖 / 重装运行时 / 环境自检 | 装了多个 Bot 时主菜单可以直接切换,也能再装一个。 ## 其他子命令 ```bash lyln # 管理界面(等同 install.sh manage) bash install.sh # 已装过则问要不要进管理界面,否则走安装向导 bash install.sh Miao-Yunzai # 直接装喵喵版 bash install.sh -y TRSS-Yunzai # 不弹菜单,自动化用 bash install.sh command # 只重新生成 lyln 命令 bash install.sh update # 更新脚本自身 bash install.sh doctor # 只做环境自检 bash install.sh uninstall-cmd # 删掉 lyln 命令(不动 Bot) ``` ## 安装流程 1. **系统依赖** — git / curl / tar / redis / 中文字体 / tmux,按发行版换算包名 2. **运行时** — 装 nvm 到 `/usr/local/nvm`,用 nvm 装 NodeJS,再装 pnpm 与 pm2 3. **Bot 本体** — 克隆到 `$HOME/` 4. **常用插件** — miao-plugin;TRSS-Yunzai 额外装 genshin 5. **依赖安装** — `pnpm install`,然后首次启动一次生成配置文件 6. **管理命令** — 生成 `/usr/local/bin/lyln` ## 目录结构 ``` start.sh 远端安装入口:装 TUI 工具与 git,克隆本仓库后转交 install.sh install.sh 总入口:子命令分派、安装向导 lyln.template lyln 命令模板,安装时把 LYLN_HOME 替换成实际路径 .gitignore 运行期产物与凭据文件的忽略规则 lib/common.sh 配色、日志、TUI 封装、下载、系统探测、路径探测 lib/node.sh nvm / NodeJS / pnpm / pm2 安装 lib/deps.sh 系统依赖(按发行版映射包名)、Redis、ffmpeg、浏览器 lib/bot.sh Bot 本体与初始插件克隆、依赖安装 lib/tui.sh 安装向导界面 lib/cmd.sh lyln 命令生成、删除、脚本自更新 lib/proc.sh 进程管理:后端探测、启停、日志 lib/config.sh 配置读写(yaml 标量与列表) lib/plugin.sh 插件管理:市场、克隆、安装、更新、卸载 lib/manage.sh lyln 的管理界面,四组功能的入口 ``` ## 设计要点 **发行版兼容**:不假定 `apt` 存在,通过 `detect_pkgmgr` 识别 apt / pacman / dnf / yum / zypper / apk,再用 `pkg_name_for` 把逻辑依赖名 (`base` / `redis` / `fonts` / `build` / `browser` / `ffmpeg`)映射成各家的实际包名。 **镜像自动切换**:查 `ipinfo.io` 判断是否在中国大陆,据此决定用 Gitee 还是 GitHub、`registry.npmmirror.com` 还是 `registry.npmjs.org`。 注意 Gitee 上部分仓库可能不同步,克隆失败会自动回退 GitHub 原站。 **NodeJS 由 nvm 管理**:不用发行版的 node 包(版本通常过旧),而是安装 nvm 到 `/usr/local/nvm`,再用 `nvm install` 装 node。 nvm 是 shell 函数,非交互场景(cron / systemd / 脚本内部)加载不到, 所以脚本不依赖 `nvm use` 来定位 node,而是直接解析 `$NVM_DIR/alias/default` 与 `$NVM_DIR/versions/node/` 拿到 bin 目录塞进 PATH。 默认版本由 `NODE_VERSION_SPEC` 控制(`lts/iron`,即 Node 20), 想换版本:`NODE_VERSION_SPEC=lts/jod bash install.sh`。 **启停优先走项目自带 scripts**:Miao-Yunzai 与 TRSS-Yunzai 各自的 `package.json` 里都有 `start` / `stop` / `restart` / `log`,且 TRSS 用的是 `pm2 start config/pm2.yaml` 而非 `pm2 start --name`。脚本优先调这些 scripts,取不到时才退回后端原生命令,避免绕开项目自己的 pm2 配置。 tmux / screen 可能复用已存在的服务端进程、继承的是旧环境, 所以交给它们执行的命令里会显式带上当前 PATH,否则找不到 nvm 里的 node。 **前台进程识别**:不靠进程名匹配(同机多个 Yunzai 会互相误判), 而是比对 `/proc//cwd` 与目标目录。 **配置改动按 key 定位文件**:两个版本的 config 布局有差异 (如 TRSS 的 `masterQQ` 在 `config/config/other.yaml`), 所以在候选文件里搜键名而不是硬编码路径。写入前自动备份成 `<文件>.bak`, 行尾注释原样保留。 **克隆校验**:部分代理在仓库不存在时会返回 0 却只建出一个空仓库, 所以每次克隆后都校验 `git rev-parse --verify HEAD`,失败则清掉目录。 GitHub 仓库直连失败后依次试代理链,再试归档下载(codeload / Gitee archive)。 **插件依赖必须 `--ignore-workspace`**:项目根的 `pnpm-workspace.yaml` 把 `plugins/**` 纳入了 workspace,不加这个参数会跑到根目录去重建整个 `node_modules`。 **私库 token 只用于直连**:认证地址绝不交给第三方代理, 克隆完成后还会把 origin 里的 token 清掉;日志输出统一过 `mask_secret`。 **受保护插件**:`example` / `genshin` / `system` / `miao-plugin` 等 11 个核心组件 在卸载菜单里不可见,直接调用也会被拒绝。插件名含 `/` 或 `..` 一律拒绝, 防止越出 plugins 目录。 **界面三级回退**:whiptail → dialog → 纯文本菜单。三者都不可用时 仍可通过管道或交互输入操作,不会因为缺 TUI 工具而卡死。 ## 已知限制 - 仅支持 Linux、amd64 / arm64。 - Gitee 的 `raw` 接口对新建仓库有内容审核,可能返回 HTTP 451, 期间一键安装(`bash <(curl ...)`)不可用,改用 clone 或归档包安装。 - `pkg_name_for` 的包名映射按各发行版常见情况整理,冷门发行版可能个别包名不符, 届时对应依赖会安装失败并给出警告,不会中断整体安装。 - nvm 只装在 `/usr/local/nvm`(全局),不区分用户。多用户机器上每个用户 各自的 `~/.nvm` 不会被这个脚本接管。 - 归档下载来的插件没有 `.git`,之后无法用 git pull 更新,只能卸载重装。 - 配置修改只覆盖常用几项;其余请用「直接编辑配置文件」。 - 签名服务器(ICQQ signServer)相关配置未纳入,需要时手动改 `config/ICQQ.yaml` 或对应版本的配置文件。 ## 与参考项目的关系 结构参考 [ArcticFox520/Yunzai-Bot-Script](https://github.com/ArcticFox520/Yunzai-Bot-Script) 的「装完生成命令、之后都用它」思路与 `Install/` / `Manage/` 分层, 但修正了其中若干问题:原项目多数发行版脚本仍然直接调用 `apt`, 把 bash 特有语法当作 `sh` 使用,`pacman_Syyu()` 定义在 Debian 专用脚本里 成了死代码,且不校验克隆结果是否为空仓库。本脚本统一用 bash 并真正按发行版分流。