forked from MCERQUA/OpenVoiceUI
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcheck-docker.js
More file actions
104 lines (96 loc) · 3.07 KB
/
Copy pathcheck-docker.js
File metadata and controls
104 lines (96 loc) · 3.07 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// check-docker.js — Pre-flight Docker check for Pinokio install.
// Verifies Docker CLI, daemon, and Compose are available.
// Handles Windows PATH issues and gives actionable error messages.
const { execSync } = require("child_process");
const os = require("os");
const fs = require("fs");
function exec(cmd, timeoutMs) {
try {
return execSync(cmd, { encoding: "utf8", timeout: timeoutMs || 15000 }).trim();
} catch {
return null;
}
}
function execDetail(cmd, timeoutMs) {
try {
return {
ok: true,
out: execSync(cmd, { encoding: "utf8", timeout: timeoutMs || 15000 }).trim(),
};
} catch (e) {
return {
ok: false,
err: ((e.stderr || "") + " " + (e.message || "")).trim(),
};
}
}
// --- Windows: Docker Desktop may not be on PATH in Pinokio's conda shell ---
if (os.platform() === "win32" && !exec("docker --version")) {
const candidates = [
(process.env.ProgramFiles || "C:\\Program Files") +
"\\Docker\\Docker\\resources\\bin",
(process.env.LOCALAPPDATA || "") +
"\\Programs\\Docker\\Docker\\resources\\bin",
];
for (const dir of candidates) {
try {
fs.accessSync(dir);
process.env.PATH = dir + ";" + (process.env.PATH || "");
console.log(" Found Docker at: " + dir);
break;
} catch {
// not found here, try next
}
}
}
// --- Check 1: Docker CLI installed ---
const ver = exec("docker --version");
if (!ver) {
console.error("\n ERROR: Docker is not installed.\n");
console.error(" OpenVoiceUI runs in Docker containers.");
console.error(
" Install Docker Desktop: https://docker.com/products/docker-desktop/\n"
);
process.exit(1);
}
console.log(" " + ver);
// --- Check 2: Docker daemon running ---
const info = execDetail("docker info", 30000);
if (!info.ok) {
if (
info.err.includes("permission denied") ||
info.err.includes("Permission denied")
) {
console.error("\n ERROR: Permission denied accessing Docker.\n");
if (os.platform() === "linux") {
console.error(" Add your user to the docker group:");
console.error(" sudo usermod -aG docker $USER");
console.error(" Then log out and log back in.\n");
} else {
console.error(" Try running Pinokio as administrator.\n");
}
} else {
console.error("\n ERROR: Docker is installed but not running.\n");
if (os.platform() === "win32" || os.platform() === "darwin") {
console.error(
" Open Docker Desktop and wait for it to finish starting."
);
} else {
console.error(" Start Docker: sudo systemctl start docker");
}
console.error(" Then click Install again.\n");
}
process.exit(1);
}
// --- Check 3: Docker Compose v2 ---
const compose = exec("docker compose version");
if (!compose) {
console.error("\n ERROR: Docker Compose v2 is not available.\n");
console.error(" It ships with Docker Desktop — update your Docker Desktop");
console.error(
" or install the plugin: https://docs.docker.com/compose/install/\n"
);
process.exit(1);
}
console.log(" " + compose);
console.log("\n Docker is ready!\n");