2

社内ポリシーの要件により、/usr ではなく /opt/myapp などのカスタム ディレクトリにインストールする sbt-native-packager を使用して rpm パッケージをビルドしようとしています。

標準の rpm をビルドする build.sbt がありますが、ディレクトリの変更に関しては困惑しています。申し訳ありませんが、私は scala、sbt、およびネイティブ pacakger にまったく慣れていません。

私は mapGenericFilesToLinux を使用しており、その構造を維持したいと考えています - 宛先ディレクトリの最初の部分を変更するだけです。

このコードフラグメントは git ハブの問題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 では、必要な値を宣言する前に、使用するすべての依存キーを指定する必要があります。それでは、次の 2 つのことを想定してみましょう。

  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 ファイルを使用するかどうか、およびユーザー/グループの所有者/権限を含む) が取り除かれ、各ファイルのインストール パスが変更されます。

それが役立つことを願っています! IN sbt-native-packager.NEXT (リリースされていません) で、デフォルトのインストール場所を設定できます。

于 2013-12-18T19:34:31.367 に答える