sbt-native-packager,在制作RPM时,正确地将文件所有权分配为root:root用于大多数文件。我有一个案例,其中只有一个配置文件(在RPM文件中不存在,尽管可以添加,如果这样做使其更容易)需要由服务写入。最简单的方法是更改conf文件夹本身的所有权,允许服务稍后创建该文件。另一种方法是将文件添加到RPM并更改该文件的所有权。
我知道我可以用这样的节来改变所有配置文件的所有权:
linuxPackageMappings in Rpm := {
linuxPackageMappings.value map {
case linuxPackage if linuxPackage.fileData.config equals "true" =>
val newFileData = linuxPackage.fileData.copy(
user = "newuser",
group = "newgroup"
)
linuxPackage.copy(fileData = newFileData)
case linuxPackage => linuxPackage
}
}
但是:1)这不会改变 conf文件夹本身的所有权,2)这会改变作为conf文件的每个文件的所有权,我不想这样做。无论如何,无论我尝试什么,spec文件仍然有:
%dir %attr(0755,root,root) /path/to/application/conf/
问题是它仍归root:root所有。这是我尝试过的,只更改一个文件的所有权(在这种情况下使用上面的节):
case linuxPackage if linuxPackage.mappings.head._2 equals "/path/to/application/conf/" =>
另外(答案可能是相同的),如何将一个配置文件(由文件名选择)更改为withConfig("noreplace")
而不是其余?我已经发现linuxPackageMappings是Seq[com.typesafe.sbt.packager.linux.LinuxPackageMapping]
的一个实例,LinuxPackageMapping的每个实例都可以有一个或多个文件映射。我还没想出如何从LinuxPackageMapping中删除一个映射并创建一个只包含一个文件的新LinuxPackageMapping。 (或者可能有更好的方法来做到这一点?)