文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Rpmbuild使用方法简要

Rpmbuild使用方法简要

时间:2007-01-20  来源:junglegq

<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8"><title></title><meta name="GENERATOR" content="OpenOffice.org 2.0 (Linux)"><meta name="CREATED" content="20060703;15363300"><meta name="CHANGED" content="20060703;16214400"> <style> </style>

Rpmbuild使用方法简要:


specs文件组成:

%preample

%prep

    %setup

    %patch

%build

%install

%install/%uninstall

%verify

%clean

%file list



将tgz包拷贝到/usr/src/linpus/SOURCES下:

mv <xxx.tgz> /usr/src/linpus/SOURCES

cd /usr/src/linpus/SPECS

vi <xxx.spec>



1 preample 定义宏,以下为常用的宏:

Summary:

Name:

Version:

Release:

Copyright:

Group:

Source:

Patch:

URL:

Distribution:

Vendor:

Packager:

%description


其他宏:

icon:

dependency:

requires:

conflicts:

patch:

Serial:

AutoReqProv:[yes/no]

ExcludeArch:

ExclusiveArch:

ExcludeOs:

ExclusiveOs:


2 %prep

%setup将会执行:

rm -rf <old>

tar zxf <xxx.tgz>

mv <new> /usr/src/linpus/BUILD

chown

umask

...


3 %build

./configure

make


4 %install

make install


5 %clean

make clean


6 %files

%doc 将文档导入$RPM_DOC_DIR

%dir 导入目录并文件




rpmbuild 命令参数

-bp

-bc

-bi

-bb

-ba

--recompile xxx.src.rpm 根据src.rpm包,编译并安装到系统。Rpm数据库将不会更新

--rebuild xxx.src.rpm 根据src.rpm包,编译为二进制的rpm包


rpm包的命名规范:

<name>-<version>-<release>





附,rpmbuild执行脚本:


#!/bin/sh


RPM_SOURCE_DIR="/usr/src/linpus/SOURCES"

RPM_BUILD_DIR="/usr/src/linpus/BUILD"

RPM_OPT_FLAGS="-O2 -g -pipe -m32 -march=i386 -mtune=pentium4"

RPM_ARCH="i386"

RPM_OS="linux"

export RPM_SOURCE_DIR RPM_BUILD_DIR RPM_OPT_FLAGS RPM_ARCH RPM_OS

RPM_DOC_DIR="/usr/share/doc"

export RPM_DOC_DIR

RPM_PACKAGE_NAME="kernel"

RPM_PACKAGE_VERSION="2.6.12"

RPM_PACKAGE_RELEASE="1lp"

export RPM_PACKAGE_NAME RPM_PACKAGE_VERSION RPM_PACKAGE_RELEASE

RPM_BUILD_ROOT="/var/tmp/kernel-2.6.12-1lp-root"

export RPM_BUILD_ROOT



set -x

umask 022

cd /usr/src/linpus/BUILD

cd kernel-2.6.12

LANG=C

export LANG

unset DISPLAY


#

# Create gpg keys for signing the modules

#


gpg --homedir . --batch --gen-key /usr/src/linpus/SOURCES/genkey

gpg --homedir . --export --keyring ./kernel.pub Red > extract.pub

make linux-2.6.12/scripts/bin2c

linux-2.6.12/scripts/bin2c ksign_def_public_key __initdata < extract.pub > linux-2.6.12/crypto/signature/key.h


cd linux-2.6.12




BuildKernel() {


# Pick the right config file for the kernel we're building

if [ -n "$1" ] ; then

Config=kernel-2.6.12-i386-$1.config

DevelDir=/usr/src/kernels/2.6.12-1lp-$1-i386

DevelLink=/usr/src/kernels/2.6.12-1lp$1-i386

else

Config=kernel-2.6.12-i386.config

DevelDir=/usr/src/kernels/2.6.12-1lp-i386

DevelLink=

fi


KernelVer=2.6.12-1lp$1

echo BUILDING A KERNEL FOR $1 i386...


# make sure EXTRAVERSION says what we want it to say

perl -p -i -e "s/^EXTRAVERSION.*/EXTRAVERSION = -1lp$1/" Makefile


# and now to start the build process


make -s mrproper

cp configs/$Config .config


Arch=`head -1 .config | cut -b 3-`

echo USING ARCH=$Arch


make -s ARCH=$Arch nonint_oldconfig > /dev/null

make -s ARCH=$Arch include/linux/version.h


make -s ARCH=$Arch bzImage

make -s ARCH=$Arch modules || exit 1

make ARCH=$Arch buildcheck


# Start installing the results


mkdir -p $RPM_BUILD_ROOT/usr/lib/debug/boot

mkdir -p $RPM_BUILD_ROOT/boot

install -m 644 .config $RPM_BUILD_ROOT/boot/config-$KernelVer

install -m 644 System.map $RPM_BUILD_ROOT/boot/System.map-$KernelVer

cp arch/$Arch/boot/bzImage $RPM_BUILD_ROOT/boot/vmlinuz-$KernelVer

if [ -f arch/$Arch/boot/zImage.stub ]; then

cp arch/$Arch/boot/zImage.stub $RPM_BUILD_ROOT/boot/zImage.stub-$KernelVer || :

fi


mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer

make -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer


# And save the headers/makefiles etc for building modules against

#

# This all looks scary, but the end result is supposed to be:

# * all arch relevant include/ files

# * all Makefile/Kconfig files

# * all script/ files


rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build

rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/source

mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build

(cd $RPM_BUILD_ROOT/lib/modules/$KernelVer ; ln -s build source)

# dirs for additional modules per module-init-tools, kbuild/modules.txt

mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/extra

mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/updates

# first copy everything

cp --parents `find -type f -name "Makefile*" -o -name "Kconfig*"` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build

cp Module.symvers $RPM_BUILD_ROOT/lib/modules/$KernelVer/build

# then drop all but the needed Makefiles/Kconfig files

rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Documentation

rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts

rm -rf $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include

cp arch/i386/kernel/asm-offsets.s $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/i386/kernel || :

cp .config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build

cp -a scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build

if [ -d arch/i386/scripts ]; then

cp -a arch/i386/scripts $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/i386 || :

fi

if [ -f arch/i386/*lds ]; then

cp -a arch/i386/*lds $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/i386/ || :

fi

rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*.o

rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/scripts/*/*.o

mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include

cd include

cp -a acpi config linux math-emu media net pcmcia rxrpc scsi sound video asm asm-generic $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include

cp -a `readlink asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include

if [ "$Arch" = "x86_64" ]; then

cp -a asm-i386 $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include

fi

# While arch/powerpc/include/asm is still a symlink to the old

# include/asm-ppc{64,} directory, include that in kernel-devel too.

if [ "$Arch" = "powerpc" -a -r ../arch/powerpc/include/asm ]; then

cp -a `readlink ../arch/powerpc/include/asm` $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include

mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/$Arch/include

pushd $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/arch/$Arch/include

ln -sf ../../../include/asm-ppc* asm

popd

fi

# Make sure the Makefile and version.h have a matching timestamp so that

# external modules can be built

touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/Makefile $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/version.h

touch -r $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/.config $RPM_BUILD_ROOT/lib/modules/$KernelVer/build/include/linux/autoconf.h

cd ..


#

# save the vmlinux file for kernel debugging into the kernel-debuginfo rpm

#

mkdir -p $RPM_BUILD_ROOT/usr/lib/debug/lib/modules/$KernelVer

cp vmlinux $RPM_BUILD_ROOT/usr/lib/debug/lib/modules/$KernelVer


find $RPM_BUILD_ROOT/lib/modules/$KernelVer -name "*.ko" -type f >modnames


# gpg sign the modules

gcc -o scripts/modsign/mod-extract scripts/modsign/mod-extract.c -Wall

KEYFLAGS="--no-default-keyring --homedir .."

KEYFLAGS="$KEYFLAGS --secret-keyring ../kernel.sec"

KEYFLAGS="$KEYFLAGS --keyring ../kernel.pub"

export KEYFLAGS


for i in `cat modnames`

do

sh ./scripts/modsign/modsign.sh $i Red

mv -f $i.signed $i

done

unset KEYFLAGS


# mark modules executable so that strip-to-file can strip them

cat modnames | xargs chmod u+x


# detect missing or incorrect license tags

for i in `cat modnames`

do

echo -n "$i "

/sbin/modinfo -l $i >> modinfo

done

cat modinfo |\

grep -v "^GPL" |

grep -v "^Dual BSD/GPL" |\

grep -v "^Dual MPL/GPL" |\

grep -v "^GPL and additional rights" |\

grep -v "^GPL v2" && exit 1

rm -f modinfo

rm -f modnames

# remove files that will be auto generated by depmod at rpm -i time

rm -f $RPM_BUILD_ROOT/lib/modules/$KernelVer/modules.*


# Move the devel headers out of the root file system

mkdir -p $RPM_BUILD_ROOT/usr/src/kernels

mv $RPM_BUILD_ROOT/lib/modules/$KernelVer/build $RPM_BUILD_ROOT/$DevelDir

ln -sf ../../..$DevelDir $RPM_BUILD_ROOT/lib/modules/$KernelVer/build

[ -z "$DevelLink" ] || ln -sf `basename $DevelDir` $RPM_BUILD_ROOT/$DevelLink

}


###

# DO it...

###


# prepare directories

rm -rf $RPM_BUILD_ROOT

mkdir -p $RPM_BUILD_ROOT/boot


BuildKernel


BuildKernel smp



###

### install

###


相关阅读 更多 +
排行榜 更多 +
儿童学英语

儿童学英语

学习教育 下载
今天开始生存

今天开始生存

动作格斗 下载
飞碟快闪

飞碟快闪

动作格斗 下载