증상
Remote SSH로 Ubuntu 22.04 LTS 서버에 붙어 Cursor 3.13.10을 쓰면 코드 인덱싱/검색이 통째로 먹통이 됩니다.
- 화면 우측 하단 토스트:
index build failed: miniserde error - 출력(Output) 패널 로그:
crepectl: /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.39' not found - 함께 뜨는 메시지:
cannot index repository without Git,Not creating an indexing watcher: no queryable index to build - Codebase 검색·
@codebase가 빈 결과이거나 아예 동작 안 함
원인
crepectl은 Cursor의 Instant Grep 인덱서(코드 검색용 인덱스를 만드는 바이너리)입니다. Cursor 3.13.10부터 이 바이너리가 GLIBC 2.39로 컴파일돼 배포됐어요. 그런데 Ubuntu 22.04 LTS는 GLIBC 2.35를 씁니다. 시스템 glibc가 2.39보다 낮으니 바이너리가 아예 로드되지 못하고, 인덱싱 전체가 실패합니다.
3.13.10에서 새로 생긴 회귀(regression)이며, 원 포럼 스레드 기준 Cursor의 공식 수정본이나 스태프 답변은 아직 없습니다. OS를 24.04로 올리면 시스템 glibc가 2.39가 되어 근본 해결이 되지만, 운영 서버엔 부담이 커 보고자도 이 방법을 거부했습니다. 아래는 지금 당장 쓸 수 있는 우회책 두 가지입니다.
방법 1 — 3.13.10 이전 Cursor로 되돌리기 (가장 안전, 추천)
이 문제는 3.13.10에서 처음 생겼으니, 그 이전 버전으로 내리면 GLIBC 2.39를 요구하는 crepectl 자체가 설치되지 않습니다. Cursor 원격은 로컬 클라이언트 버전에 맞는 서버 바이너리를 원격에 밀어넣는 구조라, 로컬을 내리고 원격 서버 캐시를 지우는 것이 핵심입니다.
- Cursor 다운로드 페이지/체인지로그에서 3.13.10 직전 빌드(예: 3.13.9 또는 3.12.x)를 받아 로컬 Cursor를 교체 설치합니다.
- 자동 업데이트를 끕니다 (다시 3.13.10으로 튀는 것 방지): Settings → Application → Update 에서 auto update 비활성화.
- 원격 서버 터미널에서 캐시된 서버 바이너리를 지웁니다:
rm -rf ~/.cursor-server
- Cursor에서 원격에 다시 접속하면, 옛 버전 crepectl(시스템 glibc 2.35와 호환)이 재설치됩니다.
비개발자라면 이 방법이 제일 안전합니다. 패치된 새 버전이 나오면 그때 다시 최신으로 올리세요.
방법 2 — GLIBC 2.39 사이드로드 래퍼 (고급, 커뮤니티 확인, 취약)
원 스레드에서 Instant Grep 한정으로 동작이 확인된 우회책입니다. OS는 안 건드리고, Ubuntu 24.04의 libc6 2.39만 홈 디렉터리에 풀어서 crepectl이 그것을 쓰게 만듭니다. 아래 스크립트는 스레드에 서술된 동작(24.04 libc6 2.39를 ~/.local/share/cursor-glibc239에 내려받고, crepectl을 백업 후 래퍼로 교체)을 표준 방식(새 ld-linux 로더로 원본을 실행)으로 재구성한 것입니다 — 원문 스크립트 자체는 스레드에 공개돼 있지 않습니다.
주의: glibc를 섞어 쓰는 방식이라 취약하고, Cursor 서버가 업데이트될 때마다 래퍼가 덮어써져 다시 실행해야 합니다. 시스템 glibc는 건드리지 않으므로 서버 전체가 망가질 위험은 낮지만, 반드시 crepectl만 대상으로 하세요.
원격 서버 터미널에서:
#!/usr/bin/env bash
set -euo pipefail
# 1) Ubuntu 24.04 libc6(=GLIBC 2.39)만 홈에 풀기 (OS는 안 건드림)
GLIBC_DIR="$HOME/.local/share/cursor-glibc239"
mkdir -p "$GLIBC_DIR"; cd "$GLIBC_DIR"
# 버전 문자열(2.39-0ubuntuX.Y)은 보안 업데이트로 바뀝니다. 404가 나면
# http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/ 에서 최신 libc6_2.39-*_amd64.deb 파일명으로 교체하세요.
wget -N http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/libc6_2.39-0ubuntu8.4_amd64.deb
dpkg -x libc6_2.39-*_amd64.deb .
# 2) crepectl 실제 경로 찾기
CREPECTL="$(find "$HOME/.cursor-server" -type f -name crepectl -path '*helpers*' | head -n1)"
[ -n "$CREPECTL" ] || { echo "crepectl 없음 — Cursor로 원격에 한 번 접속해 서버 설치 후 다시 실행"; exit 1; }
# 3) 원본 백업 (최초 1회만)
[ -f "$CREPECTL.orig" ] || cp "$CREPECTL" "$CREPECTL.orig"
# 4) crepectl을 래퍼로 교체: 새 로더 + 새 libc로 원본 실행
cat > "$CREPECTL" <<EOF
#!/usr/bin/env bash
G="$GLIBC_DIR/lib/x86_64-linux-gnu"
exec "\$G/ld-linux-x86-64.so.2" --library-path "\$G:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu" "$CREPECTL.orig" "\$@"
EOF
chmod +x "$CREPECTL"
echo "완료 — Cursor에서 Cmd/Ctrl+Shift+P → 'Developer: Reload Window' 실행"
실행 뒤 Cursor에서 Developer: Reload Window를 하면 인덱싱이 돌아옵니다. 서버 업데이트로 다시 깨지면 이 스크립트를 한 번 더 돌리세요.
근본 해결 & 추적
- 근본 해결은 (a) 서버를 Ubuntu 24.04로 올려 시스템 glibc를 2.39로 맞추거나, (b) Cursor가 crepectl을 glibc 2.35 호환으로 재빌드하거나 정적 링크로 배포하는 것입니다. (b)는 Cursor 몫이므로, 패치 버전이 나오면 최신으로 업데이트하세요.
- 원 포럼 스레드를 구독해두고, Cursor 새 버전 체인지로그에 crepectl/GLIBC 관련 수정이 들어왔는지 확인하는 걸 권합니다.
