如何使用sbt-native-packager为RPM更改单个文件或单个文件夹的所有权/属性?

时间:2015-06-06 00:19:56

标签: scala rpmbuild sbt-native-packager

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。 (或者可能有更好的方法来做到这一点?)

0 个答案:

没有答案