2019-01-27 02:42:16 +00:00
|
|
|
<section xmlns="http://docbook.org/ns/docbook"
|
|
|
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
|
|
xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
|
|
xml:id="sec-pkgs-fetchers">
|
|
|
|
<title>Fetcher functions</title>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
When using Nix, you will frequently need to download source code
|
2019-01-27 16:57:36 +00:00
|
|
|
and other files from the internet. Nixpkgs comes with a few helper
|
|
|
|
functions that allow you to fetch fixed-output derivations in a
|
2019-01-27 02:42:16 +00:00
|
|
|
structured way.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
The two fetcher primitives are <function>fetchurl</function> and
|
|
|
|
<function>fetchzip</function>. Both of these have two required
|
|
|
|
arguments, a URL and a hash. The hash is typically
|
|
|
|
<literal>sha256</literal>, although many more hash algorithms are
|
|
|
|
supported. Nixpkgs contributors are currently recommended to use
|
|
|
|
<literal>sha256</literal>. This hash will be used by Nix to
|
|
|
|
identify your source. A typical usage of fetchurl is provided
|
|
|
|
below.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<programlisting><![CDATA[
|
|
|
|
{ stdenv, fetchurl }:
|
|
|
|
|
|
|
|
stdenv.mkDerivation {
|
|
|
|
name = "hello";
|
|
|
|
src = fetchurl {
|
|
|
|
url = "http://www.example.org/hello.tar.gz";
|
|
|
|
sha256 = "1111111111111111111111111111111111111111111111111111";
|
|
|
|
};
|
|
|
|
}
|
|
|
|
]]></programlisting>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
The main difference between <function>fetchurl</function> and
|
|
|
|
<function>fetchzip</function> is in how they store the contents.
|
|
|
|
<function>fetchurl</function> will store the unaltered contents of
|
|
|
|
the URL within the Nix store. <function>fetchzip</function> on the
|
|
|
|
other hand will decompress the archive for you, making files and
|
|
|
|
directories directly accessible in the future.
|
|
|
|
<function>fetchzip</function> can only be used with archives.
|
|
|
|
Despite the name, <function>fetchzip</function> is not limited to
|
|
|
|
.zip files and can also be used with any tarball.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
<function>fetchpatch</function> works very similarly to
|
2019-01-27 16:57:36 +00:00
|
|
|
<function>fetchurl</function> with the same arguments expected. It
|
|
|
|
expects patch files as a source and and performs normalization on
|
|
|
|
them before computing the checksum. For example it will remove
|
|
|
|
comments or other unstable parts that are sometimes added by
|
|
|
|
version control systems and can change over time.
|
2019-01-27 02:42:16 +00:00
|
|
|
</para>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
Other fetcher functions allow you to add source code directly from
|
|
|
|
a VCS such as subversion or git. These are mostly straightforward
|
|
|
|
names based on the name of the command used with the VCS system.
|
|
|
|
Because they give you a working repository, they act most like
|
|
|
|
<function>fetchzip</function>.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<literal>fetchsvn</literal>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Used with Subversion. Expects <literal>url</literal> to a
|
|
|
|
Subversion directory, <literal>rev</literal>, and
|
|
|
|
<literal>sha256</literal>.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<literal>fetchgit</literal>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Used with Git. Expects <literal>url</literal> to a Git repo,
|
|
|
|
<literal>rev</literal>, and <literal>sha256</literal>.
|
2019-01-27 16:57:36 +00:00
|
|
|
<literal>rev</literal> in this case can be full the git commit
|
|
|
|
id (SHA1 hash) or a tag name like
|
|
|
|
<literal>refs/tags/v1.0</literal>.
|
2019-01-27 02:42:16 +00:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<literal>fetchfossil</literal>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Used with Fossil. Expects <literal>url</literal> to a Fossil
|
|
|
|
archive, <literal>rev</literal>, and <literal>sha256</literal>.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<literal>fetchcvs</literal>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Used with CVS. Expects <literal>cvsRoot</literal>,
|
|
|
|
<literal>tag</literal>, and <literal>sha256</literal>.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<literal>fetchhg</literal>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Used with Mercurial. Expects <literal>url</literal>,
|
|
|
|
<literal>rev</literal>, and <literal>sha256</literal>.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
|
|
|
|
|
|
<para>
|
|
|
|
A number of fetcher functions wrap part of
|
|
|
|
<function>fetchurl</function> and <function>fetchzip</function>.
|
|
|
|
They are mainly convenience functions intended for commonly used
|
|
|
|
destinations of source code in Nixpkgs. These wrapper fetchers are
|
|
|
|
listed below.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<literal>fetchFromGitHub</literal>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
<function>fetchFromGitHub</function> expects four arguments.
|
|
|
|
<literal>owner</literal> is a string corresponding to the
|
|
|
|
GitHub user or organization that controls this repository.
|
|
|
|
<literal>repo</literal> corresponds to the name of the
|
|
|
|
software repository. These are located at the top of every
|
|
|
|
GitHub HTML page as
|
|
|
|
<literal>owner</literal>/<literal>repo</literal>.
|
|
|
|
<literal>rev</literal> corresponds to the Git commit hash or
|
2019-01-27 16:57:36 +00:00
|
|
|
tag (e.g <literal>v1.0</literal>) that will be downloaded from
|
|
|
|
Git. Finally, <literal>sha256</literal> corresponds to the
|
|
|
|
hash of the extracted directory. Again, other hash algorithms
|
|
|
|
are also available but <literal>sha256</literal> is currently
|
2019-01-27 02:42:16 +00:00
|
|
|
preferred.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<literal>fetchFromGitLab</literal>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
This is used with GitLab repositories. The arguments expected
|
|
|
|
are very similar to fetchFromGitHub above.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<literal>fetchFromBitbucket</literal>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
This is used with BitBucket repositories. The arguments expected
|
|
|
|
are very similar to fetchFromGitHub above.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<literal>fetchFromSavannah</literal>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
This is used with Savannah repositories. The arguments expected
|
|
|
|
are very similar to fetchFromGitHub above.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term>
|
|
|
|
<literal>fetchFromRepoOrCz</literal>
|
|
|
|
</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
This is used with repo.or.cz repositories. The arguments
|
|
|
|
expected are very similar to fetchFromGitHub above.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
|
|
|
|
|
|
|
|
|
|
</section>
|