2

我正在尝试使用安装在自定义目录中的 sbt-native-packager 构建一个 rpm 包,例如 /opt/myapp 而不是 /usr - 由于内部策略要求。

我有一个 build.sbt 可以构建一个标准的 rpm,但是在修改目录时我很难过。抱歉,我对 scala、sbt 和本地 pacakger 还是很陌生。

我正在使用 mapGenericFilesToLinux 并希望保留其结构 - 只需修改目标目录的第一部分。

我在 git hub 问题中找到了这个代码片段https://github.com/sbt/sbt-native-packager/issues/4#issuecomment-6731183

linuxPackageMappings <+= target map { target =>
  val src = target / "webapp"
  val dest = "/opt/app"
  LinuxPackageMapping(
  for {
    path <- (src ***).get
    if !path.isDirectory
  } yield path -> path.toString.replaceFirst(src.toString, dest)
 )
}

我相信我想做类似的事情,除了

linuxPackageMappings in Rpm <++= <SOMETHING HERE> { 
   // for loop that steps through the source and destination and modifies the directory
}

提前感谢您的帮助

再见帕姆

4

1 回答 1

2

因此,在 sbt 0.12 中,您需要确保在声明所需值之前指定所有要使用的依赖键。所以,让我们假设两件事:

  1. linuxPackageMappings有你所有的包装映射。
  2. linuxPackageMappings in Rpm没有直接添加任何内容。

我们将取值linuxPackageMappings并更改目录linuxPackageMappings in Rpm

linuxPackageMappings in Rpm <<= (linuxPackageMappings) map { mappings => 
  // Let's loop through the mappings and alter their on-disc location....
  for(LinuxPackageMapping(filesAndNames, meta, zipped) <- mappings) yield {
     val newFilesAndNames = for {
        (file, installPath) <- filesAndNames
     } yield file -> installPath.replaceFirst("/usr/share/app", "/opt/app")
     LinuxPackageMapping(newFilesAndNames, meta, zipped) 
  }
}

这样做是删除 linux 包映射(包括是否 gzip 文件,以及用户/组所有者/权限)并修改每个文件的安装路径。

希望有帮助!在 sbt-native-packager.NEXT(未发布)中,您可以配置默认安装位置。

于 2013-12-18T19:34:31.367 回答