커널 소스 코드 rpm을 시스템(OpenSuse) 외부에서 압축 해제하시겠습니까?

커널 소스 코드 rpm을 시스템(OpenSuse) 외부에서 압축 해제하시겠습니까?

저는 LiveUSB USB 플래시/메모리 스틱에서 OpenSuse 11.2를 사용하고 있는데 공간이 많지 않다고 가정하겠습니다. 사용 중인 애플리케이션용 드라이버를 빌드하려면 이 버전의 OpenSuse에 대한 Linux 소스가 필요합니다. 연결된 하드 드라이브에 디스크 공간이 충분하므로 거기에 소스를 "설치"하고 싶습니다(11.2에서는 zypper --download-only기본값이 다음과 같습니다./var/cache/zypp/packages에 다운로드이로 인해 LiveUSB 설정이 중단됩니다.).

그래서 나는 다음을 수행합니다.

> cd /media/myhdrive/
> wget http://download.opensuse.org/update/11.2/rpm/src/kernel-source-2.6.31.14-0.8.1.src.rpm

> mkdir kernel-source-2.6.31.14
> cd kernel-source-2.6.31.14/
> rpm2cpio ../kernel-source-2.6.31.14-0.8.1.src.rpm | cpio -idmv --no-absolute-filenames

> ls
arch-symbols              kernel-source.rpmlintrc   patches.kabi.tar.bz2
built-in-where            kernel-source.spec        patches.kernel.org.tar.bz2
check-for-config-changes  kernel-source.spec.in     patches.rpmify.tar.bz2
check-supported-list      kernel-spec-macros        patches.rt.tar.bz2
compute-PATCHVERSION.sh   kernel-syms.spec.in       patches.staging.tar.bz2
....

...그리고 많은 *.tar.gz파일(패치)이 있습니다. C 소스 파일과 유사한 것은 없습니다. 이제 소스 트리의 압축을 풀기 위해 스크립트/명령을 적용해야 할 것 같지만 그것이 무엇인지 모르겠습니다.rpmbuild -bb ... 여기, 그러나 나는 실제 소스 코드의 압축을 풀기를 원하지만 이것이 또 다른 것을 구축할 것이라고 생각합니다 . (그리고 루트 파일 시스템 안이나 다른 곳이 .rpm아닌 내가 지정한 위치에 )./usr/src

지금 무엇을 해야 할지 아시나요?

답변해 주셔서 대단히 감사합니다.
응원합니다!

편집: 통과됨사용자 정의 커널 구축 - FedoraProject, 시도했지만 rpmbuild -bp실패했습니다.

# man rpmbuild:
# -bp    Executes the "%prep" stage from the spec file.  Normally  this  involves
unpacking the sources and applying any patches.

> mkdir src
> rpmbuild --buildroot=$(pwd)/src/ -bp --target=$(uname -m) kernel-source.spec
Building target platforms: i686
Building for target i686
error: Unable to open /usr/src/packages/SOURCES/kernel-spec-macros: No such file or directory

답변1

편집: -bc다음 스위치를 사용하십시오 rpmbuild.

-bc 사양 파일에서 "%build" 단계를 실행합니다(%prep 단계 실행 후).
    이는 일반적으로 "make"와 동등한 의미를 갖습니다.

.... -bprpm과 관련된 "소스"만 압축이 풀리고 특정 SUSE 패치를 적용하는 "만들기"는 풀리지 않기 때문입니다. 내 시도는 rpmbuild -bp참조를 위해 아래에 남겨두었습니다. 그게 아닙니다. 자체적인 것입니다. Linux 소스 코드를 추출하지 않고도 말이죠. 다음은 rpmbuild -bc원본 소스 코드의 압축을 풀고 패치를 적용한 를 사용한 로그입니다 (터미널 로그에서 볼 수 있듯이 여기서는 생략되었으며 패치된 소스는 " BUILDROOT" 에 있습니다.):

> mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
> echo "%_topdir $(pwd)/rpmbuild" > ~/.rpmmacros
> rpm -i ../kernel-source-2.6.31.14-0.8.1.src.rpm

> ls rpmbuild/*
rpmbuild/BUILD:

rpmbuild/RPMS:

rpmbuild/SOURCES:
arch-symbols              kernel-source.rpmlintrc   patches.kernel.org.tar.bz2
built-in-where            kernel-source.spec.in     patches.rpmify.tar.bz2
...

> cd rpmbuild/SPECS

> rm -rf ../BUILD/*
> rpmbuild -bc --target=`uname -m` kernel-source.spec 2>&1

> ls ../BUILDROOT/
kernel-source-2.6.31.14-0.8.1.i386

> ls ../BUILD
kernel-source-2.6.31.14

> ls -la ../BUILDROOT/kernel-source-2.6.31.14-0.8.1.i386/usr/src/
total 16
drwxr-xr-x  4 linux users 4096 2011-11-11 20:55 .
drwxr-xr-x  3 linux users 4096 2011-11-11 20:54 ..
lrwxrwxrwx  1 linux users    5 2011-11-11 20:54 linux -> linux
drwxr-xr-x 24 linux users 4096 2011-11-11 20:56 linux-2.6.31.14-0.8.1
drwxr-xr-x 23 linux users 4096 2011-11-11 20:55 linux-2.6.31.14-0.8.1-vanilla

> ls ../BUILDROOT/kernel-source-2.6.31.14-0.8.1.i386/usr/src/linux-2.6.31.14-0.8.1
arch     crypto         fs       Kbuild  MAINTAINERS  README          security  virt
block    Documentation  include  kdb     Makefile     REPORTING-BUGS  sound
....

글쎄, 이것은 꽤 복잡하다는 것이 밝혀졌습니다(아직도 올바른 방법을 모른다는 점을 고려하면). 하지만 이 게시물은Centos/Xen에서 사용자 정의 커널을 컴파일하거나 CS:S 서버를 최적화하는 방법방법을 보여줍니다. 그 기사 이후에 나는 이것을 만들었습니다(여전히 kernel-source-2.6.31.14/ OP의 디렉토리에 있습니다.):

> mkdir -p rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
> echo "%_topdir $(pwd)/rpmbuild" > ~/.rpmmacros
> rpm -i ../kernel-source-2.6.31.14-0.8.1.src.rpm

> ls rpmbuild/*
rpmbuild/BUILD:

rpmbuild/RPMS:

rpmbuild/SOURCES:
arch-symbols              kernel-source.rpmlintrc   patches.kernel.org.tar.bz2
built-in-where            kernel-source.spec.in     patches.rpmify.tar.bz2
...

> cd rpmbuild/SPECS

> rpmbuild -bp --target=`uname -m` kernel-source.spec
Building target platforms: i686
Building for target i686
error: Failed build dependencies:
        fdupes is needed by kernel-source-2.6.31.14-0.8.1.src

> sudo zypper install fdupes

> rpmbuild -bp --target=`uname -m` kernel-source.spec
Building target platforms: i686
Building for target i686
Executing(%prep): /bin/bash -e /var/tmp/rpm-tmp.4uWZo1
+ umask 022
+ cd /path/to/kernel-source-2.6.31.14/rpmbuild/BUILD
+ '[' -e /path/to/kernel-source-2.6.31.14/rpmbuild/SOURCES/linux-2.6.31.tar.bz2 ']'
+ echo 'Symbol(s): '
Symbol(s):
+ cd /path/to/kernel-source-2.6.31.14/rpmbuild/BUILD
+ rm -rf kernel-source-2.6.31.14
+ /bin/mkdir -p kernel-source-2.6.31.14
+ cd kernel-source-2.6.31.14
+ /usr/bin/bzip2 -dc /path/to/kernel-source-2.6.31.14/rpmbuild/SOURCES/config.tar.bz2
+ /bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ /usr/bin/bzip2 -dc /path/to/kernel-source-2.6.31.14/rpmbuild/SOURCES/patches.arch.tar.bz2
+ /bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ /usr/bin/bzip2 -dc /path/to/kernel-source-2.6.31.14/rpmbuild/SOURCES/patches.drivers.tar.bz2
+ /bin/tar -xf -
+ STATUS=0
... [snip] ...
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0


> ls ../BUILD/kernel-source-2.6.31.14/
config            patches.arch     patches.kabi        patches.rt       patches.trace
patches.addon     patches.drivers  patches.kernel.org  patches.staging  patches.xen
patches.apparmor  patches.fixes    patches.rpmify      patches.suse
....

# ?? no linux sources?

...그리고 놀랍게도 이 모든 후에도 여전히 Linux 소스 코드를 볼 수 없습니다. 그러나 나는 -e /path/to/kernel-source-2.6.31.14/rpmbuild/SOURCES/linux-2.6.31.tar.bz2위의 스크립트에서 linux*.tar.bz2가 압축 해제되지 않았을 수도 있다는 것을 알아차렸습니다( Symbol(s):위의 코드 조각의 원시 출력에는 해당 줄 뒤에 아무것도 없습니다). 나는 본질적으로 rpmbuildtmp 스크립트가 수행한 작업을 반복했습니다. 문제:

# done previously
> # cd ./rpmbuild/SPECS/ 
> # rpmbuild -bp --target=`uname -m` kernel-source.spec 2>&1  


> cd ../..
> cd ./rpmbuild/BUILD/kernel-source-2.6.31.14/
> /usr/bin/bzip2 -dc ../../../rpmbuild/SOURCES/linux-2.6.31.tar.bz2  | /bin/tar -xf -

> ls               # linux-2.6.31 directory gets created
> ls linux-2.6.31/
arch     crypto         fs       Kbuild       Makefile  REPORTING-BUGS  sound
block    Documentation  include  kernel       mm        samples         tools
...

알았어..드디어, 그거내가 인식할 수 있는 리눅스 소스 파일 :)

그러나 이것들은 여전히 ​​"바닐라" "패치되지 않은" 소스인 것 같습니다. 패치뿐만 아니라 이 모든 작업을 수행하는 명령이 있다고 가정하지만 그것이 무엇인지는 모르겠습니다... 어쨌든, 이것도 작동하기를 바랍니다. 도움말 다른 사람들은 조금 – 건배!

관련 정보