루팅과 Termux 환경까지 다 갖춰놓고도, 정작 카카오톡 봇의 핵심인 IRIS 서버 APK 하나가 설치되지 않아 발목을 잡힌 적이 있다. 원인과 해결법, 그리고 이후 장애 복구 때마다 참고하는 수동 기동 절차를 정리해둔다.
Termux 사이드로딩부터 막혔다
Termux 자체를 F-Droid나 GitHub에서 받은 arm64-v8a apk로 설치하려는 시도부터 전부 “패키지를 파싱하는 중 문제가 발생했습니다"로 실패했다. adb install로 우회해봐도 이번엔 INSTALL_FAILED_VERIFICATION_FAILURE로 막혔다.
원인은 Play Protect였다. 설정 → Play 스토어 → Play Protect → “기기에서 앱 검사” 토글이 켜져 있으면, Play 스토어 밖에서 받은 apk의 설치 자체를 사전 검증 단계에서 막아버린다. 이 폰은 개인용이 아니라 전용 서버로만 쓸 것이므로 이 토글을 영구적으로 꺼두기로 했다. 이후 Termux(v0.118.3, GitHub release)는 문제없이 설치됐다.
IRIS.apk는 또 다른 벽 — 서명 자체가 없다
Termux가 설치된 뒤 진짜 목표인 IRIS 서버 apk를 설치하려니 이번엔 다른 에러가 떴다.
NO_CERTIFICATES
확인해보니 이 apk 자체가 서명이 안 된 상태로 배포되고 있었다. 안드로이드는 서명되지 않은 apk의 설치를 원천적으로 거부하므로, Play Protect 토글과는 별개로 해결해야 하는 문제였다.
해결책은 apk를 직접 재서명하는 것이었다.
- JDK(Temurin 17 이상) 설치
- uber-apk-signer로 재서명
java -jar uber-apk-signer.jar --apk IRIS.apk
재서명이 끝나면 Iris-aligned-debugSigned.apk라는 파일이 새로 생기는데, 이 파일을 설치하니 NO_CERTIFICATES 에러 없이 정상적으로 올라갔다.
수동 기동 매뉴얼 (장애 복구용)
자동시작 스크립트가 있어도, 어딘가 꼬여서 수동으로 다시 띄워야 하는 상황은 계속 생긴다. 그때마다 기억에 의존하지 않도록 정리해둔 절차다.
tmux ls → tmux attach -t iris (세션이 있을 때)
# 세션이 없으면:
cd ~ && tmux new -s iris
./iris_control_termux start -v
# 새 tmux 창 열기: Ctrl+B, C
cd ~ && python3 irispy.py 127.0.0.1:3000
# detach: Ctrl+B, D
# 정상 기동 확인: 카카오톡 아무 대화방에 "!hi" 전송 → "Hello, {name}!" 응답 확인
주요 파일 위치(Termux 홈 ~): iris_control_termux, irispy.py, iris.log, .env. IRIS 서버 바이너리는 /data/local/tmp/Iris.apk, 설정 파일은 /data/local/tmp/config.json(포트 3000)에 있다.
왜 이 폰이 더 자주 죽나
같은 방식으로 운영 중인 갤럭시 퀀텀2보다 이 S9이 눈에 띄게 자주 죽는다. RAM이 4GB뿐인데 IRIS + irispy + Claude Code 원격 세션 + proot-Ubuntu가 동시에 물려 있는 게 가장 큰 원인으로 보이고, dm-verity 우회의 부작용이나 wake-lock 미적용도 의심 지점으로 남아있다. 재부팅 후 자동 기동이 실패했을 때를 대비해 위 수동 매뉴얼을 계속 최신 상태로 유지해두는 이유이기도 하다.


💬 댓글