From 758bc6d4740542a6c56ba63f8fc96f715940872b Mon Sep 17 00:00:00 2001 From: Nepomuk Seiler Date: Thu, 18 Dec 2014 23:57:45 +0100 Subject: [PATCH 1/4] FIX #443 Refactor documentation. Work in progress --- src/sphinx/formats/debian.rst | 167 +++++++++++++++++ src/sphinx/formats/docker.rst | 154 +++++++++++++++ src/sphinx/formats/linux.rst | 303 ++++++++++++++++++++++++++++++ src/sphinx/formats/rpm.rst | 275 +++++++++++++++++++++++++++ src/sphinx/formats/universal.rst | 310 +++++++++++++++++++++++++++++++ src/sphinx/formats/windows.rst | 130 +++++++++++++ src/sphinx/gettingstarted.rst | 103 ++++++++++ src/sphinx/index.rst | 63 +++++-- 8 files changed, 1487 insertions(+), 18 deletions(-) create mode 100644 src/sphinx/formats/debian.rst create mode 100644 src/sphinx/formats/docker.rst create mode 100644 src/sphinx/formats/linux.rst create mode 100644 src/sphinx/formats/rpm.rst create mode 100644 src/sphinx/formats/universal.rst create mode 100644 src/sphinx/formats/windows.rst create mode 100644 src/sphinx/gettingstarted.rst diff --git a/src/sphinx/formats/debian.rst b/src/sphinx/formats/debian.rst new file mode 100644 index 000000000..bbbbd0c50 --- /dev/null +++ b/src/sphinx/formats/debian.rst @@ -0,0 +1,167 @@ +Debian Plugin +============= + +The debian package specification is very robust and powerful. If you wish to do any advanced features, it's best to understand how +the underlying packaging system works. http://tldp.org/HOWTO/html_single/Debian-Binary-Package-Building-HOWTO/ is an excellent tutorial. + +SBT Native Packager provides two ways to build debian packages. A native one, where you need ``dpkg-deb`` installed +or a java, platform independent approach with `jdeb `_. By default the _native_ implementation +is activated. + +.. contents:: + :depth: 2 + + +.. raw:: html + + + +Requirements +------------ + +If you use the _native_ debian package implementation you need the following applications installed: + +* dpkg-deb +* dpkg-sig +* dpkg-genchanges +* lintian +* fakeroot + +Build +----- + +.. code-block:: bash + + sbt debian:packageBin + +Required Settings +~~~~~~~~~~~~~~~~~ + +A debian package needs some mandatory settings to be valid. Make sure +you have these settings in your build: + +.. code-block:: scala + + name := "Debian Example" + + version := "1.0" + + maintainer := "Max Smith " + + packageSummary := "Hello World Debian Package" + + packageDescription := """A fun package description of our software, + with multiple lines.""" + +1.0 or higher +~~~~~~~~~~~~~ + +Enable the debian plugin to activate the native package implementation. + +.. code-block:: scala + + enablePlugins(DebianPlugin) + +If you want to use the java based implementation, enable the following plugin. + +.. code-block:: scala + + enablePlugins(JDebPackaging) + +0.8 or lower +~~~~~~~~~~~~ + +For this versions debian packaging is automatically activated. +See the `Getting Started ` page for informations +on how to enable sbt native packager. + +If you want to enable `jdeb` packaging add the following to your `build.sbt` + +.. code-block:: scala + + packageBin in Debian <<= debianJDebPackaging in Debian + + +Settings +-------- + +Debian requires the following specific settings: + + ``name in Debian`` + The name of the package for debian (if different from general linux name). + + ``version in Debian`` + The debian-friendly version of the package. Should be of the form ``x.y.z-build-aa``. + + ``debianPackageDependencies in Debian`` + The list of debian packages that this package depends on. + + ``debianPackageRecommends in Debian`` + The list of debian packages that are recommended to be installed with this package. + + ``linuxPackageMappings in Debian`` + Debian requires a ``/usr/share/doc/{package name}/changelog.gz`` file that describes + the version changes in this package. These should be appended to the base linux versions. + + ``debianMaintainerScripts`` + These are the packaging scripts themselves used by ``dpkg-deb`` to build your debian. These + scripts are used when installing/uninstalling a debian, like prerm, postinstall, etc. These scripts + are placed in the ``DEBIAN`` file when building. Some of these files can be autogenerated, + for example when using a package archetype, like server_application. Howeve, any autogenerated file + can be overridden by placing your own files in the ``src/debian/DEBIAN`` directory. + + ``changelog in Debian`` + This is the changelog used by ``dpkg-genchanges`` to create the .changes file. This will allow you to + upload the debian package to a mirror. + + +Tasks +----- + +The Debian support grants the following commands: + + ``debian:package-bin`` + Generates the ``.deb`` package for this project. + + ``debian:lintian`` + Generates the ``.deb`` file and runs the ``lintian`` command to look for issues in the package. Useful for debugging. + + ``debian:gen-changes`` + Generates the ``.changes``, and therefore the ``.deb`` package for this project. + + +Customize +--------------- + +This section contains example on how you can customize your debian build. + +Customizing Debian Metadata +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A Debian package provides metadata, which includes **dependencies** and **recommendations**. +A basic example to depend on java and recommend a git installation. + +.. code-block:: scala + + debianPackageDependencies in Debian ++= Seq("java2-runtime", "bash (>= 2.05a-11)") + + debianPackageRecommends in Debian += "git" + +To hook into the debian package lifecycle (https://wiki.debian.org/MaintainerScripts) you +can add ``preinst`` , ``postinst`` , ``prerm`` and/or ``postrm`` scripts. Just place them into +``src/debian/DEBIAN``. + +If you use the ``packageArchetype.java_server`` there are predefined ``postinst`` and +``preinst`` files, which start/stop the application on install/remove calls. Existing +maintainer scripts will be extended not overridden. + +Your control scripts are in a different castle.. directory? No problem. + +.. code-block:: scala + + debianControlScriptsDirectory <<= (sourceDirectory) apply (_ / "deb" / "control") + diff --git a/src/sphinx/formats/docker.rst b/src/sphinx/formats/docker.rst new file mode 100644 index 000000000..2f8b2d8e2 --- /dev/null +++ b/src/sphinx/formats/docker.rst @@ -0,0 +1,154 @@ +Docker Plugin +============= + +Docker images describe how to set up a container for running an application, including what files are present, and what program to run. + + https://docs.docker.com/introduction/understanding-docker/ provides an introduction to Docker. + https://docs.docker.com/reference/builder/ describes the Dockerfile; a file which describes how to set up the image. + + sbt-native-packager focuses on creating a Docker image which can "just run" the application built by SBT. + +.. contents:: + :depth: 2 + +Requirements +------------ + +You need the docker console client installed. SBT Native Packager doesn't use the REST API. + + +Build +----- + +.. code-block:: bash + + sbt docker:publishLocal + + +Required Settings +~~~~~~~~~~~~~~~~~ + +Docker images require the following setting: + +.. code-block:: scala + + maintainer in Docker := "John Smith " + + +1.0 or higher +~~~~~~~~~~~~~ + +.. code-block:: scala + + enablePlugins(DockerPlugin) + +0.8.x +~~~~~ + +For this versions docker packaging is automatically activated. +See the `Getting Started ` page for informations +on how to enable sbt native packager. + + +Settings +-------- + +Informational Settings +~~~~~~~~~~~~~~~~~~~~~~ + + + ``packageName in Docker`` + The name of the package for Docker (if different from general name). + This will only affect the image name. + + ``version in Docker`` + The version of the package for Docker (if different from general version). Often takes the form ``x.y.z``. + + ``maintainer in Docker`` + The maintainer of the package, required by the Dockerfile format. + +Environment Settings +~~~~~~~~~~~~~~~~~~~~ + + ``dockerBaseImage`` + The image to use as a base for running the application. It should include binaries on the path for ``chown``, ``mkdir``, have a discoverable ``java`` binary, and include the user configured by ``daemonUser`` (``daemon``, by default). + + ``daemonUser in Docker`` + The user to use when executing the application. Files below the install path also have their ownership set to this user. + + ``dockerExposedPorts in Docker`` + A list of ports to expose from the Docker image. + + ``dockerExposedVolumes in Docker`` + A list of data volumes to make available in the Docker image. + + ``dockerEntrypoint in Docker`` + Overrides the default entrypoint for docker-specific service discovery tasks before running the application. + Defaults to the bash executable script, available at ``bin/