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:
48
README.md
48
README.md
@@ -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
42
run.sh
@@ -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
5
scripts/env-no-ld.sh
Executable 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 "$@"
|
||||
Reference in New Issue
Block a user