GNU-Linux

Arch Linux에서 systemd-networkd로 WiFi 자동 연결 세팅

동건 2018. 1. 8. 01:28

새해 첫 글!


요즘 Arch Linux + Suckless 환경 세팅에 푹 빠져있다. "푹 빠져있다"라고 쓰고 "많은 시간을 할애해도 아직 환경 구축을 못하고 있다"라고 읽는다. (아마도) 2010년 겨울에 샀던 Dell Inspiron N5010에 새로운 Arch 환경을 시험 삼아 설치하고 이것 저것 아직 세팅할 것이 많은 상태이다 (아직 한글을 못 치고 있다 흑흑). 아직 dual boot에 대한 자신이 없기 때문에 나의 주력 노트북인 Lenovo Ideapad에 새로운 Linux distro를 시험해 볼 여유는 없었는데, 다행히도 집 구석에 안 쓰이고 버려져 있던 Dell 노트북을 재활용할 수 있었다.

오늘 정리하는 것은 아직 데스크탑 환경을 설치하지 않은 갓 태어난 Arch 터미널 (아마도 tty1)에서 와이파이를 연결하는 일이다. 조금 더 상세하게 말하자면 노트북의 wireless 통신 기능을 제어하고 관리하는 방법을 정리한다. Arch Wiki에는 네트워크를 관리하는 여러 방법을 나열해주고 있지만, 이 글에서는 systemd-networkd를 통해서 무선 네트워크를 만져볼 것이다. 이 글은 유선 네트워크에 대해서 아무 내용도 다루지 않는다. 오히려 앞으로의 내용은 유선 네트워크가 연결되어 있다는 가정 하에 이것 저것 설치를 하게 된다.



Why systemd?

systemd 프로젝트 목표 자체가 모든 GNU/Linux 배포판들의 시스템을 통일하고자 하는 것이다. 많은 (또는 대부분의) GNU/Linux 배포판들이 기본 프로세스 관리 시스템으로서 systemd를 채택되어 업그레이드 되고 있어서 그 목표는 꽤나 달성된 것처럼 보인다. 가장 중요하게도 Arch Linux 역시 systemd를 init system으로 선택해서 탑재되어 있다. 그리고 이 핵심 daemon system을 통해서 무선 네트워크도 설정/관리할 수 있으니, why not?

여담. 그런데 사실 systemd 프로젝트에 대한 평가는 많이 갈리고 있다. "하나의 프로그램은 하나의 일만 하고, 그 일을 잘 하자"는 기본 UNIX의 철학에 맞지 않게 복잡한 구성을 가지고 있다든지, Windows를 따라간다는 등의 의견 등을 찾아 볼 수 있다. 하지만 이렇든 저렇든 뭐가 어쨋든 이미 systemd는 대부분의 GNU/Linux 배포판에서 쓰이는 데몬 시스템인 것은 분명한 사실이고, UEFI motherboard 위에서 systemd-boot를 통해 부팅도 책임질 수 있을 정도로 init system으로서의 광범위한 기능을 수행하고 있기도 하다. Arch 핵심 개발자가 systemd를 선택한 이유를 들어보면 systemd의 가치를 또한 느낄 수 있다.

여담2. 확실히 8년 된 노트북이라 그런지 UEFI 지원은 되지 않아 아쉽게도 나는 MBR 파티션에 GRUB으로 부팅하게 설치했다. 나중에 Arch Linux 설치 과정을 정리할 수 있는 시간이 있기를...



앞서 설치해야 할 것들

Arch 터미널에서 유선으로 인터넷에 접속할 수 있다고 가정하고 시작하려고 한다. 구매한 지 8년 된 Dell Inspiron N5010에 Arch Linux를 설치하면서 유/무선 네트워크와 사운드, 터치패드 등의 기본적인 드라이버들이 기본으로 잡히는 것을 보고 오픈소스의 위엄을 살짝 느꼈었다 (아니면 Dell 기계가 Linux에 친숙하기 잘 만든 걸지도?). 이 글은 보시는 분들도 부디 랜선 꽂으면 인터넷 연결이 잘 되시길 바란다 (혹시 ipv6 라우터 어쩌구 저쩌구 불평한다면 dhcpcd 대신 dhclient도 실행해보세요).

iwwpa_supplicant를 설치하자.

$ sudo pacman -S iw wpa_supplicant



일시적 연결 for testing

Arch Wiki에 너무나 설명이 잘 되어있는 부분이므로, 필요한 링크만 남긴다.

https://wiki.archlinux.org/index.php/Wireless_network_configuration

https://wiki.archlinux.org/index.php/WPA_supplicant


wpa_cli가 제공하는 interactive console을 통해서 연결을 확인해 볼 수도 있고, wpa_supplicant -B -i interface -c /etc/wpa_supplicant/example.conf 이런 명령어를 통해서도 할 수 있다 (아마도 마무리는 dhcpcd).


systemd-networkd를 통한 자동 setup

위에서 Arch Wiki의 도움을 받아가며 WiFi 연결이 성공적으로 된 것을 확인했다면, 이제 wireless daemon을 만들 차례다. 우선 파일을 하나 작성하자.

# /etc/systemd/network/25-wireless.network
[Match]
Name=wlp2s0

[Network]
DHCP=ipv4


wlp2s0라고 썼는데, wireless network interface의 이름을 의미하므로 글자 그대로 쓰지 말고 iw dev 명령어를 통해 interface 이름을 꼭 확인해서 입력하시길 바란다. 이 파일을 통해 systemd-networkd daemon을 돌릴 수 있다.

$ sudo systemctl enable --now systemd-networkd

이제 systemd-networkd는 자동적으로 wpa_supplicant@wlp2s0.service 파일을 찾아서 또 다른 daemon을 돌린다. 그리고 이 service는 설정 파일 wpa_supplicant-wlp2s0.conf의 정보와 함께 WiFi에 연결하게 된다.

그럼 이제 해야 할 일은 wpa_supplicant-wlp2s0.conf를 작성하고

# /etc/wpa_supplicant/wpa_supplicant-wlp2s0.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

network={
        ssid="mysweethome"
        psk="mypassword"
}

wpa_supplicant@wlp2s0.service를 실행시키면 된다.

$ sudo systemctl enable --now wpa_supplicant@wlp2s0


reboot 후 확인해보자.


사실 이 내용도 Arch Wiki에 있다, RTFD!



참고 자료


systemd
Wiki https://en.wikipedia.org/wiki/Systemd
Arch Wiki https://wiki.archlinux.org/index.php/systemd
Why it is bad? https://systemd-free.org/why.php
Why Arch embraced systemd? https://www.reddit.com/r/archlinux/comments/4lzxs3

Arch Wiki
Network configuration https://wiki.archlinux.org/index.php/Network_configuration
Wireless network configuration https://wiki.archlinux.org/index.php/Wireless_network_configuration
WPA supplicant https://wiki.archlinux.org/index.php/WPA_supplicant
systemd-networkd https://wiki.archlinux.org/index.php/systemd-networkd

반응형

'GNU-Linux' 카테고리의 다른 글

Vim 8의 native package support  (0) 2018.01.21
Arch Linux 한글 환경 설정  (2) 2018.01.17
UNIX as IDE  (0) 2017.11.09
UNIX as IDE: 7. Revisions  (0) 2017.11.09
UNIX as IDE: 6. Debugging  (0) 2017.11.08