我如何删除从 post 安装的 rpm 文件中安装并且在升级时不需要的文件?
How do i delete a file that is installed from post installation of a rpm and is not needed in the upgrade of it?
以下是 rpm 规范的第一个版本
%post
if [ "" = "1" ];
then
touch /usr/bin/item1.txt
touch /usr/bin/item2.txt
echo "i am in and this line is written from rpm 1-1">>/usr/bin/item1.txt
echo "i am in and this line is written from rpm 1-1">>/usr/bin/item2.txt
fi
%preun
if [ "" = "0" ];
then
sed -i "/i am in and this line is written from rpm 1-1 /d" /usr/bin/item1.txt
sed -i "/i am in and this line is written from rpm 1-1 /d" /usr/bin/item2.txt
rm -rf /usr/bin/item1.txt
rm -rf /usr/bin/item2.txt
fi
if [ "" = "1" ];
then
# what should be here ?
fi
第二版rpm spec如下
%post
if [ "" = "1" ];
then
touch /usr/bin/item1.txt
echo "xyz1" >> /usr/bin/item1.txt
touch /usr/bin/item3.txt
echo "xyz3" >> /usr/bin/item3.txt
fi
if [ "" = "2" ];
then
# what should be here if i want to remove item2.txt file and add item3.txt
fi
%preun
if [ "" = "0" ];
then
# will i have to remove all the files item1 and item 2 along with item3.txt here
fi
if [ "" = "1" ];
then
##
fi
我想简单地删除已安装在 post 基本 rpm 安装脚本中的文件 item2 并安装 item3.txt 文件作为升级的一部分。
看来您对 rpm 打包的工作原理有错误的认识。这是将创建 package-1.0.0-0.spec
和 package-2.0.0-0.rpm
文件的示例工作流程:
创建您要打包的两个文件(这些命令发生在 spec 文件之外,就像您编写代码时一样):
echo "i am in and this line is written from rpm 1" > item1.txt
echo "i am in and this line is written from rpm 1" > item2.txt
现在在这些部分旁边创建一个规范文件:
Version: 1.0.0
Release: 0
%install
install -d -m 0755 "${RPM_BUILD_ROOT}/usr/bin/"
cp item1.txt ${RPM_BUILD_ROOT}/usr/bin/
cp item2.txt ${RPM_BUILD_ROOT}/usr/bin/
%files
/usr/bin/item1.txt
/usr/bin/item2.txt
这将创建包含 item1.txt 和 item2.txt 的 package-1.0.0-0.rpm
现在假设我们要创建下一个版本;那么:
echo "xyz1" >> item1.txt
echo "xyz3" >> item3.txt
规范文件现在应包含:
Version: 2.0.0
Release: 0
%install
install -d -m 0755 "${RPM_BUILD_ROOT}/usr/bin/"
cp item1.txt ${RPM_BUILD_ROOT}/usr/bin/
cp item3.txt ${RPM_BUILD_ROOT}/usr/bin/
%files
/usr/bin/item1.txt
/usr/bin/item3.txt
这将创建 package-2.0.0-0.rpm
。升级后,rpm
现在将删除 /usr/bin/item2.txt 并安装 item1.txt 和 item3.txt
的新版本
以下是 rpm 规范的第一个版本
%post
if [ "" = "1" ];
then
touch /usr/bin/item1.txt
touch /usr/bin/item2.txt
echo "i am in and this line is written from rpm 1-1">>/usr/bin/item1.txt
echo "i am in and this line is written from rpm 1-1">>/usr/bin/item2.txt
fi
%preun
if [ "" = "0" ];
then
sed -i "/i am in and this line is written from rpm 1-1 /d" /usr/bin/item1.txt
sed -i "/i am in and this line is written from rpm 1-1 /d" /usr/bin/item2.txt
rm -rf /usr/bin/item1.txt
rm -rf /usr/bin/item2.txt
fi
if [ "" = "1" ];
then
# what should be here ?
fi
第二版rpm spec如下
%post
if [ "" = "1" ];
then
touch /usr/bin/item1.txt
echo "xyz1" >> /usr/bin/item1.txt
touch /usr/bin/item3.txt
echo "xyz3" >> /usr/bin/item3.txt
fi
if [ "" = "2" ];
then
# what should be here if i want to remove item2.txt file and add item3.txt
fi
%preun
if [ "" = "0" ];
then
# will i have to remove all the files item1 and item 2 along with item3.txt here
fi
if [ "" = "1" ];
then
##
fi
我想简单地删除已安装在 post 基本 rpm 安装脚本中的文件 item2 并安装 item3.txt 文件作为升级的一部分。
看来您对 rpm 打包的工作原理有错误的认识。这是将创建 package-1.0.0-0.spec
和 package-2.0.0-0.rpm
文件的示例工作流程:
创建您要打包的两个文件(这些命令发生在 spec 文件之外,就像您编写代码时一样):
echo "i am in and this line is written from rpm 1" > item1.txt
echo "i am in and this line is written from rpm 1" > item2.txt
现在在这些部分旁边创建一个规范文件:
Version: 1.0.0
Release: 0
%install
install -d -m 0755 "${RPM_BUILD_ROOT}/usr/bin/"
cp item1.txt ${RPM_BUILD_ROOT}/usr/bin/
cp item2.txt ${RPM_BUILD_ROOT}/usr/bin/
%files
/usr/bin/item1.txt
/usr/bin/item2.txt
这将创建包含 item1.txt 和 item2.txt 的 package-1.0.0-0.rpm
现在假设我们要创建下一个版本;那么:
echo "xyz1" >> item1.txt
echo "xyz3" >> item3.txt
规范文件现在应包含:
Version: 2.0.0
Release: 0
%install
install -d -m 0755 "${RPM_BUILD_ROOT}/usr/bin/"
cp item1.txt ${RPM_BUILD_ROOT}/usr/bin/
cp item3.txt ${RPM_BUILD_ROOT}/usr/bin/
%files
/usr/bin/item1.txt
/usr/bin/item3.txt
这将创建 package-2.0.0-0.rpm
。升级后,rpm
现在将删除 /usr/bin/item2.txt 并安装 item1.txt 和 item3.txt