Мне нужен совет по следующему
Я создаю простой файл спецификации и создаю 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
Увеличьте обороты:
[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
[Он] должен создать каталог / tmp / MY_RPM_TESTS ...
Это ошибочно. Корень сборки используется только при сборке и впоследствии удаляется, и только файлы / каталоги / и т. Д. перечисленные в %files
будет создан раздел.
В %install
и %post
разделы specfile выполняются в совершенно разных средах. В %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
, ваш файл спецификации должен выглядеть так:
%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}
должен быть использован.