SBT 原生打包程序:在 %install 中解压缩工件

Posted

技术标签:

【中文标题】SBT 原生打包程序:在 %install 中解压缩工件【英文标题】:SBT native packager: Unzip artifact in %install 【发布时间】:2015-07-23 11:14:30 【问题描述】:

我正在使用带有 SBT 0.13.5 的 sbt-native-packager (0.8.0)。我有一个 zip 文件,应该作为 RPM 安装的一部分解压缩。在 RPM 规范中,它将位于 %install 部分下,我将在哪里使用 sbt-native-packager 定义它?我可以解压缩工件并将解压缩的文件夹添加为linuxPackageMapping,但我想检查是否有办法将 zip 包含在 RPM 中并在安装过程中解压缩。

【问题讨论】:

一个关于 rpm 工作原理的小说明。规范文件的%install 部分不会在安装计算机上安装软件包时发生。它发生在包构建过程中,并且是 in 打包的 rpm 文件被放入 buildroot 目录的位置。只有%pre/%post/等。规范文件中的脚本在安装计算机上运行。 (通常你不想把新文件放在那里,因为这样 rpm 不会知道你的包拥有它们,除非你在 %files 部分将它们列为 %ghost 文件。) @EtanReisner 感谢您澄清%install 的工作。 【参考方案1】:

除了 Etan 的评论,它说您不应该在安装过程中创建新文件(如果没有必要)。这就是您在 rpm 中放置额外 rpm 脚本的方式。另见documentation

rpmPost := 
  val prev = rpmPost.value.getOrElse("")
  Some(s"""|$prev
           | unzip magic-file.zip
           |""".stripMargin)
  

更新

也可以看看JavaServerAppPackaging Customize Docs

干杯, 渚

【讨论】:

以上是关于SBT 原生打包程序:在 %install 中解压缩工件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SBT 原生打包器部署 Scala Play 框架 API

sbt 原生打包器 dockerCommands 复制

Sbt 本机打包程序不创建服务脚本文件

设置 sbt 程序集 v0.14.2 的问题

sbt打包Scala写的Spark程序,打包正常,提交运行时提示找不到对应的类

Sbt 本机打包程序找不到 SystemdPlugin