# 환경 구성
bash
셸의 시작 파일 2개를 생성해서 좋은 작업 환경을 생성하십시오. 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=/usr/bin
if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
PATH=$LFS/tools/bin:$PATH
CONFIG_SITE=$LFS/usr/share/config.site
export LFS LC_ALL LFS_TGT PATH CONFIG_SITE
EOF
.bashrc
의 설정의 의미
set +h
set +h
명령은bash
의 해싱 기능을 끕니다. 해싱은 일반적으로 유용한 기능입니다.bash
는 실행 파일의 전체 경로를 기억하기 위해 해시 테이블을 사용하여PATH
를 항상 검색하지 않고 동일한 실행 파일을 찾습니다. 그러나 새 프로그램은 설치되는 즉시 사용해야 합니다. 해시 함수를 끄면 셸은 프로그램을 실행할 때 항상PATH
를 검색합니다. 따라서 셸은 다른 위치에 있는 동일한 프로그램의 이전 버전을 기억하지 않고 사용 가능한 즉시$LFS/tools
에서 새로 컴파일된 도구를 찾습니다.umask 022
사용자 파일 생성 마스크(umask)를 022로 설정하면 새로 만든 파일 및 디렉터리는 소유자만 쓸 수 있지만 누구나 읽을 수 있고 실행할 수 있습니다(기본 모드는
open(2)
시스템 호출에서 사용된다고 가정할 때 새 파일은 권한 모드 644, 디렉토리는 권한 모드 755가 됩니다).LFS=/mnt/lfs
LFS
변수는 선택한 마운트 지점이어야 합니다.LC_ALL=POSIX
LC_ALL
변수는 특정 프로그램의 지역화를 제어하여 해당 프로그램의 메시지가 지정된 국가의 규약을 따르도록 합니다.LC_ALL
을POSIX
또는C
(둘이 동일)로 설정하면 chroot 환경에서 모든 작업이 예상대로 작동합니다.LFS_TGT=$(uname -m)-lfs-linux-gnu
LFS_TGT
변수는 크로스 컴파일러와 링커를 빌드하고 우리의 임시 툴체인을 크로스 컴파일할 때 사용하기 위해 기본이 아니지만 호환 가능한 기계 설명을 설정합니다.PATH=/usr/bin
많은 최신 리눅스 배포판이
/bin
과/usr/bin
을 병합했습니다. 이 경우 표준PATH
변수는 6장 환경에 대해/usr/bin/
으로 설정하기만 하면 됩니다. 그렇지 않으면 다음 명령어가 PATH에/bin
을 추가합니다.if [ ! -L /bin ]; then PATH=/bin:$PATH; fi
/bin
이 심볼릭 링크가 아니라면, 이는PATH
변수에 추가됩니다.PATH=$LFS/tools/bin:$PATH
표준
PATH
보다$LFS/tools/bin
을 우선시함으로써 5장 시작 부분에 설치된 크로스 컴파일러는 설치 직후 셸에 의해 사용됩니다. 이렇게 하면 해시 해제와 함께 크로스 컴파일러 대신 호스트 컴파일러를 사용할 위험이 최소화됩니다.CONFIG_SITE=$LFS/usr/share/config.site
5장 및 6장에서는 이 변수를 설정하지 않은 경우
configure
스크립트가/usr/share/config.site
에서 일부 배포판 관련 구성 항목을 로드하려고 할 수 있습니다. 호스트에서 발생할 수 있는 오염을 방지하기 위해 재정의합니다.export ...
설정한 모든 변수를 환경 변수에 등록합니다.
중요
여러 상용 배포판에서 /etc/bash.bashrc
의 문서화되지 않은 인스턴스화를 bash
초기화에 사용합니다. 이 파일에는 중요한 LFS 패키지 발드에 영향을 미칠 수 있는 방법으로 lfs
사용자의 환경을 수정할 수 있는 가능성이 있습니다. lfs
사용자의 환경이 깨끗한지 확인하려면 /etc/bash.bashrc
가 있는지 확인하고 있는 경우 더미 파일로 변경합니다. root
유저로 다음을 실행합니다.
[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE
7장에서 lfs
유저의 사용이 끝난 다음 원한다면 /etc/bash.bashrc
를 복구할 수 있습니다.
마지막으로, 임시 도구를 빌드하는 데 필요한 모든 환경을 준비하려면, 방금 생성한 사용자 프로필을 반영하십시오:
source ~/.bash_profile