FC3 사용자는 설치후 udev-039-10.FC3.1로 경신(update)해야 한다.

실수로 FC3 udev 패키지에 디버깅 코드를 제거하지 않아, SIGCHLD 시그널이 udev에서 봉쇄되어 udev.rules의 정상 종료 상태(proper exit status)를 방해한다(,which prevents getting the proper exit status in udev.rules). 이로인해 시디롬 심볼링크(cdrom symlinks)가 만들어 지지 못하여, pam_ console이 데스크탑 사용자 소유권(desktop user ownerships)을 시디롬 디바이스에 적용할 수 없음을 의미한다.

휘도라 코아 3를 설치한 모든 사용자는 긴급히 이 버전으로 향상(upgrade)시켜야 한다.

이 갱신(update)용 파일들은 여기에서 다운 받을 수 있다.

fce34e8e8ab6a54d07c46d2626529e22 SRPMS/udev-039-10.FC3.1.src.rpm
e86fc1ec12edddd4f7ca68bfebe956cc x86_64/udev-039-10.FC3.1.x86_64.rpm
8b69da0b3adb624a11fc8185f98bada6 x86_64/debug/udev-debuginfo-039-10.FC3.1.x86_64.rpm
7df95371172d0b52452df76612cf674d i386/udev-039-10.FC3.1.i386.rpm
9897ebb971ab099de04c9ceb1ad31b57 i386/debug/udev-debuginfo-039-10.FC3.1.i386.rpm

이 업그레이드는 Update Agent로도 수행할 수 있다; ‘up2date’ 명령으로 Update Agent를 기동할 수 있다.

휘도라에서의 udev

By Harald Hoyer

본 문서는 udev의 비밀과 휘도라에서 작동하는 방법을 밝히려 한다.

Udev는 Dan Stekloff <dsteklof@us.ibm.com>, Kay Sievers , 그리고 다른 많은 분들의 도움을 받고 Greg Kroah-Hartman <greg@kroah.com>이 개발했다.
udev homepage와 the Linux-hotplug-devel mailing list https://lists. sourceforge.net/lists/listinfo/linux-hotplug-devel가 주요 개발 자원이다.

Udev가 하는 일은?

udev는 실제로 존재하는 디바이스에 대한 파일만을 포함하는 동적 디바이스 디렉토리를 제공한다. 보통 /dev/ 디렉토리에 있는 디바이스 노드 파일들을 만들거나 제거하고 혹은 네크워크 인터페이스에 새 이름을 붙여준다(or it renames network interfaces.).

hotplug 서브시스템의 일부로서, 만일 커널 디바이스가 추가되거나 시스템에서 제거되면, udev가 실행된다. 디바이스 생성시, udev는 라벨, 시리얼 번호, 또는 버스 디바이스 번호와 같은 디바이스 속성을 수집하기 위해 주어진 디바이스의 sysfs 디렉토리를 읽는다. 이 속성은 디바이스의 고유한 이름(uni-que name)을 결정하는 열쇠(keys)로 사용될 수 있다. udev는 시스템에 존재하는 디바이스에 대한 데이터베이스를 유지한다. 디바이스 제거시, udev는 삭제될 디바이스 파일을 찾기 위해 데이터베이스를 검색한다.

모듈이 적재되면, hotplug에 의해 udev가 호출되고, 디바이스가 추가되거나 제거된다. 만일 디바이스 노드가 드라이버와 통신할 수 있는 메이져와 마이너 번호(major and minor number)를 포함하고 있는 “dev” 파일을 드라이버가 제공하면, udev는 /sys/안을 들여다본다. 디바이스 노드 파일명과 심볼릭링크(symlinks)를 지정하는 /etc/udev/rules.d/디렉토리에 있는 udev 규칙을 살펴본후, 디바이스 노드는 /etc/udev/permissions.d/에 지정된 허가(perm-issions)를 갖고 /dev/에 생성된다.

디바이스 노드 생성, 제거, 혹은 네트워크 디바이스의 이름을 새로 붙인 후, udev는 /etc/dev.d/아래 디렉토리 트리(directory tree)에서 프로그램을 실행한다. 프로그램의 이름은 알아보기 쉽게 .dev란 접미사를 붙여야 한다. hot-plug 환경 변수에 더하여, DEVNAME도 생성된 노드의 이름이나 네트워크 디바이스의 새로 붙여진 이름이 실행된 프로그램에 이용될 수 있도록 보내진다(be exported). 모든 디렉토리에 있는 프로그램은 사전적 순서로 정렬되는 반면, 디렉토리는 다음 순서로 조회된다:

• /etc/dev.d/$(DEVNAME)/*.dev
• /etc/dev.d/$(SUBSYSTEM)/*.dev
• /etc/dev.d/default/*.dev
Udev가 휘도라에 어떻게 통합되는가?

initrd / initfs

mkinitrd는 /sbin/udev.static를 initrd /sbin/udev에 복사하고 /sbin/udev start에 심볼릭 링크를 한다(symlink).

커널이 부팅한 후, initrd의 내쉬 스크립트(nash script)를 실행한다. 이것은 tmpfs 파일 시스템을 /dev/에 마운트한다. hotplug대신에, /sbin/udev는 initrd 단계(phase)에서 호출된다. udevstart는 디바이스에 대한 모든 디바이스 노드를 생성하는 데, 이 디바이스는 커널에 컴파일(compile)되고 그 모듈은 내쉬(nash)에 의해 적재된다.

문제점

전(whole) udev와 hotplug 하부구조(infrastructure)가 initrd에 이용될 수 있는 것은 아니다. 따라서, hotplug 스크립트, udev 규칙, 허가(permissions), 그리고 /etc/dev.d/ 스크립트가 커널이 보낸 어떠한 hotplug event에 대해서든 모두 실행되는 것은 아니다.

rc.sysinit

제일 먼저, SELinux가 적재되고 활성화되면, /dev/의 문맥이 설정(set)된다. rc.sysinit는 /sbin/start_udev를 호출한다. start_udev는, 아직 마운트된 것이 없다면, tmpfs 파일시스템을 /dev/에 마운트시킨다. 이 때, 모듈 자동적재가 필요하거나 커널 모듈이 없는 곳에 디바이스 노드를 생성한다. 그리고나서, /sbin/udevstart는 다시 호출된다. 즉, 전 udev와 허가(permissions)을 적용하기 위해, initrd 단계에서 hotplug event를 모의 실험한다(? simulate). 그리고, rc.sysinit는 /sbin/kmodule의 결과물를 분석하고(parse) 모든 모듈을 적재한다. 이것은 컴퓨터에서 발견된 모든 하드웨어에 디바이스 노드를 제공할 것이다.

콘솔 사용자 허가(Console User Permissions)

디바이스노드가 생성될 때마다 /etc/dev.d/default/pam_console.dev가 호출되어, 디바이스 노드의 파일명(선택적으로 심볼릭 링크도 같이)과 함께 /sbin/ pam_console_setowner를 호출한다. 이것은 /etc/security/console.perms에서 지정한대로 콘솔 사용자를 위한 허가를 설정한다.

휘도라에서 udev를 커스터마이징하기

udev와 udevinfo의 매뉴얼페이지를 읽어보자. RPM 패키지 파일을 수정하지 말자.

새 규칙

새 규칙은 /etc/udev/rules.d/에 .rules로 끝나는 파일에 있어야 한다. 50-udev.rules은 사용하지 마라. 지지받고 선호받는 방법은 “NAME” tag없이 규칙을 생성하고 “SYMLINK”만을 만드는 것이다.

규칙 작성법에 관한 좋은 문서는 http://www.reactivated.net/udevrules.php에서 찾을 수 있다.

허가

새 허가는 /etc/udev/permissions.d/에 .permissions로 끝나는 파일에 있어야 한다. 50-udev.permissions는 사용하지 말자.

그러나 자신의 디바이스 노드의 사용를 간절히 원한다면!

원하는 디바이스 노드를 /etc/udev/devices/에 놔두자. 그러면 /dev/에 복사될 것이다. 만일 기본 실행으로 처리 되야 한다고 생각되면, a bugzilla entry에 의견을 올리자.

/dev/없이 udev를 업데이트하기

아나콘다나 복구 CD없이 업그레이드하는 단계(추천하고 싶지 않다):

• kernel-2.6을 시작한다
• /sys/가 마운트된 것을 확인한다
• 최신 initscripts 패키지를 설치한다
• 최신 udev 패키지를 설치한다
• /sbin/start_udev를 실행한다
• 최신 mkinitrd 패키지를 설치한다
• 최신 kernel 패키지를 설치한다
• 혹은 기존 커널에 대해서 mkinitrd 를 실행한다

initrd 없는 udev

보통 때처럼 휘도라 코아를 설치하고 재부팅한다. 다음 명령을 실행한다

mkdir /tmp/dev
mount --move /dev /tmp/dev
sbin/MAKEDEV null console zero
mount --move /tmp/dev /dev

initrd 없이 커널을 설치하고 재부팅한다.

SELinux 오류가 발생하고 syslogd는 바라던 대로(as expected) 동작하지 않을 것이다.



휘도라에서의 현 문제

udev에 대하여 알려진 모든 버그
Nvidia

빠른 해결: 만일 rhgb가 필요치 않으면, 단지 /etc/rc.local에 nvidia 모듈을 적재한다.

만일 udev>=032-5이면, nvidia 모듈을 적재한다:

cp -a /dev/nvidia* /etc/udev/devices
chown root.root /etc/udev/devices/nvidia*

이 문제에 관련된 버그질라는 133900이다.

Palm Pilot

만일 udev >= 032-5이면, 다음 명령을 실행한다:

ln -s ttyUSB1 /etc/udev/devices/pilot
ISDN
만일 udev >= 032-5이면:

/sbin/MAKEDEV -d /etc/udev/devices isdn


Copyright © 2003-2004 Red Hat, Inc. All rights reserved.
The Fedora Project is not a supported product of Red Hat, Inc.
Legal | Trademark Guidelines
This page last modified at: 2004/11/08 16:28:47
2010/08/01 23:38 2010/08/01 23:38

Trackback Address :: https://youngsam.net/trackback/1284