mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 09:36:08 +08:00
installer powered by jssh
This commit is contained in:
1 parent
759675fcd4
commit
2d1522f671
4 files changed
+819
-1
No files matched your search
@@ -24,6 +24,7 @@ packages/**/*.js
|
||||
!/build/build.js
|
||||
!**/bin/*.js
|
||||
!*.page.js
|
||||
!/install/jssh.d.ts
|
||||
|
||||
# Data files
|
||||
*.mmdb
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
import './jssh';
|
||||
|
||||
const NVM_NODEJS_ORG_MIRROR = 'https://mirrors.tuna.tsinghua.edu.cn/nodejs-release';
|
||||
const MONGODB_REPO = 'https://mirrors.tuna.tsinghua.edu.cn/mongodb/apt/ubuntu';
|
||||
const MINIO_DOWNLOAD = 'http://dl.minio.org.cn/server/minio/release/linux-amd64/minio';
|
||||
|
||||
const map = {
|
||||
16.04: 'xenial',
|
||||
18.04: 'bionic',
|
||||
20.04: 'focal',
|
||||
};
|
||||
const ver = cli.prompt('系统版本:16.04/18.04/20.04');
|
||||
if (!map[ver]) {
|
||||
log.error('无效输入 / Invalid input');
|
||||
exit(1);
|
||||
}
|
||||
log.info('开始运行 HydroOJ 安装工具 / Starting HydroOJ installation tool');
|
||||
const MINIO_ACCESS_KEY = randomstring(32);
|
||||
const MINIO_SECRET_KEY = randomstring(32);
|
||||
const DATABASE_PASSWORD = randomstring(32);
|
||||
|
||||
function execWithNvm(str, env = {}) {
|
||||
exec(`/root/.nvm/nvm.sh && ${str}`, env);
|
||||
}
|
||||
function logAndRun(str, env = {}) {
|
||||
log.info('# %s', str);
|
||||
exec(str, env);
|
||||
}
|
||||
function logAndRunWithNvm(str, env = {}) {
|
||||
log.info('# %s', str);
|
||||
execWithNvm(str, env);
|
||||
}
|
||||
|
||||
log.info('准备开始安装 / Preparing install');
|
||||
logAndRun('apt-get -qq update');
|
||||
logAndRun('apt-get install -y curl wget gnupg >/dev/null');
|
||||
logAndRun('wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | apt-key add -');
|
||||
logAndRun(`echo "deb [ arch=amd64 ] ${MONGODB_REPO} ${map[ver]}/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list`);
|
||||
logAndRun('apt-get -qq update');
|
||||
logAndRun('mkdir -p /data/db /data/file ~/.hydro');
|
||||
logAndRun('正在安装 NodeJS / Installing NodeJS');
|
||||
const resp = http.request('GET', 'https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.36.0/install.sh');
|
||||
const script = resp.body.replace(/raw\.githubusercontent\.com\/nvm-sh\/nvm\//g, 'cdn.jsdelivr.net/gh/nvm-sh/nvm@');
|
||||
fs.writefile('/tmp/install-nvm.sh', script);
|
||||
logAndRun('bash /tmp/install-nvm.sh');
|
||||
execWithNvm('nvm install 14', { NVM_NODEJS_ORG_MIRROR });
|
||||
execWithNvm('nvm use 14');
|
||||
logAndRunWithNvm('npm i yarn -g');
|
||||
log.info('正在安装 pm2 / Installing pm2');
|
||||
logAndRunWithNvm('yarn global add pm2');
|
||||
if (!cli.bool('skipMongo')) {
|
||||
log.info('正在安装 MongoDB / Installing MongoDB');
|
||||
logAndRun('apt-get -qq install -y mongodb-org');
|
||||
logAndRunWithNvm('pm2 start mongod');
|
||||
sleep(5000);
|
||||
log.info('正在创建数据库用户 / Creating database user');
|
||||
fs.writefile('/tmp/createUser.js', `\
|
||||
db.createUser({
|
||||
user: 'hydro',
|
||||
pwd: '${DATABASE_PASSWORD}',
|
||||
roles: [{ role: 'readWrite', db: 'hydro' }]
|
||||
})`);
|
||||
logAndRun('mongo 127.0.0.1:27017/hydro /tmp/createUser.js');
|
||||
logAndRunWithNvm('pm2 stop mongod');
|
||||
logAndRunWithNvm('pm2 del mongod');
|
||||
log.info('正在启动 MongoDB / Starting MongoDB');
|
||||
logAndRunWithNvm('pm2 start "mongod --auth --bind_ip 0.0.0.0" --name mongodb');
|
||||
}
|
||||
if (!cli.bool('skipMinio')) {
|
||||
log.info('正在安装 MinIO / Installing MinIO');
|
||||
if (!fs.exist('/usr/bin/minio')) {
|
||||
http.download(MINIO_DOWNLOAD, '/usr/bin/minio');
|
||||
}
|
||||
exec('chmod +x /usr/bin/minio');
|
||||
logAndRunWithNvm(`pm2 start "MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY} MINIO_SECRET_KEY=${MINIO_SECRET_KEY} minio server /data/file" --name minio`);
|
||||
}
|
||||
log.info('正在安装编译器 / Installing compiler');
|
||||
logAndRun('apt-get install -y g++ >/dev/null');
|
||||
|
||||
log.info('正在安装 HydroOJ / Installing HydroOJ');
|
||||
logAndRunWithNvm('yarn global add hydrooj @hydrooj/ui-default @hydrooj/hydrojudge');
|
||||
http.download('https://github.com/criyle/go-judge/releases/download/v1.0.5/executorserver-amd64', '/usr/bin/sandbox');
|
||||
exec('chmod +x /usr/bin/sandbox');
|
||||
logAndRunWithNvm('pm2 start sandbox');
|
||||
fs.writefile('/root/.hydro/config.json', JSON.stringify({
|
||||
host: '127.0.0.1',
|
||||
port: 27017,
|
||||
name: 'hydro',
|
||||
username: 'hydro',
|
||||
password: DATABASE_PASSWORD,
|
||||
}));
|
||||
fs.writefile('/root/.hydro/addon.json', '["@hydrooj/ui-default","@hydrooj/hydrojudge"]');
|
||||
fs.writefile('/root/.hydro/env', `MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
|
||||
MINIO_SECRET_KEY=${MINIO_SECRET_KEY}`);
|
||||
logAndRunWithNvm('pm2 start hydrooj');
|
||||
logAndRunWithNvm('pm2 startup');
|
||||
logAndRunWithNvm('pm2 save');
|
||||
log.info('安装完成 / Install done');
|
||||
log.info('数据库用户名:hydro / Database username: hydro');
|
||||
log.info('数据库密码:%s / Database password: %s', DATABASE_PASSWORD, DATABASE_PASSWORD);
|
||||
log.info('MINIO_ACCESS_KEY=%s', MINIO_ACCESS_KEY);
|
||||
log.info('MINIO_SECRET_KEY=%s', MINIO_SECRET_KEY);
|
||||
Vendored
+715
@@ -0,0 +1,715 @@
|
||||
/** 全局变量对象 */
|
||||
declare var global: any;
|
||||
|
||||
/** 是否 self-contained 方式执行 */
|
||||
declare const __selfcontained: boolean;
|
||||
|
||||
/** CPU数量 */
|
||||
declare const __cpucount: number;
|
||||
|
||||
/** 操作系统类型,darwin, freebsd, linux, windows */
|
||||
declare const __os: string;
|
||||
|
||||
/** 处理器架构,386, amd64, arm, s390x */
|
||||
declare const __arch: string;
|
||||
|
||||
/** JSSH版本号 */
|
||||
declare const __version: string;
|
||||
|
||||
/** JSSH二进制文件路径 */
|
||||
declare const __bin: string;
|
||||
|
||||
/** 当前进程PID */
|
||||
declare const __pid: number;
|
||||
|
||||
/** 临时文件目录 */
|
||||
declare const __tmpdir: string;
|
||||
|
||||
/** 当前用户HOME目录 */
|
||||
declare const __homedir: string;
|
||||
|
||||
/** 当前用户名 */
|
||||
declare const __user: string;
|
||||
|
||||
/** 当前主机名 */
|
||||
declare const __hostname: string;
|
||||
|
||||
/** 当前脚本目录名 */
|
||||
declare var __dirname: string;
|
||||
|
||||
/** 当前脚本文件名 */
|
||||
declare var __filename: string;
|
||||
|
||||
/** 当前命令行参数 */
|
||||
declare const __args: string[];
|
||||
|
||||
/** 当前环境变量 */
|
||||
declare const __env: Record<string, string>;
|
||||
|
||||
/** 最近一次执行命令输出的内容 */
|
||||
declare const __output: string;
|
||||
|
||||
/** 最近一次执行命令输出内容的字节数 */
|
||||
declare const __outputbytes: number;
|
||||
|
||||
/** 最近一次执行命令进程退出code */
|
||||
declare const __code: number;
|
||||
|
||||
/** 已自动加载的全局脚本文件列表 */
|
||||
declare const __globalfiles: string[];
|
||||
|
||||
/**
|
||||
* 加载 CommonJS 模块
|
||||
* @param modulename 模块名称
|
||||
* @return 模块内容
|
||||
*/
|
||||
// @ts-ignore
|
||||
declare function require(modulename: string): any;
|
||||
|
||||
/**
|
||||
* 以eval方式执行指定脚本文件
|
||||
* @param filename 文件路径或URL
|
||||
* @param content 文件内容,若指定此参数则无需实际读取文件内容
|
||||
* @return 返回结果
|
||||
*/
|
||||
declare function evalfile(filename: string, content?: string): any;
|
||||
|
||||
/**
|
||||
* 获取指定字符串的字节长度
|
||||
* @param data 字符串
|
||||
* @return 字节长度
|
||||
*/
|
||||
declare function bytesize(data: string): number;
|
||||
|
||||
/**
|
||||
* 读取标准输入的内容,返回字符串
|
||||
*/
|
||||
declare function stdin(): string;
|
||||
|
||||
/**
|
||||
* 读取标准输入的内容,返回 Uint8Array
|
||||
*/
|
||||
declare function stdinbytes(): Uint8Array;
|
||||
|
||||
/**
|
||||
* 格式化文本内容
|
||||
* @param format 模板,支持%s等格式
|
||||
* @param args 参数列表
|
||||
* @return 格式化后的文本内容
|
||||
*/
|
||||
declare function format(format: any, ...args: any[]): string;
|
||||
|
||||
/**
|
||||
* 输出到控制台
|
||||
* @param format 模板,支持%s等格式
|
||||
* @param args 参数列表
|
||||
* @return 是否成功
|
||||
*/
|
||||
declare function print(format: any, ...args: any[]): boolean;
|
||||
|
||||
/**
|
||||
* 输出一行到控制台
|
||||
* @param format 模板,支持%s等格式
|
||||
* @param args 参数列表
|
||||
* @return 是否成功
|
||||
*/
|
||||
declare function println(format: any, ...args: any[]): boolean;
|
||||
|
||||
/**
|
||||
* 在stdout输出一行日志
|
||||
* @param message
|
||||
* @return 是否成功
|
||||
*/
|
||||
declare function stdoutlog(message: string): boolean;
|
||||
|
||||
/**
|
||||
* 在stderr输出一行日志
|
||||
* @param message
|
||||
* @return 是否成功
|
||||
*/
|
||||
declare function stderrlog(message: string): boolean;
|
||||
|
||||
/**
|
||||
* 从控制台获取用户一行的字符串输入
|
||||
* @return 用户输入的字符串
|
||||
*/
|
||||
declare function readline(): string;
|
||||
|
||||
/**
|
||||
* 睡眠
|
||||
* @param milliseconds 毫秒
|
||||
* @return 毫秒
|
||||
*/
|
||||
declare function sleep(milliseconds: number): number;
|
||||
|
||||
/**
|
||||
* 退出进程
|
||||
* @param code 进程退出code
|
||||
*/
|
||||
declare function exit(code?: number): void;
|
||||
|
||||
/**
|
||||
* 加载配置文件,支持*.json,*.yaml,*.toml格式
|
||||
* @param file 文件名
|
||||
* @param format 格式,如果没有指定则自动根据文件后缀名判断
|
||||
* @return 配置内容
|
||||
*/
|
||||
declare function loadconfig(
|
||||
file: string,
|
||||
format?: "json" | "yaml" | "toml"
|
||||
): any;
|
||||
|
||||
/**
|
||||
* base64编码
|
||||
* @param data 原始内容
|
||||
* @return 编码后的内容
|
||||
*/
|
||||
declare function base64encode(data: string): string;
|
||||
|
||||
/**
|
||||
* base64解码
|
||||
* @param data 编码后的内容
|
||||
* @return 原始内容
|
||||
*/
|
||||
declare function base64decode(data: string): string;
|
||||
|
||||
/**
|
||||
* MD5编码
|
||||
* @param data 原始内容
|
||||
* @return 编码后的内容
|
||||
*/
|
||||
declare function md5(data: string): string;
|
||||
|
||||
/**
|
||||
* SHA1编码
|
||||
* @param data 原始内容
|
||||
* @return 编码后的内容
|
||||
*/
|
||||
declare function sha1(data: string): string;
|
||||
|
||||
/**
|
||||
* SAH256编码
|
||||
* @param data 原始内容
|
||||
* @return 编码后的内容
|
||||
*/
|
||||
declare function sha256(data: string): string;
|
||||
|
||||
/**
|
||||
* 生成随机字符串
|
||||
* @param size 长度
|
||||
* @param chars 可用的字符集,默认为 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
|
||||
* @return 生成的随机字符串
|
||||
*/
|
||||
declare function randomstring(size: number, chars?: string): string;
|
||||
|
||||
/**
|
||||
* 格式化日期时间,格式参考PHP的 date() 函数,文档参考 https://locutus.io/php/datetime/date/
|
||||
* @param format 格式
|
||||
* @param timestamp 秒时间戳或Date对象
|
||||
* @return 日期时间字符串
|
||||
*/
|
||||
declare function formatdate(format: string, timestamp?: number | Date): string;
|
||||
|
||||
/**
|
||||
* 深度合并两个对象
|
||||
* @param target 第一个对象
|
||||
* @param src 第二个对象,仅当第一个对象不存在该键才覆盖
|
||||
* @return 合并后的新对象
|
||||
*/
|
||||
declare function deepmerge(target: any, src: any): any;
|
||||
|
||||
/**
|
||||
* 设置环境变量
|
||||
* @param name 环境变量名称
|
||||
* @param value 环境变量值
|
||||
* @return 是否成功
|
||||
*/
|
||||
declare function setenv(name: string, value: string): boolean;
|
||||
|
||||
/**
|
||||
* 执行命令
|
||||
* @param cmd 命令
|
||||
* @param env 额外的环境变量
|
||||
* @param mode 输出模式,0=直接pipe输出结果到标准输出,1=执行中途不直接输出,存储到返回结果{output}中,2=pipe输出并且存储到返回结果{output}中
|
||||
* @return 进程信息
|
||||
*/
|
||||
declare function exec(
|
||||
cmd: string,
|
||||
env?: Record<string, string>,
|
||||
mode?: number
|
||||
): ExecResult;
|
||||
|
||||
/**
|
||||
* 执行命令 mode=1
|
||||
* @param cmd 命令
|
||||
* @param env 额外的环境变量
|
||||
* @return 进程信息
|
||||
*/
|
||||
declare function exec1(cmd: string, env?: Record<string, string>): ExecResult;
|
||||
|
||||
/**
|
||||
* 执行命令 mode=2
|
||||
* @param cmd 命令
|
||||
* @param env 额外的环境变量
|
||||
* @return 进程信息
|
||||
*/
|
||||
declare function exec2(cmd: string, env?: Record<string, string>): ExecResult;
|
||||
|
||||
/**
|
||||
* 后台执行命令
|
||||
* @param cmd 命令
|
||||
* @param env 额外的环境变量
|
||||
* @param mode 输出模式,0=直接pipe输出结果到标准输出,1=执行中途不直接输出,存储到返回结果{output}中,2=pipe输出并且存储到返回结果{output}中
|
||||
* @return 进程信息
|
||||
*/
|
||||
declare function bgexec(
|
||||
cmd: string,
|
||||
env?: Record<string, string>,
|
||||
mode?: number
|
||||
): ExecResult;
|
||||
|
||||
/**
|
||||
* 改变当前工作目录
|
||||
* @param dir 目录路径
|
||||
* @return 是否成功
|
||||
*/
|
||||
declare function chdir(dir: string): boolean;
|
||||
|
||||
/**
|
||||
* 改变当前工作目录
|
||||
* @param dir 目录路径
|
||||
* @return 是否成功
|
||||
*/
|
||||
declare function cd(dir: string): boolean;
|
||||
|
||||
/**
|
||||
* 获取当前工作目录
|
||||
* @return 当前工作目录路径
|
||||
*/
|
||||
declare function cwd(): string;
|
||||
|
||||
/**
|
||||
* 获取当前工作目录
|
||||
* @return 当前工作目录路径
|
||||
*/
|
||||
declare function pwd(): string;
|
||||
|
||||
/**
|
||||
* 获得网络接口信息
|
||||
* @return 网络接口数组
|
||||
*/
|
||||
declare function networkinterfaces(): Record<string, NetworkInterface>;
|
||||
|
||||
interface NetworkInterface {
|
||||
index: number;
|
||||
mac: string;
|
||||
list: {
|
||||
address: string;
|
||||
netmask: string;
|
||||
family: string;
|
||||
cidr: string;
|
||||
internal: boolean;
|
||||
multicast: boolean;
|
||||
unspecified: boolean;
|
||||
}[];
|
||||
}
|
||||
|
||||
/** 文件相关操作模块 */
|
||||
declare const fs: FsModule;
|
||||
|
||||
/** 文件路径相关操作模块 */
|
||||
declare const path: PathModule;
|
||||
|
||||
/** 命令行参数相关操作模块 */
|
||||
declare const cli: CliModule;
|
||||
|
||||
/** HTTP相关操作模块 */
|
||||
declare const http: HttpModule;
|
||||
|
||||
/** 日志相关操作模块 */
|
||||
declare const log: LogModule;
|
||||
|
||||
/** SSH相关操作模块 */
|
||||
declare const ssh: SshModule;
|
||||
|
||||
/** Socket相关操作模块 */
|
||||
declare const socket: SocketModule;
|
||||
|
||||
interface FsModule {
|
||||
/**
|
||||
* 读取目录
|
||||
* @param path 路径
|
||||
* @return 文件信息列表
|
||||
*/
|
||||
readdir(path: string): FileStat[];
|
||||
|
||||
/**
|
||||
* 读取文件内容
|
||||
* @param path 路径
|
||||
* @return 文件内容
|
||||
*/
|
||||
readfile(path: string): string;
|
||||
|
||||
/**
|
||||
* 读取文件内容
|
||||
* @param path 路径
|
||||
* @return 文件内容
|
||||
*/
|
||||
readfilebytes(path: string): Uint8Array;
|
||||
|
||||
/**
|
||||
* 读取文件信息
|
||||
* @param path 路径
|
||||
* @return 文件信息
|
||||
*/
|
||||
stat(path: string): FileStat;
|
||||
|
||||
/**
|
||||
* 判断文件是否存在
|
||||
* @param path 路径
|
||||
* @return 是否存在
|
||||
*/
|
||||
exist(path: string): boolean;
|
||||
|
||||
/**
|
||||
* 写入文件
|
||||
* @param path 路径
|
||||
* @param data 内容
|
||||
* @return 是否成功
|
||||
*/
|
||||
writefile(path: string, data: string | Uint8Array): boolean;
|
||||
|
||||
/**
|
||||
* 追加内容到文件末尾
|
||||
* @param path 路径
|
||||
* @param data 内容
|
||||
* @return 是否成功
|
||||
*/
|
||||
appendfile(path: string, data: string | Uint8Array): boolean;
|
||||
}
|
||||
|
||||
interface FileStat {
|
||||
/** 文件名 */
|
||||
name: string;
|
||||
/** 是否为目录 */
|
||||
isdir: boolean;
|
||||
/** 文件mode,如0644 */
|
||||
mode: number;
|
||||
/** 文件最后修改秒时间戳 */
|
||||
modtime: number;
|
||||
/** 文件大小 */
|
||||
size: number;
|
||||
}
|
||||
|
||||
interface PathModule {
|
||||
/**
|
||||
* 拼接文件路径
|
||||
* @param args 子路径列表
|
||||
* @return 拼接后的路径
|
||||
*/
|
||||
join(...args: string[]): string;
|
||||
|
||||
/**
|
||||
* 获取绝对路径
|
||||
* @param path 原始路径
|
||||
* @return 绝对路径
|
||||
*/
|
||||
abs(path: string): string;
|
||||
|
||||
/**
|
||||
* 获取文件名
|
||||
* @param path 路径
|
||||
* @return 文件名
|
||||
*/
|
||||
base(path: string): string;
|
||||
|
||||
/**
|
||||
* 获取文件扩展名
|
||||
* @param path 路径
|
||||
* @return 文件扩展名
|
||||
*/
|
||||
ext(path: string): string;
|
||||
|
||||
/**
|
||||
* 获取路径的上级目录
|
||||
* @param path 路径
|
||||
* @return 上级目录
|
||||
*/
|
||||
dir(path: string): string;
|
||||
}
|
||||
|
||||
interface CliModule {
|
||||
/**
|
||||
* 获取指定名称的参数
|
||||
* @param flag 参数名称
|
||||
* @return 参数值
|
||||
*/
|
||||
get(flag: string): string;
|
||||
|
||||
/**
|
||||
* 获取指定索引的参数
|
||||
* @param index 参数索引
|
||||
* @return 参数值
|
||||
*/
|
||||
get(index: number): string;
|
||||
|
||||
/**
|
||||
* 获取指定名称的参数的布尔值,f,false,0表示假,其余为真
|
||||
* @param flag 参数名称
|
||||
* @return 参数值
|
||||
*/
|
||||
bool(flag: string): boolean;
|
||||
|
||||
/**
|
||||
* 获取args参数列表
|
||||
* @return 参数列表
|
||||
*/
|
||||
args(): string[];
|
||||
|
||||
/**
|
||||
* 获取opts参数
|
||||
* @return 参数Map
|
||||
*/
|
||||
opts(): Record<string, string>;
|
||||
|
||||
/**
|
||||
* 等待用户输入一行,按Enter确认
|
||||
* @param message 提示
|
||||
* @return 输入的内容
|
||||
*/
|
||||
prompt(message?: string): string;
|
||||
|
||||
/**
|
||||
* 注册子命令处理函数
|
||||
* @param name 命令名称,* 表示其他情况
|
||||
* @param callback 回调函数
|
||||
*/
|
||||
subcommand(name: string, callback: () => void): void;
|
||||
|
||||
/**
|
||||
* 开始解析执行子命令
|
||||
*/
|
||||
subcommandstart(): void;
|
||||
}
|
||||
|
||||
interface HttpModule {
|
||||
/**
|
||||
* 设置HTTP请求的超时时间
|
||||
* @param milliseconds 毫秒
|
||||
* @return 毫秒
|
||||
*/
|
||||
timeout(milliseconds: number): number;
|
||||
|
||||
/**
|
||||
* 发送HTTP请求
|
||||
* @param method 请求方法
|
||||
* @param url 请求URL
|
||||
* @param headers 请求头
|
||||
* @param body 请求体
|
||||
* @return 响应结果
|
||||
*/
|
||||
request(
|
||||
method: string,
|
||||
url: String,
|
||||
headers?: Record<string, string>,
|
||||
body?: string
|
||||
): HttpResponse;
|
||||
|
||||
/**
|
||||
* 通过HTTP下载文件
|
||||
* @param url 文件地址
|
||||
* @param filename 目标文件名,如果未指定则创建临时文件
|
||||
* @return 存储的文件名
|
||||
*/
|
||||
download(url: string, filename?: string): string;
|
||||
}
|
||||
|
||||
interface HttpResponse {
|
||||
/** 状态码 */
|
||||
status: number;
|
||||
/** 响应头 */
|
||||
headers: Record<string, string | string[]>;
|
||||
/** 响应体 */
|
||||
body: string;
|
||||
}
|
||||
|
||||
interface LogModule {
|
||||
/**
|
||||
* 日志输出到控制台
|
||||
* @param format 模板,支持%s等格式
|
||||
* @param args 参数列表
|
||||
* @return 是否成功
|
||||
*/
|
||||
debug(format: any, ...args: any[]): boolean;
|
||||
|
||||
/**
|
||||
* 日志输出到控制台
|
||||
* @param format 模板,支持%s等格式
|
||||
* @param args 参数列表
|
||||
* @return 是否成功
|
||||
*/
|
||||
info(format: any, ...args: any[]): boolean;
|
||||
|
||||
/**
|
||||
* 日志输出到控制台
|
||||
* @param format 模板,支持%s等格式
|
||||
* @param args 参数列表
|
||||
* @return 是否成功
|
||||
*/
|
||||
warn(format: any, ...args: any[]): boolean;
|
||||
|
||||
/**
|
||||
* 日志输出到控制台
|
||||
* @param format 模板,支持%s等格式
|
||||
* @param args 参数列表
|
||||
* @return 是否成功
|
||||
*/
|
||||
error(format: any, ...args: any[]): boolean;
|
||||
|
||||
/**
|
||||
* 日志输出到控制台,并结束进程
|
||||
* @param format 模板,支持%s等格式
|
||||
* @param args 参数列表
|
||||
* @return 是否成功
|
||||
*/
|
||||
fatal(format: any, ...args: any[]): boolean;
|
||||
}
|
||||
|
||||
interface ExecResult {
|
||||
/**
|
||||
* 进程PID
|
||||
*/
|
||||
pid: number;
|
||||
/**
|
||||
* 进程退出code
|
||||
*/
|
||||
code?: number;
|
||||
/**
|
||||
* 进程输出内容,仅当combineOutput=true时有效
|
||||
*/
|
||||
output?: string;
|
||||
/**
|
||||
* 进出输出内容字节数,仅当combineOutput=true时有效
|
||||
*/
|
||||
outputbytes?: number;
|
||||
}
|
||||
|
||||
interface SshModule {
|
||||
/**
|
||||
* 设置SSH配置
|
||||
* @param name 配置名
|
||||
* @param value 配置值
|
||||
* @return 是否成功
|
||||
*/
|
||||
set(
|
||||
name: "user" | "password" | "key" | "keypass" | "auth" | "timeout" | "port",
|
||||
value: any
|
||||
): boolean;
|
||||
|
||||
/**
|
||||
* 连接到指定服务器
|
||||
* @param host 服务器地址
|
||||
* @return 是否成功
|
||||
*/
|
||||
open(host: string): boolean;
|
||||
|
||||
/**
|
||||
* 关闭服务器连接
|
||||
* @return 是否成功
|
||||
*/
|
||||
close(): boolean;
|
||||
|
||||
/**
|
||||
* 设置环境变量
|
||||
* @param name 环境变量名称
|
||||
* @param value 环境变量值
|
||||
* @return 是否成功
|
||||
*/
|
||||
setenv(name: string, value: string): boolean;
|
||||
|
||||
/**
|
||||
* 执行命令
|
||||
* @param cmd 命令
|
||||
* @param env 额外的环境变量
|
||||
* @param mode 输出模式,0=直接pipe输出结果到标准输出,1=执行中途不直接输出,存储到返回结果{output}中,2=pipe输出并且存储到返回结果{output}中
|
||||
* @return 进程信息
|
||||
*/
|
||||
exec(cmd: string, env?: Record<string, string>, mode?: number): SshExecResult;
|
||||
|
||||
/**
|
||||
* 执行命令 mode=1
|
||||
* @param cmd 命令
|
||||
* @param env 额外的环境变量
|
||||
* @return 进程信息
|
||||
*/
|
||||
exec1(cmd: string, env?: Record<string, string>): SshExecResult;
|
||||
|
||||
/**
|
||||
* 执行命令 mode=2
|
||||
* @param cmd 命令
|
||||
* @param env 额外的环境变量
|
||||
* @return 进程信息
|
||||
*/
|
||||
exec2(cmd: string, env?: Record<string, string>): SshExecResult;
|
||||
|
||||
/**
|
||||
* 模拟TTY设备执行命令
|
||||
* @param cmd 命令
|
||||
* @param env 额外的环境变量
|
||||
* @return 进程信息
|
||||
*/
|
||||
pty(cmd: string, env?: Record<string, string>): SshExecResult;
|
||||
}
|
||||
|
||||
interface SshExecResult {
|
||||
/**
|
||||
* 进程退出code
|
||||
*/
|
||||
code?: number;
|
||||
/**
|
||||
* 进程输出内容,仅当combineOutput=true时有效
|
||||
*/
|
||||
output?: string;
|
||||
/**
|
||||
* 进出输出内容字节数,仅当combineOutput=true时有效
|
||||
*/
|
||||
outputbytes?: number;
|
||||
}
|
||||
|
||||
interface SocketModule {
|
||||
/**
|
||||
* 设置超时时间
|
||||
* @param milliseconds 毫秒
|
||||
* @return 毫秒
|
||||
*/
|
||||
timeout(milliseconds: number): number;
|
||||
|
||||
/**
|
||||
* TCP发送消息
|
||||
* @param host 地址
|
||||
* @param port 端口
|
||||
* @param data 数据
|
||||
* @return 服务器返回的内容
|
||||
*/
|
||||
tcpsend(host: string, port: number, data: string): string;
|
||||
|
||||
/**
|
||||
* TCP端口连接测试
|
||||
* @param host 地址
|
||||
* @param port 端口
|
||||
* @return 是否成功
|
||||
*/
|
||||
tcptest(host: string, port: number): boolean;
|
||||
}
|
||||
|
||||
interface SqlExecResult {
|
||||
lastInsertId: number;
|
||||
rowsAffected: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* 简单断言
|
||||
* @param ok 要断言的值
|
||||
* @param message 提示信息
|
||||
*/
|
||||
declare function assert(ok: boolean, message?: string);
|
||||
@@ -8,7 +8,7 @@
|
||||
"author": "undefined <i@undefined.moe>",
|
||||
"license": "AGPL-3.0-only",
|
||||
"engines": {
|
||||
"node": ">=13"
|
||||
"node": ">=14"
|
||||
},
|
||||
"dependencies": {
|
||||
"adm-zip": "^0.5.4",
|
||||
|
||||
Reference in new issue
Block a user