From 662dbe3169989e499f888da5776fdd2015d8b210 Mon Sep 17 00:00:00 2001 From: Paul Draper Date: Wed, 27 Apr 2016 09:50:08 -0600 Subject: [PATCH] Don't compress debian packages Also allow custom options to dpkg-deb --build --- .../sbt/packager/debian/DebianPlugin.scala | 3 ++- .../com/typesafe/sbt/packager/debian/Keys.scala | 2 ++ .../sbt/packager/debian/NativePackaging.scala | 7 ++++--- .../debian/native-build-compress/build.sbt | 14 ++++++++++++++ .../native-build-compress/project/plugins.sbt | 1 + src/sbt-test/debian/native-build-compress/test | 2 ++ .../debian/native-build-default/build.sbt | 12 ++++++++++++ .../native-build-default/project/plugins.sbt | 1 + src/sbt-test/debian/native-build-default/test | 2 ++ src/sphinx/formats/debian.rst | 15 +++++++++++++++ 10 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 src/sbt-test/debian/native-build-compress/build.sbt create mode 100644 src/sbt-test/debian/native-build-compress/project/plugins.sbt create mode 100644 src/sbt-test/debian/native-build-compress/test create mode 100644 src/sbt-test/debian/native-build-default/build.sbt create mode 100644 src/sbt-test/debian/native-build-default/project/plugins.sbt create mode 100644 src/sbt-test/debian/native-build-default/test diff --git a/src/main/scala/com/typesafe/sbt/packager/debian/DebianPlugin.scala b/src/main/scala/com/typesafe/sbt/packager/debian/DebianPlugin.scala index adf0d5caf..5d5d724f7 100644 --- a/src/main/scala/com/typesafe/sbt/packager/debian/DebianPlugin.scala +++ b/src/main/scala/com/typesafe/sbt/packager/debian/DebianPlugin.scala @@ -158,7 +158,8 @@ object DebianPlugin extends AutoPlugin with DebianNativePackaging { (maintainerScripts in Debian).value, (linuxScriptReplacements in Debian).value, (target in Universal).value - ) + ), + debianNativeBuildOptions := Nil ) /** diff --git a/src/main/scala/com/typesafe/sbt/packager/debian/Keys.scala b/src/main/scala/com/typesafe/sbt/packager/debian/Keys.scala index 7f1a2db67..498c05222 100644 --- a/src/main/scala/com/typesafe/sbt/packager/debian/Keys.scala +++ b/src/main/scala/com/typesafe/sbt/packager/debian/Keys.scala @@ -49,4 +49,6 @@ trait DebianKeys { val debianMakeChownReplacements = TaskKey[(String, String)]("debianMakeChownReplacements", "Creates the chown commands for correct own files and directories") val debianPackageInstallSize = TaskKey[Long]("debian-installed-size") + + val debianNativeBuildOptions = SettingKey[Seq[String]]("debian-native-build-options", "Options passed to dpkg-deb, e.g. compression level") } \ No newline at end of file diff --git a/src/main/scala/com/typesafe/sbt/packager/debian/NativePackaging.scala b/src/main/scala/com/typesafe/sbt/packager/debian/NativePackaging.scala index 2fdc47e6b..162949692 100644 --- a/src/main/scala/com/typesafe/sbt/packager/debian/NativePackaging.scala +++ b/src/main/scala/com/typesafe/sbt/packager/debian/NativePackaging.scala @@ -43,6 +43,7 @@ trait DebianNativePackaging extends DebianPluginLike { * package. */ private[debian] def debianNativeSettings: Seq[Setting[_]] = inConfig(Debian)(Seq( + debianNativeBuildOptions += "-Znone", // packages are largely JARs, which are already compressed genChanges <<= (packageBin, target, debianChangelog, name, version, debianPackageMetadata) map { (pkg, tdir, changelog, name, version, data) => changelog match { @@ -81,12 +82,12 @@ trait DebianNativePackaging extends DebianPluginLike { }, /** Implementation of the actual packaging */ - packageBin <<= (debianExplodedPackage, debianMD5sumsFile, debianSection, debianPriority, name, version, packageArchitecture, target, streams) map { - (pkgdir, _, section, priority, name, version, arch, tdir, s) => + packageBin <<= (debianExplodedPackage, debianMD5sumsFile, debianSection, debianPriority, name, version, packageArchitecture, debianNativeBuildOptions, target, streams) map { + (pkgdir, _, section, priority, name, version, arch, options, tdir, s) => s.log.info("Building debian package with native implementation") // Make the package. We put this in fakeroot, so we can build the package with root owning files. val archive = archiveFilename(name, version, arch) - Process(Seq("fakeroot", "--", "dpkg-deb", "--build", pkgdir.getAbsolutePath, "../" + archive), Some(tdir)) ! s.log match { + Process(Seq("fakeroot", "--", "dpkg-deb", "--build") ++ options ++ Seq(pkgdir.getAbsolutePath, "../" + archive), Some(tdir)) ! s.log match { case 0 => () case x => sys.error("Failure packaging debian file. Exit code: " + x) } diff --git a/src/sbt-test/debian/native-build-compress/build.sbt b/src/sbt-test/debian/native-build-compress/build.sbt new file mode 100644 index 000000000..0a13bb09e --- /dev/null +++ b/src/sbt-test/debian/native-build-compress/build.sbt @@ -0,0 +1,14 @@ +enablePlugins(DebianPlugin) + +debianNativeBuildOptions in Debian := Nil + +maintainer := "Maintainer " + +packageDescription := "Description" + +packageSummary := "Summary" + +TaskKey[Unit]("check-deb-compression") := { + val deb = target.value / s"${(name in Debian).value}_${(version in Debian).value}_all.deb" + assert(Seq("ar", "-t", deb.toString).lines.exists(_.startsWith("data.tar."))) // exact extension varies by dpkg-deb version +} diff --git a/src/sbt-test/debian/native-build-compress/project/plugins.sbt b/src/sbt-test/debian/native-build-compress/project/plugins.sbt new file mode 100644 index 000000000..b53de154c --- /dev/null +++ b/src/sbt-test/debian/native-build-compress/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % sys.props("project.version")) diff --git a/src/sbt-test/debian/native-build-compress/test b/src/sbt-test/debian/native-build-compress/test new file mode 100644 index 000000000..7e578bfb4 --- /dev/null +++ b/src/sbt-test/debian/native-build-compress/test @@ -0,0 +1,2 @@ +> debian:packageBin +> check-deb-compression diff --git a/src/sbt-test/debian/native-build-default/build.sbt b/src/sbt-test/debian/native-build-default/build.sbt new file mode 100644 index 000000000..2edafe946 --- /dev/null +++ b/src/sbt-test/debian/native-build-default/build.sbt @@ -0,0 +1,12 @@ +enablePlugins(DebianPlugin) + +maintainer := "Maintainer " + +packageDescription := "Description" + +packageSummary := "Summary" + +TaskKey[Unit]("check-deb-compression") := { + val deb = target.value / s"${(name in Debian).value}_${(version in Debian).value}_all.deb" + assert(Seq("ar", "-t", deb.toString).lines.contains("data.tar")) +} diff --git a/src/sbt-test/debian/native-build-default/project/plugins.sbt b/src/sbt-test/debian/native-build-default/project/plugins.sbt new file mode 100644 index 000000000..b53de154c --- /dev/null +++ b/src/sbt-test/debian/native-build-default/project/plugins.sbt @@ -0,0 +1 @@ +addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % sys.props("project.version")) diff --git a/src/sbt-test/debian/native-build-default/test b/src/sbt-test/debian/native-build-default/test new file mode 100644 index 000000000..7e578bfb4 --- /dev/null +++ b/src/sbt-test/debian/native-build-default/test @@ -0,0 +1,2 @@ +> debian:packageBin +> check-deb-compression diff --git a/src/sphinx/formats/debian.rst b/src/sphinx/formats/debian.rst index f1f0d2eb6..f4b9242dc 100644 --- a/src/sphinx/formats/debian.rst +++ b/src/sphinx/formats/debian.rst @@ -56,6 +56,21 @@ Enable the debian plugin to activate the native package implementation. enablePlugins(DebianPlugin) +Native packaging +~~~~~~~~~~~~~~~~ + +Since JARs are by default already compressed, `DebianPlugin` disables additional compression of the debian package +contents. + +To compress the debian package, override `debianNativeBuildOptions` with +`options `_ for `dpkg-deb`. + +.. code-block:: scala + + debianNativeBuildOptions in Debian := Nil // dpkg-deb's default compression (currently xz) + + debianNativeBuildOptions in Debian := Seq("-Zgzip", "-z3") // gzip compression at level 3 + Java based packaging ~~~~~~~~~~~~~~~~~~~~