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();
|