WIL: 2024년 1월 2주차

최근에 사소하지만 다양한 개발 지식을 조금씩 습득하고 있고, 개발 외적으로도 이런저런 생각이 들고 있습니다. WIL을 통해 조금씩 정리해보려고 합니다.

CLI

  • gdb에서 gcore <filename>을 수행하면 현재 상태 기준으로 core dump를 생성할 수 있습니다.
  • shell script로 자동화를 해본 적은 별로 없는데, 다른 프로그램을 수정하다가 expect라는 프로그램을 알게 되었습니다.

Typst 조판에서 서버 재설치까지

Typst in Neovim

Typst로 문서를 조판하기 위한 환경을 구축해봤습니다. 다행스럽게도 선구자들께서 Neovim과 Typst을 연결하는 플러그인을 만들어두셨습니다. 우선 이 두 개만으로토 충분해보여서 설치했습니다.

  • typst-preview.nvim
  • typst.nvim 그런데 typst-preview.nvim의 preview가 이상하게도 잘 작동하지 않았습니다. noice에 메시지도 없어서 조금 더 조사가 필요했고, 문제의 원인은 glibc version 때문이었습니다. glic 2.29 이상이 필요한데 현재 OS가 2.28이었습니다. 다른 방안을 찾아보기로 했습니다.

벽돌이 된 서버

다른 방법을 찾아보다가 Linux 서버가 벽돌이 됐습니다. 뭐가 잘못이었는지는 아직도 모르겠고 의심 가는 동작은 2개 정도 있습니다.

  • glibc LD_PRELOAD. libc로 preload했을 때는 다른 library도 버전이 다르다며 실행이 안 되고 뻗진 않았습니다.
  • yum으로 docker 설치. 정말 왜인지는 모르겠으나 마지막으로 온전히 실행할 수 있었던 명령어로, 이후 모든 프로그램이 실행되지 않고 segfault가 발생하기 시작했습니다.

rescue mode 등으로 부팅을 시도해도 hang이 걸려 결국 서버를 밀 수밖에 없었습니다.

다른 부서원의 이야기를 들어보니 가끔씩 다른 프로그램 업데이트를 하다가 뻑이 날 수 있다고 하는데, 그래도 이게 맞나 싶습니다. 너무 충격적이었지만 오히려 그랬기에 멘탈붕괴는 한순간이었고 침착하게 업무를 보면서 서버를 재설치했습니다. 설치하면서 기본 설정 정도 해주는 자동화 스크립트가 있으면 좋겠다고 생각했고, 복구하면서 조금씩 작성하긴 했는데 유지보수가 잘 될지는 모르겠습니다.

재재설치

재설치 와중에 gcc 업그레이드 스크립트를 중간에 멈추고 다시 시작했다가 그만 /usr/local/bin/gcc-...가 아니라 /bin/gcc-...에 설치하는 어처구니 없는 실수를 저질러버렸습니다. shell script 변수가 재시작 후 설정되지 않아 일어난 참사였습니다. 복구할 수 있는 방법이 없지는 않았을텐데 linux filesystem의 구조를 잘 알지 못해 다시 밀고 설치했습니다. 스크립트 실행을 중간에 멈췄다가 재개하는 무서운 짓은 앞으로 삼가야겠습니다.

재설치 자동화

재재설치를 하는 과정을 모두 script로 남기려 자동화하려고 노력했으나 생각보다 훨씬 어려웠고 버그도 많이 있었습니다. shell script는 디버깅이 참 어렵습니다. 서버 재설치하고 어느 정도 기틀을 잡은 지금 돌아보면 하나의 큰 script로 묶어보려고하기보다는 기능별로 여러 개의 script를 필요에 따라 수행하는 쪽이 나아보입니다. 이러면서 coreutils로 조금씩 배웠습니다.

  • sed는 어렵지만, 기본기는 익혀야겠다는 생각을 했습니다.
  • tee를 제대로 써보긴 처음이었습니다. sudo cmd >> <file>이 안 될 줄은 몰랐습니다.
  • getconf를 처음 실행해보았습니다 (getconf -a | grep libc).
  • 방화벽이라는 정책의 명과 암을 몸소 느낄 수 있었습니다.

기타

vim regex

vim regex에는 escape character가 많이 필요함을 깨달음과 동시에 정규 표현식의 강력함을 체감했습니다. 이 날은 Markdown의 section numbering을 지울 수 있는 정규 표현식을 생각해봤고, vim으로 옮기니 %s/^\(#\+\) \+\d\+\(\.\d\+\)*/\1/g 의 꼴이 되었습니다.

keep-all

Obsidian의 출력 양식을 조금 더 손보다가 word-wrap, word-break 등의 속성을 접했습니다. 후술하겠지만 Typst 조판 환경이 어느 정도 갖추어지면서 크게 쓸 일은 없어졌습니다.

X11 server

이전 글에서 언급한 X11 서버가 가끔씩 죽을 때가 있었는데, 알고 보니 MobaXTerm의 X server를 통해 Windows에서 Linux로 원격 접속이 수행되고 있었습니다. 틀어놓고 가끔씩 파일 옮길 때 쓰고 있습니다.

updatedupdated2024-04-132024-04-13