coolbox 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions.d.ts +3 -0
- package/dist/actions.js +51 -0
- package/dist/actions.js.map +1 -0
- package/dist/confirm.d.ts +1 -0
- package/dist/confirm.js +28 -0
- package/dist/confirm.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/menu.d.ts +1 -0
- package/dist/menu.js +101 -0
- package/dist/menu.js.map +1 -0
- package/dist/network.d.ts +2 -0
- package/dist/network.js +17 -0
- package/dist/network.js.map +1 -0
- package/dist/runner.d.ts +2 -0
- package/dist/runner.js +38 -0
- package/dist/runner.js.map +1 -0
- package/dist/scripts/enable-bbr.sh +54 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/index.mjs +2 -0
- package/package.json +40 -0
package/dist/actions.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export const groups = [
|
|
2
|
+
{ label: 'đ§ įŗģįģįŽĄį', name: 'system' },
|
|
3
|
+
{ label: 'đŗ 厚å¨', name: 'container' },
|
|
4
|
+
{ label: 'đ įŊįģ', name: 'network' },
|
|
5
|
+
];
|
|
6
|
+
export const actions = [
|
|
7
|
+
{
|
|
8
|
+
name: 'éčŖ
Linux įŗģįģ',
|
|
9
|
+
description: 'éčŋ bin456789/reinstall ä¸éŽéčŖ
æäŊįŗģįģīŧå°æ¸
įŠēæææ°æŽīŧ',
|
|
10
|
+
type: 'remote',
|
|
11
|
+
command: 'bash <(wget -qO- --no-check-certificate {url}) {os-name}',
|
|
12
|
+
group: 'system',
|
|
13
|
+
dangerous: true,
|
|
14
|
+
params: [
|
|
15
|
+
{ name: 'os-name', message: '蝎čžå
ĨčĻåŽčŖ
įįŗģįģīŧåĻ alpine-3.23, debian-13, ubuntu-26.04īŧ' },
|
|
16
|
+
],
|
|
17
|
+
urls: {
|
|
18
|
+
domestic: 'https://cnb.cool/bin456789/reinstall/-/git/raw/main/reinstall.sh',
|
|
19
|
+
international: 'https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: '莞įŊŽ Swap',
|
|
24
|
+
description: 'éčŋ spiritLHLS/addswap ä¸éŽčŽžįŊŽä礿ĸįŠēé´',
|
|
25
|
+
type: 'remote',
|
|
26
|
+
command: 'sudo bash <(wget -qO- --no-check-certificate https://cdn.spiritlhl.net/https://raw.githubusercontent.com/spiritLHLS/addswap/main/addswap.sh)',
|
|
27
|
+
group: 'system',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: '莞įŊŽįŗģįģåŊå
éåæē',
|
|
31
|
+
description: 'éčŋ LinuxMirrors ä¸éŽæ´æĸįŗģįģčŊ¯äģļæē',
|
|
32
|
+
type: 'remote',
|
|
33
|
+
command: 'sudo bash <(curl -sSL https://linuxmirrors.cn/main.sh)',
|
|
34
|
+
group: 'system',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'åŽčŖ
Docker åšļ莞įŊŽåŊå
éåæē',
|
|
38
|
+
description: 'éčŋ LinuxMirrors ä¸éŽåŽčŖ
Docker åšļé
įŊŽåŊå
éåå é',
|
|
39
|
+
type: 'remote',
|
|
40
|
+
command: 'sudo bash <(curl -sSL https://linuxmirrors.cn/docker.sh)',
|
|
41
|
+
group: 'container',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'åŧå¯ BBR',
|
|
45
|
+
description: 'åŧå¯ BBR æĨåĄæ§åļįŽæŗäģĨæåįŊįģäŧ čžæ§čŊ',
|
|
46
|
+
type: 'local',
|
|
47
|
+
command: 'enable-bbr.sh',
|
|
48
|
+
group: 'network',
|
|
49
|
+
},
|
|
50
|
+
];
|
|
51
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,MAAM,GAAkB;IACnC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;IACpC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;IACrC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;CACpC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAa;IAC/B;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,0DAA0D;QACnE,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,IAAI;QACf,MAAM,EAAE;YACN,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,mDAAmD,EAAE;SAClF;QACD,IAAI,EAAE;YACJ,QAAQ,EAAE,kEAAkE;YAC5E,aAAa,EAAE,yEAAyE;SACzF;KACF;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gCAAgC;QAC7C,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,8IAA8I;QACvJ,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,2BAA2B;QACxC,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,wDAAwD;QACjE,KAAK,EAAE,QAAQ;KAChB;IACD;QACE,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,0DAA0D;QACnE,KAAK,EAAE,WAAW;KACnB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,wBAAwB;QACrC,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,SAAS;KACjB;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function confirmDangerous(actionName: string): Promise<boolean>;
|
package/dist/confirm.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { confirm } from '@inquirer/prompts';
|
|
2
|
+
const WARNING_BANNER = `
|
|
3
|
+
â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸
|
|
4
|
+
â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸
|
|
5
|
+
â ī¸ â ī¸
|
|
6
|
+
â ī¸ âââââââ âââ ââââââââââââââââââ ââââââââ â ī¸
|
|
7
|
+
â ī¸ ââââââââââââ âââââââââââââââââââââââââââ â ī¸
|
|
8
|
+
â ī¸ âââ ââââââ âââââââââ ââââââââââââââââ â ī¸
|
|
9
|
+
â ī¸ âââââ ââââââ âââââââââ ââââââââââââââââ â ī¸
|
|
10
|
+
â ī¸ âââââââââââââââââââââââââââââ âââââââââââ â ī¸
|
|
11
|
+
â ī¸ âââââââ âââââââ âââââââââââ âââââââââââ â ī¸
|
|
12
|
+
â ī¸ â ī¸
|
|
13
|
+
â ī¸ č¯ĨæäŊä¸å¯éčŊŦīŧæ§čĄåæ°æŽå°æ æŗæĸå¤īŧ â ī¸
|
|
14
|
+
â ī¸ â ī¸
|
|
15
|
+
â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸
|
|
16
|
+
â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸â ī¸
|
|
17
|
+
`;
|
|
18
|
+
export async function confirmDangerous(actionName) {
|
|
19
|
+
console.clear();
|
|
20
|
+
console.log(WARNING_BANNER);
|
|
21
|
+
console.log(` åŗå°æ§čĄ: ${actionName}\n`);
|
|
22
|
+
const answer = await confirm({
|
|
23
|
+
message: 'įĄŽčŽ¤æ§čĄæ¤æäŊåīŧīŧčžå
Ĩ y įĄŽčŽ¤īŧn åæļīŧ',
|
|
24
|
+
default: false,
|
|
25
|
+
});
|
|
26
|
+
return answer;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=confirm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm.js","sourceRoot":"","sources":["../src/confirm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;CAetB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IACvD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,IAAI,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAC3B,OAAO,EAAE,yBAAyB;QAClC,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { showMenu } from './menu.js';
|
|
3
|
+
const VERSION = '0.1.0';
|
|
4
|
+
const BANNER = `
|
|
5
|
+
âââââââââââââââââââââââââââââââââââââ
|
|
6
|
+
â ⥠CoolBox (åŋĢåˇĨå
ˇįŽą) v${VERSION} â
|
|
7
|
+
â Linux æåĄå¨čŋįģ´åˇĨå
ˇįŽą â
|
|
8
|
+
âââââââââââââââââââââââââââââââââââââ
|
|
9
|
+
`;
|
|
10
|
+
console.log(BANNER);
|
|
11
|
+
showMenu().catch((err) => {
|
|
12
|
+
console.error('åįé蝝:', err);
|
|
13
|
+
process.exit(1);
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,MAAM,GAAG;;0BAEW,OAAO;;;CAGhC,CAAC;AAEF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAEpB,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACvB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/menu.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function showMenu(): Promise<void>;
|
package/dist/menu.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { select, input } from '@inquirer/prompts';
|
|
2
|
+
import { actions, groups } from './actions.js';
|
|
3
|
+
import { runAction } from './runner.js';
|
|
4
|
+
import { confirmDangerous } from './confirm.js';
|
|
5
|
+
function buildMenuItems() {
|
|
6
|
+
const items = [];
|
|
7
|
+
for (const group of groups) {
|
|
8
|
+
items.push({
|
|
9
|
+
name: `ââ ${group.label} ââ`,
|
|
10
|
+
value: `__group__${group.name}`,
|
|
11
|
+
});
|
|
12
|
+
const groupActions = actions.filter((a) => a.group === group.name);
|
|
13
|
+
for (const action of groupActions) {
|
|
14
|
+
items.push({
|
|
15
|
+
name: ` ${action.name}`,
|
|
16
|
+
value: action.name,
|
|
17
|
+
description: action.description,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
items.push({
|
|
22
|
+
name: 'éåē',
|
|
23
|
+
value: '__exit__',
|
|
24
|
+
});
|
|
25
|
+
return items;
|
|
26
|
+
}
|
|
27
|
+
async function collectParams(action) {
|
|
28
|
+
const values = {};
|
|
29
|
+
if (!action.params)
|
|
30
|
+
return values;
|
|
31
|
+
for (const param of action.params) {
|
|
32
|
+
const value = await input({
|
|
33
|
+
message: param.message,
|
|
34
|
+
});
|
|
35
|
+
values[param.name] = value.trim();
|
|
36
|
+
}
|
|
37
|
+
return values;
|
|
38
|
+
}
|
|
39
|
+
export async function showMenu() {
|
|
40
|
+
const menuItems = buildMenuItems();
|
|
41
|
+
let lastSelected = menuItems.find((i) => !i.value.startsWith('__'))?.value ?? menuItems[0]?.value;
|
|
42
|
+
while (true) {
|
|
43
|
+
const selected = await select({
|
|
44
|
+
message: 'č¯ˇéæŠæäŊ:',
|
|
45
|
+
choices: menuItems.map((item) => ({
|
|
46
|
+
name: item.name,
|
|
47
|
+
value: item.value,
|
|
48
|
+
description: item.description,
|
|
49
|
+
})),
|
|
50
|
+
default: lastSelected,
|
|
51
|
+
});
|
|
52
|
+
if (selected === '__exit__') {
|
|
53
|
+
process.exit(0);
|
|
54
|
+
}
|
|
55
|
+
if (selected.startsWith('__group__')) {
|
|
56
|
+
lastSelected = selected;
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const action = actions.find((a) => a.name === selected);
|
|
60
|
+
if (!action) {
|
|
61
|
+
lastSelected = selected;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// åąéŠæäŊäēæŦĄįĄŽčޤ
|
|
65
|
+
if (action.dangerous) {
|
|
66
|
+
const confirmed = await confirmDangerous(action.name);
|
|
67
|
+
if (!confirmed) {
|
|
68
|
+
console.log('\n厞åæļæäŊã\n');
|
|
69
|
+
lastSelected = selected;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// æļéåæ°
|
|
74
|
+
const paramValues = await collectParams(action);
|
|
75
|
+
// æ§čĄ
|
|
76
|
+
console.log('');
|
|
77
|
+
const result = await runAction(action, paramValues);
|
|
78
|
+
// æžį¤ēįģæ
|
|
79
|
+
console.log('');
|
|
80
|
+
if (result.exitCode === 0) {
|
|
81
|
+
console.log('â
æäŊæ§čĄæåã');
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
console.log(`â æäŊæ§čĄå¤ąč´Ĩīŧéåēį : ${result.exitCode ?? 'unknown'}īŧã`);
|
|
85
|
+
}
|
|
86
|
+
// čŋåčåæéåē
|
|
87
|
+
const next = await select({
|
|
88
|
+
message: 'æĨ䏿Ĩ:',
|
|
89
|
+
choices: [
|
|
90
|
+
{ name: 'čŋåčå', value: 'menu' },
|
|
91
|
+
{ name: 'éåē', value: 'exit' },
|
|
92
|
+
],
|
|
93
|
+
default: 'menu',
|
|
94
|
+
});
|
|
95
|
+
if (next === 'exit') {
|
|
96
|
+
process.exit(0);
|
|
97
|
+
}
|
|
98
|
+
lastSelected = selected;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=menu.js.map
|
package/dist/menu.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../src/menu.ts"],"names":[],"mappings":"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"}
|
package/dist/network.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
let cachedEnv = null;
|
|
3
|
+
export function detectNetwork() {
|
|
4
|
+
if (cachedEnv)
|
|
5
|
+
return cachedEnv;
|
|
6
|
+
try {
|
|
7
|
+
execSync('curl -s --connect-timeout 3 https://www.google.com > /dev/null 2>&1', {
|
|
8
|
+
timeout: 5000,
|
|
9
|
+
});
|
|
10
|
+
cachedEnv = 'international';
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
cachedEnv = 'domestic';
|
|
14
|
+
}
|
|
15
|
+
return cachedEnv;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,IAAI,SAAS,GAAsB,IAAI,CAAC;AAExC,MAAM,UAAU,aAAa;IAC3B,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAEhC,IAAI,CAAC;QACH,QAAQ,CAAC,qEAAqE,EAAE;YAC9E,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,SAAS,GAAG,eAAe,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,UAAU,CAAC;IACzB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/runner.d.ts
ADDED
package/dist/runner.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { detectNetwork } from './network.js';
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
function resolveCommand(action, paramValues) {
|
|
8
|
+
let cmd = action.command;
|
|
9
|
+
if (action.type === 'remote' && action.urls) {
|
|
10
|
+
const env = detectNetwork();
|
|
11
|
+
const url = env === 'domestic' ? action.urls.domestic : action.urls.international;
|
|
12
|
+
cmd = cmd.replace('{url}', url);
|
|
13
|
+
}
|
|
14
|
+
if (action.type === 'local') {
|
|
15
|
+
const scriptPath = join(__dirname, 'scripts', action.command);
|
|
16
|
+
cmd = `sudo bash "${scriptPath}"`;
|
|
17
|
+
}
|
|
18
|
+
for (const [key, value] of Object.entries(paramValues)) {
|
|
19
|
+
cmd = cmd.replace(`{${key}}`, value);
|
|
20
|
+
}
|
|
21
|
+
return cmd;
|
|
22
|
+
}
|
|
23
|
+
export function runAction(action, paramValues = {}) {
|
|
24
|
+
const cmd = resolveCommand(action, paramValues);
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
const child = spawn('bash', ['-c', cmd], {
|
|
27
|
+
stdio: 'inherit',
|
|
28
|
+
});
|
|
29
|
+
child.on('close', (code, signal) => {
|
|
30
|
+
resolve({ exitCode: code, signal });
|
|
31
|
+
});
|
|
32
|
+
child.on('error', (err) => {
|
|
33
|
+
console.error(`\næ§čĄå¤ąč´Ĩ: ${err.message}`);
|
|
34
|
+
resolve({ exitCode: 1, signal: null });
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,cAAc,CAAC,MAAc,EAAE,WAAmC;IACzE,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;IAEzB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;QAClF,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9D,GAAG,GAAG,cAAc,UAAU,GAAG,CAAC;IACpC,CAAC;IAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,SAAS,CACvB,MAAc,EACd,cAAsC,EAAE;IAExC,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAEhD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;YACvC,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# åŧå¯ BBR æĨåĄæ§åļįŽæŗ
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
# æŖæĨæ¯åĻä¸ē root
|
|
7
|
+
if [ "$EUID" -ne 0 ]; then
|
|
8
|
+
echo "蝎äŊŋ፠sudo čŋčĄæ¤čæŦ"
|
|
9
|
+
exit 1
|
|
10
|
+
fi
|
|
11
|
+
|
|
12
|
+
# æŖæĨå
æ ¸įæŦ
|
|
13
|
+
kernel_version=$(uname -r | cut -d. -f1-2)
|
|
14
|
+
kernel_major=$(echo "$kernel_version" | cut -d. -f1)
|
|
15
|
+
kernel_minor=$(echo "$kernel_version" | cut -d. -f2)
|
|
16
|
+
|
|
17
|
+
if [ "$kernel_major" -lt 4 ] || { [ "$kernel_major" -eq 4 ] && [ "$kernel_minor" -lt 9 ]; }; then
|
|
18
|
+
echo "é蝝: BBR éčĻå
æ ¸įæŦ >= 4.9īŧåŊåå
æ ¸: $(uname -r)"
|
|
19
|
+
exit 1
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
# æŖæĨæ¯åĻ厞åŧå¯
|
|
23
|
+
current_cc=$(sysctl -n net.ipv4.tcp_congestion_control 2>/dev/null || echo "")
|
|
24
|
+
if [ "$current_cc" = "bbr" ]; then
|
|
25
|
+
echo "BBR 厞įģåŧå¯īŧæ éé夿äŊã"
|
|
26
|
+
exit 0
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
echo "æŖå¨åŧå¯ BBR..."
|
|
30
|
+
|
|
31
|
+
# å čŊŊ BBR æ¨Ąå
|
|
32
|
+
echo "tcp_bbr" >> /etc/modules 2>/dev/null || true
|
|
33
|
+
modprobe tcp_bbr 2>/dev/null || true
|
|
34
|
+
|
|
35
|
+
# åå
Ĩ sysctl é
įŊŽ
|
|
36
|
+
grep -q "net.ipv4.tcp_congestion_control=bbr" /etc/sysctl.conf 2>/dev/null || \
|
|
37
|
+
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
|
|
38
|
+
|
|
39
|
+
grep -q "net.core.default_qdisc=fq" /etc/sysctl.conf 2>/dev/null || \
|
|
40
|
+
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
|
|
41
|
+
|
|
42
|
+
# åēį¨é
įŊŽ
|
|
43
|
+
sysctl -p > /dev/null 2>&1 || sysctl --system > /dev/null 2>&1
|
|
44
|
+
|
|
45
|
+
# éĒč¯
|
|
46
|
+
new_cc=$(sysctl -n net.ipv4.tcp_congestion_control 2>/dev/null || echo "")
|
|
47
|
+
if [ "$new_cc" = "bbr" ]; then
|
|
48
|
+
echo "â
BBR 厞æååŧå¯īŧ"
|
|
49
|
+
echo " åŊåæĨåĄæ§åļįŽæŗ: $(sysctl -n net.ipv4.tcp_congestion_control)"
|
|
50
|
+
echo " åŊåéåč°åēĻįŽæŗ: $(sysctl -n net.core.default_qdisc)"
|
|
51
|
+
else
|
|
52
|
+
echo "â BBR åŧå¯å¯čŊæĒæåīŧ蝎æå¨æŖæĨã"
|
|
53
|
+
echo " åŊåæĨåĄæ§åļįŽæŗ: $new_cc"
|
|
54
|
+
fi
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface ActionParam {
|
|
2
|
+
name: string;
|
|
3
|
+
message: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ActionUrls {
|
|
6
|
+
domestic: string;
|
|
7
|
+
international: string;
|
|
8
|
+
}
|
|
9
|
+
export interface Action {
|
|
10
|
+
name: string;
|
|
11
|
+
description: string;
|
|
12
|
+
type: 'remote' | 'local';
|
|
13
|
+
/** remote: shell åŊä줿¨Ąæŋ; local: čæŦæäģļå */
|
|
14
|
+
command: string;
|
|
15
|
+
group: string;
|
|
16
|
+
dangerous?: boolean;
|
|
17
|
+
params?: ActionParam[];
|
|
18
|
+
urls?: ActionUrls;
|
|
19
|
+
}
|
|
20
|
+
export interface ActionGroup {
|
|
21
|
+
label: string;
|
|
22
|
+
name: string;
|
|
23
|
+
}
|
|
24
|
+
export type NetworkEnv = 'domestic' | 'international';
|
|
25
|
+
export interface RunResult {
|
|
26
|
+
exitCode: number | null;
|
|
27
|
+
signal: string | null;
|
|
28
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/index.mjs
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "coolbox",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Quick Tool Box - Linux æåĄå¨čŋįģ´åˇĨå
ˇįŽą",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"coolbox": "index.mjs"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist/",
|
|
11
|
+
"index.mjs"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc && mkdir -p dist/scripts && cp scripts/* dist/scripts/",
|
|
15
|
+
"prepublishOnly": "npm run build"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"linux",
|
|
19
|
+
"vps",
|
|
20
|
+
"server",
|
|
21
|
+
"toolkit",
|
|
22
|
+
"operations",
|
|
23
|
+
"docker",
|
|
24
|
+
"bbr",
|
|
25
|
+
"swap",
|
|
26
|
+
"mirror"
|
|
27
|
+
],
|
|
28
|
+
"author": "",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@inquirer/prompts": "^7.0.0"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/node": "^22.0.0",
|
|
35
|
+
"typescript": "^5.7.0"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=14.0.0"
|
|
39
|
+
}
|
|
40
|
+
}
|