docs: expand libtinfo troubleshooting; add scripts/env-no-ld.sh

- README: deactivate may not clear LD_LIBRARY_PATH; unset, /usr/bin/vi, diagnostics
- scripts/env-no-ld.sh: run commands without LD_LIBRARY_PATH for vi/bash
- run.sh: include in commit if changed (verify diff)

Made-with: Cursor
This commit is contained in:
dosangyoon
2026-03-23 13:46:41 +09:00
parent a984b86766
commit 2caa74ac05
3 changed files with 82 additions and 13 deletions

View File

@@ -165,6 +165,54 @@ uvicorn app.main:app --reload --host 127.0.0.1 --port 8025
---
## Linux + Conda: `libtinfo.so.6` / `vi`·`bash` 경고
`(ncue)` 등 conda 환경을 켠 뒤 **`LD_LIBRARY_PATH``${CONDA_PREFIX}/lib`가 들어가면**, 터미널에서 돌아가는 **시스템 프로그램(`vi`, `bash`, `less` 등)** 이 conda에 들어 있는 `libtinfo.so.6`을 먼저 물 수 있습니다. 그 라이브러리에 ELF 버전 태그가 맞지 않을 때 **«no version information available»** 가 납니다. (`run.sh`는 스크립트 안에서 이를 피하도록 처리해 두었습니다.)
**`conda deactivate` 해도 경고가 남는 경우**
- `deactivate`만으로 **`LD_LIBRARY_PATH`가 비워지지 않을 수 있습니다** (이전 셸 값 복원 실패, `.bashrc`에서 직접 export, 다른 툴이 덧붙임).
- **`vi`가 conda·vim 빌드**일 수 있습니다. `type -a vi`, `which -a vi` 로 확인하고, 가능하면 **`/usr/bin/vi`** 또는 **`/usr/bin/vim`** 을 쓰세요.
**당장 편집·실행**
```bash
unset LD_LIBRARY_PATH
vi run.sh
```
또는 한 줄로:
```bash
env -u LD_LIBRARY_PATH /usr/bin/vi run.sh
LD_LIBRARY_PATH= /usr/bin/vi run.sh
```
저장소 헬퍼 (`chmod +x scripts/env-no-ld.sh` 후):
```bash
./scripts/env-no-ld.sh vi run.sh
./scripts/env-no-ld.sh /usr/bin/vi run.sh
```
**원인 확인**
```bash
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH-<비어 있음>}"
type -a vi
conda deactivate
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH-<비어 있음>}" # 여전히 miniconda 경로면 .bashrc 등 확인
grep -n LD_LIBRARY_PATH ~/.bashrc ~/.profile ~/.bash_profile 2>/dev/null
```
**장기적으로**
1. `grep -r LD_LIBRARY_PATH "$HOME/workspace/miniconda3/envs/ncue/etc/conda/activate.d/"` 등으로 어떤 패키지가 넣는지 확인합니다.
2. GPU/torch가 꼭 필요한 터미널과 **편집·git용 터미널**을 나누거나, 편집 전에 `unset LD_LIBRARY_PATH` 를 습관화합니다.
3. `conda install -c conda-forge ncurses` 로 env 안 ncurses를 맞추면 완화되는 경우가 있습니다(환경마다 다름).
---
## 플랫폼 요약
| 항목 | Ubuntu | macOS |

42
run.sh
View File

@@ -1,22 +1,38 @@
#!/usr/bin/env bash
# libtinfo 경고: 터미널에 이미 conda가 켜져 LD_LIBRARY_PATH가 잡혀 있으면
# env -u LD_LIBRARY_PATH ./run.sh
# 로 실행해 보세요.
#!/bin/sh
# conda가 LD_LIBRARY_PATH에 lib를 넣은 상태에서 bash가 스크립트를 읽으면
# 시스템 bash가 conda의 libtinfo를 물어 경고가 난다. /bin/sh로 한 번 감싼 뒤
# LD_LIBRARY_PATH 없이 bash를 다시 실행한다.
if [ -z "${STT_RUN_WITH_CLEAN_LDLIB:-}" ]; then
export STT_RUN_WITH_CLEAN_LDLIB=1
exec env -u LD_LIBRARY_PATH /bin/bash "$0" "$@"
fi
set -euo pipefail
if [[ -z "${BASH_VERSION:-}" ]]; then
echo "ERROR: bash로 실행하세요. 예) ./run.sh 또는 bash run.sh" >&2
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
if [[ -z "${CONDA_BASE:-}" || ! -f "${CONDA_BASE}/bin/activate" ]]; then
CONDA_BASE=""
for cand in "${HOME}/workspace/miniconda3" "${HOME}/miniconda3" "${HOME}/anaconda3" "/opt/anaconda3"; do
if [[ -n "$cand" && -f "$cand/bin/activate" ]]; then
CONDA_BASE="$cand"
break
fi
done
fi
if [[ -z "${CONDA_BASE:-}" || ! -f "${CONDA_BASE}/bin/activate" ]]; then
echo "ERROR: conda를 찾을 수 없습니다. 예: export CONDA_BASE=/path/to/miniconda3" >&2
exit 1
fi
cd /home/dsyoon/workspace/stt
# 기본은 ncue (기존 동작). 다른 환경은 CONDA_ENV=stt 등으로 지정.
CONDA_ENV="${CONDA_ENV:-ncue}"
# shellcheck source=/dev/null
source "${CONDA_BASE}/bin/activate" "${CONDA_ENV}"
CONDA_BASE="/home/dsyoon/workspace/miniconda3"
source "${CONDA_BASE}/bin/activate" ncue
# 전역 LD_LIBRARY_PATH에 conda lib를 넣으면, 같은 터미널의 bash가 conda의
# libtinfo.so 를 물며 «no version information available» 경고가 날 수 있음.
# torch/ctranslate2 등은 uvicorn 자식 프로세스에만 경로를 넘긴다.
# 전역 LD_LIBRARY_PATH에 conda lib를 넣지 않음 (bash/libtinfo 경고 방지).
# torch/ctranslate2 등은 uvicorn 자식에만 경로 전달.
PORT="${PORT:-8025}"
RELOAD="${RELOAD:-0}"

5
scripts/env-no-ld.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/sh
# LD_LIBRARY_PATH 없이 명령 실행 (conda libtinfo 때문에 vi/bash 등이 경고 낼 때)
# 사용: ./scripts/env-no-ld.sh vi run.sh
# ./scripts/env-no-ld.sh bash -c 'echo ok'
exec env -u LD_LIBRARY_PATH "$@"