Linux generic

psycho 2011. 10. 30. 21:37

 이 글을 일부러 찾은 이라면, CentOS 6 배포판의 커널(정확히는 initrd) 패키징에 관여한 모든 이들을 저주할 것이라 믿는다. 필자는 그런 만행을 저지른 인간들에게 대한민국 군인용 비공식 얼차려를 부여하면서 '굳이 필요하다면 VESA로 충분하다' 라 충고해주고 싶다.


 CentOS 6에는 nouveau라는 NVidia 그래픽카드용 프레임버퍼 모듈이 들어가 있다. 이런 녀석들이 왜 들어가있냐 하면, 부팅시에 화려한 연출(?)이 가능하기 때문이다. 뭔 소린지도 모르는 문장들이 휙휙 지나가는(?) 리눅스 커널의 콘솔 부팅 화면을 본 적이 있다면, 대부분의 일반 사용자들에게 부팅 과정에서 그런 지옥도 대신 포장할 무언가를 제공하는 것은 상당히 가치가 있는 일이라 생각할 것이다.


 다 좋은데, 문제는 이 녀석이 NVidia에서 제공하는 드라이버와 충돌을 일으킨다는 것, 더 큰 문제는 이 녀석을 어떻게든 없애야 NVidia에서 제공하는 드라이버를 설치할 수가 있다는 것이다. 필자가 이 글 시작 부분에 저런 비난을 퍼부은 이유도 여기에 있다. 물론 여기 나온 응급처치법을 혼자서 생각해내지 못할 수준의 초보자1가 리눅스 첫 경험 상대로 CentOS를 선택할 가능성이야 낮겠지만, 설치와 사용의 편의성을 추구하는 리눅스 배포판에서 이런 삽질을 해놔서야 되겠냐는 것이다.


 그러면 이 골치아픈 녀석을 어떻게 해야 될까? 일단 NVidia 드라이버를 설치하기 위해서는 다음 조건이 충족되어야 한다2.


 1. superuser 권한을 갖고 있을 것3.

 2. X server가 실행되고 있지 않을 것.

 3. nouveau 모듈을 사용하고 있지 않을 것.


1번이야 별 문제 없을 것이다. 2번의 경우는 superuser 권한으로 '/sbin/init 3' 명령을 실행하여 해결할 수 있다. 문제는 3번인데, 일반적인 경우라면 아래 명령으로 해결될 것이다.


 [root@localhost ~]# modprobe -r nouveau


그런데 웬걸? 콘솔에서 nouveau 프레임버퍼를 이용하기 때문에 아무리 '좀 사라져 주실래요' 해봤자 씨알도 안 먹힌다. 이런 상황에서 수동으로 해결하는 방법이라... 그건 필자나 이런 글을 찾아서 봐야 하는 독자들4에게는 너무 버거운 괴수들의 영역이므로, 보다 간단한 방법을 이용할 것이다. 바로 애초에 nouveau 모듈이 올라오지 않게 하는 것이다.


 먼저 /etc/modprobe.d/에 disable-nouveau.conf라는 파일을 하나 만든다(이름은 뭐든 상관없다. '.conf'로 끝나는 것만 지키면 된다). 그 내용은 다음과 같이 한다(참고로, 아래 내용은 실제로 NVidia 드라이버 설치 프로그램에서 자동으로 생성해주는 파일의 내용이다. 몇몇 배포판에서는 이걸로도 충분하다고 하지만, 아쉽게도 CentOS는 예외이다).


blacklist nouveau

options nouveau modeset=0

 다음으로, /boot/grub/grub.conf를 편집한다. kernel 행의 마지막에 rdblacklist=nouveau를 추가한다.

 ex) kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=UUID=c6f60c9a-2310-4c8a-8429-41289d03e3a5 rdblacklist=nouveau


 이제 재부팅한다. 부팅시에 runlevel을 3으로 지정해도 되고, 그냥 부팅한 다음에 '/sbin/init 3'을 해도 된다. 그렇게나 고생시키던 nouveau을 제거하는 데 성공했을 것이다. 이제 NVidia 드라이버를 설치한다. 이것으로 모든 문제는 해결되었다!


ps. 실험정신을 숭상하는 독자들에게 미리 말해둔다. NVidia 드라이버를 설치한 다음, disable-nouveau.conf를 삭제하거나 grub.conf의 수정사항을 원래대로 되돌리지 마라. 이후에 어떤 프로그램이 이 수정사항을 건드렸다면, 다시 작업해주어야 한다. 그렇게 하지 않았을 때 발생하는 모든 현상에 대한 책임은 필자의 경고를 무시한 독자에게 있다(무시무시한 표현이라 생각하겠지만, 실제로 일어나는 일은 별 거 없다. 단지 X server가 제대로 동작하지 않을 뿐이다. 이유는 글 서두에서 밝힌 대로 nouveau와 nvidia 모듈이 충돌하기 때문이다).


각주 1

비하의 표현으로 받아들이지는 말자. 진짜 괴물들에 비하면 필자도 마찬가지 입장이다

각주 2

물론 더 있을 수도 있지만, 적어도 필자는 이 이상의 것이 필요하지 않았다. 더 필요한 것이 있다면 이후에 추가할 것이다

각주 3

당연하다. 커널 모듈 컴파일에 initrd를 수정해야 한다

각주 4

당연히 그런 게 가능한 자라면 이 글을 읽을 필요가 없다

  1. 비하의 표현으로 받아들이지는 말자. 진짜 괴물들에 비하면 필자도 마찬가지 입장이다 [본문으로]
  2. 물론 더 있을 수도 있지만, 적어도 필자는 이 이상의 것이 필요하지 않았다. 더 필요한 것이 있다면 이후에 추가할 것이다 [본문으로]
  3. 당연하다. 커널 모듈 컴파일에 initrd를 수정해야 한다 [본문으로]
  4. 당연히 그런 게 가능한 자라면 이 글을 읽을 필요가 없다 [본문으로]
아주 큰 도움이 되었습니다~ 감사합니다^^