centos - 安装新包时如何让RPM不覆盖文件?

标签 centos rpm suse

OpenSuSE 11-sp4 狂热用户 Engelbert 工程师拥有两个内容相同的 RPM 包:

rpm -qlp ~/onemy_ls_0.0.1_x86_64.rpm | tee a
/.osc/_apiurl
/.osc/_files
/.osc/_meta
/.osc/_osclib_version
/.osc/_package
/.osc/_project
/my_ls/my_ls.sh

rpm -qlp ~/my_ls_0.0.1_x86_64.rpm | tee b
/.osc/_apiurl
/.osc/_files
/.osc/_meta
/.osc/_osclib_version
/.osc/_package
/.osc/_project
/my_ls/my_ls.sh

diff a b | wc
  0       0       0

工程师 Engelbert 意识到他可以在没有 RPM 警告的情况下安装这两个包:

rpm -e my_ls-0.0.1-1 ; rpm -i ~/my_ls_0.0.1_x86_64.rpm
rpm -e onemy_ls-0.0.1-1 ; rpm -i  ~/onemy_ls_0.0.1_x86_64.rpm

工程师 Engelbert 对自己的选择充满信心。他知道这可能是 rpm 开发人员的一个不错的设计选择。因此,他检查了手册页,确定会有一个选项不允许 rpm 包覆盖系统中的文件。但他找到的所有安装选项都是:

install-options
    [--aid] [--allfiles] [--badreloc] [--excludepath OLDPATH]
    [--excludedocs] [--force] [-h,--hash]
    [--ignoresize] [--ignorearch] [--ignoreos]
    [--includedocs] [--justdb] [--nodeps]
    [--nodigest] [--nosignature] [--nosuggest]
    [--noorder] [--noscripts] [--notriggers]
    [--oldpackage] [--percent] [--prefix NEWPATH]
    [--relocate OLDPATH=NEWPATH]
    [--repackage] [--replacefiles] [--replacepkgs]
    [--test]

他犹豫了一下,奇怪的是有--replacefiles,没有--keepfiles。这表明他保留将是默认行为。因此,他创建了一个脚本:

 rpm -e onemy_ls-0.0.1-1
 rpm -e my_ls-0.0.1-1
 rm -rf /my_ls/
 rpm -i   ~/my_ls_0.0.1_x86_64.rpm
 ls -lh /my_ls -d
 sleep 120
 rpm -i   ~/onemy_ls_0.0.1_x86_64.rpm
 ls -lh /my_ls -d  

这表明文件实际上被覆盖了:

 drwxr-xr-x 2 root root 4.0K Aug 16 17:07 /my_ls
 drwxr-xr-x 2 root root 4.0K Aug 16 17:09 /my_ls

经过研究,Engelbert 工程师仍然找不到答案。现在他正处于包装系统的争论之中,而且,正如某人所问,他需要你的帮助:

如何让rpm安装新包时不覆盖文件?

注意 - 工程师 Engelbert 知道他应该创建更好的带有冲突管理的 rpm 包,你不需要向他解释。他最担心的是确保他的包不会与系统中争夺相同路径的其他专有未发布包发生冲突。

注意 - 使用 fpm,您可以重新生成工程师 Engelbert 的 RPM:

mkdir -p first_pkg/my_ls/
echo ls > first_pkg/my_ls/my_ls.sh 
fpm -s dir -t rpm -n onemy_ls -v 0.0.1 -C first_pkg/ -p onemy_ls_VERSION_ARCH.rpm
fpm -s dir -t rpm -n my_ls -v 0.0.1 -C first_pkg/ -p my_ls_VERSION_ARCH.rpm

最佳答案

是的:rpm 将覆盖 *.rpm 中包含的所有未标记 %config 的文件,并且没有禁用该行为的选项。

关于centos - 安装新包时如何让RPM不覆盖文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38978563/

相关文章:

java - 用于 Ubuntu 和 SuSE 的 Java 应用程序的安装程序/打包程序

linux - 需要帮助在 centos 5.8 上安装 pecl

Linux - mkstemp64 如何创建隐藏文件,我如何在文件系统中看到它

linux - 构建 RPM 以安装包含 MimeType 的 .desktop 文件

Linux 构建包 - 配置脚本抛出错误,但它是错误的

linux - 如何在 file.tar 中列出 file.tar.gz 文件的文件夹/文件

linux - zssh 无法启动并在启动时显示 "out of pty' s"

linux - CentOS 7 - Subversion 更新至 1.8

centos - 禁用 rpmbuild 自动需求查找

linux - 查找使用我的 rpm 的模块