fpm 1.9.3 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.rst +53 -1
- data/bin/fpm +0 -1
- data/lib/fpm.rb +1 -0
- data/lib/fpm/package.rb +8 -4
- data/lib/fpm/package/apk.rb +4 -4
- data/lib/fpm/package/cpan.rb +6 -6
- data/lib/fpm/package/deb.rb +126 -19
- data/lib/fpm/package/dir.rb +3 -3
- data/lib/fpm/package/empty.rb +1 -1
- data/lib/fpm/package/freebsd.rb +1 -1
- data/lib/fpm/package/gem.rb +39 -12
- data/lib/fpm/package/pacman.rb +22 -10
- data/lib/fpm/package/pyfpm/get_metadata.py +5 -0
- data/lib/fpm/package/python.rb +31 -4
- data/lib/fpm/package/rpm.rb +26 -6
- data/lib/fpm/package/sh.rb +1 -1
- data/lib/fpm/package/snap.rb +130 -0
- data/lib/fpm/package/tar.rb +1 -1
- data/lib/fpm/package/virtualenv.rb +1 -2
- data/lib/fpm/package/zip.rb +1 -1
- data/lib/fpm/util/tar_writer.rb +1 -1
- data/lib/fpm/version.rb +1 -1
- data/templates/deb.erb +1 -1
- data/templates/deb/deb.changes.erb +30 -0
- data/templates/deb/postinst_upgrade.sh.erb +29 -8
- data/templates/deb/postrm_upgrade.sh.erb +5 -0
- data/templates/deb/preinst_upgrade.sh.erb +5 -0
- data/templates/deb/prerm_upgrade.sh.erb +12 -4
- data/templates/rpm.erb +12 -9
- data/templates/sh.erb +6 -1
- metadata +40 -18
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 | 
            -
             | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: 28f939bd20768768cb05026a39c8a270596368c654ec5606a43a0e75afa845ad
         | 
| 4 | 
            +
              data.tar.gz: 0d7eea7108832e79994ba3ee9511c3715b384906f7ef3a2ab5e907cfc764609a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 555edd6cd5d4b0098e075011e48db96e52c454b8557735a51202307dcaeb4920a5efe93bb6d99cedf9d3ff95ff445c37059e1fc308e0602482977587d532e4b1
         | 
| 7 | 
            +
              data.tar.gz: 2803ea8cb3af495d5fd20e75bee0eba11dc262ac59b86e63b75ef3cef7417440e88e1fec9172f7a1ea5cf0705e2ce36bc65e7b9c1c5469eb0e78b292ac822716
         | 
    
        data/CHANGELOG.rst
    CHANGED
    
    | @@ -1,6 +1,58 @@ | |
| 1 1 | 
             
            Release Notes and Change Log
         | 
| 2 2 | 
             
            ============================
         | 
| 3 3 |  | 
| 4 | 
            +
            1.12.0 (January 19, 2021)
         | 
| 5 | 
            +
            ^^^^^^^^^^^^^^^^^^^^^^^^^
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * Pin ffi dependency to ruby ffi 1.12.x to try keeping fpm compatible with older/abandoned rubies like 2.0 and 2.1. (`#1709`_; Matt Patterson)
         | 
| 8 | 
            +
            * deb: New flag to add 'set -e' to all scripts. `--deb-maintainerscripts-force-errorchecks` which defaults to off. (`#1697`_; Andreas Ulm)
         | 
| 9 | 
            +
            * deb: Fix bug when converting rubygems to debs where certain constraints like `~>1` would generate a deb dependency that couldn't be satisfied. (`#1699`_; Vlastimil Holer)
         | 
| 10 | 
            +
            * deb: Fix error 'uninitialized constant FPM::Package::Deb::Zlib' (`#1739`_, `#1740`_; Federico Lancerin)
         | 
| 11 | 
            +
            * python: Prepend to PYTHONPATH instead of replacing it. This should help on platforms that rely heavily on PYTHONPATH, such as NixOSX (`#1711`_, `#1710`_; anarg)
         | 
| 12 | 
            +
            * python: Add `--python-trusted-host` flag which passes `--trusted-host` flag to `pip` (`#1737`_; Vladimir Ponarevsky)
         | 
| 13 | 
            +
            * Documentation improvements (`#1724`_, `#1738`_, `#1667`_, `#1636`_)
         | 
| 14 | 
            +
            * Dockerfile updated to Alpine 3.12 (`#1745`_; Cameron Nemo)
         | 
| 15 | 
            +
            * Remove the 'backports' deprecation warning (`#1727`_; Jose Galvez)
         | 
| 16 | 
            +
            * sh: Performance improvement when printing package metadata (`#1729`_; James Logsdon, Ed Healy)
         | 
| 17 | 
            +
            * rpm: Add support for `xzmt` compression (multithreaded xz compressor) to help when creating very large packages (several gigabytes). (`#1447`_, `#1419`_; amnobc)
         | 
| 18 | 
            +
            * rpm: Add `--rpm-macro-expansion` flag to enable macro expansion in scripts during rpmbuild. See https://rpm.org/user_doc/scriptlet_expansion.html for more details. (`#1642`_; juliantrzeciak)
         | 
| 19 | 
            +
            * deb: use correct control.tar filename (`#1668`_; Mike Perham)
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            1.11.0 (January 30, 2019)
         | 
| 22 | 
            +
            ^^^^^^^^^^^^^^^^^^^^^^^^^
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            * snap: Snap packages can now be created! (`#1490`_; kyrofa)
         | 
| 25 | 
            +
            * Fix an installation problem where a dependency (childprocess) fails to install correctly. (#1592; Jordan Sissel)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            1.10.2 (July 3, 2018)
         | 
| 28 | 
            +
            ^^^^^^^^^^^^^^^^^^^^^
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            * cpan: Fix a crash where fpm would crash trying to parse a perl version string (`#1515`_, `#1514`; Jordan Sissel, William N. Braswell, Jr)
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            1.10.1 (July 3, 2018)
         | 
| 33 | 
            +
            ^^^^^^^^^^^^^^^^^^^^^
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            * cpan: Fixes some package building by setting PERL5LIB correctly (`#1509`_, `#1511`_; William N. Braswell, Jr)
         | 
| 36 | 
            +
            * cpan: Adds `--[no-]cpan-verbose` flag which, when set, runs `cpanm` with the `--verbose` flag (`#1511`_; William N. Braswell, Jr)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            1.10.0 (May 21, 2018)
         | 
| 39 | 
            +
            ^^^^^^^^^^^^^^^^^^^^
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            * Pin `ruby-xz` dependency to one which allows Ruby versions older than 2.3.0 (`#1494`_; Marat Sharafutdinov)
         | 
| 42 | 
            +
            * Documentation improvements: `#1488`_; Arthur Burkart. `#1384`_; Justin Kolberg. `#1452`_; Anatoli Babenia.
         | 
| 43 | 
            +
            * python: Improve support for the `~=` dependency comparison. (`#1482`_; Roman Vasilyev)
         | 
| 44 | 
            +
            * deb: Add `--deb-generate-changes` flag to have fpm output a `.changes` file (`#1492`_; Spida)
         | 
| 45 | 
            +
            * deb: Add `--deb-dist` flag to set the target distribution (similar to `--rpm-dist`). (`#1492`_; Spida)
         | 
| 46 | 
            +
            * apk: Make --before-install, --before-upgrade, and --after-upgrade work correctly. (`#1422`_; Charles R. Portwood II)
         | 
| 47 | 
            +
            * rpm: add `xzmt` for multithreaded xz compression (Amnon BC)
         | 
| 48 | 
            +
            * rpm: fix shell function name `install` conflicting with `install` program. In
         | 
| 49 | 
            +
              postinst (after-install), the function is now called `_install` to avoid
         | 
| 50 | 
            +
              conflicting with `/usr/bin/install` (`#1434`_; Torsten Schmidt)
         | 
| 51 | 
            +
            * rpm: Allow binary "arch dependent" files in noarch rpms (Jordan Sissel)
         | 
| 52 | 
            +
            * - deb: --config-files ? (`#1440`_, `#1443`_; NoBodyCam)
         | 
| 53 | 
            +
            * FPM source repo now contains a Brewfile for use with Homebrew.
         | 
| 54 | 
            +
            * FPM source repo has a Dockerfile for invoking fpm with docker. (`#1484`_, ;Allan Lewis
         | 
| 55 | 
            +
             | 
| 4 56 | 
             
            1.9.3 (September 11, 2017)
         | 
| 5 57 | 
             
            ^^^^^^^^^^^^^^^^^^^^^^^^^^
         | 
| 6 58 |  | 
| @@ -19,7 +71,7 @@ Release Notes and Change Log | |
| 19 71 | 
             
            * Fix bug so fpm can now copy symlinks correctly (`#1348`_; ServiusHack)
         | 
| 20 72 | 
             
            * apk: Improve performance (`#1358`_; Jan Delgado)
         | 
| 21 73 | 
             
            * cpan: Fix crash when CPAN query returns a version value that was a number and fpm was expecting a string. (`#1344`_, `#1343`_; liger1978)
         | 
| 22 | 
            -
            * cpan: Fix MetaCPAN searches to use v1 of MetaCPAN's API. The v0 API is no longer provided by MetaCPAN. (`#1341`_, `#1339 | 
| 74 | 
            +
            * cpan: Fix MetaCPAN searches to use v1 of MetaCPAN's API. The v0 API is no longer provided by MetaCPAN. (`#1341`_, `#1339`_; Bob Bell)
         | 
| 23 75 | 
             
            * cpan: Have perl modules implicitly "provide" (`--provides`) capabilities. (`#1340`_; Bob Bell. `#1345`_; liger1978)
         | 
| 24 76 | 
             
            * cpan: Now transforms perl version values like "5.008001" to "5.8.1" (`#1342`_; Bob Bell)
         | 
| 25 77 | 
             
            * cpan: Use `>=` ("this version or newer") for package dependencies instead of `=` ("exactly this version"). (`#1338`_; Bob Bell)
         | 
    
        data/bin/fpm
    CHANGED
    
    
    
        data/lib/fpm.rb
    CHANGED
    
    
    
        data/lib/fpm/package.rb
    CHANGED
    
    | @@ -3,7 +3,8 @@ require "fpm/util" # local | |
| 3 3 | 
             
            require "pathname" # stdlib
         | 
| 4 4 | 
             
            require "find"
         | 
| 5 5 | 
             
            require "tmpdir" # stdlib
         | 
| 6 | 
            -
            require " | 
| 6 | 
            +
            require "ostruct"
         | 
| 7 | 
            +
            require "backports/latest"
         | 
| 7 8 | 
             
            require "socket" # stdlib, for Socket.gethostname
         | 
| 8 9 | 
             
            require "shellwords" # stdlib, for Shellwords.escape
         | 
| 9 10 | 
             
            require "erb" # stdlib, for template processing
         | 
| @@ -118,7 +119,10 @@ class FPM::Package | |
| 118 119 |  | 
| 119 120 | 
             
              def initialize
         | 
| 120 121 | 
             
                # Attributes for this specific package
         | 
| 121 | 
            -
                @attributes = { | 
| 122 | 
            +
                @attributes = {
         | 
| 123 | 
            +
                  # Default work location
         | 
| 124 | 
            +
                  :workdir => ::Dir.tmpdir
         | 
| 125 | 
            +
                }
         | 
| 122 126 |  | 
| 123 127 | 
             
                # Reference
         | 
| 124 128 | 
             
                # http://www.debian.org/doc/manuals/maint-guide/first.en.html
         | 
| @@ -312,7 +316,7 @@ class FPM::Package | |
| 312 316 | 
             
                # the path before returning.
         | 
| 313 317 | 
             
                #
         | 
| 314 318 | 
             
                # Wrapping Find.find in an Enumerator is required for sane operation in ruby 1.8.7,
         | 
| 315 | 
            -
                # but requires the 'backports' gem (which is used in other places in fpm)
         | 
| 319 | 
            +
                # but requires the 'backports/latest' gem (which is used in other places in fpm)
         | 
| 316 320 | 
             
                return Enumerator.new { |y| Find.find(staging_path) { |path| y << path } } \
         | 
| 317 321 | 
             
                  .select { |path| path != staging_path } \
         | 
| 318 322 | 
             
                  .select { |path| is_leaf.call(path) } \
         | 
| @@ -507,7 +511,7 @@ class FPM::Package | |
| 507 511 | 
             
                  end
         | 
| 508 512 | 
             
                end
         | 
| 509 513 | 
             
              end
         | 
| 510 | 
            -
             | 
| 514 | 
            +
             | 
| 511 515 | 
             
              # Get the contents of the script by a given name.
         | 
| 512 516 | 
             
              #
         | 
| 513 517 | 
             
              # If template_scripts? is set in attributes (often by the --template-scripts
         | 
    
        data/lib/fpm/package/apk.rb
    CHANGED
    
    | @@ -3,7 +3,7 @@ require "fpm/namespace" | |
| 3 3 | 
             
            require "fpm/package"
         | 
| 4 4 | 
             
            require "fpm/errors"
         | 
| 5 5 | 
             
            require "fpm/util"
         | 
| 6 | 
            -
            require "backports"
         | 
| 6 | 
            +
            require "backports/latest"
         | 
| 7 7 | 
             
            require "fileutils"
         | 
| 8 8 | 
             
            require "digest"
         | 
| 9 9 | 
             
            require 'digest/sha1'
         | 
| @@ -144,9 +144,9 @@ class FPM::Package::APK< FPM::Package | |
| 144 144 | 
             
                scripts = {}
         | 
| 145 145 |  | 
| 146 146 | 
             
                scripts = register_script('post-install',   :after_install,   scripts)
         | 
| 147 | 
            -
                scripts = register_script(' | 
| 148 | 
            -
                scripts = register_script(' | 
| 149 | 
            -
                scripts = register_script('post- | 
| 147 | 
            +
                scripts = register_script('pre-install',   :before_install,  scripts)
         | 
| 148 | 
            +
                scripts = register_script('pre-upgrade',   :before_upgrade,  scripts)
         | 
| 149 | 
            +
                scripts = register_script('post-upgrade',   :after_upgrade,  scripts)
         | 
| 150 150 | 
             
                scripts = register_script('pre-deinstall',  :before_remove,   scripts)
         | 
| 151 151 | 
             
                scripts = register_script('post-deinstall', :after_remove,    scripts)
         | 
| 152 152 |  | 
    
        data/lib/fpm/package/cpan.rb
    CHANGED
    
    | @@ -25,6 +25,9 @@ class FPM::Package::CPAN < FPM::Package | |
| 25 25 | 
             
              option "--test", :flag,
         | 
| 26 26 | 
             
                "Run the tests before packaging?", :default => true
         | 
| 27 27 |  | 
| 28 | 
            +
              option "--verbose", :flag,
         | 
| 29 | 
            +
                "Produce verbose output from cpanm?", :default => false
         | 
| 30 | 
            +
             | 
| 28 31 | 
             
              option "--perl-lib-path", "PERL_LIB_PATH",
         | 
| 29 32 | 
             
                "Path of target Perl Libraries"
         | 
| 30 33 |  | 
| @@ -137,6 +140,7 @@ class FPM::Package::CPAN < FPM::Package | |
| 137 140 | 
             
                cpanm_flags += ["--mirror", "#{attributes[:cpan_mirror]}"] if !attributes[:cpan_mirror].nil?
         | 
| 138 141 | 
             
                cpanm_flags += ["--mirror-only"] if attributes[:cpan_mirror_only?] && !attributes[:cpan_mirror].nil?
         | 
| 139 142 | 
             
                cpanm_flags += ["--force"] if attributes[:cpan_cpanm_force?]
         | 
| 143 | 
            +
                cpanm_flags += ["--verbose"] if attributes[:cpan_verbose?]
         | 
| 140 144 |  | 
| 141 145 | 
             
                safesystem(attributes[:cpan_cpanm_bin], *cpanm_flags)
         | 
| 142 146 |  | 
| @@ -156,7 +160,7 @@ class FPM::Package::CPAN < FPM::Package | |
| 156 160 | 
             
                   found_dependencies.each do |dep_name, version|
         | 
| 157 161 | 
             
                      # Special case for representing perl core as a version.
         | 
| 158 162 | 
             
                      if dep_name == "perl"
         | 
| 159 | 
            -
                        m = version.match(/^(\d)\.(\d{3})(\d{3})$/)
         | 
| 163 | 
            +
                        m = version.to_s.match(/^(\d)\.(\d{3})(\d{3})$/)
         | 
| 160 164 | 
             
                        if m
         | 
| 161 165 | 
             
                           version = m[1] + '.' + m[2].sub(/^0*/, '') + '.' + m[3].sub(/^0*/, '')
         | 
| 162 166 | 
             
                        end
         | 
| @@ -241,11 +245,7 @@ class FPM::Package::CPAN < FPM::Package | |
| 241 245 | 
             
                                 # Empty install_base to avoid local::lib being used.
         | 
| 242 246 | 
             
                                 "INSTALL_BASE=")
         | 
| 243 247 | 
             
                    end
         | 
| 244 | 
            -
                     | 
| 245 | 
            -
                      make = [ "env", "PERL5LIB=#{build_path("cpan/lib/perl5")}", "make" ]
         | 
| 246 | 
            -
                    else
         | 
| 247 | 
            -
                      make = [ "make" ]
         | 
| 248 | 
            -
                    end
         | 
| 248 | 
            +
                    make = [ "env", "PERL5LIB=#{build_path("cpan/lib/perl5")}", "make" ]
         | 
| 249 249 | 
             
                    safesystem(*make)
         | 
| 250 250 | 
             
                    safesystem(*(make + ["test"])) if attributes[:cpan_test?]
         | 
| 251 251 | 
             
                    safesystem(*(make + ["DESTDIR=#{staging_path}", "install"]))
         | 
    
        data/lib/fpm/package/deb.rb
    CHANGED
    
    | @@ -3,9 +3,10 @@ require "fpm/namespace" | |
| 3 3 | 
             
            require "fpm/package"
         | 
| 4 4 | 
             
            require "fpm/errors"
         | 
| 5 5 | 
             
            require "fpm/util"
         | 
| 6 | 
            -
            require "backports"
         | 
| 6 | 
            +
            require "backports/latest"
         | 
| 7 7 | 
             
            require "fileutils"
         | 
| 8 8 | 
             
            require "digest"
         | 
| 9 | 
            +
            require "zlib"
         | 
| 9 10 |  | 
| 10 11 | 
             
            # Support for debian packages (.deb files)
         | 
| 11 12 | 
             
            #
         | 
| @@ -22,7 +23,7 @@ class FPM::Package::Deb < FPM::Package | |
| 22 23 | 
             
              } unless defined?(SCRIPT_MAP)
         | 
| 23 24 |  | 
| 24 25 | 
             
              # The list of supported compression types. Default is gz (gzip)
         | 
| 25 | 
            -
              COMPRESSION_TYPES = [ "gz", "bzip2", "xz" ]
         | 
| 26 | 
            +
              COMPRESSION_TYPES = [ "gz", "bzip2", "xz", "none" ]
         | 
| 26 27 |  | 
| 27 28 | 
             
              option "--ignore-iteration-in-dependencies", :flag,
         | 
| 28 29 | 
             
                        "For '=' (equal) dependencies, allow iterations on the specified " \
         | 
| @@ -50,6 +51,8 @@ class FPM::Package::Deb < FPM::Package | |
| 50 51 | 
             
                value
         | 
| 51 52 | 
             
              end
         | 
| 52 53 |  | 
| 54 | 
            +
              option "--dist", "DIST-TAG", "Set the deb distribution.", :default => "unstable"
         | 
| 55 | 
            +
             | 
| 53 56 | 
             
              # Take care about the case when we want custom control file but still use fpm ...
         | 
| 54 57 | 
             
              option "--custom-control", "FILEPATH",
         | 
| 55 58 | 
             
                "Custom version of the Debian control file." do |control|
         | 
| @@ -88,6 +91,10 @@ class FPM::Package::Deb < FPM::Package | |
| 88 91 | 
             
                File.expand_path(file)
         | 
| 89 92 | 
             
              end
         | 
| 90 93 |  | 
| 94 | 
            +
              option "--generate-changes", :flag,
         | 
| 95 | 
            +
                "Generate PACKAGENAME.changes file.",
         | 
| 96 | 
            +
                :default => false
         | 
| 97 | 
            +
             | 
| 91 98 | 
             
              option "--upstream-changelog", "FILEPATH", "Add FILEPATH as upstream changelog" do |file|
         | 
| 92 99 | 
             
                File.expand_path(file)
         | 
| 93 100 | 
             
              end
         | 
| @@ -175,6 +182,10 @@ class FPM::Package::Deb < FPM::Package | |
| 175 182 | 
             
                next File.expand_path(file)
         | 
| 176 183 | 
             
              end
         | 
| 177 184 |  | 
| 185 | 
            +
              option "--systemd-enable", :flag , "Enable service on install or upgrade", :default => false
         | 
| 186 | 
            +
             | 
| 187 | 
            +
              option "--systemd-auto-start", :flag , "Start service after install or upgrade", :default => false
         | 
| 188 | 
            +
             | 
| 178 189 | 
             
              option "--systemd-restart-after-upgrade", :flag , "Restart service after upgrade", :default => true
         | 
| 179 190 |  | 
| 180 191 | 
             
              option "--after-purge", "FILE",
         | 
| @@ -183,6 +194,11 @@ class FPM::Package::Deb < FPM::Package | |
| 183 194 | 
             
                File.expand_path(val) # Get the full path to the script
         | 
| 184 195 | 
             
              end # --after-purge
         | 
| 185 196 |  | 
| 197 | 
            +
              option "--maintainerscripts-force-errorchecks", :flag ,
         | 
| 198 | 
            +
                "Activate errexit shell option according to lintian. " \
         | 
| 199 | 
            +
                "https://lintian.debian.org/tags/maintainer-script-ignores-errors.html",
         | 
| 200 | 
            +
                :default => false
         | 
| 201 | 
            +
             | 
| 186 202 | 
             
              def initialize(*args)
         | 
| 187 203 | 
             
                super(*args)
         | 
| 188 204 | 
             
                attributes[:deb_priority] = "extra"
         | 
| @@ -259,10 +275,32 @@ class FPM::Package::Deb < FPM::Package | |
| 259 275 | 
             
              end # def input
         | 
| 260 276 |  | 
| 261 277 | 
             
              def extract_info(package)
         | 
| 278 | 
            +
                compression = `#{ar_cmd[0]} t #{package}`.split("\n").grep(/control.tar/).first.split(".").last
         | 
| 279 | 
            +
                case compression
         | 
| 280 | 
            +
                  when "gz"
         | 
| 281 | 
            +
                    controltar = "control.tar.gz"
         | 
| 282 | 
            +
                    compression = "-z"
         | 
| 283 | 
            +
                  when "bzip2","bz2"
         | 
| 284 | 
            +
                    controltar = "control.tar.bz2"
         | 
| 285 | 
            +
                    compression = "-j"
         | 
| 286 | 
            +
                  when "xz"
         | 
| 287 | 
            +
                    controltar = "control.tar.xz"
         | 
| 288 | 
            +
                    compression = "-J"
         | 
| 289 | 
            +
                  when 'tar'
         | 
| 290 | 
            +
                    controltar = "control.tar"
         | 
| 291 | 
            +
                    compression = ""
         | 
| 292 | 
            +
                  when nil
         | 
| 293 | 
            +
                    raise FPM::InvalidPackageConfiguration, "Missing control.tar in deb source package #{package}"
         | 
| 294 | 
            +
                  else
         | 
| 295 | 
            +
                    raise FPM::InvalidPackageConfiguration,
         | 
| 296 | 
            +
                      "Unknown compression type '#{compression}' for control.tar in deb source package #{package}"
         | 
| 297 | 
            +
                end
         | 
| 298 | 
            +
             | 
| 262 299 | 
             
                build_path("control").tap do |path|
         | 
| 263 300 | 
             
                  FileUtils.mkdir(path) if !File.directory?(path)
         | 
| 301 | 
            +
                  # unpack the control.tar.{,gz,bz2,xz} from the deb package into staging_path
         | 
| 264 302 | 
             
                  # Unpack the control tarball
         | 
| 265 | 
            -
                  safesystem(ar_cmd[0] + " p #{package}  | 
| 303 | 
            +
                  safesystem(ar_cmd[0] + " p #{package} #{controltar} | tar #{compression} -xf - -C #{path}")
         | 
| 266 304 |  | 
| 267 305 | 
             
                  control = File.read(File.join(path, "control"))
         | 
| 268 306 |  | 
| @@ -370,15 +408,18 @@ class FPM::Package::Deb < FPM::Package | |
| 370 408 | 
             
                  when "xz"
         | 
| 371 409 | 
             
                    datatar = "data.tar.xz"
         | 
| 372 410 | 
             
                    compression = "-J"
         | 
| 411 | 
            +
                  when 'tar'
         | 
| 412 | 
            +
                    datatar = "data.tar"
         | 
| 413 | 
            +
                    compression = ""
         | 
| 414 | 
            +
                  when nil
         | 
| 415 | 
            +
                    raise FPM::InvalidPackageConfiguration, "Missing data.tar in deb source package #{package}"
         | 
| 373 416 | 
             
                  else
         | 
| 374 417 | 
             
                    raise FPM::InvalidPackageConfiguration,
         | 
| 375 | 
            -
                      "Unknown compression type '#{ | 
| 376 | 
            -
                      "in deb source package #{package}"
         | 
| 418 | 
            +
                      "Unknown compression type '#{compression}' for data.tar in deb source package #{package}"
         | 
| 377 419 | 
             
                end
         | 
| 378 420 |  | 
| 379 421 | 
             
                # unpack the data.tar.{gz,bz2,xz} from the deb package into staging_path
         | 
| 380 | 
            -
                safesystem(ar_cmd[0] + " p #{package} #{datatar} " | 
| 381 | 
            -
                           "| tar #{compression} -xf - -C #{staging_path}")
         | 
| 422 | 
            +
                safesystem(ar_cmd[0] + " p #{package} #{datatar} | tar #{compression} -xf - -C #{staging_path}")
         | 
| 382 423 | 
             
              end # def extract_files
         | 
| 383 424 |  | 
| 384 425 | 
             
              def output(output_path)
         | 
| @@ -422,6 +463,7 @@ class FPM::Package::Deb < FPM::Package | |
| 422 463 | 
             
                  raise "#{name}: tar is insufficient to support source_date_epoch."
         | 
| 423 464 | 
             
                end
         | 
| 424 465 |  | 
| 466 | 
            +
                attributes[:deb_systemd] = []
         | 
| 425 467 | 
             
                attributes.fetch(:deb_systemd_list, []).each do |systemd|
         | 
| 426 468 | 
             
                  name = File.basename(systemd, ".service")
         | 
| 427 469 | 
             
                  dest_systemd = staging_path("lib/systemd/system/#{name}.service")
         | 
| @@ -429,19 +471,19 @@ class FPM::Package::Deb < FPM::Package | |
| 429 471 | 
             
                  FileUtils.cp(systemd, dest_systemd)
         | 
| 430 472 | 
             
                  File.chmod(0644, dest_systemd)
         | 
| 431 473 |  | 
| 432 | 
            -
                  #  | 
| 433 | 
            -
                  attributes[:deb_systemd]  | 
| 474 | 
            +
                  # add systemd service name to attribute
         | 
| 475 | 
            +
                  attributes[:deb_systemd] << name
         | 
| 434 476 | 
             
                end
         | 
| 435 477 |  | 
| 436 | 
            -
                if script?(:before_upgrade) or script?(:after_upgrade) or attributes[:deb_systemd]
         | 
| 478 | 
            +
                if script?(:before_upgrade) or script?(:after_upgrade) or attributes[:deb_systemd].any?
         | 
| 437 479 | 
             
                  puts "Adding action files"
         | 
| 438 480 | 
             
                  if script?(:before_install) or script?(:before_upgrade)
         | 
| 439 481 | 
             
                    scripts[:before_install] = template("deb/preinst_upgrade.sh.erb").result(binding)
         | 
| 440 482 | 
             
                  end
         | 
| 441 | 
            -
                  if script?(:before_remove) or attributes[:deb_systemd]
         | 
| 483 | 
            +
                  if script?(:before_remove) or not attributes[:deb_systemd].empty?
         | 
| 442 484 | 
             
                    scripts[:before_remove] = template("deb/prerm_upgrade.sh.erb").result(binding)
         | 
| 443 485 | 
             
                  end
         | 
| 444 | 
            -
                  if script?(:after_install) or script?(:after_upgrade) or attributes[:deb_systemd]
         | 
| 486 | 
            +
                  if script?(:after_install) or script?(:after_upgrade) or attributes[:deb_systemd].any?
         | 
| 445 487 | 
             
                    scripts[:after_install] = template("deb/postinst_upgrade.sh.erb").result(binding)
         | 
| 446 488 | 
             
                  end
         | 
| 447 489 | 
             
                  if script?(:after_remove)
         | 
| @@ -553,6 +595,9 @@ class FPM::Package::Deb < FPM::Package | |
| 553 595 | 
             
                  when "xz"
         | 
| 554 596 | 
             
                    datatar = build_path("data.tar.xz")
         | 
| 555 597 | 
             
                    compression = "-J"
         | 
| 598 | 
            +
                  when "none"
         | 
| 599 | 
            +
                    datatar = build_path("data.tar")
         | 
| 600 | 
            +
                    compression = ""
         | 
| 556 601 | 
             
                  else
         | 
| 557 602 | 
             
                    raise FPM::InvalidPackageConfiguration,
         | 
| 558 603 | 
             
                      "Unknown compression type '#{self.attributes[:deb_compression]}'"
         | 
| @@ -574,6 +619,30 @@ class FPM::Package::Deb < FPM::Package | |
| 574 619 | 
             
                    safesystem(*ar_cmd, output_path, "debian-binary", "control.tar.gz", datatar)
         | 
| 575 620 | 
             
                  end
         | 
| 576 621 | 
             
                end
         | 
| 622 | 
            +
             | 
| 623 | 
            +
                # if a PACKAGENAME.changes file is to be created
         | 
| 624 | 
            +
                if self.attributes[:deb_generate_changes?]
         | 
| 625 | 
            +
                  distribution = self.attributes[:deb_dist]
         | 
| 626 | 
            +
             | 
| 627 | 
            +
                  # gather information about the files to distribute
         | 
| 628 | 
            +
                  files = [ output_path ]
         | 
| 629 | 
            +
                  changes_files = []
         | 
| 630 | 
            +
                  files.each do |path|
         | 
| 631 | 
            +
                    changes_files.push({
         | 
| 632 | 
            +
                      :name => path,
         | 
| 633 | 
            +
                      :size => File.size?(path),
         | 
| 634 | 
            +
                      :md5sum => Digest::MD5.file(path).hexdigest,
         | 
| 635 | 
            +
                      :sha1sum => Digest::SHA1.file(path).hexdigest,
         | 
| 636 | 
            +
                      :sha256sum => Digest::SHA2.file(path).hexdigest,
         | 
| 637 | 
            +
                    })
         | 
| 638 | 
            +
                  end
         | 
| 639 | 
            +
             | 
| 640 | 
            +
                  # write change infos to .changes file
         | 
| 641 | 
            +
                  changes_path = File.basename(output_path, '.deb') + '.changes'
         | 
| 642 | 
            +
                  changes_data = template("deb/deb.changes.erb").result(binding)
         | 
| 643 | 
            +
                  File.write(changes_path, changes_data)
         | 
| 644 | 
            +
                  logger.log("Created changes", :path => changes_path)
         | 
| 645 | 
            +
                end # if deb_generate_changes
         | 
| 577 646 | 
             
              end # def output
         | 
| 578 647 |  | 
| 579 648 | 
             
              def converted_from(origin)
         | 
| @@ -652,8 +721,13 @@ class FPM::Package::Deb < FPM::Package | |
| 652 721 | 
             
                  name, version = dep.gsub(/[()~>]/, "").split(/ +/)[0..1]
         | 
| 653 722 | 
             
                  nextversion = version.split(".").collect { |v| v.to_i }
         | 
| 654 723 | 
             
                  l = nextversion.length
         | 
| 655 | 
            -
                   | 
| 656 | 
            -
             | 
| 724 | 
            +
                  if l > 1
         | 
| 725 | 
            +
                    nextversion[l-2] += 1
         | 
| 726 | 
            +
                    nextversion[l-1] = 0
         | 
| 727 | 
            +
                  else
         | 
| 728 | 
            +
                    # Single component versions ~> 1
         | 
| 729 | 
            +
                    nextversion[l-1] += 1
         | 
| 730 | 
            +
                  end
         | 
| 657 731 | 
             
                  nextversion = nextversion.join(".")
         | 
| 658 732 | 
             
                  return ["#{name} (>= #{version})", "#{name} (<< #{nextversion})"]
         | 
| 659 733 | 
             
                elsif (m = dep.match(/(\S+)\s+\(!= (.+)\)/))
         | 
| @@ -719,11 +793,30 @@ class FPM::Package::Deb < FPM::Package | |
| 719 793 | 
             
                write_triggers # write trigger config to 'triggers' file
         | 
| 720 794 | 
             
                write_md5sums # write the md5sums file
         | 
| 721 795 |  | 
| 796 | 
            +
                # Tar up the staging_path into control.tar.{compression type}
         | 
| 797 | 
            +
                case self.attributes[:deb_compression]
         | 
| 798 | 
            +
                  when "gz", nil
         | 
| 799 | 
            +
                    controltar = "control.tar.gz"
         | 
| 800 | 
            +
                    compression = "-z"
         | 
| 801 | 
            +
                  when "bzip2"
         | 
| 802 | 
            +
                    controltar = "control.tar.bz2"
         | 
| 803 | 
            +
                    compression = "-j"
         | 
| 804 | 
            +
                  when "xz"
         | 
| 805 | 
            +
                    controltar = "control.tar.xz"
         | 
| 806 | 
            +
                    compression = "-J"
         | 
| 807 | 
            +
                  when "none"
         | 
| 808 | 
            +
                    controltar = "control.tar"
         | 
| 809 | 
            +
                    compression = ""
         | 
| 810 | 
            +
                  else
         | 
| 811 | 
            +
                    raise FPM::InvalidPackageConfiguration,
         | 
| 812 | 
            +
                      "Unknown compression type '#{self.attributes[:deb_compression]}'"
         | 
| 813 | 
            +
                end
         | 
| 814 | 
            +
             | 
| 722 815 | 
             
                # Make the control.tar.gz
         | 
| 723 | 
            -
                build_path( | 
| 816 | 
            +
                build_path(controltar).tap do |controltar|
         | 
| 724 817 | 
             
                  logger.info("Creating", :path => controltar, :from => control_path)
         | 
| 725 818 |  | 
| 726 | 
            -
                  args = [ tar_cmd, "-C", control_path, "- | 
| 819 | 
            +
                  args = [ tar_cmd, "-C", control_path, compression, "-cf", controltar,
         | 
| 727 820 | 
             
                    "--owner=0", "--group=0", "--numeric-owner", "." ]
         | 
| 728 821 | 
             
                  if tar_cmd_supports_sort_names_and_set_mtime? and not attributes[:source_date_epoch].nil?
         | 
| 729 822 | 
             
                    # Force deterministic file order and timestamp
         | 
| @@ -827,11 +920,25 @@ class FPM::Package::Deb < FPM::Package | |
| 827 920 |  | 
| 828 921 | 
             
                # scan all conf file paths for files and add them
         | 
| 829 922 | 
             
                config_files.each do |path|
         | 
| 923 | 
            +
                  logger.debug("Checking if #{path} exists")
         | 
| 924 | 
            +
                  cfe = File.exist?("#{path}")
         | 
| 925 | 
            +
                  logger.debug("Check result #{cfe}")
         | 
| 830 926 | 
             
                  begin
         | 
| 831 927 | 
             
                    add_path(path, allconfigs)
         | 
| 832 928 | 
             
                  rescue Errno::ENOENT
         | 
| 833 | 
            -
                     | 
| 834 | 
            -
                       | 
| 929 | 
            +
                    if !cfe
         | 
| 930 | 
            +
                      raise FPM::InvalidPackageConfiguration,
         | 
| 931 | 
            +
                        "Error trying to use '#{path}' as a config file in the package. Does it exist?"
         | 
| 932 | 
            +
                    else
         | 
| 933 | 
            +
                      dcl = File.join(staging_path, path)
         | 
| 934 | 
            +
                      if !File.exist?("#{dcl}")
         | 
| 935 | 
            +
                        logger.debug("Adding config file #{path} to Staging area #{staging_path}")
         | 
| 936 | 
            +
                        FileUtils.mkdir_p(File.dirname(dcl))
         | 
| 937 | 
            +
                        FileUtils.cp_r path, dcl
         | 
| 938 | 
            +
                      else
         | 
| 939 | 
            +
                        logger.debug("Config file aready exists in staging area.")
         | 
| 940 | 
            +
                      end
         | 
| 941 | 
            +
                    end
         | 
| 835 942 | 
             
                  end
         | 
| 836 943 | 
             
                end
         | 
| 837 944 |  | 
| @@ -887,7 +994,7 @@ class FPM::Package::Deb < FPM::Package | |
| 887 994 |  | 
| 888 995 | 
             
                if attributes[:deb_templates]
         | 
| 889 996 | 
             
                  FileUtils.cp(attributes[:deb_templates], control_path("templates"))
         | 
| 890 | 
            -
                  File.chmod( | 
| 997 | 
            +
                  File.chmod(0644, control_path("templates"))
         | 
| 891 998 | 
             
                end
         | 
| 892 999 | 
             
              end # def write_debconf
         | 
| 893 1000 |  |