클라이언트 업데이트가 터널을 끊고, 이전 버전은 계속 작동한다. 그러면 두 가지 뻔한 해법이 남는다. 하나는 패키지를 그 자리에 붙잡아 두고 수정을 기다린다. 다른 하나는 곧바로 지원되는 구성으로 넘어간다. 둘은 똑같이 안전하지 않고, 어느 쪽도 출구 없는 유지보수 전략이 아니다. 고르기 전에 실제로 무엇을 고정하는지로 비교해야 한다.

하나의 회귀에 대한 두 가지 해법

패키지를 보류하면 작동하는 버전이 설치된 채로 남고 APT가 그것을 옮기지 못한다. 시간을 벌고, 사용자를 연결된 상태로 유지하며, 근본 버그는 건드리지 않는다. 전진이란 회귀를 고치는 지원 버전을 찾거나, 연결 주인을 배포판이 아직 유지하는 무언가로 바꾸는 것이다. 처음에 더 많은 일이 들지만 상존하는 위험을 없앤다.

선택은 결정 전에 갖추어야 할 세 가지 사실에 달려 있다. 어느 구성 요소가 회귀했는지, 수정된 릴리스가 있는지, 임시 상태를 얼마나 오래 견딜 수 있는지다.

둘 중 하나를 고르기 전에 실패를 고정하라

NetworkManager 코어 업데이트, VPN 플러그인 업데이트, 리졸버 도우미 회귀는 사용자 자리에서는 똑같아 보이지만 되돌릴 후보가 다르다. 정확한 패키지, 버전, 첫 번째 새 오류를 기록하라.

apt-cache policy network-manager network-manager-openvpn
dpkg -l | grep -E 'network-manager|openvpn|wireguard'

목록을 새로 고치지 않았다면 패키지 메타데이터가 오래되었을 수 있으므로 단서로 읽고 실제 설치된 버전과 대조해 확인하라. 포럼 글에서 대상 버전을 가져오지 마라. 다른 릴리스의 같은 버전 문자열이 다른 의존성 집합을 지닐 수 있다.

보류가 무엇을 덮는지 비교하라

보류는 패키지가 자동으로 설치, 업그레이드, 제거되는 것을 막는다. 그러나 의존성을 고정하지 않고, 연결을 고치지 않으며, 오래된 바이너리를 안전하게 만들지 않는다. 바로 그 틈이 비교의 전부다. 회귀가 클라이언트가 링크하는 라이브러리에서 왔다면 라이브러리가 계속 움직이는 동안 클라이언트를 보류해도 아무것도 바뀌지 않는다.

sudo apt-get -s install network-manager=1.42.4-1
apt-mark showhold

먼저 다운그레이드를 시뮬레이션하고 제안된 변경을 끝까지 읽어라. 데스크톱에 필요한 의존성을 제거하는 다운그레이드는 다른 사건이며, 시뮬레이션이 그것을 발견하는 가장 싼 자리다. 보류가 정말 올바른 임시 경계라면 소유자, 이유, 해제 조건을 갖춘 결정으로 적어라. 소유자 없는 보류는 아무도 손대지 못하는 영구 인프라가 된다.

출구 경로를 비교하라

전진 경로는 배포판이나 공급업체의 수정을 독립된 연결에서 검증한 뒤 적용하는 것이다. 그러면 시스템이 지원되는 업데이트 흐름 안에 머물고 노출이 닫힌다. 이주 경로는 클라이언트나 호스트를 배포판이 아직 유지하는 무언가로 바꾼다. 일이 더 들지만, 회귀한 구성 요소에 그 계열의 수정 릴리스가 없을 때 흔히 유일하게 정직한 답이다.

sudo apt-mark unhold network-manager
sudo apt update
sudo apt full-upgrade

어느 출구를 고르든 끝났다고 선언하기 전에 정확한 프로필, 인증 경로, 경로, DNS 동작, 재연결을 검증하라. 한 번 올라오는 터널은 일시 중단, 네트워크 변경, 재부팅을 견디는 터널과 같지 않다. 버그 보고를 위해 실패 증거를 남겨라. 패키지 버전, 저널 발췌, 비밀을 뺀 프로필 구조. 보고서를 더 완전하게 만들려고 개인 키나 자격 증명을 첨부해서는 안 된다.

기록에 담아야 할 것

결정을 네 줄로 적어라. 무엇이 회귀했는지, 무엇을 보류하거나 바꿨는지, 임시 상태의 소유자가 누구인지, 무엇이 그것을 없애는지. 수행한 검증도 덧붙여라. 다음 엔지니어가 그것을 반복할 것이다.

해제 날짜가 있는 보류는 관리된 되돌림 경계다. 날짜가 없는 보류는 조용히 인프라의 일부가 된 설명 없는 다운그레이드다.

관련 글