我需要关于以下的build议
我构build简单的spec文件并构buildrpm
我将新的rpm传输到其他Linux机器以安装新的rpm
根据spec文件新的rpm – > test.sh-6.2-2.i386.rpm应该创build/ tmp / MY_RPM_TESTS目录,但是这个rpm不能创buildMY_RPM_TESTS和子目录,请指教为什么,我需要修复spec文件?
RPM安装:
[root@linux1 rpm -Uvh /root/rpmbuild/RPMS/i386/test.sh-6.2-2.i386.rpm Preparing... ########################################### [100%] This is preinstall script Linux linux 2.6.18-164.2.1.el5PAE #1 SMP Mon Sep 21 04:45:05 EDT 2009 i686 i686 i386 GNU/Linux 1:test.sh ########################################### [100%] Linux linux 2.6.18-164.2.1.el5PAE #1 SMP Mon Sep 21 04:45:05 EDT 2009 i686 i686 i386 GNU/Linux Now we wait for sleep 100 [root@linux1 ls /tmp preinstall_dir
我的SPEC文件:
root@linux /usr/src/redhat/SPECS]# more my_spec.spec Summary: An example tool. To show a simple rpm build of the tool. Name: test.sh Version: 6.2 Release: 2 Source0: /root/test.sh Source1: /root/urim.sh Group: Development/Debuggers BuildRoot:/tmp/MY_RPM_TESTS License: OtherLicense %description %pre -p /bin/ksh print "This is preinstall script" uname -a rm -rf /tmp/preinstall_dir mkdir /tmp/preinstall_dir %install rm -rf %{buildroot} mkdir -p %{buildroot} mkdir -p %{buildroot}/home mkdir -p %{buildroot}/home/home1 cp %SOURCE0 %{buildroot}/home cp %SOURCE0 %{buildroot}/home/home1 cp %SOURCE1 %{buildroot}/home %files /home/test.sh /home/home1/test.sh /home/urim.sh %post -p /bin/ksh uname -a print "Now we wait for sleep" ; sleep 1 NUM=100 print $NUM
build立rpm:
[root@linux /usr/src/redhat/SPECS]# rpm -ba /usr/src/redhat/SPECS/my_spec.spec Executing(%install): /bin/sh -e /root/rpmbuild/tmp/rpm-tmp.83360 + umask 022 + cd /root/rpmbuild/BUILD + rm -rf /tmp/MY_RPM_TESTS + mkdir -p /tmp/MY_RPM_TESTS + mkdir -p /tmp/MY_RPM_TESTS/home + mkdir -p /tmp/MY_RPM_TESTS/home/home1 + cp /root/rpmbuild/SOURCES/test.sh /tmp/MY_RPM_TESTS/home + cp /root/rpmbuild/SOURCES/test.sh /tmp/MY_RPM_TESTS/home/home1 + cp /root/rpmbuild/SOURCES/urim.sh /tmp/MY_RPM_TESTS/home + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip + /usr/lib/rpm/brp-strip-static-archive + /usr/lib/rpm/brp-strip-comment-note Processing files: test.sh-6.2-2 Requires(interp): /bin/ksh /bin/ksh Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib (PayloadFilesHavePrefix) <= 4.0-1 Requires(pre): /bin/ksh Requires(post): /bin/ksh Checking for unpackaged file(s): /usr/lib/rpm/check-files /tmp/MY_RPM_TESTS Wrote: /root/rpmbuild/SRPMS/test.sh-6.2-2.src.rpm Wrote: /root/rpmbuild/RPMS/i386/test.sh-6.2-2.i386.rpm
[它]应该创build/ tmp / MY_RPM_TESTS目录…
这是错误的。 构build根目录仅在构build和删除之后使用,并且仅包含文件/目录等。 列在%files部分将被创build.a
spec文件的%install和%post部分在完全不同的环境中执行。 %install脚本只能在构build机器上运行,作为程序包构build过程的一部分。 %post脚本在你试图安装RPM的机器(“目标机器”)上运行。
目标机器不可能甚至不需要了解构build机器上用于创build包的构build环境的任何信息。 这就是为什么你没有看到在目标机器上创build/tmp/MY_RPM_TESTS ; 该文件夹是在%install过程中在构build机器上创build的。
也就是说,从spec文件的外观来看,你不需要在目标机器上创build/tmp/MY_RPM_TESTS文件夹。 当你安装你的RPM时,这些文件应该存在于…
/home/test.sh /home/home1/test.sh /home/urim.sh
…由您的%files部分定义。 如果您需要将脚本安装在/tmp/MY_RPM_TESTS ,则您的spec文件应该如下所示:
%install rm -rf %{buildroot} mkdir -p %{buildroot}/tmp/MY_RPM_TESTS/home/home1 cp %SOURCE0 %{buildroot}/tmp/MY_RPM_TESTS/home cp %SOURCE0 %{buildroot}/tmp/MY_RPM_TESTS/home/home1 cp %SOURCE1 %{buildroot}/tmp/MY_RPM_TESTS/home %files /tmp/MY_RPM_TESTS/home/test.sh /tmp/MY_RPM_TESTS/home/home1/test.sh /tmp/MY_RPM_TESTS/home/urim.sh
通过比较上面的原始spec文件,你应该能够看到差异,并希望更好地了解如何使用%{buildroot} 。