lix/doc/manual/src/command-ref/nix-prefetch-url.md

79 lines
2.7 KiB
Markdown
Raw Normal View History

2020-07-24 10:56:19 +00:00
# Name
2020-07-23 10:58:42 +00:00
2020-07-24 10:56:19 +00:00
`nix-prefetch-url` - copy a file from a URL into the store and print its hash
2020-07-23 10:58:42 +00:00
2020-07-24 10:56:19 +00:00
# Synopsis
2020-07-23 10:58:42 +00:00
2020-07-24 10:56:19 +00:00
`nix-prefetch-url` *url* [*hash*]
[`--type` *hashAlgo*]
[`--print-path`]
[`--unpack`]
[`--name` *name*]
2020-07-23 10:58:42 +00:00
# Description
The command `nix-prefetch-url` downloads the file referenced by the URL
*url*, prints its cryptographic hash, and copies it into the Nix store.
The file name in the store is `hash-baseName`, where *baseName* is
everything following the final slash in *url*.
2020-07-23 10:58:42 +00:00
This command is just a convenience for Nix expression writers. Often a
Nix expression fetches some source distribution from the network using
the `fetchurl` expression contained in Nixpkgs. However, `fetchurl`
requires a cryptographic hash. If you don't know the hash, you would
have to download the file first, and then `fetchurl` would download it
again when you build your Nix expression. Since `fetchurl` uses the same
name for the downloaded file as `nix-prefetch-url`, the redundant
download can be avoided.
If *hash* is specified, then a download is not performed if the Nix
store already contains a file with the same hash and base name.
Otherwise, the file is downloaded, and an error is signaled if the
actual hash of the file does not match the specified hash.
2020-07-23 10:58:42 +00:00
This command prints the hash on standard output. Additionally, if the
option `--print-path` is used, the path of the downloaded file in the
Nix store is also printed.
# Options
- `--type` *hashAlgo*\
2020-07-23 10:58:42 +00:00
Use the specified cryptographic hash algorithm, which can be one of
`md5`, `sha1`, `sha256`, and `sha512`.
2020-07-23 10:58:42 +00:00
- `--print-path`\
2020-07-23 10:58:42 +00:00
Print the store path of the downloaded file on standard output.
- `--unpack`\
2020-07-23 10:58:42 +00:00
Unpack the archive (which must be a tarball or zip file) and add the
result to the Nix store. The resulting hash can be used with
functions such as Nixpkgss `fetchzip` or `fetchFromGitHub`.
- `--executable`\
Set the executable bit on the downloaded file.
- `--name` *name*\
2020-07-23 10:58:42 +00:00
Override the name of the file in the Nix store. By default, this is
`hash-basename`, where *basename* is the last component of *url*.
Overriding the name is necessary when *basename* contains characters
2020-07-23 10:58:42 +00:00
that are not allowed in Nix store paths.
# Examples
2020-07-31 13:43:25 +00:00
```console
$ nix-prefetch-url ftp://ftp.gnu.org/pub/gnu/hello/hello-2.10.tar.gz
0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i
```
```console
$ nix-prefetch-url --print-path mirror://gnu/hello/hello-2.10.tar.gz
0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i
/nix/store/3x7dwzq014bblazs7kq20p9hyzz0qh8g-hello-2.10.tar.gz
```
```console
$ nix-prefetch-url --unpack --print-path https://github.com/NixOS/patchelf/archive/0.8.tar.gz
079agjlv0hrv7fxnx9ngipx14gyncbkllxrp9cccnh3a50fxcmy7
/nix/store/19zrmhm3m40xxaw81c8cqm6aljgrnwj2-0.8.tar.gz
```