我需要有关以下方面的建议
我建立了简单的 spec 文件并构建了 rpm
我将新的 rpm 转移到其他 Linux 机器上,以便安装新的 rpm
根据规范文件,新的 rpm -> test.sh-6.2-2.i386.rpm 应该创建 /tmp/MY_RPM_TESTS 目录,但是这个 rpm 没有创建 MY_RPM_TESTS 和子目录,请问为什么,我需要在规范文件中修复什么?
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
构建 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
答案1
[它]应该创建 /tmp/MY_RPM_TESTS 目录...
这是错误的。构建根仅在构建时使用,之后将被删除,并且只会%files
创建部分中列出的文件/目录/等。a
答案2
specfile 的和%install
部分%post
在完全不同的环境中执行。该%install
脚本仅在您的构建机器上作为软件包构建过程的一部分运行。该%post
脚本在您尝试安装 RPM 的任何机器(“目标机器”)上运行。
目标机器不可能甚至不需要知道您在构建机器上创建包时使用的构建环境。这就是为什么您看不到在/tmp/MY_RPM_TESTS
目标机器上创建的内容;该文件夹是在构建过程中在构建机器上创建的%install
。
也就是说,从 specfile 来看,您不需要/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
通过将上述内容与原始规范文件进行比较,您应该能够看到差异,并希望更好地理解如何%{buildroot}
使用。