blog.stackframe.dev

Linux/systemd (9)

네트워크 연결 완료 이후 서비스 실행하기

서버 장애 발생 시 자동으로 복구되도록 설정하는 과정에서 nginx가 제대로 실행되지 못하고 죽는 문제가 발생했다.

systemd-homed로 USB에 이동식 리눅스 계정 만들기

노트북이나 컴퓨터를 여러 대 가지고 있다면 계정 하나만 만들어두고 로그인만 하면 어디서든지 내 파일들을 보고 작업할 수 있었으면 하는 생각이 든다. 이럴 때 systemd-homed를 사용하면 USB에 계정의 홈 디렉토리를 만들어 두고 다른 컴퓨터에 연결만 하면 어디서든지 동일한 설정과 데이터들을 사용할 수 있다. 거기다 LUKS2로 암호화하기 때문에 USB를 잃어버리더라도 데이터가 누출될 가능성이 낮다.

systemd timer로 인증서 갱신 자동화 하기

개인 사이트를 운영한다면 대부분 Let's Encrypt를 사용하여 HTTPS 인증서를 발급받을 것이다. Let's Encrypt는 3개월 기간의 인증서를 발급해 주고 만료 1달 전에 갱신할 수 있다. 만료일이 가까워 졌다는 것을 이메일로 알려주지만 매 번 서버에 접속해서 갱신을 하고 인증서를 사용하는 서비스들을 리로딩하는 것은 귀찮은 일이다. 그래서 systemd를 사용하여 이것을 자동화하려 한다.

Postfix를 DNS 서버 실행 이후에 시작하기

나는 DNS 서버와 메일 서버를 동일한 컨테이너에 넣어서 관리한다. 문제는 Postfix가 DNS 서버인 PowerDNS보다 먼저 실행되어 메일 서버 도메인을 찾지 못하고 실행에 실패한다는 것이다.

[systemd-networkd] 점보 프레임 설정하기

인터넷 단에서는 점보 프레임 지원이 열악한 관계로 아무리 MTU 9000으로 설정하고 패킷을 보내도 강제로 분할되거나 심하면 드롭되어 버린다. 이로인해 점보 프레임 설정으로 인한 장점이 없어지고 오히려 성능이 하락한다. 하지만 로컬 네트워크라면 직접 점보 프레임을 지원하는 장치로 구성하면 되기 때문에 성능 이득을 볼 수 있다.

[systemd-nspawn] 컨테이너에 파일 넣고 가져오기

systemd-nspawn으로 컨테이너를 사용한다면 컨테이너 안으로 파일을 복사하거나 호스트로 가져와야 할 일이 생길 것이다. 컨테이너마다 ssh를 설치해서 sftp를 통해 접근하는 방법도 있지만 보안 상의 이유로 ssh를 설치하지 않았거나 네트워크로 접근할 수 없을 때는 사용할 수 없다.

systemd-boot 부트로더 업데이트 방법

systemd-boot 부트로더는 시스템 업데이트를 하더라도 자동으로 업데이트가 되지 않는다. 보통 설정도 바뀌는 일이 거의 없고 잘 작동하면 업데이트 할 필요성도 없긴 하지만 버그 수정이나 새로운 기능이 가끔씩 추가되므로 systemd가 업데이트 되었다면 한번씩 해주는 것이 좋다고 생각한다.

systemd-networkd로 WireGuard 구축하기

systemd-networkd를 사용하면 WireGuard VPN을 쉽게 구축할 수 있다. 먼저 최소 요구사항으로 리눅스 5.6, systemd 237 이상의 버전이 필요하다. 리눅스 5.6부터 WireGuard가 메인라인 커널에 들어왔고 systemd 237부터 WireGuard를 systemd-networkd로 설정가능하기 때문이다. 그리고 키를 생성하기 위해 wg 명령이 필요하다. Arch Linux에서는 wireguard-tools 패키지로 제공되고 있다.

systemd-nspawn으로 가벼운 컨테이너 만들기

옛날에는 서버 성능이 바쳐준다면 한 서버에 웹 서버, 메일 서버, 데이터베이스, 네임서버들을 싸그리 넣고 격리란 개념없이 운영하는게 평범하였고 이로인해 하나의 보안사고가 다른 서비스들까지 영향을 미치며 서버 업그레이드는 고사하고 유지하는 것조차 힘든 일이었다. 하지만 Docker가 나오면서 서비스를 컨테이너 단위로 간단하게 분리하고 기존의 문제점들을 해결하였기에 컨테이너 기술이 이제는 거의 필수가 되었다.

1