1. index.js代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
const fs = require('fs');
const { execSync, spawn } = require('child_process');
const path = require('path');
const https = require('https');
const tar = require('tar');

const OPENLIST_PATH = path.join(__dirname, 'openlist');
const DOWNLOAD_URL = 'https://gh.jasonzeng.dev/https://github.com/OpenListTeam/OpenList/releases/download/v4.1.1/openlist-linux-amd64.tar.gz';
const TAR_FILE = path.join(__dirname, 'openlist.tar.gz');

function downloadFile(url, dest, callback) {
const file = fs.createWriteStream(dest);
https.get(url, response => {
response.pipe(file);
file.on('finish', () => {
file.close(callback);
});
}).on('error', err => {
fs.unlink(dest, () => {});
console.error('下载失败:', err.message);
});
}

function extractTar(file, dest, callback) {
tar.x({
file: file,
cwd: dest,
strict: true
}).then(callback).catch(err => {
console.error('解压失败:', err.message);
});
}

function ensureOpenlistExists() {
if (fs.existsSync(OPENLIST_PATH)) {
console.log('openlist 已存在,跳过下载。');
runOpenlist();
} else {
console.log('openlist 不存在,开始下载...');
downloadFile(DOWNLOAD_URL, TAR_FILE, () => {
console.log('下载完成,开始解压...');
extractTar(TAR_FILE, __dirname, () => {
console.log('解压完成,设置权限...');
try {
fs.chmodSync(OPENLIST_PATH, 0o755);
console.log('权限设置完成。');
runOpenlist();
} catch (err) {
console.error('设置权限失败:', err.message);
}
});
});
}
}

function runOpenlist() {
console.log('启动 openlist server...');
const proc = spawn('./openlist', ['server']);

proc.stdout.on('data', data => {
console.log(`[stdout] ${data}`);
});

proc.stderr.on('data', data => {
console.error(`[stderr] ${data}`);
});

proc.on('close', code => {
console.log(`openlist 进程退出,代码: ${code}`);
});
}

ensureOpenlistExists();

2. package.json代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"name": "openlist-runner",
"version": "1.0.0",
"description": "自动下载、解压并运行 OpenList 的 Node.js 工具",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "唐 大叔",
"license": "MIT",
"dependencies": {
"tar": "^6.1.11"
}
}

3. 复制第一次运行生成的密码备用

4. 停止运行,进入data文件夹里面的config.json修改5244端口为实际端口并重新运行