6.2. 가상 커널 파일 시스템 준비

커널에 의해 내보내진 다양한 파일 시스템들은 커널 자체와 통신하는 데 사용된다. 이러한 파일 시스템은 디스크 공간이 사용되지 않는다는 점에서 가상적이라 할 수 있다. 파일 시스템의 내용들은 메모리에 상주한다.

파일 시스템을 마운트할 디렉토리를 만드는 것부터 시작한다:

mkdir -pv $LFS/{dev,proc,sys,run}

6.2.1. 초기 장치 노드 생성

커널이 시스템을 부팅할 때 몇 개의 장치 노드, 특히 consolenull 장치가 있어야 한다. 장치 노드는 udevd가 시작되기 전에, 그리고 리눅스가 init=/bin/bash로 시작될 때 사용할 수 있도록 하드 디스크에 생성되어야 한다. 다음 명령을 실행하여 장치를 생성하라:

mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3

6.2.2. /dev 마운팅과 설정

/dev 디렉토리에 장치를 들이는 권장되는 방법은 /dev 디렉토리에 가상 파일 시스템(예: tmpfs)을 마운트하고, 장치가 감지되거나 액세스될 때 해당 가상 파일 시스템에 동적으로 생성되도록 하는 것이다. 장치 생성은 일반적으로 부팅 절차 중 Udev에 의해 이뤄진다. 지금 이 새로운 시스템은 아직 Udev가 없고 부팅되지도 않았기 때문에 수동으로 마운트를 하고 /dev를 채워야 한다. 이를 위해 호스트 시스템의 /dev 디렉토리를 바인딩한다. 바인딩 마운트란 디렉토리나 마운트 지점의 미러를 다른 위치에 만들 수 있는 특별한 유형의 마운트를 뜻한다. 이 작업을 수행하려면 다음 명령을 사용하라:

mount -v --bind /dev $LFS/dev

6.2.3. 가상 커널 파일 시스템 마운팅

이제 나머지 가상 커널 파일 시스템을 마운트한다:

mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run

devpts에 대한 마운트 옵션들의 의미:

gid=5

devpts가 생성한 모드 장치 노드들을 그룹 ID 5가 소유한다. 이것은 우리가 나중에 tty 그룹에 사용할 ID이다. 호스트 시스템이 그 tty 그룹에 다른 ID를 사용할지도 모르기 때문에 이름 대신 그룹 ID를 사용한다.

mode=0620

devpts가 생성한 모든 장치 노드를 0620 모드(사용자는 읽기/쓰기 가능, 그룹은 쓰기 가능)로 설정한다. 위의 옵션과 함께, devpts가 grantpt()의 요구 사항을 만족하는 장치 노드를 생성하도록 한다. 다시말해 기본적으로 설치되지 않는 Glibc pt_chown helper 바이너리가 필요하지 않다는 의미이다.

어떤 호스트 시스템에서는, /dev/shm/run/shm에 대한 심볼릭 링크이다. /run tmpfs은 위에 마운트되었으므로 디렉토리만 작성하면 된다.

if [ -h $LFS/dev/shm ]; then
  mkdir -pv $LFS/$(readlink $LFS/dev/shm)
fi