Obsidian/Recognition/Programing/Linux/LFS(Linux From Scratch)/start.md

73 lines
3.4 KiB
Markdown
Raw Normal View History

2023-08-14 16:19:25 +00:00
https://koreascience.kr/article/JAKO201710758144628.pdf
### 1. 준비 단계
- 리눅스 시스템(Ubuntu, Fedora...)
- 준비된 스크립트 (version-check.sh, library-check.sh)를 실행하여 요건 만족 여부 확인
- 새 디스크 파티션 및 마운트
- root로 작업
- 새 파티션의 마운트 LFS=/mnt/lfs
- 소스 파일 다운로드
- 디렉토리 $LFS/sources를 생성
- 필요한 프로그램 패키지 소스와 패치 파일 다운로드(70여종)
- 향후 모든 빌드는 sources 디렉토리 아래에서 수행
- 임시 디렉토리 및 사용자 생성
- 임시 디렉토리 $LFS/tools를 생성
- 일반 사용자 계정을 생성
- tools 디렉토리에 임시 시스템을 구성하는 도구 설치
- -> 임시 시스템은 호스트 시스템과 분리되며, 최종 시스템과도 격리될 수 있다
- 최종 시스템이 구축되면 tools 디렉토리에 구축된 임시 시스템은 안전하게 제거
- 이 디렉토리에 대한 심볼릭 링크를 호스트의 루트(/) 디렉토리에 다음과 같이 걸어둔다
- > ln sv $LFS/tools /
(이 링크를 통해 호스트에서 빌드 시 디렉토리 /tools는 새 파티션의 tools 디렉토리를 가리키게 된다. )
(임시 시스템, 최종 시스템 구축 시 /tools는 이 디렉토리를 가리키게 된다)
- 치명적인 작업 실수로 인한 피해를 예방하기 위해 일반 사용자 계정 lfs를 생성
- tools와 sources 디렉토리의 소유자 권한을 부여
- lfs가 로그인할 때 마다 쉘 환경이 초기화 되도록 두bash 시작 파일을 설정
```bash
# .bash_profile파일 (로그인 쉘이 열릴 때 실행됨)
# 모든 기존 환경 변수를 무효화
# 세 가지 환경변수만을 정의
# 새 bash 프로그램으로 대체
exec env i HOME=/root TERM=“$TERM” \
PS1=\u:\w\$ /bin/bash
# .bashrc 파일
# 명령 위치 검색시 해쉬 테이블을 사용하지 않도록 한다.
set +h
umask 022
# LFS 마운트한 폴더 (LFS=/mnt/lfs)
LFS=/mnt/lfs
LC_ALL=POSIX
# 시 시스템 구축에 사용되는 크로스 컴파일러 구축을 위해 target 시스템 이름을 환경변수 LFS_TGT로 정의
LFS_TGT=x86_64-lfs-linux-gnu
# set +h 명령과 함께, 앞으로 임시 시스템에서 임시 툴들이 tools 디렉 토리에 설치되는 대로 이들이 즉시 사용될 수 있도록 한다
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL LFS_TGT PATH
```
### 2. 임시 시스템 구축 단계
- lfs로 수행
- 크로스 툴체인 설치
(크로스 정적 링커와 크로스 gcc 컴파일러로구성됨)
( 임시 시스템의 라이브러리를 크로스 컴파일 할 때 사용)
- 정적 링커를 포함하는 binutils 패키지와 컴파일러를 포함하는 gcc 패키지를 컴파일 할 때, 크로스 툴체인을 얻기 위해
configure 옵션[6] 중 target 옵션을 triplet x86_64-lfs-linux-gnu으로 설정
(기본 triplet의 vendor 부분만을 pc에서 lfs로 살짝 수정 한 것))
- 임시 C 라이브러리 설치
- 툴체인 설치
### 3. 최종 시스템 구축 단계
- 가상 커널 파일 시스템 준비
- chroot 환경 진입
- 표준 디렉토리 생성 및 필수 파일 생성
- 최종 C 라이브러리 및 최종 툴체인 설치
- 최종 시스템 패키지 설치
### 4. 시스템 설정 및 부팅 준비
http://soopsaram.com/lfs/markdowns/0_Preface.html