초보가 시작하는 Ubuntu 7.04 베이스에 LFS 설치기.

bandit176의 이미지

http://www.linuxfromscratch.org/lfs/view/development/chapter06/glibc.html
--------------------------------- 온라인메뉴얼 -------------

1번 이전에 있는 파티셔닝 이라든가 마운트 등은 매뉴얼을 참고하시면
쉽게 하실 수 있습니다... 또한 이글은 반드시 매뉴얼을 옆에 두고 같이 봐가면서
하셔야 하며, 될 수 있으면 끝까지 읽고 적용해 보세요.. 제가 작업하면서 두서없이
흩날려 쓴 문서이기 때문입니다..

혹여나 ^^ 이 문서가 맘에 들어(?) 어딘가에 올리시고 싶으신 분은 출처와 글쓴이(저)
를 꼭 명시해 주시기 바라며 잘못된 곳에 대한 수정은 맘편히 하셔도 됩니다..

1.binutils 2.16.1 설치 시----------------------------------PASS1

lfs 를 위해 만든 계정인 lfs 계정에서 make install 까지 정상적으로 종료된 시점에
ld 디렉토리를 날리고 (make -C ld clean) lib path 를 새로 잡아주는 상황에서
(make -C ld LIB_PATH=/tools/lib) 에러 발생됨.
error meg : tools/bin/ld unrecognized option '--hash-style=both'
이때 root 계정에서 동일 명령을 수행하면 정상적으로 컴파일 됨.
lfs 계정을 만들면서 생긴 디렉토리 권한문제로 생각됨.!! (추가)---흐억.. 아니었음..

--> 디렉토리 권한을 user / group 모두 lfs 로 변경 후 lfs 계정으로 컴파일.
동일 에러
--> 계정 삭제 후 다시 순서에 맞추어 계정 생성하고 실행했으나 gcc 컴파일러의
경로를 찾지 못하는 에러 발생됨. (위와 동일 증상으로 보임)
-->lfs 계정의 .bashrc 내에 PATH 의 원래 순서는
/tools/bin:/bin:/usr/bin이었으나, 이 순서를 bin:/usr/bin:/tools/bin
으로 변경 한 후 정상 동작.
* 추가 : 음.. 하다보니 알게된 것이지만.. 패스를 변경하지 않고 아래의 configure
시에 사용했던 CC=”gcc -B/usr/bin/” 을 사용했다면.. 별다른 문제가 없었
을 것이라 생각된다. ....(ㅠ.ㅠ;)


2.gcc 4.0.3 설치 시
------------------------------PASS1

gcc-4.0.3.tar.bz2 파일을 푼 후 해당 풀린 소스 디렉토리 안에서 바로 컴파일이 않됨.
--> 정책적 문제로서 권고사항을 강제 사항으로 업데이트 함.
--> 특정 디렉토리를 만들어 그 디렉토리 안에서 ../gcc소스디렉/configure .명령을
내려 configure 및 컴파일 성공.
--> 이후 glibc 설치시 많은 에러가 발생되어 gcc 4.1.2 설치 시도 (혹시나 해서리..헐)
--> gcc 4.1.2 configure 시에 CC="gcc -B/usr/bin/" 을 사용하여 명시적으로
gcc를 지정하여 설치함. 정상 컴파일 및 설치.(시스템의 gcc 사용)
*추가 : 패키징을 하는 넘마다 자신의 스타일로 하다보니 configure 에 CC=”gcc -B
/usr/bin 과 같은 형태의 라인을 추가해 놓은 경우 명시적 선언이 필요 없다는..
솔직하게 이부분때문에 1시간은 헤메이다 졸뻔했다..ㅋ


3.linux-2.6.21.5 API Headers
linux kernel 은 lfs 작업내의 glibc 같은 시스템의 C 라이브러리를 위한
Application Programming Interface(API) 이다. 이 작업은 리눅스 소스
tarball 에서 수 많은 C 헤더파일을 보낼 때 이상없게 하는 방법이다.
별다른 어려움 없이 가능하다. (매뉴얼만 따라하시길..ㅋ)

4.glibc 2.3.6 / 2.4 / 2.5 설치시 ------------------------PASS 1
--> glibc 2.3.6 / glibc 2.5 두 패키지 모두 configure 시
에러 발생하여 문서 확인 후
기왕 삽질할 바에 lfs 2007 년(테스트버젼) 에 있는 gcc-4.1.2와 glibc-2.5
올리기로 결정. --> gcc 4.1.2 는 정상적으로 올라감.
--> glibc-2.3.6 설치 시
size of long double...
configure: error: cannot compute sizeof (long double), 77
에러 발생됨. gcc 컴파일 시 사용했던 CC=”gcc -B/usr/bin/” 을 앞쪽에 명기하고
정상적으로 진행. 졸다가 쓰는 관계로 맞는지는...쿨럭...
--> configure 완료 후 컴파일 진행과정에서 에러 발생.
csu/version-info.h 파일 내의 구문 오류 나타남. 해당 오류는 이미 bug report
에 올라간 전적이 있으며.. google 검색 결과로 추론하건데...
우분투의 경우 /bin/sh 가 /bin/dash 를 simbolic link 하고 있음으로 해서
bash형 구문을 사용하는 version-info.h 파일의 경우 /bin/sh 를 참조하다가 구문
오류가 나타나는 듯 함.
누군가 간단하게 simbolic link 만 수정하면 된다길래 해봤는데...낚였다..쿨럭..
또한 해당 부분에 대한 version-info.h 패치가 다수 존재하나... 제 실력이 미달
인지 여러가지 패치해도 않되어서 glibc 2.5 로 넘어감.. 쿨럭.. 현실도피.(@.@;)
--> glibc 2.4 configure 정상 진행 됨.
컴파일 시 glibc/elf/librtld.os 관련 에러 나타남.`__stack_chk_fail_local'
역시 google 신께 문의드렸으나.. 어려운 답변에 슬그머니..... 먼산..쿨럭..
--> glibc 2.5 configure 과정에서 에러 발생
Need linker with .init_array/.fini_array support. error 나타남.
--> CC=”gcc -B/usr/bin 옵션 깜빡해서 나타난 에러
--> glibc 2.5 설치로 전환 후 CC=”gcc -B/usr/bin/” 을 명기한 후 configure
성공. 그러나 컴파일 도중 gcc 2.4 때와 동일 에러 발생함
glibc/elf/librtld.os 관련 에러 나타남. `__stack_chk_fail_local'
이것은 glibc 2.4 때와 동일한 .... 에...러...쿨럭..
헐.. 결국 밟아야 하는 똥이었다.
--> CFLAGS="-fno-stack-protector" 옵션으로 해결한 사례를 이용 재 컴파일
--> config.h:3:3: error: #error "glibc cannot be compiled
without optimization" 에러 발생.
--> 해당 에러는 기본적으로 glibc가 자신이 요구하는 옵티마이즈 영역에 configure
때 기입한 CFLAGS=” ” 부분을 받아들이지 않기 때문에 옵티마이즈 하지 말라고
나오는 문제임. 아.. 혈압.. CFLAGS 옵션을 주지 않고 configure 시에 기본
CFLAGS 값이 “-g -o2” 입력되는 것을 확인하고 configure 파일 내부에서 해당
옵션이 들어 가는 영역을 찾음. 해당 영역에 “-g -02 -fno-stack-protector”
라고 원하는 옵티마이즈 값을 삽입.
(configure 는 어차피 glibc 소스에서 나온 파일 임으로 glibc 내부
값으로 인식해 옵션이 적용 될 것이라 추측. --> 정상 컴파일 완료. ~캬..)
새벽 5시 15분 동이 터온다...헐... 참고로 어제 낮 2시부터 삽질중..
--> 켁... make check 실패...쿨럭...
Testing ASCIItst-tables.sh: 259: tst-table.sh: not found 에러
뿜어댐.. iconv 와 관련된 에러로 보이며, 현 ubuntu 데스크탑 feisty 에는 설치
되어 있지 않음.
--> iconv-dev 여하튼 iconv가 들어가는 패키지는 다 설치.켁.. 다른에러 돌출.
tst-fmon.out error 이며 ppc 관련 에러로 추정됨. 해당 패키지 검색
--> dietlib / dietlib-dev 설치 후 정상적 진행.
또 에러.. 이거 해야하는 건지..쿨럭.
dlfcn/bug-atexit3.out] Error 1 에러 나타남.
libidn-dev 패키지 설치 후 넘어감.
--> 이번에는 nptl.크아~ /nptl/tst-cond16.out] Error 쓰레드 관련이니...
libthread-dev / linthread20 헐.. 찍었는데 맞았다..쿨럭...
--> nptl/tst-cancel1.out 허걱 하다보니 뭔가 이상하다...
--> nptl/tls-clenaup0.out ... make check는 왜이리 에러가 많은지, 일단..
make -k check 로 정리해 보니 전부 ok는 났다... 음.. 그럼 위에서 설치한
수많은 패키지들은..... 먼산..(@.@;) ...알아서 대처들 하시길.. 슬그머니~


5.Adjuting the toolchain

최초에 설치했던 binutils 의 linker 를 백업하고 이름을 변경한다.
그런 후 새로운 링크를 만든다.
--> 여기서 문제 발생됨 $(gcc -dumpmachine) 이 부분이 시스템의 gcc 설정과 충돌
하여 정상적인 디렉토리명을 전달하지 못한다. 이유는 현재 설치된 ubuntu 7,04
에서는 gcc 가 i486-linux-gnu 의 arch 로 설치되어 있고, lfs 상에 설치한 gcc
의 경우 i686-pc-linux-gnu 의 arch 로 설치되어 있기 때문에 현재 $(gcc
-dumpmachine)가 지칭하는 디렉토리는 i486-linux-gnu 가 되어 버리기 때문이다.
--> 이를 해결하기 위해 해당 $(gcc -dumpmachine) 부분을 전부 절대경로를 사용하여
수동으로 지정했다. 일단 프로세스 진행에 이상은 없었다.

gcc -dumpspecs 의 경우에도 메인 시스템 상의 gcc 정보를 사용하지 않고 lfs 상에
만들어진 gcc 경로까지 들어가 ./gcc -dumpspecs 로 실행하여 기존 메인 시스템의
gcc 설정과 섞이지 않도록 했다. 끝으로 GCC_INCLUDEDIR 역시 $(gcc -dumpmachine) 이 부분을 절대경로로 lfs상의 gcc 디렉토리를 지정하도록 했다.


6.TCL-8.4.15

설치에 전혀 문제가 없었다. 매뉴얼상의 프로세스를 따라 순차적으로 진행하였다.

7.expect-5.43.0

설치에 전혀 문제가 없었다. 매뉴얼상의 프로세스를 따라 순차적으로 진행하였다.
--> 의문점은 expect 의 configure 스크립트가 /usr/local/bin/stty 가 아닌
/bin/stty 를 사용하도록 한데 있다. 기존의 configure 의 스크립트를 확인해
보면 stty 가 사용되는 지 확인 하여 사용하고 있으면 /usr/local/bin/stty 의
경로를 STTY_BIN 변수에 대입하게 되어 있으며 사용하고 있지 않다면 /bin/stty
를 STTY_BIN 변수에 대입하게 되어 있다.
매뉴얼 상에는 이 작업이 현 작업중이 testsuite 의 tools 가 지금 작업의 마지막
toolchain 이 될 수 있게 하기 위해서라는데.. 먼소리인지.. 제가 번역을
잘못한 것이면 지적좀..^^ 민망...(~.~;).쿨럭..

8.DejaGNU-1.4.4

다른 프로그램들이 정상적으로 동작하는 지 테스트해 볼 수 있는
환경을 제공하는 프레임워크다.
별다른 문제 없이 설치 가능하다. (매뉴얼상의 프로세스를 따라..)

9.gcc 4.1.2------------------------------------------------PASS 2

기존에 가지고 있던 문제가 발생했다. 최초 binutils 를 설치하기 위해 바꿔주었던
패스 (/tools/bin:/bin:/usr/bin --> /bin:/usr/bin:/tools/bin) 덕에(?) 현재 lfs 디렉토리 내에서 gcc를 실행하면... 시스템상의 gcc가 구동된다는 것..쿨럭... 음..
아마도 위쪽부터 뭔가 조금 꼬여있었던 것 같으나 특히 문제가 될만한 부분은 아니라
생각된다. 여하튼 .bachrc 에 있던 패스를 원래의 설정으로 돌리고 다시 콘솔에 재
로그인 했다.. 역시.. gcc 를 실행하면 lfs 디렉토리 내에 설치한 gcc가
정상적으로 구동된다..캬하하하하하.. 참고로 현재 구동되는 gcc 를 알아보기 위해
gcc -dumpmachine 명령어를 사용해서 시스템 상의 i486... 을 불러오는지 lfs 상의 i686...을 불러오는지 확인했다.
이후 기존에 컴파일했던(pass1) 디렉토리를 모셔두고 gcc2 라는 pass2 용
디렉토리를 만들어 재 컴파일을 시도했다.일단 별 무리없이 컴파일 중이다.
컴파일은 정상적으로 종료 되었으며, 현재 make -k check 중이다.
오지게 오래 걸린다...쿨럭.. 소심함때문에 다른 콘솔에서 ps 가끔 때려봄..ㅋ
삽질을 많이 해서 그런지 모르겠으나 왠지 굉장히 아구가 잘 맞게 세팅되어
있는 듯 한 느낌이다.
--> 헉.. 에러다..make[3] Target `check' not remade because of errors.
zlib-dev 와 libpng 관련 패키지의 미설치 때문에 발생되는 에러로 보여짐.
추후 설치하면 정상 동작됨. 또한 lfs 설치 시 전혀 문제되지 않음. 이라고..
어느 누군가가....쿨럭... joshep 이었나..먼산...
make install 로 설치 완료.


10.binutils-2.17
-------------------------------------PASS2

매뉴얼 상의 프로세스를 따라 진행하면 문제가 생기지 않는다.
정상 설치 완료.

11.ncurses-5.6
12.bash-3.2
13.coreutils-6.9
14.diffutil-2.8.1
15.findutil-4.2.31
16.gawk-3.1.5
11~16번 까지는 매뉴얼에서 지시하는데로 따라만 하시면 별 문제 없이 설치
가능합니다..^^ 귀찮아서라기 보다는... 정말 그렇기 때문이라고 믿어 주시길..ㅋ


17.gettext-0.16.1

매뉴얼과 다른 부분이 있어 몇자 적습니다..ㅋ 몽롱하네요... 몸이 예전같지 않은..
매뉴얼 상에는 make -C gnulib-lib, make -C src msgfmt 를 실행시키게 되어
있습니다. 그러나 실상... configure를 거쳐보면 gnulib-lib , msgfmt 를 실행시킬
수 없게 되어 있습니다. 전 그냥 make 때렸습니다..그랬더니 msgfmt는 /gettext-tools/src/msgfmt 안에 있고, gnulib-lib 는 ./gettext-tools/gnulib-lib 와 ./gettext-runtime/gnulib-lib 안에
생기더군요...헐.. 매뉴얼과 많이 달라 조금 .. 의심.. 스럽.....다는..쿨럭.....
여하튼 cp -v gettext-tools/src/msgfmt /tools/bin 이렇게 했습니다.. gnulib-lib 는 어떻게 해야 할지 몰라 보류중입니다.. 긁적... 혹시 뒤쪽에서 알게되면 추가사항 남기겠습니다..


18.grep-2.5.1a
19.gzip-1.3.12

어제 아침 6시 반에 기상해서 24시간이 넘게 잠을 않잤더니.. 정말 쥐집...(G.G)ㅋ..
하이개그 였습니다.....먼산.. (@.@;)

20.make-3.81
21.perl-5.8.8
22.sed-4.1.5
23.tar-1.18
24.texinfo-4.9
25.util-linux-2.12r

18~25번 까지는 매뉴얼에서 지시하는데로 따라만 하시면 별 문제 없이 설치
가능합니다..^^ 귀찮아서라기 보다는... 정말 그렇기 때문이라고 믿어 주시길..ㅋ

26.stripping

이 작업은 필요없습니다.. 옵션사항이며, 하드 공간이 정말 부족하신분은......
하나 사심이... 요즘 하드값이 바닥입니다... 먼산...(@.@;) 매뉴얼 상으로는
최대 70M 정도 절약(?)... 않하고만다.!!! 하는 프로세스 입니다.. 간단히 읽고 넘어
가시길..


27.changing ownership

한마디로 chroot 를 위한 준비 과정입니다. chroot 는 찾아보심 나옵니다.. 쿨럭...
여기서 중요한 것은 chown -R root:root $LFS/tools 를 생성하기 위해서는 root
계정으로 로그인 하여 작업하셔야 합니다..
*참고로 될수있으면 온라인 매뉴얼이든 pdf 매뉴얼이든 켜 놓으시고 copy & paste 를
즐기시기 바랍니다... 시간도 많이 걸리고 패키지도 많고 하다보니.. 조금만 실수해도
오타를 내서.. 위험(?)한 상황을 초래할 수 있습니다..
그러나 절대로 읽어보지도 않고 따라하는 것은 lfs 를 하는 이유가 무엇인지에 대해
먼저 생각해 보시고 하시길 바랍니다...

여기까지가 temporary 시스템의 끝입니다. 여기까지 별다른 문제 없이 설치를 하셨다면..
그 다음부터 있는 프로세스들은 거의 무사통과라고 보셔도 됩니다.. 단.. 매뉴얼을 꼭 참고
하셔야 합니다.. 먼산...(@.@;) & 책임전가...(~.~;)

끝으로 한마디 더 하자면........
우분투 데스크탑을 가지고 이 작업을 하면서.. 참 괴로웠다는 것을 말씀드리고 싶네요..
물론 데스크탑을 지향하는 linux 로서 훌룡한 면모를 보이고 있는 것은 사실이나.. 개발용
패키지와 관계되어 있는 많은 lib / devel 등의 패키지들이 여기 저기 산개하여 그 끝을
모르게 하는 무서움이란...쿨럭... 저 역시 리눅스의 초짜로서 많이 힘들었다는....ㅠ.ㅠ;

또한 저와 같이 우분투 데스크탑에 파티션 하나 만들어 lfs 와 씨름하실지 모를 분들을
위해 이 문서가 나름 도움이 되실 수 있기를 바랍니다...^^

참고로 우분투 데스크탑 버젼에서 lfs 를 수행한 분들은 잘 아시겠지만...
정말 많은 문제점을 가지고 있습니다... google 을 검색하며 뼈저리게 느낀바에 의하면... 도데체 ubuntu는 어디까지 지들 맘에 드는 패치들만 몽땅해서 이렇게 꼬이게 만드는 것인가.. 그 끝을 알 수 없을 정도입니다... 다들 성공하시길...

모자란 글을 여기까지 읽어 주셔서 너무 감사드립니다..^^ 혹여 저에게 참고자료 및 가르침
을 주실 분들이 계시거나 위의 글에서 잘못된 이해 내지는 설명에 대해서는 지체없이 댓글 내지는 메일 부탁드립니다.. 그래야 저같은 초보분들이 제대로된 정보를 가져가실 수 있으
리라 믿습니다..
---------------- bandit176@gmail.com -----------------------

bandit176의 이미지

nc4010 에 파티션 쪼개서 작업하고 있습니다...
헐.. 이제 매뉴얼에 있는 coreutils 설치하고 있는 중입니다..

temporary 지나고 나니 별로 삽질거리도 없는데다...
몸이 피곤하니 작업속도가 자꾸 떨어지네요...ㅋ

다들 수고하세요..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.