4.4. 환경 설정하기

bash 셸용 시작 파일을 두 개 새로 생성하여 작업 환경을 설정합니다. 사용자 lfs로 로그인한 상태에서 다음 명령을 실행하여 새 .bash_profile을 만듭니다. lfs 사용자로 로그온하거나 “-” 옵션이 포함된 su 명령을 사용하여 lfs 사용자로 전환한 경우 초기 셸은 호스트의 /etc/profile(일부 설정 및 환경 변수가 포함되어 있을 수 있음)을 읽은 다음 .bash_profile을 읽는 로그인 셸입니다. .bash_profile 파일에서 exec env -i…/bin/bash 명령은 HOME, TERM 및 PS1 변수를 제외하고 완전히 빈 환경을 가진 새 셸로 실행 중인 셸을 대체합니다. 이렇게 하면 호스트 시스템에서 원치 않거나 잠재적으로 위험한 환경 변수가 빌드 환경으로 유출되지 않습니다.

새 셸 인스턴스는 non-login 셸로, /etc/profile 또는 .bash_profile 파일의 내용을 읽고 실행하지 않고 대신 .bashrc 파일을 읽고 실행합니다. .bashrc 파일을 생성합니다. .bashrc 설정의 의미는 다음과 같습니다.

set +h
set +h 명령은 bash의 해시 기능을 끕니다. 해시 기능은 일반적으로 유용한 기능으로, 해시 테이블을 사용하여 실행 파일의 전체 경로를 기억함으로써 동일한 실행 파일을 찾기 위해 경로를 반복해서 검색하지 않아도 됩니다. 하지만 새로운 도구는 설치하자마자 사용해야 합니다. 해시 기능을 끄면 프로그램을 실행할 때마다 셸이 PATH를 검색하도록 강제합니다. 따라서 셸은 호스트 /usr/bin 또는 /bin에 있는 배포판에서 제공한 동일한 프로그램의 이전 버전을 기억하지 않고 에서 즉시 새로 컴파일된 도구를 사용할 수 있는 $LFS/tools/bin에서 찾습니다.

umask 022
사용자 파일 생성 마스크(umask)를 022로 설정하면 새로 만든 파일과 디렉터리는 소유자만 쓸 수 있지만 누구나 읽고 실행할 수 있습니다(기본 모드가 open(2) 시스템 호출에 사용된다고 가정하면 새 파일은 권한 모드 644로, 디렉터리는 모드 755로 끝납니다).

LFS=/mnt/lfs
LFS 변수는 선택한 마운트 지점으로 설정해야 합니다.

LC_ALL=POSIX
LC_ALL 변수는 특정 프로그램의 현지화를 제어하여 해당 메시지가 지정된 국가의 규칙을 따르도록 합니다. LC_ALL을 “POSIX” 또는 “C”(이 둘은 동일)로 설정하면 교차 컴파일 환경에서 모든 것이 예상대로 작동합니다.

LFS_TGT=$(uname -m)-lfs-linux-gnu
LFS_TGT 변수는 크로스 컴파일러와 링커를 빌드할 때와 임시 툴체인을 크로스 컴파일할 때 사용할 기본값은 아니지만 호환 가능한 머신 설명을 설정합니다. 자세한 내용은 툴체인 기술 노트에서 확인할 수 있습니다.

PATH=/usr/bin
많은 최신 리눅스 배포판은 /bin과 /usr/bin을 병합했습니다. 이 경우 챕터 6 환경에서는 표준 PATH 변수를 /usr/bin/으로 설정해야 합니다. 그렇지 않은 경우 다음 줄은 경로에 /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 사용자로 다음을 실행합니다. lfs 사용자가 더 이상 필요하지 않은 경우(7장 시작 부분) /etc/bash.bashrc를 안전하게 복원할 수 있습니다(원하는 경우). 8.35장 "Bash-5.2.21"에서 빌드할 LFS Bash 패키지는 /etc/bash.bashrc를 로드하거나 실행하도록 구성되지 않았으므로 완성된 LFS 시스템에서는 이 파일이 쓸모가 없다는 점에 유의하세요.

여러 프로세서(또는 코어)를 사용하는 많은 최신 시스템의 경우 명령줄 옵션이나 환경 변수를 통해 사용 가능한 프로세서 수를 make 프로그램에 알려주는 “parallel make”를 수행하여 패키지의 컴파일 시간을 줄일 수 있습니다. 예를 들어 인텔 코어 i9-13900K 프로세서는 8개의 P(성능) 코어와 16개의 E(효율성) 코어가 있으며, P 코어는 동시에 2개의 스레드를 실행할 수 있으므로 리눅스 커널에서 각 P 코어는 2개의 논리적 코어로 모델링됩니다. 결과적으로 총 32개의 논리 코어가 있습니다. 이러한 논리적 코어를 모두 사용하는 한 가지 확실한 방법은 make가 최대 32개의 빌드 작업을 생성하도록 허용하는 것입니다. 이는 make에 -j32 옵션을 전달하여 수행할 수 있습니다. 또는 MAKEFLAGS 환경 변수를 설정하면 해당 내용이 명령줄 옵션으로 make에서 자동으로 사용됩니다.

중요 숫자없는 -j 옵션을 make에 전달하거나 MAKEFLAGS같은 옵션으로 전달하지 마세요.그렇게 하면 make가 무한 빌드 작업을 생성하여 시스템 안정성 문제를 일으킬 수 있습니다.

5장과 챕터 6에서 패키지를 빌드하는 데 사용할 수 있는 모든 논리 코어를 사용하려면 지금 .bashrc에서 MAKEFLAGS를 설정하세요. 모든 논리적 코어를 사용하지 않으려면 $(nproc)를 사용하려는 논리 코어 수로 바꾸세요.

마지막으로 임시 도구 빌드를 위한 환경이 완전히 준비되었는지 확인하려면 bash 셸이 새 사용자 프로필을 읽도록 강제 설정합니다.