0

我构建了一个名为 rsv-1.0 的 rpm,当您安装 rsv-1.0.rpm 时,它会自动将 rsv.cfg 文件安装到 /etc

该软件包仅包含一个文件 etc/rsc.cfg

如果我想在文件 rsv.cfg 中为更新的 rpm 做一些更改,比如 rsv-2.0.rpm

然后我创建了一个空目录并将它的皮重到 rsv-2.0.tar.gz 包括在新的 SPEC 文件中

%post
if [ -f /etc/rsv.cfg ]; then
    /bin/echo "hello-2.0" > /etc/rsv.cfg
fi

作为 shell 命令

但我发现它仅在您使用 rpm -ivh rsv-2.0.rpm 时才有效

如果使用 rpm -Uvh rsv-2.0.rpm,/etc/rsv.cfg 中的文件会消失

所以我的问题是,如何制作一个除了运行 shell 命令之外什么都不做的更新 rpm?

更新 v2 的规范文件

Name: rsv
Version: 2.0
Release: 1
Summary: rsv rpm

Group:  rsv
License: GPL+
URL: 
Source0: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

#BuildRequires:
#Requires:

%description
%{summary}

%prep
%setup -q


%build


%install
rm -rf %{buildroot}
mkdir -p  %{buildroot}

#cp -a * %{buildroot}


%clean
rm -rf %{buildroot}

%post
if [ -f /etc/rsv.cfg ]; then
    /bin/echo "hello-2.0" > /etc/rsv.cfg
fi


%files
%defattr(-,root,root,-)
%doc

#%config %{_sysconfdir}/%{name}.cfg

%changelog

v1.0 的规范文件只是取消注释 %config 和 #cp

4

1 回答 1

0

因为原始spec文件不正确并且没有明确将该文件列为配置文件,我认为这就是擦除它的原因。

一个可能的解决方法是让版本 2%pre部分查看它是否存在并将其复制到某处。

升级的脚本顺序可能会令人困惑。安装第二个副本,%pre/%post调用它们,然后调用第一个副本%preun/%postun

于 2013-06-24T09:02:35.713 回答