· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
LFS/Introduction


1. 소개

1.1. 소개

1.1.1. 이 책은 앞으로 어떤 식으로 진행될 것인가?


당신은 당신의 컴퓨터에 미리 설치 되어 있는 리눅스 배포판을 가지고 당신의 LFS를 구축해 갈 입니다. (Debian, Mandrake, Red Hat, or SuSE 같은.)


위에 언급한 리눅스 시스템은 LFS를 설치하기 위한 도구로 사용될 것입니다. . 왜냐하면 당신은 새로운 시스템을 구축하기 위해 컴파일러, 링커 그리고 쉘과 같은 프로그램들이 필요할 것이기 때문입니다. 배포판을 인스톨 할 때, "development"팩키지를 꼭 설치합시다.

3장 에서 LFS 시스템을 위한 파티션과 파일 시스템을 만들 것입니다.

4장에 LFS 시스템을 구축하기 위해 필요한 모든 팩키지와 패치들을 다운 로드 할 것이고, 새로운 파일 시스템에 저장할 것입니다. .

5장 에서는 6장에서 실질적으로 사용될 기본적인 개발 (또는 툴체인)도구들을 컴파일 할 수 있도록 임시 컴파일 도구(gcc, glibc, binutils, ETC..)들을 인스톨 하는 방법에 대해 설명할 것입니다. 이러한 팩키지들은 서로간에 의존성을 지니고 있으므로, 올바른 순서대로 컴파일 해야 합니다. - (예를 들어 당신이 사용할 컴파일러를 컴파일 하기 위해서는 다른 컴파일러가 필요한 것처럼.)

5장 에서 첫번째로 툴체인을 형성하기 위해 Binutils와 GCC 를 컴파일 할 것입니다. 이 팩키지들의 경우는, 기존 배포판과 독립적으로 동작할 수 있도록 정적으로 링크되어 질 것입니다. 두번째로 할 일은 C 라이브러리인 Glibc를 구축하는 것입니다. Glibc는 앞에서 만든 툴체인 프로그램들에 의해 컴파일 될 것입니다.(여기까지가 툴 체인 구축의 첫 단계입니다.) 세번째로 할 일은 툴체인의 두 번째 단계를 진행하는 것입니다. 이제 툴체인은 새롭게 구축된 Glibc에 다이나믹하게 링크될 것입니다. 남겨진 5장 의 패키지들은 두번째 툴체인을 사용해서 모두 구축될 것입니다. 이러한 것들이 모두 끝나면 LFS 인스톨의 진행은 커널 컴파일을 제외 하면 그리 오랜 시간을 필요로 하지 않습니다.

이런 생각이 들 수 도 있습니다. "너무 많은 일이군, 그냥 내 원래의 리눅스에서 가지고 오면 되는데.." Static이나 Dynamic 으로 링크되는 프로그램들 사이의 차이점을 포함한 모든 기술적 설명은 5장, 의 처음 부분에서 제공할 것입니다.

이제 6장 에서 진정한 LFS 시스템을 구축할 것입니다. chroot(change root) 프로그램을 이용하여 자신의 LFS 파티션을 / 파티션으로 변경할 것입니다. 변경한 후에는, 새로운 쉘의 루트디렉토리를 LFS 파티션에 만들 것입니다. 굳이 chroot를 이용하는 이유는 새로운 시스템을 구축해 나가는 동안, 기존 호스트의 자원을 이용하는 것이 좋기 때문입니다. 왜냐하면, 일단 LFS용 커널이 없는 상태이니, LFS로 부팅을 해서 모든 팩키지를 컴파일할 수 없기 때문입니다. 그러므로 재부팅하기 보다는 chroot 명령을 이용하는 것입니다.

7장에서는 부트 스크립트를 작성할 것이고,, 커널과 부트로더는 8장 에서 설정할 것입니다. 9장 부록으로써 각종 도움이 될 내용들이 들어 있습니다.

여기까지 끝나면 완벽하게 구축된 LFS시스템으로 재부팅할 수 있게 됩니다.

지금까지 설명한 내용은 이 책의 진행 순서를 간략하게 나열한 것입니다. 지금까지 설명한 내용들이 완벽하게 이해되지 않더라도 너무 걱정하지 마세요. 각 장을 진행해 나갈 때마다 필요한 세부적인 정보는 각 장에서 제공할 것입니다.

설치를 시작하기 전에 2장 를 자세히 읽어 주세요. 중요한 내용들이 설명되어 있습니다.



1.1.2. ChangLog


2012년 9월 1일자 Linux From Scratch의 7.2버전입니다.


1.1.2.1. 업그레이드 된것


Autoconf 2.69

Automake 1.12.3

Bison 2.6.2

Coreutils 8.19

E2fsprogs 1.42.5

File 5.11

Flex 2.5.37

Gawk 4.0.1

GCC 4.7.1

Glibc 2.16.0

GMP 5.0.5

Grep 2.14

Gzip 1.5

IPRoute2 3.5.1

Kbd 1.15.3

Kmod 9

Libpipeline 1.2.1

Linux 3.5.2

Man-DB 2.6.2

Man-pages 3.42

MPC 1.0

MPFR 3.1.1

Perl 5.16.1

Psmisc 22.19

Shadow 4.1.5.1

TCL 8.5.12

Udev 188 (extracted from systemd-188)

Util-Linux 2.21.2

1.1.2.2. 더해진것


bash-4.2-fixes-8.patch

binutils-2.22-build_fix-1.patch

coreutils-8.19-i18n-1.patch

flex-2.5.37-bison-2.6.1-1.patch

glibc-2.16.0-res_query_fix-1.patch

kbd-1.15.3-upstream_fixes-1.patch

make-3.82-upstream_fixes-2.patch

perl-5.16.1-libc-2.patch

pkg-config-0.27

sed-4.2.1-testsuite_fixes-1.patch

tzdata 2012e

1.1.2.3. 삭제된것


bash-4.2-fixes-4.patch

coreutils-8.15-i18n-1.patch

coreutils-8.15-uname-1.patch

flex-2.5.35-gcc44-1.patch

gcc-4.6.2-cross_compile-1.patch

gcc-4.6.2-startfiles_fix-1.patch

glibc-2.14.1-fixes-1.patch

glibc-2.14.1-gcc_fix-1.patch

glibc-2.14.1-cpuid-1.patch

glibc-2.14.1-sort-1.patch

mpfr-3.1.0-fixes-1.patch

perl-5.14.2-libc-1.patch

perl-5.14.2-security-1.patch

shadow-4.1.5-nscd-1.patch


1.1.3. 공급원

1.1.3.1. FAQ

자신만의 LFS 시스템을 만들어 나가는 동안 어떤 에러나 궁금한 점, 또는 이 책에서 오타라고 생각하는 부분이 있다면 http://www.linuxfromscratch.org/faq/의 FAQ(Frequently Asked Questions)를 먼저 살펴보세요. 그래도 해결이 안되면 MSN Sixline13_1@hotmail.com 이나, poplinux@yahoo.co.kr로 문의해 주시기 바랍니다.

1.1.3.2. IRC

LFS 공동체의 여러 전문가는 IRC 서버를 이용해 도움을 제공합니다. 이러한 도움들을 이용하기 전에 질문에 대한 대답이 LFS FAQ와 메일 리스트에 있는지부터 체크하기를 바랍니다. IRC 서버는 irc.linuxfromscratch.org 포트 6667에서 찾을 수 있습니다.

1.1.3.3. 메일링 리스트

linuxfromscratch.org 서버는 LFS 프로젝트의 개발을 위해 사용된 메일링 리스트의 주소입니다. 이 리스트는 개발과 지원 리스트들을 포함합니다.

어떤 리스트들이 사용가능한지 또 어떻게 그것들에 접속하는지 기록된 로케이션에 대한 정보는Http://www.linuxfromscratch.org/mail.html에서 찾을 수 있습니다.

1.1.3.4. Wiki

팩키지들이나, 업데이트 사항, 혹은 설치 경험담에 관한 더 많은 정보가 필요하다면, http://wiki.linuxfromscratch.org/ 를 참조해 주세요. 필요한 정보를 얻을 수 있을 것입니다.


1.1.3.5. 미러 사이트

LFS 프로젝트는 필요한 팩키지들을 쉽게 다운로드 할 수 있도록 여러 미러 사이트들을 가지고 있습니다. 미러 사이트들의 목록을 보려면 http://www.linuxfromscratch.org/ 을 방문해 주시기 바랍니다.

1.1.3.6. 정보 교환

메일링 리스트로 궁금한 점이나 논평을 보내주길 바랍니다.

1.1.4. 도움 요청 방법


만약 이 책을 사용하는 동안 혼자선 해결할 수 없는 문제가 발생했고, 그 문제가 FAQ(http://www.linuxfromscratch.org/faq/) 에 실려 있지 않다면, Internet Relay Chat (IRC)에서 도움을 청하거나, 메일링 리스트를 통해 도움을 받을 수 있을것입니다. LFS의 메일링 리스트는 Chapter 1 - Mailing lists에서 찾을수 있습니다. 메일링 리스트를 이용하여 문제를 해결해 보세요.

1.1.4.1. 도움 요청시 주의 사항

당신이 가지고 있는 문제를 가능한한 자세히 설명하세요. 아래와 같은 내용을 참조해서 질문하시길 바랍니다.


당신이 사용하는 책의 버젼(7.2입니다)

당신이 LFS를 만들기 위해 사용하는 버젼과 host distribution,

패키지 또는 그 장에서 당신에게 주는 문제들,

당신이 받은 정확한 에러 메세지 또는 징조,

제대로 따라 했는지 안했는지.


(Note that saying that you've deviated from the book doesn't mean that we won't help you. After all, LFS is about choice. It'll just help us to see other possible causes of your problem.)

1.1.4.2. 설정 문제들

설치를 하면서 설정 스크립 실행에 관하여 틀렸을 경우, config.log파 일을 보기 바랍니다. 이 파일은 스크린에 뿌려주지 않는, 설정하는 동안 만난 에러들을 기록하고 있습니다. 도움을 요청할 때, 그 파일을 참조해서 그 안에 들어 있는 내용들도 같이 올려 주시기 바랍니다.


1.1.4.3. 컴파일 문제들

문제의 해결을 도와 주기 위해서는, 출력된 에러들의 내용과 여러 파일들의 내용들이 큰 도움이 됩니다. /configure스크립트와 make run, 두개의 출력화면은 꼭 첨부하세요. 너무 많은 내용을 올리거나, 너무 적게 올리지 마세요.


예를 들어, 여기 어떤 make로 부터의 출력화면이 있습니다:

gcc -DALIASPATH=\"/mnt/lfs/usr/share/locale:.\"-DLOCALEDIR=\"/mnt/lfs/usr/share/locale\" -DLIBDIR=\"/mnt/lfs/usr/lib\"-DINCLUDEDIR=\"/mnt/lfs/usr/include\" -DHAVE_CONFIG_H -I. -I.-g -O2 -c getopt1.cgcc -g -O2 -static -o make ar.o arscan.o commands.o dir.o expand.o file.ofunction.o getopt.o implicit.o job.o main.o misc.o read.o remake.o rule.osigname.o variable.o vpath.o default.o remote-stub.o version.o opt1.o-lutil job.o: In function `load_too_high':/lfs/tmp/make-3.79.1/job.c:1565: undefined reference to `getloadavg'collect2: ld returned 1 exit statusmake[2]: *** [make] Error 1make[2]: Leaving directory `/lfs/tmp/make-3.79.1'make[1]: *** [all-recursive] Error 1make[1]: Leaving directory `/lfs/tmp/make-3.79.1'make: *** [all-recursive-am] Error 2
 

이 같은 경우, 많은 사람들은 아래 메세지만을 올려서 질문을 합니다:
make [2]: *** [make] Error 1
 

무엇이 틀렸는지가 아니라 어떤 것이 틀렸는지를 말하게 된다면 문제를 해결하기가 어렵게 됩니다. 위의 예처럼 모든 과정에는 helpful을 포함하고 있습니다, 명령의 실행과 명령의 에러 메세지들을 포함하기 때문이다.

An excellent article on asking for help on the Internet in general has been written by Eric S. Raymond. It is available online at http://catb.org/~esr/faqs/smart-questions.html. Read and follow the hints in that document and you are much more likely to get a response to start with and also to get the help you actually need.

1.1.4.4. Test suite 문제들

많은 패키지들이 패키지의 중요함을 믿는 test suite를 제공합니다. 문제가 생기면 LFS Wiki http://wiki.linuxfromscratch.org/ 페이지를 검색해 보세요.



1.2. 새로운 파티션 준비


1.2.1. 소개


이번 장에서는 LFS시스템을 설치하기 위한 파티션 작업에 대해 다룰 것입니다. 우리는 이제 새로운 파티션을 만들고 그 파티션에 파일 시스템을 구축하고 마운트를 할 것입니다.

1.2.2. 새로운 파티션 만들기

-- chaoxifer 2013-01-19 20:22:04

다른 운영체제와 마찬가지로 LFS 또한 전용 파티션에 보통 설치됩니다. 보통 사용가능한 비어있는 파티션이 있다면 그곳에 설치하기를 권장하지만 만약 파티션으로 나뉘지 않은 빈공간이 있다면 새로운 파티션을 만들어야 합니다.

최소 설치 사양을 위해서는 2.8GB정도의 파티션이 필요합니다. 모든 소스 타르볼을 저장하고 모든 패키지를 컴파일 하는데 이 정도의 공간이면 충분합니다.하지만, LFS시스템을 첫번째 리눅스 시스템으로 사용 할 것이라면,당신은 아마도 응용소프트웨어를 더 설치해야 할 것이고, 그러기 위해서는 약 10GB정도가 더 필요할 것입니다.

시스템에 램이 충분하지 않을 경우, 가상 메모리를 사용하는 것은 좋은 방법입니다. 가상 메모리(swap space)는 램이 부족할때만 가끔씩 사용됩니다. LFS시스템은 기존 리눅스 시스템과 가상공간을 공유할 수 있습니다. 그러므로 만약, 기존의 리눅스 시스템이 가상메모리를 사용하고 있다면 새롭게 만들 필요가 없습니다.

cfdisk2나 fdisk를 실행할때 arguement로 HDD이름을 넣어주면 새로운 파티션을 만들수 있습니다. -- 예를 들어 /dev/hda는 첫번째 IDE 디스크입니다. 필요하다면 리눅스 native파티션과 swap파티션을 만드세요. 만약 프로그램의 사용법을 모른다면 cfdisk나 fdisk의 man페이지를 참조하기 바랍니다.

Note

숙달된 사용자들은 다른 파티션 방법도 가능합니다. 새로운 LFS 시스템은 RAID 배열 혹은 LVM 논리 볼륨 방식을 이용할 수 있습니다. 하지만 이것들 중 어떤 것들은 initramfs를 요구하는 경우가 있습니다. 이러한 파티션 방법들은 처음으로 LFS를 설치하는 사용자들에게는 권장하지 않습니다.

새로운 파티션을 어떻게 나눴는지 기억하세요. -- hda5같은. (이름) 만약 스왑공간을 만들었다면 그 이름 역시 기억하세요. 이런 이름들은 나중에 /etc/fstab파 일에서 사용될 겁니다

1.2.2.1. 다른 파티션 이슈들


시스템 파티션에 대한 질문이 LFS 메일링 리스트에 자주 올라옵니다. 이것은 상당히 주관적인 주제입니다. 보통의 대다수의 배포판들은 작은 swap 파티션을 제외한 전체의 드라이브를 사용합니다. 이것은 몇 가지에 있어서 LFS에서는 적당한 방법이 아닙니다. 이러한 방법은 두 개 이상의 OS간의 data 교환/공유를 어렵게 하여 유연성을 떨어뜨리고 LFS 빌드를 더 어렵게 합니다. 백업 파일을 만드는 데 시간도 걸리고 비효율적인 파일시스템 구조의 할당으로 디스크공간을 낭비하게 만듭니다.

1. 루트 파티션(The Root Partition)

10GB의 LFS 루트 파티션(루트 디렉토리 '/'와 혼동하지 마시길^^;)은 대다수의 시스템에서 적당합니다. LFS 그리고 BLFS까지 설치하기에 충분한 공간입니다. 하지만 시험적으로 여러 파티션을 쉽게 생성하기에는 작습니다.

2. 스왑 파티션(The Swap Partition)

대부분의 리눅스 배포판들이 자동적으로 스왑 파티션을 생성합니다. 일반적으로 스왑 파티션의 크기는 물리적인 RAM의 두 배 정도로 권장하고 있습니다. 만약 디스크 공간이 한정되어 있다면, 스왑 파티션을 2GB로 잡고 디스크 스와핑을 모니터링할 수 있습니다.

스와핑은 절대적으로 좋은 것이 아닙니다. 일반적으로 시스템이 디스크활동을 읽고 어떻게 명령에 시스템이 반응하는지 관찰하기 위해 스와핑한다고 합니다. 이러한 스와핑은 5GB정도의 파일을 수정하는 것 따위의 무모한 명령을 내렸을 때 일어납니다. 만약 스와핑이 정상적인 상황에서도 발생한다면 가장 좋은 해결방법은 RAM을 하나 새로 구입하는 것입니다.

3. 편리한 파티션들(Convenience Partitions)

여기에는 요구되지는 않지만 디스크 레이아웃을 위한 몇가지 파티션들이 있습니다. 아래의 목록들은 각각에 대하여 간단히 요약한 것입니다.

/boot - 커널을 저장하고 부팅에 필요한 정보들을 저장합니다. 용량이 큰 디스크에서 잠재적인 부팅 문제를 최소화하기 위해 이것을 디스크 드라이브의 첫번째 물리적인 파티션으로 만듭니다. 파티션의 크기는 100MB 정도가 적당합니다.

/home - 여러분의 홈 디렉토리와 사용자 설정들을 다른 배포판과 LFS 빌드에서 공유할 수 있습니다. 일반적으로 크기가 크고 사용가능한 디스크 용량에 따라 다르게 지정합니다.

/usr - 분리된 /usr 파티션은 일반적으로 thin 클라이언트나 디스크가 없는 워크스테이션을 위해 제공할 때 사용됩니다. LFS에서는 실제적으로 필요하지는 않습니다. 대부분의 설치들을 다루기에는 5GB정도가 적당합니다.

/opt - 이 디렉토리는 /usr/에 있는 파일을 포함하지 않고 설치할 수 있는, Gnome이나 KDE같은 큰 패키지를 설치하는 BLFS에서 가장 유용합니다. 만약 사용한다면, 5에서 10GB정도가 일반적으로 적합합니다.

/tmp - 분리된 /tmp 디렉토리는 드물지만 thin client를 제어하는 데 유용합니다. 이 파티션은 보통 2GB 넘게 필요하지는 않습니다.

/usr/src - 이 파티션은 BLFS 소스 파일과 LFS 빌드에 해당 파일들을 공유할 때 사용될 위치를 제공하기에 매우 유용합니다. 또한 BLFS 패키지를 빌드할 때 필요한 위치로도 사용됩니다. 합리적으로 볼 때 30에서 50GB가 적당합니다.

모든 분리된 파티션은 /etc/fstab에서 설정해주어야 부트시에 자동적으로 마운트될 수 있습니다. 이것에 대해 자세하게 알고자 한다면 8.2절 "/etc/fstab/ 파일 만들기"를 살펴보십시오.

1.2.3. 새 파티션에 파일시스템 만들기


빈 파티션이 있다면, 그 위에 파일 시스템을 만들 수 있습니다. 리눅스상에서는 ext2가 주로 사용되지만, 요즘의 대용량 HDD에서는 journaling file system (ext3)가 점점 보편화 되는 추세입니다.우리는 ext2를 만들것입니다, 하지만 다른 파일 시스템을 사용하고 싶다면 http://www.linuxfromscratch.org/blfs/view/svn/postlfs/filesystems.html <--에서 찾아 보세요.

LFS 파티션에 ext2 파일 시스템을 만들려면 아래처럼 하세요.
mke2fs /dev/xxx
NOTE 어떤 호스트 시스템에서는 그들의 파일시스템 생성 도구를 이용하기도 합니다-E2fsprogs. 이것은 이름은 같지만 LFS에서 설치된 E2fsprogs에 의해 지원되지 않을 수도 있기 때문에 나중에 여러분의 새로운 LFS를 부팅할 때 문제를 야기할 수도 있습니다.
"unsupported filesystem features, upgrade your e2fsprogs"라는 에러메세지가 나타난다면 다음의 명령어를 통해서 배포판별로 수정된 e2fsprogs를 사용한 건지 확인할 수 있습니다.

debugfs -R feature /dev/<xxx>

xxx를 LFS 파티션 이름으로 바꾸세요.(예를들면 hda5)

새로운 스왑 파티션을 만들었다면 초기화해야 합니다. (사용법은 mke2fs를 참조..)
mkswap /dev/yyy
만약 출력물이 has_journal, ext_attr, resize_inode, dir_index, filetype, sparse_super, large_file 또는 needs_recovery와 다른 특징을 포함하고 있다면 여러분의 호스트 시스템은 수정된 파일시스템 도구를 사용하고 있는 것입니다. 이러한 경우에는 나중에 문제가 발생하는 것을 막기 위해 (배포판에 의해 수정되지 않은) E2fsprogs 패키지를 컴파일하고 만들어진 바이너리를 이용해서 LFS 파티션에 파일시스템을 다시 만들어야 합니다(다시 포맷해야 한다는 뜻).
cd /tmp
tar -xzvf /path/to/sources/e2fsprogs-1.42.5.tar.gz
cd e2fsprogs-1.42.5
mkdir -v build
cd build
../configure
make #note that we intentionally don't 'make install' here!
./misc/mke2fs -jv /dev/<xxx>
cd /tmp
rm -rfv e2fsprogs-1.42.5

만일 이미 존재하고 있는 swap 파티션을 사용하고 있다면 해당 파티션을 새로 포맷할 필요는 없습니다. 만약 새로운 swap 파티션이 생성되었다면 다음의 명령으로 초기화시킬 수 있습니다.
mkswap /dev/<yyy>

yyy를 swap 파티션 이름으로 바꾸세요.



1.2.4. 새 파티션 마운트 하기


이제 우린 파일 시스템을 만들었고, 그 파티션을 사용하기 위해서 마운할 장소를 고르고, 마운트를 해야합니다.이 문서에서는 파일 시스템이 /mnt/lfs 에 마운트 되어 있다고 가정할 것이지만, 어떤 디렉토리를 선택하더라도 상관 없습니다.

마운트 할 곳을 선택하고 아래와 같이 실행하여 환경변수에 적용시키세요.
export LFS=/mnt/lfs

마운트 할 디렉토리를 만들고 아래와 같이 실행하여 LFS 파일 시스템을 마운트 하세요:
mkdir -pv $LFS
mount -v -t ext3 /dev/<xxx> $LFS
xxx를 lfs파티션이름으로 바꾸세요.

lfs 시스템을 멀티 파티션으로 구성할 생각이라면(예를 들어 "/" 와 "/usr)"를 각기 다른 파티션으로 배정할 경우) 마운트는 다음과 같이 하세요.
mkdir -pv $LFS 
mount -v -t ext3 /dev/<xxx> $LFS
mkdir -v $LFS/usr
mount /dev/<yyy> $LFS/usr
물론, xxx와 yyy는 적절한 이름으로 바꿔줍니다.

새로운 파티션을 마운트 할 때는 suid,dev,atime 같은 옵션을 사용하지 않고 마운트 합시다. LFS 파티션이 어떤 옵션을 가지고 마운트 되었는지 보기 위해서 파라미터없이 마운트 명령을 실행 시킬수 있습니다. 만약 suid, dev, atime 이 잘못되었다면 다시 마운트 해야합니다.

만약 여러분이 swap 파티션을 사용한다면, swapon 명령어로 활성화시키십시오.
/sbin/swapon -v /dev/<zzz>
<zzz> 대신에 swap 파티션 이름을 넣어주면 됩니다.

이제 우리는 작업할 공간을 만들었고, 패키지를 다운로드 받을 준비가 되었습니다.




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2013-01-19 23:40:47
Processing time 0.0390 sec