본문 바로가기
SW/Linux (Kernel)

Linux From Scratch 개발 노트 3 - 계정 생성

by FastBench 2024. 8. 28.
반응형

 

참고 

github : https://github.com/NuttyJamie/LinuxFromScratch-for-Korean

 

GitHub - NuttyJamie/LinuxFromScratch-for-Korean: Korean translation of the LFS project.

Korean translation of the LFS project. Contribute to NuttyJamie/LinuxFromScratch-for-Korean development by creating an account on GitHub.

github.com

 

html 문서 : https://rawcdn.githack.com/NuttyJamie/LinuxFromScratch-for-Korean/88bdabae8abf2fad511b497b0dc676e6ac95b965/9.1/BOOK/HTML/index.html

 

Linux From Scratch

 

rawcdn.githack.com

 

Intro

이 장에서는 임시 도구 설치를 위해 $LFS 디렉토리를 생성하고, 보안을 강화하기 위해 권한이 낮은 사용자를 추가한다. 또한, 해당 사용자에게 적합한 빌드 환경을 설정하며, LFS 패키지 빌드에 필요한 시간 단위인 "SBU"와 패키지 테스트 스위트에 대해 설명한다.

 

root 권한으로 실행

mkdir -v $LFS/tools
ln -sv $LFS/tools /

 

생성된 symlink는 컴파일된 툴체인이 항상 /tools를 참조할 수 있게 하는데, 이것은 컴파일러, 어셈블러, 그리고 링커가 5장(아직까지 호스트의 일부 도구를 사용하는 시점)과 그 이후(LFS 파티션으로 chroot한 시점)에도 작동한다는 것을 의미한다.

 

LFS 유저추가

이 섹션에서는 LFS 시스템을 구축하기 위한 임시 작업 환경을 준비하는 방법을 설명하고 있다. 특히, 시스템의 안전성을 위해 root 사용자 대신 권한이 제한된 lfs라는 새 사용자 계정을 생성하고, 해당 계정을 사용해 패키지 빌드를 진행할 것을 권장한다.

# use root account until this section

groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs

-s /bin/bash

lfs 유저의 기본 셸을 bash로 지정한다.

-g lfs

lfs 유저를 lfs 그룹에 추가한다.

-m

lfs 유저를 위한 홈 디렉토리를 생성한다.

-k /dev/null

이 매개변수는 홈 디렉토리 기본 폴더들을 가져오는 위치를 null 장치로 특정하여 스켈레톤 디렉토리(기본값은 /etc/skel)로부터의 폴더 복사를 방지한다.

lfs

생성된 그룹과 유저의 실제 이름이다.

 

# register the passwd of lfs account
passwd lfs
chown -v lfs $LFS/tools
chown -v lfs $LFS/sources
su - lfs

 

환경구축

아래의 시작파일을 생성하여 HOME, TERM, PS1 변수를 제외하고 실행 중인 셸을 완전히 비어있는 환경으로 대체한다.

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

이로써 셸의 새 인스턴스는 /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: 해시 기능을 비활성화하여 새로운 도구가 PATH에 반영되도록 한다.

umask 022: 새로 생성된 파일이 소유자에게는 쓰기 가능하고, 다른 사용자에게는 읽기/실행만 가능하도록 설정한다.

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

LFS_TGT 변수는 크로스 컴파일러와 링커를 빌드할 때, 그리고 임시 툴체인을 크로스 컴파일할 때 기본 지원은 아니지만 호환되는 시스템을 설명하는 데 사용된다.

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

source ~/.bash_profile

 

SBU

  • 표준 빌드 단위(SBU): 각 패키지의 빌드 시간을 예측하기 위한 상대적인 단위로, LFS에서 처음 컴파일하는 패키지인 Binutils를 기준으로 한다.
  • SBU의 사용: 예를 들어, 어떤 패키지의 빌드 시간이 4.5 SBU라고 하면, Binutils를 빌드하는 데 10분이 걸렸다면 해당 패키지의 빌드에는 약 45분이 걸린다는 의미다.
  • 변동성: SBU는 시스템에 따라 차이가 있으며, 정확한 빌드 시간을 보장하지는 않는다. 다양한 요인에 따라 실제 빌드 시간은 달라질 수 있다.

SBU는 다양한 시스템에서 패키지 빌드 시간을 상대적으로 비교할 수 있도록 도와주는 개념이다.

 

Test suite

  • 테스트 스위트: 대부분의 패키지는 빌드 후 실행할 수 있는 테스트 스위트를 제공한다. 이는 패키지가 정확하게 컴파일되었는지 확인하기 위한 "안전성 검사" 역할을 한다.
  • 중요성: 특히 핵심 툴체인 패키지(GCC, Binutils, Glibc)의 테스트 스위트는 시스템의 안정성과 기능에 중요한 역할을 하므로 실행하는 것이 매우 중요하다.
  • 시간 소요: 일부 테스트 스위트, 특히 GCC와 Glibc는 실행 시간이 오래 걸릴 수 있지만, 시스템의 올바른 작동을 보장하기 위해 수행하는 것이 권장된다.

테스트 스위트를 실행하면 빌드된 패키지가 예상대로 작동하는지 확인할 수 있어 시스템의 안정성을 높이는 데 도움이 된다.

 

참고 : https://rawcdn.githack.com/NuttyJamie/LinuxFromScratch-for-Korean/88bdabae8abf2fad511b497b0dc676e6ac95b965/9.1/BOOK/HTML/chapter04/abouttestsuites.html

반응형

댓글