내 노트북을 조금만 더 자유롭게 만들어보자

Created at: 2024-10-02

레노버 T470에 NixOS와 linux-libre 커널 설치하는 이야기

꽤 예전부터 제가 주력으로 쓰던 운영체제는 리눅스였습니다. 학창시절 당시에 노트북에 리눅스를 깔아서 학교 수업과 동아리 수업까지 들었던 기억이 나는데,시간이 지나 학교 선배를 꽤 오랜만에 만나 이야기를 할 기회가 생겼는데, 그 때 선배가 가장 먼저 꺼낸 말은 이랬습니다.

너 아직도 리눅스 메인(운영체제로)으로 쓰고 있니?

회사에서 주력으로 쓰기에는 현실적으로 어려운 점이 있기는 하지만, 아무튼 직업도 리눅스를 자주 다루는 직업으로 선택하였기에 지금은 리눅스 운영체제를 서브로서 사용하고 있습니다.
레노버 T470에 NixOS를 구동하는 모습. 좌상단에 Nix home-manager 설정 파일을 Neovim을 통해, 좌하단에는 neofetch 명령어 실행 결과를, 우측에는 htop 명령어 실행 결과를 출력하고 있다.
오늘 이야기는 리눅스를 노트북에 설치하는 이야기입니다. 단, NixOS에 linux-libre 커널을 올리기 위해 조금 빙 돌아가는 이야기입니다.


linux-libre 커널을 쓰고 싶어!


리눅스는 오픈 소스 소프트웨어라는 점에서 유명하지만, 사실 저희가 자주 사용하는 리눅스는 보통 배포판의 형태이며 여기에는 여러 가지 바이너리 파일(이 배포판 파일 시스템에 같이 담겨서 설치됩니다. 이 바이너리는 보통 블롭이라고 불리는데, 이 바이너리 블롭에는 CPU 제조사에서 배포하는 마이크로코드와 GPU 제조사의 그래픽 드라이버, WiFi와 블루투스 통신에 필요한 드라이버가 포함됩니다.

우분투는 설치 과정에서 커널 드라이버를 설치할지 선택할 수 있게 되어 있고, 데비안 리눅스와 페도라 리눅스에서는 non-free 리포지토리를 만들어 패키지 매니저를 통해 설치할 수 있도록 만들어두었습니다.

우분투 설치 과정에서는 서드 파티 프로그램을 설치할지 물어보는 과정이 있다. "일부는 사유(proprietary) 소프트웨어임."


linux-libre 커널은 리눅스 시스템에서 이런 바이너리 블롭을 제거하고 보다 자유 소프트웨어에, 그리고 오픈 소스에 가까운 리눅스를 만들고자 하여 탄생한 프로젝트입니다.
linux-libre를 구글에 검색해보면 목욕을 마치고 뽀얗게 다니는 턱스(Tux) 펭귄의 모습을 찾아볼 수 있다

문제는 통신에 관한 리눅스 커널 모듈은 대부분 소스 코드가 공개되어 있지 않습니다. 요즘은 리눅스를 지원하는 펌웨어가 많이 나와 보기 힘들어졌지만, linux-libre 커널을 설치한다면 옛날에 리눅스 설치할 때 "이거는 하드웨어가 지원 안 해서 설치를 했는데도 부팅이 안 되네...", "이건 설치는 됐는데 왜 인터넷이 안 돼..." 라는 상황을 그대로 다시 볼 수 있다는 이야기입니다.
linux-libre 커널로 부팅하는 중 바이너리 블롭 드라이버를 로드하지 않는 모습

만약 부팅을 하는 중 바이너리 블롭을 쓰는 리눅스 커널 모듈을 로드하려고 시도할 경우, 리눅스 커널 부팅 로그(dmesg)에 DEBLOBBED 메시지를 띄우면서 로드하지 않는 모습을 볼 수 있습니다.

(위 사진은 레딧에서 가져왔습니다.)


무선 랜 카드를 찾아서


많은 커널 드라이버가 바이너리 형태로 배포되고 있다곤 하지만, 일부 하드웨어는 소스 코드가 공개되어 있습니다. 와이파이 통신 쪽에서 유명한 것은 퀄컴 아데로스(Atheros) 사의 제품이 유명합니다. 이 쪽은 개발자들이 사유(proprietary) 드라이버가 사라져야 한다고 주장하는 개발자들이 존재해서 일어났던 일(?)이었습니다.


AR9271 칩셋은 알리 익스프레스에서 쉽게 구해볼 수 있습니다. 이 칩셋이 들어가 있는 USB 동글을 구하거나, 아니면 이 칩셋이 포함된 무선 랜 카드를 구할 수도 있습니다.

개인적으로는 랜 카드의 규격이 맞지 않으면 어떡하지 하고 전전긍긍했는데, 다행히 요즘 나오는 대부분의 랜 카드는 어지간하면 규격이 통일되어 있다고 하더군요. 물론 더블 체크는 필수입니다. 안 맞게 된다면 시간도 돈도 날리게 되니까요.
저는 정말 운이 좋게도, 당근마켓을 통해서 구해볼 수 있었습니다. 저 채팅을 보내고 두 시간만에 바로 랜 카드를 구해왔던 기억이 나네요.

당근 만세

이제 구해온 카드를 노트북에 심어볼 차례입니다. 유튜브를 찾아보면 어떻게 분해하는지 잘 나와있기 때문에 그 쪽을 많이 참고했습니다. 이 게시글에서는 사진 위주로만 올려보겠습니다.

중요한 점은, 장비가 고장나는 불상사를 막기 위해 BIOS에 들어가서 내장 배터리의 전원을 비활성화해야 한다는 점입니다. 바이오스에서 내장 배터리 전원을 비활성화하면 즉시 전원이 꺼집니다.
하판은 6개의 나사를 풀고 안 쓰는 카드로 살살 긁어내면 분리가 가능합니다. 어느 순간 나사가 헛돌기 시작할텐데, 정상입니다.
양옆의 스위치를 당기면서 배터리를 분리해줍니다.
나사와 배터리를 분리했다면 안 쓰는 카드로 긁어가면서 조금 힘을 주어 하판을 분리합니다.
하판을 분리한 모습. 왼쪽 위에 무선 랜 카드가, 아래쪽에 내장 배터리를 볼 수 있습니다.
내장 배터리의 전원선을 보드로부터 분리해줍니다. 이는 장비를 교체할 때 배터리의 전원에 의해 주변 장비에 문제가 생기는 것을 예방하기 위함입니다.
무선 랜 카드에 연결된 안테나 라인을 어디에 무슨 색인지 기억해주면서 분리해줍니다.
처음에는 이 안테나가 납땜으로 되어 있는 것인줄 알았는데, 알고 보니 버튼처럼 끼우고 뺄 수 있는 방식이었습니다. 다만 크기가 좀 작으니 안테나 선과 주변 장비에 영향을 주지 않도록 조심해서 제거해줍시다.

무선 랜 카드를 고정하고 있는 나사를 풀어주면 무선 랜 카드를 뺄 수 있습니다.
기존에 장착되어 있던 인텔 무선 랜 카드(좌)와 교체할 Atheros 무선 랜 카드(우). 두 무선 랜 카드의 크기가 조금 다른 것을 볼 수 있습니다.
무선 랜 카드를 장착해주고, 안테나 라인을 다시 연결해주고, 풀었던 무선 랜 카드 고정 나사를 다시 조여줍니다.
이 이후에는 원래 상태로 조립해줍니다. 조립은 분해의 역순이라고 할까요. 제거했던 내장 배터리의 전원선을 다시 연결해주고, 커버를 덮고 나사를 조인 다음, BIOS에서 내장 배터리 전원이 활성화되어 있는지 확인해줍니다.


NixOS에 linux-libre 커널을 달자


linux-libre를 지원하는 리눅스 배포판은 다양합니다. 우분투에 linux-libre 커널을 올려 커스터마이징한 트리스퀠(Trisquel GNU/Linux)과 아치 리눅스에 linux-libre 커널을 도입한 파라볼라(Parabola GNU/Linux-libre)가 유명하긴 하지만, 저는 아래 이유 때문에 NixOS를 참 좋아합니다. NixOS에 linux-libre 커널을 올리는 것도 간단해서 트리스퀠로 갈아탈 이유가 없었죠.
Nix 패키지 매니저의 큰 특징은, 선언적(Declarative)이고 재현 가능(Reproducible)한 방법으로 패키지를 관리할 수 있다는 것이다.
조금 특이하지만 Nix를 이용하면 패키지를 "잠깐만" 설치하는 방식이 가능합니다. 자원봉사자(Contributor;기여자)들이 업로드한 패키지가 제법 많아서 되게 다양한 패키지를 잠깐만 써볼 수 있습니다.

$ nix-shell -p radare2 bison flex

위 명령어로 radare2, bison, flex를 잠깐만 써볼 수 있습니다. 저 명령어를 실행한 후 터미널을 하나 더 띄워서 bison과 flex를 사용할 수 있는지 확인해보면 새로 띄운 터미널에서는 사용할 수 없다고 뜰 겁니다. 이렇게 해서 좋은 점은, 여러 패키지를 설치했을 때 미리 설치되어 있는 다른 패키지 때문에 패키지가 안 깔리는 경우를 막아줄 수 있다는 점입니다.

물론 가장 큰 특징으로, Nix는 패키지를 선언적(Declarative)인 방법으로 설치할 수 있게 도와줍니다. 어떤 패키지를 설치할지 한 파일에 담아 관리할 수 있고, 이 파일만 가지고 있으면 다른 컴퓨터라고 하더라도 Nix 패키지 매니저만 설치되어 있으면 제가 사용하던 환경과 똑같은 환경을 만들 수 있습니다.

이건 제가 가지고 있는 Nix 파일 중 일부입니다. 이 파일을 가지고 Nix가 설치된 WSL에 들어가 아래 명령어 한 줄만 실행해주면 제가 평소에 사용하는 것과 똑같은 환경과 패키지를 알아서 만들어줍니다. 제가 사용하는 네오빔(Neovim) 설정도 참고하고 있기 때문에, 제가 쓰던 네오빔과 같은 설정을 쓸 수 있어요.

$ home-manager switch --flake .

T470에 NixOS를 설치한 후, linux-libre 커널을 사용하기 위해 제가 해야 할 일은 정말 간단했습니다. configuration.nix 파일에 코드 한 줄만 추가해주고,

boot.kernelPackages = pkgs.linuxPackages-libre;

NixOS에 적용하는 명령을 실행해준 뒤,

$ nixos-rebuild switch --flake .#ch1keen

재부팅하면 끝입니다.

(제가 사용하는 configuration.nix 파일은 여기에.)
uname -a 명령어의 결과와, /etc/os-release 파일의 내용
만약 linux-libre 커널이 잘 적용되었다면 uname -a 명령어를 실행했을 때 커널 버전 뒤에 -gnu라는 접미사가 붙습니다.


마치며


자유 소프트웨어에 대한 논쟁은 요즘은 기술적인 측면에서의 것보다는 본인의 사상과 신념이 더 크게 좌우한다는 생각이 듭니다.

일례를 들면 소스 코드가 모두 공개된 자유 소프트웨어를 쓰는 것은 사람들에게 더욱 높은 개인 정보 보호와 시스템 전반의 보안을 위해 좋다고 이야기하는 것은 타당한 이야기입니다. 하지만 소프트웨어를 쓰는 모두가 리눅스 커널 레벨의 개발을 할 줄 아는 것은 아닙니다. 그러면 소스 코드가 공개되어 있다고 하더라도 개인이 작성한 소스 코드를 온전히 신뢰할 수 있을지 알 길이 없고, 그 사람이 회사 측면에서 만들어 제공하는 펌웨어보다 보안 취약점이 적을 거라고 볼 수도 없을 겁니다. 더구나 회사 입장에서 일부러 백도어가 있는 소프트웨어를 만들 필요가 없는 것이, 보안 취약점이 발생하는 등 회사의 신뢰도가 떨어지면 이는 주가에 영향을 미칩니다.
멜트다운과 스펙터, CPU의 보안이 통째로 무너지다 - 동아일보, 2018년 1월 4일

또, 오픈 소스 커뮤니티가 항상 신뢰를 기반으로 움직이는 것은 아닙니다. 올해 2024년에 있었던 이 사건은 오픈 소스 커뮤니티에 큰 질문거리 하나를 남겼죠. 수많은 오픈 소스 애호가들이 있고, 버젓이 공개되어 있는 오픈 소스 프로젝트에 어떻게 백도어가 들키지 않고 릴리즈까지 갔는지부터 시작해서요.
XZ 유틸즈에서 발견된 백도어, 오픈소스 커뮤니티를 침체시켜 - 보안뉴스, 2024년 4월 2일 게재

하지만 소수의 누구가 되더라도 자유 소프트웨어를 위한 움직임은 중요하다고 생각합니다. 서비스를 이용하는 사람들의 개인 정보를 팔아치우거나, 소프트웨어 자체의 설계에 문제가 있음을 알고도 이를 고치려 하지 않는 소극적인 태도를 보이는 등 OEM와 거대 회사가 사람들의 신뢰를 저버릴 때, 우리에게는 대안을 선택할 수 있어야 한다고 생각합니다. 그리고 자유 소프트웨어를 사용해보는 것이라도 앞에서 말한 대안을 위한 연구가 될 수 있다고 생각합니다.

실용적인 측면에서 보면, 소스 코드가 공개되어 있다는 것은 윈도우나 리눅스 뿐만 아니라 다양한 운영체제에서 동작할 수 있게끔 포팅할 수 있다는 뜻이기도 합니다. 위에서 보여주었던 AR9271은 오픈 소스 친화적이라는 특성 때문에 칼리 리눅스(Kali Linux)를 세팅할 때 자주 추천받는 드라이버이기도 하죠. linux-libre 프로젝트가 다양한 노트북에 설치지 못하지만, 반대로 특정 하드웨어가 linux-libre를 지원한다면 그 하드웨어가 FreeBSD나 OpenBSD와 같은 다른 운영체제를 잘 지원해줄 가능성이 높습니다.

레딧(Reddit)이나 linux-libre 프로젝트에 관한 포럼을 찾아보면 여기서 더 나아가 OEM에서 제공하는 바이오스(BIOS)를 신뢰하지 못하는 탓인지, 이를 오픈 소스 바이오스로 바꿔 설치하는 사례도 종종 보입니다. 저도 그런 것 해보고 싶은데... 미처 거기까지는 가보지 못했네요.

이렇게 NixOS에 linux-libre 커널을 설치했을 때 발생한 변화는 블루투스를 쓰지 못한다는 점 빼고는 없네요. 다만, 이것도 소스 코드가 공개되어 있는 블루투스 동글을 USB로 연결하면 사용할 수 있기도 하고, 리눅스 노트북에서 블루투스를 사용하지 않아서 그런가 불편한 점은 없네요.

참고(한 문서)


리눅스에서 사유 소프트웨어를 최대한 배제하기 위해, 오픈 소스 친화적인 노트북을 구해볼 수 있습니다. 퓨리즘(Purism) 사의 리브렘 브랜드가 유명합니다.

NixOS에 Linux-libre 커널을 로드하는 것은 아래 게시글을 참고했습니다.

이 게시글을 써야겠다고 마음 먹은 이유는 아래 게시글 때문이었습니다.