0.6.599
I’m happy to help translate the article, but I’ll need the full text you’d like translated. Could you please paste the content (excluding the source line you already provided) here? Once I have it, I’ll translate it into Korean while preserving the original formatting, markdown, and any code blocks or URLs.
Source: …
목표
최근 빌드된 Jan.ai를 원했습니다. 0.6.599 .deb 파일을 받았습니다. 모델에게는 단 하나의 일반적인 지시만 주었으며—버전, 태그, 혹은 이미 설치된 것을 확인하는 내용은 없었습니다. 모델은 다음과 같이 말했습니다:
대상 애플리케이션: jan.ai 데스크톱 애플리케이션
컨테이너 이름 패턴:[os]-[shortname](예:ubuntu-jan)
베이스 이미지: glibc‑기반 (예:ubuntu:22.04)
절차
- 지정된 베이스 이미지로 컨테이너를 생성합니다.
- 컨테이너가 이미 존재한다면, 들어가서 계속 진행할지 재생성할지를 결정합니다.
- 웹 검색을 이용해 감지된 OS에서 대상 애플리케이션을 빌드하는 방법을 찾습니다.
- 컨테이너 내부에서 소스부터 애플리케이션을 빌드합니다.
- 호스트에 빌드된 애플리케이션을 설치할 필요는 없습니다.
지속적인 빌드 상태
/tmp/build_state.json파일을 유지하며 다음 필드를 포함합니다:status,phase,steps_completed,last_error,progress_log.- 어떤 작업을 수행하기 전에 상태 파일을 읽습니다.
- 주요 단계가 끝날 때마다 파일을 업데이트합니다.
- 명령이 실패하면 오류를 기록하고, 해결책을 검색한 뒤 계속 진행합니다.
래퍼 스크립트 (/tmp/run_and_log.sh)
#!/usr/bin/env bash
# 모든 빌드 명령을 이 래퍼를 통해 실행합니다.
# stdout+stderr를 /tmp/build_output.log에 추가합니다.
# 상태 파일을 자동으로 업데이트합니다.
# 툴 응답에 출력 없이 작은 JSON 상태만 반환합니다.
cmd="$@"
output=$($cmd 2>&1)
echo "$output" >> /tmp/build_output.log
# (상태 업데이트를 위한 의사코드)
# jq '.steps_completed += 1 | .last_error = null' /tmp/build_state.json > /tmp/tmp.json && mv /tmp/tmp.json /tmp/build_state.json
# JSON 상태 반환
echo '{"status":"ok"}'
오류 처리
- 실패 시 정확한 오류 메시지를 웹에서 검색합니다.
- 해결책을 적용하고 재시도합니다.
- 두 번 실패하면 중단하고 보고합니다.
일반 가이드라인
- 소스 가져오기는
git을 우선 사용합니다. - 의존성은 기본 패키지 관리자를 통해 설치합니다.
- 누락된 패키지는 소스에서 직접 빌드합니다.
- 불필요한 단계는 피합니다.
The Hard Truth
프롬프트에 “최신 태그를 확인하라”, “설치된 버전과 비교하라”, 혹은 “어떤 버전을 빌드하고 있는지 파악하라”와 같은 내용이 없었습니다. 모델은 제가 요청한 대로 정확히 수행했으며, 실패는 요청 자체에 있었습니다.
First attempt (Alpine)
- 모델이
git,gcc,rustup을 설치했습니다. - Jan.ai 레포를 클론하고 웹 프론트엔드를 빌드한 뒤 Rust 백엔드 컴파일을 시도했습니다.
- 링크 단계에서 계속 실패했습니다 (musl vs. glibc 문제).
- 모델은
gcompat을 설치하고,pkg-config를 패치하고, 교차 컴파일 트릭을 시도했지만 전혀 동작하지 않았습니다. - 몇 시간 후 컨테이너를 완전히 삭제하고 다시 시작했습니다.
Second attempt (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을 업데이트했습니다.
Build steps
yarn install # succeeded
yarn build:web # succeeded
cargo build --release # succeeded
jan 바이너리가 생성되었습니다.
Packaging attempt
yarn tauri build
다음과 같은 오류가 발생했습니다:
Failed to copy binary from "/opt/jan-build/src-tauri/target/release/jan-cli": No such file or directory.
번들러는 src-tauri/Cargo.toml에 [[bin]] 항목으로 jan-cli를 기대했지만, 해당 소스 파일이 없었습니다.
- 모델이 심볼릭 링크를 시도했지만 무시되었습니다.
jan을jan-cli로 복사했지만 번들러는cli기능이 누락됐다고 불평했습니다.- 더미
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(몇 달 전)에서 클론한 것을 알게 되었습니다. 현재 안정 버전보다 훨씬 오래된 커밋이었습니다. 프롬프트에 버전에 대한 언급이 없었기 때문에 모델은 버전을 신경 쓰지 않았습니다.
Outcome
- 앱은 실행되고, 모델을 로드하며, 프롬프트에 응답했고 정상적으로 동작했습니다—다만 오래된 버전이었습니다.
- 누락된 바이너리마다 시행착오가 반복되었고, 로그 파일은 커졌으며, 상태 파일에는 수십 개의 단계가 기록되었습니다.
- 2시간 동안 컴파일했지만 결국 다운그레이드된 버전이 나왔습니다.
.deb파일은 다운로드 폴더에 남아 있으며, 저는 이를 설치·제거·재설치했지만 여전히 정상 동작하고, 뭔가 잘못됐다는 사실을 인식하지 못하고 있습니다.
큰 교훈을 얻은 것은 아니었습니다—그저 기계가 열심히 일을 하는 모습을 지켜봤을 뿐입니다.