Installed: (none)을 보고하는 VPN 패키지는 없는 것이 아니라 단지 설치되지 않은 것입니다. 설치 가능 여부를 결정하는 줄은 Candidate이며, APT는 이를 인덱스, suite 이름, 아키텍처 및 적용 중인 핀 규칙에서 도출합니다. 사라진 VPN 패키지에 관한 대부분의 보고는 패키징 문제가 아니라 후보 문제로 밝혀집니다. 소스 항목을 하나라도 건드리기 전에 두 줄을 모두 읽으십시오.

후보를 먼저 확인하는 이유는 명령 하나면 되고 흔한 추측의 절반을 배제할 수 있기 때문입니다.

apt-cache policy 출력이 알려주는 것

apt-cache policy는 네트워크가 아니라 로컬 패키지 캐시를 읽습니다. 설치된 버전, 후보 버전, 그리고 해당 패키지를 제공하는 모든 인덱스의 표를 연결된 우선순위와 함께 출력합니다.

apt-cache policy openvpn
apt-cache madison openvpn
apt list -a network-manager-openvpn

후보는 APT가 지금 선택할 버전입니다. madison은 각 소스가 제공하는 것과 그 우선순위를 나열하며, 인덱스에는 있지만 핀 경쟁에서 지는 패키지를 이렇게 발견합니다. apt-cache 설명서는 둘 다 캐시 읽기로 문서화하므로, 어느 것도 미러에 지금 접속할 수 있음을 증명하지 않습니다.

후보 줄이 비어 있거나 (none)을 표시하면, 구성된 소스에는 현재 구성된 대로 이 시스템에 적합한 것이 없습니다.

후보가 사라지는 네 가지 이유

실제로 원인은 거의 항상 네 가지 중 하나이며, 각각 다른 해결책이 있습니다.

소스의 suite 이름은 패키지가 빌드된 배포판과 일치해야 합니다. trixie 미러를 향한 Debian bookworm 시스템이나, 업그레이드 중 sources.list.d 파일에서 이름이 바뀐 Ubuntu 릴리스는 다른 suite에만 있는 패키지에 대해 아무것도 해결하지 못합니다. 각 항목의 suite 필드와 lsb_release -cs를 비교하십시오.

APT는 dpkg가 아는 아키텍처용으로 빌드된 패키지만 봅니다. 32비트 컨테이너, arm64 이미지, 또는 amd64용으로만 배포되는 패키지를 요청하는 Raspberry Pi 설치은 오류 메시지 대신 빈 후보를 받습니다. dpkg --print-architecture와 dpkg --print-foreign-architectures가 실제로 어느 집합에 있는지 알려줍니다.

구성 요소도 중요합니다. contrib나 non-free의 패키지는 main만 활성화되어 있으면 보이지 않으며, Ubuntu의 universe도 같은 방식으로 동작합니다. 인덱스는 존재하고 패키지도 그 안에 있지만, 활성화된 구성 요소 목록에 포함되어 있지 않을 뿐입니다.

핀이 조용한 원인입니다. /etc/apt/preferences.d의 파일이 패키지를 설치 임계값 아래로 제한할 수 있고, 그러면 아주 좋은 후보가 출력에서 사라지지만 인덱스는 여전히 그 패키지를 나열합니다. policy는 각 소스 옆에 우선순위를 출력하므로, 모든 소스가 낮은 핀 번호를 가진 패키지가 단서입니다.

오래된 인덱스는 없는 패키지처럼 보인다

캐시는 스냅샷입니다. 마지막 apt update가 한 인덱스에서 실패했다면, 쿼리는 계속 이전 복사본에서 응답하며, 기대하는 패키지가 그 복사본에 없을 수 있습니다.

apt update는 인덱스별 오류를 출력하므로, 곧바로 마지막 줄로 스크롤하지 말고 그것을 읽으십시오.

서명 오류, 만료된 release 파일 또는 접근할 수 없는 미러 때문에 실패한 새로 고침은 이전 인덱스를 그 자리에 남겨 둡니다. 미러가 잠시 중단되어도 작동하는 캐시를 유지하므로 합리적인 설계입니다. 부작용은 저장소가 오프라인인 동안에도 검색이 성공할 수 있다는 것입니다. 또한 인덱스가 마지막으로 언제 가져왔는지 알기 전까지 패키지의 부재는 아무것도 증명하지 않습니다. 패키지 이름을 탓하기 전에 /var/lib/apt/lists 아래 파일 날짜를 확인하십시오.

정말 필요한 패키지의 이름을 대십시오

OpenVPN은 데몬이며, 사람들이 보통 원하는 조각들은 별도 패키지입니다.

엔진, NetworkManager 플러그인, 데스크톱 편집기는 세 이름을 가진 세 패키지이며, 플러그인에는 배포판마다 이름이 다른 GTK 변형이 있습니다. apt-cache search --names-only openvpn는 설명 대신 이름과 제공된 이름을 일치시키며, 그 물건의 이름을 대략 알 때 원하는 것이 바로 이것입니다.

이름이 정말 알려지지 않았다면 설명에서 한 번 검색한 뒤 정확한 이름으로 돌아가십시오. 다른 배포판에서 빌려온 -gui 접미사를 붙여 패키지가 더 이상 존재하지 않는다고 결론 내리지 마십시오.

소스는 마지막에 바꾸고, 그다음 트랜잭션을 검증하십시오

저장소를 추가하면 업데이트를 제공하는 주체가 바뀌므로, 그것은 조사의 시작이 아니라 끝에 속합니다.

그 전에 릴리스, 아키텍처, 구성 요소, 핀 상태를 확인하십시오. 네 가지 중 무엇을 확인했는지 적어 두어 다음 사람이 같은 점검을 반복하지 않게 하십시오. 네 가지가 모두 맞는데 후보가 여전히 없다면, 정직한 결론은 이 릴리스가 그 패키지를 제공하지 않는다는 것입니다. 남은 선택지는 backport, 공급업체 패키지 또는 다른 지원 릴리스이며, 각각은 추측이 아니라 의도적인 선택입니다.

후보가 나타나면 적용 전에, 패키지 이름을 붙인 apt-get install --simulate로 무엇이 끌려오고 무엇이 제거될지 시뮬레이션하십시오. 패키지 가용성, 설치, 작동하는 터널은 여전히 세 단계로 남으며, 터널은 트래픽을 운반하기 전에 프로필, 자격 증명, 경로, DNS가 여전히 필요합니다.

관련 글