배포본에 있는 커널과 똑같이 커널 컴파일 하기

pjh0347의 이미지

배포본 설치할때 설치된 바이너리 커널과 똑같은 커널을 만들고 싶습니다.

현재 페도라 코어 4 를 설치한상태입니다.

우선 제가 시도해본 방법은 커널 소스 rpm을 구해서 (kernel-2.6.11-1.1369_FC4.src.rpm)

설치하면

/usr/src/redhat/SOURCE 디렉토리에 패치, 소스, config파일등이 설치되고, /usr/src/redhat/SPEC 디렉토리에 스팩 파일이 설치되는데

rpm -bp 스팩파일이름

해서 압축풀고 패치해서 개발 환경을 만들어준다음

/usr/src/kernels/2.6.11-1.1369_FC4-i686/.config 파일을

복사해오고

make 를 실행했습니다.

결과는 원래 커널과 다른 커널이 만들어지더군요.

도움을 기다리고있겠습니다.

익명 사용자의 이미지

pjh0347 wrote:
배포본 설치할때 설치된 바이너리 커널과 똑같은 커널을 만들고 싶습니다.

현재 페도라 코어 4 를 설치한상태입니다.

우선 제가 시도해본 방법은 커널 소스 rpm을 구해서 (kernel-2.6.11-1.1369_FC4.src.rpm)

설치하면

/usr/src/redhat/SOURCE 디렉토리에 패치, 소스, config파일등이 설치되고, /usr/src/redhat/SPEC 디렉토리에 스팩 파일이 설치되는데

rpm -bp 스팩파일이름

해서 압축풀고 패치해서 개발 환경을 만들어준다음

/usr/src/kernels/2.6.11-1.1369_FC4-i686/.config 파일을

복사해오고

make 를 실행했습니다.

결과는 원래 커널과 다른 커널이 만들어지더군요.

도움을 기다리고있겠습니다.


rpm --rebuild kernel-2.6.11-1.1369_FC4.src.rpm
pjh0347의 이미지

# rpmbuild --rebuild --target i686 kernel-2.6.11-1.1369_FC4.src.rpm
Installing kernel-2.6.11-1.1369_FC4.src.rpm
...................... 잘 작동.

저렇게 해서 만들어진 결과물이..
-rw-r--r-- 1 root root 14891849 Aug 26 10:06 kernel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 434096488 Aug 26 10:47 kernel-debuginfo-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4416406 Aug 26 10:06 kernel-devel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 14188609 Aug 26 10:07 kernel-smp-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4438712 Aug 26 10:07 kernel-smp-devel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 14865392 Aug 26 10:09 kernel-xen0-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4406607 Aug 26 10:09 kernel-xen0-devel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4762465 Aug 26 10:09 kernel-xenU-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4001276 Aug 26 10:10 kernel-xenU-devel-2.6.11-1.1369_FC4.root.i686.rpm

그런데 원래 배포본에 들어있는 커널 rpm 패키지는...
-rw-r--r-- 1 root root 14833487 Jun 4 02:32 kernel-2.6.11-1.1369_FC4.i686.rpm

결론적으로 재 컴파일할때마다 사용자 컴퓨터 환경에 따라서 바이너리 파일이 달라지는겁니까?

소스가지고 컴파일해도 배포본에 들어있는 바이너리 커널과 왜 같은 커널이 만들어지지 않는지 궁굼합니다.

배포본 만드는사람이 악의적인 마음만 있으면 얼마든지 커널에다 나쁜짓 할수 있겠는데여.-_-;;

익명 사용자의 이미지

pjh0347 wrote:
# rpmbuild --rebuild --target i686 kernel-2.6.11-1.1369_FC4.src.rpm
Installing kernel-2.6.11-1.1369_FC4.src.rpm
...................... 잘 작동.

저렇게 해서 만들어진 결과물이..
-rw-r--r-- 1 root root 14891849 Aug 26 10:06 kernel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 434096488 Aug 26 10:47 kernel-debuginfo-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4416406 Aug 26 10:06 kernel-devel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 14188609 Aug 26 10:07 kernel-smp-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4438712 Aug 26 10:07 kernel-smp-devel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 14865392 Aug 26 10:09 kernel-xen0-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4406607 Aug 26 10:09 kernel-xen0-devel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4762465 Aug 26 10:09 kernel-xenU-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4001276 Aug 26 10:10 kernel-xenU-devel-2.6.11-1.1369_FC4.root.i686.rpm

그런데 원래 배포본에 들어있는 커널 rpm 패키지는...
-rw-r--r-- 1 root root 14833487 Jun 4 02:32 kernel-2.6.11-1.1369_FC4.i686.rpm

결론적으로 재 컴파일할때마다 사용자 컴퓨터 환경에 따라서 바이너리 파일이 달라지는겁니까?

소스가지고 컴파일해도 배포본에 들어있는 바이너리 커널과 왜 같은 커널이 만들어지지 않는지 궁굼합니다.

배포본 만드는사람이 악의적인 마음만 있으면 얼마든지 커널에다 나쁜짓 할수 있겠는데여.-_-;;


그 바이너리 크기는 리녹스깔고 아무것도 안하고 컴파일하면 같아질수도
pjh0347의 이미지

리눅스 커널 공부하려고 중고 부품 모아서 새로 만든 컴퓨터에

페도라 코어 4 설치하고 바로 작업했는데 잘 않되네여..

아시는분... ㅜㅜ 도움좀 주세요.

sangwoo의 이미지

컴파일 플래그와 같은 것이 미묘하게 다른 게 아닐까요?
아니면 바이너리에 현재시간이라든지, 컴파일할때마다 다른 정보가 들어가는 건지도 모르겠군요..

----
Let's shut up and code.

pjh0347의 이미지

그러면 결국엔

배포본에 들어있는 바이너리 커널이

정확히 어떤 소스에 의해서 컴파일됐는지

검증할 방법이 없다는게 되는데요...

점점.. 배포본을 의심하게 되네여.

이젠 커널 소스 다운받아 직접 컴파일해서 써야되겠네여.

jedi의 이미지

압축과정을 거치면서 크기가 달라지는 것아닐까요?
압축하면서 날짜 시간등 들어가니까....

정확히 하려면 vmlinuz 같은 파일이나 압축되지 않은 파일을 가지고 비교해봐야 할것 같은데요.

+++ 여기부터는 서명입니다. +++
국가 기구의 존속을 위한 최소한의 세금만을 내고, 전체 인민들이 균등한 삶을
영위할 수 있는 착취가 없는 혁명의 그날은 언제나 올 것인가!
-- 조정래, <태백산맥> 중에서, 1986년

pjh0347의 이미지

-rw-r--r-- 1 root root 56991 Jun 3 12:03 config-2.6.11-1.1369_FC4
-rw-r--r-- 1 root root 56996 Aug 26 05:04 config-2.6.11-1.1369_FC4.root
drwxr-xr-x 2 root root 4096 Aug 26 16:50 grub
-rw-r--r-- 1 root root 1107621 Aug 26 16:44 initrd-2.6.11-1.1369_FC4.img
-rw-r--r-- 1 root root 1107616 Aug 26 16:50 initrd-2.6.11-1.1369_FC4.root.img
-rw-r--r-- 1 root root 764778 Jun 3 12:03 System.map-2.6.11-1.1369_FC4
-rw-r--r-- 1 root root 764778 Aug 26 05:04 System.map-2.6.11-1.1369_FC4.root
-rw-r--r-- 1 root root 1639539 Jun 3 12:03 vmlinuz-2.6.11-1.1369_FC4
-rw-r--r-- 1 root root 1639499 Aug 26 05:04 vmlinuz-2.6.11-1.1369_FC4.root

.root 붙은것이 재 컴파일해서 설치한 파일입니다.

vmlinuz파일이 40바이트 크네여.

모듈 디렉토리에있는 내용은 좀 많이 다릅니다.

여전히 미궁속으로...

kslee80의 이미지

/boot 디렉토리에 config-x.x.xx 라는 형태의 파일이 없나요?
이 파일의 내용이 현재 커널 셋팅을 담고 있습니다...
make menuconfig 에서 불러들여서 저장한 후에 컴파일 해 보시기를...

해당 파일은 커널 패키지에 포함되어 있으며,
FC1 이 깔려 있는 컴퓨터에서 존재를 확인한 녀석입니다;;

pjh0347의 이미지

Quote:
/boot 디렉토리에 config-x.x.xx 라는 형태의 파일이 없나요?
이 파일의 내용이 현재 커널 셋팅을 담고 있습니다...
make menuconfig 에서 불러들여서 저장한 후에 컴파일 해 보시기를...

/boot 에 있는 현재 커널의 설정 파일 config-2.6.11-1.1369_FC4 가지고
컴파일해봤는데 역시 다릅니다.

혹시 성공하신분 계시다면 언제든 답변 해주세요.

익명 사용자의 이미지

pjh0347 wrote:
# rpmbuild --rebuild --target i686 kernel-2.6.11-1.1369_FC4.src.rpm
Installing kernel-2.6.11-1.1369_FC4.src.rpm
...................... 잘 작동.

저렇게 해서 만들어진 결과물이..
-rw-r--r-- 1 root root 14891849 Aug 26 10:06 kernel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 434096488 Aug 26 10:47 kernel-debuginfo-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4416406 Aug 26 10:06 kernel-devel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 14188609 Aug 26 10:07 kernel-smp-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4438712 Aug 26 10:07 kernel-smp-devel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 14865392 Aug 26 10:09 kernel-xen0-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4406607 Aug 26 10:09 kernel-xen0-devel-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4762465 Aug 26 10:09 kernel-xenU-2.6.11-1.1369_FC4.root.i686.rpm
-rw-r--r-- 1 root root 4001276 Aug 26 10:10 kernel-xenU-devel-2.6.11-1.1369_FC4.root.i686.rpm

그런데 원래 배포본에 들어있는 커널 rpm 패키지는...
-rw-r--r-- 1 root root 14833487 Jun 4 02:32 kernel-2.6.11-1.1369_FC4.i686.rpm

결론적으로 재 컴파일할때마다 사용자 컴퓨터 환경에 따라서 바이너리 파일이 달라지는겁니까?


당연히 달라집니다.
우선, gcc 버전이 다르면 달라질 수 있고
어떤 분이 얘기하셨듯이 uname에 들어가는 날짜가 달라지므로
달라지고,
일반 사용자가 빌드하면 root가 아닌 일반 사용자 id가
파일 정보에 남게 되겠고 등등

이런 미세한 정보가 틀리면 압축사이즈도 당연히 틀려지게 됩니다.
비슷하긴 하겠지만..

Quote:
-rw-r--r-- 1 root root 14891849 Aug 26 10:06 kernel-2.6.11-1.1369_FC4.root.i686.rpm

이게 님이 원하는 파일인 것 같군요.
파일 사이즈가 비슷하네요.

Quote:

그런데 원래 배포본에 들어있는 커널 rpm 패키지는...
-rw-r--r-- 1 root root 14833487 Jun 4 02:32 kernel-2.6.11-1.1369_FC4.i686.rpm

적어도 컴파일러 버전만 꼭 같다면 모듈 파일은 완전히
꼭같게됩니다. 일단 만들어진 모듈 크기가 완전히 같은지를
확인해 보세요.

그리고, 빌드하실땐 일반 사용자로 빌드하시길

Quote:

소스가지고 컴파일해도 배포본에 들어있는 바이너리 커널과 왜 같은 커널이 만들어지지 않는지 궁굼합니다.

배포본 만드는사람이 악의적인 마음만 있으면 얼마든지 커널에다 나쁜짓 할수 있겠는데여.-_-;;


레드헷 문닫을 일 있겠습니까 ? ^^;; 이런 일이 정말 있게되면 slashdot에서 난리 나겠죠.
보통 빌드 머신에서 빌드 스크립트로 자동 빌드하게 되는 것으로 알고 있습니다. 개발자의 실수마져 최대한 줄이기 위한 방법이겠죠.
pjh0347의 이미지

Quote:
1. gcc 버전이 다르면 달라질 수 있고

확인해 본 결과 컴파일러 버전이 약간 달랐습니다.(OS설치만한 상태임)

cat /proc/version
Linux version 2.6.11-1.1369_FC4 (bhcompile@decompose.build.redhat.com) (gcc version 4.0.0 20050525 (Red Hat 4.0.0-9)) #1 Thu Jun 2 22:55:56 EDT 2005

gcc -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,java,f95,ada --enable-java-awt=gtk --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --host=i386-redhat-linux
Thread model: posix
gcc version 4.0.0 20050519 (Red Hat 4.0.0-8)

Quote:
2. uname에 들어가는 날짜가 달라지므로 달라지고,

이거는 시스템 시간을 특정시간으로 계속 업데이트해주면 같은 환경을 만들수가 있겠네여.

Quote:
3. 일반 사용자가 빌드하면 root가 아닌 일반 사용자 id가 파일 정보에 남게 되겠고 등등

이게 왜 파일크기에 영향을 주는지 잘 이해가 되지 않습니다. (모르는게 너무 많아서 죄송합니다.-_-;;)

gcc버전을 맞추고 시간을 똑같이 맞춰주고 하면 어느정도 가능성이 있어 보이긴 합니다.

그런데 자꾸 웃음이 나오네여. ^^ 별거아닌거가지고 이렇게 삽질하다 보니 시간은 가고 원래 공부하려는것도 자꾸 늦춰지고. -_-; 커널 컴파일 한번하는데 1시간 걸리는 똥컴환경이라 적어도 컴파일만 10시간 넘게한것같네여. 결과를 끝내 못보고 전 이만 접으렵니다. 할께 많아서.;;

혹시 똑같은 커널 만들기 성공하신분은 ... 꼬~~~옥 답글좀 남겨주세요.

위엣 님들 답변 너무 감사합니다. ^^

7339989b62a014c4ce6e31b3540bc7b5f06455024f22753f6235c935e8e5의 이미지

그런데 왜 완전히 같은 파일을 만들려고 하시나요?
그냥 복사하시면 될 것 같은데... :evil:

pjh0347의 이미지

이유를 물어보셔서 순간 당황스럽네여 ;;;

그냥 하다보니깐 그렇게 됐어요. 끝짱을 봐야 되는 성격이라. 컼..

진짜 이게 컴파일하면 저렇게 나오나? 하는 호기심이져.

혹시 불순한 코드가 들어갈수도 있을까하는 생각도 들고. ㅋㅋ

익명 사용자의 이미지

pjh0347 wrote:
이유를 물어보셔서 순간 당황스럽네여 ;;;

그냥 하다보니깐 그렇게 됐어요. 끝짱을 봐야 되는 성격이라. ㅤㅋㅓㅋ..

진짜 이게 컴파일하면 저렇게 나오나? 하는 호기심이져.

혹시 불순한 코드가 들어갈수도 있을까하는 생각도 들고. ㅋㅋ


세상은 넓고 소스 코드는 많습니다 :twisted:

이런거 할 시간에 차라리 커널 소스를 읽거나 만만한 소스를 열람하시는게 여러모로 실력향상(?)에 도움이 될 듯 8)

뭐 호기심으로 확인하는거야 나쁜건 아니지만 커널 리빌드는 참으로 지루한 작업이거든요.

그리고,

작은 차이가 압축률에 크게 영향을 미치거나 하진 않겠지만 완전히 똑같은 파일이 아니게 되는 원인이 되겠죠.
* uname정보에는 gcc정보, 호스트 정보..
* rpm에는 빌드 사용자 정보 날짜, 시간 등등..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.