본문 바로가기

Linux

(26)
systemd-detect-virt로 가상화 환경 확인하기 systemd는 systemd-detect-virt 라는 프로그램을 포함하고 있습니다. 이를통해 현재 가상화 환경에서 실행되는지, 어떤 가상화 기술을 사용하는지 확인할 수 있습니다. 사용방법은 단순히 쉘에서 systemd-detect-virt를 실행하면 됩니다.먼저 어떠한 가상화도 사용하지 않았다면 none이라는 문자열이 출력됩니다.라즈베리파이에서 systemd-nspawn을 통해 실행되는 컨테이너는 systemd-nspawn을 출력합니다.추가적으로 Vultr의 인스턴스는 kvm을 사용하는 것으로 나옵니다. 이외에도 WSL, vmware, qemu, docker 등 다양한 가상화 기술도 감지할 수 있습니다. 추가적인 옵션이나 감지가능한 기술 목록을 보려면 아래의 man 페이지를 참고하기 바랍니다. htt..
systemd 유닛 설정 수정하기 최근 대부분의 배포판들이 systemd를 init으로 사용하고, 패키지 안에 systemd service 유닛 파일을 포함하고 있어서 사용자는 그냥 systemctl 명령으로 프로그램을 실행, 중지를 하면 됩니다. 그런데 몇몇 패키지 간에 우선순위나 환경변수, 리소스 컨트롤이 필요한 경우가 발생할 수 있습니다. systemd는 최대한 동시에 실행하려하기 때문에 우선순위를 제대로 정하지 않는다면 실행이 성공할 수도 있고 실패할 수도 있는 마치 슈뢰딩거의 고양이같은 상황이 발생할 수 있습니다. 저의 경우는 postfix와 bind9이 동일한 서버에 있고 postfix가 bind9이 완전히 실행되기도 전에 제 서버의 도메인을 리졸브 시도를 하여 실행 실패한 적이 있었습니다. 우연히 bind9이 빨리 실행되어 ..
systemd-resolved로 LLMNR 사용하기 로컬 네트워크 내에서 일일히 IP를 적어서 연결하는 것은 귀찮은 일입니다. 거기다 IPv6 Link-local 주소를 사용한다면 더더욱 기억하기 어렵습니다. 그렇다고 네트워크에 DNS 서버를 설치하는 것도 배보다 배꼽이 큰 것 같습니다. 이럴 때 LLMNR이 좋은 해결책이 될 수 있습니다. LLMNR을 통해 동일한 네트워크 내에서 호스트네임으로 그 이름을 가진 호스트의 IP를 알아낼 수 있습니다. DNS 서버와 다른 점은 멀티캐스트를 사용한 기술이기 때문에 서버가 필요없고, 단지 호스트가 LLMNR 서비스를 실행해두고 있으면 됩니다. 거기다 Microsoft에서 만들었기 때문에 Windows에도 적용되어 있으므로 리눅스와 함께 사용할 수 있습니다. systemd-resolved는 기본적으로 LLMNR이 ..
[Linux] coredumpctl로 크래시 디버깅하기 리눅스는 프로그램에서 에러가 나서 크래시되면 coredump 파일을 남기게 할 수 있습니다. 옛날에만 해도 ulimit에 coredump를 남기지 않도록 기본설정이 되어있어서 에러를 확인하고 싶어도 정보가 없었던 적도 있었습니다. 하지만 init에 systemd가 채용되면서 단순히 파일만 남기는게 아니라 systemd가 해당 에러의 내용과 coredump 파일, 시간 등의 기록을 남기는 역할도 맡게 되었습니다. systemd는 이 기록들을 조회하고 관리하기위해 coredumpctl 이란 명령을 제공합니다. 그냥 해당 명령을 실행하면 지금까지 있었던 기록들을 보여줍니다. 참고로 이 기록은 journalctl과 연동됩니다. 사용자가 시스템 전반의 journal에 접근할 권한이 없다면 자신의 coredump ..
[Linux] LUKS로 저장장치 암호화하기 회사 기밀이나 개인정보가 들어있는 저장장치는 보안이 중요합니다. 기본적으로 유출이 되지 않는게 최선이지만 만일의 사태로 인해 유출이 되었을 때 데이터를 빼내지 못하게 암호화를 하는 것이 좋습니다. 리눅스에서는 커널단에서 LUKS라는 암호화 레이어를 제공하고 있습니다. 그러므로 LUKS를 사용하면 어떤 리눅스에서든지 사용가능합니다. LUKS를 사용자 단에서 조작하기 위한 프로그램으로 cryptsetup이 있습니다. 아치리눅스는 기본적으로 포함되어 있지만 다른 배포판들은 어떤지 모르겠습니다. 만약 해당 명령이 없다면 cryptsetup 패키지를 설치해야 합니다. 먼저 저장장치를 LUKS로 사용하기 위해서 포맷을 해야합니다. 포맷은 아래의 명령으로 가능합니다. # cryptsetup --type luks2 l..
IPv6 주소로 SFTP 접속하는 방법 저는 내부 네트워크에 속한 서버는 IPv6 Link-local 주소를 통해 관리합니다. 그런데 SSH는 IPv6를 그대로 입력해도 알아서 잘 연결이 되는데 SFTP는 IPv6 주소를 자꾸 도메인으로 해석하려해서 접속이 안되는 문제가 있습니다. SSH와는 다르게 SFTP는 IPv6 주소가 오면 대괄호 []로 IPv6 주소를 감싸줘야 제대로 인식됩니다. 그러므로 다음과 같이 해야 접속이 가능합니다. sftp root@[fe80::decd:efff:fc1a:ffff%eth0] 저는 보통 계정명은 동일하게 설정해두기 때문에 @을 생략하고 IP 주소만 적어서 접속하는 것을 선호합니다. 그런데 또 특이하게도 계정은 적지 않고 대괄호만 씌워서 접속을 하려하면 또 안됩니다. 이 경우는 대괄호를 escape 처리해야만 ..
systemd-networkd로 SIT 터널링 설정하기 이전 글로 터널브로커로 IPv6 터널링을 하는 방법을 설명했습니다. tunnelbroker.net으로 공인 IPv6 할당받기 한국에서는 아직 개인 인터넷에 IPv6를 할당하는 ISP가 없습니다. 하지만 NAS나 서버를 집에서 운영하거나 실험적인 목적으로 IPv6를 할당받고 싶은 사람도 있습니다. 그런 분들을 위해 IPv4를 통해 IPv6 패킷을.. stackframe.tistory.com 저 글에서는 명령으로만 터널링을 설정한 관계로 리부팅하면 초기화된다는 단점이 있었습니다. 이번 글에서는 systemd-networkd를 통해 리부팅을 하여도 인터페이스가 유지되도록 설정하는 방법을 설명하겠습니다. 먼저 준비되어야 할 것은 systemd-networkd로 컴퓨터의 네트워크가 관리되고 있어야 한다는 점입니다..
systemd-boot를 부트로더로 사용하기 저도 리눅스 입문을 우분투로 했기 때문에 처음 부트로더로 사용한 것은 GRUB2였습니다. 초기에는 딱히 만질줄도 모르고 수정할 일도 없었기에 설치된 그대로 사용하였지만 리눅스에 익숙해지고 커널 파라미터를 넣거나 커스텀 커널을 사용하려니 너무 설정하기 복잡했습니다. 그러다가 아치리눅스로 넘어오고 systemd-boot를 알게 되었습니다. systemd-boot는 굉장히 심플하며 최소한의 기능만 들어있습니다. 그래서 GRUB2과 비교한다면 빈약하고 제약사항이 많다고도 할 수 있습니다. 그럼에도 불구하고 제가 사용하는 이유는 설정의 편리함 때문입니다. GRUB2은 /etc/default/grub, /etc/grub.d/ 등의 설정을 만져주고 업데이트를 실행해야만 비로소 적용됩니다. 그 설정파일도 쉘코드로 되어..