다음 이전 차례

8. 흔히 발생하는 문제점들

왜 ifconfig를 실행시켰을때 "Cannot locate module for net-pf-X"라는 메시지가 표시되는가?


   커널 1.3.80에서 네트워킹 코드는 프로토콜 패밀리(예를 들면 AX.25나
   AppleTalk)를 모듈로 로드할 수 있도록 변경되었다. 이를 위해 새로운 kerneld
   request: net-pf-X를 추가되었다.(이때 X는 프로토콜을 가리키는 번호, 이 번호에
   대해 알려면 /usr/src/linux/include/linux/socket.h를 확인해 본다)
   불행하게도 ifconfig는 때때로 이 메시지를 트리거시켜 많은 사람들이 시스템을
   부팅할때나 loopback 디바이스를 설정하기 위해 ifconfig를 실행시킬때 이러한
   메시지를 보게 된다. 물론 이 메시지는 결코 위험한 것이 아니고 단지 다음과
   같은 내용을 /etc/conf.modules에 추가하여 메시지가 나타나지 않게 할 수 있다.

        alias net-pf-3 off      # Forget AX.25
        alias net-pf-4 off      # Forget IPX
        alias net-pf-5 off      # Forget AppleTalk

   물론 IPX를 모듈로 사용하고자 한다면 위와 같은 내용을 추가해서는 안된다.
  kerneld를 실행한 후 ppp 연결을 활성화시키면 컴퓨터가 갑자기 느려진다.

이러한 내용에 대한 보고가 몇 번 있었다. 이는 kerneld와 tkPPP 스크립트 사이에 부적절한 동작이 일어나는 것으로 추측된다. tkPPP 스크립트는 몇몇 시스템에서 PPP 연결을 설정하고 모니터링하는데 사용되는데 이 스크립트는 ifconfig가 동작하는 동안 루프를 돈다. 이것은 kerneld로 하여금 net-pf-X 모듈을 찾게 하고, 시스템 로드를 높게 유지시켜 시스템로그에 "Cannot locate module for net-pf-X"라는 메시지를 쏟아내게 한다. 아직까지는 tkPPP를 사용하지 않거나 다른 방법으로 PPP 연결을 모니터링하도록 하는 방법 밖에 없다.

kerneld가 SCSI 드라이버를 로드하지 않는다.


   /etc/conf.modules에 SCSI 호스트어댑터를 추가한다. 이 글의 위쪽에 있는
   scsi_hostadapter에 대한 내용을 확인해 본다.


  modprobe가 "gcc2_compiled"가 정의되어 있지 않다고 투덜거린다.
 

이것은 2.6.0.9 이후 버전의 binutils에서만 보여지는 module-utilities의 버그 이다. 그리고 이러한 내용은 binutils 의 releasenote에 문서화되어 있다. 그 글을 읽어보는 것이 좋다. 혹은 modules-2.0.0과 같이 이 버그를 고친 module-utilities로 업그레이드한다.

사운드 드라이버가 볼륨과 같은 설정값을 자꾸 잊어버린다.


   모듈에 대한 설정값은 모듈이 로드될때 모듈 자체에 저장된다. 그러므로 kerneld
   가 모듈을 자동으로 언로드하면 사용자가 지정한 설정값은 날아가 버리고
   다음에 모듈을 로드하면 기본값을 복원된다.
   이러한 문제점을 해결하기 위해 모듈이 자동으로 로드된 후 프로그램을 실행시켜
   모듈의 설정값을 바꾸도록 할 수 있다. 이 글의 "post-install" 항목을 읽어본다.


  DOSEMU가 몇몇 모듈을 필요로 하는데 kerneld가 이것들을 어떻게 로드하도록
  하는가?

이것은 불가능하다. 어떠한 dosemu 버전도 - 공식 버전이건 개발버전이건- kerneld를 통한 dosemu 모듈을 로드하는 것을 지원하지 않는다. 그러나 만일 2.0.26이나 그 이후의 커널을 사용하고 있다면 더 이상 어떠한 dosemu 모듈이 필요하지 않다. 단지 dosemu를 0.66.1로 업그레이드하면 된다.

왜 "Ouch, kerneld timed out, message failed"와 같은 메시지가 출력되는가?


   커널이 kerneld 에게 신호(request)를 보내면 1초 내에 응답 신호
   (Acknowledgement)가 올 것으로 예상한다. 만일 kerneld가 이 응답 신호를
   보내지 못한다면 이 메시지는 로그파일에 기록된다. 커널은 신호(request)를
   다시 보낼 것이고 결국은 해결 될 것이다.

   이것은 대개 시스템에 로드가 심할 때 일어난다. 이것은 kerneld가 사용자 모드
   프로세스이기 때문에 시스템의 다른 프로세스처럼 스케쥴링된다. 그러므로 로드가
   심할때는 kerneld 타임 아웃이 되기 전에 커널에게 응답 신호(acknowledgement)를
   제 때 보내지 못할 수 있다.

   만일 로드가 심하지 않을 때 이런 일이 발생하면 kerneld를 다시 실행시켜 본다.
   (kerneld 프로세스를 종료시키고 /usr/sbin/kerneld 명령을 다시 실행시킨다)
   만일 문제가 계속 발생한다면 <url url="mailto: linux-kernel@vger.rutgers.edu" name=" linux-kernel@vger.rutgers.edu" >에게 메일을 보낸다.
   이때 문제점을 포스팅하기 전에 kernel과 kerneld가 최신 버전인지 확인해야
   한다.


  kerneld가 파일 시스템 모듈을 로드할때까지 mount가 기다리지 않는다.

mount(8) 명령어가 kerneld가 파일시스템 모듈을 로드할 때까지 기다리지 않는 다는 보고가 있었다. lsmod는 kerneld가 모듈을 로드했다고 할 때, mount를 반복하면 마운트를 할 수 있을 것이다. 이것은 module-utilities 1.3.69f 버전 의 버그로 보이는데 이것은 Debian 사용자에게 영향을 미친다. 최신 버전의 module-utilities를 사용하면 문제점을 해결할 수 있다.

kerneld가 ncpfs 모듈을 로드하지 못한다.


   ncpfs 유틸리티를 컴파일할때 반드시 -DHAVE_KERNELD옵션을 주어야 한다.
   ncpfs Makefile을 살펴본다.


  kerneld가 smbfs 모듈을 로드하지 못한다.

아마도 smbmount 유틸리티의 버전이 오래된 것일 것이다. 최신 버전(0.10이나 그 후)을 가져와 사용한다.

tsx-11.mit.edu/pub/linux/filesystems/smbfs/

나는 모든 것을 모듈로 빌드했는데 시스템이 부팅되지 않는다. kerneld가 루프 파일 시스템 모듈을 로드하지 못한다. 모든 것을 모듈로 만들 수는 없다. 커널은 루트 파일 시스템을 마운트할 수 있도록 충분한 드라이버를 가지고 있어야 하고 kerneld를 실행시키는데 필요한 프로그램들을 가지고 있어야 한다. 그러므로 다음과 같은 것들은 모듈로 만들 수 없다.

[실은 위에서 말한 내용이 사실은 아니다. 1.3.x 이후 버전과 2.x 대의 커널은 initial ram-disk를 LILO라 LOADLIN에 의해 로드할 수 있도록 하고, 부트 과정에서 모듈들을 이 "디스크"에서 로드할 수 있다. 자세한 정보는 커널 소스의 Documentation/initrd.txt 파일에서 얻을 수 있다.]

kerneld가 부트할때 로드되지 않고 libgdbm에 대해 불평한다.

새로운 버전의 kerneld는 실행하는데 GNU dbm 라이브러리 libgdbm.so를 요구한다. 대개 /usr/lib에 이 파일이 설치되지만 혹시나 /usr 파일 시스템을 로드하기 전에 kerneld를 실행시킬 수도 있다. 이 경우 kerneld는 부트할때 실행되지는 않지만, 시스템이 부팅된 후 사용자가 직접 kerneld를 실행시켜도 괜찮다. 해결 방법은 /usr 이 마운트된 후 kerneld 스타트 업을 옮기거나 gdbm 라이브러리 를 루트 파일 시스템 - 예를 들면 /lib - 로 옮긴다.

"Cannot load module xxx"라는 메시지가 표시되지만, 커널을 빌드할때 xxx를 포함시키지 않았다.


   슬랙웨어는(혹은 다른 배포본도) 다양한 모듈에 대해 /etc/rc.d/rc.modules에서
   modprobe를 실행시킨다. 이때 어떤 모듈을 modprobe할 것인가는 원래 커널 설정에
   따른다. 그러므로 커널을 재설정하면서 rc.modules에 포함되지 않은 모듈을
   설치하였다면 에러를 발생시키게 된다. 그러므로 rc.modules에서 사용하지 않는
   모듈은 주석으로 바꾸고, 새로 추가한 모듈의 주석 표시를 제거하여 kerneld가
   필요한 모듈이 어떤 것인지 제대로 알 수 있도록 한다.


  커널과 모듈을 다시 빌드하였는데 여전히 부팅할때 unresolved symbols라는
  메시지가 표시된다.

아마도 사용자는 커널을 재설정하고 다시 빌드하여 몇몇 모듈을 제외시켰을 것이다. 그 결과 더 이상 사용되지 않는 모듈이 /lib/modules 디렉토리에 남아 있게 된다. 이런 문제를 해결하는 가장 쉬운 방법은 /lib/modules/x.y.z 디렉토리를 지우고 커널 소스 디렉토리에서 'make modules_install'을 다시 하는 것이다. 이때 버전을 바꾸지 않고 커널을 재설정에만 문제가 발생한다. 만일 새로운 커널 버전으로 바꾸었을때 이러한 에러를 만난다면, 또 다른 이유에서 문제가 발생한 것이다.

리눅스 커널 2.1을 설치했는데 모듈이 로드되지 않는다.


   리눅스 커널 2.1이 현재 개발 커널 버전이다. 그러므로 많은 것들이 수시로
   변할 것이다. 가장 크게 바뀐 중 하나는 모듈을 처리하는 방법과 커널과
   모듈이 메모리에서 로드되는 곳이다. 현재 Richard Henderson은 모듈 커널
   개발을 책임지고 있다.
   요약해서 말하자면, 만일 커널 2.1 에서 모듈을 사용하고 싶다면 반드시

     * 시스템에서 업그레이드해야할 패키지를 설명한 Documentation/Changes 파일
       을 읽는다.

     * 최신 modutils 패키지를 사용한다. 아래의 곳에서 구할 수 있다.

       <url url="ftp://ftp.redhat.com/pub/alphabits/ or the mirror site at" name="ftp.redhat.com/pub/alphabits/ or the mirror site at" >
       <url url="ftp://tsx-11.mit.edu/pub/linux/packages/alphabits/" name="tsx-11.mit.edu/pub/linux/packages/alphabits/" >

   만일 커널 2.1 대의 커널에서 모듈을 사용하고 싶다면 최소한 2.1.19 버전의
   커널을 사용할 것을 권한다.


  Dial-on-demand 네트워킹은 ?

kerneld는 원래 on demand 다이얼 업 네트워크를 지원하도록 되어 있다: 연결되지 않은 상황에서 네트워크로 패킷을 보내면 kerneld가 PPP나 SLIP 연결을 만들기 위해 /sbin/request_route 스크립트를 실행시킨다. 이러한 방법은 그리 좋은 아이디어가 아니라고 밝혀졌다. 리눅스 네트워킹을 담당하고 있는 Alan Cox는 리눅스 커널 메일링 리스트에 다음과 같이 썼다. Request-route 기능은 진부한 것이고 이미 망가진 것이어서 커널 2.1.x 대에 서 제거되었다.

request-route 스크립트와 kerneld를 사용하는 대신 www.dna.lth.se/~erics/diald.html 에서 구할 수 있는 Eric Schenk's의 diald 패키지를 설치할 것을 충고한다.

Copyright Messages



   This document is Copyright (c) Henrik Storner, 1996, 1997.
   Unless otherwise stated, Linux HOWTO documents are copyrighted by
   their respective authors. Linux HOWTO documents may be reproduced and
   distributed in whole or in part, in any medium physical or electronic,
   as long as this copyright notice is retained on all copies. Commercial
   redistribution is allowed and encouraged; however, the author would
   like to be notified of any such distributions.
   All translations, derivative works, or aggregate works incorporating
   any Linux HOWTO documents must be covered under this copyright notice.
   That is, you may not produce a derivative work from a HOWTO and impose
   additional restrictions on its distribution. Exceptions to these rules
   may be granted under certain conditions; please contact the Linux
   HOWTO coordinator at the address given below.
   In short, we wish to promote dissemination of this information through
   as many channels as possible. However, we do wish to retain copyright
   on the HOWTO documents, and would like to be notified of any plans to
   redistribute the HOWTOs.
   If you have questions, please contact Greg Hankins, the Linux HOWTO
   coordinator, at <url url="mailto: gregh@sunsite.unc.edu" name="gregh@sunsite.unc.edu" > via email.


다음 이전 차례