From 6dd91c3620481406eb322e14df0d0a843c736c01 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 9 Mar 2026 17:54:30 +0900 Subject: [PATCH] docs: record 24 server codex runtime fix --- ...€νŠΈμ›Œν¬λŒ€μ—­μ˜€λ₯˜_python3apt볡ꡬ.md | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/journey/troubleshooting/260309_24μ„œλ²„_μš°λΆ„νˆ¬ν„°λ―Έλ„λΆˆκ°€_λ„€νŠΈμ›Œν¬λŒ€μ—­μ˜€λ₯˜_python3apt볡ꡬ.md b/journey/troubleshooting/260309_24μ„œλ²„_μš°λΆ„νˆ¬ν„°λ―Έλ„λΆˆκ°€_λ„€νŠΈμ›Œν¬λŒ€μ—­μ˜€λ₯˜_python3apt볡ꡬ.md index 3235a62..acd5d8c 100644 --- a/journey/troubleshooting/260309_24μ„œλ²„_μš°λΆ„νˆ¬ν„°λ―Έλ„λΆˆκ°€_λ„€νŠΈμ›Œν¬λŒ€μ—­μ˜€λ₯˜_python3apt볡ꡬ.md +++ b/journey/troubleshooting/260309_24μ„œλ²„_μš°λΆ„νˆ¬ν„°λ―Έλ„λΆˆκ°€_λ„€νŠΈμ›Œν¬λŒ€μ—­μ˜€λ₯˜_python3apt볡ꡬ.md @@ -44,6 +44,7 @@ tags: [infra, 24-server, ubuntu, gnome-terminal, network, python, apt, troublesh - μ‹œμŠ€ν…œ Python 기쀀을 `3.10`으둜 되돌리고, - `python3-apt`λ₯Ό λ‹€μ‹œ μ„€μΉ˜ν•œ λ’€, - `apt update`κ°€ 정상 μ™„λ£Œλ˜λŠ” 것을 ν™•μΈν•˜λŠ” μˆœμ„œκ°€ λ§žμ•˜λ‹€. +- λ³„λ„λ‘œ Codex CLIλŠ” μ „μ—­ μ§„μž…μ κ³Ό μ‹€μ œ Node λŸ°νƒ€μž„ 버전이 μ–΄κΈ‹λ‚˜μ§€ μ•Šλ„λ‘ 보정해야 ν–ˆλ‹€. ## 원인 정리 ### 직접 원인 @@ -79,6 +80,51 @@ sudo apt update sudo apt upgrade -y ``` +### 4. Codex CLI λŸ°νƒ€μž„ 볡ꡬ +문제 μž¬ν˜„: + +```bash +sudo -u happybell80 bash -lc 'which node; node -v; which codex; codex login status' +``` + +μž¬ν˜„ μ‹œμ  확인값: +- `which node` -> `/usr/bin/node` +- `node -v` -> `v12.22.9` +- `which codex` -> `/usr/local/bin/codex` +- κ²°κ³Ό: `SyntaxError: Unexpected reserved word` + +원인: +- `/usr/local/bin/codex`λŠ” `#!/usr/bin/env node` shebang을 μ‚¬μš©ν•œλ‹€. +- ν•˜μ§€λ§Œ `happybell80`의 둜그인 μ…Έ κΈ°λ³Έ PATHμ—μ„œλŠ” μ‹œμŠ€ν…œ `node v12.22.9`κ°€ λ¨Όμ € μž‘ν˜”λ‹€. +- 반면 μ‹€μ œ Codex CLI νŒ¨ν‚€μ§€λŠ” `/home/happybell80/.nvm/versions/node/v24.4.0/...` μ•„λž˜μ— μ„€μΉ˜λΌ μžˆμ—ˆκ³ , `engines.node >= 16` μš”κ΅¬μ™€ μΆ©λŒν–ˆλ‹€. + +적용 쑰치: + +```bash +sudo cp -a /usr/local/bin/codex /usr/local/bin/codex.pre_node24_fix +sudo install -m 0755 /home/admin/.tmp_codex_wrapper.sh /usr/local/bin/codex +sudo install -o happybell80 -g xusers -m 0644 /home/admin/happybell80.profile.fixed /home/happybell80/.profile +``` + +적용 λ‚΄μš©: +- `/usr/local/bin/codex`λ₯Ό `/home/happybell80/.nvm/versions/node/v24.4.0/bin/node`와 Codex JS μ—”νŠΈλ¦¬ν¬μΈνŠΈλ₯Ό 직접 ν˜ΈμΆœν•˜λŠ” 래퍼둜 κ΅μ²΄ν–ˆλ‹€. +- κΈ°μ‘΄ μ „μ—­ μ§„μž…μ μ€ `/usr/local/bin/codex.pre_node24_fix`둜 λ°±μ—…ν–ˆλ‹€. +- `happybell80`의 `~/.profile`에 Node `v24.4.0` 경둜λ₯Ό PATH μ•žλ‹¨μ— λ‘λŠ” 섀정을 μΆ”κ°€ν•΄ 둜그인 μ…Έμ—μ„œλ„ λ™μΌν•œ λŸ°νƒ€μž„μ„ μ‚¬μš©ν•˜λ„λ‘ λ§žμ·„λ‹€. + +검증: + +```bash +sudo -u happybell80 bash -lc 'which node; node -v; codex --help | sed -n "1,4p"; codex login status' +env -i PATH=/usr/local/bin:/usr/bin:/bin HOME=/home/happybell80 USER=happybell80 /usr/local/bin/codex --help +``` + +검증 κ²°κ³Ό: +- `which node` -> `/home/happybell80/.nvm/versions/node/v24.4.0/bin/node` +- `node -v` -> `v24.4.0` +- `codex --help` 정상 좜λ ₯ +- `codex login status` -> `Logged in using ChatGPT` +- μ΅œμ†Œ PATH ν™˜κ²½μ—μ„œλ„ `/usr/local/bin/codex --help` 정상 좜λ ₯ + ## Python κ΄€λ ¨ 핡심 ν•΄μ„€ - Ubuntu 22.04λŠ” μ‹œμŠ€ν…œ 도ꡬ λ‹€μˆ˜κ°€ `python3.10` κΈ°μ€€μœΌλ‘œ νŒ¨ν‚€μ§•λΌ μžˆλ‹€. - μ—¬κΈ°μ—λŠ” `apt`, `software-properties`, 일뢀 배포 관리 μœ ν‹Έλ¦¬ν‹°κ°€ ν¬ν•¨λœλ‹€. @@ -100,6 +146,8 @@ python3.13 -m venv .venv - `apt update`κ°€ μ΅œμ’…μ μœΌλ‘œ 정상 λ™μž‘ν•˜λŠ” μƒνƒœκΉŒμ§€ 볡ꡬ됐닀. - 볡ꡬ μ™„λ£Œ μ‹œμ μ— `233 packages can be upgraded` λ©”μ‹œμ§€κ°€ 관츑돼 νŒ¨ν‚€μ§€ λͺ©λ‘ λ‘œλ“œκ°€ μ •μƒν™”λœ κ²ƒμœΌλ‘œ νŒλ‹¨ν–ˆλ‹€. - 23 μ„œλ²„μ—μ„œ μœ„ SSH λͺ…λ ΉμœΌλ‘œ μ‹€μ œ 접속 검증 μ‹œ `hostname=robeing-i9`, `user=admin` 응닡을 ν™•μΈν–ˆλ‹€. +- μΆ”κ°€ 확인 κ²°κ³Ό Codex CLI 직접 μž₯μ•  원인은 λ„€νŠΈμ›Œν¬ μ „λ©΄ 차단이 μ•„λ‹ˆλΌ `node v12.22.9`와 `@openai/codex 0.53.0` μ‘°ν•©μ˜ λŸ°νƒ€μž„ μΆ©λŒμ΄μ—ˆλ‹€. +- 2026-03-09 μˆ˜μ • ν›„ `happybell80` 둜그인 μ…Έκ³Ό `/usr/local/bin/codex` 직접 호좜 λͺ¨λ‘ `node v24.4.0` κΈ°μ€€μœΌλ‘œ 정상 λ™μž‘ν•œλ‹€. ### 23 μ„œλ²„ ν˜„μž¬ 점검 λ²”μœ„ - λ³Έ λ¬Έμ„œλŠ” 2026-03-09 ν˜„μž¬ μž‘μ—… ν™˜κ²½μ—μ„œ 23 μ„œλ²„λ‘œ μ‚¬μš© 쀑인 호슀트λ₯Ό κΈ°μ€€μœΌλ‘œ ν™•μΈν–ˆλ‹€. @@ -137,16 +185,33 @@ sudo systemctl reset-failed - 이후 `sudo logrotate -d /etc/logrotate.conf`μ—μ„œ `Ignoring nginx.backup.20251021.bak, because of *.bak pattern match`λ₯Ό ν™•μΈν–ˆλ‹€. - `sudo systemctl status logrotate.service`λŠ” `status=0/SUCCESS`둜 μ’…λ£Œλκ³ , `systemctl --failed`λŠ” `0 loaded units listed.`, `sudo systemctl is-system-running`은 `running`으둜 λ³΅κ·€ν–ˆλ‹€. +## 2026-03-09 μΆ”κ°€ 확인: μž”μ‘΄ 사섀 IP μ„€μ • +- ν™œμ„± μΈν„°νŽ˜μ΄μŠ€ `eno1`μ—λŠ” ν˜„μž¬λ„ `192.168.219.52/24`와 `192.168.0.106/24`κ°€ λ™μ‹œμ— λΆ™μ–΄ μžˆλ‹€. +- `ip route` κΈ°μ€€ κΈ°λ³Έ κ²½λ‘œλ„ `192.168.0.1` 외에 `192.168.219.1 metric 100`이 ν•¨κ»˜ 남아 μžˆλ‹€. +- NetworkManager ν”„λ‘œν•„ `/etc/NetworkManager/system-connections/Wired connection 1.nmconnection`μ—λŠ” μ—¬μ „νžˆ μ•„λž˜ 고정값이 μ €μž₯돼 μžˆλ‹€. + +```ini +[ipv4] +address1=192.168.219.52/24,192.168.219.1 +method=manual +``` + +- 즉 κ³Όκ±° 사섀 IP `192.168.219.52/24`λŠ” λ¬Έμ„œ 기둝만이 μ•„λ‹ˆλΌ ν˜„μž¬ 영ꡬ 섀정에도 남아 μžˆλŠ” μƒνƒœλ‹€. +- 이번 μž‘μ—…μ—μ„œλŠ” SSH μ„Έμ…˜ 리슀크 λ•Œλ¬Έμ— NetworkManager ν”„λ‘œν•„ μžμ²΄λŠ” λ³€κ²½ν•˜μ§€ μ•Šμ•˜κ³ , Codex λŸ°νƒ€μž„ 볡ꡬ와 사싀 ν™•μΈκΉŒμ§€λ§Œ μˆ˜ν–‰ν–ˆλ‹€. + ## 재발 λ°©μ§€ - 24 μ„œλ²„μ—μ„œ μ‹œμŠ€ν…œ `python3` 링크λ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠλŠ”λ‹€. - 개발용 Python 3.13은 `venv` λ˜λŠ” λͺ…μ‹œμ  λ°”μ΄λ„ˆλ¦¬ 경둜둜만 μ‚¬μš©ν•œλ‹€. - κ³ μ • IPλ₯Ό μš΄μš©ν•  λ•ŒλŠ” ν˜„μž¬ LAN λŒ€μ—­κ³Ό SSOTλ₯Ό λ¨Όμ € λŒ€μ‘°ν•˜κ³ , κ³Όκ±° λŒ€μ—­μ˜ μž”μ‘΄ μ£Όμ†Œλ₯Ό μ œκ±°ν•œλ‹€. +- Node 기반 μ „μ—­ CLIλŠ” `#!/usr/bin/env node` shebang에 μ˜μ‘΄ν•  λ•Œ μ‚¬μš©μžλ³„ PATH 차이둜 λŸ°νƒ€μž„ 좩돌이 λ‚  수 μžˆμœΌλ―€λ‘œ, 운영 λͺ…령은 μš”κ΅¬ 버전을 λ§Œμ‘±ν•˜λŠ” Node 경둜λ₯Ό λͺ…μ‹œμ μœΌλ‘œ κ³ μ •ν•œλ‹€. - GUI 터미널 λΆˆκ°€ μ‹œμ—λŠ” λ°”λ‘œ μž¬μ„€μΉ˜λΆ€ν„° ν•˜μ§€ 말고 `TTY μ§„μž… -> λ„€νŠΈμ›Œν¬ 확인 -> μ‹œμŠ€ν…œ Python 확인 -> apt 볡ꡬ` μˆœμ„œλ‘œ λ³Έλ‹€. - 23 μ„œλ²„μ—μ„œλŠ” `/etc/logrotate.d/` μ•„λž˜μ— 운영 쀑인 μ„€μ •μ˜ λ°±μ—… νŒŒμΌμ„ 같은 ν™•μž₯자 없이 남기지 μ•ŠλŠ”λ‹€. ## 후속 ꢌμž₯ μž‘μ—… - 24 μ„œλ²„μ˜ λ„€νŠΈμ›Œν¬ μ„€μ • νŒŒμΌμ—μ„œ `192.168.219.52/24`κ°€ λ‹€μ‹œ λΆ™μ§€ μ•Šλ„λ‘ 영ꡬ μ„€μ • μœ„μΉ˜λ₯Ό ν™•μΈν•œλ‹€. +- 24 μ„œλ²„μ˜ NetworkManager ν”„λ‘œν•„ `Wired connection 1`을 ν˜„μž¬ 운영 LAN κΈ°μ€€(`192.168.0.106/24`, κ²Œμ΄νŠΈμ›¨μ΄ `192.168.0.1`)으둜 μ •λ¦¬ν•˜κ³ , SSH μœ μ§€ μ‹œκ°„λŒ€μ— μž¬μ μš©ν•œλ‹€. - 24 μ„œλ²„μ—μ„œ Python 3.13이 ν•„μš”ν•œ ν”„λ‘œμ νŠΈκ°€ 있으면 μ‹œμŠ€ν…œ 링크 λ³€κ²½ 없이 κ°€μƒν™˜κ²½μœΌλ‘œ λΆ„λ¦¬ν•œλ‹€. +- 24 μ„œλ²„μ—μ„œ Codex/Nodeλ₯Ό μ—…λ°μ΄νŠΈν•  λ•ŒλŠ” `/usr/local/bin/codex` 래퍼의 κ³ μ • κ²½λ‘œλ„ ν•¨κ»˜ μ κ²€ν•œλ‹€. - 23/24 곡톡 운영 κΈ°μ€€ λ¬Έμ„œμ— "Ubuntu 22.04 μ‹œμŠ€ν…œ Python λ³€κ²½ κΈˆμ§€"λ₯Ό 반볡 κ·œμΉ™μœΌλ‘œ μŠΉκ²©ν• μ§€ κ²€ν† ν•œλ‹€. - 23 μ„œλ²„μ˜ 남은 νŒ¨ν‚€μ§€ μ—…λ°μ΄νŠΈ `2건`(`network-manager-openvpn`, `network-manager-openvpn-gnome`)은 영ν–₯ μ‹œκ°„λŒ€ 확인 ν›„ 반영 μ—¬λΆ€λ₯Ό κ²°μ •ν•œλ‹€.