차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
linuxfromscratch:12.1:028-setting_up_the_environment [2024/05/03 02:50] baecylinuxfromscratch:12.1:028-setting_up_the_environment [2024/06/14 14:45] (현재) baecy
줄 1: 줄 1:
-===== 4.4. 환경 설정하기 ===== +^  Linux From Scratch - Version 12.1-systemd  ^^^ 
-**bash** 셸용 시작 파일을 두 개 새로 하여 작업 환경을 설정합니다. 사용자 //lfs//로 로그인한 상태에서 다음 명령을 실행하여 새 ''.bash_profile''을 만듭니다: +^  Chapter 4. Final Preparations  ^^^ 
-<code lang=bash>+|[[.:027-Adding the LFS User|이전]]  |  [[.:04-final_preparations|위로]] / [[.:12.1|처음으로]]  |  [[.:029-About SBUs|다음]]| 
 + 
 +|LFS 사용자 추가  |  SBU 설명| 
 + 
 +---- 
 + 
 +===== 4.4. 환경 설정 ===== 
 + 
 +두 개의 **bash** 셸 시작 파일을 새로 해서 작업 환경을 설정합니다. 사용자 //lfs//로 로그인한 상태에서 다음과 같이 로운 ''.bash_profile''을 만듭니다
 + 
 +<code bash>
 cat > ~/.bash_profile << "EOF" cat > ~/.bash_profile << "EOF"
-exec evn -i HOME=$HOME 학기=$TERM PS1='\u:\w\$ ' /bin/bash+exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
 EOF EOF
 </code> </code>
-//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'' 파일을 생성합니다: +//lfs// 사용자로 로그온하거나 "-" 옵션이 포함된 **su** 명령을 사용하여 //lfs// 사용자로 전환한 경우, 해당 셸은 호스트의 ''/etc/profile''(일부 설정 및 환경 변수가 포함되어 있을 수 있음)을 읽은 다음'' .bash_profile''을 읽는 로그인 셸입니다. ''.bash_profile'' 파일에서 **exec env -i.../bin/bash** 명령은 ''HOME'', ''TERM'' 및 ''PS1'' 변수를 제외하고 완전히 빈 환경을 가진 새 셸로 실행 중인 셸을 대체합니다. 이렇게 하면 호스트 시스템에 있지만 사용하길 원치 않거나 잠재적으로 위험한 환경 변수가 빌드 환경에 적용되지 않습니다. 
-<code lang=bash>+ 
 +새로운 셸 인스턴스는 //non-login// 셸로, ''/etc/profile'' 또는 ''.bash_profile'' 파일의 내용을 읽고 실행하지 않고 대신 ''.bashrc'' 파일을 읽고 실행합니다. 다음과 같이 ''.bashrc'' 파일을 생성합니다
 + 
 +<code bash>
 cat > ~/.bashrc << "EOF" cat > ~/.bashrc << "EOF"
 set +h set +h
줄 23: 줄 35:
 EOF EOF
 </code> </code>
-**''.bashrc'' 설정의 의미는 다음과 같습니다.** 
  
-  * **set +h** \\ **set +h** 명령은 **bash**의 해시 기능을 끕니다. 해시 기능은 일반적으로 유용한 기능으로, 해시 테이블을 사용하여 실행 파일의 전체 경로를 기억함으로써 동일한 실행 파일을 찾기 위해 경로를 반복해서 검색하지 않아도 됩니다. 하지만 운 도구는 설치자마자 사용해야 합니다. 해시 기능을 끄면 프로그램을 실행할 때마다 셸이 PATH를 검색하도록 강제합니다. 따라서 셸은 호스트 ''/usr/bin'' 또는 ''/bin''에 있는 배포판에서 제공한 동일한 프로그램의 이전 버전을 기억하지 않고 에서 즉시 새로 컴파일된 도구를 사용할 수 있는 ''$LFS/tools/bin''에서 찾습니다.+=== .bashrc 설정 설명 === 
 + 
 +  * **set +h** \\ **set +h** 명령은 **bash**의 해시 기능을 끕니다. 해시 기능은 일반적으로는 유용한 기능으로, 해시 테이블을 사용하여 실행 파일의 전체 경로를 기억함으로써 동일한 실행 파일을 찾기 위해 경로를 반복해서 검색하지 않아도 됩니다. 하지만 스 컴파일 도구는 설치자마자 사용해야 합니다. 해시 기능을 끄면 프로그램을 실행할 때마다 셸이 ''PATH''를 검색하도록 지정합니다. 따라서 셸은 호스트 ''/usr/bin'' 또는 ''/bin''에 있는 배포판에서 제공한 동일한 프로그램의 이전 버전을 기억하지 않고 새로 컴파일된 도구를 사용할 수 있는 ''$LFS/tools/bin''에서 찾습니다.
   * **umask 022** \\ 사용자 파일 생성 마스크(umask)를 022로 설정하면 새로 만든 파일과 디렉터리는 소유자만 쓸 수 있지만 누구나 읽고 실행할 수 있습니다(기본 모드가 [[https://man.archlinux.org/man/open.2|open(2)]] 시스템 호출에 사용된다고 가정하면 새 파일은 권한 모드 644로, 디렉터리는 모드 755로 끝납니다).   * **umask 022** \\ 사용자 파일 생성 마스크(umask)를 022로 설정하면 새로 만든 파일과 디렉터리는 소유자만 쓸 수 있지만 누구나 읽고 실행할 수 있습니다(기본 모드가 [[https://man.archlinux.org/man/open.2|open(2)]] 시스템 호출에 사용된다고 가정하면 새 파일은 권한 모드 644로, 디렉터리는 모드 755로 끝납니다).
   * **LFS=/mnt/lfs** \\ ''LFS'' 변수는 선택한 마운트 지점으로 설정해야 합니다.   * **LFS=/mnt/lfs** \\ ''LFS'' 변수는 선택한 마운트 지점으로 설정해야 합니다.
-  * **LC_ALL=POSIX** \\ ''LC_ALL'' 변수는 특정 프로그램의 현지화를 제어하여 해당 메시지가 지정된 국가의 규칙을 따르도록 합니다. ''LC_ALL''을 "POSIX" 또는 "C"(이 둘은 동일)로 설정하면 교차 컴파일 환경에서 모든 것이 예상대로 작동합니다. +  * **LC_ALL=POSIX** \\ ''LC_ALL'' 변수는 특정 프로그램의 현지화를 제어하여 해당 메시지가 지정된 국가의 규칙을 따르도록 합니다. ''LC_ALL''을 "POSIX" 또는 "C"(둘은 동일)로 설정하면 크로스 컴파일 환경에서 모든 것이 예상대로 작동합니다. 
-  * **LFS_TGT=$(uname -m)-lfs-linux-gnu** \\ ''LFS_TGT'' 변수는 크로스 컴파일러와 링커를 빌드할 때와 임시 툴체인을 크로스 컴파일할 때 사용할 기본값은 아니지만 호환 가능한 머신 설명을 설정합니다. 자세한 내용은 [[.:032-toolchain_technical_notes:툴체인 기술 노트]]에서 확인할 수 있습니다. +  * **LFS_TGT=$(uname -m)-lfs-linux-gnu** \\ ''LFS_TGT'' 변수는 기본값은 아니지만, 크로스 컴파일러와 링커를 빌드할 때와 임시 툴체인을 크로스 컴파일할 때 사용할 호환 가능한 머신 설명을 설정합니다. 자세한 내용은 [[.:032-toolchain_technical_notes|툴체인 기술 노트]]에서 확인할 수 있습니다. 
-  * **PATH=/usr/bin** \\ 많은 최신 리눅스 배포판은 ''/bin''과 ''/usr/bin''을 병합했습니다. 이 경우 [[.:06-cross_compiling_temporary_tools|챕터 6]] 환경에서는 표준 PATH 변수를 ''/usr/bin/''으로 설정해야 합니다. 그렇지 않은 경우 다음 줄은 경로에 ''/bin''을 추가합니다. +  * **PATH=/usr/bin** \\ 많은 최신 리눅스 배포판은 ''/bin''과 ''/usr/bin''을 병합했습니다. 이 경우 [[.:06-cross_compiling_temporary_tools|챕터 6]] 환경에서는 표준 ''PATH'' 변수를 ''/usr/bin/''으로 설정해야 합니다. 그렇지 않은 경우 다음 줄은 경로에 ''/bin''을 추가합니다. 
-  * **if [ ! -L /bin ]; then PATH=/bin:$PATH; fi** \\ 만약 ''/bin''이 심볼릭 링크가 아니라면 PATH 변수에 추가해야 합니다. +  * **if [ ! -L /bin ]; then PATH=/bin:$PATH; fi** \\ ''/bin''이 심볼릭 링크가 아니라면 ''PATH'' 변수에 추가합니다. 
-  * **PATH=$LFS/tools/bin:$PATH** \\ 표준 ''PATH'' 앞에 ''$LFS/tools/bin''을 넣으면 [[05-compiling_a_cross_toolchain|5장]] 초반에 설치한 크로스 컴파일러가 설치 직후 셸에서 선택됩니다. 위에서 설정한 해싱을 끄는것과 이 설정이면 크로스 컴파일러 대신 호스트의 컴파일러가 사용될 위험이 줄어듭니다. +  * **PATH=$LFS/tools/bin:$PATH** \\ 기본 ''PATH'' 앞에 ''$LFS/tools/bin''을 넣으면 [[05-compiling_a_cross_toolchain|5장]] 초반에 설치한 크로스 컴파일러가 설치 직후 셸에서 사용됩니다. 위에서 설정한 해싱을 끄는것과 이 설정으로 크로스 컴파일러 대신 호스트의 컴파일러가 사용될 위험이 줄어듭니다. 
-  * **CONFIG_SITE=$LFS/usr/share/config.site** \\ [[05-compiling_a_cross_toolchain|5장]]과 [[.:06-cross_compiling_temporary_tools|챕터 6]]에서 이 변수가 설정되어 있지 않으면 **configure** 스크립트가 호스트 시스템의 **/usr/share/config.site**에서 일부 배포에 특정한 구성 항목을 로드하려고 시도할 수 있습니다. 호스트의 잠재적인 오염을 방지하려면 이 변수를 정의하세요+  * **CONFIG_SITE=$LFS/usr/share/config.site** \\ [[05-compiling_a_cross_toolchain|5장]]과 [[.:06-cross_compiling_temporary_tools|챕터 6]]에서 이 변수가 설정되어 있지 않으면 **configure** 스크립트가 호스트 시스템의 **/usr/share/config.site**에서 일부 배포판의 특정한 구성 항목을 로드하려고 시도할 수 있습니다. 호스트에 한 잠재적인 오염을 방지하기 위해 이 변수를 다시 정의합니다
-  * **export ...** \\ 앞의 명령으로 일부 변수를 설정했지만, 모든 하위 셸에서 볼 수 있도록 하기 위해 해당 변수를 내보냅니다.+  * **export ...** \\ 앞의 명령으로 일부 변수를 설정했지만, 모든 서브 셸에서 볼 수 있도록 해당 변수를 내보냅니다. 
 <WRAP center round important 90%> <WRAP center round important 90%>
 **중요** **중요**
-몇몇 상용 배포판은 문서화되지 않은 ''/etc/bash.bashrc'' 인스턴스화를 **bash**의 초기화에 추가합니다. 이 파일은 중요한 LFS 패키지 빌드에 영향을 줄 수 있는 방식으로 //lfs// 사용자 환경을 수정할 수 있습니다. //lfs// 사용자의 환경이 깨끗한지 확인하려면 ''/etc/bash.bashrc가'' 있는지 확인하고 있는 경우 이 파일을 다른 곳으로 옮기세요. ''root'' 사용자로 다음을 실행합니다: +몇몇 상용 배포판은 문서화되지 않은 인스턴스 ''/etc/bash.bashrc''를 **bash**의 초기화 과정에 추가합니다. 이 파일은 중요한 LFS 패키지 빌드에 영향을 줄 수 있는 //lfs// 사용자 환경을 수정할 수 있습니다. //lfs// 사용자의 환경이 깨끗한지 확인하려면 ''/etc/bash.bashrc가'' 있는지 확인하고 있는 경우 이 파일을 다른 곳으로 옮기세요. ''root'' 사용자로 다음을 실행합니다. 
-<code lang=bash>[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE</code> +<code bash> 
-//lfs// 사용자가 더 이상 필요하지 않은 경우([[.:07-entering_chroot_and_building_additional_tempory_tools|7장]] 시작 부분) ''/etc/bash.bashrc''를 안전하게 복원할 수 있습니다(원하는 경우).+[ ! -e /etc/bash.bashrc ] || mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE 
 +</code> 
 +//lfs// 사용자가 더 이상 필요하지 않고 파일을 복원하길 경우([[.:07-entering_chroot_and_building_additional_tempory_tools|7장]] 시작 부분) ''/etc/bash.bashrc''를 안전하게 되돌릴 수 있습니다.
  
 [[.: 105-bash-5.2.21|8.35장 "Bash-5.2.21"]]에서 빌드할 LFS Bash 패키지는 ''/etc/bash.bashrc''를 로드하거나 실행하도록 구성되지 않았으므로 완성된 LFS 시스템에서는 이 파일이 쓸모가 없다는 점에 유의하세요. [[.: 105-bash-5.2.21|8.35장 "Bash-5.2.21"]]에서 빌드할 LFS Bash 패키지는 ''/etc/bash.bashrc''를 로드하거나 실행하도록 구성되지 않았으므로 완성된 LFS 시스템에서는 이 파일이 쓸모가 없다는 점에 유의하세요.
 </WRAP> </WRAP>
  
-여러 프로세서(또는 코어)를 사용하는 많은 최신 시스템의 경우 명령줄 옵션이나 환경 변수를 통해 사용 가능한 프로세서 수를 make 프로그램에 알려주는 "parallel make"를 수행하여 패키지의 컴파일 시간을 줄일 수 있습니다. 예를 들어 인텔 코어 i9-13900K 프로세서는 8개의 P(성능) 코어와 16개의 E(효율성) 코어가 있으며, P 코어는 동시에 2개의 스레드를 실행할 수 있으므로 리눅스 커널에서 각 P 코어는 2개의 논리적 코어로 모델링됩니다. 결과적으로 총 32개의 논리 코어가 있습니다. 이러한 논리적 코어를 모두 사용하는 한 가지 확실한 방법은 **make**가 최대 32개의 빌드 작업을 생성하도록 허용하는 것입니다. 이는 **make**에 //-j32// 옵션을 전달하여 수행할 수 있습니다: +여러 프로세서(또는 코어)를 사용하는 많은 최신 시스템의 경우 명령줄 옵션이나 환경 변수를 통해 사용 가능한 프로세서 수를 make 프로그램에 알려주는 "parallel make"를 수행하여 패키지의 컴파일 시간을 줄일 수 있습니다. 예를 들어 인텔 코어 i9-13900K 프로세서는 8개의 P(성능) 코어와 16개의 E(효율성) 코어가 있으며, P 코어는 동시에 2개의 스레드를 실행할 수 있으므로 리눅스 커널에서 각 P 코어는 2개의 논리적 코어로 모델링됩니다. 결과적으로 총 32개의 논리 코어가 있습니다. 이러한 논리적 코어를 모두 사용하는 한 가지 확실한 방법은 **make**가 최대 32개의 빌드 작업을 생성하도록 허용하는 것입니다. 이는 **make**에 //-j32// 옵션을 전달하여 수행할 수 있습니다
-<code lang=bash>make -j32</code> + 
-또는 MAKEFLAGS 환경 변수를 설정하면 해당 내용이 명령줄 옵션으로 make에서 자동으로 사용됩니다: +<code bash> 
-<code lang=bash>export MAKEFLAGS=-j32</code>+make -j32 
 +</code> 
 + 
 +또는 ''MAKEFLAGS'' 환경 변수를 설정하면 해당 내용이 명령줄 옵션으로 make에서 자동으로 사용됩니다
 + 
 +<code bash> 
 +export MAKEFLAGS=-j32 
 +</code> 
 <WRAP center round important 90%> <WRAP center round important 90%>
-**중요** +**중요** \\ 
-숫자없는 //-j// 옵션을 **make**에 전달하거나 ''MAKEFLAGS''같은 옵션으로 전달하지 마세요.그렇게 하면 **make**가 무한 빌드 작업을 생성하여 시스템 안정성 문제를 일으킬 수 있습니다.+숫자없는 //-j// 옵션을 **make**에 전달하거나 ''MAKEFLAGS''같은 옵션으로 전달하지 마세요.그렇게 하면 **make**가 무으로 빌드 작업을 생성하여 시스템의 안정성에 문제를 일으킬 수 있습니다.
 </WRAP> </WRAP>
  
-[[05-compiling_a_cross_toolchain|5장]]과 [[.:06-cross_compiling_temporary_tools|챕터 6]]에서 패키지를 빌드하는 데 사용할 수 있는 모든 논리 코어를 사용하려면 지금 ''.bashrc''에서 ''MAKEFLAGS''를 설정하세요: +[[05-compiling_a_cross_toolchain|5장]]과 [[.:06-cross_compiling_temporary_tools|챕터 6]]에서 패키지를 빌드하는 데 사용할 수 있는 모든 논리 코어를 사용하려면 ''.bashrc''에서 ''MAKEFLAGS''를 설정하세요
-<code lang=bash>+ 
 +<code bash>
 cat >> ~/.bashrc << "EOF" cat >> ~/.bashrc << "EOF"
 export MAKEFLAGS=-j$(nproc) export MAKEFLAGS=-j$(nproc)
 EOF EOF
 </code> </code>
-모든 논리적 코어를 사용하지 않으려면 //$(nproc)//를 사용하려는 논리 코어 수로 바꾸세요. 
  
-마지막으로 임시 도구 빌드를 위한 환경이 완전히 준비되었는지 확인하려면 **bash** 셸이 새 사용자 프필을 읽도록 강제 설정합니다: +모든 논리적 코어를 사용지 않으려면 //$(nproc)//를 사용하려는 논리 코어 갯수로 설정하세요.
-<code lang=bash>source ~/.bash_profile</code>+
  
 +마지막으로 임시 도구 빌드를 위한 환경이 완전히 준비되었는지 확인하려면 **bash** 셸이 새로운 사용자 프로필을 다시 읽도록 합니다.
  
 +<code bash>
 +source ~/.bash_profile
 +</code>
  • linuxfromscratch/12.1/028-setting_up_the_environment.1714704653.txt.gz
  • 마지막으로 수정됨: 2024/05/03 02:50
  • 저자 baecy