Spaces:
Paused
Paused
修正 bootstrap 路徑:HF Space 程式在 /app、HOME 為 /root;補 cmake/build-essential/git
Browse files- app.py +6 -3
- bootstrap.sh +5 -4
- packages.txt +5 -0
app.py
CHANGED
|
@@ -42,6 +42,8 @@ except Exception as _relay_err: # pragma: no cover
|
|
| 42 |
|
| 43 |
# ──────────────────────────── 全域設定 ────────────────────────────
|
| 44 |
HOME = os.path.expanduser("~")
|
|
|
|
|
|
|
| 45 |
# 檔案瀏覽/下載不設路徑白名單(此服務本身已提供完整終端機權限)。
|
| 46 |
|
| 47 |
# 共用分頁:所有裝置/瀏覽器看到同一組分頁,而且每一頁都是「共用+長存」的 PTY。
|
|
@@ -1213,7 +1215,7 @@ BOOTSTRAP_LOG = "/tmp/webterm-bootstrap.log"
|
|
| 1213 |
@app.get("/api/bootstrap/status")
|
| 1214 |
async def api_bootstrap_status():
|
| 1215 |
"""回報環境 bootstrap(s5p / 甲)進度,方便測試與除錯。"""
|
| 1216 |
-
s5p_dir = os.path.join(
|
| 1217 |
pi_cfg = os.path.join(HOME, ".pi", "agent", "models.json")
|
| 1218 |
log_tail = ""
|
| 1219 |
try:
|
|
@@ -1432,7 +1434,7 @@ async def run_bootstrap_script():
|
|
| 1432 |
|
| 1433 |
以背景子行程執行,不阻塞 Space 啟動;輸出寫入 /tmp/webterm-bootstrap.log。
|
| 1434 |
"""
|
| 1435 |
-
path = os.path.join(
|
| 1436 |
if not os.path.isfile(path):
|
| 1437 |
log.warning("⚠️ bootstrap.sh 不存在於 %s,跳過", path)
|
| 1438 |
return False
|
|
@@ -2804,9 +2806,10 @@ def _reconcile_tmux():
|
|
| 2804 |
|
| 2805 |
def _write_shell_launcher():
|
| 2806 |
"""建立 tmux 內 shell 的啟動腳本(保留 PWD 提示,讓上傳功能知道目前目錄)。"""
|
|
|
|
| 2807 |
content = (
|
| 2808 |
"#!/bin/bash\n"
|
| 2809 |
-
"export PATH=\"
|
| 2810 |
"export PROMPT_COMMAND='echo -ne \"\\033]0;PWD:$PWD\\007\"'\n"
|
| 2811 |
"exec bash --login\n"
|
| 2812 |
)
|
|
|
|
| 42 |
|
| 43 |
# ──────────────────────────── 全域設定 ────────────────────────────
|
| 44 |
HOME = os.path.expanduser("~")
|
| 45 |
+
# repo/工作目錄:HF Space 的程式在 /app,但 HOME 可能是 /root,不能假設 $HOME/app。
|
| 46 |
+
REPO_DIR = os.path.dirname(os.path.abspath(__file__))
|
| 47 |
# 檔案瀏覽/下載不設路徑白名單(此服務本身已提供完整終端機權限)。
|
| 48 |
|
| 49 |
# 共用分頁:所有裝置/瀏覽器看到同一組分頁,而且每一頁都是「共用+長存」的 PTY。
|
|
|
|
| 1215 |
@app.get("/api/bootstrap/status")
|
| 1216 |
async def api_bootstrap_status():
|
| 1217 |
"""回報環境 bootstrap(s5p / 甲)進度,方便測試與除錯。"""
|
| 1218 |
+
s5p_dir = os.path.join(REPO_DIR, "s5p")
|
| 1219 |
pi_cfg = os.path.join(HOME, ".pi", "agent", "models.json")
|
| 1220 |
log_tail = ""
|
| 1221 |
try:
|
|
|
|
| 1434 |
|
| 1435 |
以背景子行程執行,不阻塞 Space 啟動;輸出寫入 /tmp/webterm-bootstrap.log。
|
| 1436 |
"""
|
| 1437 |
+
path = os.path.join(REPO_DIR, "bootstrap.sh")
|
| 1438 |
if not os.path.isfile(path):
|
| 1439 |
log.warning("⚠️ bootstrap.sh 不存在於 %s,跳過", path)
|
| 1440 |
return False
|
|
|
|
| 2806 |
|
| 2807 |
def _write_shell_launcher():
|
| 2808 |
"""建立 tmux 內 shell 的啟動腳本(保留 PWD 提示,讓上傳功能知道目前目錄)。"""
|
| 2809 |
+
s5p_dir = os.path.join(REPO_DIR, "s5p")
|
| 2810 |
content = (
|
| 2811 |
"#!/bin/bash\n"
|
| 2812 |
+
f"export PATH=\"{s5p_dir}:{s5p_dir}/oshopencode:$HOME/.local/bin:$PATH\"\n"
|
| 2813 |
"export PROMPT_COMMAND='echo -ne \"\\033]0;PWD:$PWD\\007\"'\n"
|
| 2814 |
"exec bash --login\n"
|
| 2815 |
)
|
bootstrap.sh
CHANGED
|
@@ -12,7 +12,8 @@ mkdir -p "$(dirname "$LOG")" 2>/dev/null || true
|
|
| 12 |
exec >>"$LOG" 2>&1
|
| 13 |
|
| 14 |
HOME_DIR="${HOME:-/home/user}"
|
| 15 |
-
|
|
|
|
| 16 |
S5P_DIR="$APP_DIR/s5p"
|
| 17 |
FLINT_DIR="$HOME_DIR/flint_cpu_opt"
|
| 18 |
STORAGE_BASE="${S5P_STORAGE_BASE:-https://huggingface.co/spaces/HelloSun/storage/resolve/main}"
|
|
@@ -54,14 +55,14 @@ install_s5p() {
|
|
| 54 |
chmod +x "$S5P_DIR/oshopencode"/*.sh "$S5P_DIR/oshopencode/oshopencode.py" 2>/dev/null || true
|
| 55 |
|
| 56 |
# 讓 `oshopencode.py` 直接可用(不論 shell 有沒有讀到 rc)。
|
| 57 |
-
cat >"$HOME_DIR/.local/bin/oshopencode.py" <<
|
| 58 |
#!/usr/bin/env bash
|
| 59 |
-
exec python3 "$
|
| 60 |
EOS
|
| 61 |
chmod +x "$HOME_DIR/.local/bin/oshopencode.py"
|
| 62 |
ln -sf "$HOME_DIR/.local/bin/oshopencode.py" /usr/local/bin/oshopencode.py 2>/dev/null || true
|
| 63 |
|
| 64 |
-
local path_line=
|
| 65 |
add_path_line "$HOME_DIR/.bashrc" "$path_line"
|
| 66 |
add_path_line "$HOME_DIR/.profile" "$path_line"
|
| 67 |
add_path_line "$HOME_DIR/.bash_profile" "$path_line"
|
|
|
|
| 12 |
exec >>"$LOG" 2>&1
|
| 13 |
|
| 14 |
HOME_DIR="${HOME:-/home/user}"
|
| 15 |
+
# repo/工作目錄 = 這支腳本所在目錄(HF Space 是 /app,不是 $HOME/app)
|
| 16 |
+
APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
| 17 |
S5P_DIR="$APP_DIR/s5p"
|
| 18 |
FLINT_DIR="$HOME_DIR/flint_cpu_opt"
|
| 19 |
STORAGE_BASE="${S5P_STORAGE_BASE:-https://huggingface.co/spaces/HelloSun/storage/resolve/main}"
|
|
|
|
| 55 |
chmod +x "$S5P_DIR/oshopencode"/*.sh "$S5P_DIR/oshopencode/oshopencode.py" 2>/dev/null || true
|
| 56 |
|
| 57 |
# 讓 `oshopencode.py` 直接可用(不論 shell 有沒有讀到 rc)。
|
| 58 |
+
cat >"$HOME_DIR/.local/bin/oshopencode.py" <<EOS
|
| 59 |
#!/usr/bin/env bash
|
| 60 |
+
exec python3 "$S5P_DIR/oshopencode.py" "\$@"
|
| 61 |
EOS
|
| 62 |
chmod +x "$HOME_DIR/.local/bin/oshopencode.py"
|
| 63 |
ln -sf "$HOME_DIR/.local/bin/oshopencode.py" /usr/local/bin/oshopencode.py 2>/dev/null || true
|
| 64 |
|
| 65 |
+
local path_line="export PATH=\"$S5P_DIR:$S5P_DIR/oshopencode:$HOME_DIR/.local/bin:\$PATH\""
|
| 66 |
add_path_line "$HOME_DIR/.bashrc" "$path_line"
|
| 67 |
add_path_line "$HOME_DIR/.profile" "$path_line"
|
| 68 |
add_path_line "$HOME_DIR/.bash_profile" "$path_line"
|
packages.txt
CHANGED
|
@@ -37,3 +37,8 @@ fonts-wqy-zenhei
|
|
| 37 |
fonts-tlwg-loma-otf
|
| 38 |
fonts-freefont-ttf
|
| 39 |
autocutsel
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
fonts-tlwg-loma-otf
|
| 38 |
fonts-freefont-ttf
|
| 39 |
autocutsel
|
| 40 |
+
cmake
|
| 41 |
+
build-essential
|
| 42 |
+
git
|
| 43 |
+
pkg-config
|
| 44 |
+
libgomp1
|