클라이언트를 시작하면 터미널이 Segmentation fault (core dumped)를 출력하고, 다음 한 시간은 카드를 다시 굽는 데 사라진다. 그 메시지는 한 프로세스가 한순간에 어떻게 죽었는지를 설명할 뿐이다. 보드가 손상됐다고 말하지도 않고, 전원 공급 장치나 저장 장치, 이미지에 문제가 없다고도 하지 않는다.

셸이 출력한 줄에서 그 뒤에 있는 프로세스로 거슬러 올라가라. 유용한 사실은 어느 실행 파일이 실패했는지, 어떤 환경에서, 연결의 어느 단계에서 실패했는지다.

셸이 출력한 줄에서 시작하라

명령의 이름은 다른 바이너리를 시작하는 래퍼나 런처인 경우가 많으므로 커널이 실제로 종료시킨 실행 파일을 확인하라. 전체 경로, 패키지와 애플리케이션 버전, 아키텍처, OS와 커널 릴리스, 실행한 계정, 정확한 시각을 적어라. VPN 이름을 붙인 셸 명령은 보조 프로세스를 쉽게 시작할 수 있고, 기록에는 그 보조 프로세스가 남는다. 지난달 설치한 패키지의 버전 문자열을 베껴도 무엇이 실행됐는지는 알 수 없다.

충돌 직전에 무엇이 있었는지 기록하라. 시작, 프로필 파싱, 인증, 또는 이미 트래픽을 통과시키던 세션 중 하나다. 이 네 단계는 segfault라는 단어보다 검색 범위를 훨씬 좁힌다. 그 사건 전후의 짧은 로그 구간을 보관하고, 어떤 최근 변경이 원인인지에 대한 추측은 기록이 말할 때까지 미뤄라.

메모리 이미지가 있는지 확인하라

core 파일 참조는 덤프를 종료 시점에 기록되는 프로세스 메모리 이미지로 설명하고, 그 기록을 막는 조건도 나열한다. 그 조건에는 자원 한도가 영인 것과 덤프를 작업 디렉터리가 아닌 곳으로 보내는 core 패턴이 포함된다. 따라서 core라는 파일이 없다는 것은 충돌이 있었는지에 대해 아무것도 증명하지 못한다. 시스템이 아무 증거도 만들지 않았다고 결론내리기 전에 설정된 패턴과 한도를 확인하라.

systemd 수집기를 쓰는 시스템에서는 지원되는 보기가 저장된 레코드를 실행 파일과 시각에 연결한다. 저널 항목과 읽을 수 있는 메모리 이미지는 서로 다른 산출물이다. 보존 정책과 권한 때문에 둘 중 하나만 남을 수 있다. 배포판이나 애플리케이션 관리자에게 그들이 지원하는 진단 워크플로를 물어라. 다른 빌드나 다른 라이브러리 집합에서 만든 트레이스는 보통 상대의 시간을 낭비한다.

sysctl kernel.core_pattern
ulimit -c
coredumpctl list --since "1 hour ago" --no-pager
coredumpctl info /usr/sbin/openvpn

그 읽기들을 실제로 충돌한 머신에서 반복하라. 새 설치에서 하는 것은 아무도 묻지 않은 질문에 답하는 것이다.

덤프를 비밀을 담은 자료로 다뤄라

프로세스 메모리에는 자격 증명, 세션 키, 프로필 내용이 들어 있을 수 있어 덤프는 옆의 텍스트 로그보다 민감하다. 로그를 가리는 것은 불투명한 메모리 이미지에 아무 효과가 없고, 일반적인 이슈 트래커는 지원 스레드가 유지되는 것보다 훨씬 오래 첨부 파일을 보관한다. 파일은 공급업체나 관리자가 제공하는 비공개 채널로 옮겨라. 공개 이슈에 원본 덤프를 올리면 프로세스가 죽을 때 메모리에 있던 모든 것이 노출되며, 누군가 검사하기 전에는 그것이 무엇인지 알 수 없다.

관리자가 트레이스를 요청하면 어느 실행 파일과 어느 라이브러리에서 원하는지 물어라. 보고된 빌드와 프레임이 맞지 않는 backtrace는 신뢰하기 어렵고 잘못 읽기 쉽다.

무언가를 교체하기 전에 출처를 확인하라

설치를 소유한 쪽을 통해 패키지 출처와 파일 무결성을 검증하고, 통제된 수리 전에 구성과 신원 자료를 보존하라. 깨끗한 설치가 부팅되는지만 보려고 증거의 유일한 사본을 덮어쓰지 마라. 새 이미지가 부팅된다는 것은 새 이미지가 부팅된다는 것일 뿐이다. 예전 이미지에 손상된 패키지, 고장 난 카드, 이 아키텍처에서 항상 폴트할 바이너리가 있었는지는 알려주지 않는다.

무관한 프로그램도 실패하거나 시스템이 저장 장치, 전원, 커널 오류를 기록하면 그 관찰을 플랫폼 조사를 위해 남겨라. 범위는 넓어지지만, 모든 segfault가 고장 난 RAM이나 손상된 이미지에서 온다고 증명하지는 않는다.

대상 수정 후 같은 하드웨어에서 같은 승인된 실행과 같은 VPN 작업을 반복하라. 어떤 실패가 어떤 버전에서 멈췄는지 말하라. 깨끗한 부팅만으로는 결함 부품을 식별하지도, 다음 하드웨어 고장을 예측하지도 못한다.

관련 글