Merge branch 'master' into staging
Larger rebuilds from master.
This commit is contained in:
commit
1d15dadbec
@ -58,6 +58,8 @@ To install crates with nix there is also an experimental project called
|
||||
|
||||
## Compiling Rust crates using Nix instead of Cargo
|
||||
|
||||
### Simple operation
|
||||
|
||||
When run, `cargo build` produces a file called `Cargo.lock`,
|
||||
containing pinned versions of all dependencies. Nixpkgs contains a
|
||||
tool called `carnix` (`nix-env -iA nixos.carnix`), which can be used
|
||||
@ -153,6 +155,8 @@ Here, the `libc` crate has no `src` attribute, so `buildRustCrate`
|
||||
will fetch it from [crates.io](https://crates.io). A `sha256`
|
||||
attribute is still needed for Nix purity.
|
||||
|
||||
### Handling external dependencies
|
||||
|
||||
Some crates require external libraries. For crates from
|
||||
[crates.io](https://crates.io), such libraries can be specified in
|
||||
`defaultCrateOverrides` package in nixpkgs itself.
|
||||
@ -210,7 +214,10 @@ with import <nixpkgs> {};
|
||||
}
|
||||
```
|
||||
|
||||
Three more parameters can be overridden:
|
||||
### Options and phases configuration
|
||||
|
||||
Actually, the overrides introduced in the previous section are more
|
||||
general. A number of other parameters can be overridden:
|
||||
|
||||
- The version of rustc used to compile the crate:
|
||||
|
||||
@ -232,6 +239,30 @@ Three more parameters can be overridden:
|
||||
(hello {}).override { verbose = false; };
|
||||
```
|
||||
|
||||
- Extra arguments to be passed to `rustc`:
|
||||
|
||||
```
|
||||
(hello {}).override { extraRustcOpts = "-Z debuginfo=2"; };
|
||||
```
|
||||
|
||||
- Phases, just like in any other derivation, can be specified using
|
||||
the following attributes: `preUnpack`, `postUnpack`, `prePatch`,
|
||||
`patches`, `postPatch`, `preConfigure` (in the case of a Rust crate,
|
||||
this is run before calling the "build" script), `postConfigure`
|
||||
(after the "build" script),`preBuild`, `postBuild`, `preInstall` and
|
||||
`postInstall`. As an example, here is how to create a new module
|
||||
before running the build script:
|
||||
|
||||
```
|
||||
(hello {}).override {
|
||||
preConfigure = ''
|
||||
echo "pub const PATH=\"${hi.out}\";" >> src/path.rs"
|
||||
'';
|
||||
};
|
||||
```
|
||||
|
||||
### Features
|
||||
|
||||
One can also supply features switches. For example, if we want to
|
||||
compile `diesel_cli` only with the `postgres` feature, and no default
|
||||
features, we would write:
|
||||
@ -243,7 +274,7 @@ features, we would write:
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
Where `diesel.nix` is the file generated by Carnix, as explained above.
|
||||
|
||||
## Using the Rust nightlies overlay
|
||||
|
||||
|
@ -385,6 +385,7 @@
|
||||
lheckemann = "Linus Heckemann <git@sphalerite.org>";
|
||||
lhvwb = "Nathaniel Baxter <nathaniel.baxter@gmail.com>";
|
||||
lihop = "Leroy Hopson <nixos@leroy.geek.nz>";
|
||||
limeytexan = "Michael Brantley <limeytexan@gmail.com>";
|
||||
linquize = "Linquize <linquize@yahoo.com.hk>";
|
||||
linus = "Linus Arver <linusarver@gmail.com>";
|
||||
lluchs = "Lukas Werling <lukas.werling@gmail.com>";
|
||||
@ -669,6 +670,7 @@
|
||||
StillerHarpo = "Florian Engel <florianengel39@gmail.com>";
|
||||
stumoss = "Stuart Moss <samoss@gmail.com>";
|
||||
SuprDewd = "Bjarki Ágúst Guðmundsson <suprdewd@gmail.com>";
|
||||
suvash = "Suvash Thapaliya <suvash+nixpkgs@gmail.com>";
|
||||
swarren83 = "Shawn Warren <shawn.w.warren@gmail.com>";
|
||||
swflint = "Samuel W. Flint <swflint@flintfam.org>";
|
||||
swistak35 = "Rafał Łasocha <me@swistak35.com>";
|
||||
|
@ -545,6 +545,13 @@ rec {
|
||||
name = "riscv-multiplatform";
|
||||
kernelArch = "riscv";
|
||||
bfdEmulation = "elf${bits}lriscv";
|
||||
kernelTarget = "vmlinux";
|
||||
kernelAutoModules = true;
|
||||
kernelBaseConfig = "defconfig";
|
||||
kernelExtraConfig = ''
|
||||
FTRACE n
|
||||
SERIAL_OF_PLATFORM y
|
||||
'';
|
||||
};
|
||||
|
||||
selectBySystem = system: {
|
||||
|
@ -12,7 +12,7 @@ interfaces. However, you can configure an interface manually as
|
||||
follows:
|
||||
|
||||
<programlisting>
|
||||
networking.interfaces.eth0.ip4 = [ { address = "192.168.1.2"; prefixLength = 24; } ];
|
||||
networking.interfaces.eth0.ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
|
||||
</programlisting>
|
||||
|
||||
Typically you’ll also want to set a default gateway and set of name
|
||||
|
@ -26,7 +26,7 @@ boot.kernel.sysctl."net.ipv6.conf.eth0.disable_ipv6" = true;
|
||||
DHCPv6. You can configure an interface manually:
|
||||
|
||||
<programlisting>
|
||||
networking.interfaces.eth0.ip6 = [ { address = "fe00:aa:bb:cc::2"; prefixLength = 64; } ];
|
||||
networking.interfaces.eth0.ipv6.addresses = [ { address = "fe00:aa:bb:cc::2"; prefixLength = 64; } ];
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
@ -35,18 +35,7 @@ services.compton = {
|
||||
To install them manually (system wide), put them into your
|
||||
<literal>environment.systemPackages</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
NixOS’s default <emphasis>display manager</emphasis> is SLiM.
|
||||
(DM is the program that provides a graphical login prompt
|
||||
and manages the X server.)
|
||||
You can, for example, select KDE’s
|
||||
<command>sddm</command> instead:
|
||||
<programlisting>
|
||||
services.xserver.displayManager.sddm.enable = true;
|
||||
</programlisting>
|
||||
</para>
|
||||
|
||||
|
||||
<simplesect>
|
||||
<title>Thunar Volume Support</title>
|
||||
|
||||
|
@ -36,7 +36,7 @@ let
|
||||
package = args.package or (lib.attrByPath path (throw "Invalid package attribute path `${toString path}'") pkgs);
|
||||
in "<listitem>"
|
||||
+ "<para><literal>pkgs.${name} (${package.meta.name})</literal>"
|
||||
+ lib.optionalString (!package.meta.evaluates) " <emphasis>[UNAVAILABLE]</emphasis>"
|
||||
+ lib.optionalString (!package.meta.available) " <emphasis>[UNAVAILABLE]</emphasis>"
|
||||
+ ": ${package.meta.description or "???"}.</para>"
|
||||
+ lib.optionalString (args ? comment) "\n<para>${args.comment}</para>"
|
||||
# Lots of `longDescription's break DocBook, so we just wrap them into <programlisting>
|
||||
|
@ -275,11 +275,20 @@ Enter new UNIX password: ***
|
||||
Retype new UNIX password: ***
|
||||
</screen>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
To prevent the password prompt, set <code>users.mutableUsers = false;</code> in
|
||||
<filename>configuration.nix</filename>, which allows unattended installation
|
||||
necessary in automation.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
</para>
|
||||
|
||||
</listitem>
|
||||
|
||||
<listitem><para>If everything went well:
|
||||
<listitem>
|
||||
<para>If everything went well:
|
||||
|
||||
<screen>
|
||||
# reboot</screen>
|
||||
|
@ -231,6 +231,14 @@ following incompatible changes:</para>
|
||||
<literal>Option "XkbRules" "base"</literal> may result in broken keyboard layout.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The <literal>attic</literal> package was removed. A maintained fork called
|
||||
<link xlink:href="https://www.borgbackup.org/">Borg</link> should be used instead.
|
||||
Migration instructions can be found
|
||||
<link xlink:href="http://borgbackup.readthedocs.io/en/stable/usage/upgrade.html#attic-and-borg-0-xx-to-borg-1-x">here</link>.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
</section>
|
||||
@ -261,10 +269,42 @@ following incompatible changes:</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The option <option>services.xserver.desktopManager.default</option> is now <literal>none</literal> by default.
|
||||
An assertion failure is thrown if WM's and DM's default are <literal>none</literal>.
|
||||
To explicitly run a plain X session without and DM or WM, the newly introduced option <option>services.xserver.plainX</option>
|
||||
must be set to true.
|
||||
In the module <option>networking.interfaces.<name></option> the
|
||||
following options have been removed:
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><option>ipAddress</option></para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><option>ipv6Address</option></para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><option>prefixLength</option></para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><option>ipv6PrefixLength</option></para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><option>subnetMask</option></para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
To assign static addresses to an interface the options
|
||||
<option>ipv4.addresses</option> and <option>ipv6.addresses</option>
|
||||
should be used instead.
|
||||
The options <option>ip4</option> and <option>ip6</option> have been
|
||||
renamed to <option>ipv4.addresses</option> <option>ipv6.addresses</option>
|
||||
respectively.
|
||||
The new options <option>ipv4.routes</option> and <option>ipv6.routes</option>
|
||||
have been added to set up static routing.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The option <option>services.xserver.desktopManager.default</option> is now
|
||||
<literal>none</literal> by default. An assertion failure is thrown if WM's
|
||||
and DM's default are <literal>none</literal>.
|
||||
To explicitly run a plain X session without and DM or WM, the newly
|
||||
introduced option <option>services.xserver.plainX</option> must be set to true.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
|
@ -51,7 +51,7 @@ rec {
|
||||
let
|
||||
interfacesNumbered = zipLists config.virtualisation.vlans (range 1 255);
|
||||
interfaces = flip map interfacesNumbered ({ fst, snd }:
|
||||
nameValuePair "eth${toString snd}" { ip4 =
|
||||
nameValuePair "eth${toString snd}" { ipv4.addresses =
|
||||
[ { address = "192.168.${toString fst}.${toString m.snd}";
|
||||
prefixLength = 24;
|
||||
} ];
|
||||
@ -64,7 +64,7 @@ rec {
|
||||
networking.interfaces = listToAttrs interfaces;
|
||||
|
||||
networking.primaryIPAddress =
|
||||
optionalString (interfaces != []) (head (head interfaces).value.ip4).address;
|
||||
optionalString (interfaces != []) (head (head interfaces).value.ipv4.addresses).address;
|
||||
|
||||
# Put the IP addresses of all VMs in this machine's
|
||||
# /etc/hosts file. If a machine has multiple
|
||||
|
@ -84,7 +84,7 @@ let format' = format; in let
|
||||
|
||||
nixpkgs = cleanSource pkgs.path;
|
||||
|
||||
channelSources = pkgs.runCommand "nixos-${config.system.nixosVersion}" {} ''
|
||||
channelSources = pkgs.runCommand "nixos-${config.system.nixos.version}" {} ''
|
||||
mkdir -p $out
|
||||
cp -prd ${nixpkgs} $out/nixos
|
||||
chmod -R u+w $out/nixos
|
||||
@ -92,7 +92,7 @@ let format' = format; in let
|
||||
ln -s . $out/nixos/nixpkgs
|
||||
fi
|
||||
rm -rf $out/nixos/.git
|
||||
echo -n ${config.system.nixosVersionSuffix} > $out/nixos/.version-suffix
|
||||
echo -n ${config.system.nixos.versionSuffix} > $out/nixos/.version-suffix
|
||||
'';
|
||||
|
||||
metaClosure = pkgs.writeText "meta" ''
|
||||
|
@ -78,7 +78,19 @@ rec {
|
||||
} @ t:
|
||||
|
||||
let
|
||||
testDriverName = "nixos-test-driver-${name}";
|
||||
# A standard store path to the vm monitor is built like this:
|
||||
# /tmp/nix-build-vm-test-run-$name.drv-0/vm-state-machine/monitor
|
||||
# The max filename length of a unix domain socket is 108 bytes.
|
||||
# This means $name can at most be 50 bytes long.
|
||||
maxTestNameLen = 50;
|
||||
testNameLen = builtins.stringLength name;
|
||||
|
||||
testDriverName = with builtins;
|
||||
if testNameLen > maxTestNameLen then
|
||||
abort ("The name of the test '${name}' must not be longer than ${toString maxTestNameLen} " +
|
||||
"it's currently ${toString testNameLen} characters long.")
|
||||
else
|
||||
"nixos-test-driver-${name}";
|
||||
|
||||
nodes = buildVirtualNetwork (
|
||||
t.nodes or (if t ? machine then { machine = t.machine; } else { }));
|
||||
|
@ -12,7 +12,7 @@ let
|
||||
# CD. These are installed into the "nixos" channel of the root
|
||||
# user, as expected by nixos-rebuild/nixos-install. FIXME: merge
|
||||
# with make-channel.nix.
|
||||
channelSources = pkgs.runCommand "nixos-${config.system.nixosVersion}"
|
||||
channelSources = pkgs.runCommand "nixos-${config.system.nixos.version}"
|
||||
{ }
|
||||
''
|
||||
mkdir -p $out
|
||||
@ -21,7 +21,7 @@ let
|
||||
if [ ! -e $out/nixos/nixpkgs ]; then
|
||||
ln -s . $out/nixos/nixpkgs
|
||||
fi
|
||||
echo -n ${config.system.nixosVersionSuffix} > $out/nixos/.version-suffix
|
||||
echo -n ${config.system.nixos.versionSuffix} > $out/nixos/.version-suffix
|
||||
'';
|
||||
|
||||
in
|
||||
|
@ -16,7 +16,7 @@ with lib;
|
||||
];
|
||||
|
||||
# ISO naming.
|
||||
isoImage.isoName = "${config.isoImage.isoBaseName}-${config.system.nixosLabel}-${pkgs.stdenv.system}.iso";
|
||||
isoImage.isoName = "${config.isoImage.isoBaseName}-${config.system.nixos.label}-${pkgs.stdenv.system}.iso";
|
||||
|
||||
isoImage.volumeID = substring 0 11 "NIXOS_ISO";
|
||||
|
||||
|
@ -39,31 +39,31 @@ let
|
||||
DEFAULT boot
|
||||
|
||||
LABEL boot
|
||||
MENU LABEL NixOS ${config.system.nixosLabel}${config.isoImage.appendToMenuLabel}
|
||||
LINUX /boot/bzImage
|
||||
MENU LABEL NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel}
|
||||
LINUX /boot/${config.system.boot.loader.kernelFile}
|
||||
APPEND init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams}
|
||||
INITRD /boot/initrd
|
||||
INITRD /boot/${config.system.boot.loader.initrdFile}
|
||||
|
||||
# A variant to boot with 'nomodeset'
|
||||
LABEL boot-nomodeset
|
||||
MENU LABEL NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel} (nomodeset)
|
||||
LINUX /boot/bzImage
|
||||
MENU LABEL NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel} (nomodeset)
|
||||
LINUX /boot/${config.system.boot.loader.kernelFile}
|
||||
APPEND init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} nomodeset
|
||||
INITRD /boot/initrd
|
||||
INITRD /boot/${config.system.boot.loader.initrdFile}
|
||||
|
||||
# A variant to boot with 'copytoram'
|
||||
LABEL boot-copytoram
|
||||
MENU LABEL NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel} (copytoram)
|
||||
LINUX /boot/bzImage
|
||||
MENU LABEL NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel} (copytoram)
|
||||
LINUX /boot/${config.system.boot.loader.kernelFile}
|
||||
APPEND init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} copytoram
|
||||
INITRD /boot/initrd
|
||||
INITRD /boot/${config.system.boot.loader.initrdFile}
|
||||
|
||||
# A variant to boot with verbose logging to the console
|
||||
LABEL boot-nomodeset
|
||||
MENU LABEL NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel} (debug)
|
||||
LINUX /boot/bzImage
|
||||
MENU LABEL NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel} (debug)
|
||||
LINUX /boot/${config.system.boot.loader.kernelFile}
|
||||
APPEND init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} loglevel=7
|
||||
INITRD /boot/initrd
|
||||
INITRD /boot/${config.system.boot.loader.initrdFile}
|
||||
'';
|
||||
|
||||
isolinuxMemtest86Entry = ''
|
||||
@ -82,35 +82,35 @@ let
|
||||
mkdir -p $out/loader/entries
|
||||
|
||||
cat << EOF > $out/loader/entries/nixos-iso.conf
|
||||
title NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel}
|
||||
linux /boot/bzImage
|
||||
initrd /boot/initrd
|
||||
title NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel}
|
||||
linux /boot/${config.system.boot.loader.kernelFile}
|
||||
initrd /boot/${config.system.boot.loader.initrdFile}
|
||||
options init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams}
|
||||
EOF
|
||||
|
||||
# A variant to boot with 'nomodeset'
|
||||
cat << EOF > $out/loader/entries/nixos-iso-nomodeset.conf
|
||||
title NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel}
|
||||
title NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel}
|
||||
version nomodeset
|
||||
linux /boot/bzImage
|
||||
initrd /boot/initrd
|
||||
linux /boot/${config.system.boot.loader.kernelFile}
|
||||
initrd /boot/${config.system.boot.loader.initrdFile}
|
||||
options init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} nomodeset
|
||||
EOF
|
||||
|
||||
# A variant to boot with 'copytoram'
|
||||
cat << EOF > $out/loader/entries/nixos-iso-copytoram.conf
|
||||
title NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel}
|
||||
title NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel}
|
||||
version copytoram
|
||||
linux /boot/bzImage
|
||||
initrd /boot/initrd
|
||||
linux /boot/${config.system.boot.loader.kernelFile}
|
||||
initrd /boot/${config.system.boot.loader.initrdFile}
|
||||
options init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} copytoram
|
||||
EOF
|
||||
|
||||
# A variant to boot with verbose logging to the console
|
||||
cat << EOF > $out/loader/entries/nixos-iso-debug.conf
|
||||
title NixOS ${config.system.nixosVersion}${config.isoImage.appendToMenuLabel} (debug)
|
||||
linux /boot/bzImage
|
||||
initrd /boot/initrd
|
||||
title NixOS ${config.system.nixos.label}${config.isoImage.appendToMenuLabel} (debug)
|
||||
linux /boot/${config.system.boot.loader.kernelFile}
|
||||
initrd /boot/${config.system.boot.loader.initrdFile}
|
||||
options init=${config.system.build.toplevel}/init ${toString config.boot.kernelParams} loglevel=7
|
||||
EOF
|
||||
|
||||
@ -127,8 +127,8 @@ let
|
||||
mkdir ./contents && cd ./contents
|
||||
cp -rp "${efiDir}"/* .
|
||||
mkdir ./boot
|
||||
cp -p "${config.boot.kernelPackages.kernel}/bzImage" \
|
||||
"${config.system.build.initialRamdisk}/initrd" ./boot/
|
||||
cp -p "${config.boot.kernelPackages.kernel}/${config.system.boot.loader.kernelFile}" \
|
||||
"${config.system.build.initialRamdisk}/${config.system.boot.loader.initrdFile}" ./boot/
|
||||
touch --date=@0 ./*
|
||||
|
||||
usage_size=$(du -sb --apparent-size . | tr -cd '[:digit:]')
|
||||
@ -346,11 +346,11 @@ in
|
||||
};
|
||||
target = "/isolinux/isolinux.cfg";
|
||||
}
|
||||
{ source = config.boot.kernelPackages.kernel + "/bzImage";
|
||||
target = "/boot/bzImage";
|
||||
{ source = config.boot.kernelPackages.kernel + "/" + config.system.boot.loader.kernelFile;
|
||||
target = "/boot/" + config.system.boot.loader.kernelFile;
|
||||
}
|
||||
{ source = config.system.build.initialRamdisk + "/initrd";
|
||||
target = "/boot/initrd";
|
||||
{ source = config.system.build.initialRamdisk + "/" + config.system.boot.loader.initrdFile;
|
||||
target = "/boot/" + config.system.boot.loader.initrdFile;
|
||||
}
|
||||
{ source = config.system.build.squashfsStore;
|
||||
target = "/nix-store.squashfs";
|
||||
@ -361,7 +361,7 @@ in
|
||||
{ source = config.isoImage.splashImage;
|
||||
target = "/isolinux/background.png";
|
||||
}
|
||||
{ source = pkgs.writeText "version" config.system.nixosVersion;
|
||||
{ source = pkgs.writeText "version" config.system.nixos.label;
|
||||
target = "/version.txt";
|
||||
}
|
||||
] ++ optionals config.isoImage.makeEfiBootable [
|
||||
|
@ -8,7 +8,7 @@ with lib;
|
||||
|
||||
let
|
||||
|
||||
versionFile = pkgs.writeText "nixos-version" config.system.nixosVersion;
|
||||
versionFile = pkgs.writeText "nixos-label" config.system.nixos.label;
|
||||
|
||||
in
|
||||
|
||||
@ -58,8 +58,8 @@ in
|
||||
# Individual files to be included on the CD, outside of the Nix
|
||||
# store on the CD.
|
||||
tarball.contents =
|
||||
[ { source = config.system.build.initialRamdisk + "/initrd";
|
||||
target = "/boot/initrd";
|
||||
[ { source = config.system.build.initialRamdisk + "/" + config.system.boot.loader.initrdFile;
|
||||
target = "/boot/" + config.system.boot.loader.initrdFile;
|
||||
}
|
||||
{ source = versionFile;
|
||||
target = "/nixos-version.txt";
|
||||
|
@ -625,7 +625,7 @@ $bootLoaderConfig
|
||||
# compatible, in order to avoid breaking some software such as database
|
||||
# servers. You should change this only after NixOS release notes say you
|
||||
# should.
|
||||
system.stateVersion = "${\(qw(@nixosRelease@))}"; # Did you read the comment?
|
||||
system.stateVersion = "${\(qw(@release@))}"; # Did you read the comment?
|
||||
|
||||
}
|
||||
EOF
|
||||
|
@ -6,9 +6,9 @@ case "$1" in
|
||||
exit 1
|
||||
;;
|
||||
--hash|--revision)
|
||||
echo "@nixosRevision@"
|
||||
echo "@revision@"
|
||||
;;
|
||||
*)
|
||||
echo "@nixosVersion@ (@nixosCodeName@)"
|
||||
echo "@version@ (@codeName@)"
|
||||
;;
|
||||
esac
|
||||
|
@ -55,7 +55,7 @@ let
|
||||
src = ./nixos-generate-config.pl;
|
||||
path = [ pkgs.btrfs-progs ];
|
||||
perl = "${pkgs.perl}/bin/perl -I${pkgs.perlPackages.FileSlurp}/lib/perl5/site_perl";
|
||||
inherit (config.system) nixosRelease;
|
||||
inherit (config.system.nixos) release;
|
||||
};
|
||||
|
||||
nixos-option = makeProg {
|
||||
@ -66,7 +66,7 @@ let
|
||||
nixos-version = makeProg {
|
||||
name = "nixos-version";
|
||||
src = ./nixos-version.sh;
|
||||
inherit (config.system) nixosVersion nixosCodeName nixosRevision;
|
||||
inherit (config.system.nixos) version codeName revision;
|
||||
};
|
||||
|
||||
in
|
||||
|
72
nixos/modules/misc/label.nix
Normal file
72
nixos/modules/misc/label.nix
Normal file
@ -0,0 +1,72 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.system.nixos;
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
options.system = {
|
||||
|
||||
nixos.label = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
NixOS version name to be used in the names of generated
|
||||
outputs and boot labels.
|
||||
|
||||
If you ever wanted to influence the labels in your GRUB menu,
|
||||
this is the option for you.
|
||||
|
||||
The default is <option>system.nixos.tags</option> separated by
|
||||
"-" + "-" + <envar>NIXOS_LABEL_VERSION</envar> environment
|
||||
variable (defaults to the value of
|
||||
<option>system.nixos.version</option>).
|
||||
|
||||
Can be overriden by setting <envar>NIXOS_LABEL</envar>.
|
||||
|
||||
Useful for not loosing track of configurations built from different
|
||||
nixos branches/revisions, e.g.:
|
||||
|
||||
<screen>
|
||||
#!/bin/sh
|
||||
today=`date +%Y%m%d`
|
||||
branch=`(cd nixpkgs ; git branch 2>/dev/null | sed -n '/^\* / { s|^\* ||; p; }')`
|
||||
revision=`(cd nixpkgs ; git rev-parse HEAD)`
|
||||
export NIXOS_LABEL_VERSION="$today.$branch-''${revision:0:7}"
|
||||
nixos-rebuild switch</screen>
|
||||
'';
|
||||
};
|
||||
|
||||
nixos.tags = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
example = [ "with-xen" ];
|
||||
description = ''
|
||||
Strings to prefix to the default
|
||||
<option>system.nixos.label</option>.
|
||||
|
||||
Useful for not loosing track of configurations built with
|
||||
different options, e.g.:
|
||||
|
||||
<screen>
|
||||
{
|
||||
system.nixos.tags = [ "with-xen" ];
|
||||
virtualisation.xen.enable = true;
|
||||
}
|
||||
</screen>
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = {
|
||||
# This is set here rather than up there so that changing it would
|
||||
# not rebuild the manual
|
||||
system.nixos.label = mkDefault (maybeEnv "NIXOS_LABEL"
|
||||
(concatStringsSep "-" (sort (x: y: x < y) cfg.tags)
|
||||
+ "-" + maybeEnv "NIXOS_LABEL_VERSION" cfg.version));
|
||||
};
|
||||
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.system;
|
||||
cfg = config.system.nixos;
|
||||
|
||||
releaseFile = "${toString pkgs.path}/.version";
|
||||
suffixFile = "${toString pkgs.path}/.version-suffix";
|
||||
@ -16,9 +16,44 @@ in
|
||||
|
||||
options.system = {
|
||||
|
||||
nixos.version = mkOption {
|
||||
internal = true;
|
||||
type = types.str;
|
||||
description = "The full NixOS version (e.g. <literal>16.03.1160.f2d4ee1</literal>).";
|
||||
};
|
||||
|
||||
nixos.release = mkOption {
|
||||
readOnly = true;
|
||||
type = types.str;
|
||||
default = fileContents releaseFile;
|
||||
description = "The NixOS release (e.g. <literal>16.03</literal>).";
|
||||
};
|
||||
|
||||
nixos.versionSuffix = mkOption {
|
||||
internal = true;
|
||||
type = types.str;
|
||||
default = if pathExists suffixFile then fileContents suffixFile else "pre-git";
|
||||
description = "The NixOS version suffix (e.g. <literal>1160.f2d4ee1</literal>).";
|
||||
};
|
||||
|
||||
nixos.revision = mkOption {
|
||||
internal = true;
|
||||
type = types.str;
|
||||
default = if pathIsDirectory gitRepo then commitIdFromGitRepo gitRepo
|
||||
else if pathExists revisionFile then fileContents revisionFile
|
||||
else "master";
|
||||
description = "The Git revision from which this NixOS configuration was built.";
|
||||
};
|
||||
|
||||
nixos.codeName = mkOption {
|
||||
readOnly = true;
|
||||
type = types.str;
|
||||
description = "The NixOS release code name (e.g. <literal>Emu</literal>).";
|
||||
};
|
||||
|
||||
stateVersion = mkOption {
|
||||
type = types.str;
|
||||
default = cfg.nixosRelease;
|
||||
default = cfg.release;
|
||||
description = ''
|
||||
Every once in a while, a new NixOS release may change
|
||||
configuration defaults in a way incompatible with stateful
|
||||
@ -32,49 +67,6 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
nixosLabel = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
Label to be used in the names of generated outputs and boot
|
||||
labels.
|
||||
'';
|
||||
};
|
||||
|
||||
nixosVersion = mkOption {
|
||||
internal = true;
|
||||
type = types.str;
|
||||
description = "The full NixOS version (e.g. <literal>16.03.1160.f2d4ee1</literal>).";
|
||||
};
|
||||
|
||||
nixosRelease = mkOption {
|
||||
readOnly = true;
|
||||
type = types.str;
|
||||
default = fileContents releaseFile;
|
||||
description = "The NixOS release (e.g. <literal>16.03</literal>).";
|
||||
};
|
||||
|
||||
nixosVersionSuffix = mkOption {
|
||||
internal = true;
|
||||
type = types.str;
|
||||
default = if pathExists suffixFile then fileContents suffixFile else "pre-git";
|
||||
description = "The NixOS version suffix (e.g. <literal>1160.f2d4ee1</literal>).";
|
||||
};
|
||||
|
||||
nixosRevision = mkOption {
|
||||
internal = true;
|
||||
type = types.str;
|
||||
default = if pathIsDirectory gitRepo then commitIdFromGitRepo gitRepo
|
||||
else if pathExists revisionFile then fileContents revisionFile
|
||||
else "master";
|
||||
description = "The Git revision from which this NixOS configuration was built.";
|
||||
};
|
||||
|
||||
nixosCodeName = mkOption {
|
||||
readOnly = true;
|
||||
type = types.str;
|
||||
description = "The NixOS release code name (e.g. <literal>Emu</literal>).";
|
||||
};
|
||||
|
||||
defaultChannel = mkOption {
|
||||
internal = true;
|
||||
type = types.str;
|
||||
@ -86,16 +78,15 @@ in
|
||||
|
||||
config = {
|
||||
|
||||
system = {
|
||||
system.nixos = {
|
||||
# These defaults are set here rather than up there so that
|
||||
# changing them would not rebuild the manual
|
||||
nixosLabel = mkDefault cfg.nixosVersion;
|
||||
nixosVersion = mkDefault (cfg.nixosRelease + cfg.nixosVersionSuffix);
|
||||
nixosRevision = mkIf (pathIsDirectory gitRepo) (mkDefault gitCommitId);
|
||||
nixosVersionSuffix = mkIf (pathIsDirectory gitRepo) (mkDefault (".git." + gitCommitId));
|
||||
version = mkDefault (cfg.release + cfg.versionSuffix);
|
||||
revision = mkIf (pathIsDirectory gitRepo) (mkDefault gitCommitId);
|
||||
versionSuffix = mkIf (pathIsDirectory gitRepo) (mkDefault (".git." + gitCommitId));
|
||||
|
||||
# Note: code names must only increase in alphabetical order.
|
||||
nixosCodeName = "Impala";
|
||||
codeName = "Impala";
|
||||
};
|
||||
|
||||
# Generate /etc/os-release. See
|
||||
@ -105,10 +96,10 @@ in
|
||||
''
|
||||
NAME=NixOS
|
||||
ID=nixos
|
||||
VERSION="${config.system.nixosVersion} (${config.system.nixosCodeName})"
|
||||
VERSION_CODENAME=${toLower config.system.nixosCodeName}
|
||||
VERSION_ID="${config.system.nixosVersion}"
|
||||
PRETTY_NAME="NixOS ${config.system.nixosVersion} (${config.system.nixosCodeName})"
|
||||
VERSION="${cfg.version} (${cfg.codeName})"
|
||||
VERSION_CODENAME=${toLower cfg.codeName}
|
||||
VERSION_ID="${cfg.version}"
|
||||
PRETTY_NAME="NixOS ${cfg.version} (${cfg.codeName})"
|
||||
HOME_URL="https://nixos.org/"
|
||||
SUPPORT_URL="https://nixos.org/nixos/support.html"
|
||||
BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues"
|
||||
|
@ -60,6 +60,7 @@
|
||||
./misc/extra-arguments.nix
|
||||
./misc/ids.nix
|
||||
./misc/lib.nix
|
||||
./misc/label.nix
|
||||
./misc/locate.nix
|
||||
./misc/meta.nix
|
||||
./misc/nixpkgs.nix
|
||||
@ -156,6 +157,7 @@
|
||||
./services/backup/almir.nix
|
||||
./services/backup/bacula.nix
|
||||
./services/backup/crashplan.nix
|
||||
./services/backup/crashplan-small-business.nix
|
||||
./services/backup/mysql-backup.nix
|
||||
./services/backup/postgresql-backup.nix
|
||||
./services/backup/rsnapshot.nix
|
||||
@ -509,6 +511,7 @@
|
||||
./services/networking/ngircd.nix
|
||||
./services/networking/nghttpx/default.nix
|
||||
./services/networking/nix-serve.nix
|
||||
./services/networking/nixops-dns.nix
|
||||
./services/networking/nntp-proxy.nix
|
||||
./services/networking/nsd.nix
|
||||
./services/networking/ntopng.nix
|
||||
|
@ -189,6 +189,14 @@ with lib;
|
||||
# Profile splitting
|
||||
(mkRenamedOptionModule [ "virtualization" "growPartition" ] [ "boot" "growPartition" ])
|
||||
|
||||
# misc/version.nix
|
||||
(mkRenamedOptionModule [ "config" "system" "nixosVersion" ] [ "config" "system" "nixos" "version" ])
|
||||
(mkRenamedOptionModule [ "config" "system" "nixosRelease" ] [ "config" "system" "nixos" "release" ])
|
||||
(mkRenamedOptionModule [ "config" "system" "nixosVersionSuffix" ] [ "config" "system" "nixos" "versionSuffix" ])
|
||||
(mkRenamedOptionModule [ "config" "system" "nixosRevision" ] [ "config" "system" "nixos" "revision" ])
|
||||
(mkRenamedOptionModule [ "config" "system" "nixosCodeName" ] [ "config" "system" "nixos" "codeName" ])
|
||||
(mkRenamedOptionModule [ "config" "system" "nixosLabel" ] [ "config" "system" "nixos" "label" ])
|
||||
|
||||
# Options that are obsolete and have no replacement.
|
||||
(mkRemovedOptionModule [ "boot" "initrd" "luks" "enable" ] "")
|
||||
(mkRemovedOptionModule [ "programs" "bash" "enable" ] "")
|
||||
|
89
nixos/modules/services/backup/crashplan-small-business.nix
Normal file
89
nixos/modules/services/backup/crashplan-small-business.nix
Normal file
@ -0,0 +1,89 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
cfg = config.services.crashplansb;
|
||||
crashplansb = pkgs.crashplansb.override { maxRam = cfg.maxRam; };
|
||||
varDir = "/var/lib/crashplan";
|
||||
in
|
||||
|
||||
with lib;
|
||||
|
||||
{
|
||||
options = {
|
||||
services.crashplansb = {
|
||||
enable = mkOption {
|
||||
default = false;
|
||||
type = types.bool;
|
||||
description = ''
|
||||
Starts crashplan for small business background service.
|
||||
'';
|
||||
};
|
||||
maxRam = mkOption {
|
||||
default = "1024m";
|
||||
example = "2G";
|
||||
type = types.str;
|
||||
description = ''
|
||||
Maximum amount of that the crashplan engine should use.
|
||||
'';
|
||||
};
|
||||
openPorts = mkOption {
|
||||
description = "Open ports in the firewall for crashplan.";
|
||||
default = true;
|
||||
type = types.bool;
|
||||
};
|
||||
ports = mkOption {
|
||||
# https://support.code42.com/Administrator/6/Planning_and_installing/TCP_and_UDP_ports_used_by_the_Code42_platform
|
||||
# used ports can also be checked in the desktop app console using the command connection.info
|
||||
description = "which ports to open.";
|
||||
default = [ 4242 4243 4244 4247 ];
|
||||
type = types.listOf types.int;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
environment.systemPackages = [ crashplansb ];
|
||||
networking.firewall.allowedTCPPorts = mkIf cfg.openPorts cfg.ports;
|
||||
|
||||
systemd.services.crashplansb = {
|
||||
description = "CrashPlan Backup Engine";
|
||||
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" "local-fs.target" ];
|
||||
|
||||
preStart = ''
|
||||
ensureDir() {
|
||||
dir=$1
|
||||
mode=$2
|
||||
|
||||
if ! test -e $dir; then
|
||||
${pkgs.coreutils}/bin/mkdir -m $mode -p $dir
|
||||
elif [ "$(${pkgs.coreutils}/bin/stat -c %a $dir)" != "$mode" ]; then
|
||||
${pkgs.coreutils}/bin/chmod $mode $dir
|
||||
fi
|
||||
}
|
||||
|
||||
ensureDir ${crashplansb.vardir} 755
|
||||
ensureDir ${crashplansb.vardir}/conf 700
|
||||
ensureDir ${crashplansb.manifestdir} 700
|
||||
ensureDir ${crashplansb.vardir}/cache 700
|
||||
ensureDir ${crashplansb.vardir}/backupArchives 700
|
||||
ensureDir ${crashplansb.vardir}/log 777
|
||||
cp -avn ${crashplansb}/conf.template/* ${crashplansb.vardir}/conf
|
||||
#for x in bin install.vars lang lib libc42archive64.so libc42core.so libjniwrap64.so libjtux64.so libleveldb64.so libnetty-tcnative.so share upgrade; do
|
||||
# rm -f ${crashplansb.vardir}/$x;
|
||||
# ln -sf ${crashplansb}/$x ${crashplansb.vardir}/$x;
|
||||
#done
|
||||
'';
|
||||
|
||||
serviceConfig = {
|
||||
Type = "forking";
|
||||
EnvironmentFile = "${crashplansb}/bin/run.conf";
|
||||
ExecStart = "${crashplansb}/bin/CrashPlanEngine start";
|
||||
ExecStop = "${crashplansb}/bin/CrashPlanEngine stop";
|
||||
PIDFile = "${crashplansb.vardir}/CrashPlanEngine.pid";
|
||||
WorkingDirectory = crashplansb;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
@ -4,6 +4,31 @@ with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.buildkite-agent;
|
||||
|
||||
mkHookOption = { name, description, example ? null }: {
|
||||
inherit name;
|
||||
value = mkOption {
|
||||
default = null;
|
||||
inherit description;
|
||||
type = types.nullOr types.lines;
|
||||
} // (if example == null then {} else { inherit example; });
|
||||
};
|
||||
mkHookOptions = hooks: listToAttrs (map mkHookOption hooks);
|
||||
|
||||
hooksDir = let
|
||||
mkHookEntry = name: value: ''
|
||||
cat > $out/${name} <<EOF
|
||||
#! ${pkgs.stdenv.shell}
|
||||
set -e
|
||||
${value}
|
||||
EOF
|
||||
chmod 755 $out/${name}
|
||||
'';
|
||||
in pkgs.runCommand "buildkite-agent-hooks" {} ''
|
||||
mkdir $out
|
||||
${concatStringsSep "\n" (mapAttrsToList mkHookEntry (filterAttrs (n: v: v != null) cfg.hooks))}
|
||||
'';
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
@ -43,25 +68,28 @@ in
|
||||
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
default = "%hostname-%n";
|
||||
description = ''
|
||||
The name of the agent.
|
||||
'';
|
||||
};
|
||||
|
||||
hooksPath = mkOption {
|
||||
type = types.path;
|
||||
default = "${pkgs.buildkite-agent}/share/hooks";
|
||||
defaultText = "${pkgs.buildkite-agent}/share/hooks";
|
||||
description = ''
|
||||
Path to the directory storing the hooks.
|
||||
'';
|
||||
};
|
||||
|
||||
meta-data = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
example = "queue=default,docker=true,ruby2=true";
|
||||
description = ''
|
||||
Meta data for the agent.
|
||||
Meta data for the agent. This is a comma-separated list of
|
||||
<code>key=value</code> pairs.
|
||||
'';
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
example = "debug=true";
|
||||
description = ''
|
||||
Extra lines to be added verbatim to the configuration file.
|
||||
'';
|
||||
};
|
||||
|
||||
@ -85,6 +113,74 @@ in
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
hooks = mkHookOptions [
|
||||
{ name = "checkout";
|
||||
description = ''
|
||||
The `checkout` hook script will replace the default checkout routine of the
|
||||
bootstrap.sh script. You can use this hook to do your own SCM checkout
|
||||
behaviour
|
||||
''; }
|
||||
{ name = "command";
|
||||
description = ''
|
||||
The `command` hook script will replace the default implementation of running
|
||||
the build command.
|
||||
''; }
|
||||
{ name = "environment";
|
||||
description = ''
|
||||
The `environment` hook will run before all other commands, and can be used
|
||||
to set up secrets, data, etc. Anything exported in hooks will be available
|
||||
to the build script.
|
||||
|
||||
Note: the contents of this file will be copied to the world-readable
|
||||
Nix store.
|
||||
'';
|
||||
example = ''
|
||||
export SECRET_VAR=`head -1 /run/keys/secret`
|
||||
''; }
|
||||
{ name = "post-artifact";
|
||||
description = ''
|
||||
The `post-artifact` hook will run just after artifacts are uploaded
|
||||
''; }
|
||||
{ name = "post-checkout";
|
||||
description = ''
|
||||
The `post-checkout` hook will run after the bootstrap script has checked out
|
||||
your projects source code.
|
||||
''; }
|
||||
{ name = "post-command";
|
||||
description = ''
|
||||
The `post-command` hook will run after the bootstrap script has run your
|
||||
build commands
|
||||
''; }
|
||||
{ name = "pre-artifact";
|
||||
description = ''
|
||||
The `pre-artifact` hook will run just before artifacts are uploaded
|
||||
''; }
|
||||
{ name = "pre-checkout";
|
||||
description = ''
|
||||
The `pre-checkout` hook will run just before your projects source code is
|
||||
checked out from your SCM provider
|
||||
''; }
|
||||
{ name = "pre-command";
|
||||
description = ''
|
||||
The `pre-command` hook will run just before your build command runs
|
||||
''; }
|
||||
{ name = "pre-exit";
|
||||
description = ''
|
||||
The `pre-exit` hook will run just before your build job finishes
|
||||
''; }
|
||||
];
|
||||
|
||||
hooksPath = mkOption {
|
||||
type = types.path;
|
||||
default = hooksDir;
|
||||
defaultText = "generated from services.buildkite-agent.hooks";
|
||||
description = ''
|
||||
Path to the directory storing the hooks.
|
||||
Consider using <option>services.buildkite-agent.hooks.<name></option>
|
||||
instead.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -100,13 +196,10 @@ in
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
|
||||
systemd.services.buildkite-agent =
|
||||
let copy = x: target: perms:
|
||||
"cp -f ${x} ${target}; ${pkgs.coreutils}/bin/chmod ${toString perms} ${target}; ";
|
||||
in
|
||||
{ description = "Buildkite Agent";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" ];
|
||||
path = cfg.runtimePackages;
|
||||
path = cfg.runtimePackages ++ [ pkgs.coreutils ];
|
||||
environment = config.networking.proxy.envVars // {
|
||||
HOME = cfg.dataDir;
|
||||
NIX_REMOTE = "daemon";
|
||||
@ -114,10 +207,14 @@ in
|
||||
|
||||
## NB: maximum care is taken so that secrets (ssh keys and the CI token)
|
||||
## don't end up in the Nix store.
|
||||
preStart = ''
|
||||
${pkgs.coreutils}/bin/mkdir -m 0700 -p ${cfg.dataDir}/.ssh
|
||||
${copy (toString cfg.openssh.privateKeyPath) "${cfg.dataDir}/.ssh/id_rsa" 600}
|
||||
${copy (toString cfg.openssh.publicKeyPath) "${cfg.dataDir}/.ssh/id_rsa.pub" 600}
|
||||
preStart = let
|
||||
sshDir = "${cfg.dataDir}/.ssh";
|
||||
in
|
||||
''
|
||||
mkdir -m 0700 -p "${sshDir}"
|
||||
cp -f "${toString cfg.openssh.privateKeyPath}" "${sshDir}/id_rsa"
|
||||
cp -f "${toString cfg.openssh.publicKeyPath}" "${sshDir}/id_rsa.pub"
|
||||
chmod 600 "${sshDir}"/id_rsa*
|
||||
|
||||
cat > "${cfg.dataDir}/buildkite-agent.cfg" <<EOF
|
||||
token="$(cat ${toString cfg.tokenPath})"
|
||||
@ -125,7 +222,7 @@ in
|
||||
meta-data="${cfg.meta-data}"
|
||||
build-path="${cfg.dataDir}/builds"
|
||||
hooks-path="${cfg.hooksPath}"
|
||||
bootstrap-script="${pkgs.buildkite-agent}/share/bootstrap.sh"
|
||||
${cfg.extraConfig}
|
||||
EOF
|
||||
'';
|
||||
|
||||
@ -137,6 +234,15 @@ in
|
||||
TimeoutSec = 10;
|
||||
};
|
||||
};
|
||||
|
||||
assertions = [
|
||||
{ assertion = cfg.hooksPath == hooksDir || all isNull (attrValues cfg.hooks);
|
||||
message = ''
|
||||
Options `services.buildkite-agent.hooksPath' and
|
||||
`services.buildkite-agent.hooks.<name>' are mutually exclusive.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
imports = [
|
||||
(mkRenamedOptionModule [ "services" "buildkite-agent" "token" ] [ "services" "buildkite-agent" "tokenPath" ])
|
||||
|
@ -16,10 +16,10 @@ let
|
||||
It isn't perfect, but it seems to cover a vast majority of use cases.
|
||||
Caveat: even if the package is reached by a different means,
|
||||
the path above will be shown and not e.g. `${config.services.foo.package}`. */
|
||||
manual = import ../../../doc/manual {
|
||||
manual = import ../../../doc/manual rec {
|
||||
inherit pkgs config;
|
||||
version = config.system.nixosRelease;
|
||||
revision = "release-${config.system.nixosRelease}";
|
||||
version = config.system.nixos.release;
|
||||
revision = "release-${version}";
|
||||
options =
|
||||
let
|
||||
scrubbedEval = evalModules {
|
||||
|
@ -12,7 +12,7 @@ let
|
||||
|
||||
case "$1" in
|
||||
-i) echo "nixos";;
|
||||
-r) echo "${config.system.nixosVersion}";;
|
||||
-r) echo "${config.system.nixos.version}";;
|
||||
esac
|
||||
'';
|
||||
in {
|
||||
|
@ -16,7 +16,7 @@ let
|
||||
# Don't start dhcpcd on explicitly configured interfaces or on
|
||||
# interfaces that are part of a bridge, bond or sit device.
|
||||
ignoredInterfaces =
|
||||
map (i: i.name) (filter (i: if i.useDHCP != null then !i.useDHCP else i.ip4 != [ ] || i.ipAddress != null) interfaces)
|
||||
map (i: i.name) (filter (i: if i.useDHCP != null then !i.useDHCP else i.ipv4.addresses != [ ]) interfaces)
|
||||
++ mapAttrsToList (i: _: i) config.networking.sits
|
||||
++ concatLists (attrValues (mapAttrs (n: v: v.interfaces) config.networking.bridges))
|
||||
++ concatLists (attrValues (mapAttrs (n: v: v.interfaces) config.networking.vswitches))
|
||||
@ -156,11 +156,11 @@ in
|
||||
systemd.services.dhcpcd = let
|
||||
cfgN = config.networking;
|
||||
hasDefaultGatewaySet = (cfgN.defaultGateway != null && cfgN.defaultGateway.address != "")
|
||||
|| (cfgN.defaultGateway6 != null && cfgN.defaultGateway6.address != "");
|
||||
&& (!cfgN.enableIPv6 || (cfgN.defaultGateway6 != null && cfgN.defaultGateway6.address != ""));
|
||||
in
|
||||
{ description = "DHCP Client";
|
||||
|
||||
wantedBy = optional (!hasDefaultGatewaySet) "network-online.target";
|
||||
wantedBy = [ "multi-user.target" ] ++ optional (!hasDefaultGatewaySet) "network-online.target";
|
||||
after = [ "network.target" ];
|
||||
wants = [ "network.target" ];
|
||||
|
||||
|
@ -53,12 +53,36 @@ let
|
||||
-i ${cfg.externalInterface} -p ${fwd.proto} \
|
||||
--dport ${builtins.toString fwd.sourcePort} \
|
||||
-j DNAT --to-destination ${fwd.destination}
|
||||
|
||||
${concatMapStrings (loopbackip:
|
||||
let
|
||||
m = builtins.match "([0-9.]+):([0-9-]+)" fwd.destination;
|
||||
destinationIP = if (m == null) then throw "bad ip:ports `${fwd.destination}'" else elemAt m 0;
|
||||
destinationPorts = if (m == null) then throw "bad ip:ports `${fwd.destination}'" else elemAt m 1;
|
||||
in ''
|
||||
# Allow connections to ${loopbackip}:${toString fwd.sourcePort} from the host itself
|
||||
iptables -w -t nat -A OUTPUT \
|
||||
-d ${loopbackip} -p ${fwd.proto} \
|
||||
--dport ${builtins.toString fwd.sourcePort} \
|
||||
-j DNAT --to-destination ${fwd.destination}
|
||||
|
||||
# Allow connections to ${loopbackip}:${toString fwd.sourcePort} from other hosts behind NAT
|
||||
iptables -w -t nat -A nixos-nat-pre \
|
||||
-d ${loopbackip} -p ${fwd.proto} \
|
||||
--dport ${builtins.toString fwd.sourcePort} \
|
||||
-j DNAT --to-destination ${fwd.destination}
|
||||
|
||||
iptables -w -t nat -A nixos-nat-post \
|
||||
-d ${destinationIP} -p ${fwd.proto} \
|
||||
--dport ${destinationPorts} \
|
||||
-j SNAT --to-source ${loopbackip}
|
||||
'') fwd.loopbackIPs}
|
||||
'') cfg.forwardPorts}
|
||||
|
||||
${optionalString (cfg.dmzHost != null) ''
|
||||
iptables -w -t nat -A nixos-nat-pre \
|
||||
-i ${cfg.externalInterface} -j DNAT \
|
||||
--to-destination ${cfg.dmzHost}
|
||||
--to-destination ${cfg.dmzHost}
|
||||
''}
|
||||
|
||||
${cfg.extraCommands}
|
||||
@ -152,6 +176,13 @@ in
|
||||
example = "udp";
|
||||
description = "Protocol of forwarded connection";
|
||||
};
|
||||
|
||||
loopbackIPs = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
example = literalExample ''[ "55.1.2.3" ]'';
|
||||
description = "Public IPs for NAT reflection; for connections to `loopbackip:sourcePort' from the host itself and from other hosts behind NAT";
|
||||
};
|
||||
};
|
||||
});
|
||||
default = [];
|
||||
|
79
nixos/modules/services/networking/nixops-dns.nix
Normal file
79
nixos/modules/services/networking/nixops-dns.nix
Normal file
@ -0,0 +1,79 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
pkg = pkgs.nixops-dns;
|
||||
cfg = config.services.nixops-dns;
|
||||
in
|
||||
|
||||
{
|
||||
options = {
|
||||
services.nixops-dns = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to enable the nixops-dns resolution
|
||||
of NixOps virtual machines via dnsmasq and fake domain name.
|
||||
'';
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
The user the nixops-dns daemon should run as.
|
||||
This should be the user, which is also used for nixops and
|
||||
have the .nixops directory in its home.
|
||||
'';
|
||||
};
|
||||
|
||||
domain = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
Fake domain name to resolve to NixOps virtual machines.
|
||||
|
||||
For example "ops" will resolve "vm.ops".
|
||||
'';
|
||||
example = "ops";
|
||||
default = "ops";
|
||||
};
|
||||
|
||||
dnsmasq = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Enable dnsmasq forwarding to nixops-dns. This allows to use
|
||||
nixops-dns for `services.nixops-dns.domain` resolution
|
||||
while forwarding the rest of the queries to original resolvers.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.services.nixops-dns = {
|
||||
description = "nixops-dns: DNS server for resolving NixOps machines";
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
User = cfg.user;
|
||||
ExecStart="${pkg}/bin/nixops-dns --domain=.${cfg.domain}";
|
||||
};
|
||||
};
|
||||
|
||||
services.dnsmasq = mkIf cfg.dnsmasq {
|
||||
enable = true;
|
||||
resolveLocalQueries = true;
|
||||
servers = [
|
||||
"/${cfg.domain}/127.0.0.1#5300"
|
||||
];
|
||||
extraConfig = ''
|
||||
bind-interfaces
|
||||
listen-address=127.0.0.1
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
}
|
@ -35,10 +35,9 @@ in {
|
||||
config = mkIf cfg.enable {
|
||||
boot.kernelModules = [ "dummy" ];
|
||||
|
||||
networking.interfaces.dummy0 = {
|
||||
ipAddress = "169.254.169.254";
|
||||
prefixLength = 32;
|
||||
};
|
||||
networking.interfaces.dummy0.ipv4.addresses = [
|
||||
{ address = "169.254.169.254"; prefixLength = 32; }
|
||||
];
|
||||
|
||||
systemd.services.hologram-agent = {
|
||||
description = "Provide EC2 instance credentials to machines outside of EC2";
|
||||
|
@ -64,8 +64,8 @@ in
|
||||
|
||||
config = {
|
||||
# Note: this is set here rather than up there so that changing
|
||||
# nixosLabel would not rebuild manual pages
|
||||
services.mingetty.greetingLine = mkDefault ''<<< Welcome to NixOS ${config.system.nixosLabel} (\m) - \l >>>'';
|
||||
# nixos.label would not rebuild manual pages
|
||||
services.mingetty.greetingLine = mkDefault ''<<< Welcome to NixOS ${config.system.nixos.label} (\m) - \l >>>'';
|
||||
|
||||
systemd.services."getty@" =
|
||||
{ serviceConfig.ExecStart = [
|
||||
|
@ -1,9 +1,13 @@
|
||||
{ config, lib, pkgs, ...}:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.varnish;
|
||||
|
||||
commandLine = "-f ${pkgs.writeText "default.vcl" cfg.config}" +
|
||||
optionalString (cfg.extraModules != []) " -p vmod_path='${makeSearchPathOutput "lib" "lib/varnish/vmods" ([pkgs.varnish] ++ cfg.extraModules)}' -r vmod_path";
|
||||
in
|
||||
with lib;
|
||||
{
|
||||
options = {
|
||||
services.varnish = {
|
||||
@ -69,8 +73,7 @@ with lib;
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
PermissionsStartOnly = true;
|
||||
ExecStart = "${pkgs.varnish}/sbin/varnishd -a ${cfg.http_address} -f ${pkgs.writeText "default.vcl" cfg.config} -n ${cfg.stateDir} -F ${cfg.extraCommandLine}"
|
||||
+ optionalString (cfg.extraModules != []) " -p vmod_path='${makeSearchPathOutput "lib" "lib/varnish/vmods" ([pkgs.varnish] ++ cfg.extraModules)}' -r vmod_path";
|
||||
ExecStart = "${pkgs.varnish}/sbin/varnishd -a ${cfg.http_address} -n ${cfg.stateDir} -F ${cfg.extraCommandLine} ${commandLine}";
|
||||
Restart = "always";
|
||||
RestartSec = "5s";
|
||||
User = "varnish";
|
||||
@ -83,6 +86,14 @@ with lib;
|
||||
|
||||
environment.systemPackages = [ pkgs.varnish ];
|
||||
|
||||
# check .vcl syntax at compile time (e.g. before nixops deployment)
|
||||
system.extraDependencies = [
|
||||
(pkgs.stdenv.mkDerivation {
|
||||
name = "check-varnish-syntax";
|
||||
buildCommand = "${pkgs.varnish}/sbin/varnishd -C ${commandLine} 2> $out";
|
||||
})
|
||||
];
|
||||
|
||||
users.extraUsers.varnish = {
|
||||
group = "varnish";
|
||||
uid = config.ids.uids.varnish;
|
||||
|
@ -30,6 +30,8 @@ let
|
||||
let
|
||||
kernelPath = "${config.boot.kernelPackages.kernel}/" +
|
||||
"${config.system.boot.loader.kernelFile}";
|
||||
initrdPath = "${config.system.build.initialRamdisk}/" +
|
||||
"${config.system.boot.loader.initrdFile}";
|
||||
in ''
|
||||
mkdir $out
|
||||
|
||||
@ -50,7 +52,7 @@ let
|
||||
|
||||
echo -n "$kernelParams" > $out/kernel-params
|
||||
|
||||
ln -s ${config.system.build.initialRamdisk}/initrd $out/initrd
|
||||
ln -s ${initrdPath} $out/initrd
|
||||
|
||||
ln -s ${config.system.build.initialRamdiskSecretAppender}/bin/append-initrd-secrets $out
|
||||
|
||||
@ -106,7 +108,7 @@ let
|
||||
if [] == failed then pkgs.stdenvNoCC.mkDerivation {
|
||||
name = let hn = config.networking.hostName;
|
||||
nn = if (hn != "") then hn else "unnamed";
|
||||
in "nixos-system-${nn}-${config.system.nixosLabel}";
|
||||
in "nixos-system-${nn}-${config.system.nixos.label}";
|
||||
preferLocalBuild = true;
|
||||
allowSubstitutes = false;
|
||||
buildCommand = systemBuilder;
|
||||
@ -120,7 +122,7 @@ let
|
||||
config.system.build.installBootLoader
|
||||
or "echo 'Warning: do not know how to make this configuration bootable; please enable a boot loader.' 1>&2; true";
|
||||
activationScript = config.system.activationScripts.script;
|
||||
nixosLabel = config.system.nixosLabel;
|
||||
nixosLabel = config.system.nixos.label;
|
||||
|
||||
configurationName = config.boot.loader.grub.configurationName;
|
||||
|
||||
@ -179,6 +181,15 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
system.boot.loader.initrdFile = mkOption {
|
||||
internal = true;
|
||||
default = "initrd";
|
||||
type = types.str;
|
||||
description = ''
|
||||
Name of the initrd file to be passed to the bootloader.
|
||||
'';
|
||||
};
|
||||
|
||||
system.copySystemConfiguration = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
|
@ -10,7 +10,7 @@ let
|
||||
|
||||
breezePlymouth = pkgs.breeze-plymouth.override {
|
||||
nixosBranding = true;
|
||||
nixosVersion = config.system.nixosRelease;
|
||||
nixosVersion = config.system.nixos.release;
|
||||
};
|
||||
|
||||
themesEnv = pkgs.buildEnv {
|
||||
|
@ -20,14 +20,8 @@ let
|
||||
"sys-subsystem-net-devices-${escapeSystemdPath interface}.device";
|
||||
|
||||
interfaceIps = i:
|
||||
i.ip4 ++ optionals cfg.enableIPv6 i.ip6
|
||||
++ optional (i.ipAddress != null) {
|
||||
address = i.ipAddress;
|
||||
prefixLength = i.prefixLength;
|
||||
} ++ optional (cfg.enableIPv6 && i.ipv6Address != null) {
|
||||
address = i.ipv6Address;
|
||||
prefixLength = i.ipv6PrefixLength;
|
||||
};
|
||||
i.ipv4.addresses
|
||||
++ optionals cfg.enableIPv6 i.ipv6.addresses;
|
||||
|
||||
destroyBond = i: ''
|
||||
while true; do
|
||||
@ -80,7 +74,7 @@ let
|
||||
else optional (dev != null && dev != "lo" && !config.boot.isContainer) (subsystemDevice dev);
|
||||
|
||||
hasDefaultGatewaySet = (cfg.defaultGateway != null && cfg.defaultGateway.address != "")
|
||||
|| (cfg.defaultGateway6 != null && cfg.defaultGateway6.address != "");
|
||||
|| (cfg.enableIPv6 && cfg.defaultGateway6 != null && cfg.defaultGateway6.address != "");
|
||||
|
||||
networkLocalCommands = {
|
||||
after = [ "network-setup.service" ];
|
||||
@ -185,33 +179,58 @@ let
|
||||
path = [ pkgs.iproute ];
|
||||
script =
|
||||
''
|
||||
# FIXME: shouldn't this be done in network-link?
|
||||
echo "bringing up interface..."
|
||||
ip link set "${i.name}" up
|
||||
|
||||
state="/run/nixos/network/addresses/${i.name}"
|
||||
|
||||
mkdir -p $(dirname "$state")
|
||||
|
||||
'' + flip concatMapStrings (ips) (ip:
|
||||
let
|
||||
address = "${ip.address}/${toString ip.prefixLength}";
|
||||
in
|
||||
''
|
||||
echo "${address}" >> $state
|
||||
if out=$(ip addr add "${address}" dev "${i.name}" 2>&1); then
|
||||
echo "added ip ${address}"
|
||||
elif ! echo "$out" | grep "File exists" >/dev/null 2>&1; then
|
||||
echo "failed to add ${address}"
|
||||
exit 1
|
||||
fi
|
||||
'');
|
||||
${flip concatMapStrings ips (ip:
|
||||
let
|
||||
cidr = "${ip.address}/${toString ip.prefixLength}";
|
||||
in
|
||||
''
|
||||
echo "${cidr}" >> $state
|
||||
echo -n "adding address ${cidr}... "
|
||||
if out=$(ip addr add "${cidr}" dev "${i.name}" 2>&1); then
|
||||
echo "done"
|
||||
elif ! echo "$out" | grep "File exists" >/dev/null 2>&1; then
|
||||
echo "failed"
|
||||
exit 1
|
||||
fi
|
||||
''
|
||||
)}
|
||||
|
||||
state="/run/nixos/network/routes/${i.name}"
|
||||
mkdir -p $(dirname "$state")
|
||||
|
||||
${flip concatMapStrings (i.ipv4.routes ++ i.ipv6.routes) (route:
|
||||
let
|
||||
cidr = "${route.address}/${toString route.prefixLength}";
|
||||
via = optionalString (route.via != null) ''via "${route.via}"'';
|
||||
options = concatStrings (mapAttrsToList (name: val: "${name} ${val} ") route.options);
|
||||
in
|
||||
''
|
||||
echo "${cidr}" >> $state
|
||||
echo -n "adding route ${cidr}... "
|
||||
if out=$(ip route add "${cidr}" ${options} ${via} dev "${i.name}" 2>&1); then
|
||||
echo "done"
|
||||
elif ! echo "$out" | grep "File exists" >/dev/null 2>&1; then
|
||||
echo "failed"
|
||||
exit 1
|
||||
fi
|
||||
''
|
||||
)}
|
||||
'';
|
||||
preStop = ''
|
||||
state="/run/nixos/network/routes/${i.name}"
|
||||
while read cidr; do
|
||||
echo -n "deleting route $cidr... "
|
||||
ip route del "$cidr" dev "${i.name}" >/dev/null 2>&1 && echo "done" || echo "failed"
|
||||
done < "$state"
|
||||
rm -f "$state"
|
||||
|
||||
state="/run/nixos/network/addresses/${i.name}"
|
||||
while read address; do
|
||||
echo -n "deleting $address..."
|
||||
ip addr del "$address" dev "${i.name}" >/dev/null 2>&1 || echo -n " Failed"
|
||||
echo ""
|
||||
while read cidr; do
|
||||
echo -n "deleting address $cidr... "
|
||||
ip addr del "$cidr" dev "${i.name}" >/dev/null 2>&1 && echo "done" || echo "failed"
|
||||
done < "$state"
|
||||
rm -f "$state"
|
||||
'';
|
||||
|
@ -9,14 +9,8 @@ let
|
||||
interfaces = attrValues cfg.interfaces;
|
||||
|
||||
interfaceIps = i:
|
||||
i.ip4 ++ optionals cfg.enableIPv6 i.ip6
|
||||
++ optional (i.ipAddress != null) {
|
||||
address = i.ipAddress;
|
||||
prefixLength = i.prefixLength;
|
||||
} ++ optional (cfg.enableIPv6 && i.ipv6Address != null) {
|
||||
address = i.ipv6Address;
|
||||
prefixLength = i.ipv6PrefixLength;
|
||||
};
|
||||
i.ipv4.addresses
|
||||
++ optionals cfg.enableIPv6 i.ipv6.addresses;
|
||||
|
||||
dhcpStr = useDHCP: if useDHCP == true || useDHCP == null then "both" else "none";
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ config, lib, pkgs, utils, stdenv, ... }:
|
||||
{ config, options, lib, pkgs, utils, stdenv, ... }:
|
||||
|
||||
with lib;
|
||||
with utils;
|
||||
@ -101,7 +101,7 @@ let
|
||||
address = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
IPv${toString v} address of the interface. Leave empty to configure the
|
||||
IPv${toString v} address of the interface. Leave empty to configure the
|
||||
interface using DHCP.
|
||||
'';
|
||||
};
|
||||
@ -116,6 +116,40 @@ let
|
||||
};
|
||||
};
|
||||
|
||||
routeOpts = v:
|
||||
{ options = {
|
||||
address = mkOption {
|
||||
type = types.str;
|
||||
description = "IPv${toString v} address of the network.";
|
||||
};
|
||||
|
||||
prefixLength = mkOption {
|
||||
type = types.addCheck types.int (n: n >= 0 && n <= (if v == 4 then 32 else 128));
|
||||
description = ''
|
||||
Subnet mask of the network, specified as the number of
|
||||
bits in the prefix (<literal>${if v == 4 then "24" else "64"}</literal>).
|
||||
'';
|
||||
};
|
||||
|
||||
via = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "IPv${toString v} address of the next hop.";
|
||||
};
|
||||
|
||||
options = mkOption {
|
||||
type = types.attrsOf types.str;
|
||||
default = { };
|
||||
example = { mtu = "1492"; window = "524288"; };
|
||||
description = ''
|
||||
Other route options. See the symbol <literal>OPTION</literal>
|
||||
in the <literal>ip-route(8)</literal> manual page for the details.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
gatewayCoerce = address: { inherit address; };
|
||||
|
||||
gatewayOpts = { ... }: {
|
||||
@ -148,7 +182,6 @@ let
|
||||
interfaceOpts = { name, ... }: {
|
||||
|
||||
options = {
|
||||
|
||||
name = mkOption {
|
||||
example = "eth0";
|
||||
type = types.str;
|
||||
@ -175,7 +208,7 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
ip4 = mkOption {
|
||||
ipv4.addresses = mkOption {
|
||||
default = [ ];
|
||||
example = [
|
||||
{ address = "10.0.0.1"; prefixLength = 16; }
|
||||
@ -187,7 +220,7 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
ip6 = mkOption {
|
||||
ipv6.addresses = mkOption {
|
||||
default = [ ];
|
||||
example = [
|
||||
{ address = "fdfd:b3f0:482::1"; prefixLength = 48; }
|
||||
@ -199,50 +232,27 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
ipAddress = mkOption {
|
||||
default = null;
|
||||
example = "10.0.0.1";
|
||||
type = types.nullOr types.str;
|
||||
ipv4.routes = mkOption {
|
||||
default = [];
|
||||
example = [
|
||||
{ address = "10.0.0.0"; prefixLength = 16; }
|
||||
{ address = "192.168.2.0"; prefixLength = 24; via = "192.168.1.1"; }
|
||||
];
|
||||
type = with types; listOf (submodule (routeOpts 4));
|
||||
description = ''
|
||||
IP address of the interface. Leave empty to configure the
|
||||
interface using DHCP.
|
||||
List of extra IPv4 static routes that will be assigned to the interface.
|
||||
'';
|
||||
};
|
||||
|
||||
prefixLength = mkOption {
|
||||
default = null;
|
||||
example = 24;
|
||||
type = types.nullOr types.int;
|
||||
ipv6.routes = mkOption {
|
||||
default = [];
|
||||
example = [
|
||||
{ address = "fdfd:b3f0::"; prefixLength = 48; }
|
||||
{ address = "2001:1470:fffd:2098::"; prefixLength = 64; via = "fdfd:b3f0::1"; }
|
||||
];
|
||||
type = with types; listOf (submodule (routeOpts 6));
|
||||
description = ''
|
||||
Subnet mask of the interface, specified as the number of
|
||||
bits in the prefix (<literal>24</literal>).
|
||||
'';
|
||||
};
|
||||
|
||||
subnetMask = mkOption {
|
||||
default = null;
|
||||
description = ''
|
||||
Defunct, supply the prefix length instead.
|
||||
'';
|
||||
};
|
||||
|
||||
ipv6Address = mkOption {
|
||||
default = null;
|
||||
example = "2001:1470:fffd:2098::e006";
|
||||
type = types.nullOr types.str;
|
||||
description = ''
|
||||
IPv6 address of the interface. Leave empty to configure the
|
||||
interface using NDP.
|
||||
'';
|
||||
};
|
||||
|
||||
ipv6PrefixLength = mkOption {
|
||||
default = 64;
|
||||
example = 64;
|
||||
type = types.int;
|
||||
description = ''
|
||||
Subnet mask of the interface, specified as the number of
|
||||
bits in the prefix (<literal>64</literal>).
|
||||
List of extra IPv6 static routes that will be assigned to the interface.
|
||||
'';
|
||||
};
|
||||
|
||||
@ -317,6 +327,32 @@ let
|
||||
name = mkDefault name;
|
||||
};
|
||||
|
||||
# Renamed or removed options
|
||||
imports =
|
||||
let
|
||||
defined = x: x != "_mkMergedOptionModule";
|
||||
in [
|
||||
(mkRenamedOptionModule [ "ip4" ] [ "ipv4" "addresses"])
|
||||
(mkRenamedOptionModule [ "ip6" ] [ "ipv6" "addresses"])
|
||||
(mkRemovedOptionModule [ "subnetMask" ] ''
|
||||
Supply a prefix length instead; use option
|
||||
networking.interfaces.<name>.ipv{4,6}.addresses'')
|
||||
(mkMergedOptionModule
|
||||
[ [ "ipAddress" ] [ "prefixLength" ] ]
|
||||
[ "ipv4" "addresses" ]
|
||||
(cfg: with cfg;
|
||||
optional (defined ipAddress && defined prefixLength)
|
||||
{ address = ipAddress; prefixLength = prefixLength; }))
|
||||
(mkMergedOptionModule
|
||||
[ [ "ipv6Address" ] [ "ipv6PrefixLength" ] ]
|
||||
[ "ipv6" "addresses" ]
|
||||
(cfg: with cfg;
|
||||
optional (defined ipv6Address && defined ipv6PrefixLength)
|
||||
{ address = ipv6Address; prefixLength = ipv6PrefixLength; }))
|
||||
|
||||
({ options.warnings = options.warnings; })
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
hexChars = stringToCharacters "0123456789abcdef";
|
||||
@ -453,7 +489,7 @@ in
|
||||
networking.interfaces = mkOption {
|
||||
default = {};
|
||||
example =
|
||||
{ eth0.ip4 = [ {
|
||||
{ eth0.ipv4 = [ {
|
||||
address = "131.211.84.78";
|
||||
prefixLength = 25;
|
||||
} ];
|
||||
@ -932,13 +968,10 @@ in
|
||||
|
||||
config = {
|
||||
|
||||
warnings = concatMap (i: i.warnings) interfaces;
|
||||
|
||||
assertions =
|
||||
(flip map interfaces (i: {
|
||||
assertion = i.subnetMask == null;
|
||||
message = ''
|
||||
The networking.interfaces."${i.name}".subnetMask option is defunct. Use prefixLength instead.
|
||||
'';
|
||||
})) ++ (flip map interfaces (i: {
|
||||
# With the linux kernel, interface name length is limited by IFNAMSIZ
|
||||
# to 16 bytes, including the trailing null byte.
|
||||
# See include/linux/if.h in the kernel sources
|
||||
@ -947,7 +980,7 @@ in
|
||||
The name of networking.interfaces."${i.name}" is too long, it needs to be less than 16 characters.
|
||||
'';
|
||||
})) ++ (flip map slaveIfs (i: {
|
||||
assertion = i.ip4 == [ ] && i.ipAddress == null && i.ip6 == [ ] && i.ipv6Address == null;
|
||||
assertion = i.ipv4.addresses == [ ] && i.ipv6.addresses == [ ];
|
||||
message = ''
|
||||
The networking.interfaces."${i.name}" must not have any defined ips when it is a slave.
|
||||
'';
|
||||
@ -1089,6 +1122,9 @@ in
|
||||
'' + optionalString (i.mtu != null) ''
|
||||
echo "setting MTU to ${toString i.mtu}..."
|
||||
ip link set "${i.name}" mtu "${toString i.mtu}"
|
||||
'' + ''
|
||||
echo -n "bringing up interface... "
|
||||
ip link set "${i.name}" up && echo "done" || (echo "failed"; exit 1)
|
||||
'';
|
||||
})));
|
||||
|
||||
|
@ -26,7 +26,7 @@ in
|
||||
rm $diskImageBase
|
||||
popd
|
||||
'';
|
||||
diskImageBase = "nixos-image-${config.system.nixosLabel}-${pkgs.stdenv.system}.raw";
|
||||
diskImageBase = "nixos-image-${config.system.nixos.label}-${pkgs.stdenv.system}.raw";
|
||||
buildInputs = [ pkgs.utillinux pkgs.perl ];
|
||||
exportReferencesGraph =
|
||||
[ "closure" config.system.build.toplevel ];
|
||||
|
@ -14,7 +14,7 @@ in
|
||||
PATH=$PATH:${pkgs.stdenv.lib.makeBinPath [ pkgs.gnutar pkgs.gzip ]}
|
||||
pushd $out
|
||||
mv $diskImage disk.raw
|
||||
tar -Szcf nixos-image-${config.system.nixosLabel}-${pkgs.stdenv.system}.raw.tar.gz disk.raw
|
||||
tar -Szcf nixos-image-${config.system.nixos.label}-${pkgs.stdenv.system}.raw.tar.gz disk.raw
|
||||
rm $out/disk.raw
|
||||
popd
|
||||
'';
|
||||
|
@ -124,7 +124,7 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
networking.interfaces.vboxnet0.ip4 = [ { address = "192.168.56.1"; prefixLength = 24; } ];
|
||||
networking.interfaces.vboxnet0.ipv4.addresses = [{ address = "192.168.56.1"; prefixLength = 24; }];
|
||||
# Make sure NetworkManager won't assume this interface being up
|
||||
# means we have internet access.
|
||||
networking.networkmanager.unmanaged = ["vboxnet0"];
|
||||
|
@ -22,7 +22,7 @@ in {
|
||||
|
||||
config = {
|
||||
system.build.virtualBoxOVA = import ../../lib/make-disk-image.nix {
|
||||
name = "nixos-ova-${config.system.nixosLabel}-${pkgs.stdenv.system}";
|
||||
name = "nixos-ova-${config.system.nixos.label}-${pkgs.stdenv.system}";
|
||||
|
||||
inherit pkgs lib config;
|
||||
partitionTableType = "legacy";
|
||||
@ -37,7 +37,7 @@ in {
|
||||
VBoxManage internalcommands createrawvmdk -filename disk.vmdk -rawdisk $diskImage
|
||||
|
||||
echo "creating VirtualBox VM..."
|
||||
vmName="NixOS ${config.system.nixosLabel} (${pkgs.stdenv.system})"
|
||||
vmName="NixOS ${config.system.nixos.label} (${pkgs.stdenv.system})"
|
||||
VBoxManage createvm --name "$vmName" --register \
|
||||
--ostype ${if pkgs.stdenv.system == "x86_64-linux" then "Linux26_64" else "Linux26"}
|
||||
VBoxManage modifyvm "$vmName" \
|
||||
@ -53,7 +53,7 @@ in {
|
||||
|
||||
echo "exporting VirtualBox VM..."
|
||||
mkdir -p $out
|
||||
fn="$out/nixos-${config.system.nixosLabel}-${pkgs.stdenv.system}.ova"
|
||||
fn="$out/nixos-${config.system.nixos.label}-${pkgs.stdenv.system}.ova"
|
||||
VBoxManage export "$vmName" --output "$fn"
|
||||
|
||||
rm -v $diskImage
|
||||
|
@ -35,8 +35,8 @@ let
|
||||
|
||||
|
||||
versionModule =
|
||||
{ system.nixosVersionSuffix = versionSuffix;
|
||||
system.nixosRevision = nixpkgs.rev or nixpkgs.shortRev;
|
||||
{ system.nixos.versionSuffix = versionSuffix;
|
||||
system.nixos.revision = nixpkgs.rev or nixpkgs.shortRev;
|
||||
};
|
||||
|
||||
|
||||
|
@ -16,7 +16,7 @@ let
|
||||
miniupnpdConf = nodes: pkgs.writeText "miniupnpd.conf"
|
||||
''
|
||||
ext_ifname=eth1
|
||||
listening_ip=${(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ip4).address}/24
|
||||
listening_ip=${(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ipv4.addresses).address}/24
|
||||
allow 1024-65535 192.168.2.0/24 1024-65535
|
||||
'';
|
||||
|
||||
@ -56,7 +56,7 @@ in
|
||||
{ environment.systemPackages = [ pkgs.transmission ];
|
||||
virtualisation.vlans = [ 2 ];
|
||||
networking.defaultGateway =
|
||||
(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ip4).address;
|
||||
(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ipv4.addresses).address;
|
||||
networking.firewall.enable = false;
|
||||
};
|
||||
|
||||
@ -84,7 +84,7 @@ in
|
||||
# Create the torrent.
|
||||
$tracker->succeed("mkdir /tmp/data");
|
||||
$tracker->succeed("cp ${file} /tmp/data/test.tar.bz2");
|
||||
$tracker->succeed("transmission-create /tmp/data/test.tar.bz2 -p -t http://${(pkgs.lib.head nodes.tracker.config.networking.interfaces.eth1.ip4).address}:6969/announce -o /tmp/test.torrent");
|
||||
$tracker->succeed("transmission-create /tmp/data/test.tar.bz2 -p -t http://${(pkgs.lib.head nodes.tracker.config.networking.interfaces.eth1.ipv4.addresses).address}:6969/announce -o /tmp/test.torrent");
|
||||
$tracker->succeed("chmod 644 /tmp/test.torrent");
|
||||
|
||||
# Start the tracker. !!! use a less crappy tracker
|
||||
|
@ -12,7 +12,6 @@ let
|
||||
# the sequence of address assignment less stochastic.
|
||||
networking.useDHCP = false;
|
||||
|
||||
networking.interfaces.eth1.prefixLength = 24;
|
||||
# CJDNS output is incompatible with the XML log.
|
||||
systemd.services.cjdns.serviceConfig.StandardOutput = "null";
|
||||
#networking.firewall.enable = true;
|
||||
@ -49,7 +48,9 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
|
||||
{ imports = [ basicConfig ];
|
||||
|
||||
networking.interfaces.eth1.ipAddress = "192.168.0.2";
|
||||
networking.interfaces.eth1.ipv4.addresses = [
|
||||
{ address = "192.168.0.2"; prefixLength = 24; }
|
||||
];
|
||||
|
||||
services.cjdns =
|
||||
{ UDPInterface =
|
||||
@ -76,7 +77,9 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
CJDNS_ADMIN_PASSWORD=FOOBAR
|
||||
'';
|
||||
|
||||
networking.interfaces.eth1.ipAddress = "192.168.0.1";
|
||||
networking.interfaces.eth1.ipv4.addresses = [
|
||||
{ address = "192.168.0.1"; prefixLength = 24; }
|
||||
];
|
||||
|
||||
services.cjdns =
|
||||
{ authorizedPasswords = [ carolPassword ];
|
||||
|
@ -26,8 +26,8 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
};
|
||||
networking.interfaces = {
|
||||
br0 = {
|
||||
ip4 = [{ address = hostIp; prefixLength = 24; }];
|
||||
ip6 = [{ address = hostIp6; prefixLength = 7; }];
|
||||
ipv4.addresses = [{ address = hostIp; prefixLength = 24; }];
|
||||
ipv6.addresses = [{ address = hostIp6; prefixLength = 7; }];
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -21,11 +21,11 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
};
|
||||
networking.interfaces = {
|
||||
br0 = {
|
||||
ip4 = [{ address = "192.168.0.1"; prefixLength = 24; }];
|
||||
ip6 = [{ address = "fc00::1"; prefixLength = 7; }];
|
||||
ipv4.addresses = [{ address = "192.168.0.1"; prefixLength = 24; }];
|
||||
ipv6.addresses = [{ address = "fc00::1"; prefixLength = 7; }];
|
||||
};
|
||||
br1 = {
|
||||
ip4 = [{ address = "192.168.1.1"; prefixLength = 24; }];
|
||||
ipv4.addresses = [{ address = "192.168.1.1"; prefixLength = 24; }];
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -13,9 +13,9 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
virtualisation.vlans = [];
|
||||
|
||||
networking.bridges.br0.interfaces = [];
|
||||
networking.interfaces.br0 = {
|
||||
ip4 = [ { address = "10.11.0.254"; prefixLength = 24; } ];
|
||||
};
|
||||
networking.interfaces.br0.ipv4.addresses = [
|
||||
{ address = "10.11.0.254"; prefixLength = 24; }
|
||||
];
|
||||
|
||||
# Force /etc/hosts to be the only source for host name resolution
|
||||
environment.etc."nsswitch.conf".text = lib.mkForce ''
|
||||
|
@ -26,9 +26,9 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
interface = "eth1";
|
||||
mode = "bridge";
|
||||
};
|
||||
networking.interfaces.eth1.ip4 = lib.mkForce [];
|
||||
networking.interfaces.eth1.ipv4.addresses = lib.mkForce [];
|
||||
networking.interfaces.mv-eth1-host = {
|
||||
ip4 = [ { address = "192.168.1.1"; prefixLength = 24; } ];
|
||||
ipv4.addresses = [ { address = "192.168.1.1"; prefixLength = 24; } ];
|
||||
};
|
||||
|
||||
containers.test1 = {
|
||||
@ -37,7 +37,7 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
|
||||
config = {
|
||||
networking.interfaces.mv-eth1 = {
|
||||
ip4 = [ { address = containerIp1; prefixLength = 24; } ];
|
||||
ipv4.addresses = [ { address = containerIp1; prefixLength = 24; } ];
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -48,7 +48,7 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
|
||||
config = {
|
||||
networking.interfaces.mv-eth1 = {
|
||||
ip4 = [ { address = containerIp2; prefixLength = 24; } ];
|
||||
ipv4.addresses = [ { address = containerIp2; prefixLength = 24; } ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -16,9 +16,9 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
interfaces = [ "eth1" ];
|
||||
|
||||
config = {
|
||||
networking.interfaces.eth1 = {
|
||||
ip4 = [ { address = "10.10.0.1"; prefixLength = 24; } ];
|
||||
};
|
||||
networking.interfaces.eth1.ipv4.addresses = [
|
||||
{ address = "10.10.0.1"; prefixLength = 24; }
|
||||
];
|
||||
networking.firewall.enable = false;
|
||||
};
|
||||
};
|
||||
@ -33,9 +33,9 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
|
||||
config = {
|
||||
networking.bridges.br0.interfaces = [ "eth1" ];
|
||||
networking.interfaces.br0 = {
|
||||
ip4 = [ { address = "10.10.0.2"; prefixLength = 24; } ];
|
||||
};
|
||||
networking.interfaces.br0.ipv4.addresses = [
|
||||
{ address = "10.10.0.2"; prefixLength = 24; }
|
||||
];
|
||||
networking.firewall.enable = false;
|
||||
};
|
||||
};
|
||||
@ -54,9 +54,9 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
interfaces = [ "eth1" ];
|
||||
mode = "active-backup";
|
||||
};
|
||||
networking.interfaces.bond0 = {
|
||||
ip4 = [ { address = "10.10.0.3"; prefixLength = 24; } ];
|
||||
};
|
||||
networking.interfaces.bond0.ipv4.addresses = [
|
||||
{ address = "10.10.0.3"; prefixLength = 24; }
|
||||
];
|
||||
networking.firewall.enable = false;
|
||||
};
|
||||
};
|
||||
@ -76,9 +76,9 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
mode = "active-backup";
|
||||
};
|
||||
networking.bridges.br0.interfaces = [ "bond0" ];
|
||||
networking.interfaces.br0 = {
|
||||
ip4 = [ { address = "10.10.0.4"; prefixLength = 24; } ];
|
||||
};
|
||||
networking.interfaces.br0.ipv4.addresses = [
|
||||
{ address = "10.10.0.4"; prefixLength = 24; }
|
||||
];
|
||||
networking.firewall.enable = false;
|
||||
};
|
||||
};
|
||||
|
@ -11,7 +11,7 @@ let
|
||||
|
||||
# prevent make-test.nix to change IP
|
||||
networking.interfaces = {
|
||||
eth1.ip4 = lib.mkOverride 0 [ ];
|
||||
eth1.ipv4.addresses = lib.mkOverride 0 [ ];
|
||||
};
|
||||
};
|
||||
in {
|
||||
|
@ -11,7 +11,7 @@ let
|
||||
config = {
|
||||
networking.firewall.enable = false;
|
||||
networking.firewall.allowPing = true;
|
||||
networking.interfaces.eth0.ip4 = [
|
||||
networking.interfaces.eth0.ipv4.addresses = [
|
||||
{ address = "192.168.1.122"; prefixLength = 24; }
|
||||
];
|
||||
};
|
||||
@ -33,8 +33,8 @@ in import ./make-test.nix ({ pkgs, lib, ...} :
|
||||
rstp = false;
|
||||
};
|
||||
networking.interfaces = {
|
||||
eth1.ip4 = lib.mkOverride 0 [ ];
|
||||
br0.ip4 = [{ address = "192.168.1.1"; prefixLength = 24; }];
|
||||
eth1.ipv4.addresses = lib.mkOverride 0 [ ];
|
||||
br0.ipv4.addresses = [ { address = "192.168.1.1"; prefixLength = 24; } ];
|
||||
};
|
||||
|
||||
};
|
||||
@ -44,8 +44,8 @@ in import ./make-test.nix ({ pkgs, lib, ...} :
|
||||
rstp = false;
|
||||
};
|
||||
networking.interfaces = {
|
||||
eth1.ip4 = lib.mkOverride 0 [ ];
|
||||
br0.ip4 = [{ address = "192.168.1.2"; prefixLength = 24; }];
|
||||
eth1.ipv4.addresses = lib.mkOverride 0 [ ];
|
||||
br0.ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
|
||||
};
|
||||
};
|
||||
client_eth1_rstp = { lib, pkgs, ... }: client_base // {
|
||||
@ -54,8 +54,8 @@ in import ./make-test.nix ({ pkgs, lib, ...} :
|
||||
rstp = true;
|
||||
};
|
||||
networking.interfaces = {
|
||||
eth1.ip4 = lib.mkOverride 0 [ ];
|
||||
br0.ip4 = [{ address = "192.168.1.2"; prefixLength = 24; }];
|
||||
eth1.ipv4.addresses = lib.mkOverride 0 [ ];
|
||||
br0.ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -11,8 +11,8 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
with pkgs.lib;
|
||||
{
|
||||
networking = {
|
||||
interfaces.eth1.ip6 = mkOverride 0 [ { address = "fd00::2"; prefixLength = 64; } ];
|
||||
interfaces.eth1.ip4 = mkOverride 0 [ { address = "192.168.1.2"; prefixLength = 24; } ];
|
||||
interfaces.eth1.ipv6.addresses = mkOverride 0 [ { address = "fd00::2"; prefixLength = 64; } ];
|
||||
interfaces.eth1.ipv4.addresses = mkOverride 0 [ { address = "192.168.1.2"; prefixLength = 24; } ];
|
||||
};
|
||||
};
|
||||
server =
|
||||
@ -20,8 +20,8 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
with pkgs.lib;
|
||||
{
|
||||
networking = {
|
||||
interfaces.eth1.ip6 = mkOverride 0 [ { address = "fd00::1"; prefixLength = 64; } ];
|
||||
interfaces.eth1.ip4 = mkOverride 0 [ { address = "192.168.1.1"; prefixLength = 24; } ];
|
||||
interfaces.eth1.ipv6.addresses = mkOverride 0 [ { address = "fd00::1"; prefixLength = 64; } ];
|
||||
interfaces.eth1.ipv4.addresses = mkOverride 0 [ { address = "192.168.1.1"; prefixLength = 24; } ];
|
||||
};
|
||||
|
||||
services = {
|
||||
|
@ -11,9 +11,7 @@ import ../make-test.nix ({ pkgs, lib, ... }:
|
||||
{ config, pkgs, ... }:
|
||||
{
|
||||
boot.kernelParams = [
|
||||
"ip=${
|
||||
(head config.networking.interfaces.eth1.ip4).address
|
||||
}:::255.255.255.0::eth1:none"
|
||||
"ip=${config.networking.primaryIPAddress}:::255.255.255.0::eth1:none"
|
||||
];
|
||||
boot.initrd.network = {
|
||||
enable = true;
|
||||
|
@ -47,7 +47,7 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
# Detection).
|
||||
sub waitForAddress {
|
||||
my ($machine, $iface, $scope) = @_;
|
||||
$machine->waitUntilSucceeds("[ `ip -o -6 addr show dev $iface scope $scope | grep -v tentative | wc -l` -eq 1 ]");
|
||||
$machine->waitUntilSucceeds("[ `ip -o -6 addr show dev $iface scope $scope | grep -v tentative | wc -l` -ge 1 ]");
|
||||
my $ip = (split /[ \/]+/, $machine->succeed("ip -o -6 addr show dev $iface scope $scope"))[3];
|
||||
$machine->log("$scope address on $iface is $ip");
|
||||
return $ip;
|
||||
|
@ -35,7 +35,7 @@ import ./make-test.nix ({ pkgs, lib, withFirewall, withConntrackHelpers ? false,
|
||||
{ virtualisation.vlans = [ 1 ];
|
||||
networking.firewall.allowPing = true;
|
||||
networking.defaultGateway =
|
||||
(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ip4).address;
|
||||
(pkgs.lib.head nodes.router.config.networking.interfaces.eth2.ipv4.addresses).address;
|
||||
}
|
||||
(lib.optionalAttrs withConntrackHelpers {
|
||||
networking.firewall.connectionTrackingModules = [ "ftp" ];
|
||||
|
@ -21,10 +21,8 @@ let
|
||||
firewall.allowedUDPPorts = [ 547 ];
|
||||
interfaces = mkOverride 0 (listToAttrs (flip map vlanIfs (n:
|
||||
nameValuePair "eth${toString n}" {
|
||||
ipAddress = "192.168.${toString n}.1";
|
||||
prefixLength = 24;
|
||||
ipv6Address = "fd00:1234:5678:${toString n}::1";
|
||||
ipv6PrefixLength = 64;
|
||||
ipv4.addresses = [ { address = "192.168.${toString n}.1"; prefixLength = 24; } ];
|
||||
ipv6.addresses = [ { address = "fd00:1234:5678:${toString n}::1"; prefixLength = 64; } ];
|
||||
})));
|
||||
};
|
||||
services.dhcpd4 = {
|
||||
@ -90,12 +88,12 @@ let
|
||||
firewall.allowPing = true;
|
||||
useDHCP = false;
|
||||
defaultGateway = "192.168.1.1";
|
||||
interfaces.eth1.ip4 = mkOverride 0 [
|
||||
interfaces.eth1.ipv4.addresses = mkOverride 0 [
|
||||
{ address = "192.168.1.2"; prefixLength = 24; }
|
||||
{ address = "192.168.1.3"; prefixLength = 32; }
|
||||
{ address = "192.168.1.10"; prefixLength = 32; }
|
||||
];
|
||||
interfaces.eth2.ip4 = mkOverride 0 [
|
||||
interfaces.eth2.ipv4.addresses = mkOverride 0 [
|
||||
{ address = "192.168.2.2"; prefixLength = 24; }
|
||||
];
|
||||
};
|
||||
@ -143,12 +141,12 @@ let
|
||||
firewall.allowPing = true;
|
||||
useDHCP = true;
|
||||
interfaces.eth1 = {
|
||||
ip4 = mkOverride 0 [ ];
|
||||
ip6 = mkOverride 0 [ ];
|
||||
ipv4.addresses = mkOverride 0 [ ];
|
||||
ipv6.addresses = mkOverride 0 [ ];
|
||||
};
|
||||
interfaces.eth2 = {
|
||||
ip4 = mkOverride 0 [ ];
|
||||
ip6 = mkOverride 0 [ ];
|
||||
ipv4.addresses = mkOverride 0 [ ];
|
||||
ipv6.addresses = mkOverride 0 [ ];
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -198,10 +196,10 @@ let
|
||||
firewall.allowPing = true;
|
||||
useDHCP = false;
|
||||
interfaces.eth1 = {
|
||||
ip4 = mkOverride 0 [ ];
|
||||
ipv4.addresses = mkOverride 0 [ ];
|
||||
useDHCP = true;
|
||||
};
|
||||
interfaces.eth2.ip4 = mkOverride 0 [ ];
|
||||
interfaces.eth2.ipv4.addresses = mkOverride 0 [ ];
|
||||
};
|
||||
};
|
||||
testScript = { nodes, ... }:
|
||||
@ -241,9 +239,9 @@ let
|
||||
interfaces = [ "eth1" "eth2" ];
|
||||
driverOptions.mode = "balance-rr";
|
||||
};
|
||||
interfaces.eth1.ip4 = mkOverride 0 [ ];
|
||||
interfaces.eth2.ip4 = mkOverride 0 [ ];
|
||||
interfaces.bond.ip4 = mkOverride 0
|
||||
interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
|
||||
interfaces.eth2.ipv4.addresses = mkOverride 0 [ ];
|
||||
interfaces.bond.ipv4.addresses = mkOverride 0
|
||||
[ { inherit address; prefixLength = 30; } ];
|
||||
};
|
||||
};
|
||||
@ -274,7 +272,7 @@ let
|
||||
useNetworkd = networkd;
|
||||
firewall.allowPing = true;
|
||||
useDHCP = false;
|
||||
interfaces.eth1.ip4 = mkOverride 0
|
||||
interfaces.eth1.ipv4.addresses = mkOverride 0
|
||||
[ { inherit address; prefixLength = 24; } ];
|
||||
};
|
||||
};
|
||||
@ -289,9 +287,9 @@ let
|
||||
firewall.allowPing = true;
|
||||
useDHCP = false;
|
||||
bridges.bridge.interfaces = [ "eth1" "eth2" ];
|
||||
interfaces.eth1.ip4 = mkOverride 0 [ ];
|
||||
interfaces.eth2.ip4 = mkOverride 0 [ ];
|
||||
interfaces.bridge.ip4 = mkOverride 0
|
||||
interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
|
||||
interfaces.eth2.ipv4.addresses = mkOverride 0 [ ];
|
||||
interfaces.bridge.ipv4.addresses = mkOverride 0
|
||||
[ { address = "192.168.1.1"; prefixLength = 24; } ];
|
||||
};
|
||||
};
|
||||
@ -328,7 +326,7 @@ let
|
||||
firewall.allowPing = true;
|
||||
useDHCP = true;
|
||||
macvlans.macvlan.interface = "eth1";
|
||||
interfaces.eth1.ip4 = mkOverride 0 [ ];
|
||||
interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
|
||||
};
|
||||
};
|
||||
testScript = { nodes, ... }:
|
||||
@ -369,9 +367,9 @@ let
|
||||
local = address4;
|
||||
dev = "eth1";
|
||||
};
|
||||
interfaces.eth1.ip4 = mkOverride 0
|
||||
interfaces.eth1.ipv4.addresses = mkOverride 0
|
||||
[ { address = address4; prefixLength = 24; } ];
|
||||
interfaces.sit.ip6 = mkOverride 0
|
||||
interfaces.sit.ipv6.addresses = mkOverride 0
|
||||
[ { address = address6; prefixLength = 64; } ];
|
||||
};
|
||||
};
|
||||
@ -410,9 +408,9 @@ let
|
||||
id = 1;
|
||||
interface = "eth0";
|
||||
};
|
||||
interfaces.eth0.ip4 = mkOverride 0 [ ];
|
||||
interfaces.eth1.ip4 = mkOverride 0 [ ];
|
||||
interfaces.vlan.ip4 = mkOverride 0
|
||||
interfaces.eth0.ipv4.addresses = mkOverride 0 [ ];
|
||||
interfaces.eth1.ipv4.addresses = mkOverride 0 [ ];
|
||||
interfaces.vlan.ipv4.addresses = mkOverride 0
|
||||
[ { inherit address; prefixLength = 24; } ];
|
||||
};
|
||||
};
|
||||
@ -437,13 +435,13 @@ let
|
||||
name = "Virtual";
|
||||
machine = {
|
||||
networking.interfaces."tap0" = {
|
||||
ip4 = [ { address = "192.168.1.1"; prefixLength = 24; } ];
|
||||
ip6 = [ { address = "2001:1470:fffd:2096::"; prefixLength = 64; } ];
|
||||
ipv4.addresses = [ { address = "192.168.1.1"; prefixLength = 24; } ];
|
||||
ipv6.addresses = [ { address = "2001:1470:fffd:2096::"; prefixLength = 64; } ];
|
||||
virtual = true;
|
||||
};
|
||||
networking.interfaces."tun0" = {
|
||||
ip4 = [ { address = "192.168.1.2"; prefixLength = 24; } ];
|
||||
ip6 = [ { address = "2001:1470:fffd:2097::"; prefixLength = 64; } ];
|
||||
ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
|
||||
ipv6.addresses = [ { address = "2001:1470:fffd:2097::"; prefixLength = 64; } ];
|
||||
virtual = true;
|
||||
};
|
||||
};
|
||||
@ -483,9 +481,9 @@ let
|
||||
boot.kernel.sysctl."net.ipv6.conf.all.forwarding" = true;
|
||||
networking = {
|
||||
useNetworkd = networkd;
|
||||
interfaces.eth1 = {
|
||||
ipv6Address = "fd00:1234:5678:1::1";
|
||||
ipv6PrefixLength = 64;
|
||||
interfaces.eth1.ipv6.addresses = singleton {
|
||||
address = "fd00:1234:5678:1::1";
|
||||
prefixLength = 64;
|
||||
};
|
||||
};
|
||||
services.radvd = {
|
||||
@ -511,8 +509,8 @@ let
|
||||
useDHCP = true;
|
||||
interfaces.eth1 = {
|
||||
preferTempAddress = true;
|
||||
ip4 = mkOverride 0 [ ];
|
||||
ip6 = mkOverride 0 [ ];
|
||||
ipv4.addresses = mkOverride 0 [ ];
|
||||
ipv6.addresses = mkOverride 0 [ ];
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -533,6 +531,69 @@ let
|
||||
$client->waitUntilSucceeds("! ip route get fd00:1234:5678:1::1 | grep -q ':[a-f0-9]*ff:fe[a-f0-9]*:'");
|
||||
'';
|
||||
};
|
||||
routes = {
|
||||
name = "routes";
|
||||
machine = {
|
||||
networking.useDHCP = false;
|
||||
networking.interfaces."eth0" = {
|
||||
ipv4.addresses = [ { address = "192.168.1.2"; prefixLength = 24; } ];
|
||||
ipv6.addresses = [ { address = "2001:1470:fffd:2097::"; prefixLength = 64; } ];
|
||||
ipv6.routes = [
|
||||
{ address = "fdfd:b3f0::"; prefixLength = 48; }
|
||||
{ address = "2001:1470:fffd:2098::"; prefixLength = 64; via = "fdfd:b3f0::1"; }
|
||||
];
|
||||
ipv4.routes = [
|
||||
{ address = "10.0.0.0"; prefixLength = 16; options = { mtu = "1500"; }; }
|
||||
{ address = "192.168.2.0"; prefixLength = 24; via = "192.168.1.1"; }
|
||||
];
|
||||
};
|
||||
virtualisation.vlans = [ ];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
my $targetIPv4Table = <<'END';
|
||||
10.0.0.0/16 scope link mtu 1500
|
||||
192.168.1.0/24 proto kernel scope link src 192.168.1.2
|
||||
192.168.2.0/24 via 192.168.1.1
|
||||
END
|
||||
|
||||
my $targetIPv6Table = <<'END';
|
||||
2001:1470:fffd:2097::/64 proto kernel metric 256 pref medium
|
||||
2001:1470:fffd:2098::/64 via fdfd:b3f0::1 metric 1024 pref medium
|
||||
fdfd:b3f0::/48 metric 1024 pref medium
|
||||
END
|
||||
|
||||
$machine->start;
|
||||
$machine->waitForUnit("network.target");
|
||||
|
||||
# test routing tables
|
||||
my $ipv4Table = $machine->succeed("ip -4 route list dev eth0 | head -n3");
|
||||
my $ipv6Table = $machine->succeed("ip -6 route list dev eth0 | head -n3");
|
||||
"$ipv4Table" eq "$targetIPv4Table" or die(
|
||||
"The IPv4 routing table does not match the expected one:\n",
|
||||
"Result:\n", "$ipv4Table\n",
|
||||
"Expected:\n", "$targetIPv4Table\n"
|
||||
);
|
||||
"$ipv6Table" eq "$targetIPv6Table" or die(
|
||||
"The IPv6 routing table does not match the expected one:\n",
|
||||
"Result:\n", "$ipv6Table\n",
|
||||
"Expected:\n", "$targetIPv6Table\n"
|
||||
);
|
||||
|
||||
# test clean-up of the tables
|
||||
$machine->succeed("systemctl stop network-addresses-eth0");
|
||||
my $ipv4Residue = $machine->succeed("ip -4 route list dev eth0 | head -n-3");
|
||||
my $ipv6Residue = $machine->succeed("ip -6 route list dev eth0 | head -n-3");
|
||||
$ipv4Residue eq "" or die(
|
||||
"The IPv4 routing table has not been properly cleaned:\n",
|
||||
"$ipv4Residue\n"
|
||||
);
|
||||
$ipv6Residue eq "" or die(
|
||||
"The IPv6 routing table has not been properly cleaned:\n",
|
||||
"$ipv6Residue\n"
|
||||
);
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
in mapAttrs (const (attrs: makeTest (attrs // {
|
||||
|
@ -15,25 +15,31 @@ in import ./make-test.nix ({ pkgs, ...} : {
|
||||
clientv4 = { lib, nodes, ... }: {
|
||||
imports = [ common ];
|
||||
networking.nameservers = lib.mkForce [
|
||||
nodes.server.config.networking.interfaces.eth1.ipAddress
|
||||
(lib.head nodes.server.config.networking.interfaces.eth1.ipv4.addresses).address
|
||||
];
|
||||
networking.interfaces.eth1.ipv4.addresses = [
|
||||
{ address = "192.168.0.2"; prefixLength = 24; }
|
||||
];
|
||||
networking.interfaces.eth1.ipAddress = "192.168.0.2";
|
||||
networking.interfaces.eth1.prefixLength = 24;
|
||||
};
|
||||
|
||||
clientv6 = { lib, nodes, ... }: {
|
||||
imports = [ common ];
|
||||
networking.nameservers = lib.mkForce [
|
||||
nodes.server.config.networking.interfaces.eth1.ipv6Address
|
||||
(lib.head nodes.server.config.networking.interfaces.eth1.ipv6.addresses).address
|
||||
];
|
||||
networking.interfaces.eth1.ipv4.addresses = [
|
||||
{ address = "dead:beef::2"; prefixLength = 24; }
|
||||
];
|
||||
networking.interfaces.eth1.ipv6Address = "dead:beef::2";
|
||||
};
|
||||
|
||||
server = { lib, ... }: {
|
||||
imports = [ common ];
|
||||
networking.interfaces.eth1.ipAddress = "192.168.0.1";
|
||||
networking.interfaces.eth1.prefixLength = 24;
|
||||
networking.interfaces.eth1.ipv6Address = "dead:beef::1";
|
||||
networking.interfaces.eth1.ipv4.addresses = [
|
||||
{ address = "192.168.0.1"; prefixLength = 24; }
|
||||
];
|
||||
networking.interfaces.eth1.ipv6.addresses = [
|
||||
{ address = "dead:beef::1"; prefixLength = 64; }
|
||||
];
|
||||
services.nsd.enable = true;
|
||||
services.nsd.interfaces = lib.mkForce [];
|
||||
services.nsd.zones."example.com.".data = ''
|
||||
|
@ -8,7 +8,7 @@
|
||||
import ./make-test.nix ({ pkgs, ... }:
|
||||
let
|
||||
|
||||
ifAddr = node: iface: (pkgs.lib.head node.config.networking.interfaces.${iface}.ip4).address;
|
||||
ifAddr = node: iface: (pkgs.lib.head node.config.networking.interfaces.${iface}.ipv4.addresses).address;
|
||||
|
||||
ospfConf = ''
|
||||
interface eth2
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
buildGoPackage rec {
|
||||
name = "go-ethereum-${version}";
|
||||
version = "1.7.3";
|
||||
version = "1.8.1";
|
||||
goPackagePath = "github.com/ethereum/go-ethereum";
|
||||
|
||||
# Fix for usb-related segmentation faults on darwin
|
||||
@ -16,7 +16,7 @@ buildGoPackage rec {
|
||||
owner = "ethereum";
|
||||
repo = "go-ethereum";
|
||||
rev = "v${version}";
|
||||
sha256 = "1w6rbq2qpjyf2v9mr18yiv2af1h2sgyvgrdk4bd8ixgl3qcd5b11";
|
||||
sha256 = "0k7ly9cw68ranksa1fdn7v2lncmlqgabw3qiiyqya2xz3s4aazlf";
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
|
@ -40,13 +40,13 @@ let
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
name = "radiotray-ng-${version}";
|
||||
version = "0.2.0";
|
||||
version = "0.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ebruck";
|
||||
repo = "radiotray-ng";
|
||||
rev = "v${version}";
|
||||
sha256 = "12mhi0q137cjdpmpczvrcr7szq1ja1r8bm0gh03b925y8xyrqp5z";
|
||||
sha256 = "0hqg6vn8hv5pic96klf1d9vj8fibrgiqnqb5vwrg3wvakx0y32kr";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake pkgconfig wrapGAppsHook makeWrapper ];
|
||||
@ -63,10 +63,9 @@ stdenv.mkDerivation rec {
|
||||
++ pythonInputs;
|
||||
|
||||
prePatch = ''
|
||||
substituteInPlace debian/CMakeLists.txt \
|
||||
--replace /usr $out
|
||||
substituteInPlace include/radiotray-ng/common.hpp \
|
||||
--replace /usr $out
|
||||
for x in debian/CMakeLists.txt include/radiotray-ng/common.hpp data/*.desktop; do
|
||||
substituteInPlace $x --replace /usr $out
|
||||
done
|
||||
|
||||
# We don't find the radiotray-ng-notification icon otherwise
|
||||
substituteInPlace data/radiotray-ng.desktop \
|
||||
@ -75,6 +74,8 @@ stdenv.mkDerivation rec {
|
||||
--replace radiotray-ng-notification radiotray-ng-on
|
||||
'';
|
||||
|
||||
cmakeFlags = stdenv.lib.optional doCheck "-DBUILD_TESTS=ON";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
doCheck = true;
|
||||
|
45
pkgs/applications/audio/sayonara/default.nix
Normal file
45
pkgs/applications/audio/sayonara/default.nix
Normal file
@ -0,0 +1,45 @@
|
||||
{ stdenv, fetchurl, cmake, qt5, zlib, taglib, pkgconfig, pcre, gst_all_1 }:
|
||||
|
||||
let
|
||||
version = "1.0.0-git5-20180115";
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "sayonara-player-${version}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://sayonara-player.com/sw/sayonara-player-${version}.tar.gz";
|
||||
sha256 = "1fl7zplnrrvbv1xm4g348bpd46jj39jvbm808hyjjq92i64wqg37";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake pkgconfig ];
|
||||
buildInputs = with qt5; with gst_all_1;
|
||||
[ gstreamer gst-plugins-base gst-plugins-good gst-plugins-ugly
|
||||
pcre qtbase qttools taglib zlib
|
||||
];
|
||||
|
||||
# CMake Error at src/GUI/Resources/Icons/cmake_install.cmake:49 (file):
|
||||
# file cannot create directory: /usr/share/icons. Maybe need administrative
|
||||
# privileges.
|
||||
# Call Stack (most recent call first):
|
||||
# src/GUI/Resources/cmake_install.cmake:50 (include)
|
||||
# src/GUI/cmake_install.cmake:50 (include)
|
||||
# src/cmake_install.cmake:59 (include)
|
||||
# cmake_install.cmake:42 (include)
|
||||
postPatch = ''
|
||||
substituteInPlace src/GUI/Resources/Icons/CMakeLists.txt \
|
||||
--replace "/usr/share" "$out/share"
|
||||
'';
|
||||
|
||||
# [ 65%] Building CXX object src/Components/Engine/CMakeFiles/say_comp_engine.dir/AbstractPipeline.cpp.o
|
||||
# /tmp/nix-build-sayonara-player-1.0.0-git5-20180115.drv-0/sayonara-player/src/Components/Engine/AbstractPipeline.cpp:28:32: fatal error: gst/app/gstappsink.h: No such file or directory
|
||||
# #include <gst/app/gstappsink.h>
|
||||
NIX_CFLAGS_COMPILE = "-I${gst_all_1.gst-plugins-base.dev}/include/gstreamer-1.0";
|
||||
|
||||
meta = with stdenv.lib;
|
||||
{ description = "Sayonara music player";
|
||||
homepage = https://sayonara-player.com/;
|
||||
license = licenses.gpl3;
|
||||
platforms = qt5.qtbase.meta.platforms;
|
||||
maintainers = [ maintainers.deepfire ];
|
||||
};
|
||||
}
|
@ -1,18 +1,18 @@
|
||||
{ stdenv, fetchgit , boost, libX11, mesa, liblo, libjack2, ladspaH, lv2, pkgconfig, rubberband, libsndfile }:
|
||||
{ stdenv, fetchgit , boost, libX11, mesa, liblo, libjack2, ladspaH, lv2, pkgconfig, rubberband, libsndfile, fftwFloat, libsamplerate }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "zam-plugins-${version}";
|
||||
version = "3.9";
|
||||
version = "3.10";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://github.com/zamaudio/zam-plugins.git";
|
||||
deepClone = true;
|
||||
rev = "4976cf204074c1dfaf344821e83e8d896b35107d";
|
||||
sha256 = "1xgwl51sf2hgc5ikcnycyxaw9vy82lrcswn07b6av6i67qclm8f8";
|
||||
rev = "a3321af1892a6994d64fb705e48ae8adf8d7df20";
|
||||
sha256 = "0yqrs21ph2lx00p0jlc70qkmzfrnf9ihg1r3i9j5n2r903ljdg5p";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
buildInputs = [ boost libX11 mesa liblo libjack2 ladspaH lv2 rubberband libsndfile ];
|
||||
buildInputs = [ boost libX11 mesa liblo libjack2 ladspaH lv2 rubberband libsndfile fftwFloat libsamplerate ];
|
||||
|
||||
patchPhase = ''
|
||||
patchShebangs ./dpf/utils/generate-ttl.sh
|
||||
|
102
pkgs/applications/backup/crashplan/crashplan-small-business.nix
Normal file
102
pkgs/applications/backup/crashplan/crashplan-small-business.nix
Normal file
@ -0,0 +1,102 @@
|
||||
{ stdenv, fetchurl, makeWrapper, getopt, jre, cpio, gawk, gnugrep, gnused,
|
||||
procps, which, gtk2, atk, glib, pango, gdk_pixbuf, cairo, freetype,
|
||||
fontconfig, dbus, gconf, nss, nspr, alsaLib, cups, expat, libudev,
|
||||
libX11, libxcb, libXi, libXcursor, libXdamage, libXrandr, libXcomposite,
|
||||
libXext, libXfixes, libXrender, libXtst, libXScrnSaver, nodePackages,
|
||||
maxRam ? "1024m" }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "6.6.0";
|
||||
rev = "1506661200660_4347";
|
||||
pname = "CrashPlanSmb";
|
||||
name = "${pname}_${version}_${rev}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://web-eam-msp.crashplanpro.com/client/installers/${name}_Linux.tgz";
|
||||
sha256 = "1zzx60fpmi2nlzpq80x4hfgspsrgd7ycfcvc6w391wxr0qzf2i9k";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper cpio nodePackages.asar ];
|
||||
buildInputs = [ getopt which ];
|
||||
|
||||
vardir = "/var/lib/crashplan";
|
||||
manifestdir = "${vardir}/manifest";
|
||||
|
||||
postPatch = ''
|
||||
# patch scripts/CrashPlanEngine
|
||||
substituteInPlace scripts/CrashPlanEngine \
|
||||
--replace /bin/ps ${procps}/bin/ps \
|
||||
--replace awk ${gawk}/bin/awk \
|
||||
--replace '`sed' '`${gnused}/bin/sed' \
|
||||
--replace grep ${gnugrep}/bin/grep \
|
||||
--replace TARGETDIR/log VARDIR/log \
|
||||
--replace TARGETDIR/\''${NAME} VARDIR/\''${NAME} \
|
||||
--replace \$TARGETDIR/bin/run.conf $out/bin/run.conf \
|
||||
--replace \$VARDIR ${vardir}
|
||||
|
||||
# patch scripts/CrashPlanDesktop
|
||||
substituteInPlace scripts/CrashPlanDesktop \
|
||||
--replace awk ${gawk}/bin/awk \
|
||||
--replace "\"\$SCRIPTDIR/..\"" "$out" \
|
||||
--replace "\$(dirname \$SCRIPT)" "$out" \
|
||||
--replace "\''${TARGETDIR}/log" ${vardir}/log \
|
||||
--replace "\''${TARGETDIR}" "$out"
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir $out
|
||||
zcat -v ${pname}_${version}.cpi | (cd $out; cpio -i -d -v --no-preserve-owner)
|
||||
|
||||
install -D -m 755 scripts/CrashPlanDesktop $out/bin/CrashPlanDesktop
|
||||
install -D -m 755 scripts/CrashPlanEngine $out/bin/CrashPlanEngine
|
||||
install -D -m 644 scripts/run.conf $out/bin/run.conf
|
||||
install -D -m 644 scripts/CrashPlan.desktop $out/share/applications/CrashPlan.desktop
|
||||
|
||||
# unpack, patch and repack app.asar to stop electron from creating /usr/local/crashplan/log to store the ui logs.
|
||||
asar e $out/app.asar $out/app.asar-unpacked
|
||||
rm -v $out/app.asar
|
||||
substituteInPlace $out/app.asar-unpacked/shared_modules/shell/platform_paths.js \
|
||||
--replace "getLogFileParentPath();" "\"$vardir/log\";"
|
||||
asar p $out/app.asar-unpacked $out/app.asar
|
||||
|
||||
mv -v $out/*.asar $out/electron/resources
|
||||
chmod 755 "$out/electron/crashplan"
|
||||
|
||||
rm -r $out/log
|
||||
mv -v $out/conf $out/conf.template
|
||||
ln -s $vardir/log $out/log
|
||||
ln -s $vardir/cache $out/cache
|
||||
ln -s $vardir/conf $out/conf
|
||||
|
||||
substituteInPlace $out/bin/run.conf \
|
||||
--replace "-Xmx1024m" "-Xmx${maxRam}"
|
||||
|
||||
echo "JAVACOMMON=${jre}/bin/java" > $out/install.vars
|
||||
echo "APP_BASENAME=CrashPlan" >> $out/install.vars
|
||||
echo "TARGETDIR=$out" >> $out/install.vars
|
||||
echo "BINSDIR=$out/bin" >> $out/install.vars
|
||||
echo "MANIFESTDIR=${manifestdir}" >> $out/install.vars
|
||||
echo "VARDIR=${vardir}" >> $out/install.vars
|
||||
echo "INITDIR=" >> $out/install.vars
|
||||
echo "RUNLVLDIR=" >> $out/install.vars
|
||||
echo "INSTALLDATE=" >> $out/install.vars
|
||||
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
patchelf --set-interpreter ${stdenv.glibc}/lib/ld-linux-x86-64.so.2 $out/electron/crashplan
|
||||
wrapProgram $out/bin/CrashPlanDesktop --prefix LD_LIBRARY_PATH ":" "${stdenv.lib.makeLibraryPath [
|
||||
stdenv.cc.cc.lib gtk2 atk glib pango gdk_pixbuf cairo freetype
|
||||
fontconfig dbus gconf nss nspr alsaLib cups expat libudev
|
||||
libX11 libxcb libXi libXcursor libXdamage libXrandr libXcomposite
|
||||
libXext libXfixes libXrender libXtst libXScrnSaver]}"
|
||||
'';
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "An online backup solution";
|
||||
homepage = http://www.crashplan.com/business/;
|
||||
license = licenses.unfree;
|
||||
maintainers = with maintainers; [ xvapx ];
|
||||
};
|
||||
|
||||
}
|
@ -4,15 +4,15 @@ with stdenv.lib;
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "kakoune-unstable-${version}";
|
||||
version = "2017-04-12";
|
||||
version = "2018-02-15";
|
||||
src = fetchFromGitHub {
|
||||
repo = "kakoune";
|
||||
owner = "mawww";
|
||||
rev = "7482d117cc85523e840dff595134dcb9cdc62207";
|
||||
sha256 = "08j611y192n9vln9i94ldlvz3k0sg79dkmfc0b1vczrmaxhpgpfh";
|
||||
rev = "f5e39972eb525166dc5b1d963067f79990991a75";
|
||||
sha256 = "160a302xg6nfzx49dkis6ij20kyzr63kxvcv8ld3l07l8k69g80r";
|
||||
};
|
||||
nativeBuildInputs = [ pkgconfig ];
|
||||
buildInputs = [ ncurses boost asciidoc docbook_xsl libxslt ];
|
||||
buildInputs = [ ncurses asciidoc docbook_xsl libxslt ];
|
||||
|
||||
postPatch = ''
|
||||
export PREFIX=$out
|
||||
|
@ -1,14 +1,14 @@
|
||||
{ stdenv, fetchFromGitHub, pythonPackages, gnome2, keybinder }:
|
||||
|
||||
pythonPackages.buildPythonApplication rec {
|
||||
ver = "0.92";
|
||||
ver = "0.93";
|
||||
name = "dockbarx-${ver}";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "M7S";
|
||||
repo = "dockbarx";
|
||||
rev = ver;
|
||||
sha256 = "17n7jc3bk3f2i0i1ddpp05bakifc8y5xppads7ihpkj3qw9g35vl";
|
||||
sha256 = "1h1g2vag5vnx87sa1f0qi8rq7wlr2ymvkrdr08kk7cma4wk0x6hg";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
@ -1,7 +0,0 @@
|
||||
source 'https://rubygems.org'
|
||||
gem 'jekyll'
|
||||
gem 'jekyll-feed'
|
||||
gem 'jekyll-paginate'
|
||||
gem 'rdiscount'
|
||||
gem 'RedCloth'
|
||||
gem 'minima'
|
@ -1,59 +0,0 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
RedCloth (4.3.2)
|
||||
addressable (2.5.0)
|
||||
public_suffix (~> 2.0, >= 2.0.2)
|
||||
colorator (1.1.0)
|
||||
ffi (1.9.18)
|
||||
forwardable-extended (2.6.0)
|
||||
jekyll (3.4.1)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 1.1)
|
||||
kramdown (~> 1.3)
|
||||
liquid (~> 3.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pathutil (~> 0.9)
|
||||
rouge (~> 1.7)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-feed (0.9.1)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-sass-converter (1.5.0)
|
||||
sass (~> 3.4)
|
||||
jekyll-watch (1.5.0)
|
||||
listen (~> 3.0, < 3.1)
|
||||
kramdown (1.13.2)
|
||||
liquid (3.0.6)
|
||||
listen (3.0.8)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
mercenary (0.3.6)
|
||||
minima (2.1.0)
|
||||
jekyll (~> 3.3)
|
||||
pathutil (0.14.0)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (2.0.5)
|
||||
rb-fsevent (0.9.8)
|
||||
rb-inotify (0.9.8)
|
||||
ffi (>= 0.5.0)
|
||||
rdiscount (2.2.0.1)
|
||||
rouge (1.11.1)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.4.23)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
RedCloth
|
||||
jekyll
|
||||
jekyll-feed
|
||||
jekyll-paginate
|
||||
minima
|
||||
rdiscount
|
||||
|
||||
BUNDLED WITH
|
||||
1.14.4
|
10
pkgs/applications/misc/jekyll/basic/Gemfile
Normal file
10
pkgs/applications/misc/jekyll/basic/Gemfile
Normal file
@ -0,0 +1,10 @@
|
||||
source "https://rubygems.org"
|
||||
gem "jekyll"
|
||||
# jekyll alone might be enough for most use-cases
|
||||
gem "rouge"
|
||||
gem "activesupport", "~> 4.2"
|
||||
gem "jekyll-avatar"
|
||||
gem "jekyll-mentions"
|
||||
gem "jekyll-seo-tag"
|
||||
gem "jekyll-sitemap"
|
||||
gem "jemoji"
|
101
pkgs/applications/misc/jekyll/basic/Gemfile.lock
Normal file
101
pkgs/applications/misc/jekyll/basic/Gemfile.lock
Normal file
@ -0,0 +1,101 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (4.2.10)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
addressable (2.5.2)
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.0.5)
|
||||
em-websocket (0.5.1)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
eventmachine (1.2.5)
|
||||
ffi (1.9.21)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (3.0.0)
|
||||
html-pipeline (2.7.1)
|
||||
activesupport (>= 2)
|
||||
nokogiri (>= 1.4)
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (0.9.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (3.7.2)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (~> 0.7)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (~> 1.14)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pathutil (~> 0.9)
|
||||
rouge (>= 1.7, < 4)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-avatar (0.5.0)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-mentions (1.2.0)
|
||||
activesupport (~> 4.0)
|
||||
html-pipeline (~> 2.3)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-sass-converter (1.5.2)
|
||||
sass (~> 3.4)
|
||||
jekyll-seo-tag (2.4.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sitemap (1.2.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-watch (2.0.0)
|
||||
listen (~> 3.0)
|
||||
jemoji (0.9.0)
|
||||
activesupport (~> 4.0, >= 4.2.9)
|
||||
gemoji (~> 3.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (~> 3.0)
|
||||
kramdown (1.16.2)
|
||||
liquid (4.0.0)
|
||||
listen (3.1.5)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
ruby_dep (~> 1.2)
|
||||
mercenary (0.3.6)
|
||||
mini_portile2 (2.3.0)
|
||||
minitest (5.11.3)
|
||||
nokogiri (1.8.2)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
pathutil (0.16.1)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (3.0.2)
|
||||
rb-fsevent (0.10.2)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 0.5.0, < 2)
|
||||
rouge (3.1.1)
|
||||
ruby_dep (1.5.0)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.5.5)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
thread_safe (0.3.6)
|
||||
tzinfo (1.2.5)
|
||||
thread_safe (~> 0.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
activesupport (~> 4.2)
|
||||
jekyll
|
||||
jekyll-avatar
|
||||
jekyll-mentions
|
||||
jekyll-seo-tag
|
||||
jekyll-sitemap
|
||||
jemoji
|
||||
rouge
|
||||
|
||||
BUNDLED WITH
|
||||
1.14.6
|
326
pkgs/applications/misc/jekyll/basic/gemset.nix
Normal file
326
pkgs/applications/misc/jekyll/basic/gemset.nix
Normal file
@ -0,0 +1,326 @@
|
||||
{
|
||||
activesupport = {
|
||||
dependencies = ["i18n" "minitest" "thread_safe" "tzinfo"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0s12j8vl8vrxfngkdlz9g8bpz9akq1z42d57mx5r537b2pji8nr7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.2.10";
|
||||
};
|
||||
addressable = {
|
||||
dependencies = ["public_suffix"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.5.2";
|
||||
};
|
||||
colorator = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.0";
|
||||
};
|
||||
concurrent-ruby = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "183lszf5gx84kcpb779v6a2y0mx9sssy8dgppng1z9a505nj1qcf";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.5";
|
||||
};
|
||||
em-websocket = {
|
||||
dependencies = ["eventmachine" "http_parser.rb"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1bsw8vjz0z267j40nhbmrvfz7dvacq4p0pagvyp17jif6mj6v7n3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.5.1";
|
||||
};
|
||||
eventmachine = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "075hdw0fgzldgss3xaqm2dk545736khcvv1fmzbf1sgdlkyh1v8z";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.5";
|
||||
};
|
||||
ffi = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0c2dl10pi6a30kcvx2s6p2v1wb4kbm48iv38kmz2ff600nirhpb8";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.9.21";
|
||||
};
|
||||
forwardable-extended = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.6.0";
|
||||
};
|
||||
gemoji = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1h85qpn2xbmsn8ssf2fqzlqg181j000m5z4l3g26r7vblncg162d";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.0";
|
||||
};
|
||||
html-pipeline = {
|
||||
dependencies = ["activesupport" "nokogiri"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0hkx70z9ijgnncmrna9qdh9ajn9m7v146k91j257lrzyq2f6jdjd";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.7.1";
|
||||
};
|
||||
"http_parser.rb" = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.6.0";
|
||||
};
|
||||
i18n = {
|
||||
dependencies = ["concurrent-ruby"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.5";
|
||||
};
|
||||
jekyll = {
|
||||
dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "05f61rqwz1isci7by34zyz38ah2rv5b8i5h618cxcl97hwqps8n2";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.7.2";
|
||||
};
|
||||
jekyll-avatar = {
|
||||
dependencies = ["jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0y2w7pnahkm3ddxrq589wv1w53ay7p1pvfs6khcmh6wq85r6wpsf";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.5.0";
|
||||
};
|
||||
jekyll-mentions = {
|
||||
dependencies = ["activesupport" "html-pipeline" "jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "00nqm1ng4iiibmv4vx0ayzq7fqm2sm1af98r4ykvld6asqj5qkyd";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.0";
|
||||
};
|
||||
jekyll-sass-converter = {
|
||||
dependencies = ["sass"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "008ikh5fk0n6ri54mylcl8jn0mq8p2nfyfqif2q3pp0lwilkcxsk";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.5.2";
|
||||
};
|
||||
jekyll-seo-tag = {
|
||||
dependencies = ["jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0f9b2mvmx57zj49afb3x8cmzdmb1kh4rbpbv3v7w5bh47g2c9big";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.4.0";
|
||||
};
|
||||
jekyll-sitemap = {
|
||||
dependencies = ["jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0xy93ysl1q8r4xhbnffycvsslja0dskh2z2pl1jnykwsy27dc89n";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.0";
|
||||
};
|
||||
jekyll-watch = {
|
||||
dependencies = ["listen"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0m7scvj3ki8bmyx5v8pzibpg6my10nycnc28lip98dskf8iakprp";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.0";
|
||||
};
|
||||
jemoji = {
|
||||
dependencies = ["activesupport" "gemoji" "html-pipeline" "jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0acmi7mgr844dmzgfi9flcqkkb0jh5l21h579cidxwf1409w588b";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.0";
|
||||
};
|
||||
kramdown = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0mkrqpp01rrfn3rx6wwsjizyqmafp0vgg8ja1dvbjs185r5zw3za";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.16.2";
|
||||
};
|
||||
liquid = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "17fa0jgwm9a935fyvzy8bysz7j5n1vf1x2wzqkdfd5k08dbw3x2y";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.0.0";
|
||||
};
|
||||
listen = {
|
||||
dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.1.5";
|
||||
};
|
||||
mercenary = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "10la0xw82dh5mqab8bl0dk21zld63cqxb1g16fk8cb39ylc4n21a";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.3.6";
|
||||
};
|
||||
mini_portile2 = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.3.0";
|
||||
};
|
||||
minitest = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq";
|
||||
type = "gem";
|
||||
};
|
||||
version = "5.11.3";
|
||||
};
|
||||
nokogiri = {
|
||||
dependencies = ["mini_portile2"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "05fm3xh462glvs0rwnfmc1spmgl4ljg2giifynbmwwqvl42zaaiq";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.8.2";
|
||||
};
|
||||
pathutil = {
|
||||
dependencies = ["forwardable-extended"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0wc18ms1rzi44lpjychyw2a96jcmgxqdvy2949r4vvb5f4p0lgvz";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.16.1";
|
||||
};
|
||||
public_suffix = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1x5h1dh1i3gwc01jbg01rly2g6a1qwhynb1s8a30ic507z1nh09s";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.2";
|
||||
};
|
||||
rb-fsevent = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1fbpmjypwxkb8r7y1kmhmyp6gawa4byw0yb3jc3dn9ly4ld9lizf";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.10.2";
|
||||
};
|
||||
rb-inotify = {
|
||||
dependencies = ["ffi"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.10";
|
||||
};
|
||||
rouge = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1sfhy0xxqjnzqa7qxmpz1bmy0mzcr55qyvi410gsb6d6i4ialbw3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.1.1";
|
||||
};
|
||||
ruby_dep = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.5.0";
|
||||
};
|
||||
safe_yaml = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.4";
|
||||
};
|
||||
sass = {
|
||||
dependencies = ["sass-listen"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "10401m2xlv6vaxfwzy4xxmk51ddcnkvwi918cw3jkki0qqdl7d8v";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.5.5";
|
||||
};
|
||||
sass-listen = {
|
||||
dependencies = ["rb-fsevent" "rb-inotify"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.0.0";
|
||||
};
|
||||
thread_safe = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.3.6";
|
||||
};
|
||||
tzinfo = {
|
||||
dependencies = ["thread_safe"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.5";
|
||||
};
|
||||
}
|
@ -1,19 +1,34 @@
|
||||
{ stdenv, lib, bundlerEnv, ruby }:
|
||||
{ lib, bundlerEnv, ruby
|
||||
, withOptionalDependencies ? false
|
||||
}:
|
||||
|
||||
bundlerEnv rec {
|
||||
name = "jekyll-${version}";
|
||||
name = pname + "-" + version;
|
||||
pname = "jekyll";
|
||||
version = (import
|
||||
(if withOptionalDependencies
|
||||
then ./full/gemset.nix
|
||||
else ./basic/gemset.nix))
|
||||
.jekyll.version;
|
||||
|
||||
version = (import gemset).jekyll.version;
|
||||
inherit ruby;
|
||||
gemfile = ./Gemfile;
|
||||
lockfile = ./Gemfile.lock;
|
||||
gemset = ./gemset.nix;
|
||||
gemdir = if withOptionalDependencies
|
||||
then ./full
|
||||
else ./basic;
|
||||
|
||||
meta = with lib; {
|
||||
description = "Simple, blog aware, static site generator";
|
||||
homepage = https://jekyllrb.com/;
|
||||
description = "A blog-aware, static site generator, written in Ruby";
|
||||
longDescription = ''
|
||||
Jekyll is a simple, blog-aware, static site generator, written in Ruby.
|
||||
Think of it like a file-based CMS, without all the complexity. Jekyll
|
||||
takes your content, renders Markdown and Liquid templates, and spits out a
|
||||
complete, static website ready to be served by Apache, Nginx or another
|
||||
web server. Jekyll is the engine behind GitHub Pages, which you can use to
|
||||
host sites right from your GitHub repositories.
|
||||
'';
|
||||
homepage = https://jekyllrb.com/;
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ pesterhazy ];
|
||||
maintainers = with maintainers; [ primeos pesterhazy ];
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
}
|
||||
|
30
pkgs/applications/misc/jekyll/full/Gemfile
Normal file
30
pkgs/applications/misc/jekyll/full/Gemfile
Normal file
@ -0,0 +1,30 @@
|
||||
source "https://rubygems.org"
|
||||
gem "jekyll"
|
||||
gem "rouge"
|
||||
gem "activesupport", "~> 4.2"
|
||||
gem "jekyll-avatar"
|
||||
gem "jekyll-mentions"
|
||||
gem "jekyll-seo-tag"
|
||||
gem "jekyll-sitemap"
|
||||
gem "jemoji"
|
||||
# Optional dependencies:
|
||||
gem "coderay", "~> 1.1.0"
|
||||
gem "jekyll-coffeescript"
|
||||
gem "jekyll-docs"
|
||||
gem "jekyll-feed", "~> 0.9"
|
||||
gem "jekyll-gist"
|
||||
gem "jekyll-paginate"
|
||||
gem "jekyll-redirect-from"
|
||||
gem "kramdown", "~> 1.14"
|
||||
gem "mime-types", "~> 3.0"
|
||||
gem "rdoc", RUBY_VERSION >= "2.2.2" ? "~> 6.0" : "~> 5.1"
|
||||
gem "tomlrb", "~> 1.2"
|
||||
|
||||
platform :ruby, :mswin, :mingw, :x64_mingw do
|
||||
gem "classifier-reborn", "~> 2.2.0"
|
||||
gem "liquid-c", "~> 3.0"
|
||||
gem "pygments.rb", "~> 1.0"
|
||||
gem "rdiscount", "~> 2.0"
|
||||
gem "redcarpet", "~> 3.2", ">= 3.2.3"
|
||||
gem "yajl-ruby", "~> 1.3.1"
|
||||
end
|
160
pkgs/applications/misc/jekyll/full/Gemfile.lock
Normal file
160
pkgs/applications/misc/jekyll/full/Gemfile.lock
Normal file
@ -0,0 +1,160 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (4.2.10)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
addressable (2.5.2)
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
classifier-reborn (2.2.0)
|
||||
fast-stemmer (~> 1.0)
|
||||
coderay (1.1.2)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.11.1)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.0.5)
|
||||
em-websocket (0.5.1)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
eventmachine (1.2.5)
|
||||
execjs (2.7.0)
|
||||
faraday (0.14.0)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
fast-stemmer (1.0.2)
|
||||
ffi (1.9.21)
|
||||
forwardable-extended (2.6.0)
|
||||
gemoji (3.0.0)
|
||||
html-pipeline (2.7.1)
|
||||
activesupport (>= 2)
|
||||
nokogiri (>= 1.4)
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (0.9.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (3.7.2)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (~> 0.7)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (~> 1.14)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pathutil (~> 0.9)
|
||||
rouge (>= 1.7, < 4)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-avatar (0.5.0)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-coffeescript (1.1.1)
|
||||
coffee-script (~> 2.2)
|
||||
coffee-script-source (~> 1.11.1)
|
||||
jekyll-docs (3.7.2)
|
||||
jekyll (= 3.7.2)
|
||||
jekyll-feed (0.9.3)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-gist (1.5.0)
|
||||
octokit (~> 4.2)
|
||||
jekyll-mentions (1.2.0)
|
||||
activesupport (~> 4.0)
|
||||
html-pipeline (~> 2.3)
|
||||
jekyll (~> 3.0)
|
||||
jekyll-paginate (1.1.0)
|
||||
jekyll-redirect-from (0.13.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sass-converter (1.5.2)
|
||||
sass (~> 3.4)
|
||||
jekyll-seo-tag (2.4.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sitemap (1.2.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-watch (2.0.0)
|
||||
listen (~> 3.0)
|
||||
jemoji (0.9.0)
|
||||
activesupport (~> 4.0, >= 4.2.9)
|
||||
gemoji (~> 3.0)
|
||||
html-pipeline (~> 2.2)
|
||||
jekyll (~> 3.0)
|
||||
kramdown (1.16.2)
|
||||
liquid (4.0.0)
|
||||
liquid-c (3.0.0)
|
||||
liquid (>= 3.0.0)
|
||||
listen (3.1.5)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
ruby_dep (~> 1.2)
|
||||
mercenary (0.3.6)
|
||||
mime-types (3.1)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2016.0521)
|
||||
mini_portile2 (2.3.0)
|
||||
minitest (5.11.3)
|
||||
multi_json (1.13.1)
|
||||
multipart-post (2.0.0)
|
||||
nokogiri (1.8.2)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
octokit (4.8.0)
|
||||
sawyer (~> 0.8.0, >= 0.5.3)
|
||||
pathutil (0.16.1)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (3.0.2)
|
||||
pygments.rb (1.2.1)
|
||||
multi_json (>= 1.0.0)
|
||||
rb-fsevent (0.10.2)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 0.5.0, < 2)
|
||||
rdiscount (2.2.0.1)
|
||||
rdoc (6.0.1)
|
||||
redcarpet (3.4.0)
|
||||
rouge (3.1.1)
|
||||
ruby_dep (1.5.0)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.5.5)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
sawyer (0.8.1)
|
||||
addressable (>= 2.3.5, < 2.6)
|
||||
faraday (~> 0.8, < 1.0)
|
||||
thread_safe (0.3.6)
|
||||
tomlrb (1.2.6)
|
||||
tzinfo (1.2.5)
|
||||
thread_safe (~> 0.1)
|
||||
yajl-ruby (1.3.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
activesupport (~> 4.2)
|
||||
classifier-reborn (~> 2.2.0)
|
||||
coderay (~> 1.1.0)
|
||||
jekyll
|
||||
jekyll-avatar
|
||||
jekyll-coffeescript
|
||||
jekyll-docs
|
||||
jekyll-feed (~> 0.9)
|
||||
jekyll-gist
|
||||
jekyll-mentions
|
||||
jekyll-paginate
|
||||
jekyll-redirect-from
|
||||
jekyll-seo-tag
|
||||
jekyll-sitemap
|
||||
jemoji
|
||||
kramdown (~> 1.14)
|
||||
liquid-c (~> 3.0)
|
||||
mime-types (~> 3.0)
|
||||
pygments.rb (~> 1.0)
|
||||
rdiscount (~> 2.0)
|
||||
rdoc (~> 6.0)
|
||||
redcarpet (~> 3.2, >= 3.2.3)
|
||||
rouge
|
||||
tomlrb (~> 1.2)
|
||||
yajl-ruby (~> 1.3.1)
|
||||
|
||||
BUNDLED WITH
|
||||
1.14.6
|
547
pkgs/applications/misc/jekyll/full/gemset.nix
Normal file
547
pkgs/applications/misc/jekyll/full/gemset.nix
Normal file
@ -0,0 +1,547 @@
|
||||
{
|
||||
activesupport = {
|
||||
dependencies = ["i18n" "minitest" "thread_safe" "tzinfo"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0s12j8vl8vrxfngkdlz9g8bpz9akq1z42d57mx5r537b2pji8nr7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.2.10";
|
||||
};
|
||||
addressable = {
|
||||
dependencies = ["public_suffix"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0viqszpkggqi8hq87pqp0xykhvz60g99nwmkwsb0v45kc2liwxvk";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.5.2";
|
||||
};
|
||||
classifier-reborn = {
|
||||
dependencies = ["fast-stemmer"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "04nxmm5b7j7r0ij9pcpdr7xqpig559gfzrw042ycxcfyav2pv6ij";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.2.0";
|
||||
};
|
||||
coderay = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "15vav4bhcc2x3jmi3izb11l4d9f3xv8hp2fszb7iqmpsccv1pz4y";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.2";
|
||||
};
|
||||
coffee-script = {
|
||||
dependencies = ["coffee-script-source" "execjs"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0rc7scyk7mnpfxqv5yy4y5q1hx3i7q3ahplcp4bq2g5r24g2izl2";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.4.1";
|
||||
};
|
||||
coffee-script-source = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0xfshhlz808f8639wc88wgls1mww35sid8rd55vn0a4yqajf4vh9";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.11.1";
|
||||
};
|
||||
colorator = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.0";
|
||||
};
|
||||
concurrent-ruby = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "183lszf5gx84kcpb779v6a2y0mx9sssy8dgppng1z9a505nj1qcf";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.5";
|
||||
};
|
||||
em-websocket = {
|
||||
dependencies = ["eventmachine" "http_parser.rb"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1bsw8vjz0z267j40nhbmrvfz7dvacq4p0pagvyp17jif6mj6v7n3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.5.1";
|
||||
};
|
||||
eventmachine = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "075hdw0fgzldgss3xaqm2dk545736khcvv1fmzbf1sgdlkyh1v8z";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.5";
|
||||
};
|
||||
execjs = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1yz55sf2nd3l666ms6xr18sm2aggcvmb8qr3v53lr4rir32y1yp1";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.7.0";
|
||||
};
|
||||
faraday = {
|
||||
dependencies = ["multipart-post"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1c3x3s8vb5nf7inyfvhdxwa4q3swmnacpxby6pish5fgmhws7zrr";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.14.0";
|
||||
};
|
||||
fast-stemmer = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0688clyk4xxh3kdb18vi089k90mca8ji5fwaknh3da5wrzcrzanh";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.2";
|
||||
};
|
||||
ffi = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0c2dl10pi6a30kcvx2s6p2v1wb4kbm48iv38kmz2ff600nirhpb8";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.9.21";
|
||||
};
|
||||
forwardable-extended = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.6.0";
|
||||
};
|
||||
gemoji = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1h85qpn2xbmsn8ssf2fqzlqg181j000m5z4l3g26r7vblncg162d";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.0";
|
||||
};
|
||||
html-pipeline = {
|
||||
dependencies = ["activesupport" "nokogiri"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0hkx70z9ijgnncmrna9qdh9ajn9m7v146k91j257lrzyq2f6jdjd";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.7.1";
|
||||
};
|
||||
"http_parser.rb" = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.6.0";
|
||||
};
|
||||
i18n = {
|
||||
dependencies = ["concurrent-ruby"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "038qvz7kd3cfxk8bvagqhakx68pfbnmghpdkx7573wbf0maqp9a3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.5";
|
||||
};
|
||||
jekyll = {
|
||||
dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "05f61rqwz1isci7by34zyz38ah2rv5b8i5h618cxcl97hwqps8n2";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.7.2";
|
||||
};
|
||||
jekyll-avatar = {
|
||||
dependencies = ["jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0y2w7pnahkm3ddxrq589wv1w53ay7p1pvfs6khcmh6wq85r6wpsf";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.5.0";
|
||||
};
|
||||
jekyll-coffeescript = {
|
||||
dependencies = ["coffee-script" "coffee-script-source"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "06qf4j9f6ysjb4bq6gsdaiz2ksmhc5yb484v458ra3s6ybccqvvy";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.1";
|
||||
};
|
||||
jekyll-docs = {
|
||||
dependencies = ["jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0dw8pvxr0q02rivc0n0v4w6151zi6s212xwl27iam6pjc8skbg9b";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.7.2";
|
||||
};
|
||||
jekyll-feed = {
|
||||
dependencies = ["jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0kr3kyaq4z3jixn6ay8h16bxxlv6slvvp7nqnl05jdymhkl0bmm9";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.3";
|
||||
};
|
||||
jekyll-gist = {
|
||||
dependencies = ["octokit"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "03wz9j6yq3552nzf4g71qrdm9pfdgbm68abml9sjjgiaan1n8ns9";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.5.0";
|
||||
};
|
||||
jekyll-mentions = {
|
||||
dependencies = ["activesupport" "html-pipeline" "jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "00nqm1ng4iiibmv4vx0ayzq7fqm2sm1af98r4ykvld6asqj5qkyd";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.0";
|
||||
};
|
||||
jekyll-paginate = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0r7bcs8fq98zldih4787zk5i9w24nz5wa26m84ssja95n3sas2l8";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.0";
|
||||
};
|
||||
jekyll-redirect-from = {
|
||||
dependencies = ["jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1crm5xqgv5asbbbaxfgky4ppib5rih59yzpa3yc94gh8b9cjixrj";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.13.0";
|
||||
};
|
||||
jekyll-sass-converter = {
|
||||
dependencies = ["sass"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "008ikh5fk0n6ri54mylcl8jn0mq8p2nfyfqif2q3pp0lwilkcxsk";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.5.2";
|
||||
};
|
||||
jekyll-seo-tag = {
|
||||
dependencies = ["jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0f9b2mvmx57zj49afb3x8cmzdmb1kh4rbpbv3v7w5bh47g2c9big";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.4.0";
|
||||
};
|
||||
jekyll-sitemap = {
|
||||
dependencies = ["jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0xy93ysl1q8r4xhbnffycvsslja0dskh2z2pl1jnykwsy27dc89n";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.0";
|
||||
};
|
||||
jekyll-watch = {
|
||||
dependencies = ["listen"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0m7scvj3ki8bmyx5v8pzibpg6my10nycnc28lip98dskf8iakprp";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.0";
|
||||
};
|
||||
jemoji = {
|
||||
dependencies = ["activesupport" "gemoji" "html-pipeline" "jekyll"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0acmi7mgr844dmzgfi9flcqkkb0jh5l21h579cidxwf1409w588b";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.0";
|
||||
};
|
||||
kramdown = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0mkrqpp01rrfn3rx6wwsjizyqmafp0vgg8ja1dvbjs185r5zw3za";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.16.2";
|
||||
};
|
||||
liquid = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "17fa0jgwm9a935fyvzy8bysz7j5n1vf1x2wzqkdfd5k08dbw3x2y";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.0.0";
|
||||
};
|
||||
liquid-c = {
|
||||
dependencies = ["liquid"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0a5n7q314ma32y7v9a1g6ps60b14zfn2q4nip4j5aknblz51v7gi";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.0";
|
||||
};
|
||||
listen = {
|
||||
dependencies = ["rb-fsevent" "rb-inotify" "ruby_dep"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "01v5mrnfqm6sgm8xn2v5swxsn1wlmq7rzh2i48d4jzjsc7qvb6mx";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.1.5";
|
||||
};
|
||||
mercenary = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "10la0xw82dh5mqab8bl0dk21zld63cqxb1g16fk8cb39ylc4n21a";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.3.6";
|
||||
};
|
||||
mime-types = {
|
||||
dependencies = ["mime-types-data"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0087z9kbnlqhci7fxh9f6il63hj1k02icq2rs0c6cppmqchr753m";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.1";
|
||||
};
|
||||
mime-types-data = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "04my3746hwa4yvbx1ranhfaqkgf6vavi1kyijjnw8w3dy37vqhkm";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.2016.0521";
|
||||
};
|
||||
mini_portile2 = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "13d32jjadpjj6d2wdhkfpsmy68zjx90p49bgf8f7nkpz86r1fr11";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.3.0";
|
||||
};
|
||||
minitest = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0icglrhghgwdlnzzp4jf76b0mbc71s80njn5afyfjn4wqji8mqbq";
|
||||
type = "gem";
|
||||
};
|
||||
version = "5.11.3";
|
||||
};
|
||||
multi_json = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.13.1";
|
||||
};
|
||||
multipart-post = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.0";
|
||||
};
|
||||
nokogiri = {
|
||||
dependencies = ["mini_portile2"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "05fm3xh462glvs0rwnfmc1spmgl4ljg2giifynbmwwqvl42zaaiq";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.8.2";
|
||||
};
|
||||
octokit = {
|
||||
dependencies = ["sawyer"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1hp77svmpxcwnfajb324i1g2b7jazg23fn4ccjr5y3lww0rnj1dg";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.8.0";
|
||||
};
|
||||
pathutil = {
|
||||
dependencies = ["forwardable-extended"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0wc18ms1rzi44lpjychyw2a96jcmgxqdvy2949r4vvb5f4p0lgvz";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.16.1";
|
||||
};
|
||||
public_suffix = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1x5h1dh1i3gwc01jbg01rly2g6a1qwhynb1s8a30ic507z1nh09s";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.2";
|
||||
};
|
||||
"pygments.rb" = {
|
||||
dependencies = ["multi_json"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0lbvnwvz770ambm4d6lxgc2097rydn5rcc5d6986bnkzyxfqqjnv";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.1";
|
||||
};
|
||||
rb-fsevent = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1fbpmjypwxkb8r7y1kmhmyp6gawa4byw0yb3jc3dn9ly4ld9lizf";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.10.2";
|
||||
};
|
||||
rb-inotify = {
|
||||
dependencies = ["ffi"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0yfsgw5n7pkpyky6a9wkf1g9jafxb0ja7gz0qw0y14fd2jnzfh71";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.10";
|
||||
};
|
||||
rdiscount = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1arvk3k06prxasq1djbj065ixar4zl171340g7wr1ww4gj9makx3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.2.0.1";
|
||||
};
|
||||
rdoc = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1vzhv04lp76iax258dh47zsxhjg34r9sg76vgikbyfywjzflvfyj";
|
||||
type = "gem";
|
||||
};
|
||||
version = "6.0.1";
|
||||
};
|
||||
redcarpet = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0h9qz2hik4s9knpmbwrzb3jcp3vc5vygp9ya8lcpl7f1l9khmcd7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.4.0";
|
||||
};
|
||||
rouge = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1sfhy0xxqjnzqa7qxmpz1bmy0mzcr55qyvi410gsb6d6i4ialbw3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.1.1";
|
||||
};
|
||||
ruby_dep = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1c1bkl97i9mkcvkn1jks346ksnvnnp84cs22gwl0vd7radybrgy5";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.5.0";
|
||||
};
|
||||
safe_yaml = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.4";
|
||||
};
|
||||
sass = {
|
||||
dependencies = ["sass-listen"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "10401m2xlv6vaxfwzy4xxmk51ddcnkvwi918cw3jkki0qqdl7d8v";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.5.5";
|
||||
};
|
||||
sass-listen = {
|
||||
dependencies = ["rb-fsevent" "rb-inotify"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.0.0";
|
||||
};
|
||||
sawyer = {
|
||||
dependencies = ["addressable" "faraday"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0sv1463r7bqzvx4drqdmd36m7rrv6sf1v3c6vswpnq3k6vdw2dvd";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.8.1";
|
||||
};
|
||||
thread_safe = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.3.6";
|
||||
};
|
||||
tomlrb = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "09gh67v8s1pr7c37490sjp782gi4wf9k9cadp4l926h1sp27bcgz";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.6";
|
||||
};
|
||||
tzinfo = {
|
||||
dependencies = ["thread_safe"];
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1fjx9j327xpkkdlxwmkl3a8wqj7i4l4jwlrv3z13mg95z9wl253z";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.2.5";
|
||||
};
|
||||
yajl-ruby = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1rn4kc9fha990yd252wglh6rcyh35cavm1vpyfj8krlcwph09g30";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.3.1";
|
||||
};
|
||||
}
|
@ -1,183 +0,0 @@
|
||||
{
|
||||
addressable = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1j5r0anj8m4qlf2psnldip4b8ha2bsscv11lpdgnfh4nnchzjnxw";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.5.0";
|
||||
};
|
||||
colorator = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.0";
|
||||
};
|
||||
ffi = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "034f52xf7zcqgbvwbl20jwdyjwznvqnwpbaps9nk18v9lgb1dpx0";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.9.18";
|
||||
};
|
||||
forwardable-extended = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.6.0";
|
||||
};
|
||||
jekyll = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0qbnjx7bpshbcam6p9ss2g6gpd3gxz6h4w9yszphj3ip335yhawb";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.4.1";
|
||||
};
|
||||
jekyll-feed = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1dj62gy1jskkn703mi5h0bkg1psbpkdm2qqdw3bhjfid9358qvay";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.1";
|
||||
};
|
||||
jekyll-paginate = {
|
||||
source = {
|
||||
sha256 = "0r7bcs8fq98zldih4787zk5i9w24nz5wa26m84ssja95n3sas2l8";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.1.0";
|
||||
};
|
||||
jekyll-sass-converter = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "01m921763yfgx1gc33k5ixqz623f4c4azgnpqhgsc2q61fyfk3q1";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.5.0";
|
||||
};
|
||||
jekyll-watch = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "02rg3wi95w2l0bg1igl5k6pza723vn2b2gj975gycz1cpmhdjn6z";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.5.0";
|
||||
};
|
||||
kramdown = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1isiqc40q44zg57bd6cfnw1a2l0s2j5skw2awn2cz3gcm7wsf49d";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.13.2";
|
||||
};
|
||||
liquid = {
|
||||
source = {
|
||||
sha256 = "033png37ym4jrjz5bi7zb4ic4yxacwvnllm1xxmrnr4swgyyygc2";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.6";
|
||||
};
|
||||
listen = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1l0y7hbyfiwpvk172r28hsdqsifq1ls39hsfmzi1vy4ll0smd14i";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.0.8";
|
||||
};
|
||||
mercenary = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "10la0xw82dh5mqab8bl0dk21zld63cqxb1g16fk8cb39ylc4n21a";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.3.6";
|
||||
};
|
||||
minima = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1s7ks9fqfvqx7qicnkrg76wavg9mjas52f7iyhr89lz9mqiy7p39";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.1.0";
|
||||
};
|
||||
pathutil = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0f444wx6vjd30lkkb2zn1k5a6g33lidrpyy7lmgy66n1gsiipzn7";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.14.0";
|
||||
};
|
||||
public_suffix = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "040jf98jpp6w140ghkhw2hvc1qx41zvywx5gj7r2ylr1148qnj7q";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.0.5";
|
||||
};
|
||||
rb-fsevent = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1pdiasp9zlr306yld19szapi6kdjk38rpv1hih9x0ry40x6mb63n";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.8";
|
||||
};
|
||||
rb-inotify = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0bq14f3md5nm00kgxgf0r9lcbn0vgbwljgajif0slxcwv622fjg9";
|
||||
type = "gem";
|
||||
};
|
||||
version = "0.9.8";
|
||||
};
|
||||
rdiscount = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "1arvk3k06prxasq1djbj065ixar4zl171340g7wr1ww4gj9makx3";
|
||||
type = "gem";
|
||||
};
|
||||
version = "2.2.0.1";
|
||||
};
|
||||
RedCloth = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0m9dv7ya9q93r8x1pg2gi15rxlbck8m178j1fz7r5v6wr1avrrqy";
|
||||
type = "gem";
|
||||
};
|
||||
version = "4.3.2";
|
||||
};
|
||||
rouge = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "13amckbdknnc5491ag28y8pqbyfpbzx5n4rlmadxhd3wkrhp92c8";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.11.1";
|
||||
};
|
||||
safe_yaml = {
|
||||
source = {
|
||||
sha256 = "1hly915584hyi9q9vgd968x2nsi5yag9jyf5kq60lwzi5scr7094";
|
||||
type = "gem";
|
||||
};
|
||||
version = "1.0.4";
|
||||
};
|
||||
sass = {
|
||||
source = {
|
||||
remotes = ["https://rubygems.org"];
|
||||
sha256 = "0da4mn3n60cm1ss1pw1rrpa7fxagglxiwcgvz1asf1qgf4mvcwyr";
|
||||
type = "gem";
|
||||
};
|
||||
version = "3.4.23";
|
||||
};
|
||||
}
|
@ -7,6 +7,13 @@ let
|
||||
flinkVersion = "1.3.2";
|
||||
scalaVersion = "2.11";
|
||||
sha256 = "0mf4qz0963bflzidgslvwpdlvj9za9sj20dfybplw9lhd4sf52rp";
|
||||
hadoopBundle = "-hadoop27";
|
||||
};
|
||||
"1.4" = {
|
||||
flinkVersion = "1.4.0";
|
||||
scalaVersion = "2.11";
|
||||
sha256 = "0d80djx1im3h8mf60qzi12km1bbik8a5l3nks85jzi0r0xzfgkm6";
|
||||
hadoopBundle = "";
|
||||
};
|
||||
};
|
||||
in
|
||||
@ -17,7 +24,7 @@ stdenv.mkDerivation rec {
|
||||
name = "flink-${flinkVersion}";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://apache/flink/${name}/${name}-bin-hadoop27-scala_${scalaVersion}.tgz";
|
||||
url = "mirror://apache/flink/${name}/${name}-bin${hadoopBundle}-scala_${scalaVersion}.tgz";
|
||||
inherit sha256;
|
||||
};
|
||||
|
||||
|
@ -4,10 +4,10 @@ let
|
||||
then "linux-amd64"
|
||||
else "darwin-amd64";
|
||||
checksum = if stdenv.isLinux
|
||||
then "19sbvpll947y4dxn2dj26by2bwhcxa5nbkrq7x3cikn7z5bmj7vf"
|
||||
else "0jllj13jv8yil6iqi4xcs5v4z388h7i7hcnv98gc14spkyjshf3d";
|
||||
then "07bgny8mfdgv9f6zmk31hxhkwy90wr22js21jz679pkz3gmykxvx"
|
||||
else "1f6h96gyhsdb03am586kdqn619h4niwlj29j4bypf3yg2sar4p6x";
|
||||
pname = "helm";
|
||||
version = "2.8.0";
|
||||
version = "2.8.1";
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
name = "${pname}-${version}";
|
||||
|
@ -3,13 +3,13 @@
|
||||
let
|
||||
xorgxrdp = stdenv.mkDerivation rec {
|
||||
name = "xorgxrdp-${version}";
|
||||
version = "0.2.3";
|
||||
version = "0.2.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "neutrinolabs";
|
||||
repo = "xorgxrdp";
|
||||
rev = "v${version}";
|
||||
sha256 = "0l1b38j3q9mxyb8ffpdplbqs6rnabj92i8wngrwlkhfh2c88szn1";
|
||||
sha256 = "05ix0bvbgpg0l0f6pyxp64a4785yv16dxf522y7k84b0rag4bxr7";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig autoconf automake which libtool nasm ];
|
||||
@ -34,7 +34,7 @@ let
|
||||
};
|
||||
|
||||
xrdp = stdenv.mkDerivation rec {
|
||||
version = "0.9.3";
|
||||
version = "0.9.5";
|
||||
name = "xrdp-${version}";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
@ -42,7 +42,7 @@ let
|
||||
repo = "xrdp";
|
||||
rev = "refs/heads/runtime-cfg-path-${version}"; # Fixes https://github.com/neutrinolabs/xrdp/issues/609; not a patch on top of the official repo because "xorgxrdp.configureFlags" above includes "xrdp.src" which must be patched already
|
||||
fetchSubmodules = true;
|
||||
sha256 = "0xqyg3m688fj442zgg9fqmbz7nnzvqpd7a9ki2cwh1hyibacpmz7";
|
||||
sha256 = "1sm994dic72zvxgwxw9z6an6050976nlnnn2my42pnzj9l5842d8";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkgconfig autoconf automake which libtool nasm ];
|
||||
|
98
pkgs/applications/virtualization/qemu/riscv-initrd.patch
Normal file
98
pkgs/applications/virtualization/qemu/riscv-initrd.patch
Normal file
@ -0,0 +1,98 @@
|
||||
From 44b0f612499764dad425d467aadacb01fbd4a920 Mon Sep 17 00:00:00 2001
|
||||
From: Shea Levy <shea@shealevy.com>
|
||||
Date: Tue, 20 Feb 2018 07:59:43 -0500
|
||||
Subject: [PATCH] riscv: Respect the -initrd flag.
|
||||
|
||||
Logic for initrd start address borrowed from arm/boot.c
|
||||
---
|
||||
hw/riscv/virt.c | 49 ++++++++++++++++++++++++++++++++++++++++++++++---
|
||||
1 file changed, 46 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
|
||||
index 46d95b2b79..5c7d191a3f 100644
|
||||
--- a/hw/riscv/virt.c
|
||||
+++ b/hw/riscv/virt.c
|
||||
@@ -77,7 +77,35 @@ static uint64_t load_kernel(const char *kernel_filename)
|
||||
return kernel_entry;
|
||||
}
|
||||
|
||||
-static void create_fdt(RISCVVirtState *s, const struct MemmapEntry *memmap,
|
||||
+static hwaddr load_initrd(const char *filename, uint64_t mem_size,
|
||||
+ uint64_t kernel_entry, hwaddr *start)
|
||||
+{
|
||||
+ int size;
|
||||
+
|
||||
+ /* We want to put the initrd far enough into RAM that when the
|
||||
+ * kernel is uncompressed it will not clobber the initrd. However
|
||||
+ * on boards without much RAM we must ensure that we still leave
|
||||
+ * enough room for a decent sized initrd, and on boards with large
|
||||
+ * amounts of RAM we must avoid the initrd being so far up in RAM
|
||||
+ * that it is outside lowmem and inaccessible to the kernel.
|
||||
+ * So for boards with less than 256MB of RAM we put the initrd
|
||||
+ * halfway into RAM, and for boards with 256MB of RAM or more we put
|
||||
+ * the initrd at 128MB.
|
||||
+ */
|
||||
+ *start = kernel_entry + MIN(mem_size / 2, 128 * 1024 * 1024);
|
||||
+
|
||||
+ size = load_ramdisk(filename, *start, mem_size - *start);
|
||||
+ if (size == -1) {
|
||||
+ size = load_image_targphys(filename, *start, mem_size - *start);
|
||||
+ if (size == -1) {
|
||||
+ error_report("qemu: could not load ramdisk '%s'", filename);
|
||||
+ exit(1);
|
||||
+ }
|
||||
+ }
|
||||
+ return *start + size;
|
||||
+}
|
||||
+
|
||||
+static void *create_fdt(RISCVVirtState *s, const struct MemmapEntry *memmap,
|
||||
uint64_t mem_size, const char *cmdline)
|
||||
{
|
||||
void *fdt;
|
||||
@@ -233,6 +261,8 @@ static void create_fdt(RISCVVirtState *s, const struct MemmapEntry *memmap,
|
||||
qemu_fdt_setprop_string(fdt, "/chosen", "stdout-path", nodename);
|
||||
qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", cmdline);
|
||||
g_free(nodename);
|
||||
+
|
||||
+ return fdt;
|
||||
}
|
||||
|
||||
static void riscv_virt_board_init(MachineState *machine)
|
||||
@@ -246,6 +276,7 @@ static void riscv_virt_board_init(MachineState *machine)
|
||||
char *plic_hart_config;
|
||||
size_t plic_hart_config_len;
|
||||
int i;
|
||||
+ void *fdt;
|
||||
|
||||
/* Initialize SOC */
|
||||
object_initialize(&s->soc, sizeof(s->soc), TYPE_RISCV_HART_ARRAY);
|
||||
@@ -265,7 +296,8 @@ static void riscv_virt_board_init(MachineState *machine)
|
||||
main_mem);
|
||||
|
||||
/* create device tree */
|
||||
- create_fdt(s, memmap, machine->ram_size, machine->kernel_cmdline);
|
||||
+ fdt = create_fdt(s, memmap, machine->ram_size,
|
||||
+ machine->kernel_cmdline);
|
||||
|
||||
/* boot rom */
|
||||
memory_region_init_ram(boot_rom, NULL, "riscv_virt_board.bootrom",
|
||||
@@ -273,7 +305,18 @@ static void riscv_virt_board_init(MachineState *machine)
|
||||
memory_region_add_subregion(system_memory, 0x0, boot_rom);
|
||||
|
||||
if (machine->kernel_filename) {
|
||||
- load_kernel(machine->kernel_filename);
|
||||
+ uint64_t kernel_entry = load_kernel(machine->kernel_filename);
|
||||
+
|
||||
+ if (machine->initrd_filename) {
|
||||
+ hwaddr start;
|
||||
+ hwaddr end = load_initrd(machine->initrd_filename,
|
||||
+ machine->ram_size, kernel_entry,
|
||||
+ &start);
|
||||
+ qemu_fdt_setprop_cell(fdt, "/chosen",
|
||||
+ "linux,initrd-start", start);
|
||||
+ qemu_fdt_setprop_cell(fdt, "/chosen", "linux,initrd-end",
|
||||
+ end);
|
||||
+ }
|
||||
}
|
||||
|
||||
/* reset vector */
|
@ -15,6 +15,8 @@
|
||||
in lib.overrideDerivation qemu (orig: {
|
||||
name = "${(builtins.parseDrvName qemu.name).name}-${version}pre${revCount}_${shortRev}";
|
||||
inherit src;
|
||||
# https://github.com/riscv/riscv-qemu/pull/109
|
||||
patches = orig.patches ++ [ ./riscv-initrd.patch ];
|
||||
configureFlags = orig.configureFlags ++ [ "--target-list=${lib.concatStringsSep "," targets}" ];
|
||||
postInstall = null;
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ stdenvNoCC, curl }: # Note that `curl' may be `null', in case of the native stdenvNoCC.
|
||||
{ lib, stdenvNoCC, curl }: # Note that `curl' may be `null', in case of the native stdenvNoCC.
|
||||
|
||||
let
|
||||
|
||||
@ -20,7 +20,7 @@ let
|
||||
# "gnu", etc.).
|
||||
sites = builtins.attrNames mirrors;
|
||||
|
||||
impureEnvVars = stdenvNoCC.lib.fetchers.proxyImpureEnvVars ++ [
|
||||
impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [
|
||||
# This variable allows the user to pass additional options to curl
|
||||
"NIX_CURL_FLAGS"
|
||||
|
||||
@ -89,22 +89,28 @@ in
|
||||
, passthru ? {}
|
||||
}:
|
||||
|
||||
assert builtins.isList urls;
|
||||
assert (urls == []) != (url == "");
|
||||
assert sha512 != "" -> builtins.compareVersions "1.11" builtins.nixVersion <= 0;
|
||||
|
||||
|
||||
let
|
||||
|
||||
hasHash = showURLs || (outputHash != "" && outputHashAlgo != "")
|
||||
|| sha1 != "" || sha256 != "" || sha512 != "";
|
||||
urls_ = if urls != [] then urls else [url];
|
||||
urls_ =
|
||||
if urls != [] && url == "" then
|
||||
(if lib.isList urls then urls
|
||||
else throw "`urls` is not a list")
|
||||
else if urls == [] && url != "" then [url]
|
||||
else throw "fetchurl requires either `url` or `urls` to be set";
|
||||
|
||||
hash_ =
|
||||
if md5 != "" then throw "fetchurl does not support md5 anymore, please use sha256 or sha512"
|
||||
else if (outputHash != "" && outputHashAlgo != "") then { inherit outputHashAlgo outputHash; }
|
||||
else if sha512 != "" then { outputHashAlgo = "sha512"; outputHash = sha512; }
|
||||
else if sha256 != "" then { outputHashAlgo = "sha256"; outputHash = sha256; }
|
||||
else if sha1 != "" then { outputHashAlgo = "sha1"; outputHash = sha1; }
|
||||
else throw "fetchurl requires a hash for fixed-output derivation: ${lib.concatStringsSep ", " urls_}";
|
||||
|
||||
in
|
||||
|
||||
if md5 != "" then throw "fetchurl does not support md5 anymore, please use sha256 or sha512"
|
||||
else if (!hasHash) then throw "Specify hash for fetchurl fixed-output derivation: ${stdenvNoCC.lib.concatStringsSep ", " urls_}"
|
||||
else stdenvNoCC.mkDerivation {
|
||||
stdenvNoCC.mkDerivation {
|
||||
name =
|
||||
if showURLs then "urls"
|
||||
else if name != "" then name
|
||||
@ -121,10 +127,7 @@ else stdenvNoCC.mkDerivation {
|
||||
preferHashedMirrors = true;
|
||||
|
||||
# New-style output content requirements.
|
||||
outputHashAlgo = if outputHashAlgo != "" then outputHashAlgo else
|
||||
if sha512 != "" then "sha512" else if sha256 != "" then "sha256" else "sha1";
|
||||
outputHash = if outputHash != "" then outputHash else
|
||||
if sha512 != "" then sha512 else if sha256 != "" then sha256 else sha1;
|
||||
inherit (hash_) outputHashAlgo outputHash;
|
||||
|
||||
outputHashMode = if (recursiveHash || executable) then "recursive" else "flat";
|
||||
|
||||
|
@ -78,10 +78,10 @@ vmTools.runInLinuxImage (stdenv.mkDerivation (
|
||||
header "Generated DEB package: $i"
|
||||
dpkg-deb --info "$i"
|
||||
pkgName=$(dpkg-deb -W "$i" | awk '{print $1}')
|
||||
dpkg -i "$i"
|
||||
echo "file deb $i" >> $out/nix-support/hydra-build-products
|
||||
stopNest
|
||||
done
|
||||
dpkg -i $out/debs/*.deb
|
||||
|
||||
for i in $extraDebs; do
|
||||
echo "file deb-extra $(ls $i/debs/*.deb | sort | head -1)" >> $out/nix-support/hydra-build-products
|
||||
|
@ -6,44 +6,16 @@
|
||||
|
||||
{ lib, buildPlatform, stdenv, defaultCrateOverrides, fetchCrate, ncurses, rustc }:
|
||||
|
||||
let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies,
|
||||
dependencies, completeDeps, completeBuildDeps,
|
||||
crateFeatures, libName, build, release, libPath,
|
||||
crateType, metadata, crateBin, finalBins,
|
||||
verbose, colors }:
|
||||
|
||||
let depsDir = lib.concatStringsSep " " dependencies;
|
||||
completeDepsDir = lib.concatStringsSep " " completeDeps;
|
||||
completeBuildDepsDir = lib.concatStringsSep " " completeBuildDeps;
|
||||
makeDeps = dependencies:
|
||||
(lib.concatMapStringsSep " " (dep:
|
||||
let extern = lib.strings.replaceStrings ["-"] ["_"] dep.libName; in
|
||||
(if dep.crateType == "lib" then
|
||||
" --extern ${extern}=${dep.out}/lib/lib${extern}-${dep.metadata}.rlib"
|
||||
else
|
||||
" --extern ${extern}=${dep.out}/lib/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}")
|
||||
) dependencies);
|
||||
deps = makeDeps dependencies;
|
||||
buildDeps = makeDeps buildDependencies;
|
||||
optLevel = if release then 3 else 0;
|
||||
rustcOpts = (if release then "-C opt-level=3" else "-C debuginfo=2");
|
||||
rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}";
|
||||
version_ = lib.splitString "-" crateVersion;
|
||||
versionPre = if lib.tail version_ == [] then "" else builtins.elemAt version_ 1;
|
||||
version = lib.splitString "." (lib.head version_);
|
||||
authors = lib.concatStringsSep ":" crateAuthors;
|
||||
in ''
|
||||
norm=""
|
||||
bold=""
|
||||
green=""
|
||||
boldgreen=""
|
||||
if [[ "${colors}" -eq "always" ]]; then
|
||||
norm="$(printf '\033[0m')" #returns to "normal"
|
||||
bold="$(printf '\033[0;1m')" #set bold
|
||||
green="$(printf '\033[0;32m')" #set green
|
||||
boldgreen="$(printf '\033[0;1;32m')" #set bold, and set green.
|
||||
fi
|
||||
let makeDeps = dependencies:
|
||||
(lib.concatMapStringsSep " " (dep:
|
||||
let extern = lib.strings.replaceStrings ["-"] ["_"] dep.libName; in
|
||||
(if dep.crateType == "lib" then
|
||||
" --extern ${extern}=${dep.out}/lib/lib${extern}-${dep.metadata}.rlib"
|
||||
else
|
||||
" --extern ${extern}=${dep.out}/lib/lib${extern}-${dep.metadata}${buildPlatform.extensions.sharedLibrary}")
|
||||
) dependencies);
|
||||
|
||||
echo_build_heading = colors: ''
|
||||
echo_build_heading() {
|
||||
start=""
|
||||
end=""
|
||||
@ -57,7 +29,8 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies,
|
||||
echo "$start""Building $1 ($2)""$end"
|
||||
fi
|
||||
}
|
||||
|
||||
'';
|
||||
noisily = colors: verbose: ''
|
||||
noisily() {
|
||||
start=""
|
||||
end=""
|
||||
@ -71,18 +44,29 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies,
|
||||
''}
|
||||
$@
|
||||
}
|
||||
'';
|
||||
|
||||
configureCrate =
|
||||
{ crateName, crateVersion, crateAuthors, build, libName, crateFeatures, colors, libPath, release, buildDependencies, completeDeps, completeBuildDeps, verbose, dependencies }:
|
||||
let version_ = lib.splitString "-" crateVersion;
|
||||
versionPre = if lib.tail version_ == [] then "" else builtins.elemAt version_ 1;
|
||||
version = lib.splitString "." (lib.head version_);
|
||||
rustcOpts = (if release then "-C opt-level=3" else "-C debuginfo=2");
|
||||
buildDeps = makeDeps buildDependencies;
|
||||
authors = lib.concatStringsSep ":" crateAuthors;
|
||||
optLevel = if release then 3 else 0;
|
||||
completeDepsDir = lib.concatStringsSep " " completeDeps;
|
||||
completeBuildDepsDir = lib.concatStringsSep " " completeBuildDeps;
|
||||
in ''
|
||||
runHook preConfigure
|
||||
${echo_build_heading colors}
|
||||
${noisily colors verbose}
|
||||
symlink_dependency() {
|
||||
# $1 is the nix-store path of a dependency
|
||||
# $1 is the nix-store path of a dependency
|
||||
# $2 is the target path
|
||||
i=$1
|
||||
dest=target/deps
|
||||
if [ ! -z $2 ]; then
|
||||
if [ "$2" = "--buildDep" ]; then
|
||||
dest=target/buildDeps
|
||||
fi
|
||||
fi
|
||||
ln -s -f $i/lib/*.rlib $dest #*/
|
||||
ln -s -f $i/lib/*.so $i/lib/*.dylib $dest #*/
|
||||
ln -s -f $i/lib/*.rlib $2 #*/
|
||||
ln -s -f $i/lib/*.so $i/lib/*.dylib $2 #*/
|
||||
if [ -e "$i/lib/link" ]; then
|
||||
cat $i/lib/link >> target/link
|
||||
cat $i/lib/link >> target/link.final
|
||||
@ -92,6 +76,133 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies,
|
||||
fi
|
||||
}
|
||||
|
||||
mkdir -p target/{deps,lib,build,buildDeps}
|
||||
chmod uga+w target -R
|
||||
for i in ${completeDepsDir}; do
|
||||
symlink_dependency $i target/deps
|
||||
done
|
||||
for i in ${completeBuildDepsDir}; do
|
||||
symlink_dependency $i target/buildDeps
|
||||
done
|
||||
if [[ -e target/link ]]; then
|
||||
sort -u target/link > target/link.sorted
|
||||
mv target/link.sorted target/link
|
||||
sort -u target/link.final > target/link.final.sorted
|
||||
mv target/link.final.sorted target/link.final
|
||||
tr '\n' ' ' < target/link > target/link_
|
||||
fi
|
||||
EXTRA_BUILD=""
|
||||
BUILD_OUT_DIR=""
|
||||
export CARGO_PKG_NAME=${crateName}
|
||||
export CARGO_PKG_VERSION=${crateVersion}
|
||||
export CARGO_PKG_AUTHORS="${authors}"
|
||||
|
||||
export CARGO_CFG_TARGET_ARCH=${buildPlatform.parsed.cpu.name}
|
||||
export CARGO_CFG_TARGET_OS=${buildPlatform.parsed.kernel.name}
|
||||
export CARGO_CFG_TARGET_FAMILY="unix"
|
||||
export CARGO_CFG_UNIX=1
|
||||
export CARGO_CFG_TARGET_ENV="gnu"
|
||||
export CARGO_CFG_TARGET_ENDIAN=${if buildPlatform.parsed.cpu.significantByte.name == "littleEndian" then "little" else "big"}
|
||||
export CARGO_CFG_TARGET_POINTER_WIDTH=${toString buildPlatform.parsed.cpu.bits}
|
||||
export CARGO_CFG_TARGET_VENDOR=${buildPlatform.parsed.vendor.name}
|
||||
|
||||
export CARGO_MANIFEST_DIR="."
|
||||
export DEBUG="${toString (!release)}"
|
||||
export OPT_LEVEL="${toString optLevel}"
|
||||
export TARGET="${buildPlatform.config}"
|
||||
export HOST="${buildPlatform.config}"
|
||||
export PROFILE=${if release then "release" else "debug"}
|
||||
export OUT_DIR=$(pwd)/target/build/${crateName}.out
|
||||
export CARGO_PKG_VERSION_MAJOR=${builtins.elemAt version 0}
|
||||
export CARGO_PKG_VERSION_MINOR=${builtins.elemAt version 1}
|
||||
export CARGO_PKG_VERSION_PATCH=${builtins.elemAt version 2}
|
||||
if [[ -n "${versionPre}" ]]; then
|
||||
export CARGO_PKG_VERSION_PRE="${versionPre}"
|
||||
fi
|
||||
|
||||
BUILD=""
|
||||
if [[ ! -z "${build}" ]] ; then
|
||||
BUILD=${build}
|
||||
elif [[ -e "build.rs" ]]; then
|
||||
BUILD="build.rs"
|
||||
fi
|
||||
if [[ ! -z "$BUILD" ]] ; then
|
||||
echo_build_heading "$BUILD" ${libName}
|
||||
mkdir -p target/build/${crateName}
|
||||
EXTRA_BUILD_FLAGS=""
|
||||
if [ -e target/link_ ]; then
|
||||
EXTRA_BUILD_FLAGS=$(cat target/link_)
|
||||
fi
|
||||
if [ -e target/link.build ]; then
|
||||
EXTRA_BUILD_FLAGS="$EXTRA_BUILD_FLAGS $(cat target/link.build)"
|
||||
fi
|
||||
noisily rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \
|
||||
${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \
|
||||
-L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS --color ${colors}
|
||||
|
||||
mkdir -p target/build/${crateName}.out
|
||||
export RUST_BACKTRACE=1
|
||||
BUILD_OUT_DIR="-L $OUT_DIR"
|
||||
mkdir -p $OUT_DIR
|
||||
target/build/${crateName}/build_script_build > target/build/${crateName}.opt
|
||||
set +e
|
||||
EXTRA_BUILD=$(sed -n "s/^cargo:rustc-flags=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ')
|
||||
EXTRA_FEATURES=$(sed -n "s/^cargo:rustc-cfg=\(.*\)/--cfg \1/p" target/build/${crateName}.opt | tr '\n' ' ')
|
||||
EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ')
|
||||
EXTRA_LINK_SEARCH=$(sed -n "s/^cargo:rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ')
|
||||
CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\U\1/")
|
||||
grep -P "^cargo:(?!(rustc-|warning=|rerun-if-changed=|rerun-if-env-changed))" target/build/${crateName}.opt \
|
||||
| sed -e "s/cargo:\([^=]*\)=\(.*\)/export DEP_$(echo $CRATENAME)_\U\1\E=\2/" > target/env
|
||||
|
||||
set -e
|
||||
if [[ -n "$(ls target/build/${crateName}.out)" ]]; then
|
||||
|
||||
if [[ -e "${libPath}" ]]; then
|
||||
cp -r target/build/${crateName}.out/* $(dirname ${libPath}) #*/
|
||||
else
|
||||
cp -r target/build/${crateName}.out/* src #*/
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
runHook postConfigure
|
||||
'';
|
||||
|
||||
buildCrate = { crateName, crateVersion, crateAuthors,
|
||||
dependencies, completeDeps, completeBuildDeps,
|
||||
crateFeatures, libName, build, release, libPath,
|
||||
crateType, metadata, crateBin, finalBins,
|
||||
extraRustcOpts,
|
||||
verbose, colors }:
|
||||
|
||||
let depsDir = lib.concatStringsSep " " dependencies;
|
||||
completeDepsDir = lib.concatStringsSep " " completeDeps;
|
||||
completeBuildDepsDir = lib.concatStringsSep " " completeBuildDeps;
|
||||
deps = makeDeps dependencies;
|
||||
optLevel = if release then 3 else 0;
|
||||
rustcOpts =
|
||||
lib.lists.foldl' (opts: opt: opts + " " + opt)
|
||||
(if release then "-C opt-level=3" else "-C debuginfo=2")
|
||||
extraRustcOpts;
|
||||
rustcMeta = "-C metadata=${metadata} -C extra-filename=-${metadata}";
|
||||
version_ = lib.splitString "-" crateVersion;
|
||||
versionPre = if lib.tail version_ == [] then "" else builtins.elemAt version_ 1;
|
||||
version = lib.splitString "." (lib.head version_);
|
||||
authors = lib.concatStringsSep ":" crateAuthors;
|
||||
in ''
|
||||
runHook preBuild
|
||||
norm=""
|
||||
bold=""
|
||||
green=""
|
||||
boldgreen=""
|
||||
if [[ "${colors}" -eq "always" ]]; then
|
||||
norm="$(printf '\033[0m')" #returns to "normal"
|
||||
bold="$(printf '\033[0;1m')" #set bold
|
||||
green="$(printf '\033[0;32m')" #set green
|
||||
boldgreen="$(printf '\033[0;1;32m')" #set bold, and set green.
|
||||
fi
|
||||
${echo_build_heading colors}
|
||||
${noisily colors verbose}
|
||||
|
||||
build_lib() {
|
||||
lib_src=$1
|
||||
echo_build_heading $lib_src ${libName}
|
||||
@ -124,107 +235,24 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies,
|
||||
fi
|
||||
}
|
||||
|
||||
runHook preBuild
|
||||
mkdir -p target/{deps,lib,build,buildDeps}
|
||||
chmod uga+w target -R
|
||||
for i in ${completeDepsDir}; do
|
||||
symlink_dependency $i
|
||||
done
|
||||
for i in ${completeBuildDepsDir}; do
|
||||
symlink_dependency $i --buildDep
|
||||
done
|
||||
if [ -e target/link ]; then
|
||||
sort -u target/link > target/link.sorted
|
||||
mv target/link.sorted target/link
|
||||
sort -u target/link.final > target/link.final.sorted
|
||||
mv target/link.final.sorted target/link.final
|
||||
tr '\n' ' ' < target/link > target/link_
|
||||
fi
|
||||
EXTRA_BUILD=""
|
||||
BUILD_OUT_DIR=""
|
||||
export CARGO_PKG_NAME=${crateName}
|
||||
export CARGO_PKG_VERSION=${crateVersion}
|
||||
export CARGO_PKG_AUTHORS="${authors}"
|
||||
export CARGO_CFG_TARGET_ARCH=${buildPlatform.parsed.cpu.name}
|
||||
export CARGO_CFG_TARGET_OS=${buildPlatform.parsed.kernel.name}
|
||||
|
||||
export CARGO_CFG_TARGET_ENV="gnu"
|
||||
export CARGO_MANIFEST_DIR="."
|
||||
export DEBUG="${toString (!release)}"
|
||||
export OPT_LEVEL="${toString optLevel}"
|
||||
export TARGET="${buildPlatform.config}"
|
||||
export HOST="${buildPlatform.config}"
|
||||
export PROFILE=${if release then "release" else "debug"}
|
||||
export OUT_DIR=$(pwd)/target/build/${crateName}.out
|
||||
export CARGO_PKG_VERSION_MAJOR=${builtins.elemAt version 0}
|
||||
export CARGO_PKG_VERSION_MINOR=${builtins.elemAt version 1}
|
||||
export CARGO_PKG_VERSION_PATCH=${builtins.elemAt version 2}
|
||||
if [ -n "${versionPre}" ]; then
|
||||
export CARGO_PKG_VERSION_PRE="${versionPre}"
|
||||
fi
|
||||
|
||||
BUILD=""
|
||||
if [[ ! -z "${build}" ]] ; then
|
||||
BUILD=${build}
|
||||
elif [[ -e "build.rs" ]]; then
|
||||
BUILD="build.rs"
|
||||
fi
|
||||
if [[ ! -z "$BUILD" ]] ; then
|
||||
echo_build_heading "$BUILD" ${libName}
|
||||
mkdir -p target/build/${crateName}
|
||||
EXTRA_BUILD_FLAGS=""
|
||||
if [ -e target/link_ ]; then
|
||||
EXTRA_BUILD_FLAGS=$(cat target/link_)
|
||||
fi
|
||||
if [ -e target/link.build ]; then
|
||||
EXTRA_BUILD_FLAGS="$EXTRA_BUILD_FLAGS $(cat target/link.build)"
|
||||
fi
|
||||
noisily rustc --crate-name build_script_build $BUILD --crate-type bin ${rustcOpts} \
|
||||
${crateFeatures} --out-dir target/build/${crateName} --emit=dep-info,link \
|
||||
-L dependency=target/buildDeps ${buildDeps} --cap-lints allow $EXTRA_BUILD_FLAGS --color ${colors}
|
||||
|
||||
mkdir -p target/build/${crateName}.out
|
||||
export RUST_BACKTRACE=1
|
||||
BUILD_OUT_DIR="-L $OUT_DIR"
|
||||
mkdir -p $OUT_DIR
|
||||
target/build/${crateName}/build_script_build > target/build/${crateName}.opt
|
||||
set +e
|
||||
EXTRA_BUILD=$(sed -n "s/^cargo:rustc-flags=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ')
|
||||
EXTRA_FEATURES=$(sed -n "s/^cargo:rustc-cfg=\(.*\)/--cfg \1/p" target/build/${crateName}.opt | tr '\n' ' ')
|
||||
EXTRA_LINK=$(sed -n "s/^cargo:rustc-link-lib=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ')
|
||||
EXTRA_LINK_SEARCH=$(sed -n "s/^cargo:rustc-link-search=\(.*\)/\1/p" target/build/${crateName}.opt | tr '\n' ' ')
|
||||
CRATENAME=$(echo ${crateName} | sed -e "s/\(.*\)-sys$/\U\1/")
|
||||
grep -P "^cargo:(?!(rustc-|warning=|rerun-if-changed=|rerun-if-env-changed))" target/build/${crateName}.opt \
|
||||
| sed -e "s/cargo:\([^=]*\)=\(.*\)/export DEP_$(echo $CRATENAME)_\U\1\E=\2/" > target/env
|
||||
|
||||
set -e
|
||||
if [ -n "$(ls target/build/${crateName}.out)" ]; then
|
||||
|
||||
if [ -e "${libPath}" ] ; then
|
||||
cp -r target/build/${crateName}.out/* $(dirname ${libPath}) #*/
|
||||
else
|
||||
cp -r target/build/${crateName}.out/* src #*/
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
EXTRA_LIB=""
|
||||
CRATE_NAME=$(echo ${libName} | sed -e "s/-/_/g")
|
||||
|
||||
if [ -e target/link_ ]; then
|
||||
if [[ -e target/link_ ]]; then
|
||||
EXTRA_BUILD="$(cat target/link_) $EXTRA_BUILD"
|
||||
fi
|
||||
|
||||
if [ -e "${libPath}" ] ; then
|
||||
if [[ -e "${libPath}" ]]; then
|
||||
build_lib ${libPath}
|
||||
elif [ -e src/lib.rs ] ; then
|
||||
elif [[ -e src/lib.rs ]]; then
|
||||
build_lib src/lib.rs
|
||||
elif [ -e src/${libName}.rs ] ; then
|
||||
elif [[ -e src/${libName}.rs ]]; then
|
||||
build_lib src/${libName}.rs
|
||||
fi
|
||||
|
||||
echo "$EXTRA_LINK_SEARCH" | while read i; do
|
||||
if [ ! -z "$i" ]; then
|
||||
if [[ ! -z "$i" ]]; then
|
||||
for lib in $i; do
|
||||
echo "-L $lib" >> target/link
|
||||
L=$(echo $lib | sed -e "s#$(pwd)/target/build#$out/lib#")
|
||||
@ -233,7 +261,7 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies,
|
||||
fi
|
||||
done
|
||||
echo "$EXTRA_LINK" | while read i; do
|
||||
if [ ! -z "$i" ]; then
|
||||
if [[ ! -z "$i" ]]; then
|
||||
for lib in $i; do
|
||||
echo "-l $lib" >> target/link
|
||||
echo "-l $lib" >> target/link.final
|
||||
@ -241,7 +269,7 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies,
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -e target/link ]; then
|
||||
if [[ -e target/link ]]; then
|
||||
sort -u target/link.final > target/link.final.sorted
|
||||
mv target/link.final.sorted target/link.final
|
||||
sort -u target/link > target/link.sorted
|
||||
@ -253,7 +281,7 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies,
|
||||
|
||||
mkdir -p target/bin
|
||||
echo "${crateBin}" | sed -n 1'p' | tr ',' '\n' | while read BIN; do
|
||||
if [ ! -z "$BIN" ]; then
|
||||
if [[ ! -z "$BIN" ]]; then
|
||||
build_bin $BIN
|
||||
fi
|
||||
done
|
||||
@ -267,27 +295,32 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies,
|
||||
''}
|
||||
# Remove object files to avoid "wrong ELF type"
|
||||
find target -type f -name "*.o" -print0 | xargs -0 rm -f
|
||||
'' + finalBins + ''
|
||||
runHook postBuild
|
||||
'' + finalBins;
|
||||
'';
|
||||
|
||||
installCrate = crateName: ''
|
||||
installCrate = crateName: metadata: ''
|
||||
runHook preInstall
|
||||
mkdir -p $out
|
||||
if [ -s target/env ]; then
|
||||
if [[ -s target/env ]]; then
|
||||
cp target/env $out/env
|
||||
fi
|
||||
if [ -s target/link.final ]; then
|
||||
if [[ -s target/link.final ]]; then
|
||||
mkdir -p $out/lib
|
||||
cp target/link.final $out/lib/link
|
||||
fi
|
||||
if [ "$(ls -A target/lib)" ]; then
|
||||
if [[ "$(ls -A target/lib)" ]]; then
|
||||
mkdir -p $out/lib
|
||||
cp target/lib/* $out/lib #*/
|
||||
for lib in $out/lib/*.so $out/lib/*.dylib; do #*/
|
||||
ln -s $lib $(echo $lib | sed -e "s/-${metadata}//")
|
||||
done
|
||||
fi
|
||||
if [ "$(ls -A target/build)" ]; then # */
|
||||
if [[ "$(ls -A target/build)" ]]; then # */
|
||||
mkdir -p $out/lib
|
||||
cp -r target/build/* $out/lib # */
|
||||
fi
|
||||
if [ "$(ls -A target/bin)" ]; then
|
||||
if [[ "$(ls -A target/bin)" ]]; then
|
||||
mkdir -p $out/bin
|
||||
cp -P target/bin/* $out/bin # */
|
||||
fi
|
||||
@ -295,9 +328,16 @@ let buildCrate = { crateName, crateVersion, crateAuthors, buildDependencies,
|
||||
'';
|
||||
in
|
||||
|
||||
crate_: lib.makeOverridable ({ rust, release, verbose, features, buildInputs, crateOverrides }:
|
||||
crate_: lib.makeOverridable ({ rust, release, verbose, features, buildInputs, crateOverrides,
|
||||
dependencies, buildDependencies,
|
||||
extraRustcOpts,
|
||||
preUnpack, postUnpack, prePatch, patches, postPatch,
|
||||
preConfigure, postConfigure, preBuild, postBuild, preInstall, postInstall }:
|
||||
|
||||
let crate = crate_ // (lib.attrByPath [ crate_.crateName ] (attr: {}) crateOverrides crate_);
|
||||
release_ = release;
|
||||
dependencies_ = dependencies;
|
||||
buildDependencies_ = buildDependencies;
|
||||
processedAttrs = [
|
||||
"src" "buildInputs" "crateBin" "crateLib" "libName" "libPath"
|
||||
"buildDependencies" "dependencies" "features"
|
||||
@ -309,6 +349,7 @@ in
|
||||
stdenv.mkDerivation (rec {
|
||||
|
||||
inherit (crate) crateName;
|
||||
inherit preUnpack postUnpack prePatch patches postPatch preConfigure postConfigure preBuild postBuild preInstall postInstall;
|
||||
|
||||
src = if lib.hasAttr "src" crate then
|
||||
crate.src
|
||||
@ -319,12 +360,12 @@ stdenv.mkDerivation (rec {
|
||||
dependencies =
|
||||
builtins.map
|
||||
(dep: dep.override { rust = rust; release = release; verbose = verbose; crateOverrides = crateOverrides; })
|
||||
(crate.dependencies or []);
|
||||
dependencies_;
|
||||
|
||||
buildDependencies =
|
||||
builtins.map
|
||||
(dep: dep.override { rust = rust; release = release; verbose = verbose; crateOverrides = crateOverrides; })
|
||||
(crate.buildDependencies or []);
|
||||
buildDependencies_;
|
||||
|
||||
completeDeps = lib.lists.unique (dependencies ++ lib.lists.concatMap (dep: dep.completeDeps) dependencies);
|
||||
completeBuildDeps = lib.lists.unique (
|
||||
@ -339,7 +380,8 @@ stdenv.mkDerivation (rec {
|
||||
libName = if crate ? libName then crate.libName else crate.crateName;
|
||||
libPath = if crate ? libPath then crate.libPath else "";
|
||||
|
||||
metadata = builtins.substring 0 10 (builtins.hashString "sha256" (crateName + "-" + crateVersion));
|
||||
depsMetadata = builtins.foldl' (str: dep: str + dep.metadata) "" (dependencies ++ buildDependencies);
|
||||
metadata = builtins.substring 0 10 (builtins.hashString "sha256" (crateName + "-" + crateVersion + "___" + toString crateFeatures + "___" + depsMetadata ));
|
||||
|
||||
crateBin = if crate ? crateBin then
|
||||
builtins.foldl' (bins: bin:
|
||||
@ -370,20 +412,42 @@ stdenv.mkDerivation (rec {
|
||||
crateAuthors = if crate ? authors && lib.isList crate.authors then crate.authors else [];
|
||||
crateType =
|
||||
if lib.attrByPath ["procMacro"] false crate then "proc-macro" else
|
||||
if lib.attrByPath ["plugin"] false crate then "dylib" else "lib";
|
||||
if lib.attrByPath ["plugin"] false crate then "dylib" else
|
||||
if crate ? type then crate.type else "lib";
|
||||
colors = lib.attrByPath [ "colors" ] "always" crate;
|
||||
buildPhase = buildCrate {
|
||||
configurePhase = configureCrate {
|
||||
inherit crateName dependencies buildDependencies completeDeps completeBuildDeps
|
||||
crateFeatures libName build release libPath crateType crateVersion
|
||||
crateAuthors metadata crateBin finalBins verbose colors;
|
||||
crateFeatures libName build release libPath crateVersion
|
||||
crateAuthors verbose colors;
|
||||
};
|
||||
installPhase = installCrate crateName;
|
||||
extraRustcOpts = if crate ? extraRustcOpts then crate.extraRustcOpts else [];
|
||||
buildPhase = buildCrate {
|
||||
inherit crateName dependencies completeDeps completeBuildDeps
|
||||
crateFeatures libName build release libPath crateType crateVersion
|
||||
crateAuthors metadata crateBin finalBins verbose colors extraRustcOpts;
|
||||
};
|
||||
installPhase = installCrate crateName metadata;
|
||||
|
||||
} // extraDerivationAttrs)) {
|
||||
} // extraDerivationAttrs
|
||||
)) {
|
||||
rust = rustc;
|
||||
release = true;
|
||||
verbose = true;
|
||||
release = crate_.release or true;
|
||||
verbose = crate_.verbose or true;
|
||||
extraRustcOpts = [];
|
||||
features = [];
|
||||
buildInputs = [];
|
||||
crateOverrides = defaultCrateOverrides;
|
||||
preUnpack = crate_.preUnpack or "";
|
||||
postUnpack = crate_.postUnpack or "";
|
||||
prePatch = crate_.prePatch or "";
|
||||
patches = crate_.patches or [];
|
||||
postPatch = crate_.postPatch or "";
|
||||
preConfigure = crate_.preConfigure or "";
|
||||
postConfigure = crate_.postConfigure or "";
|
||||
preBuild = crate_.preBuild or "";
|
||||
postBuild = crate_.postBuild or "";
|
||||
preInstall = crate_.preInstall or "";
|
||||
postInstall = crate_.postInstall or "";
|
||||
dependencies = crate_.dependencies or [];
|
||||
buildDependencies = crate_.buildDependencies or [];
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Generated by carnix 0.6.5: carnix -o carnix.nix Cargo.lock --src ./.
|
||||
# Generated by carnix 0.6.5: carnix -o carnix.nix Cargo.lock
|
||||
{ lib, buildPlatform, buildRustCrate, fetchgit }:
|
||||
let kernel = buildPlatform.parsed.kernel.name;
|
||||
abi = buildPlatform.parsed.abi.name;
|
||||
@ -18,7 +18,7 @@ let kernel = buildPlatform.parsed.kernel.name;
|
||||
) [] (builtins.attrNames feat);
|
||||
in
|
||||
rec {
|
||||
carnix = f: carnix_0_6_5 { features = carnix_0_6_5_features { carnix_0_6_5 = f; }; };
|
||||
carnix = f: carnix_0_6_6 { features = carnix_0_6_6_features { carnix_0_6_6 = f; }; };
|
||||
aho_corasick_0_6_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
|
||||
crateName = "aho-corasick";
|
||||
version = "0.6.3";
|
||||
@ -71,11 +71,11 @@ rec {
|
||||
sha256 = "0p4b3nr0s5nda2qmm7xdhnvh4lkqk3xd8l9ffmwbvqw137vx7mj1";
|
||||
inherit dependencies buildDependencies features;
|
||||
};
|
||||
carnix_0_6_5_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
|
||||
carnix_0_6_6_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
|
||||
crateName = "carnix";
|
||||
version = "0.6.5";
|
||||
version = "0.6.6";
|
||||
authors = [ "pe@pijul.org <pe@pijul.org>" ];
|
||||
sha256 = "0r952s5az5mhw7z2r421i5lr0w5h436hah61md2bdb3204c2pl9c";
|
||||
sha256 = "1ai2r52j6vlrclhb7cvifx3lsg9naiy3jpsrbi3mmfmr6zbi7rdw";
|
||||
inherit dependencies buildDependencies features;
|
||||
};
|
||||
cc_1_0_3_ = { dependencies?[], buildDependencies?[], features?[] }: buildRustCrate {
|
||||
@ -623,11 +623,11 @@ rec {
|
||||
(f.bitflags_1_0_1.default or false) ||
|
||||
(bitflags_1_0_1.default or false);
|
||||
}) [];
|
||||
carnix_0_6_5 = { features?(carnix_0_6_5_features {}) }: carnix_0_6_5_ {
|
||||
carnix_0_6_6 = { features?(carnix_0_6_6_features {}) }: carnix_0_6_6_ {
|
||||
dependencies = mapFeatures features ([ clap_2_28_0 env_logger_0_5_3 error_chain_0_11_0 itertools_0_7_3 log_0_4_1 nom_3_2_1 regex_0_2_2 rusqlite_0_13_0 serde_1_0_21 serde_derive_1_0_21 serde_json_1_0_6 tempdir_0_3_5 toml_0_4_5 ]);
|
||||
};
|
||||
carnix_0_6_5_features = f: updateFeatures f (rec {
|
||||
carnix_0_6_5.default = (f.carnix_0_6_5.default or true);
|
||||
carnix_0_6_6_features = f: updateFeatures f (rec {
|
||||
carnix_0_6_6.default = (f.carnix_0_6_6.default or true);
|
||||
clap_2_28_0.default = true;
|
||||
env_logger_0_5_3.default = true;
|
||||
error_chain_0_11_0.default = true;
|
||||
|
@ -4,7 +4,7 @@ let
|
||||
inherit stdenv cacert git rust cargo-vendor;
|
||||
};
|
||||
in
|
||||
{ name, cargoSha256
|
||||
{ name, cargoSha256 ? null
|
||||
, src ? null
|
||||
, srcs ? null
|
||||
, sourceRoot ? null
|
||||
@ -13,15 +13,31 @@ in
|
||||
, cargoUpdateHook ? ""
|
||||
, cargoDepsHook ? ""
|
||||
, cargoBuildFlags ? []
|
||||
|
||||
, cargoVendorDir ? null
|
||||
, ... } @ args:
|
||||
|
||||
assert cargoVendorDir == null -> cargoSha256 != null;
|
||||
|
||||
let
|
||||
lib = stdenv.lib;
|
||||
|
||||
cargoDeps = fetchcargo {
|
||||
inherit name src srcs sourceRoot cargoUpdateHook;
|
||||
sha256 = cargoSha256;
|
||||
};
|
||||
cargoDeps = if cargoVendorDir == null
|
||||
then fetchcargo {
|
||||
inherit name src srcs sourceRoot cargoUpdateHook;
|
||||
sha256 = cargoSha256;
|
||||
}
|
||||
else null;
|
||||
|
||||
setupVendorDir = if cargoVendorDir == null
|
||||
then ''
|
||||
unpackFile "$cargoDeps"
|
||||
cargoDepsCopy=$(stripHash $(basename $cargoDeps))
|
||||
chmod -R +w "$cargoDepsCopy"
|
||||
''
|
||||
else ''
|
||||
cargoDepsCopy="$sourceRoot/${cargoVendorDir}"
|
||||
'';
|
||||
|
||||
in stdenv.mkDerivation (args // {
|
||||
inherit cargoDeps;
|
||||
@ -39,9 +55,7 @@ in stdenv.mkDerivation (args // {
|
||||
postUnpack = ''
|
||||
eval "$cargoDepsHook"
|
||||
|
||||
unpackFile "$cargoDeps"
|
||||
cargoDepsCopy=$(stripHash $(basename $cargoDeps))
|
||||
chmod -R +w "$cargoDepsCopy"
|
||||
${setupVendorDir}
|
||||
|
||||
mkdir .cargo
|
||||
cat >.cargo/config <<-EOF
|
||||
|
@ -1,16 +1,16 @@
|
||||
{stdenv, fetchzip}:
|
||||
|
||||
let
|
||||
version = "10.0.0";
|
||||
version = "10.0.2";
|
||||
in fetchzip {
|
||||
name = "babelstone-han-${version}";
|
||||
|
||||
url = http://www.babelstone.co.uk/Fonts/0816/BabelStoneHan.zip;
|
||||
url = http://www.babelstone.co.uk/Fonts/7932/BabelStoneHan.zip;
|
||||
postFetch = ''
|
||||
mkdir -p $out/share/fonts/truetype
|
||||
unzip $downloadedFile '*.ttf' -d $out/share/fonts/truetype
|
||||
'';
|
||||
sha256 = "0648hv5c1hq3bq7mlk7bnmflzzqj4wh137bjqyrwj5hy3nqzvl5r";
|
||||
sha256 = "17r5cf028v66yzjf9qbncn4rchv2xxkl2adxr35ppg1l7zssz9v6";
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Unicode CJK font with over 32600 Han characters";
|
||||
|
@ -1,6 +1,6 @@
|
||||
{ fetchurl }:
|
||||
|
||||
fetchurl {
|
||||
url = "https://github.com/commercialhaskell/all-cabal-hashes/archive/00012ce23948b9547fe6609d595109741e0f58cf.tar.gz";
|
||||
sha256 = "1swgfx7b41jxq0pyws2wipdiyvy8nn6cp54yj3ip3r9l3gdv3f7b";
|
||||
url = "https://github.com/commercialhaskell/all-cabal-hashes/archive/4c8b3501ea6fc9f41cd192ddc08e2d9583a1e679.tar.gz";
|
||||
sha256 = "0aa4pimgllqgn8bcy2p2cdwbpz6s6wk8j41w35jvzaqfj15gysnq";
|
||||
}
|
||||
|
@ -72,8 +72,8 @@ in {
|
||||
'';
|
||||
};
|
||||
haxe_3_4 = generic {
|
||||
version = "3.4.4";
|
||||
sha256 = "057psarsmz8q2y9pqv5221vpdya241gcy8xnl2wg9wyscn6z1lx6";
|
||||
version = "3.4.6";
|
||||
sha256 = "1myc4b8fwp0f9vky17wv45n34a583f5sjvajsc93f5gm1wanp4if";
|
||||
prePatch = ''
|
||||
sed -i -e 's|"/usr/lib/haxe/std/";|"'"$out/lib/haxe/std/"'";\n&|g' src/main.ml
|
||||
sed -i -e 's|"neko"|"${neko}/bin/neko"|g' extra/haxelib_src/src/haxelib/client/Main.hx
|
||||
|
@ -43,6 +43,8 @@ let
|
||||
|
||||
# Patch for standalone doc building
|
||||
sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt
|
||||
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/Tools.cpp
|
||||
'';
|
||||
|
||||
outputs = [ "out" "lib" "python" ];
|
||||
|
33
pkgs/development/compilers/llvm/4/dynamiclibrary-musl.patch
Normal file
33
pkgs/development/compilers/llvm/4/dynamiclibrary-musl.patch
Normal file
@ -0,0 +1,33 @@
|
||||
From d12ecb83d01dcb580dd94f4d57828f33d3eb4c35 Mon Sep 17 00:00:00 2001
|
||||
From: Natanael Copa <ncopa@alpinelinux.org>
|
||||
Date: Thu, 18 Feb 2016 15:33:21 +0100
|
||||
Subject: [PATCH 3/3] Fix DynamicLibrary to build with musl libc
|
||||
|
||||
stdin/out/err is part of the libc and not the kernel so we check for the
|
||||
specific libc that does the unexpected instead of linux.
|
||||
|
||||
This is needed for making it build with musl libc.
|
||||
---
|
||||
lib/Support/DynamicLibrary.cpp | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/lib/Support/DynamicLibrary.cpp b/lib/Support/DynamicLibrary.cpp
|
||||
index 9a7aeb5..0c1c8f8 100644
|
||||
--- a/lib/Support/DynamicLibrary.cpp
|
||||
+++ b/lib/Support/DynamicLibrary.cpp
|
||||
@@ -140,10 +140,10 @@ void* DynamicLibrary::SearchForAddressOfSymbol(const char *symbolName) {
|
||||
#define EXPLICIT_SYMBOL(SYM) \
|
||||
if (!strcmp(symbolName, #SYM)) return &SYM
|
||||
|
||||
-// On linux we have a weird situation. The stderr/out/in symbols are both
|
||||
+// On GNU libc we have a weird situation. The stderr/out/in symbols are both
|
||||
// macros and global variables because of standards requirements. So, we
|
||||
// boldly use the EXPLICIT_SYMBOL macro without checking for a #define first.
|
||||
-#if defined(__linux__) and !defined(__ANDROID__)
|
||||
+#if defined(__GLIBC__)
|
||||
{
|
||||
EXPLICIT_SYMBOL(stderr);
|
||||
EXPLICIT_SYMBOL(stdout);
|
||||
--
|
||||
2.7.3
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ lib, stdenv, fetch, cmake, llvm, libcxxabi, fixDarwinDylibNames, version }:
|
||||
{ lib, stdenv, fetch, cmake, python, llvm, libcxxabi, fixDarwinDylibNames, version }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "libc++-${version}";
|
||||
@ -15,6 +15,9 @@ stdenv.mkDerivation rec {
|
||||
./pthread_mach_thread_np.patch
|
||||
# glibc 2.26 fix
|
||||
./xlocale-glibc-2.26.patch
|
||||
] ++ stdenv.lib.optionals stdenv.hostPlatform.isMusl [
|
||||
../../libcxx-0001-musl-hacks.patch
|
||||
./max_align_t.patch
|
||||
];
|
||||
|
||||
prePatch = ''
|
||||
@ -24,9 +27,10 @@ stdenv.mkDerivation rec {
|
||||
preConfigure = ''
|
||||
# Get headers from the cxxabi source so we can see private headers not installed by the cxxabi package
|
||||
cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$LIBCXXABI_INCLUDE_DIR")
|
||||
'' + lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
patchShebangs utils/cat_files.py
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
nativeBuildInputs = [ cmake ] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl python;
|
||||
|
||||
buildInputs = [ libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
||||
|
||||
@ -34,7 +38,7 @@ stdenv.mkDerivation rec {
|
||||
"-DLIBCXX_LIBCXXABI_LIB_PATH=${libcxxabi}/lib"
|
||||
"-DLIBCXX_LIBCPPABI_VERSION=2"
|
||||
"-DLIBCXX_CXX_ABI=libcxxabi"
|
||||
];
|
||||
] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl "-DLIBCXX_HAS_MUSL_LIBC=1";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
|
54
pkgs/development/compilers/llvm/4/libc++/max_align_t.patch
Normal file
54
pkgs/development/compilers/llvm/4/libc++/max_align_t.patch
Normal file
@ -0,0 +1,54 @@
|
||||
From 917331c88bd2afce0cf0fdbcab55a64541b5bcf0 Mon Sep 17 00:00:00 2001
|
||||
From: "David L. Jones" <dlj@google.com>
|
||||
Date: Fri, 10 Feb 2017 01:27:42 +0000
|
||||
Subject: [PATCH] Check for musl-libc's max_align_t in addition to other
|
||||
variants.
|
||||
|
||||
Summary:
|
||||
Libcxx will define its own max_align_t when it is not available. However, the
|
||||
availability checks today only check for Clang's definition and GCC's
|
||||
definition. In particular, it does not check for musl's definition, which is the
|
||||
same as GCC's but guarded with a different macro.
|
||||
|
||||
Reviewers: mclow.lists, EricWF
|
||||
|
||||
Reviewed By: EricWF
|
||||
|
||||
Subscribers: chandlerc, cfe-commits
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D28478
|
||||
|
||||
git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@294683 91177308-0d34-0410-b5e6-96231b3b80d8
|
||||
---
|
||||
include/cstddef | 3 ++-
|
||||
include/stddef.h | 3 ++-
|
||||
2 files changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/cstddef b/include/cstddef
|
||||
index edd106c00..103898b7d 100644
|
||||
--- a/include/cstddef
|
||||
+++ b/include/cstddef
|
||||
@@ -48,7 +48,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD
|
||||
using ::ptrdiff_t;
|
||||
using ::size_t;
|
||||
|
||||
-#if defined(__CLANG_MAX_ALIGN_T_DEFINED) || defined(_GCC_MAX_ALIGN_T)
|
||||
+#if defined(__CLANG_MAX_ALIGN_T_DEFINED) || defined(_GCC_MAX_ALIGN_T) || \
|
||||
+ defined(__DEFINED_max_align_t)
|
||||
// Re-use the compiler's <stddef.h> max_align_t where possible.
|
||||
using ::max_align_t;
|
||||
#else
|
||||
diff --git a/include/stddef.h b/include/stddef.h
|
||||
index 8841bbea2..faf8552d8 100644
|
||||
--- a/include/stddef.h
|
||||
+++ b/include/stddef.h
|
||||
@@ -53,7 +53,8 @@ using std::nullptr_t;
|
||||
}
|
||||
|
||||
// Re-use the compiler's <stddef.h> max_align_t where possible.
|
||||
-#if !defined(__CLANG_MAX_ALIGN_T_DEFINED) && !defined(_GCC_MAX_ALIGN_T)
|
||||
+#if !defined(__CLANG_MAX_ALIGN_T_DEFINED) && !defined(_GCC_MAX_ALIGN_T) && \
|
||||
+ !defined(__DEFINED_max_align_t)
|
||||
typedef long double max_align_t;
|
||||
#endif
|
||||
|
@ -14,6 +14,9 @@ stdenv.mkDerivation {
|
||||
export cmakeFlags="-DLLVM_PATH=$PWD/$(ls -d llvm-*) -DLIBCXXABI_LIBCXX_PATH=$PWD/$(ls -d libcxx-*)"
|
||||
'' + stdenv.lib.optionalString stdenv.isDarwin ''
|
||||
export TRIPLE=x86_64-apple-darwin
|
||||
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
patch -p1 -d $(ls -d libcxx-*) -i ${../libcxx-0001-musl-hacks.patch}
|
||||
patch -p1 -d $(ls -d libcxx-*) -i ${./libc++/max_align_t.patch}
|
||||
'';
|
||||
|
||||
installPhase = if stdenv.isDarwin
|
||||
|
@ -80,6 +80,9 @@ in stdenv.mkDerivation (rec {
|
||||
)
|
||||
'' + stdenv.lib.optionalString stdenv.isAarch64 ''
|
||||
patch -p0 < ${../aarch64.patch}
|
||||
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
patch -p1 -i ${../TLI-musl.patch}
|
||||
patch -p1 -i ${./dynamiclibrary-musl.patch}
|
||||
'';
|
||||
|
||||
# hacky fix: created binaries need to be run before installation
|
||||
@ -110,6 +113,14 @@ in stdenv.mkDerivation (rec {
|
||||
++ stdenv.lib.optionals (isDarwin) [
|
||||
"-DLLVM_ENABLE_LIBCXX=ON"
|
||||
"-DCAN_TARGET_i386=false"
|
||||
]
|
||||
++ stdenv.lib.optionals stdenv.hostPlatform.isMusl [
|
||||
"-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
|
||||
"-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.targetPlatform.config}"
|
||||
"-DTARGET_TRIPLE=${stdenv.targetPlatform.config}"
|
||||
|
||||
"-DCOMPILER_RT_BUILD_SANITIZERS=OFF"
|
||||
"-DCOMPILER_RT_BUILD_XRAY=OFF"
|
||||
];
|
||||
|
||||
postBuild = ''
|
||||
|
@ -44,6 +44,8 @@ let
|
||||
|
||||
# Patch for standalone doc building
|
||||
sed -i '1s,^,find_package(Sphinx REQUIRED)\n,' docs/CMakeLists.txt
|
||||
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
sed -i -e 's/lgcc_s/lgcc_eh/' lib/Driver/ToolChains/*.cpp
|
||||
'';
|
||||
|
||||
outputs = [ "out" "lib" "python" ];
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ lib, stdenv, fetch, cmake, llvm, libcxxabi, fixDarwinDylibNames, version }:
|
||||
{ lib, stdenv, fetch, cmake, python, llvm, libcxxabi, fixDarwinDylibNames, version }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
name = "libc++-${version}";
|
||||
@ -10,6 +10,12 @@ stdenv.mkDerivation rec {
|
||||
export LIBCXXABI_INCLUDE_DIR="$PWD/$(ls -d libcxxabi-${version}*)/include"
|
||||
'';
|
||||
|
||||
# on next rebuild, this can be replaced with optionals; for now set to null to avoid
|
||||
# patches = stdenv.lib.optionals stdenv.hostPlatform.isMusl [
|
||||
patches = if stdenv.hostPlatform.isMusl then [
|
||||
../../libcxx-0001-musl-hacks.patch
|
||||
] else null;
|
||||
|
||||
prePatch = ''
|
||||
substituteInPlace lib/CMakeLists.txt --replace "/usr/lib/libc++" "\''${LIBCXX_LIBCXXABI_LIB_PATH}/libc++"
|
||||
'';
|
||||
@ -17,9 +23,10 @@ stdenv.mkDerivation rec {
|
||||
preConfigure = ''
|
||||
# Get headers from the cxxabi source so we can see private headers not installed by the cxxabi package
|
||||
cmakeFlagsArray=($cmakeFlagsArray -DLIBCXX_CXX_ABI_INCLUDE_PATHS="$LIBCXXABI_INCLUDE_DIR")
|
||||
'' + lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
patchShebangs utils/cat_files.py
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
nativeBuildInputs = [ cmake ] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl python;
|
||||
|
||||
buildInputs = [ libcxxabi ] ++ lib.optional stdenv.isDarwin fixDarwinDylibNames;
|
||||
|
||||
@ -27,7 +34,7 @@ stdenv.mkDerivation rec {
|
||||
"-DLIBCXX_LIBCXXABI_LIB_PATH=${libcxxabi}/lib"
|
||||
"-DLIBCXX_LIBCPPABI_VERSION=2"
|
||||
"-DLIBCXX_CXX_ABI=libcxxabi"
|
||||
];
|
||||
] ++ stdenv.lib.optional stdenv.hostPlatform.isMusl "-DLIBCXX_HAS_MUSL_LIBC=1";
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
|
@ -14,6 +14,8 @@ stdenv.mkDerivation {
|
||||
export cmakeFlags="-DLLVM_PATH=$PWD/$(ls -d llvm-*) -DLIBCXXABI_LIBCXX_PATH=$PWD/$(ls -d libcxx-*)"
|
||||
'' + stdenv.lib.optionalString stdenv.isDarwin ''
|
||||
export TRIPLE=x86_64-apple-darwin
|
||||
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
patch -p1 -d $(ls -d libcxx-*) -i ${../libcxx-0001-musl-hacks.patch}
|
||||
'';
|
||||
|
||||
installPhase = if stdenv.isDarwin
|
||||
|
@ -74,6 +74,11 @@ in stdenv.mkDerivation (rec {
|
||||
patch -p1 -i ${./compiler-rt-codesign.patch} -d projects/compiler-rt
|
||||
'' + stdenv.lib.optionalString stdenv.isAarch64 ''
|
||||
patch -p0 < ${../aarch64.patch}
|
||||
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
|
||||
patch -p1 -i ${../TLI-musl.patch}
|
||||
substituteInPlace unittests/Support/CMakeLists.txt \
|
||||
--replace "add_subdirectory(DynamicLibrary)" ""
|
||||
rm unittests/Support/DynamicLibrary/DynamicLibraryTest.cpp
|
||||
'';
|
||||
|
||||
# hacky fix: created binaries need to be run before installation
|
||||
@ -104,6 +109,14 @@ in stdenv.mkDerivation (rec {
|
||||
++ stdenv.lib.optionals (isDarwin) [
|
||||
"-DLLVM_ENABLE_LIBCXX=ON"
|
||||
"-DCAN_TARGET_i386=false"
|
||||
]
|
||||
++ stdenv.lib.optionals stdenv.hostPlatform.isMusl [
|
||||
"-DLLVM_HOST_TRIPLE=${stdenv.hostPlatform.config}"
|
||||
"-DLLVM_DEFAULT_TARGET_TRIPLE=${stdenv.targetPlatform.config}"
|
||||
"-DTARGET_TRIPLE=${stdenv.targetPlatform.config}"
|
||||
|
||||
"-DCOMPILER_RT_BUILD_SANITIZERS=OFF"
|
||||
"-DCOMPILER_RT_BUILD_XRAY=OFF"
|
||||
];
|
||||
|
||||
postBuild = ''
|
||||
|
35
pkgs/development/compilers/llvm/TLI-musl.patch
Normal file
35
pkgs/development/compilers/llvm/TLI-musl.patch
Normal file
@ -0,0 +1,35 @@
|
||||
From 5c571082fdaf61f6df19d9b7137dc26d71334058 Mon Sep 17 00:00:00 2001
|
||||
From: Natanael Copa <ncopa@alpinelinux.org>
|
||||
Date: Thu, 18 Feb 2016 10:33:04 +0100
|
||||
Subject: [PATCH 2/3] Fix build with musl libc
|
||||
|
||||
On musl libc the fopen64 and fopen are the same thing, but for
|
||||
compatibility they have a `#define fopen64 fopen`. Same applies for
|
||||
fseek64, fstat64, fstatvfs64, ftello64, lstat64, stat64 and tmpfile64.
|
||||
---
|
||||
include/llvm/Analysis/TargetLibraryInfo.h | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/include/llvm/Analysis/TargetLibraryInfo.h b/include/llvm/Analysis/TargetLibraryInfo.h
|
||||
index 7becdf0..7f14427 100644
|
||||
--- a/include/llvm/Analysis/TargetLibraryInfo.h
|
||||
+++ b/include/llvm/Analysis/TargetLibraryInfo.h
|
||||
@@ -18,6 +18,15 @@
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/Pass.h"
|
||||
|
||||
+#undef fopen64
|
||||
+#undef fseeko64
|
||||
+#undef fstat64
|
||||
+#undef fstatvfs64
|
||||
+#undef ftello64
|
||||
+#undef lstat64
|
||||
+#undef stat64
|
||||
+#undef tmpfile64
|
||||
+
|
||||
namespace llvm {
|
||||
/// VecDesc - Describes a possible vectorization of a function.
|
||||
/// Function 'VectorFnName' is equivalent to 'ScalarFnName' vectorized
|
||||
--
|
||||
2.7.3
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user