AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 499045
Accepted
Bastian Nanchen
Bastian Nanchen
Asked: 2019-02-07 05:30:55 +0800 CST2019-02-07 05:30:55 +0800 CST 2019-02-07 05:30:55 +0800 CST

CentOS 7 - 在创建 RPM 包期间设置规范文件遇到的问题

  • 772

我的目标是将 Debian 包翻译成 RPM 包,以便将其安装在 CentOS Linux 7(Red Hat)上。我用外星人来完成它:alien --to-rpm --scripts --keep-version --generate debian_pkg.deb。我使用该--generate标志创建一个用于构建包的目录,因为我想将运行时依赖项添加到规范文件中。为此,我添加了这一行:Requires: nodejs tomcat8 java-1.8.0-openjdk java-1.8.0-openjdk-devel. 然后我尝试创建 package: rpmbuild -ba <package_name>.spec,但它突然以这个错误结束:

Processing files: <package_name>
error: Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv
error: Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp/file.tar.gz
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/README.Debian
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/changelog.Debian.gz
error: File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/copyright


RPM build errors:
    Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv
    Directory not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/srv/tmp/file.tar.gz
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/README.Debian
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/changelog.Debian.gz
    File not found: /root/rpmbuild/BUILDROOT/<package_name>/usr/share/doc/frontend/copyright

我搜索了互联网,发现它链接到该%install部分,更具体地说%{buildroot},但我无法解决这个问题并解决它。有人可以帮帮我吗?

谢谢!

更新

这是本质上的规范文件:

Buildroot: /home/<package_dir>
Version: 1.0
Release: 849
Distribution: Debian
Group: Converted/misc
Requires: nodejs tomcat8 java-1.8.0-openjdk java-1.8.0-openjdk-devel

%define _rpmdir ../
%define _rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm
%define _unpackaged_files_terminate_build 0

%pre
# some shell script

%post
# some shell script

%install
mkdir -p %{buildroot}/usr/share/doc/
mkdir -p %{buildroot}/usr/share/doc/frontend/

%files
%dir "/srv/"
%dir "/srv/tmp/"
"/srv/tmp/file.tar.gz"
%dir "/usr/"
%dir "/usr/share/"
%dir "/usr/share/doc/"
%dir "/usr/share/doc/frontend/"
"/usr/share/doc/frontend/README.Debian"
"/usr/share/doc/frontend/changelog.Debian.gz"
"/usr/share/doc/frontend/copyright"
centos packaging
  • 1 1 个回答
  • 1385 Views

1 个回答

  • Voted
  1. Best Answer
    filbranden
    2019-02-07T06:31:34+08:002019-02-07T06:31:34+08:00

    更新:您遇到的问题是Buildroot:规范文件中的标签。

    在现代系统(也许包括你Buildroot:的系统)中,不再支持规范文件,现在它被忽略了。

    请参阅LinuxQuestions 上的这篇文章:

    Fedora(从 F-10 开始)在规范中不需要 BuildRoot 标签,如果定义了它,它将被忽略。

    您可以通过向 rpmbuild 传递一个参数来解决此问题,--buildroot以便它使用/home/<package_dir>. (这可能会产生不利的副作用,例如在构建完成后删除这些内容,这显然也是现在的默认设置。)

    事实上,传递 rpmbuild 和显式--buildroot是alien自 rpm 4.7.0 开始 ignoring 以来开始做的事情Buildroot:,正如您在这个 commit中看到的那样。


    specfile 并没有真正安装任何源或创建任何文件。

    该部分中唯一发生的事情%install是创建一个(空)/usr/share/doc/frontend/目录。

    由于 specfile 以指定开头Buildroot: /home/<package_dir>,我想它期望该目录之前已填充,因此 rpmbuild 步骤将能够简单地从那里获取已经暂存的内容并打包它们。

    如果您alien从同一个 .deb 再次运行(换句话说,重新开始),您会得到一个/home/<package_dir>填充了 eg 的文件srv/tmp/file.tar.gz吗?如果是这样,那么 rpmbuild 将在您此时运行它时工作。

    在构建 rpm 之后,rpmbuild 中的某些宏可能正在清理%{buildroot}(尽管我会说这很不寻常,因为通常这需要%clean您的规范文件中的一个部分。)检查是否是这种情况,如果在第一个(成功)rpmbuild 之后,下的文件/home/<package_dir>消失了,在这种情况下,进一步运行 rpmbuild 将失败,正如您所描述的......

    • 0

相关问题

  • smartmontools - 自动测试是否与运行简短测试相同?

  • systemctl 命令在 RHEL 6 中不起作用

  • 为什么我的交换机没有从指定的池中获取地址

  • 在 CentOS7 GNOME 的 Applications-menu 选项卡中创建自定义菜单

  • 奇怪的路由器与centos 6一起工作[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve