118 lines
3.5 KiB
Markdown
118 lines
3.5 KiB
Markdown
# 依赖自动安装插件 (auto-dependency)
|
||
|
||
## 概述
|
||
|
||
依赖自动安装插件是一个核心系统插件,用于扫描所有插件的声明文件,检查并自动安装系统依赖。
|
||
|
||
## 功能特性
|
||
|
||
1. **扫描插件声明** - 自动扫描所有插件目录下的 `manifest.json` 文件
|
||
2. **系统依赖检测** - 读取每个插件声明的系统依赖 (`system_dependencies` 字段)
|
||
3. **安装状态检查** - 检查这些系统依赖是否已在系统中安装
|
||
4. **自动安装** - 对于未安装的依赖,使用系统包管理器自动安装
|
||
5. **PL 注入接口** - 通过 PL 注入机制向插件加载器注册功能接口
|
||
|
||
## 使用方法
|
||
|
||
### 在 manifest.json 中声明系统依赖
|
||
|
||
其他插件可以在自己的 `manifest.json` 中声明所需的系统依赖:
|
||
|
||
```json
|
||
{
|
||
"metadata": {
|
||
"name": "my-plugin",
|
||
"version": "1.0.0",
|
||
"author": "MyName",
|
||
"description": "我的插件"
|
||
},
|
||
"config": {
|
||
"enabled": true,
|
||
"args": {}
|
||
},
|
||
"dependencies": ["plugin-loader"],
|
||
"system_dependencies": ["curl", "git", "wget"],
|
||
"permissions": []
|
||
}
|
||
```
|
||
|
||
### 通过 PL 注入接口调用
|
||
|
||
插件加载器加载此插件后,可以通过以下 PL 注入接口进行操作:
|
||
|
||
| 接口名称 | 说明 | 参数 | 返回值 |
|
||
|---------|------|------|--------|
|
||
| `auto-dependency:scan` | 扫描所有插件的声明文件 | `scan_dir` (可选,默认 "store") | 插件信息列表 |
|
||
| `auto-dependency:check` | 检查系统依赖安装状态 | `scan_dir` (可选,默认 "store") | 检查结果字典 |
|
||
| `auto-dependency:install` | 安装缺失的系统依赖 | `scan_dir` (可选,默认 "store") | 安装结果字典 |
|
||
| `auto-dependency:info` | 获取插件系统信息 | 无 | 系统信息字典 |
|
||
|
||
### 示例代码
|
||
|
||
```python
|
||
# 获取插件加载器中的 auto-dependency 功能
|
||
injector = get_pl_injector() # 从插件加载器获取
|
||
|
||
# 扫描所有插件的系统依赖声明
|
||
plugins = injector.get_injected_functions("auto-dependency:scan")[0]()
|
||
print(f"找到 {len(plugins)} 个插件")
|
||
|
||
# 检查依赖安装状态
|
||
result = injector.get_injected_functions("auto-dependency:check")[0]()
|
||
print(f"已安装:{result['installed_count']}, 缺失:{result['missing_count']}")
|
||
|
||
# 安装缺失的依赖
|
||
install_result = injector.get_injected_functions("auto-dependency:install")[0]()
|
||
print(f"成功安装:{install_result['success_count']}, 失败:{install_result['failed_count']}")
|
||
```
|
||
|
||
## 支持的包管理器
|
||
|
||
插件自动检测系统使用的包管理器,支持:
|
||
|
||
- **Debian/Ubuntu**: apt-get, apt
|
||
- **RHEL/CentOS**: yum, dnf
|
||
- **Arch Linux**: pacman
|
||
- **macOS**: brew
|
||
- **Alpine Linux**: apk
|
||
|
||
## 配置选项
|
||
|
||
在 `manifest.json` 的 `config.args` 中可以配置:
|
||
|
||
```json
|
||
{
|
||
"config": {
|
||
"enabled": true,
|
||
"args": {
|
||
"scan_dirs": ["store"],
|
||
"package_manager": "auto",
|
||
"auto_install": true
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
| 配置项 | 说明 | 默认值 |
|
||
|-------|------|--------|
|
||
| `scan_dirs` | 要扫描的目录列表 | `["store"]` |
|
||
| `package_manager` | 包管理器(auto 为自动检测) | `"auto"` |
|
||
| `auto_install` | 是否自动安装缺失的依赖 | `true` |
|
||
|
||
## 安全说明
|
||
|
||
- 插件需要 `*` 权限才能执行系统命令安装包
|
||
- 包安装操作有超时限制(300 秒)
|
||
- 所有安装操作都会记录日志
|
||
|
||
## 文件结构
|
||
|
||
```
|
||
store/@{NebulaShell}/auto-dependency/
|
||
├── manifest.json # 插件清单
|
||
├── main.py # 主逻辑实现
|
||
├── PL/
|
||
│ └── main.py # PL 注入入口
|
||
└── README.md # 本文档
|
||
```
|