[LFS_prj] 02 Host setting

preparing the host system

첫번째로 Host를 셋업하는 과정을 서술한다. 기본적으로 VMware에 우분투 20.04가 설치되었고 파티션이 분할 되었다는 가정하에 진행한다.

Host 환경설정

LFS를 설치하고 빌드하는데 필요한 host의 환경을 설치하고 필요 package를 설치한다. 하기 링크를 참조한다.

상기 링크에는 host의 필요 패키지 버전 및 상태를 체크하는 스크립트도 제공되므로 실행해보도록 하자. 필자의 환경에서 스크립트를 실행 시 하기 문제점이 발견되서 수정하였다.

  1. /bin/sh의 심볼릭 링크가 dash가 아닌 bash로 설정
    • sudo dpkg-reconfigure dash 실행 후 no 선택
  2. binutils 등 설치되지 않은 패키지 설치
    • binutils, bison, gawk, gcc, g++, make, texinfo
    • 우분투에서 설치가능한 패키지의 버전을 확인하고 싶으면 apt-cache policy ${패키지 이름}으로 확인 가능하다.
    • 필자는 패키지 버전을 특별히 버전을 매뉴얼과 맞추지 않았다.(필자는 호환을 보증하지 않는다고 표기된 패키지 버전만 신경씀)

Partition Setting & mount

만약 설치시 LFS RootFS 및 SWAP 파티션을 설정하지 않았다면 파티션을 만들어 준다.

필자는 하이퍼바이저 위에 우분투20.04를 설치했으므로 이미 Swap 공간이 /swapfile파일에 생성되어 있다. free 명령을 통해 swap공간의 존재를 확인할 수 있다. 그러므로 필자는 메뉴얼과는 다르게 별도 스왑 파티션을 생성하지 않았다. ~만약 swap 용량이 모자란다면 스왑파일 용량을 키우거나 스왑 파티션을 생성하자~ 스왑 파티션이 없으면 나중에 LFS로 부팅했을 때 swap영역이 없으므로 만들어 주는게 좋을 듯 하다. 아님 향후 LFS용 swapfile을 만들자

  1. LFS RootFS 파티션과 Swap 파티션을 생성한다.
    • RootFS : fdisk 에서 커맨드 n(생성) -> p(primary) 로 생성
    • (필요시)swap : fdisk 에서 커맨드 n(생성) -> p(primary) 로 생성 후 t(type) -> 코드 82
    • w로 저장
  2. 해당 파일 시스템으로 포맷
1
2
sudo mkfs -v -t ext4 /dev/${RootFS_파티션}
(필요시)sudo mkswap /dev/${swap_partition}
  1. 전역변수 설정 및 파티션 마운트
    • ‘mount -l’ 명령으로 nosuid나 또는 nodev가 아닌지 확인하자.
1
2
3
4
export LFS=/mnt/lfs
sudo mkdir -pv $LFS
sudo mount -v -t ext4 /dev/sda2 $LFS
sudo cat "/dev/sda2   /mnt/lfs   ext4   default   1   1" >> /etc/fstab

패키지와 패치 다운로드

기본적인 리눅스 시스템을 구축하기 위해 다운로드 해야 하는 패키지와 패치를 다운로드 한다. (아마 빌드를 위한 sysroot 구축이라 생각되는데?? 아직은 확실하지 않음)

  1. source 저장을 위한 폴더 생성 및 권한 설정
  2. 패키지 및 패치 다운
    • 패키지와 패치를 다운로드 할때 수동으로 하나씩 받기 힘드므로 리스트 파일을 제공한다.
  3. 정상적으로 다운 받았는지 확인하기 위한 md5 체크섬 확인
    • 체크섬 확인을 위한 파일도 제공하므로 이를 이용
1
2
3
4
5
6
7
8
sudo mkdir -v $LFS/sources
sudo chmod -v a+wt $LFS/sources
wget --directory-prefix=$LFS/sources https://www.linuxfromscratch.org/lfs/view/stable-systemd/wget-list-systemd
wget --input-file=wget-list-systemd --continue --directory-prefix=$LFS/sources
wget --directory-prefix=$LFS/sources https://www.linuxfromscratch.org/lfs/view/stable-systemd/md5sums
pushd $LFS/sources
md5sum -c md5sums
popd

다운로드한 패키지와 패치의 리스트는 다음 페이지에 나와 있다.

최종 준비

크로스 컴파일을 위한 유저 추가 및 bash 환경 설정. 각 절차에서 나타난 옵션에 대한 자세한 설명은 매뉴얼 페이지를 참조한다.

최소 LFS Filesystem layout 구성

LFS의 빌드를 위한 크로스 컴파일러 생성 시 필요한 최소한의 Filesystem layout을 구축한다.(필자의 추론) 크로스 컴파일용 glib이나 libstdc++등이 여기에 설치되고 LFS에 포함되는 시스템은 상기 폴더에 덮어써진다. Filesystem Layout을 위한 심볼릭 링크도 만들고 그 후 크로스 컴파일러가 설치 될 폴더를 생성한다.(이는 향후 LFS 시스템에 포함되지 않으므로 분리해놓음)

1
2
3
4
5
6
7
8
sudo mkdir -pv $LFS/{etc,var} $LFS/usr/{bin,lib,sbin}
for i in bin lib sbin; do
  ln -sv usr/$i $LFS/$i
done
case $(uname -m) in
  x86_64) mkdir -pv $LFS/lib64 ;;
esac
sudo mkdir -pv $LFS/tools

LFS빌드를 위한 유저 추가

빌드를 위한 환경 구성을 위해 별도의 유저를 추가

  1. lfs 유저추가 및 비번 설정
  2. 생성된 파일 시스템의 소유자를 lfs로 변경
  3. /etc/bash.bashrc 이름 변경 (우분투20.04의 경우 lfs로 로긴 시 해당 파일이 쉘 환경을 변화시키는 것을 막기 위함)
  4. lfs로 로긴
1
2
3
4
5
6
7
8
9
sudo groupadd lfs
sudo useradd -s /bin/bash -g lfs -m -k /dev/null lfs
chown -v lfs $LFS/{usr{,/*},var,etc,tools}
chown -vh lfs $LFS/{bin,lib,sbin}
case $(uname -m) in
  x86_64) chown -v lfs $LFS/lib64 ;;
esac
sudo mv -v /etc/bash.bashrc /etc/bash.bashrc.NOUSE
su - lfs

lfs 유저 환경설정

lfs 유저를 위환 쉘의 환경을 설정한다. 설정에 대한 상세 내용은 매뉴얼을 참조한다.

  1. .bash_profile은 Login Shell에서 실행(ex. ssh 로그인 쉘)되며 하기와 같이 설정
1
2
3
cat > ~/.bash_profile << "EOF"
exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
EOF
  1. .bashrc은 Non-Login Shell에서 실행(ex. 로그인된 상태에서 쉘이 실행될 때)되며 하기와 같이 설정
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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
  1. 프로파일을 적용한다.
1
source ~/.bash_profile
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy