일부 프로그램은 아직 존재하지 않는 프로그램에 대한 고정 경로를 사용한다. 이러한 프로그램들을 만족시키기 위해, 이 장의 절차를 거치면서 소프트웨어를 설치한 후 실제 파일로 대체될 여러 심볼릭 링크를 만든다:
ln -sv /tools/bin/{bash,cat,chmod,dd,echo,ln,mkdir,pwd,rm,stty,touch} /bin ln -sv /tools/bin/{env,install,perl,printf} /usr/bin ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib ln -sv /tools/lib/libstdc++.{a,so{,.6}} /usr/lib ln -sv bash /bin/sh
각 링크의 용도:
/bin/bash
많은 bash
스크립트가 /bin/bash
를
지정한다.
/bin/cat
이 경로명은 Glibc의 configure 스크립트에 하드 코딩되어 있다.
/bin/dd
dd
의
경로는 /usr/bin/libtool
유틸리티에 하드
코딩될 것이다.
/bin/echo
/bin/echo
를
참조하는 Glibc의
테스트 스위트 내
테스트 중 하나를
만족시키기
위함이다.
/usr/bin/env
이 경로명은 일부 패키지 빌드 절차에 하드 코딩되어 있다.
/usr/bin/install
install
의
경로가 /usr/lib/bash/Makefile.inc
파일로 하드
코딩될 것이다.
/bin/ln
ln
의
경로는 /usr/lib/perl5/5.30.1/<target-triplet>/Config_heavy.pl
파일에 하드
코딩된다.
/bin/pwd
일부 configure 스크립트, 특히 Glibc의 것에는 이 경로명이 하드 코딩되어 있다.
/bin/rm
rm
의
경로는 /usr/lib/perl5/5.30.1/<target-triplet>/Config_heavy.pl
파일에 하드
코딩된다.
/bin/stty
이 경로명은 Expect로 하드 코딩되어 있어서, Binutils와 GCC 테스트 스위트 통과에 필요하다.
/usr/bin/perl
많은 Perl 스크립트가 perl 프로그램에 대해 이 경로를 하드 코딩한다.
/usr/lib/libgcc_s.so{,.1}
Glibc의 pthreads 라이브러리가 작동하기 위해 필요하다.
/usr/lib/libstdc++{,.6}
GMP의 C++ 지원과 더불어 Glibc의 테스트 스위트에서 몇 가지 테스트를 하기 위해 필요하다.
/bin/sh
많은 셸
스크립트가 /bin/sh
를 하드
코딩한다.
역사적으로
리눅스는 마운팅된
파일 시스템 목록을
/etc/mtab
파일로
관리한다. 최신
커널은 이 목록을
내부적으로
관리하며 /proc
파일 시스템을 통해
사용자에게
공개한다. /etc/mtab
이 존재할
것으로 예상하는
유틸리티들을
만족시키기 위해,
다음 심볼릭 링크를
생성하라:
ln -sv /proc/self/mounts /etc/mtab
root
유저가
로그인할 수 있게
하고 “root” 이름이
인식되게 하려면
/etc/passwd
와 /etc/group
파일에
관련 항목이 있어야
한다.
다음 명령을
실행하여 /etc/passwd
파일을
생성하라:
cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/bin/false
daemon:x:6:6:Daemon User:/dev/null:/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false
nobody:x:99:99:Unprivileged User:/dev/null:/bin/false
EOF
root
에 대한
실제 암호(여기서
사용되는 “x”는
구문표시자일
뿐이다)는 나중에
설정된다.
다음 명령을
실행하여 /etc/group
파일을
생성하라:
cat > /etc/group << "EOF"
root:x:0:
bin:x:1:daemon
sys:x:2:
kmem:x:3:
tape:x:4:
tty:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
input:x:24:
mail:x:34:
kvm:x:61:
wheel:x:97:
nogroup:x:99:
users:x:999:
EOF
생성된 그룹들은
어떤 표준에도
속하지
않는다—부분적으로는
이 장의 Udev 구성의
요구사항에 의해,
부분적으로는 기존
리눅스 배포판에
사용된 공통 규약에
의해 만들어진
그룹이다. 그리고
일부 테스트
스위트들은 특정
유저나 그룹을
필요로 한다. 리눅스
기본 규격(Linux Standard Base, LSB, http://www.linuxbase.org에서
참고)은 그룹 ID (GID) 0인
root
그룹
외에, GID가 1인 bin
그룹도
존재하게 둘 것을
권장한다. 다른 모든
그룹명과 GID는 잘
작성된
프로그램이라면 GID
번호에 의존하지
않고 그룹명을
사용하기 때문에
시스템 관리자가
자유롭게 정할 수
있다.
“I have no
name!” 프롬프트를
지우려면 새 셸을
시작하라.
5장에서 완전한 Glibc가
설치되었고 /etc/passwd
와 /etc/group
파일이
생성되었으므로
이제 유저명과
그룹명을 잘 불러올
것이다:
exec /tools/bin/bash --login +h
+h
지시문의 사용에
주목하라. 이것은
bash의
내부 경로 해싱을
비활성화 한다. 이
명령이 없으면 bash는
바이너리를 실행한
경로를 기억할
것이다. 새로
컴파일된 바이너리
파일이 설치되는
즉시 사용될 수
있도록 이 장에서는
+h
지시문을 사용할
것이다.
login, agetty 및 init 프로그램(및 기타)은 누가, 언제 시스템에 로그인했는지 같은 정보를 기록하기 위해 여러 로그 파일을 사용한다. 그러나 이런 프로그램들은 로그 파일이 이미 존재하지 않으면 로그를 남기지 않는다. 로그 파일을 초기화하고 적절한 권한을 부여하라:
touch /var/log/{btmp,lastlog,faillog,wtmp} chgrp -v utmp /var/log/lastlog chmod -v 664 /var/log/lastlog chmod -v 600 /var/log/btmp
/var/log/wtmp
파일은
모든 로그인과
로그아웃을
기록한다. /var/log/lastlog
파일은 각
유저가 마지막으로
로그인한 시간을
기록한다. /var/log/faillog
파일은
유저의 로그인 실패
정보를 기록한다.
/var/log/btmp
파일은
잘못된 로그인
시도를 기록한다.
/run/utmp
파일은
현재 로그인한
유저를 기록한다. 이
파일은 부팅
스크립트에서
동적으로 생성된다.