私は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」と同等の意味を持ちます。
.... -bp
rpmに関連する「ソース」だけが解凍され、特定の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):
のコードスニペットの生出力にはその行の後に何もありません)。私は本質的にrpmbuild
tmpスクリプトが行ったことを繰り返しました。問題:
# 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ソースファイル :)
しかし、これらはまだ「バニラ」「非パッチ」ソースのようです。パッチだけでなく、これらすべてを実行するコマンドがあるとしますが、それが何であるかはわかりません...とにかく、これもうまくいくことを願っています。ヒント他の人は少し - 乾杯!