0.6.599

发布: (2026年5月4日 GMT+8 02:03)
6 分钟阅读
原文: Dev.to

Source: Dev.to

目标

我想要一个最近的 Jan.ai 构建。我得到一个 0.6.599 .deb。模型只给了一个单一、通用的指令——没有提到版本、标签或检查已经安装的内容。它说:

目标应用程序: jan.ai 桌面应用
容器名称模式: [os]-[shortname](例如 ubuntu-jan
基础镜像: 基于 glibc 的(例如 ubuntu:22.04

步骤

  1. 使用指定的基础镜像创建容器。
  2. 如果容器已经存在,进入容器并决定是继续使用还是重新创建。
  3. 使用网页搜索在检测到的操作系统上找到目标应用的构建说明。
  4. 在容器内部从源码构建该应用。
  5. 无需在宿主机上安装构建好的应用。

持久化构建状态

  • /tmp/build_state.json 中维护以下字段:statusphasesteps_completedlast_errorprogress_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)

  • 模型安装了 gitgccrustup
  • 克隆了 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 → 打包器抱怨缺少 cli feature。
  • 创建一个空的 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 包仍然在我的下载文件夹中;我已经多次安装、卸载、重新安装,它依旧能用,却不知道有什么问题。

我并没有得到什么深刻的教训——只是在看机器不停地磨蹭。

0 浏览
Back to Blog

相关文章

阅读更多 »

让客户交接轻松的文件夹结构

每家机构都有这样一个版本的故事:团队成员离职、客户升级,或者你在替病假的同事顶班——于是你花了20分钟去搜索……