4.4. 환경 구축

bash 셸에 대한 두 개의 새 시작 파일을 만들어서 작업하기 좋은 환경을 설정한다. lfs 유저로 로그인하고 다음 명령을 실행하여 새 .bash_profile을 생성하라:

cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF

lfs 유저로 로그인하면, 기본 셸은 보통 호스트의 (여러 설정과 환경 변수가 들어있는)/etc/profile.bash_profile 을 차례로 읽는 로그인 셸이다. .bash_profile파일의 exec env -i.../bin/bash 명령은 HOME, TERM, 그리고 PS1 변수를 제외하고 실행 중인 셸을 완전히 비어 있는 환경으로 대체한다. 이는 환경 변수들이 호스트 시스템에서 빌드 환경으로 의도치 않게 유출될 일이 없게 한다. 이런 테크닉으로 깨끗한 환경을 유지한다는 목표를 달성할 수 있다.

셸의 새 인스턴스는 /etc/profile이나 .bash_profile을 읽지 않고 .bashrc를 읽는 비-로그인 셸이다. 이제 .bashrc 파일을 만든다:

cat > ~/.bashrc << "EOF"
set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
LFS_TGT=$(uname -m)-lfs-linux-gnu
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
EOF

set +h 명령은 bash의 해시함수를 끈다. 해싱은 일반적으로는 유용한 기능이다—bashPATH를 검색하고 다시 같은 실행 파일을 검색하는 것을 방지하고자 실행 파일들의 전체 경로를 기억하는 데에 해시 테이블을 사용한다. 그러나, 이 새로운 도구들은 설치하자마자 바로 사용해야 한다. 해시함수를 끄면 셸은 프로그램이 실행될 때 항상 PATH를 검색할 것이다. 이러면 셸은 다른 위치에 있는 동일한 프로그램의 기존 버전을 불러오지 않고 $LFS/tools에서 새로 컴파일되어 사용 가능해진 도구를 찾을 것이다.

사용자 파일 생성 마스크(umask)를 022로 설정하면 새로 생성된 파일과 디렉토리가 오로지 소유자만 쓰기 가능하면서 누구나 읽고 실행 가능한 상태가 된다. (기본 모드가 open(2) 시스템 호출에 의해 쓰여진다고 가정하면, 새 파일은 권한 모드 644를, 디렉토리는 755를 가진다.)

LFS 변수는 선택한 마운트 지점으로 설정되어야 한다.

LC_ALL 변수는 프로그램들의 언어 설정을 담당하여 메시지들을 지정된 국가의 언어로 내보낸다. LC_ALLPOSIXC(둘의 결과는 같다)로 설정하면 chroot 환경에서 문제가 생기지 않을 것이다.

LFS_TGT 변수는 크로스 컴파일러와 링커를 빌드할 때, 그리고 임시 툴체인을 크로스 컴파일할 때 기본 지원은 아니지만 호환되는 시스템을 설명하는 데 사용된다. 자세한 설명은 5.2절. “툴체인 기술 노트”을 참조하라.

/tools/bin을 원래 PATH보다 앞에 두면, 5장에서 설치된 모든 프로그램들이 설치되자마자 셸에 인식된다. 이것은 해싱을 끄는 것과 더불어 5장에서 같은 프로그램이 공존할 때 호스트로부터 기존 프로그램들을 사용하는 실수를 방지한다.

끝으로, 방금 만든 사용자 프로필을 적용하여 임시 도구 빌드 환경의 준비를 마친다:

source ~/.bash_profile