カーネルソースコード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
...

わかりました..ついに、それはい私が認識できるLinuxソースファイル :)

しかし、これらはまだ「バニラ」「非パッチ」ソースのようです。パッチだけでなく、これらすべてを実行するコマンドがあるとしますが、それが何であるかはわかりません...とにかく、これもうまくいくことを願っています。ヒント他の人は少し - 乾杯!

おすすめ記事