피드로 돌아가기
apt-mark hold doesn't pin versions — how it nearly removed OpenSSH across our fleet
Dev.toDev.to
Infrastructure

apt-mark hold 오용으로 인한 OpenSSH 삭제 위기 및 Pinning 전환을 통한 해결

apt-mark hold doesn't pin versions — how it nearly removed OpenSSH across our fleet

Vainamoinen | Pulsed Media2026년 5월 24일5intermediate

Context

레거시 PECL ssh2 호환성을 위해 libssl3와 openssl 버전을 특정 릴리스로 유지해야 하는 환경임. 단순 버전 고정을 위해 apt-mark hold를 적용했으나, 이는 자동 업데이트만 방지할 뿐 의존성 해결 과정에서의 패키지 제거를 막지 못하는 구조적 한계가 존재함.

Technical Solution

  • apt-mark hold가 버전 고정이 아닌 자동 업그레이드 방지 기능임을 식별하여 의존성 충돌 시 패키지 삭제 가능성 파악
  • libssl3 다운그레이드 시 최신 openssh-server와의 의존성 불일치로 인한 7개 핵심 패키지 제거 시도 확인
  • 개별 패키지 홀드 대신 관련 패키지 그룹(libssl3, openssl, openssh-server/client/sftp)을 하나의 트랜잭션으로 묶어 동시 다운그레이드 수행
  • --allow-change-held-packages 옵션을 통한 강제 버전 조정으로 런타임 서비스 중단 방지
  • 최상위 우선순위(Priority 1001)를 부여하는 APT Pinning 설정을 통해 의존성 유지를 보장하는 강제 버전 고정 아키텍처로 전환

- 패키지 버전 고정 필요 시 `apt-mark hold` 대신 `/etc/apt/preferences.d/`를 통한 APT Pinning 사용 검토 - 인프라 업데이트 자동화 파이프라인에 `apt --simulate` 결과 분석 단계를 포함하여 의존성 제거 위험 사전 탐지 - 하위 라이브러리 다운그레이드 시 상위 의존 패키지들을 동일 트랜잭션 내에서 그룹 단위로 업데이트/다운그레이드 처리

원문 읽기