1
0
mirror of https://github.com/jordansissel/fpm synced 2024-12-22 00:34:15 +01:00
fpm/docs/packages/deb.rst
Jordan Sissel e8fb21d725 Move generated cli docs to packages/cli/{type}.rst
I'm hoping this makes it easier to find files in the docs/packages
directory.
2021-11-09 15:44:37 -08:00

118 lines
4.9 KiB
ReStructuredText

deb - Debian package format
===========================
Supported Uses in FPM
---------------------
fpm supports input and output for Debian package (deb). This means you can read a deb and convert it to a different output type (such as a `dir` or `rpm`). It also means you can create a deb package.
Arguments when used as input type
---------------------------------
For the sample command reading a deb file as input and outputting an rpm package::
fpm -s deb -t rpm file.deb
The argument is used as a file and read as a debian package file.
Sample Usage
------------
Let's create a Debian package of Hashicorp's Terraform. To do this, we'll need to download it and put the files into a Debian package::
# Download Terraform 1.0.10
% wget https://releases.hashicorp.com/terraform/1.0.10/terraform_1.0.10_linux_amd64.zip
The Terraform release .zip file contains a single file, `terraform` itself. You can see the files in this zip by using `unzip -l`::
% unzip -l ~/build/z/terraform_1.0.10_linux_amd64.zip
Archive: /home/jls/build/z/terraform_1.0.10_linux_amd64.zip
Length Date Time Name
--------- ---------- ----- ----
79348596 2021-10-28 07:15 terraform
--------- -------
79348596 1 file
We can use fpm to convert this zip file into a debian package with one step::
% fpm -s zip -t deb --prefix /usr/bin -n terraform -v 1.0.10 terraform_1.0.10_linux_amd64.zip
Created package {:path=>"terraform_1.0.10_amd64.deb"}
Nice! We just converted a zip file into a debian package. Let's talk through the command-line flags here:
* ``-s zip`` tells fpm to use "zip" as the input type. This allows fpm to read zip files.
* ``-t deb`` tells fpm to output a Debian package.
* ``--prefix /usr/bin`` tells fpm to move all files in the .zip file to the /usr/bin file path. In this case, it results in a single file in the path `/usr/bin/terraform`
* ``-n terraform`` names the package "terraform"
* ``-v 1.0.10`` sets the package version. This is useful to package systems when considering whether a given package is an upgrade, downgrade, or already installed.
* Finally, the last argument, `terraform_1.0.10_linux_amd64.zip`. This is given to the fpm to process as a zip file.
You can inspect the package contents with `dpkg --contents terraform_1.0.10_amd64.deb`::
% dpkg --contents terraform_1.0.10_amd64.deb
drwxr-xr-x 0/0 0 2021-11-02 23:33 ./
drwxr-xr-x 0/0 0 2021-11-02 23:33 ./usr/
drwxr-xr-x 0/0 0 2021-11-02 23:33 ./usr/share/
drwxr-xr-x 0/0 0 2021-11-02 23:33 ./usr/share/doc/
drwxr-xr-x 0/0 0 2021-11-02 23:33 ./usr/share/doc/terraform/
-rw-r--r-- 0/0 141 2021-11-02 23:33 ./usr/share/doc/terraform/changelog.gz
drwxr-xr-x 0/0 0 2021-11-02 23:33 ./usr/bin/
-rwxr-xr-x 0/0 79348596 2021-10-28 07:15 ./usr/bin/terraform
The ``changelog.gz`` file is a recommended Debian practice for packaging. FPM will provide a generated changelog for you, by default. You can provide your own with the ``--deb-changelog`` flag.
Lets install our terraform package and try it out::
% sudo apt install ./terraform_1.0.10_amd64.deb
...
% dpkg -l terraform
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-========================-=================-=================-=====================================================
ii terraform 1.0.10 amd64 no description given
% terraform -version
Terraform v1.0.10
on linux_amd64
You may remove the package at any time::
% sudo apt remove terraform
...
Removing terraform (1.0.10) ...
Fun Examples
------------
Hi! The fpm project would love to have any fun examples you have for using this package type. Please consider contributing your ideas by submitting them on the fpm issue tracker: https://github.com/jordansissel/fpm/issues/new
Changing an existing deb
~~~~~~~~~~~~~~~~~~~~~~~~
fpm supports deb as both an input and output type (``-s`` and ``-t`` flags), so you can use this to modify an existing deb.
For example, let's create an deb to use for our example::
% fpm -s empty -t deb -n example
Created package {:path=>"example_1.0_amd64.deb"}
Lets say we made a mistake and want to rename the package::
% fpm -s deb -t deb -n newname example_1.0_amd64.deb
Created package {:path=>"newname_1.0_amd64.deb"}
And maybe the architecture is wrong. fpm defaulted to amd64 (what fpm calls
"native"), and we really want what Debian calls "all"::
% fpm -s deb -t deb -a all newname_1.0_amd64.deb
Created package {:path=>"newname_1.0_all.deb"}
Deb-specific command line flags
-------------------------------
.. include:: cli/deb.rst