Files
kefu/deploy/knowledge-20260916-100045/02-backup-build.sh
T
2026-09-21 10:34:06 +08:00

43 lines
2.1 KiB
Bash

set -euo pipefail
release=/home/ps/knowledge-20260916-100045
cd "$release"
mkdir -m 700 payload
tar -xzf payload.tar.gz -C payload
python3 - <<'PY'
from pathlib import Path
import json,hashlib
root=Path('/home/ps/knowledge-20260916-100045')
manifest=json.loads((root/'manifest.json').read_text(encoding='utf-8-sig'))
for row in manifest:
data=(root/'payload'/row['path'].replace('\\','/')).read_bytes()
assert len(data)==row['bytes'],row['path']
assert hashlib.sha256(data).hexdigest().lower()==row['sha256'].lower(),row['path']
print('Verified',len(manifest),'release files',flush=True)
PY
docker exec -i im-admin-api-1 python -u - <<'PY' | tee "$release/backup-verification.json"
from pathlib import Path
import sqlite3,json,shutil,os,time
folder=Path('/data/backups/knowledge-20260916-100045')
folder.mkdir(mode=0o700)
started=time.monotonic()
source=sqlite3.connect('/data/backend.db',timeout=30)
backup=sqlite3.connect(str(folder/'backend.db'))
source.backup(backup,pages=4096,sleep=0.05)
source.close()
check=backup.execute('PRAGMA quick_check').fetchone()[0]
assert check=='ok',check
tables=['archive_message','archive_conversation','archive_person','archive_source_account','desktop_accounts','model_providers','users']
counts={t:backup.execute('SELECT COUNT(*) FROM '+t).fetchone()[0] for t in tables}
backup.close()
os.chmod(folder/'backend.db',0o600)
keys=[]
for key in Path('/data').glob('*.key'):
shutil.copy2(key,folder/key.name)
os.chmod(folder/key.name,0o600)
keys.append(key.name)
assert keys,'No database encryption key was backed up'
print(json.dumps({'backup':str(folder),'bytes':(folder/'backend.db').stat().st_size,'quick_check':check,'key_files':keys,'counts':counts,'seconds':round(time.monotonic()-started,1)}),flush=True)
PY
docker build --network=none --build-arg BASE_IMAGE=zyt/wecom-admin:before-knowledge-20260916-100045 -f Dockerfile.overlay -t zyt/wecom-admin:knowledge-20260916-100045 . 2>&1 | tee build.log
docker run --rm --network=none --read-only --tmpfs /tmp:size=256m,mode=1777 zyt/wecom-admin:knowledge-20260916-100045 python -X utf8 -m unittest test_knowledge test_model_gateway -q 2>&1 | tee candidate-tests.log