LFS 사용자 추가 | SBU 설명 |
4.4. 환경 설정
두 개의 bash 셸 시작 파일을 새로 작성해서 작업 환경을 설정합니다. 사용자 lfs로 로그인한 상태에서 다음과 같이 새로운 .bash_profile
을 만듭니다.
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
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
파일을 생성합니다.
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의 해시 기능을 끕니다. 해시 기능은 일반적으로는 유용한 기능으로, 해시 테이블을 사용하여 실행 파일의 전체 경로를 기억함으로써 동일한 실행 파일을 찾기 위해 경로를 반복해서 검색하지 않아도 됩니다. 하지만 크로스 컴파일 도구는 설치되자마자 사용해야 합니다. 해시 기능을 끄면 프로그램을 실행할 때마다 셸이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장 초반에 설치한 크로스 컴파일러가 설치 직후 셸에서 사용됩니다. 위에서 설정한 해싱을 끄는것과 이 설정으로 크로스 컴파일러 대신 호스트의 컴파일러가 사용될 위험이 줄어듭니다. - 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
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 옵션을 전달하여 수행할 수 있습니다.
make -j32
또는 MAKEFLAGS
환경 변수를 설정하면 해당 내용이 명령줄 옵션으로 make에서 자동으로 사용됩니다.
export MAKEFLAGS=-j32
중요
숫자없는 -j 옵션을 make에 전달하거나 MAKEFLAGS
같은 옵션으로 전달하지 마세요.그렇게 하면 make가 무제한으로 빌드 작업을 생성하여 시스템의 안정성에 문제를 일으킬 수 있습니다.
5장과 챕터 6에서 패키지를 빌드하는 데 사용할 수 있는 모든 논리 코어를 사용하려면 .bashrc
에서 MAKEFLAGS
를 설정하세요.
cat >> ~/.bashrc << "EOF"
export MAKEFLAGS=-j$(nproc)
EOF
모든 논리적 코어를 사용하지 않으려면 $(nproc)를 사용하려는 논리 코어 갯수로 설정하세요.
마지막으로 임시 도구 빌드를 위한 환경이 완전히 준비되었는지 확인하려면 bash 셸이 새로운 사용자 프로필을 다시 읽도록 합니다.
source ~/.bash_profile