Nixpkgs/Building RPM DEB with nixpkgs: Difference between revisions

From NixOS Wiki
imported>Matthiasbeyer
Created page with initial information
 
imported>Das-g
m wikify inline code snippets. (Backticks are MarkDown syntax, not MediaWiki syntax.)
Line 21: Line 21:


In the setting the author of this article used, the host machine was a CentOS 7 amd64 machine running in vmware.
In the setting the author of this article used, the host machine was a CentOS 7 amd64 machine running in vmware.
On the machine, the nix package manager was installed via the `curl->sh` provided on the nixos.org website.
On the machine, the nix package manager was installed via the <code>curl->sh</code> provided on the nixos.org website.


The configuration file `/etc/nix/nix.conf` was edited for the following contents:
The configuration file <code>/etc/nix/nix.conf</code> was edited for the following contents:
<syntaxHighlight>
<syntaxHighlight>
sandbox = false
sandbox = false
Line 36: Line 36:
The author used a simple approach:
The author used a simple approach:


1. Clone the official nixpkgs repository into `~/nixpkgs`
1. Clone the official nixpkgs repository into <code>~/nixpkgs</code>
2. Add a file to the nixpkgs repository `./deb.nix` with the following contents:
2. Add a file to the nixpkgs repository <code>./deb.nix</code> with the following contents:


(In this scenario, ncurses was built for testing the whole approach)
(In this scenario, ncurses was built for testing the whole approach)
Line 55: Line 55:
</syntaxHighlight>
</syntaxHighlight>


and then this file was called: `nix-build ./deb.nix`.
and then this file was called: <code>nix-build ./deb.nix</code>.


This loads the relevant disk images from the channel mirror and spins up the Qemu VM to build the package.
This loads the relevant disk images from the channel mirror and spins up the Qemu VM to build the package.
The deb file (in this case, as we're building a deb with the expression from above) is located in ./result/debs/ after a successful build.
The deb file (in this case, as we're building a deb with the expression from above) is located in ./result/debs/ after a successful build.

Revision as of 23:09, 28 March 2019


Please note that this page is under construction and the provided information is incomplete. Reach out to matthiasbeyer if this page was not updated in a long time.



How it works

To build deb/rpm packages with nix/nixpkgs, it is critical to understand the process. Hence a short intro:

To build a deb or rpm package with nixpkgs, the build process needs a disk image which it then uses to boot a virtual machine (as in Qemu). Inside this virtual machine, the deb/rpm package is compiled from a tarball and then packaged using the respective tools for deb/rpm packaging.

Luckily, all that requirements are shipped inside nixpkgs itself.

Preparation of the host machine

The host machine has to be prepared for the build process.

In the setting the author of this article used, the host machine was a CentOS 7 amd64 machine running in vmware. On the machine, the nix package manager was installed via the curl->sh provided on the nixos.org website.

The configuration file /etc/nix/nix.conf was edited for the following contents:

sandbox = false
system-features = [ kvm nixos-test benchmark big-parallel ]

This step might not be necessary on a NixOS installation.


How to build a deb/rpm with nixpkgs

The author used a simple approach:

1. Clone the official nixpkgs repository into ~/nixpkgs 2. Add a file to the nixpkgs repository ./deb.nix with the following contents:

(In this scenario, ncurses was built for testing the whole approach)

let
  pkgs = (import ./default.nix {});
  vm    = pkgs.vmTools.diskImageFuns.centos7x86_64 {};
  args = {
    diskImage = vm;
    src       = pkgs.ncurses.src;
    name      = "ncurses-deb";
    buildInputs = [];
    meta.description = "No descr";
  };
in pkgs.releaseTools.debBuild args

and then this file was called: nix-build ./deb.nix.

This loads the relevant disk images from the channel mirror and spins up the Qemu VM to build the package. The deb file (in this case, as we're building a deb with the expression from above) is located in ./result/debs/ after a successful build.