0.6.599
Source: Dev.to
目标
我想要一个最近的 Jan.ai 构建。我得到一个 0.6.599 .deb。模型只给了一个单一、通用的指令——没有提到版本、标签或检查已经安装的内容。它说:
目标应用程序: jan.ai 桌面应用
容器名称模式:[os]-[shortname](例如ubuntu-jan)
基础镜像: 基于 glibc 的(例如ubuntu:22.04)
步骤
- 使用指定的基础镜像创建容器。
- 如果容器已经存在,进入容器并决定是继续使用还是重新创建。
- 使用网页搜索在检测到的操作系统上找到目标应用的构建说明。
- 在容器内部从源码构建该应用。
- 无需在宿主机上安装构建好的应用。
持久化构建状态
- 在
/tmp/build_state.json中维护以下字段:status、phase、steps_completed、last_error、progress_log。 - 在执行任何操作前读取状态文件。
- 每完成一个主要步骤后更新该文件。
- 如果命令失败,记录错误、搜索解决方案并继续。
包装脚本 (/tmp/run_and_log.sh)
#!/usr/bin/env bash
# Execute every build command through this wrapper.
# Append stdout+stderr to /tmp/build_output.log.
# Update the state file automatically.
# Return only a small JSON status (no output in tool response).
cmd="$@"
output=$($cmd 2>&1)
echo "$output" >> /tmp/build_output.log
# (Pseudo‑code for state update)
# jq '.steps_completed += 1 | .last_error = null' /tmp/build_state.json > /tmp/tmp.json && mv /tmp/tmp.json /tmp/build_state.json
# Return JSON status
echo '{"status":"ok"}'
错误处理
- 失败时,搜索网页获取确切错误信息。
- 应用修复并重试。
- 两次失败后停止并报告。
通用指南
- 优先使用
git获取源码。 - 通过本机的包管理器安装依赖。
- 对于缺失的包,从源码构建。
- 避免不必要的步骤。
Source:
硬核真相
提示并没有说“检查最新标签”、 “与已安装的版本比较”,甚至没有说“弄清你正在构建的是什么版本”。模型正是按照我的要求去做的,失败在于提问本身。
第一次尝试(Alpine)
- 模型安装了
git、gcc、rustup。 - 克隆了 Jan.ai 仓库,构建了 Web 前端,然后尝试编译 Rust 后端。
- 链接一次又一次失败(musl 与 glibc 的冲突)。
- 模型安装了
gcompat,修补了pkg-config,尝试了交叉编译技巧——均未成功。 - 几个小时后,它清空了容器并重新开始。
第二次尝试(Ubuntu 22.04)
模型搜索 “jan.ai build from source ubuntu”,找到了官方 README。它安装了所需工具:
sudo apt-get update
sudo apt-get install -y build-essential libgtk-3-dev libwebkit2gtk-4.0-dev nodejs yarn rustup
每条命令都通过包装脚本执行,日志写入 /tmp/build_output.log,状态写入 /tmp/build_state.json。
构建步骤
yarn install # 成功
yarn build:web # 成功
cargo build --release # 成功
生成了一个名为 jan 的二进制文件。
打包尝试
yarn tauri build
报错:
Failed to copy binary from "/opt/jan-build/src-tauri/target/release/jan-cli": No such file or directory.
打包工具期望得到 jan-cli,因为 src-tauri/Cargo.toml 中有一个 [[bin]] 条目指向 jan-cli,但对应的源文件缺失。
- 模型尝试创建符号链接 → 被忽略。
- 将
jan复制为jan-cli→ 打包器抱怨缺少clifeature。 - 创建一个空的
jan-cli.rs并使用--features cli编译 → 成功。
最终生成的包:
Jan_0.6.599_amd64.deb
我把它拷贝到主机,执行 sudo dpkg -i Jan_0.6.599_amd64.deb,确认安装时没有注意到警告:
downgrading from 0.7.9 to 0.6.599
随后我检查容器的 Git 日志:模型克隆的是 main 分支,提交为 f46148e77——几个月前的版本,远早于当前的稳定发布。提示从未提及版本号,所以模型根本不在意。
结果
- 应用能够启动、加载模型、响应提示,且能够正常工作——只是一个旧版本。
- 每缺少一个二进制文件都会触发一次反复试验的循环;日志文件不断增大,状态文件记录了数十步操作。
- 两小时的编译最终导致了降级。
.deb包仍然在我的下载文件夹中;我已经多次安装、卸载、重新安装,它依旧能用,却不知道有什么问题。
我并没有得到什么深刻的教训——只是在看机器不停地磨蹭。