karnel-termux 4.17.1 → 4.17.2
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/karnel/RELEASE_COMMIT +1 -1
- package/karnel/cli/commands/backup.sh +1 -1
- package/karnel/cli/commands/supabase.sh +1 -1
- package/karnel/tools/ai/antigravity-cli/install.sh +18 -6
- package/karnel/tools/ai/ctx7/install.sh +7 -0
- package/karnel/tools/ai/droid/install.sh +19 -6
- package/karnel/tools/ai/freebuff/install.sh +7 -0
- package/karnel/tools/ai/goose/install.sh +1 -0
- package/karnel/tools/ai/keelcode/install.sh +7 -0
- package/karnel/tools/ai/kimchi-code/install.sh +9 -3
- package/karnel/tools/ai/oh-my-pi/install.sh +31 -6
- package/karnel/tools/ai/omni-route/install.sh +7 -0
- package/karnel/tools/ai/openspec/install.sh +7 -0
- package/karnel/tools/ai/puter/install.sh +7 -0
- package/karnel/tools/ai/supercode-cli/install.sh +7 -0
- package/karnel/tools/db/redis/install.sh +4 -1
- package/karnel/tools/dev/openssh/install.sh +4 -1
- package/karnel/tools/dev/tmux/install.sh +4 -1
- package/karnel/tools/lang/bun/install.sh +19 -6
- package/karnel/tools/osint/robin/install.sh +6 -2
- package/karnel/tools/security/amass/install.sh +7 -0
- package/karnel/tools/security/subfinder/install.sh +7 -0
- package/package.json +1 -1
package/karnel/RELEASE_COMMIT
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
680f9d3f783c6f2bf95e4499c3e230d2d25b7070
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import "@/utils/log"
|
|
4
4
|
import "@/utils/colors"
|
|
5
5
|
import "@/utils/version"
|
|
6
|
+
import "@/utils/install"
|
|
6
7
|
|
|
7
8
|
LOG_FILE="$KARNEL_CACHE/install_ai.log"
|
|
8
9
|
AGY_DATA_DIR="$HOME/.local/share/karnel-data/antigravity-cli"
|
|
@@ -63,17 +64,22 @@ _antigravity_download_binary() {
|
|
|
63
64
|
}
|
|
64
65
|
|
|
65
66
|
_antigravity_download_binary_impl() {
|
|
66
|
-
local
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
67
|
+
local manifest
|
|
68
|
+
manifest=$(curl -fsSL "$MANIFEST_URL") || {
|
|
69
|
+
log_error "Failed to fetch Antigravity CLI manifest"
|
|
70
|
+
return 1
|
|
71
|
+
}
|
|
72
|
+
local latest_version download_url manifest_sha256
|
|
73
|
+
latest_version=$(printf '%s' "$manifest" | jq -r .version)
|
|
74
|
+
download_url=$(printf '%s' "$manifest" | jq -r .url)
|
|
75
|
+
manifest_sha256=$(printf '%s' "$manifest" | jq -r '.sha256 // empty')
|
|
76
|
+
if [ -z "$latest_version" ] || [ -z "$download_url" ]; then
|
|
77
|
+
log_error "Failed to parse Antigravity CLI manifest"
|
|
70
78
|
return 1
|
|
71
79
|
fi
|
|
72
80
|
|
|
73
81
|
mkdir -p "$AGY_DATA_DIR"
|
|
74
82
|
|
|
75
|
-
local download_url
|
|
76
|
-
download_url=$(_antigravity_get_download_url)
|
|
77
83
|
local tarball="$AGY_DATA_DIR/agy.tar.gz"
|
|
78
84
|
|
|
79
85
|
if ! curl -fsSL -o "$tarball" "$download_url" &>>"$LOG_FILE"; then
|
|
@@ -81,6 +87,12 @@ _antigravity_download_binary_impl() {
|
|
|
81
87
|
return 1
|
|
82
88
|
fi
|
|
83
89
|
|
|
90
|
+
if [[ "$manifest_sha256" =~ ^[0-9a-f]{64}$ ]]; then
|
|
91
|
+
verify_sha256 "$tarball" "$manifest_sha256" || return 1
|
|
92
|
+
else
|
|
93
|
+
log_warn "Antigravity CLI manifest does not publish a SHA-256; skipping integrity verification"
|
|
94
|
+
fi
|
|
95
|
+
|
|
84
96
|
if ! tar -xzf "$tarball" -C "$AGY_DATA_DIR" &>>"$LOG_FILE"; then
|
|
85
97
|
log_error "Failed to extract Antigravity CLI binary"
|
|
86
98
|
return 1
|
|
@@ -13,6 +13,13 @@ install_ctx7() {
|
|
|
13
13
|
return 2
|
|
14
14
|
fi
|
|
15
15
|
|
|
16
|
+
if ! command -v npm &>/dev/null; then
|
|
17
|
+
if ! pkg install nodejs-lts -y &>>"$LOG_FILE"; then
|
|
18
|
+
log_error "Failed to install Node.js (required by ctx7)"
|
|
19
|
+
return 1
|
|
20
|
+
fi
|
|
21
|
+
fi
|
|
22
|
+
|
|
16
23
|
log_info "Installing ctx7 (Context7 documentation provider)..."
|
|
17
24
|
npm install -g ctx7 2>/dev/null
|
|
18
25
|
local rc=$?
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import "@/utils/log"
|
|
4
4
|
import "@/utils/colors"
|
|
5
5
|
import "@/utils/version"
|
|
6
|
+
import "@/utils/install"
|
|
6
7
|
import "@/utils/uninstall"
|
|
7
8
|
|
|
8
9
|
: "${KARNEL_DATA:=${XDG_DATA_HOME:-$HOME/.local/share}/karnel-data}"
|
|
@@ -239,14 +240,20 @@ _droid_ubuntu_install_bin() {
|
|
|
239
240
|
|
|
240
241
|
local binary_url="https://downloads.factory.ai/factory-cli/releases/$latest_version/linux/arm64/droid"
|
|
241
242
|
|
|
242
|
-
|
|
243
|
+
local expected
|
|
244
|
+
expected=$(curl -fsSL "$binary_url.sha256" 2>/dev/null | awk '{print $1}') || expected=""
|
|
245
|
+
if [[ ! "$expected" =~ ^[0-9a-f]{64}$ ]]; then
|
|
246
|
+
log_warn "No published SHA-256 for Droid; skipping integrity verification"
|
|
247
|
+
fi
|
|
248
|
+
_droid_proot_ubuntu /bin/bash -c '
|
|
243
249
|
mkdir -p /tmp/droid-install &&
|
|
244
|
-
curl -fsSL
|
|
250
|
+
curl -fsSL "$1" -o /tmp/droid-install/droid &&
|
|
251
|
+
{ [ -z "$2" ] || [ "$(sha256sum /tmp/droid-install/droid | awk "{print \$1}")" = "$2" ]; } &&
|
|
245
252
|
mkdir -p /usr/local/bin &&
|
|
246
253
|
mv /tmp/droid-install/droid /usr/local/bin/droid &&
|
|
247
254
|
chmod +x /usr/local/bin/droid &&
|
|
248
255
|
rm -rf /tmp/droid-install
|
|
249
|
-
" &>>"$LOG_FILE"
|
|
256
|
+
' bash "$binary_url" "$expected" &>>"$LOG_FILE"
|
|
250
257
|
|
|
251
258
|
local droid_bin="$(_droid_detect_ubuntu_root)/usr/local/bin/droid"
|
|
252
259
|
if [ ! -f "$droid_bin" ]; then
|
|
@@ -413,14 +420,20 @@ _update_droid_proot_impl() {
|
|
|
413
420
|
|
|
414
421
|
local binary_url="https://downloads.factory.ai/factory-cli/releases/$latest_version/linux/arm64/droid"
|
|
415
422
|
|
|
416
|
-
|
|
423
|
+
local expected
|
|
424
|
+
expected=$(curl -fsSL "$binary_url.sha256" 2>/dev/null | awk '{print $1}') || expected=""
|
|
425
|
+
if [[ ! "$expected" =~ ^[0-9a-f]{64}$ ]]; then
|
|
426
|
+
log_warn "No published SHA-256 for Droid; skipping integrity verification"
|
|
427
|
+
fi
|
|
428
|
+
_droid_proot_ubuntu /bin/bash -c '
|
|
417
429
|
rm -f /usr/local/bin/droid &&
|
|
418
430
|
mkdir -p /tmp/droid-update &&
|
|
419
|
-
curl -fsSL
|
|
431
|
+
curl -fsSL "$1" -o /tmp/droid-update/droid &&
|
|
432
|
+
{ [ -z "$2" ] || [ "$(sha256sum /tmp/droid-update/droid | awk "{print \$1}")" = "$2" ]; } &&
|
|
420
433
|
mv /tmp/droid-update/droid /usr/local/bin/droid &&
|
|
421
434
|
chmod +x /usr/local/bin/droid &&
|
|
422
435
|
rm -rf /tmp/droid-update
|
|
423
|
-
" &>>"$LOG_FILE"
|
|
436
|
+
' bash "$binary_url" "$expected" &>>"$LOG_FILE"
|
|
424
437
|
|
|
425
438
|
local ubuntu_root
|
|
426
439
|
ubuntu_root="$(_droid_detect_ubuntu_root)"
|
|
@@ -9,6 +9,13 @@ install_freebuff() {
|
|
|
9
9
|
return 2
|
|
10
10
|
fi
|
|
11
11
|
|
|
12
|
+
if ! command -v npm &>/dev/null; then
|
|
13
|
+
if ! pkg install nodejs-lts -y &>>"$LOG_FILE"; then
|
|
14
|
+
log_error "Failed to install Node.js (required by Freebuff)"
|
|
15
|
+
return 1
|
|
16
|
+
fi
|
|
17
|
+
fi
|
|
18
|
+
|
|
12
19
|
log_info "Installing Freebuff..."
|
|
13
20
|
npm install -g freebuff || {
|
|
14
21
|
log_error "Failed to install Freebuff"
|
|
@@ -196,6 +196,7 @@ _goose_download_binary_proot_impl() {
|
|
|
196
196
|
log_error "Failed to download Goose CLI"
|
|
197
197
|
return 1
|
|
198
198
|
fi
|
|
199
|
+
verify_github_release_asset aaif-goose/goose "v${latest_version}" "$tarball" "$GOOSE_DATA_DIR/$tarball" || return 1
|
|
199
200
|
if ! tar -xzf "$GOOSE_DATA_DIR/$tarball" -C "$GOOSE_DATA_DIR" &>>"$LOG_FILE"; then
|
|
200
201
|
rm -f "$GOOSE_DATA_DIR/$tarball"
|
|
201
202
|
log_error "Failed to extract Goose CLI"
|
|
@@ -117,6 +117,13 @@ install_keelcode() {
|
|
|
117
117
|
fi
|
|
118
118
|
_keelcode_verify_ownership || return 1
|
|
119
119
|
|
|
120
|
+
if ! command -v npm &>/dev/null; then
|
|
121
|
+
if ! pkg install nodejs-lts -y &>>"$LOG_FILE"; then
|
|
122
|
+
log_error "Failed to install Node.js (required by KeelCode)"
|
|
123
|
+
return 1
|
|
124
|
+
fi
|
|
125
|
+
fi
|
|
126
|
+
|
|
120
127
|
log_info "Installing KeelCode..."
|
|
121
128
|
local output rc
|
|
122
129
|
output="$(npm install -g "$KEELCODE_PACKAGE" --force 2>&1)"
|
|
@@ -262,9 +262,15 @@ _kimchi_ubuntu_install_bin() {
|
|
|
262
262
|
|
|
263
263
|
local download_url="https://github.com/getkimchi/kimchi/releases/download/$latest_version/kimchi_linux_arm64.tar.gz"
|
|
264
264
|
|
|
265
|
-
|
|
265
|
+
local expected
|
|
266
|
+
expected=$(github_release_asset_sha256 getkimchi/kimchi "$latest_version" "kimchi_linux_arm64.tar.gz") || expected=""
|
|
267
|
+
if [[ ! "$expected" =~ ^[0-9a-f]{64}$ ]]; then
|
|
268
|
+
log_warn "No published SHA-256 for Kimchi; skipping integrity verification"
|
|
269
|
+
fi
|
|
270
|
+
_kimchi_proot_ubuntu /bin/bash -c '
|
|
266
271
|
mkdir -p /tmp/kimchi-install &&
|
|
267
|
-
curl -fsSL
|
|
272
|
+
curl -fsSL "$1" -o /tmp/kimchi-install/kimchi.tar.gz &&
|
|
273
|
+
{ [ -z "$2" ] || [ "$(sha256sum /tmp/kimchi-install/kimchi.tar.gz | awk "{print \$1}")" = "$2" ]; } &&
|
|
268
274
|
tar -zxf /tmp/kimchi-install/kimchi.tar.gz -C /tmp/kimchi-install &&
|
|
269
275
|
mkdir -p /usr/local/bin /usr/local/share &&
|
|
270
276
|
mv /tmp/kimchi-install/bin/kimchi /usr/local/bin/kimchi &&
|
|
@@ -272,7 +278,7 @@ _kimchi_ubuntu_install_bin() {
|
|
|
272
278
|
rm -rf /usr/local/share/kimchi &&
|
|
273
279
|
mv /tmp/kimchi-install/share/kimchi /usr/local/share/kimchi &&
|
|
274
280
|
rm -rf /tmp/kimchi-install
|
|
275
|
-
" &>>"$LOG_FILE"
|
|
281
|
+
' bash "$download_url" "$expected" &>>"$LOG_FILE"
|
|
276
282
|
|
|
277
283
|
local kimchi_bin
|
|
278
284
|
kimchi_bin="$(_kimchi_detect_ubuntu_root)/usr/local/bin/kimchi"
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import "@/utils/log"
|
|
4
4
|
import "@/utils/colors"
|
|
5
5
|
import "@/utils/version"
|
|
6
|
+
import "@/utils/install"
|
|
6
7
|
|
|
7
8
|
LOG_FILE="$KARNEL_CACHE/install_ai.log"
|
|
8
9
|
OMP_DATA_DIR="$HOME/.local/share/karnel-data/oh-my-pi"
|
|
@@ -85,8 +86,16 @@ _download_omp_binary_impl() {
|
|
|
85
86
|
log_error "Failed to download Oh-My-Pi binary"
|
|
86
87
|
return 1
|
|
87
88
|
fi
|
|
89
|
+
local expected
|
|
90
|
+
expected=$(github_release_asset_sha256 can1357/oh-my-pi "$latest_version" "omp-linux-arm64") || expected=""
|
|
91
|
+
if [[ "$expected" =~ ^[0-9a-f]{64}$ ]]; then
|
|
92
|
+
verify_sha256 "$target_dir/omp" "$expected" || return 1
|
|
93
|
+
else
|
|
94
|
+
log_warn "No published SHA-256 for Oh-My-Pi; skipping integrity verification"
|
|
95
|
+
fi
|
|
88
96
|
chmod +x "$target_dir/omp"
|
|
89
97
|
echo "$latest_version" > "$target_dir/version"
|
|
98
|
+
: > "$target_dir/.karnel-managed"
|
|
90
99
|
return 0
|
|
91
100
|
}
|
|
92
101
|
|
|
@@ -160,15 +169,21 @@ _install_omp_proot_impl() {
|
|
|
160
169
|
return 1
|
|
161
170
|
fi
|
|
162
171
|
local download_url="https://github.com/can1357/oh-my-pi/releases/download/$latest_version/omp-linux-arm64"
|
|
163
|
-
|
|
172
|
+
local expected
|
|
173
|
+
expected=$(github_release_asset_sha256 can1357/oh-my-pi "$latest_version" "omp-linux-arm64") || expected=""
|
|
174
|
+
if [[ ! "$expected" =~ ^[0-9a-f]{64}$ ]]; then
|
|
175
|
+
log_warn "No published SHA-256 for Oh-My-Pi; skipping integrity verification"
|
|
176
|
+
fi
|
|
177
|
+
if ! _omp_proot_ubuntu /bin/bash -c '
|
|
164
178
|
mkdir -p /tmp/omp-install &&
|
|
165
|
-
curl -fsSL
|
|
179
|
+
curl -fsSL "$1" -o /tmp/omp-install/omp &&
|
|
180
|
+
{ [ -z "$2" ] || [ "$(sha256sum /tmp/omp-install/omp | awk "{print \$1}")" = "$2" ]; } &&
|
|
166
181
|
chmod +x /tmp/omp-install/omp &&
|
|
167
182
|
test -x /tmp/omp-install/omp &&
|
|
168
183
|
mkdir -p /usr/local/bin &&
|
|
169
184
|
mv /tmp/omp-install/omp /usr/local/bin/omp &&
|
|
170
185
|
rm -rf /tmp/omp-install
|
|
171
|
-
" &>>"$LOG_FILE"; then
|
|
186
|
+
' bash "$download_url" "$expected" &>>"$LOG_FILE"; then
|
|
172
187
|
log_error "Failed to install Oh-My-Pi binary"
|
|
173
188
|
return 1
|
|
174
189
|
fi
|
|
@@ -209,6 +224,10 @@ install_oh_my_pi() {
|
|
|
209
224
|
}
|
|
210
225
|
|
|
211
226
|
_uninstall_omp_native_impl() {
|
|
227
|
+
if [[ ! -f "$OMP_DATA_DIR/.karnel-managed" ]]; then
|
|
228
|
+
log_error "Refusing to remove an Oh-My-Pi installation that is not managed by Karnel"
|
|
229
|
+
return 1
|
|
230
|
+
fi
|
|
212
231
|
rm -f "$PREFIX/bin/omp"
|
|
213
232
|
rm -rf "$OMP_DATA_DIR"
|
|
214
233
|
}
|
|
@@ -256,14 +275,20 @@ _update_omp_proot_impl() {
|
|
|
256
275
|
return 1
|
|
257
276
|
fi
|
|
258
277
|
local download_url="https://github.com/can1357/oh-my-pi/releases/download/$latest_version/omp-linux-arm64"
|
|
259
|
-
|
|
278
|
+
local expected
|
|
279
|
+
expected=$(github_release_asset_sha256 can1357/oh-my-pi "$latest_version" "omp-linux-arm64") || expected=""
|
|
280
|
+
if [[ ! "$expected" =~ ^[0-9a-f]{64}$ ]]; then
|
|
281
|
+
log_warn "No published SHA-256 for Oh-My-Pi; skipping integrity verification"
|
|
282
|
+
fi
|
|
283
|
+
if ! _omp_proot_ubuntu /bin/bash -c '
|
|
260
284
|
mkdir -p /tmp/omp-update &&
|
|
261
|
-
curl -fsSL
|
|
285
|
+
curl -fsSL "$1" -o /tmp/omp-update/omp &&
|
|
286
|
+
{ [ -z "$2" ] || [ "$(sha256sum /tmp/omp-update/omp | awk "{print \$1}")" = "$2" ]; } &&
|
|
262
287
|
chmod +x /tmp/omp-update/omp &&
|
|
263
288
|
test -x /tmp/omp-update/omp &&
|
|
264
289
|
mv /tmp/omp-update/omp /usr/local/bin/omp &&
|
|
265
290
|
rm -rf /tmp/omp-update
|
|
266
|
-
" &>>"$LOG_FILE"; then
|
|
291
|
+
' bash "$download_url" "$expected" &>>"$LOG_FILE"; then
|
|
267
292
|
log_error "Failed to update Oh-My-Pi binary"
|
|
268
293
|
return 1
|
|
269
294
|
fi
|
|
@@ -127,6 +127,13 @@ install_omni_route() {
|
|
|
127
127
|
fi
|
|
128
128
|
fi
|
|
129
129
|
|
|
130
|
+
if ! command -v npm &>/dev/null; then
|
|
131
|
+
if ! pkg install nodejs-lts -y &>>"$LOG_FILE"; then
|
|
132
|
+
log_error "Failed to install Node.js (required by omniRoute)"
|
|
133
|
+
return 1
|
|
134
|
+
fi
|
|
135
|
+
fi
|
|
136
|
+
|
|
130
137
|
log_info "Installing omniRoute (this may take a while)..."
|
|
131
138
|
if command -v npm >/dev/null 2>&1 && npm i karnelroute --prefix "$OMNI_ROUTE_PKG" 2>>"$LOG_FILE"; then
|
|
132
139
|
sed -i '1s|^#!/usr/bin/env node|#!'"$PREFIX"'/bin/node|' "$OMNI_ROUTE_LOCAL_BIN" 2>/dev/null
|
|
@@ -13,6 +13,13 @@ install_openspec() {
|
|
|
13
13
|
return 2
|
|
14
14
|
fi
|
|
15
15
|
|
|
16
|
+
if ! command -v npm &>/dev/null; then
|
|
17
|
+
if ! pkg install nodejs-lts -y &>>"$LOG_FILE"; then
|
|
18
|
+
log_error "Failed to install Node.js (required by openspec)"
|
|
19
|
+
return 1
|
|
20
|
+
fi
|
|
21
|
+
fi
|
|
22
|
+
|
|
16
23
|
log_info "Installing openspec (Spec-Driven Development framework)..."
|
|
17
24
|
npm install -g @fission-ai/openspec@latest 2>/dev/null
|
|
18
25
|
local rc=$?
|
|
@@ -12,6 +12,13 @@ install_puter() {
|
|
|
12
12
|
return 2
|
|
13
13
|
fi
|
|
14
14
|
|
|
15
|
+
if ! command -v npm &>/dev/null; then
|
|
16
|
+
if ! pkg install nodejs-lts -y &>>"$LOG_FILE"; then
|
|
17
|
+
log_error "Failed to install Node.js (required by Puter CLI)"
|
|
18
|
+
return 1
|
|
19
|
+
fi
|
|
20
|
+
fi
|
|
21
|
+
|
|
15
22
|
log_info "Installing Puter CLI..."
|
|
16
23
|
if ! npm install -g "$PUTER_PACKAGE" &>>"$PUTER_LOG_FILE"; then
|
|
17
24
|
log_error "Failed to install Puter CLI; see $PUTER_LOG_FILE"
|
|
@@ -8,6 +8,13 @@ install_supercode_cli() {
|
|
|
8
8
|
log_info "Supercode CLI is already installed"
|
|
9
9
|
return 2
|
|
10
10
|
fi
|
|
11
|
+
if ! command -v npm &>/dev/null; then
|
|
12
|
+
if ! pkg install nodejs-lts -y &>>"$LOG_FILE"; then
|
|
13
|
+
log_error "Failed to install Node.js (required by Supercode CLI)"
|
|
14
|
+
return 1
|
|
15
|
+
fi
|
|
16
|
+
fi
|
|
17
|
+
|
|
11
18
|
log_info "Installing Supercode CLI..."
|
|
12
19
|
local output rc
|
|
13
20
|
output="$(npm install -g supercode-cli 2>&1)"
|
|
@@ -50,7 +50,10 @@ _update_redis_impl() {
|
|
|
50
50
|
|
|
51
51
|
_do_redis_update() {
|
|
52
52
|
mkdir -p "$(dirname "$LOG_FILE")"
|
|
53
|
-
pkg upgrade redis -y &>>"$LOG_FILE"
|
|
53
|
+
if ! pkg upgrade redis -y &>>"$LOG_FILE"; then
|
|
54
|
+
log_error "Falha ao atualizar Redis"
|
|
55
|
+
return 1
|
|
56
|
+
fi
|
|
54
57
|
}
|
|
55
58
|
|
|
56
59
|
update_redis() {
|
|
@@ -62,7 +62,10 @@ _update_openssh_pkg() {
|
|
|
62
62
|
|
|
63
63
|
_do_openssh_update() {
|
|
64
64
|
mkdir -p "$(dirname "$LOG_FILE")"
|
|
65
|
-
yes | pkg upgrade openssh -y &>>"$LOG_FILE"
|
|
65
|
+
if ! yes | pkg upgrade openssh -y &>>"$LOG_FILE"; then
|
|
66
|
+
log_error "Falha ao atualizar OpenSSH"
|
|
67
|
+
return 1
|
|
68
|
+
fi
|
|
66
69
|
}
|
|
67
70
|
|
|
68
71
|
update_openssh() {
|
|
@@ -62,7 +62,10 @@ _update_tmux_pkg() {
|
|
|
62
62
|
|
|
63
63
|
_do_tmux_update() {
|
|
64
64
|
mkdir -p "$(dirname "$LOG_FILE")"
|
|
65
|
-
yes | pkg upgrade tmux -y &>>"$LOG_FILE"
|
|
65
|
+
if ! yes | pkg upgrade tmux -y &>>"$LOG_FILE"; then
|
|
66
|
+
log_error "Falha ao atualizar Tmux"
|
|
67
|
+
return 1
|
|
68
|
+
fi
|
|
66
69
|
}
|
|
67
70
|
|
|
68
71
|
update_tmux() {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import "@/utils/log"
|
|
4
4
|
import "@/utils/colors"
|
|
5
5
|
import "@/utils/version"
|
|
6
|
+
import "@/utils/install"
|
|
6
7
|
|
|
7
8
|
LOG_FILE="$KARNEL_CACHE/install_lang.log"
|
|
8
9
|
BUN_DATA_DIR="$KARNEL_DATA/bun"
|
|
@@ -268,16 +269,22 @@ _install_bun_proot_impl() {
|
|
|
268
269
|
_bun_proot_ubuntu /bin/bash -c \
|
|
269
270
|
'apt-get update && apt-get upgrade -y && apt-get install -y curl ca-certificates unzip' \
|
|
270
271
|
&>>"$LOG_FILE"
|
|
271
|
-
|
|
272
|
+
local expected
|
|
273
|
+
expected=$(github_release_asset_sha256 "$BUN_REPO" "bun-v$version" "bun-linux-aarch64.zip") || expected=""
|
|
274
|
+
if [[ ! "$expected" =~ ^[0-9a-f]{64}$ ]]; then
|
|
275
|
+
log_warn "No published SHA-256 for Bun; skipping integrity verification"
|
|
276
|
+
fi
|
|
277
|
+
_bun_proot_ubuntu /bin/bash -c '
|
|
272
278
|
export HOME=/root TMPDIR=/tmp
|
|
273
279
|
cd /tmp &&
|
|
274
|
-
curl -fsSL
|
|
280
|
+
curl -fsSL "$1" -o bun.zip &&
|
|
281
|
+
{ [ -z "$2" ] || [ "$(sha256sum bun.zip | awk "{print \$1}")" = "$2" ]; } &&
|
|
275
282
|
unzip -o bun.zip >/dev/null 2>&1 &&
|
|
276
283
|
mkdir -p /usr/local/bin &&
|
|
277
284
|
mv bun-linux-aarch64/bun /usr/local/bin/bun &&
|
|
278
285
|
chmod +x /usr/local/bin/bun &&
|
|
279
286
|
rm -rf bun.zip bun-linux-aarch64
|
|
280
|
-
" &>>"$LOG_FILE"
|
|
287
|
+
' bash "$download_url" "$expected" &>>"$LOG_FILE"
|
|
281
288
|
local ubuntu_root
|
|
282
289
|
ubuntu_root="$(_bun_detect_ubuntu_root)"
|
|
283
290
|
if [ -z "$ubuntu_root" ]; then
|
|
@@ -374,16 +381,22 @@ _update_bun_proot() {
|
|
|
374
381
|
fi
|
|
375
382
|
local download_url="https://github.com/$BUN_REPO/releases/download/bun-v$version/bun-linux-aarch64.zip"
|
|
376
383
|
_bun_proot_ubuntu /bin/bash -c 'rm -f /usr/local/bin/bun' &>>"$LOG_FILE"
|
|
377
|
-
|
|
384
|
+
local expected
|
|
385
|
+
expected=$(github_release_asset_sha256 "$BUN_REPO" "bun-v$version" "bun-linux-aarch64.zip") || expected=""
|
|
386
|
+
if [[ ! "$expected" =~ ^[0-9a-f]{64}$ ]]; then
|
|
387
|
+
log_warn "No published SHA-256 for Bun; skipping integrity verification"
|
|
388
|
+
fi
|
|
389
|
+
_bun_proot_ubuntu /bin/bash -c '
|
|
378
390
|
export HOME=/root TMPDIR=/tmp
|
|
379
391
|
cd /tmp &&
|
|
380
|
-
curl -fsSL
|
|
392
|
+
curl -fsSL "$1" -o bun.zip &&
|
|
393
|
+
{ [ -z "$2" ] || [ "$(sha256sum bun.zip | awk "{print \$1}")" = "$2" ]; } &&
|
|
381
394
|
unzip -o bun.zip >/dev/null 2>&1 &&
|
|
382
395
|
mkdir -p /usr/local/bin &&
|
|
383
396
|
mv bun-linux-aarch64/bun /usr/local/bin/bun &&
|
|
384
397
|
chmod +x /usr/local/bin/bun &&
|
|
385
398
|
rm -rf bun.zip bun-linux-aarch64
|
|
386
|
-
" &>>"$LOG_FILE"
|
|
399
|
+
' bash "$download_url" "$expected" &>>"$LOG_FILE"
|
|
387
400
|
local ubuntu_root
|
|
388
401
|
ubuntu_root="$(_bun_detect_ubuntu_root)"
|
|
389
402
|
local bun_bin="$ubuntu_root/usr/local/bin/bun"
|
|
@@ -493,10 +493,14 @@ uninstall_robin() {
|
|
|
493
493
|
return 2
|
|
494
494
|
fi
|
|
495
495
|
|
|
496
|
+
if [[ ! -f "$ROBIN_ROOT/.managed-by-karnel" ]]; then
|
|
497
|
+
log_error "Robin at $ROBIN_ROOT is not managed by Karnel; refusing to remove it to avoid deleting unrelated data"
|
|
498
|
+
return 1
|
|
499
|
+
fi
|
|
500
|
+
|
|
496
501
|
_robin_acquire_lock || return 1
|
|
497
502
|
local rc=0
|
|
498
|
-
|
|
499
|
-
if (( rc == 0 )) && _robin_runtime_active; then
|
|
503
|
+
if _robin_runtime_active; then
|
|
500
504
|
log_error "Stop Robin before uninstalling it: karnel robin stop"
|
|
501
505
|
rc=1
|
|
502
506
|
fi
|
|
@@ -24,10 +24,17 @@ install_amass() (
|
|
|
24
24
|
log_info "Instalando amass..."
|
|
25
25
|
if [ ! -f "$_AMASS_MARKER" ] &&
|
|
26
26
|
{ pkg install -y amass 2>/dev/null || apt install -y amass 2>/dev/null; }; then
|
|
27
|
+
local bin; bin="$(command -v amass)"
|
|
28
|
+
[ -n "$bin" ] && sha256sum "$bin" > "$_AMASS_MARKER" 2>/dev/null
|
|
27
29
|
log_success "amass instalado"
|
|
28
30
|
return 0
|
|
29
31
|
fi
|
|
30
32
|
|
|
33
|
+
command -v unzip >/dev/null 2>&1 || pkg install -y unzip >/dev/null 2>&1 || {
|
|
34
|
+
log_error "unzip indisponível; não foi possível extrair amass"
|
|
35
|
+
return 1
|
|
36
|
+
}
|
|
37
|
+
|
|
31
38
|
local arch asset checksum url tmpdir archive amass_bin staged_bin
|
|
32
39
|
arch=$(_amass_arch) || { log_error "Arquitetura não suportada"; return 1; }
|
|
33
40
|
[[ "$arch" == armv7 ]] && arch="arm"
|
|
@@ -24,10 +24,17 @@ install_subfinder() (
|
|
|
24
24
|
log_info "Instalando subfinder..."
|
|
25
25
|
if [ ! -f "$_SUBFINDER_MARKER" ] &&
|
|
26
26
|
{ pkg install -y subfinder 2>/dev/null || apt install -y subfinder 2>/dev/null; }; then
|
|
27
|
+
local bin; bin="$(command -v subfinder)"
|
|
28
|
+
[ -n "$bin" ] && sha256sum "$bin" > "$_SUBFINDER_MARKER" 2>/dev/null
|
|
27
29
|
log_success "subfinder instalado"
|
|
28
30
|
return 0
|
|
29
31
|
fi
|
|
30
32
|
|
|
33
|
+
command -v unzip >/dev/null 2>&1 || pkg install -y unzip >/dev/null 2>&1 || {
|
|
34
|
+
log_error "unzip indisponível; não foi possível extrair subfinder"
|
|
35
|
+
return 1
|
|
36
|
+
}
|
|
37
|
+
|
|
31
38
|
local arch asset checksum url tmpdir archive staged_bin
|
|
32
39
|
arch=$(_subfinder_arch) || { log_error "Arquitetura não suportada"; return 1; }
|
|
33
40
|
[[ "$arch" == armv7 ]] && arch="arm"
|
package/package.json
CHANGED