diff --git a/lib/licenses.nix b/lib/licenses.nix
index a790b576032d..1bb153ce4c31 100644
--- a/lib/licenses.nix
+++ b/lib/licenses.nix
@@ -281,6 +281,11 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
url = https://fedoraproject.org/wiki/Licensing/GPL_Classpath_Exception;
};
+ hpnd = spdx {
+ spdxId = "HPND";
+ fullName = "Historic Permission Notice and Disclaimer";
+ };
+
# Intel's license, seems free
iasl = {
fullName = "iASL";
diff --git a/nixos/doc/manual/release-notes/rl-1709.xml b/nixos/doc/manual/release-notes/rl-1709.xml
index 1d6e693f83c7..e4fac275d799 100644
--- a/nixos/doc/manual/release-notes/rl-1709.xml
+++ b/nixos/doc/manual/release-notes/rl-1709.xml
@@ -335,6 +335,13 @@ FLUSH PRIVILEGES;
was removed and should not be needed anymore.
+
+
+ Redis has been updated to version 4 which mandates a cluster
+ mass-restart, due to changes in the network handling, in order
+ to ensure compatibility with networks NATing traffic.
+
+
Other notable improvements:
@@ -432,6 +439,16 @@ FLUSH PRIVILEGES;
version, kernel version and build date of all bootable generations.
+
+
+ The dnscrypt-proxy service now defaults to using a random upstream resolver,
+ selected from the list of public non-logging resolvers with DNSSEC support.
+ Existing configurations can be migrated to this mode of operation by
+ omitting the option
+ or setting it to "random".
+
+
+
diff --git a/nixos/modules/hardware/video/nvidia.nix b/nixos/modules/hardware/video/nvidia.nix
index 80abec95c03d..52f1773e9c45 100644
--- a/nixos/modules/hardware/video/nvidia.nix
+++ b/nixos/modules/hardware/video/nvidia.nix
@@ -40,6 +40,12 @@ in
{
config = mkIf enabled {
+ assertions = [
+ {
+ assertion = services.xserver.displayManager.gdm.wayland;
+ message = "NVidia drivers don't support wayland";
+ }
+ ];
services.xserver.drivers = singleton
{ name = "nvidia"; modules = [ nvidia_x11.bin ]; libPath = [ nvidia_x11 ]; };
@@ -62,11 +68,16 @@ in
boot.extraModulePackages = [ nvidia_x11.bin ];
# nvidia-uvm is required by CUDA applications.
- boot.kernelModules = [ "nvidia-uvm" ];
+ boot.kernelModules = [ "nvidia-uvm" ] ++
+ lib.optionals config.services.xserver.enable [ "nvidia" "nvidia_modeset" "nvidia_drm" ];
+
# Create /dev/nvidia-uvm when the nvidia-uvm module is loaded.
services.udev.extraRules =
''
+ KERNEL=="nvidia", RUN+="${pkgs.stdenv.shell} -c 'mknod -m 666 /dev/nvidiactl c $(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 255'"
+ KERNEL=="nvidia_modeset", RUN+="${pkgs.stdenv.shell} -c 'mknod -m 666 /dev/nvidia-modeset c $(grep nvidia-frontend /proc/devices | cut -d \ -f 1) 254'"
+ KERNEL=="card*", SUBSYSTEM=="drm", DRIVERS=="nvidia", RUN+="${pkgs.stdenv.shell} -c 'mknod -m 666 /dev/nvidia%n c $(grep nvidia-frontend /proc/devices | cut -d \ -f 1) %n'"
KERNEL=="nvidia_uvm", RUN+="${pkgs.stdenv.shell} -c 'mknod -m 666 /dev/nvidia-uvm c $(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'"
'';
diff --git a/nixos/modules/installer/cd-dvd/iso-image.nix b/nixos/modules/installer/cd-dvd/iso-image.nix
index 96f7aac1d59d..a039f7fdcb6e 100644
--- a/nixos/modules/installer/cd-dvd/iso-image.nix
+++ b/nixos/modules/installer/cd-dvd/iso-image.nix
@@ -361,6 +361,9 @@ in
{ source = config.isoImage.splashImage;
target = "/isolinux/background.png";
}
+ { source = pkgs.writeText "version" config.system.nixosVersion;
+ target = "/version.txt";
+ }
] ++ optionals config.isoImage.makeEfiBootable [
{ source = efiImg;
target = "/boot/efi.img";
diff --git a/nixos/modules/services/monitoring/monit.nix b/nixos/modules/services/monitoring/monit.nix
index e07ffd2e8b54..71f50cc0f19d 100644
--- a/nixos/modules/services/monitoring/monit.nix
+++ b/nixos/modules/services/monitoring/monit.nix
@@ -17,20 +17,22 @@ in
};
config = mkOption {
default = "";
- description = "monit.conf content";
+ description = "monitrc content";
};
};
};
config = mkIf config.services.monit.enable {
+ environment.systemPackages = [ pkgs.monit ];
+
environment.etc = [
{
source = pkgs.writeTextFile {
- name = "monit.conf";
+ name = "monitrc";
text = config.services.monit.config;
};
- target = "monit.conf";
+ target = "monitrc";
mode = "0400";
}
];
@@ -40,9 +42,9 @@ in
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
- ExecStart = "${pkgs.monit}/bin/monit -I -c /etc/monit.conf";
- ExecStop = "${pkgs.monit}/bin/monit -c /etc/monit.conf quit";
- ExecReload = "${pkgs.monit}/bin/monit -c /etc/monit.conf reload";
+ ExecStart = "${pkgs.monit}/bin/monit -I -c /etc/monitrc";
+ ExecStop = "${pkgs.monit}/bin/monit -c /etc/monitrc quit";
+ ExecReload = "${pkgs.monit}/bin/monit -c /etc/monitrc reload";
KillMode = "process";
Restart = "always";
};
diff --git a/nixos/modules/services/networking/consul.nix b/nixos/modules/services/networking/consul.nix
index 166ee7732375..6333970cb338 100644
--- a/nixos/modules/services/networking/consul.nix
+++ b/nixos/modules/services/networking/consul.nix
@@ -183,6 +183,7 @@ in
ExecReload = "${cfg.package.bin}/bin/consul reload";
PermissionsStartOnly = true;
User = if cfg.dropPrivileges then "consul" else null;
+ Restart = "on-failure";
TimeoutStartSec = "0";
} // (optionalAttrs (cfg.leaveOnStop) {
ExecStop = "${cfg.package.bin}/bin/consul leave";
diff --git a/nixos/modules/services/networking/tinc.nix b/nixos/modules/services/networking/tinc.nix
index 0354e76d74fb..adb80ea29840 100644
--- a/nixos/modules/services/networking/tinc.nix
+++ b/nixos/modules/services/networking/tinc.nix
@@ -163,6 +163,12 @@ in
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
path = [ data.package ];
+ restartTriggers =
+ let
+ drvlist = [ config.environment.etc."tinc/${network}/tinc.conf".source ]
+ ++ mapAttrsToList (host: _: config.environment.etc."tinc/${network}/hosts/${host}".source) data.hosts;
+ in # drvlist might be too long to be used directly
+ [ (builtins.hashString "sha256" (concatMapStrings (d: d.outPath) drvlist)) ];
serviceConfig = {
Type = "simple";
Restart = "always";
diff --git a/nixos/modules/services/networking/wpa_supplicant.nix b/nixos/modules/services/networking/wpa_supplicant.nix
index c91ba91fcb4d..908c8730ad2a 100644
--- a/nixos/modules/services/networking/wpa_supplicant.nix
+++ b/nixos/modules/services/networking/wpa_supplicant.nix
@@ -148,6 +148,7 @@ in {
wants = [ "network.target" ];
requires = lib.concatMap deviceUnit ifaces;
wantedBy = [ "multi-user.target" ];
+ stopIfChanged = false;
path = [ pkgs.wpa_supplicant ];
diff --git a/nixos/modules/services/networking/znc.nix b/nixos/modules/services/networking/znc.nix
index 763843fdec00..3d9cec46a582 100644
--- a/nixos/modules/services/networking/znc.nix
+++ b/nixos/modules/services/networking/znc.nix
@@ -212,6 +212,14 @@ in
'';
};
+ openFirewall = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to open ports in the firewall for ZNC.
+ '';
+ };
+
zncConf = mkOption {
default = "";
example = "See: http://wiki.znc.in/Configuration";
@@ -276,14 +284,6 @@ in
'';
};
- openFirewall = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Whether to open ports in the firewall for ZNC.
- '';
- };
-
passBlock = mkOption {
example = defaultPassBlock;
type = types.string;
@@ -359,7 +359,7 @@ in
config = mkIf cfg.enable {
networking.firewall = mkIf cfg.openFirewall {
- allowedTCPPorts = [ cfg.port ];
+ allowedTCPPorts = [ cfg.confOptions.port ];
};
systemd.services.znc = {
diff --git a/nixos/modules/services/x11/display-managers/gdm.nix b/nixos/modules/services/x11/display-managers/gdm.nix
index b0a3ff1bb753..83c5c95dae7e 100644
--- a/nixos/modules/services/x11/display-managers/gdm.nix
+++ b/nixos/modules/services/x11/display-managers/gdm.nix
@@ -64,6 +64,14 @@ in
};
};
+ wayland = mkOption {
+ default = true;
+ description = ''
+ Allow GDM run on Wayland instead of Xserver
+ '';
+ type = types.bool;
+ };
+
};
};
@@ -94,6 +102,7 @@ in
# GDM needs different xserverArgs, presumable because using wayland by default.
services.xserver.tty = null;
services.xserver.display = null;
+ services.xserver.verbose = null;
services.xserver.displayManager.job =
{
@@ -139,6 +148,7 @@ in
# presented and there's a little delay.
environment.etc."gdm/custom.conf".text = ''
[daemon]
+ WaylandEnable=${if cfg.gdm.wayland then "true" else "false"}
${optionalString cfg.gdm.autoLogin.enable (
if cfg.gdm.autoLogin.delay > 0 then ''
TimedLoginEnable=true
diff --git a/nixos/modules/services/x11/xserver.nix b/nixos/modules/services/x11/xserver.nix
index 3ce124d3da27..d4fe475690ce 100644
--- a/nixos/modules/services/x11/xserver.nix
+++ b/nixos/modules/services/x11/xserver.nix
@@ -480,6 +480,15 @@ in
'';
};
+ verbose = mkOption {
+ type = types.nullOr types.int;
+ default = 3;
+ example = 7;
+ description = ''
+ Controls verbosity of X logging.
+ '';
+ };
+
useGlamor = mkOption {
type = types.bool;
default = false;
@@ -631,10 +640,11 @@ in
[ "-config ${configFile}"
"-xkbdir" "${cfg.xkbDir}"
# Log at the default verbosity level to stderr rather than /var/log/X.*.log.
- "-verbose" "3" "-logfile" "/dev/null"
+ "-logfile" "/dev/null"
] ++ optional (cfg.display != null) ":${toString cfg.display}"
++ optional (cfg.tty != null) "vt${toString cfg.tty}"
++ optional (cfg.dpi != null) "-dpi ${toString cfg.dpi}"
+ ++ optional (cfg.verbose != null) "-verbose ${toString cfg.verbose}"
++ optional (!cfg.enableTCP) "-nolisten tcp"
++ optional (cfg.autoRepeatDelay != null) "-ardelay ${toString cfg.autoRepeatDelay}"
++ optional (cfg.autoRepeatInterval != null) "-arinterval ${toString cfg.autoRepeatInterval}"
diff --git a/nixos/modules/system/boot/systemd.nix b/nixos/modules/system/boot/systemd.nix
index ed1f5d20afb6..dd9ba7104485 100644
--- a/nixos/modules/system/boot/systemd.nix
+++ b/nixos/modules/system/boot/systemd.nix
@@ -875,7 +875,12 @@ in
systemd.services.systemd-remount-fs.restartIfChanged = false;
systemd.services.systemd-update-utmp.restartIfChanged = false;
systemd.services.systemd-user-sessions.restartIfChanged = false; # Restart kills all active sessions.
- systemd.services.systemd-logind.restartTriggers = [ config.environment.etc."systemd/logind.conf".source ];
+ # Restarting systemd-logind breaks X11
+ # - upstream commit: https://cgit.freedesktop.org/xorg/xserver/commit/?id=dc48bd653c7e101
+ # - systemd announcement: https://github.com/systemd/systemd/blob/22043e4317ecd2bc7834b48a6d364de76bb26d91/NEWS#L103-L112
+ # - this might be addressed in the future by xorg
+ #systemd.services.systemd-logind.restartTriggers = [ config.environment.etc."systemd/logind.conf".source ];
+ systemd.services.systemd-logind.restartIfChanged = false;
systemd.services.systemd-logind.stopIfChanged = false;
systemd.services.systemd-journald.restartTriggers = [ config.environment.etc."systemd/journald.conf".source ];
systemd.services.systemd-journald.stopIfChanged = false;
diff --git a/nixos/modules/tasks/kbd.nix b/nixos/modules/tasks/kbd.nix
index 3975dd5b0ffd..7fb3cbc5c1bc 100644
--- a/nixos/modules/tasks/kbd.nix
+++ b/nixos/modules/tasks/kbd.nix
@@ -98,22 +98,10 @@ in
'') config.i18n.consoleColors}
'';
- /* XXX: systemd-vconsole-setup needs a "main" terminal. By default
- * /dev/tty0 is used which wouldn't work when the service is restarted
- * from X11. We set this to /dev/tty1; not ideal because it may also be
- * owned by X11 or something else.
- *
- * See #22470.
- */
systemd.services."systemd-vconsole-setup" =
- { wantedBy = [ "sysinit.target" ];
- before = [ "display-manager.service" ];
+ { before = [ "display-manager.service" ];
after = [ "systemd-udev-settle.service" ];
restartTriggers = [ vconsoleConf kbdEnv ];
- serviceConfig.ExecStart = [
- ""
- "${pkgs.systemd}/lib/systemd/systemd-vconsole-setup /dev/tty1"
- ];
};
}
diff --git a/nixos/modules/tasks/network-interfaces-scripted.nix b/nixos/modules/tasks/network-interfaces-scripted.nix
index 3512296dff4a..e92c9bc27def 100644
--- a/nixos/modules/tasks/network-interfaces-scripted.nix
+++ b/nixos/modules/tasks/network-interfaces-scripted.nix
@@ -122,24 +122,32 @@ let
# Set the default gateway.
${optionalString (cfg.defaultGateway != null && cfg.defaultGateway.address != "") ''
- # FIXME: get rid of "|| true" (necessary to make it idempotent).
- ip route add default ${optionalString (cfg.defaultGateway.metric != null)
+ ${optionalString (cfg.defaultGateway.interface != null) ''
+ ip route replace ${cfg.defaultGateway.address} dev ${cfg.defaultGateway.interface} ${optionalString (cfg.defaultGateway.metric != null)
+ "metric ${toString cfg.defaultGateway.metric}"
+ } proto static
+ ''}
+ ip route replace default ${optionalString (cfg.defaultGateway.metric != null)
"metric ${toString cfg.defaultGateway.metric}"
} via "${cfg.defaultGateway.address}" ${
optionalString (cfg.defaultGatewayWindowSize != null)
"window ${toString cfg.defaultGatewayWindowSize}"} ${
optionalString (cfg.defaultGateway.interface != null)
- "dev ${cfg.defaultGateway.interface}"} proto static || true
+ "dev ${cfg.defaultGateway.interface}"} proto static
''}
${optionalString (cfg.defaultGateway6 != null && cfg.defaultGateway6.address != "") ''
- # FIXME: get rid of "|| true" (necessary to make it idempotent).
- ip -6 route add ::/0 ${optionalString (cfg.defaultGateway6.metric != null)
+ ${optionalString (cfg.defaultGateway6.interface != null) ''
+ ip -6 route replace ${cfg.defaultGateway6.address} dev ${cfg.defaultGateway6.interface} ${optionalString (cfg.defaultGateway6.metric != null)
+ "metric ${toString cfg.defaultGateway6.metric}"
+ } proto static
+ ''}
+ ip -6 route replace default ${optionalString (cfg.defaultGateway6.metric != null)
"metric ${toString cfg.defaultGateway6.metric}"
} via "${cfg.defaultGateway6.address}" ${
optionalString (cfg.defaultGatewayWindowSize != null)
"window ${toString cfg.defaultGatewayWindowSize}"} ${
optionalString (cfg.defaultGateway6.interface != null)
- "dev ${cfg.defaultGateway6.interface}"} proto static || true
+ "dev ${cfg.defaultGateway6.interface}"} proto static
''}
'';
};
diff --git a/nixos/tests/mesos.nix b/nixos/tests/mesos.nix
index 6e9af126f032..34671df047c8 100644
--- a/nixos/tests/mesos.nix
+++ b/nixos/tests/mesos.nix
@@ -56,9 +56,7 @@ import ./make-test.nix ({ pkgs, ...} : rec {
src = ./mesos_test.py;
phases = [ "installPhase" "fixupPhase" ];
installPhase = ''
- mkdir $out
- cp $src $out/mesos_test.py
- chmod +x $out/mesos_test.py
+ install -Dvm 0755 $src $out/bin/mesos_test.py
echo "done" > test.result
tar czf $out/test.tar.gz test.result
@@ -74,18 +72,18 @@ import ./make-test.nix ({ pkgs, ...} : rec {
$master->waitForOpenPort(5050);
$slave->waitForOpenPort(5051);
- # is slave registred?
+ # is slave registered?
$master->waitUntilSucceeds("curl -s --fail http://master:5050/master/slaves".
" | grep -q \"\\\"hostname\\\":\\\"slave\\\"\"");
- # try to run docker image
+ # try to run docker image
$master->succeed("${pkgs.mesos}/bin/mesos-execute --master=master:5050".
" --resources=\"cpus:0.1;mem:32\" --name=simple-docker".
" --containerizer=mesos --docker_image=echo:latest".
" --shell=true --command=\"echo done\" | grep -q TASK_FINISHED");
# simple command with .tar.gz uri
- $master->succeed("${testFramework}/mesos_test.py master ".
+ $master->succeed("${testFramework}/bin/mesos_test.py master ".
"${testFramework}/test.tar.gz");
'';
})
diff --git a/pkgs/applications/altcoins/bitcoin-abc.nix b/pkgs/applications/altcoins/bitcoin-abc.nix
new file mode 100644
index 000000000000..d3800062b119
--- /dev/null
+++ b/pkgs/applications/altcoins/bitcoin-abc.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, pkgconfig, autoreconfHook, openssl, db48, boost
+, zlib, miniupnpc, qt5, utillinux, protobuf, qrencode, libevent
+, withGui }:
+
+with stdenv.lib;
+
+stdenv.mkDerivation rec {
+
+ name = "bitcoin" + (toString (optional (!withGui) "d")) + "-abc-" + version;
+ version = "0.15.0";
+
+ src = fetchFromGitHub {
+ owner = "bitcoin-ABC";
+ repo = "bitcoin-abc";
+ rev = "v${version}";
+ sha256 = "1fygn6cc99iasg5g5jyps5ps873hfnn4ln4hsmcwlwiqd591qxyv";
+ };
+
+ patches = [ ./fix-bitcoin-qt-build.patch ];
+
+ nativeBuildInputs = [ pkgconfig autoreconfHook ];
+ buildInputs = [ openssl db48 boost zlib
+ miniupnpc utillinux protobuf libevent ]
+ ++ optionals withGui [ qt5.qtbase qt5.qttools qrencode ];
+
+ configureFlags = [ "--with-boost-libdir=${boost.out}/lib" ]
+ ++ optionals withGui [ "--with-gui=qt5" ];
+
+ meta = {
+ description = "Peer-to-peer electronic cash system (Cash client)";
+ longDescription= ''
+ Bitcoin ABC is the name of open source software which enables the use of Bitcoin.
+ It is designed to facilite a hard fork to increase Bitcoin's block size limit.
+ "ABC" stands for "Adjustable Blocksize Cap".
+
+ Bitcoin ABC is a fork of the Bitcoin Core software project.
+ '';
+ homepage = https://bitcoinabc.org/;
+ maintainers = with maintainers; [ lassulus ];
+ license = licenses.mit;
+ platforms = platforms.unix;
+ };
+}
diff --git a/pkgs/applications/altcoins/default.nix b/pkgs/applications/altcoins/default.nix
index 31dcc78d3d7f..f83e565db919 100644
--- a/pkgs/applications/altcoins/default.nix
+++ b/pkgs/applications/altcoins/default.nix
@@ -5,6 +5,9 @@ rec {
bitcoin = callPackage ./bitcoin.nix { withGui = true; };
bitcoind = callPackage ./bitcoin.nix { withGui = false; };
+ bitcoin-abc = callPackage ./bitcoin-abc.nix { withGui = true; };
+ bitcoind-abc = callPackage ./bitcoin-abc.nix { withGui = false; };
+
bitcoin-unlimited = callPackage ./bitcoin-unlimited.nix { withGui = true; };
bitcoind-unlimited = callPackage ./bitcoin-unlimited.nix { withGui = false; };
diff --git a/pkgs/applications/altcoins/fix-bitcoin-qt-build.patch b/pkgs/applications/altcoins/fix-bitcoin-qt-build.patch
new file mode 100644
index 000000000000..cbbfd85fe5bf
--- /dev/null
+++ b/pkgs/applications/altcoins/fix-bitcoin-qt-build.patch
@@ -0,0 +1,15 @@
+--- bitcoin-abc-v0.15.0-src/build-aux/m4/bitcoin_qt.m4 1970-01-01 01:00:01.000000000 +0100
++++ bitcoin-abc-v0.15.0-src.org/build-aux/m4/bitcoin_qt.m4 2017-09-27 23:38:44.748384197 +0100
+@@ -35,11 +35,7 @@
+ dnl Output: $1 is set to the path of $2 if found. $2 are searched in order.
+ AC_DEFUN([BITCOIN_QT_PATH_PROGS],[
+ BITCOIN_QT_CHECK([
+- if test "x$3" != "x"; then
+- AC_PATH_PROGS($1,$2,,$3)
+- else
+- AC_PATH_PROGS($1,$2)
+- fi
++ AC_PATH_PROGS($1,$2)
+ if test "x$$1" = "x" && test "x$4" != "xyes"; then
+ BITCOIN_QT_FAIL([$1 not found])
+ fi
diff --git a/pkgs/applications/misc/mupdf/default.nix b/pkgs/applications/misc/mupdf/default.nix
index da5f3c3bf128..9fe275b490c1 100644
--- a/pkgs/applications/misc/mupdf/default.nix
+++ b/pkgs/applications/misc/mupdf/default.nix
@@ -1,6 +1,8 @@
-{ stdenv, fetchurl, fetchpatch, pkgconfig
-, zlib, freetype, libjpeg, jbig2dec, openjpeg
-, libX11, libXcursor, libXrandr, libXinerama, libXext, harfbuzz, mesa }:
+{ stdenv, lib, fetchurl, fetchpatch, pkgconfig
+, freetype, harfbuzz, openjpeg, jbig2dec
+, enableX11 ? true, libX11, libXext
+, enableCurl ? true, curl, openssl
+}:
stdenv.mkDerivation rec {
version = "1.11";
@@ -28,7 +30,9 @@ stdenv.mkDerivation rec {
makeFlags = [ "prefix=$(out)" ];
nativeBuildInputs = [ pkgconfig ];
- buildInputs = [ zlib libX11 libXcursor libXext harfbuzz mesa libXrandr libXinerama freetype libjpeg jbig2dec openjpeg ];
+ buildInputs = [ freetype harfbuzz openjpeg jbig2dec ]
+ ++ lib.optionals enableX11 [ libX11 libXext ]
+ ++ lib.optionals enableCurl [ curl openssl ];
outputs = [ "bin" "dev" "out" "man" "doc" ];
preConfigure = ''
diff --git a/pkgs/applications/misc/octoprint/m33-fio-one-library.patch b/pkgs/applications/misc/octoprint/m33-fio-one-library.patch
index 87b00f3ab705..24c9c4a80f5d 100644
--- a/pkgs/applications/misc/octoprint/m33-fio-one-library.patch
+++ b/pkgs/applications/misc/octoprint/m33-fio-one-library.patch
@@ -1,18 +1,18 @@
-From 0defcf6ec155899c414f66524b7df629f59327f0 Mon Sep 17 00:00:00 2001
+From 314bcebfcd1759981ce12255be29d8ae68cd400b Mon Sep 17 00:00:00 2001
From: Nikolay Amiantov
Date: Wed, 23 Nov 2016 00:40:48 +0300
Subject: [PATCH] Build and use one version of preprocessor library
---
- octoprint_m33fio/__init__.py | 67 ++----------------------------------------
- shared library source/Makefile | 62 +++-----------------------------------
- 2 files changed, 6 insertions(+), 123 deletions(-)
+ octoprint_m33fio/__init__.py | 73 ++----------------------------------------
+ shared library source/Makefile | 62 +++--------------------------------
+ 2 files changed, 6 insertions(+), 129 deletions(-)
diff --git a/octoprint_m33fio/__init__.py b/octoprint_m33fio/__init__.py
-index 4b43c59..d1259e4 100755
+index 054870a..4d5ecc1 100755
--- a/octoprint_m33fio/__init__.py
+++ b/octoprint_m33fio/__init__.py
-@@ -1062,71 +1062,8 @@ class M33FioPlugin(
+@@ -1189,78 +1189,9 @@ class M33FioPlugin(
# Check if using shared library or checking if it is usable
if self._settings.get_boolean(["UseSharedLibrary"]) or isUsable :
@@ -54,7 +54,9 @@ index 4b43c59..d1259e4 100755
-
- # Otherwise check if running on Windows and using an i386 or x86-64 device
- elif platform.uname()[0].startswith("Windows") and (platform.uname()[4].endswith("86") or platform.uname()[4].endswith("64")) :
--
++ # Set shared library
++ self.sharedLibrary = ctypes.cdll.LoadLibrary(self._basefolder.replace('\\', '/') + "/static/libraries/libpreprocessor.so")
+
- # Check if Python is running as 32-bit
- if platform.architecture()[0].startswith("32") :
-
@@ -81,11 +83,16 @@ index 4b43c59..d1259e4 100755
-
- # Set shared library
- self.sharedLibrary = ctypes.cdll.LoadLibrary(self._basefolder.replace("\\", "/") + "/static/libraries/preprocessor_x86-64.dylib")
-+ # Set shared library
-+ self.sharedLibrary = ctypes.cdll.LoadLibrary(self._basefolder.replace('\\', '/') + "/static/libraries/libpreprocessor.so")
-
+-
+- # Otherwise check if running FreeBSD
+- elif platform.uname()[0].startswith("FreeBSD") :
+-
+- # TODO: Compile FreeBSD shared library pre-processors
+- pass
+-
# Check if shared library was set
if self.sharedLibrary :
+
diff --git a/shared library source/Makefile b/shared library source/Makefile
index 792b4f4..4c74f5c 100755
--- a/shared library source/Makefile
@@ -164,5 +171,5 @@ index 792b4f4..4c74f5c 100755
clean:
rm -f ../octoprint_m33fio/static/libraries/$(PROG)
--
-2.11.0
+2.14.1
diff --git a/pkgs/applications/misc/octoprint/plugins.nix b/pkgs/applications/misc/octoprint/plugins.nix
index c09e8d2f5e66..0a1d26012a80 100644
--- a/pkgs/applications/misc/octoprint/plugins.nix
+++ b/pkgs/applications/misc/octoprint/plugins.nix
@@ -12,13 +12,13 @@ let
m33-fio = buildPlugin rec {
name = "M33-Fio-${version}";
- version = "1.20";
+ version = "1.21";
src = fetchFromGitHub {
owner = "donovan6000";
repo = "M33-Fio";
rev = "V${version}";
- sha256 = "1ng7lzlkqsjcr1w7wgzwsqkkvcvpajcj2cwqlffh95916sw8n767";
+ sha256 = "1la3611kkqn8yiwjn6cizc45ri8pnk6ckld1na4nk6mqk88jvjq7";
};
patches = [
diff --git a/pkgs/applications/networking/browsers/tor-browser-bundle/default.nix b/pkgs/applications/networking/browsers/tor-browser-bundle/default.nix
index ca20125332aa..16182c8e4e71 100644
--- a/pkgs/applications/networking/browsers/tor-browser-bundle/default.nix
+++ b/pkgs/applications/networking/browsers/tor-browser-bundle/default.nix
@@ -15,7 +15,6 @@
, noto-fonts-emoji
# Extensions, common
-, unzip
, zip
# HTTPS Everywhere
@@ -27,6 +26,7 @@
# Customization
, extraPrefs ? ""
+, extraExtensions ? [ ]
}:
let
@@ -36,144 +36,19 @@ let
sha256 = "0j37mqldj33fnzghxifvy6v8vdwkcz0i4z81prww64md5s8qcsa9";
};
- # Each extension drv produces an output comprising an unpacked .xpi
- # named after the extension uuid, as it would appear under
- # `firefox/extensions'.
- firefoxExtensions = {
- https-everywhere = stdenv.mkDerivation rec {
- name = "https-everywhere-${version}";
- version = "5.2.21";
-
- extid = "https-everywhere-eff@eff.org";
-
- src = fetchgit {
- url = "https://git.torproject.org/https-everywhere.git";
- rev = "refs/tags/${version}";
- sha256 = "0z9madihh4b4z4blvfmh6w1hsv8afyi0x7b243nciq9r4w55xgfa";
- };
-
- nativeBuildInputs = [
- git
- libxml2 # xmllint
- python27
- python27Packages.lxml
- rsync
- unzip
- zip
- ];
-
- unpackPhase = ''
- cp -dR --no-preserve=mode "$src" src
- cd src
- '';
-
- # Beware: the build expects translations/ to be non-empty (which it
- # will be with submodules initialized).
- buildPhase = ''
- $shell ./makexpi.sh ${version} --no-recurse
- '';
-
- installPhase = ''
- mkdir $out
- unzip -d "$out/$extid" "pkg/https-everywhere-$version-eff.xpi"
- '';
-
- meta = {
- homepage = https://gitweb.torproject.org/https-everywhere.git/;
- };
- };
-
- noscript = stdenv.mkDerivation rec {
- name = "noscript-${version}";
- version = "5.0.10";
-
- extid = "{73a6fe31-595d-460b-a920-fcc0f8843232}";
-
- src = fetchurl {
- url = "https://secure.informaction.com/download/releases/noscript-${version}.xpi";
- sha256 = "18k5karbaj5mhd9cyjbqgik6044bw88rjalkh6anjanxbn503j6g";
- };
-
- nativeBuildInputs = [ unzip ];
-
- unpackPhase = ":";
-
- installPhase = ''
- mkdir $out
- unzip -d "$out/$extid" "$src"
- '';
- };
-
- torbutton = stdenv.mkDerivation rec {
- name = "torbutton-${version}";
- version = "1.9.8.1";
-
- extid = "torbutton@torproject.org";
-
- src = fetchgit {
- url = "https://git.torproject.org/torbutton.git";
- rev = "refs/tags/${version}";
- sha256 = "1amp0c9ky0a7fsa0bcbi6n6ginw7s2g3an4rj7kvc1lxmrcsm65l";
- };
-
- nativeBuildInputs = [ unzip zip ];
-
- unpackPhase = ''
- cp -dR --no-preserve=mode "$src" src
- cd src
- '';
-
- buildPhase = ''
- $shell ./makexpi.sh
- '';
-
- installPhase = ''
- mkdir $out
- unzip -d "$out/$extid" "pkg/torbutton-$version.xpi"
- '';
-
- meta = {
- homepage = https://gitweb.torproject.org/torbutton.git/;
- };
- };
-
- tor-launcher = stdenv.mkDerivation rec {
- name = "tor-launcher-${version}";
- version = "0.2.12.3";
-
- extid = "tor-launcher@torproject.org";
-
- src = fetchgit {
- url = "https://git.torproject.org/tor-launcher.git";
- rev = "refs/tags/${version}";
- sha256 = "0126x48pjiy2zm4l8jzhk70w24hviaz560ffp4lb9x0ar615bc9q";
- };
-
- nativeBuildInputs = [ unzip zip ];
-
- unpackPhase = ''
- cp -dR --no-preserve=mode "$src" src
- cd src
- '';
-
- buildPhase = ''
- make package
- '';
-
- installPhase = ''
- mkdir $out
- unzip -d "$out/$extid" "pkg/tor-launcher-$version.xpi"
- '';
-
- meta = {
- homepage = https://gitweb.torproject.org/tor-launcher.git/;
- };
- };
+ firefoxExtensions = import ./extensions.nix {
+ inherit stdenv fetchurl fetchgit zip
+ git libxml2 python27 python27Packages rsync;
};
extensionsEnv = symlinkJoin {
name = "tor-browser-extensions";
- paths = with firefoxExtensions; [ https-everywhere noscript torbutton tor-launcher ];
+ paths = with firefoxExtensions; [
+ https-everywhere
+ noscript
+ torbutton
+ tor-launcher
+ ] ++ extraExtensions;
};
fontsEnv = symlinkJoin {
diff --git a/pkgs/applications/networking/browsers/tor-browser-bundle/extensions.nix b/pkgs/applications/networking/browsers/tor-browser-bundle/extensions.nix
new file mode 100644
index 000000000000..4adf99365ba3
--- /dev/null
+++ b/pkgs/applications/networking/browsers/tor-browser-bundle/extensions.nix
@@ -0,0 +1,122 @@
+{ stdenv
+, fetchgit
+, fetchurl
+
+# common
+, zip
+
+# HTTPS Everywhere
+, git
+, libxml2 # xmllint
+, python27
+, python27Packages
+, rsync
+}:
+
+{
+ https-everywhere = stdenv.mkDerivation rec {
+ name = "https-everywhere-${version}";
+ version = "5.2.21";
+
+ extid = "https-everywhere-eff@eff.org";
+
+ src = fetchgit {
+ url = "https://git.torproject.org/https-everywhere.git";
+ rev = "refs/tags/${version}";
+ sha256 = "0z9madihh4b4z4blvfmh6w1hsv8afyi0x7b243nciq9r4w55xgfa";
+ };
+
+ nativeBuildInputs = [
+ git
+ libxml2 # xmllint
+ python27
+ python27Packages.lxml
+ rsync
+ zip
+ ];
+
+ unpackPhase = ''
+ cp -dR --no-preserve=mode "$src" src && cd src
+ '';
+
+ buildPhase = ''
+ $shell ./makexpi.sh ${version} --no-recurse
+ '';
+
+ installPhase = ''
+ install -m 444 -D pkg/https-everywhere-$version-eff.xpi "$out/$extid.xpi"
+ '';
+ };
+
+ noscript = stdenv.mkDerivation rec {
+ name = "noscript-${version}";
+ version = "5.0.10";
+
+ extid = "{73a6fe31-595d-460b-a920-fcc0f8843232}";
+
+ src = fetchurl {
+ url = "https://secure.informaction.com/download/releases/noscript-${version}.xpi";
+ sha256 = "18k5karbaj5mhd9cyjbqgik6044bw88rjalkh6anjanxbn503j6g";
+ };
+
+ unpackPhase = ":";
+
+ installPhase = ''
+ install -m 444 -D $src "$out/$extid.xpi"
+ '';
+ };
+
+ torbutton = stdenv.mkDerivation rec {
+ name = "torbutton-${version}";
+ version = "1.9.8.1";
+
+ extid = "torbutton@torproject.org";
+
+ src = fetchgit {
+ url = "https://git.torproject.org/torbutton.git";
+ rev = "refs/tags/${version}";
+ sha256 = "1amp0c9ky0a7fsa0bcbi6n6ginw7s2g3an4rj7kvc1lxmrcsm65l";
+ };
+
+ nativeBuildInputs = [ zip ];
+
+ unpackPhase = ''
+ cp -dR --no-preserve=mode "$src" src && cd src
+ '';
+
+ buildPhase = ''
+ $shell ./makexpi.sh
+ '';
+
+ installPhase = ''
+ install -m 444 -D pkg/torbutton-$version.xpi "$out/$extid.xpi"
+ '';
+ };
+
+ tor-launcher = stdenv.mkDerivation rec {
+ name = "tor-launcher-${version}";
+ version = "0.2.12.3";
+
+ extid = "tor-launcher@torproject.org";
+
+ src = fetchgit {
+ url = "https://git.torproject.org/tor-launcher.git";
+ rev = "refs/tags/${version}";
+ sha256 = "0126x48pjiy2zm4l8jzhk70w24hviaz560ffp4lb9x0ar615bc9q";
+ };
+
+ nativeBuildInputs = [ zip ];
+
+ unpackPhase = ''
+ cp -dR --no-preserve=mode "$src" src && cd src
+ '';
+
+ buildPhase = ''
+ make package
+ '';
+
+ installPhase = ''
+ install -m 444 -D pkg/tor-launcher-$version.xpi "$out/$extid.xpi"
+ '';
+ };
+}
diff --git a/pkgs/applications/networking/cluster/mesos/default.nix b/pkgs/applications/networking/cluster/mesos/default.nix
index 0506f7c154d2..712b1376845b 100644
--- a/pkgs/applications/networking/cluster/mesos/default.nix
+++ b/pkgs/applications/networking/cluster/mesos/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, lib, makeWrapper, fetchurl, curl, sasl, openssh, autoconf
-, automake, libtool, unzip, gnutar, jdk, maven, python, wrapPython
+{ stdenv, lib, makeWrapper, fetchurl, curl, sasl, openssh
+, unzip, gnutar, jdk, python, wrapPython
, setuptools, boto, pythonProtobuf, apr, subversion, gzip, systemd
, leveldb, glog, perf, utillinux, libnl, iproute, openssl, libevent
-, ethtool, coreutils, which, iptables
-, bash
+, ethtool, coreutils, which, iptables, maven
+, bash, autoreconfHook
}:
let
@@ -21,7 +21,7 @@ let
});
in stdenv.mkDerivation rec {
- version = "1.1.1";
+ version = "1.4.0";
name = "mesos-${version}";
enableParallelBuilding = true;
@@ -29,7 +29,7 @@ in stdenv.mkDerivation rec {
src = fetchurl {
url = "mirror://apache/mesos/${version}/${name}.tar.gz";
- sha256 = "0f46ebb130d2d4a9732f95d0a71d80c8c5967f3c172b110f2ece316e05922115";
+ sha256 = "0c08kd226nrjwm2z2drpq4vi97h9r8b1xkdvkgh1114fxg7cyvys";
};
patches = [
@@ -40,11 +40,13 @@ in stdenv.mkDerivation rec {
# see https://github.com/cstrahan/mesos/tree/nixos-${version}
./nixos.patch
];
-
+ nativeBuildInputs = [
+ autoreconfHook
+ ];
buildInputs = [
- makeWrapper autoconf automake libtool curl sasl jdk maven
+ makeWrapper curl sasl jdk
python wrapPython boto setuptools leveldb
- subversion apr glog openssl libevent
+ subversion apr glog openssl libevent maven
] ++ lib.optionals stdenv.isLinux [
libnl
];
@@ -52,10 +54,6 @@ in stdenv.mkDerivation rec {
propagatedBuildInputs = [
pythonProtobuf
];
-
- # note that we *must* statically link libprotobuf.
- # if we dynamically link the lib, we get these errors:
- # https://github.com/NixOS/nixpkgs/pull/19064#issuecomment-255082684
preConfigure = ''
# https://issues.apache.org/jira/browse/MESOS-6616
configureFlagsArray+=(
@@ -66,13 +64,10 @@ in stdenv.mkDerivation rec {
# instead of
sed 1i'#include ' -i src/linux/fs.cpp
sed 1i'#include ' -i src/slave/containerizer/mesos/isolators/gpu/isolator.cpp
-
substituteInPlace 3rdparty/stout/include/stout/os/posix/chown.hpp \
--subst-var-by chown ${coreutils}/bin/chown
substituteInPlace 3rdparty/stout/Makefile.am \
- --replace "-lprotobuf" \
- "${pythonProtobuf.protobuf}/lib/libprotobuf.so"
substituteInPlace 3rdparty/stout/include/stout/os/posix/fork.hpp \
--subst-var-by sh ${bash}/bin/bash
@@ -99,8 +94,6 @@ in stdenv.mkDerivation rec {
--subst-var-by mesos-resolve $out/bin/mesos-resolve
substituteInPlace src/python/native_common/ext_modules.py.in \
- --replace "-lprotobuf" \
- "${pythonProtobuf.protobuf}/lib/libprotobuf.so"
substituteInPlace src/slave/containerizer/mesos/isolators/gpu/volume.cpp \
--subst-var-by cp ${coreutils}/bin/cp \
@@ -124,8 +117,6 @@ in stdenv.mkDerivation rec {
substituteInPlace src/Makefile.am \
--subst-var-by mavenRepo ${mavenRepo} \
- --replace "-lprotobuf" \
- "${pythonProtobuf.protobuf}/lib/libprotobuf.so"
'' + lib.optionalString stdenv.isLinux ''
@@ -179,7 +170,7 @@ in stdenv.mkDerivation rec {
"--enable-libevent"
"--with-libevent=${libevent.dev}"
"--with-protobuf=${pythonProtobuf.protobuf}"
- "PROTOBUF_JAR=${mavenRepo}/com/google/protobuf/protobuf-java/2.6.1/protobuf-java-2.6.1.jar"
+ "PROTOBUF_JAR=${mavenRepo}/com/google/protobuf/protobuf-java/3.3.0/protobuf-java-3.3.0.jar"
] ++ lib.optionals stdenv.isLinux [
"--with-network-isolator"
"--with-nl=${libnl.dev}"
diff --git a/pkgs/applications/networking/cluster/mesos/fetch-mesos-deps.sh b/pkgs/applications/networking/cluster/mesos/fetch-mesos-deps.sh
index f4a4588dbe41..cf7318ecb273 100644
--- a/pkgs/applications/networking/cluster/mesos/fetch-mesos-deps.sh
+++ b/pkgs/applications/networking/cluster/mesos/fetch-mesos-deps.sh
@@ -1127,10 +1127,12 @@ fetchArtifact org/vafer/jdependency/0.7/jdependency-0.7.pom
fetchArtifact org/vafer/jdependency/0.7/jdependency-0.7.pom.sha1
fetchArtifact org/vafer/jdependency/0.7/jdependency-0.7.jar
fetchArtifact org/vafer/jdependency/0.7/jdependency-0.7.jar.sha1
-fetchArtifact com/google/protobuf/protobuf-java/2.6.1/protobuf-java-2.6.1.pom
-fetchArtifact com/google/protobuf/protobuf-java/2.6.1/protobuf-java-2.6.1.pom.sha1
-fetchArtifact com/google/protobuf/protobuf-java/2.6.1/protobuf-java-2.6.1.jar
-fetchArtifact com/google/protobuf/protobuf-java/2.6.1/protobuf-java-2.6.1.jar.sha1
+fetchArtifact com/google/protobuf/protobuf-java/3.3.0/protobuf-java-3.3.0.pom
+fetchArtifact com/google/protobuf/protobuf-java/3.3.0/protobuf-java-3.3.0.pom.sha1
+fetchArtifact com/google/protobuf/protobuf-java/3.3.0/protobuf-java-3.3.0.jar
+fetchArtifact com/google/protobuf/protobuf-java/3.3.0/protobuf-java-3.3.0.jar.sha1
+fetchArtifact com/google/protobuf/protobuf-parent/3.3.0/protobuf-parent-3.3.0.pom
+fetchArtifact com/google/protobuf/protobuf-parent/3.3.0/protobuf-parent-3.3.0.pom.sha1
fetchArtifact com/google/google/1/google-1.pom
fetchArtifact com/google/google/1/google-1.pom.sha1
fetchArtifact com/google/guava/guava/11.0.2/guava-11.0.2.pom
diff --git a/pkgs/applications/networking/cluster/mesos/mesos-deps.nix b/pkgs/applications/networking/cluster/mesos/mesos-deps.nix
index 1edb4a755d89..642c660edb69 100644
--- a/pkgs/applications/networking/cluster/mesos/mesos-deps.nix
+++ b/pkgs/applications/networking/cluster/mesos/mesos-deps.nix
@@ -6,7 +6,7 @@ stdenv.mkDerivation {
outputHashAlgo = "sha256";
outputHashMode = "recursive";
- outputHash = "066ikswavq3l37x1s3pfdncyj77pvpa0kj14ax5dqb9njmsg0s11";
+ outputHash = "10h0qs7svw0cqjkyxs8z6s3qraa8ga920zfrr59rdlanbwg4klly";
buildInputs = [ curl ];
diff --git a/pkgs/applications/networking/cluster/mesos/nixos.patch b/pkgs/applications/networking/cluster/mesos/nixos.patch
index 78e374b8d6bc..a6fea024b087 100644
--- a/pkgs/applications/networking/cluster/mesos/nixos.patch
+++ b/pkgs/applications/networking/cluster/mesos/nixos.patch
@@ -1,20 +1,7 @@
-diff --git a/3rdparty/stout/include/stout/os/posix/chown.hpp b/3rdparty/stout/include/stout/os/posix/chown.hpp
-index c82e2e574..15d332107 100644
---- a/3rdparty/stout/include/stout/os/posix/chown.hpp
-+++ b/3rdparty/stout/include/stout/os/posix/chown.hpp
-@@ -34,7 +34,7 @@ inline Try chown(
- // TODO(bmahler): Consider walking the file tree instead. We would need
- // to be careful to not miss dotfiles.
- std::string command =
-- "chown -R " + stringify(uid) + ':' + stringify(gid) + " '" + path + "'";
-+ "@chown@ -R " + stringify(uid) + ':' + stringify(gid) + " '" + path + "'";
-
- int status = os::system(command);
- if (status != 0) {
-diff --git a/3rdparty/stout/include/stout/os/posix/fork.hpp b/3rdparty/stout/include/stout/os/posix/fork.hpp
-index a29967dcb..290b98b50 100644
---- a/3rdparty/stout/include/stout/os/posix/fork.hpp
-+++ b/3rdparty/stout/include/stout/os/posix/fork.hpp
+diff --git i/3rdparty/stout/include/stout/os/posix/fork.hpp w/3rdparty/stout/include/stout/os/posix/fork.hpp
+index a29967d..290b98b 100644
+--- i/3rdparty/stout/include/stout/os/posix/fork.hpp
++++ w/3rdparty/stout/include/stout/os/posix/fork.hpp
@@ -369,7 +369,7 @@ private:
if (exec.isSome()) {
// Execute the command (via '/bin/sh -c command').
@@ -24,11 +11,11 @@ index a29967dcb..290b98b50 100644
EXIT(EXIT_FAILURE)
<< "Failed to execute '" << command << "': " << os::strerror(errno);
} else if (wait.isSome()) {
-diff --git a/3rdparty/stout/include/stout/posix/os.hpp b/3rdparty/stout/include/stout/posix/os.hpp
-index c37e64db6..d3d87b7f0 100644
---- a/3rdparty/stout/include/stout/posix/os.hpp
-+++ b/3rdparty/stout/include/stout/posix/os.hpp
-@@ -375,7 +375,7 @@ inline Option getenv(const std::string& key)
+diff --git i/3rdparty/stout/include/stout/posix/os.hpp w/3rdparty/stout/include/stout/posix/os.hpp
+index 8511dfd..1e7be01 100644
+--- i/3rdparty/stout/include/stout/posix/os.hpp
++++ w/3rdparty/stout/include/stout/posix/os.hpp
+@@ -366,7 +366,7 @@ inline Try> pids(Option group, Option session)
inline Try tar(const std::string& path, const std::string& archive)
{
Try tarOut =
@@ -37,11 +24,11 @@ index c37e64db6..d3d87b7f0 100644
if (tarOut.isError()) {
return Error("Failed to archive " + path + ": " + tarOut.error());
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 3bcc0f2df..e5cbc57e8 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -1545,7 +1545,7 @@ if HAS_JAVA
+diff --git i/src/Makefile.am w/src/Makefile.am
+index 68fff14..c572f92 100644
+--- i/src/Makefile.am
++++ w/src/Makefile.am
+@@ -1775,7 +1775,7 @@ if HAS_JAVA
$(MESOS_JAR): $(MESOS_JAR_SOURCE) $(MESOS_JAR_GENERATED) java/mesos.pom
@echo "Building mesos-$(PACKAGE_VERSION).jar ..."
@@ -50,10 +37,10 @@ index 3bcc0f2df..e5cbc57e8 100644
# Convenience library for JNI bindings.
# TODO(Charles Reiss): We really should be building the Java library
-diff --git a/src/cli/mesos-scp b/src/cli/mesos-scp
-index a71ab0708..1043d1b3c 100755
---- a/src/cli/mesos-scp
-+++ b/src/cli/mesos-scp
+diff --git i/src/cli/mesos-scp w/src/cli/mesos-scp
+index a71ab07..1043d1b 100755
+--- i/src/cli/mesos-scp
++++ w/src/cli/mesos-scp
@@ -19,7 +19,8 @@ if sys.version_info < (2,6,0):
@@ -64,11 +51,11 @@ index a71ab0708..1043d1b3c 100755
try:
process = subprocess.Popen(
cmd,
-diff --git a/src/common/command_utils.cpp b/src/common/command_utils.cpp
-index 09e805140..90bf65896 100644
---- a/src/common/command_utils.cpp
-+++ b/src/common/command_utils.cpp
-@@ -140,7 +140,7 @@ Future tar(
+diff --git i/src/common/command_utils.cpp w/src/common/command_utils.cpp
+index c50be76..388cc53 100644
+--- i/src/common/command_utils.cpp
++++ w/src/common/command_utils.cpp
+@@ -142,7 +142,7 @@ Future tar(
argv.emplace_back(input);
@@ -77,7 +64,7 @@ index 09e805140..90bf65896 100644
.then([]() { return Nothing(); });
}
-@@ -162,7 +162,7 @@ Future untar(
+@@ -164,7 +164,7 @@ Future untar(
argv.emplace_back(directory.get());
}
@@ -86,7 +73,7 @@ index 09e805140..90bf65896 100644
.then([]() { return Nothing(); });
}
-@@ -170,7 +170,7 @@ Future untar(
+@@ -172,7 +172,7 @@ Future untar(
Future sha512(const Path& input)
{
#ifdef __linux__
@@ -95,7 +82,7 @@ index 09e805140..90bf65896 100644
vector argv = {
cmd,
input // Input file to compute shasum.
-@@ -206,7 +206,7 @@ Future gzip(const Path& input)
+@@ -208,7 +208,7 @@ Future gzip(const Path& input)
input
};
@@ -104,7 +91,7 @@ index 09e805140..90bf65896 100644
.then([]() { return Nothing(); });
}
-@@ -219,7 +219,7 @@ Future decompress(const Path& input)
+@@ -221,7 +221,7 @@ Future decompress(const Path& input)
input
};
@@ -113,41 +100,45 @@ index 09e805140..90bf65896 100644
.then([]() { return Nothing(); });
}
-diff --git a/src/launcher/fetcher.cpp b/src/launcher/fetcher.cpp
-index 4456c2813..e22c8fc03 100644
---- a/src/launcher/fetcher.cpp
-+++ b/src/launcher/fetcher.cpp
-@@ -68,13 +68,13 @@ static Try extract(
+diff --git i/src/launcher/fetcher.cpp w/src/launcher/fetcher.cpp
+index 42980f5..3aebeed 100644
+--- i/src/launcher/fetcher.cpp
++++ w/src/launcher/fetcher.cpp
+@@ -80,17 +80,17 @@ static Try extract(
strings::endsWith(sourcePath, ".tar.bz2") ||
strings::endsWith(sourcePath, ".txz") ||
strings::endsWith(sourcePath, ".tar.xz")) {
-- command = "tar -C '" + destinationDirectory + "' -xf";
-+ command = "@tar@ -C '" + destinationDirectory + "' -xf";
+- command = {"tar", "-C", destinationDirectory, "-xf", sourcePath};
++ command = {"@tar@", "-C", destinationDirectory, "-xf", sourcePath};
} else if (strings::endsWith(sourcePath, ".gz")) {
string pathWithoutExtension = sourcePath.substr(0, sourcePath.length() - 3);
string filename = Path(pathWithoutExtension).basename();
-- command = "gzip -dc > '" + destinationDirectory + "/" + filename + "' <";
-+ command = "@gzip@ -dc > '" + destinationDirectory + "/" + filename + "' <";
+ string destinationPath = path::join(destinationDirectory, filename);
+
+- command = {"gunzip", "-d", "-c"};
++ command = {"@gunzip@", "-d", "-c"};
+ in = Subprocess::PATH(sourcePath);
+ out = Subprocess::PATH(destinationPath);
} else if (strings::endsWith(sourcePath, ".zip")) {
-- command = "unzip -o -d '" + destinationDirectory + "'";
-+ command = "@unzip@ -o -d '" + destinationDirectory + "'";
+- command = {"unzip", "-o", "-d", destinationDirectory, sourcePath};
++ command = {"@unzip@", "-o", "-d", destinationDirectory, sourcePath};
} else {
return false;
}
-@@ -162,7 +162,7 @@ static Try copyFile(
+@@ -193,7 +193,7 @@ static Try copyFile(
const string& sourcePath,
const string& destinationPath)
{
-- const string command = "cp '" + sourcePath + "' '" + destinationPath + "'";
-+ const string command = "@cp@ '" + sourcePath + "' '" + destinationPath + "'";
+- int status = os::spawn("cp", {"cp", sourcePath, destinationPath});
++ int status = os::spawn("cp", {"@cp@", sourcePath, destinationPath});
- LOG(INFO) << "Copying resource with command:" << command;
-
-diff --git a/src/linux/perf.cpp b/src/linux/perf.cpp
-index aa31982eb..8b5331b17 100644
---- a/src/linux/perf.cpp
-+++ b/src/linux/perf.cpp
-@@ -127,7 +127,7 @@ private:
+ if (status == -1) {
+ return ErrnoError("Failed to copy '" + sourcePath + "'");
+diff --git i/src/linux/perf.cpp w/src/linux/perf.cpp
+index b301e25..356a2cf 100644
+--- i/src/linux/perf.cpp
++++ w/src/linux/perf.cpp
+@@ -128,7 +128,7 @@ private:
// NOTE: The supervisor childhook places perf in its own process group
// and will kill the perf process when the parent dies.
Try _perf = subprocess(
@@ -156,19 +147,10 @@ index aa31982eb..8b5331b17 100644
argv,
Subprocess::PIPE(),
Subprocess::PIPE(),
-@@ -319,7 +319,7 @@ bool valid(const set& events)
- ostringstream command;
-
- // Log everything to stderr which is then redirected to /dev/null.
-- command << "perf stat --log-fd 2";
-+ command << "@perf@ stat --log-fd 2";
- foreach (const string& event, events) {
- command << " --event " << event;
- }
-diff --git a/src/linux/systemd.cpp b/src/linux/systemd.cpp
-index 6318f48fc..394d88d47 100644
---- a/src/linux/systemd.cpp
-+++ b/src/linux/systemd.cpp
+diff --git i/src/linux/systemd.cpp w/src/linux/systemd.cpp
+index 6318f48..394d88d 100644
+--- i/src/linux/systemd.cpp
++++ w/src/linux/systemd.cpp
@@ -196,13 +196,21 @@ bool exists()
// This is static as the init system should not change while we are running.
static const bool exists = []() -> bool {
@@ -209,10 +191,10 @@ index 6318f48fc..394d88d47 100644
Try daemonReload = os::shell("systemctl daemon-reload");
if (daemonReload.isError()) {
return Error("Failed to reload systemd daemon: " + daemonReload.error());
-diff --git a/src/python/cli/src/mesos/cli.py b/src/python/cli/src/mesos/cli.py
-index f342992e0..354abf443 100644
---- a/src/python/cli/src/mesos/cli.py
-+++ b/src/python/cli/src/mesos/cli.py
+diff --git i/src/python/cli/src/mesos/cli.py w/src/python/cli/src/mesos/cli.py
+index 4a9b558..c08a8b9 100644
+--- i/src/python/cli/src/mesos/cli.py
++++ w/src/python/cli/src/mesos/cli.py
@@ -40,7 +40,7 @@ def resolve(master):
import subprocess
@@ -222,10 +204,10 @@ index f342992e0..354abf443 100644
stdin=None,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
-diff --git a/src/slave/containerizer/mesos/isolators/docker/volume/isolator.cpp b/src/slave/containerizer/mesos/isolators/docker/volume/isolator.cpp
-index af9f3736b..f8554d414 100644
---- a/src/slave/containerizer/mesos/isolators/docker/volume/isolator.cpp
-+++ b/src/slave/containerizer/mesos/isolators/docker/volume/isolator.cpp
+diff --git i/src/slave/containerizer/mesos/isolators/docker/volume/isolator.cpp w/src/slave/containerizer/mesos/isolators/docker/volume/isolator.cpp
+index 5b630c1..d63ad69 100644
+--- i/src/slave/containerizer/mesos/isolators/docker/volume/isolator.cpp
++++ w/src/slave/containerizer/mesos/isolators/docker/volume/isolator.cpp
@@ -499,7 +499,7 @@ Future