Merge branch 'master.upstream' into staging.upstream

This commit is contained in:
William A. Kennington III 2015-07-05 13:06:02 -07:00
commit d605663ae2
155 changed files with 4271 additions and 2114 deletions

View File

@ -332,6 +332,11 @@ lib.mapAttrs (n: v: v // { shortName = n; }) rec {
fullName = "SIL Open Font License 1.1";
};
openldap = spdx {
spdxId = "OLDAP-2.8";
fullName = "Open LDAP Public License v2.8";
};
openssl = spdx {
spdxId = "OpenSSL";
fullName = "OpenSSL License";

View File

@ -108,6 +108,15 @@ let
description = "The user's home directory.";
};
cryptHomeLuks = mkOption {
type = with types; nullOr str;
default = null;
description = ''
Path to encrypted luks device that contains
the user's home directory.
'';
};
shell = mkOption {
type = types.str;
default = "/run/current-system/sw/bin/nologin";

View File

@ -84,6 +84,7 @@
./security/grsecurity.nix
./security/pam.nix
./security/pam_usb.nix
./security/pam_mount.nix
./security/polkit.nix
./security/prey.nix
./security/rngd.nix
@ -383,6 +384,7 @@
./services/web-servers/lighttpd/gitweb.nix
./services/web-servers/nginx/default.nix
./services/web-servers/phpfpm.nix
./services/web-servers/shellinabox.nix
./services/web-servers/tomcat.nix
./services/web-servers/uwsgi.nix
./services/web-servers/varnish/default.nix

View File

@ -126,6 +126,14 @@ let
'';
};
pamMount = mkOption {
default = config.security.pam.mount.enable;
type = types.bool;
description = ''
Enable PAM mount (pam_mount) system to mount fileystems on user login.
'';
};
allowNullPassword = mkOption {
default = false;
type = types.bool;
@ -224,7 +232,9 @@ let
${optionalString cfg.usbAuth
"auth sufficient ${pkgs.pam_usb}/lib/security/pam_usb.so"}
${optionalString cfg.unixAuth
"auth ${if config.security.pam.enableEcryptfs then "required" else "sufficient"} pam_unix.so ${optionalString cfg.allowNullPassword "nullok"} likeauth"}
"auth ${if (config.security.pam.enableEcryptfs || cfg.pamMount) then "required" else "sufficient"} pam_unix.so ${optionalString cfg.allowNullPassword "nullok"} likeauth"}
${optionalString cfg.pamMount
"auth optional ${pkgs.pam_mount}/lib/security/pam_mount.so"}
${optionalString config.security.pam.enableEcryptfs
"auth required ${pkgs.ecryptfs}/lib/security/pam_ecryptfs.so unwrap"}
${optionalString cfg.otpwAuth
@ -238,12 +248,14 @@ let
auth [default=die success=done] ${pam_ccreds}/lib/security/pam_ccreds.so action=validate use_first_pass
auth sufficient ${pam_ccreds}/lib/security/pam_ccreds.so action=store use_first_pass
''}
${optionalString (! config.security.pam.enableEcryptfs) "auth required pam_deny.so"}
${optionalString (!(config.security.pam.enableEcryptfs || cfg.pamMount)) "auth required pam_deny.so"}
# Password management.
${optionalString config.security.pam.enableEcryptfs
"password optional ${pkgs.ecryptfs}/lib/security/pam_ecryptfs.so"}
password requisite pam_unix.so nullok sha512
${optionalString cfg.pamMount
"password optional ${pkgs.pam_mount}/lib/security/pam_mount.so"}
${optionalString config.users.ldap.enable
"password sufficient ${pam_ldap}/lib/security/pam_ldap.so"}
${optionalString config.krb5.enable
@ -280,6 +292,8 @@ let
"session required ${pkgs.pam}/lib/security/pam_limits.so conf=${makeLimitsConf cfg.limits}"}
${optionalString (cfg.showMotd && config.users.motd != null)
"session optional ${pkgs.pam}/lib/security/pam_motd.so motd=${motd}"}
${optionalString cfg.pamMount
"session optional ${pkgs.pam_mount}/lib/security/pam_mount.so"}
'';
};

View File

@ -0,0 +1,72 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.security.pam.mount;
anyPamMount = any (attrByPath ["pamMount"] false) (attrValues config.security.pam.services);
in
{
options = {
security.pam.mount = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Enable PAM mount system to mount fileystems on user login.
'';
};
extraVolumes = mkOption {
type = types.listOf types.str;
default = [];
description = ''
List of volume definitions for pam_mount.
For more information, visit <link
xlink:href="http://pam-mount.sourceforge.net/pam_mount.conf.5.html" />.
'';
};
};
};
config = mkIf (cfg.enable || anyPamMount) {
environment.systemPackages = [ pkgs.pam_mount ];
environment.etc = [{
target = "security/pam_mount.conf.xml";
source =
let
extraUserVolumes = filterAttrs (n: u: u.cryptHomeLuks != null) config.users.extraUsers;
userVolumeEntry = user: "<volume user=\"${user.name}\" path=\"${user.cryptHomeLuks}\" mountpoint=\"${user.home}\" />\n";
in
pkgs.writeText "pam_mount.conf.xml" ''
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<!-- auto generated from Nixos: modules/config/users-groups.nix -->
<pam_mount>
<debug enable="0" />
${concatStrings (map userVolumeEntry (attrValues extraUserVolumes))}
${concatStringsSep "\n" cfg.extraVolumes}
<!-- if activated, requires ofl from hxtools to be present -->
<logout wait="0" hup="no" term="no" kill="no" />
<!-- set PATH variable for pam_mount module -->
<path>${pkgs.utillinux}/bin</path>
<!-- create mount point if not present -->
<mkmountpoint enable="1" remove="true" />
<!-- specify the binaries to be called -->
<cryptmount>${pkgs.pam_mount}/bin/mount.crypt %(VOLUME) %(MNTPT)</cryptmount>
<cryptumount>${pkgs.pam_mount}/bin/umount.crypt %(MNTPT)</cryptumount>
<pmvarrun>${pkgs.pam_mount}/bin/pmvarrun -u %(USER) -o %(OPERATION)</pmvarrun>
</pam_mount>
'';
}];
};
}

View File

@ -186,8 +186,9 @@ in
preStart =
''
# Initialise the database.
if ! test -e ${cfg.dataDir}; then
if ! test -e ${cfg.dataDir}/PG_VERSION; then
mkdir -m 0700 -p ${cfg.dataDir}
rm -f ${cfg.dataDir}/*.conf
if [ "$(id -u)" = 0 ]; then
chown -R postgres ${cfg.dataDir}
su -s ${pkgs.stdenv.shell} postgres -c 'initdb -U root'
@ -195,8 +196,6 @@ in
# For non-root operation.
initdb
fi
rm -f ${cfg.dataDir}/*.conf
touch "${cfg.dataDir}/.first_startup"
fi
ln -sfn "${configFile}" "${cfg.dataDir}/postgresql.conf"

View File

@ -97,7 +97,7 @@ in
Type = "forking";
PIDFile = "/run/minidlna/pid";
ExecStart =
"@${pkgs.minidlna}/sbin/minidlna minidlna -P /run/minidlna/pid" +
"@${pkgs.minidlna}/sbin/minidlnad minidlnad -P /run/minidlna/pid" +
" -f ${pkgs.writeText "minidlna.conf" cfg.config}";
};
};

View File

@ -55,7 +55,7 @@ in {
};
package = mkOption {
default = pkgs.goPackages.skydns;
default = pkgs.skydns;
type = types.package;
description = "Skydns package to use.";
};

View File

@ -43,38 +43,27 @@ let
'';
# WP translation can be found here:
# https://make.wordpress.org/polyglots/teams/
# FIXME:
# - add all these languages:
# sq ar az eu bs bg ca zh-cn zh-tw hr da nl en-au
# en-ca en-gb eo fi fr gl de el he hu is id it ja
# ko lt nb nn oci pl pt-br pt ro ru sr sk es-mx es
# sv th tr uk cy
# - cache the files on github.com/qknight/WordpressLanguages and use fetchFromGithub instead
# note: this implementation of supportedLanguages will only work for me (qknight) as i'm using nix-prefetch-url
# as the sha256 changes like every download.
# note: this is also true for plugins and themes but these are controlled not from withing wordpress.nix
# https://github.com/nixcloud/wordpress-translations
supportedLanguages = {
en_GB = "1yf1sb6ji3l4lg8nkkjhckbwl81jly8z93jf06pvk6a1p6bsr6l6";
de_DE = "3881221f337799b88f9562df8b3f1560f2c49a8f662297561a5b25ce77f22e17";
en_GB = { revision="d6c005372a5318fd758b710b77a800c86518be13"; sha256="0qbbsi87k47q4rgczxx541xz4z4f4fr49hw4lnaxkdsf5maz8p9p"; };
de_DE = { revision="3c62955c27baaae98fd99feb35593d46562f4736"; sha256="1shndgd11dk836dakrjlg2arwv08vqx6j4xjh4jshvwmjab6ng6p"; };
zh_ZN = { revision="12b9f811e8cae4b6ee41de343d35deb0a8fdda6d"; sha256="1339ggsxh0g6lab37jmfxicsax4h702rc3fsvv5azs7mcznvwh47"; };
fr_FR = { revision="688c8b1543e3d38d9e8f57e0a6f2a2c3c8b588bd"; sha256="1j41iak0i6k7a4wzyav0yrllkdjjskvs45w53db8vfm8phq1n014"; };
};
downloadLanguagePack = language: sha256:
downloadLanguagePack = language: revision: sha256s:
pkgs.stdenv.mkDerivation rec {
name = "wp_${language}-${version}";
src = pkgs.fetchurl {
url = "https://downloads.wordpress.org/translation/core/${version}/${language}.zip";
sha256 = "${sha256}";
name = "wp_${language}";
src = pkgs.fetchFromGitHub {
owner = "nixcloud";
repo = "wordpress-translations";
rev = revision;
sha256 = sha256s;
};
buildInputs = [ pkgs.unzip ];
unpackPhase = ''
unzip $src
export sourceRoot=.
'';
installPhase = "mkdir -p $out; cp -R * $out/";
};
selectedLanguages = map (lang: downloadLanguagePack lang supportedLanguages.${lang}) (config.languages);
selectedLanguages = map (lang: downloadLanguagePack lang supportedLanguages.${lang}.revision supportedLanguages.${lang}.sha256) (config.languages);
# The wordpress package itself
wordpressRoot = pkgs.stdenv.mkDerivation rec {
@ -235,6 +224,7 @@ in
documentRoot = wordpressRoot;
# FIXME adding the user has to be done manually for the time being
startupScript = pkgs.writeScript "init-wordpress.sh" ''
#!/bin/sh
mkdir -p ${config.wordpressUploads}

View File

@ -0,0 +1,122 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.shellinabox;
# If a certificate file is specified, shellinaboxd requires
# a file descriptor to retrieve it
fd = "3";
createFd = optionalString (cfg.certFile != null) "${fd}<${cfg.certFile}";
# Command line arguments for the shellinabox daemon
args = [ "--background" ]
++ optional (! cfg.enableSSL) "--disable-ssl"
++ optional (cfg.certFile != null) "--cert-fd=${fd}"
++ optional (cfg.certDirectory != null) "--cert=${cfg.certDirectory}"
++ cfg.extraOptions;
# Command to start shellinaboxd
cmd = "${pkgs.shellinabox}/bin/shellinaboxd ${concatStringsSep " " args}";
# Command to start shellinaboxd if certFile is specified
wrappedCmd = "${pkgs.bash}/bin/bash -c 'exec ${createFd} && ${cmd}'";
in
{
###### interface
options = {
services.shellinabox = {
enable = mkEnableOption "shellinabox daemon";
user = mkOption {
type = types.str;
default = "root";
description = ''
User to run shellinaboxd as. If started as root, the server drops
privileges by changing to nobody, unless overridden by the
<literal>--user</literal> option.
'';
};
enableSSL = mkOption {
type = types.bool;
default = false;
description = ''
Whether or not to enable SSL (https) support.
'';
};
certDirectory = mkOption {
type = types.nullOr types.path;
default = null;
example = "/var/certs";
description = ''
The daemon will look in this directory far any certificates.
If the browser negotiated a Server Name Identification the daemon
will look for a matching certificate-SERVERNAME.pem file. If no SNI
handshake takes place, it will fall back on using the certificate in the
certificate.pem file.
If no suitable certificate is installed, shellinaboxd will attempt to
create a new self-signed certificate. This will only succeed if, after
dropping privileges, shellinaboxd has write permissions for this
directory.
'';
};
certFile = mkOption {
type = types.nullOr types.path;
default = null;
example = "/var/certificate.pem";
description = "Path to server SSL certificate.";
};
extraOptions = mkOption {
type = types.listOf types.str;
default = [ ];
example = [ "--port=443" "--service /:LOGIN" ];
description = ''
A list of strings to be appended to the command line arguments
for shellinaboxd. Please see the manual page
<link xlink:href="https://code.google.com/p/shellinabox/wiki/shellinaboxd_man"/>
for a full list of available arguments.
'';
};
};
};
###### implementation
config = mkIf cfg.enable {
assertions =
[ { assertion = cfg.enableSSL == true
-> cfg.certDirectory != null || cfg.certFile != null;
message = "SSL is enabled for shellinabox, but no certDirectory or certFile has been specefied."; }
{ assertion = ! (cfg.certDirectory != null && cfg.certFile != null);
message = "Cannot set both certDirectory and certFile for shellinabox."; }
];
systemd.services.shellinaboxd = {
description = "Shellinabox Web Server Daemon";
wantedBy = [ "multi-user.target" ];
requires = [ "sshd.service" ];
after = [ "sshd.service" ];
serviceConfig = {
Type = "forking";
User = "${cfg.user}";
ExecStart = "${if cfg.certFile == null then "${cmd}" else "${wrappedCmd}"}";
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
};
};
};
}

View File

@ -10,7 +10,8 @@ let
realGrub = if cfg.version == 1 then pkgs.grub
else if cfg.zfsSupport then pkgs.grub2.override { zfsSupport = true; }
else pkgs.grub2;
else if cfg.enableTrustedboot then pkgs.trustedGrub
else pkgs.grub2;
grub =
# Don't include GRUB if we're only generating a GRUB menu (e.g.,
@ -37,6 +38,7 @@ let
grub = f grub;
grubTarget = f (grub.grubTarget or "");
shell = "${pkgs.stdenv.shell}";
fullName = (builtins.parseDrvName realGrub.name).name;
fullVersion = (builtins.parseDrvName realGrub.name).version;
grubEfi = f grubEfi;
grubTargetEfi = if cfg.efiSupport && (cfg.version == 2) then f (grubEfi.grubTarget or "") else "";
@ -367,6 +369,15 @@ in
'';
};
enableTrustedboot = mkOption {
default = false;
type = types.bool;
description = ''
Enable trusted boot. Grub will measure all critical components during
the boot process to offer TCG (TPM) support.
'';
};
};
};
@ -429,6 +440,22 @@ in
assertion = all (c: c < 2) (mapAttrsToList (_: c: c) bootDeviceCounters);
message = "You cannot have duplicated devices in mirroredBoots";
}
{
assertion = !cfg.enableTrustedboot || cfg.version == 2;
message = "Trusted GRUB is only available for GRUB 2";
}
{
assertion = !cfg.efiSupport || !cfg.enableTrustedboot;
message = "Trusted GRUB does not have EFI support";
}
{
assertion = !cfg.zfsSupport || !cfg.enableTrustedboot;
message = "Trusted GRUB does not have ZFS support";
}
{
assertion = !cfg.enableTrustedboot;
message = "Trusted GRUB can break your system. Remove assertion if you want to test trustedGRUB nevertheless.";
}
] ++ flip concatMap cfg.mirroredBoots (args: [
{
assertion = args.devices != [ ];

View File

@ -433,15 +433,18 @@ foreach my $fn (glob "$bootPath/kernels/*") {
#
struct(GrubState => {
name => '$',
version => '$',
efi => '$',
devices => '$',
efiMountPoint => '$',
});
sub readGrubState {
my $defaultGrubState = GrubState->new(version => "", efi => "", devices => "", efiMountPoint => "" );
my $defaultGrubState = GrubState->new(name => "", version => "", efi => "", devices => "", efiMountPoint => "" );
open FILE, "<$bootPath/grub/state" or return $defaultGrubState;
local $/ = "\n";
my $name = <FILE>;
chomp($name);
my $version = <FILE>;
chomp($version);
my $efi = <FILE>;
@ -451,7 +454,7 @@ sub readGrubState {
my $efiMountPoint = <FILE>;
chomp($efiMountPoint);
close FILE;
my $grubState = GrubState->new(version => $version, efi => $efi, devices => $devices, efiMountPoint => $efiMountPoint );
my $grubState = GrubState->new(name => $name, version => $version, efi => $efi, devices => $devices, efiMountPoint => $efiMountPoint );
return $grubState
}
@ -496,11 +499,12 @@ my $efiTarget = getEfiTarget();
my $prevGrubState = readGrubState();
my @prevDeviceTargets = split/:/, $prevGrubState->devices;
my $devicesDiffer = scalar (List::Compare->new( '-u', '-a', \@deviceTargets, \@prevDeviceTargets)->get_symmetric_difference() );
my $versionDiffer = (get("fullVersion") eq \$prevGrubState->version);
my $efiDiffer = ($efiTarget eq \$prevGrubState->efi);
my $efiMountPointDiffer = ($efiSysMountPoint eq \$prevGrubState->efiMountPoint);
my $requireNewInstall = $devicesDiffer || $versionDiffer || $efiDiffer || $efiMountPointDiffer || (($ENV{'NIXOS_INSTALL_GRUB'} // "") eq "1");
my $devicesDiffer = scalar (List::Compare->new( '-u', '-a', \@deviceTargets, \@prevDeviceTargets)->get_symmetric_difference());
my $nameDiffer = get("fullName") ne $prevGrubState->name;
my $versionDiffer = get("fullVersion") ne $prevGrubState->version;
my $efiDiffer = $efiTarget ne $prevGrubState->efi;
my $efiMountPointDiffer = $efiSysMountPoint ne $prevGrubState->efiMountPoint;
my $requireNewInstall = $devicesDiffer || $nameDiffer || $versionDiffer || $efiDiffer || $efiMountPointDiffer || (($ENV{'NIXOS_INSTALL_GRUB'} // "") eq "1");
# install a symlink so that grub can detect the boot drive when set
# as the root directory
@ -543,6 +547,7 @@ if (($requireNewInstall != 0) && ($efiTarget eq "only" || $efiTarget eq "both"))
# update GRUB state file
if ($requireNewInstall != 0) {
open FILE, ">$bootPath/grub/state" or die "cannot create $bootPath/grub/state: $!\n";
print FILE get("fullName"), "\n" or die;
print FILE get("fullVersion"), "\n" or die;
print FILE $efiTarget, "\n" or die;
print FILE join( ":", @deviceTargets ), "\n" or die;

View File

@ -5,7 +5,7 @@ with lib;
let
luks = config.boot.initrd.luks;
openCommand = { name, device, keyFile, keyFileSize, allowDiscards, yubikey, ... }: ''
openCommand = { name, device, header, keyFile, keyFileSize, allowDiscards, yubikey, ... }: ''
# Wait for luksRoot to appear, e.g. if on a usb drive.
# XXX: copied and adapted from stage-1-init.sh - should be
# available as a function.
@ -33,6 +33,7 @@ let
open_normally() {
cryptsetup luksOpen ${device} ${name} ${optionalString allowDiscards "--allow-discards"} \
${optionalString (header != null) "--header=${header}"} \
${optionalString (keyFile != null) "--key-file=${keyFile} ${optionalString (keyFileSize != null) "--keyfile-size=${toString keyFileSize}"}"}
}
@ -251,6 +252,16 @@ in
description = "Path of the underlying block device.";
};
header = mkOption {
default = null;
example = "/root/header.img";
type = types.nullOr types.string;
description = ''
The name of the file or block device that
should be used as header for the encrypted device.
'';
};
keyFile = mkOption {
default = null;
example = "/dev/sdb1";

View File

@ -103,6 +103,9 @@ in
LimitNPROC = 1048576;
} // proxy_env;
path = [ pkgs.kmod ];
environment.MODULE_DIR = "/run/current-system/kernel-modules/lib/modules";
postStart = ''
while ! [ -e /var/run/docker.sock ]; do
sleep 0.1

View File

@ -47,13 +47,32 @@ in
'';
};
virtualisation.xen.bridge =
mkOption {
default = "xenbr0";
description =
''
Create a bridge for the Xen domUs to connect to.
virtualisation.xen.bridge = {
name = mkOption {
default = "xenbr0";
description = ''
Name of bridge the Xen domUs connect to.
'';
};
address = mkOption {
type = types.str;
default = "172.16.0.1";
description = ''
IPv4 address of the bridge.
'';
};
prefixLength = mkOption {
type = types.addCheck types.int (n: n >= 0 && n <= 32);
default = 16;
description = ''
Subnet mask of the bridge interface, specified as the number of
bits in the prefix (<literal>24</literal>).
A DHCP server will provide IP addresses for the whole, remaining
subnet.
'';
};
};
virtualisation.xen.stored =
@ -261,11 +280,71 @@ in
description = "Xen bridge";
wantedBy = [ "multi-user.target" ];
before = [ "xen-domains.service" ];
serviceConfig.RemainAfterExit = "yes";
serviceConfig.ExecStart = "${pkgs.bridge-utils}/bin/brctl addbr ${cfg.bridge}";
postStart = "${pkgs.inetutils}/bin/ifconfig ${cfg.bridge} up";
serviceConfig.ExecStop = "${pkgs.inetutils}/bin/ifconfig ${cfg.bridge} down";
postStop = "${pkgs.bridge-utils}/bin/brctl delbr ${cfg.bridge}";
preStart = ''
mkdir -p /var/run/xen
touch /var/run/xen/dnsmasq.pid
touch /var/run/xen/dnsmasq.etherfile
touch /var/run/xen/dnsmasq.leasefile
IFS='-' read -a data <<< `${pkgs.sipcalc}/bin/sipcalc ${cfg.bridge.address}/${toString cfg.bridge.prefixLength} | grep Usable\ range`
export XEN_BRIDGE_IP_RANGE_START="${"\${data[1]//[[:blank:]]/}"}"
export XEN_BRIDGE_IP_RANGE_END="${"\${data[2]//[[:blank:]]/}"}"
IFS='-' read -a data <<< `${pkgs.sipcalc}/bin/sipcalc ${cfg.bridge.address}/${toString cfg.bridge.prefixLength} | grep Network\ address`
export XEN_BRIDGE_NETWORK_ADDRESS="${"\${data[1]//[[:blank:]]/}"}"
echo "${cfg.bridge.address} host gw dns" > /var/run/xen/dnsmasq.hostsfile
cat <<EOF > /var/run/xen/dnsmasq.conf
no-daemon
pid-file=/var/run/xen/dnsmasq.pid
interface=${cfg.bridge.name}
except-interface=lo
bind-interfaces
auth-server=dns.xen.local,${cfg.bridge.name}
auth-zone=xen.local,$XEN_BRIDGE_NETWORK_ADDRESS/${toString cfg.bridge.prefixLength}
domain=xen.local
addn-hosts=/var/run/xen/dnsmasq.hostsfile
expand-hosts
strict-order
no-hosts
bogus-priv
no-resolv
no-poll
filterwin2k
clear-on-reload
domain-needed
dhcp-hostsfile=/var/run/xen/dnsmasq.etherfile
dhcp-authoritative
dhcp-range=$XEN_BRIDGE_IP_RANGE_START,$XEN_BRIDGE_IP_RANGE_END,$XEN_BRIDGE_NETWORK_ADDRESS
dhcp-no-override
no-ping
dhcp-leasefile=/var/run/xen/dnsmasq.leasefile
EOF
# DHCP
${pkgs.iptables}/bin/iptables -I INPUT -i ${cfg.bridge.name} -p tcp -s $XEN_BRIDGE_NETWORK_ADDRESS/${toString cfg.bridge.prefixLength} --sport 68 --dport 67 -j ACCEPT
${pkgs.iptables}/bin/iptables -I INPUT -i ${cfg.bridge.name} -p udp -s $XEN_BRIDGE_NETWORK_ADDRESS/${toString cfg.bridge.prefixLength} --sport 68 --dport 67 -j ACCEPT
# DNS
${pkgs.iptables}/bin/iptables -I INPUT -i ${cfg.bridge.name} -p tcp -d ${cfg.bridge.address} --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
${pkgs.iptables}/bin/iptables -I INPUT -i ${cfg.bridge.name} -p udp -d ${cfg.bridge.address} --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
${pkgs.bridge-utils}/bin/brctl addbr ${cfg.bridge.name}
${pkgs.inetutils}/bin/ifconfig ${cfg.bridge.name} ${cfg.bridge.address}
${pkgs.inetutils}/bin/ifconfig ${cfg.bridge.name} up
'';
serviceConfig.ExecStart = "${pkgs.dnsmasq}/bin/dnsmasq --conf-file=/var/run/xen/dnsmasq.conf";
postStop = ''
${pkgs.inetutils}/bin/ifconfig ${cfg.bridge.name} down
${pkgs.bridge-utils}/bin/brctl delbr ${cfg.bridge.name}
# DNS
${pkgs.iptables}/bin/iptables -D INPUT -i ${cfg.bridge.name} -p udp -d ${cfg.bridge.address} --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
${pkgs.iptables}/bin/iptables -D INPUT -i ${cfg.bridge.name} -p tcp -d ${cfg.bridge.address} --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
# DHCP
${pkgs.iptables}/bin/iptables -D INPUT -i ${cfg.bridge.name} -p udp --sport 68 --dport 67 -j ACCEPT
${pkgs.iptables}/bin/iptables -D INPUT -i ${cfg.bridge.name} -p tcp --sport 68 --dport 67 -j ACCEPT
'';
};

View File

@ -157,10 +157,11 @@ import ./make-test.nix (
my $clipboard = $machine->succeed("${pkgs.xclip}/bin/xclip -o");
die "sandbox not working properly: $clipboard"
unless $clipboard =~ /(?:suid|namespace) sandbox.*yes/mi
unless $clipboard =~ /namespace sandbox.*yes/mi
&& $clipboard =~ /pid namespaces.*yes/mi
&& $clipboard =~ /network namespaces.*yes/mi
&& $clipboard =~ /seccomp.*sandbox.*yes/mi;
&& $clipboard =~ /seccomp.*sandbox.*yes/mi
&& $clipboard =~ /you are adequately sandboxed/mi;
};
};
}

View File

@ -15,8 +15,8 @@ import ./make-test.nix {
startAll;
$docker->waitForUnit("docker.service");
$docker->succeed("tar cv --files-from /dev/null | docker import - scratch");
$docker->succeed("docker run -d --name=sleeping -v /nix/store:/nix/store -v /run/current-system/sw/bin:/bin scratch /bin/sleep 10");
$docker->succeed("tar cv --files-from /dev/null | docker import - scratchimg");
$docker->succeed("docker run -d --name=sleeping -v /nix/store:/nix/store -v /run/current-system/sw/bin:/bin scratchimg /bin/sleep 10");
$docker->succeed("docker ps | grep sleeping");
$docker->succeed("docker stop sleeping");
'';

View File

@ -1,6 +1,6 @@
{ stdenv, fetchurl, buildEnv, makeDesktopItem, makeWrapper, zlib, glib, alsaLib
, dbus, gtk, atk, pango, freetype, fontconfig, libgnome_keyring3, gdk_pixbuf
, cairo, cups, expat, libgpgerror, nspr, gconf, nss, xlibs, libcap
, cairo, cups, expat, libgpgerror, nspr, gconf, nss, xlibs, libcap, systemd
}:
let
@ -11,16 +11,16 @@ let
fontconfig gdk_pixbuf cairo cups expat libgpgerror alsaLib nspr gconf nss
xlibs.libXrender xlibs.libX11 xlibs.libXext xlibs.libXdamage xlibs.libXtst
xlibs.libXcomposite xlibs.libXi xlibs.libXfixes xlibs.libXrandr
xlibs.libXcursor libcap
xlibs.libXcursor libcap systemd
];
};
in stdenv.mkDerivation rec {
name = "atom-${version}";
version = "0.187.0";
version = "1.0.0";
src = fetchurl {
url = "https://github.com/atom/atom/releases/download/v${version}/atom-amd64.deb";
sha256 = "0s6173dg5m52zc8kqwlgjn113d84cskrv9v29fb0nrvwvkv2xzmw";
sha256 = "434be52726fed9804ddb8c07dba200d774d145d0a870d2a013b5f95eb882fa7e";
name = "${name}.deb";
};
@ -31,7 +31,10 @@ in stdenv.mkDerivation rec {
installPhase = ''
mkdir -p $out
ar p $src data.tar.gz | tar -C $out -xz ./usr
substituteInPlace $out/usr/share/applications/atom.desktop \
--replace /usr/share/atom $out/bin
mv $out/usr/* $out/
rm -r $out/share/lintian
rm -r $out/usr/
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
$out/share/atom/atom

View File

@ -302,4 +302,20 @@ in {
};
};
};
eclipse_sdk_45 = buildEclipse {
name = "eclipse-sdk-4.5";
description = "Eclipse Mars Classic";
sources = {
"x86_64-linux" = fetchurl {
url = http://download.eclipse.org/eclipse/downloads/drops4/R-4.5-201506032000/eclipse-SDK-4.5-linux-gtk-x86_64.tar.gz;
sha256 = "0vfql4gh263ms8bg7sgn05gnjajplx304cn3nr03jlacgr3pkarf";
};
"i686-linux" = fetchurl {
url = http://download.eclipse.org/eclipse/downloads/drops4/R-4.5-201506032000/eclipse-SDK-4.5-linux-gtk.tar.gz;
sha256 = "0xv66l6hdlvxpswcqrsh398wg6xhy30f833dr7jvvz45s5437hm3";
};
};
};
}

View File

@ -1,5 +1,5 @@
{ stdenv, fetchurl, ncurses, x11, libXaw, libXpm, Xaw3d
, pkgconfig, gtk, libXft, dbus, libpng, libjpeg, libungif
, pkgconfig, gettext, gtk, libXft, dbus, libpng, libjpeg, libungif
, libtiff, librsvg, texinfo, gconf, libxml2, imagemagick, gnutls
, alsaLib, cairo, acl, gpm
, withX ? !stdenv.isDarwin
@ -35,8 +35,12 @@ stdenv.mkDerivation rec {
./at-fdcwd.patch
];
postPatch = ''
sed -i 's|/usr/share/locale|${gettext}/share/locale|g' lisp/international/mule-cmds.el
'';
buildInputs =
[ ncurses gconf libxml2 gnutls alsaLib pkgconfig texinfo acl gpm ]
[ ncurses gconf libxml2 gnutls alsaLib pkgconfig texinfo acl gpm gettext ]
++ stdenv.lib.optional stdenv.isLinux dbus
++ stdenv.lib.optionals withX
[ x11 libXaw Xaw3d libXpm libpng libjpeg libungif libtiff librsvg libXft

View File

@ -1,4 +0,0 @@
source $stdenv/setup
mkdir -p $out/share/emacs/site-lisp
cp $src $out/share/emacs/site-lisp/htmlize.el

View File

@ -1,15 +1,21 @@
{ stdenv, fetchurl }:
{ stdenv, fetchFromGitHub }:
stdenv.mkDerivation {
name = "htmlize-1.47";
builder = ./builder.sh;
src = fetchurl {
url = http://fly.srk.fer.hr/~hniksic/emacs/htmlize.el.cgi;
sha256 = "0m7lby95w9sj0xlqv39imlbp80x8ajd295cs6079jyhmryf6mr10";
src = fetchFromGitHub {
owner = "emacsmirror";
repo = "htmlize";
rev = "release/1.47";
name = "htmlize-1.47-src";
sha256 = "1vkqxgirc82vc44g7xhhr041arf93yirjin3h144kjyfkgkplnkp";
};
installPhase = ''
mkdir -p $out/share/emacs/site-lisp
cp htmlize.el $out/share/emacs/site-lisp/
'';
meta = {
description = "Convert buffer text and decorations to HTML";
};

View File

@ -212,14 +212,14 @@ in
android-studio = buildAndroidStudio rec {
name = "android-studio-${version}";
version = "1.2.1.1";
build = "141.1903250";
version = "1.2.2.0";
build = "141.1980579";
description = "Android development environment based on IntelliJ IDEA";
license = stdenv.lib.licenses.asl20;
src = fetchurl {
url = "https://dl.google.com/dl/android/studio/ide-zips/${version}" +
"/android-studio-ide-${build}-linux.zip";
sha256 = "17n0hsw0655b2w7a3avj5hw6njhv4gayxnsj1bwi9p3dgzr5d5zp";
sha256 = "08bayp2kxxg0zdmd1rcfg89g80wmwxf56fzmk5xkz1qg6s9b98a6";
};
};

View File

@ -3,12 +3,12 @@
}:
stdenv.mkDerivation rec {
name = "oiio-${version}";
version = "1.4.15";
name = "openimageio-${version}";
version = "1.4.16";
src = fetchurl {
url = "https://github.com/OpenImageIO/oiio/archive/Release-${version}.zip";
sha256 = "1fc5v3qmrzf9qx765fd15r2dc3ccrz4xf4f9q4cwsrspmaxqyqzs";
sha256 = "0f9gspsjhniz992c04dm4lvffzz7zjqn1n34nqn6c32r498kimcj";
};
buildInputs = [
@ -25,6 +25,8 @@ stdenv.mkDerivation rec {
INSTALLDIR=$out dist_dir=
'';
enableParallelBuilding = true;
meta = with stdenv.lib; {
homepage = http://www.openimageio.org;
description = "A library and tools for reading and writing images";

View File

@ -10,15 +10,13 @@
with lib;
stdenv.mkDerivation rec {
name = "blender-2.74";
name = "blender-2.75";
src = fetchurl {
url = "http://download.blender.org/source/${name}.tar.gz";
sha256 = "178i19pz7jl79b4wn92869j6qymawsa0kaw1dxaprbjnqsvcx8qc";
sha256 = "1r3qyj57g06ir424q7szxkyb6h0b7laq7f126158kgs94xpkhlsz";
};
patches = [ ./sm52.patch ];
buildInputs =
[ SDL boost cmake ffmpeg gettext glew ilmbase libXi
libjpeg libpng libsamplerate libsndfile libtiff mesa openal

View File

@ -1,12 +0,0 @@
diff -ru -x '*~' blender-2.73a-orig/CMakeLists.txt blender-2.73a/CMakeLists.txt
--- blender-2.73a-orig/CMakeLists.txt 2015-01-21 13:31:24.000000000 +0100
+++ blender-2.73a/CMakeLists.txt 2015-03-01 23:14:22.962585422 +0100
@@ -351,7 +351,7 @@
option(WITH_CYCLES_STANDALONE_GUI "Build cycles standalone with GUI" OFF)
option(WITH_CYCLES_OSL "Build Cycles with OSL support" ${_init_CYCLES_OSL})
option(WITH_CYCLES_CUDA_BINARIES "Build cycles CUDA binaries" OFF)
-set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 sm_35 sm_50 CACHE STRING "CUDA architectures to build binaries for")
+set(CYCLES_CUDA_BINARIES_ARCH sm_20 sm_21 sm_30 sm_35 sm_50 sm_52 CACHE STRING "CUDA architectures to build binaries for")
mark_as_advanced(CYCLES_CUDA_BINARIES_ARCH)
unset(PLATFORM_DEFAULT)
option(WITH_CYCLES_LOGGING "Build cycles with logging support" ON)

View File

@ -1,11 +1,11 @@
{ stdenv, fetchurl, automake, autoconf, libtool, pkgconfig, libzen, libmediainfo, wxGTK, desktop_file_utils, libSM, imagemagick }:
stdenv.mkDerivation rec {
version = "0.7.74";
version = "0.7.75";
name = "mediainfo-gui-${version}";
src = fetchurl {
url = "http://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.bz2";
sha256 = "06r6inggkb3gmxax182y4y39icxry5hdcvq7syb060l8wxrk14ky";
url = "http://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz";
sha256 = "1xdsy5z7x7bd251m26h5hcwcmgl6gklxj6h9q025mlnfmcs7pbdy";
};
buildInputs = [ automake autoconf libtool pkgconfig libzen libmediainfo wxGTK desktop_file_utils libSM imagemagick ];

View File

@ -1,11 +1,11 @@
{ stdenv, fetchurl, automake, autoconf, libtool, pkgconfig, libzen, libmediainfo, zlib }:
stdenv.mkDerivation rec {
version = "0.7.74";
version = "0.7.75";
name = "mediainfo-${version}";
src = fetchurl {
url = "http://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.bz2";
sha256 = "06r6inggkb3gmxax182y4y39icxry5hdcvq7syb060l8wxrk14ky";
url = "http://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz";
sha256 = "1xdsy5z7x7bd251m26h5hcwcmgl6gklxj6h9q025mlnfmcs7pbdy";
};
buildInputs = [ automake autoconf libtool pkgconfig libzen libmediainfo zlib ];

View File

@ -0,0 +1,28 @@
{ stdenv, fetchFromGitHub, xrdb }:
stdenv.mkDerivation {
name = "urxvt-font-size-2015-05-22";
dontPatchShebangs = true;
src = fetchFromGitHub {
owner = "majutsushi";
repo = "urxvt-font-size";
rev = "fd5b09c10798c6723bbf771d4d8881cf6563bc69";
sha256 = "16m3kkypg3y00x597zx05zy167a0kaqpawz0l591wzb2bv1dz55z";
};
installPhase = ''
substituteInPlace font-size \
--replace "xrdb -merge" "${xrdb}/bin/xrdb -merge"
mkdir -p $out/lib/urxvt/perl
cp font-size $out/lib/urxvt/perl
'';
meta = with stdenv.lib; {
description = "Change the urxvt font size on the fly";
homepage = "https://github.com/majutsushi/urxvt-font-size";
license = licenses.mit;
maintainers = with maintainers; [ cstrahan ];
};
}

View File

@ -0,0 +1,28 @@
{ stdenv, fetchFromGitHub, wmctrl }:
stdenv.mkDerivation {
name = "urxvt-perl-2015-01-16";
src = fetchFromGitHub {
owner = "effigies";
repo = "urxvt-perl";
rev = "c3beb9ff09a7139591416c61f8e9458c8a23bea5";
sha256 = "1w1p8ng7bwq5hnaprjl1zf073y5l3hdsj7sz7cll6isjswcm6r0s";
};
installPhase = ''
substituteInPlace fullscreen \
--replace "wmctrl" "${wmctrl}/bin/wmctrl"
mkdir -p $out/lib/urxvt/perl
cp fullscreen $out/lib/urxvt/perl
cp newterm $out/lib/urxvt/perl
'';
meta = with stdenv.lib; {
description = "Perl extensions for the rxvt-unicode terminal emulator";
homepage = "https://github.com/effigies/urxvt-perl";
license = licenses.gpl3;
maintainers = with maintainers; [ cstrahan ];
};
}

View File

@ -5,17 +5,18 @@ with stdenv.lib;
mkChromiumDerivation (base: rec {
name = "chromium-browser";
packageName = "chromium";
buildTargets = [ "mksnapshot" "chrome" ];
buildTargets = [ "mksnapshot" "chrome_sandbox" "chrome" ];
installPhase = ''
mkdir -p "$libExecPath"
cp -v "$buildPath/"*.pak "$buildPath/"*.bin "$libExecPath/"
cp -v "$buildPath/icudtl.dat" "$libExecPath/"
cp -vLR "$buildPath/locales" "$buildPath/resources" "$libExecPath/"
${optionalString (versionOlder base.version "45.0.0.0") ''
${optionalString (versionOlder base.version "44.0.0.0") ''
cp -v "$buildPath/libffmpegsumo.so" "$libExecPath/"
''}
cp -v "$buildPath/chrome" "$libExecPath/$packageName"
cp -v "$buildPath/chrome_sandbox" "$libExecPath/chrome-sandbox"
mkdir -vp "$out/share/man/man1"
cp -v "$buildPath/chrome.1" "$out/share/man/man1/$packageName.1"

View File

@ -126,7 +126,6 @@ let
# derivations.
prePatch = ''
cp -dr --no-preserve=mode "${source.main}"/* .
cp -dr --no-preserve=mode "${source.sandbox}" sandbox
cp -dr "${source.bundled}" third_party
chmod -R u+w third_party
'';

View File

@ -33,7 +33,6 @@ let
};
browser = callPackage ./browser.nix { };
sandbox = callPackage ./sandbox.nix { };
plugins = callPackage ./plugins.nix {
inherit enablePepperFlash enableWideVine;
@ -71,7 +70,6 @@ in stdenv.mkDerivation {
buildCommand = let
browserBinary = "${chromium.browser}/libexec/chromium/chromium";
sandboxBinary = "${chromium.sandbox}/bin/chromium-sandbox";
mkEnvVar = key: val: "--set '${key}' '${val}'";
envVars = chromium.plugins.settings.envVars or {};
flags = chromium.plugins.settings.flags or [];

View File

@ -1,21 +0,0 @@
{ stdenv, source }:
stdenv.mkDerivation {
name = "chromium-sandbox-${source.version}";
src = source.sandbox;
patchPhase = ''
sed -i -e '/#include.*base_export/c \
#define BASE_EXPORT __attribute__((visibility("default")))
/#include/s|sandbox/linux|'"$(pwd)"'/linux|
' linux/suid/*.[hc]
'';
buildPhase = ''
gcc -Wall -std=gnu99 -o sandbox linux/suid/*.c
'';
installPhase = ''
install -svD sandbox "$out/bin/chromium-sandbox"
'';
}

View File

@ -14,12 +14,10 @@ let
"s,^[^/]+(.*)$,$main\\1,"
"s,$main/(build|tools)(/.*)?$,$out/\\1\\2,"
"s,$main/third_party(/.*)?$,$bundled\\1,"
"s,$main/sandbox(/.*)?$,$sandbox\\1,"
"s,^/,,"
]);
pre44 = versionOlder version "44.0.0.0";
is44 = versionOlder version "45.0.0.0" && !pre44;
in stdenv.mkDerivation {
name = "chromium-source-${version}";
@ -29,7 +27,7 @@ in stdenv.mkDerivation {
buildInputs = [ python ]; # cannot patch shebangs otherwise
phases = [ "unpackPhase" "patchPhase" ];
outputs = [ "out" "sandbox" "bundled" "main" ];
outputs = [ "out" "bundled" "main" ];
unpackPhase = ''
tar xf "$src" -C / \
@ -48,39 +46,9 @@ in stdenv.mkDerivation {
done
'';
patches = let
baseURL = "https://codereview.chromium.org/download";
mkBlinkFix = issue: sha256: fetchpatch {
url = "${baseURL}/issue${issue}.diff";
inherit sha256;
postFetch = ''
sed -i -e 's,^\(---\|+++\) *[ab]/,&third_party/WebKit/,' "$out"
'';
};
fixes44 = [
# WebPluginContainer::setNeedsLayout
# https://codereview.chromium.org/1157943002/
(mkBlinkFix "1157943002_20001"
"0932yd15zlh2g5a5bbm6qrnfvv22jlfdg8pj0w9z58m5zdzw1p82")
# WebRuntimeFeatures::enablePermissionsAPI
# https://codereview.chromium.org/1156113007/
(mkBlinkFix "1156113007_1"
"1v76brrgdziv1q62ba4bimg0my2dmnkyl68b21nv2vw661v0hzwh")
# Revert of https://codereview.chromium.org/1150543002/
(fetchpatch {
url = "${baseURL}/issue1150543002_1.diff";
sha256 = "0x9sya0m1zcb2vcp2vfss88qqdrh6bzcbx2ngfiql7rkbynnpqn6";
postFetch = ''
${patchutils}/bin/interdiff "$out" /dev/null > reversed.patch
mv reversed.patch "$out"
'';
})
];
pluginPaths = if pre44 then singleton ./nix_plugin_paths_42.patch
else singleton ./nix_plugin_paths_44.patch;
in pluginPaths ++ optionals is44 fixes44;
patches = if pre44
then singleton ./nix_plugin_paths_42.patch
else singleton ./nix_plugin_paths_44.patch;
patchPhase = let
diffmod = sym: "/^${sym} /{s/^${sym} //;${transform ""};s/^/${sym} /}";
@ -102,8 +70,6 @@ in stdenv.mkDerivation {
-e 's|/bin/echo|echo|' \
-e "/python_arch/s/: *'[^']*'/: '""'/" \
"$out/build/common.gypi" "$main/chrome/chrome_tests.gypi"
sed -i -e '/LOG.*no_suid_error/d' \
"$main/content/browser/browser_main_loop.cc"
'' + optionalString useOpenSSL ''
cat $opensslPatches | patch -p1 -d "$bundled/openssl/openssl"
'';

View File

@ -1,287 +0,0 @@
commit 0fec7e4a742f001c9816a8b58a1120fb44230867
Author: aszlig <aszlig@redmoonstudios.org>
Date: Thu May 16 14:17:56 2013 +0200
zygote: Add support for user namespaces on Linux.
The implementation is done by patching the Zygote host to execute the sandbox
binary with CLONE_NEWUSER and setting the uid and gid mapping so that the child
process is using uid 0 and gid 0 which map to the current user of the parent.
Afterwards, the sandbox will continue as if it was called as a setuid binary.
In addition, this adds new_user_namespace as an option in process_util in order
to set the UID and GID mapping correctly. The reason for this is that just
passing CLONE_NEWUSER to clone_flags doesn't help in LaunchProcess(), because
without setting the mappings exec*() will clear the process's capability sets.
If the kernel doesn't support unprivileged user namespaces and the sandbox
binary doesn't have the setuid flag, the Zygote main process will run without a
sandbox. This is to mimic the behaviour if no SUID sandbox binary path is set.
Signed-off-by: aszlig <aszlig@redmoonstudios.org>
diff --git a/base/process/launch.cc b/base/process/launch.cc
index 81748f5..930f20f 100644
--- a/base/process/launch.cc
+++ b/base/process/launch.cc
@@ -26,6 +26,7 @@ LaunchOptions::LaunchOptions()
#if defined(OS_LINUX)
, clone_flags(0)
, allow_new_privs(false)
+ , new_user_namespace(false)
#endif // OS_LINUX
#if defined(OS_CHROMEOS)
, ctrl_terminal_fd(-1)
diff --git a/base/process/launch.h b/base/process/launch.h
index 9e39fba..00e4c79 100644
--- a/base/process/launch.h
+++ b/base/process/launch.h
@@ -115,6 +115,9 @@ struct BASE_EXPORT LaunchOptions {
// By default, child processes will have the PR_SET_NO_NEW_PRIVS bit set. If
// true, then this bit will not be set in the new child process.
bool allow_new_privs;
+
+ // If true, start the process in a new user namespace.
+ bool new_user_namespace;
#endif // defined(OS_LINUX)
#if defined(OS_CHROMEOS)
diff --git a/base/process/launch_posix.cc b/base/process/launch_posix.cc
index 457234f..a99ce9b 100644
--- a/base/process/launch_posix.cc
+++ b/base/process/launch_posix.cc
@@ -40,6 +40,10 @@
#if defined(OS_LINUX)
#include <sys/prctl.h>
+#include <sched.h>
+#if !defined(CLONE_NEWUSER)
+#define CLONE_NEWUSER 0x10000000
+#endif
#endif
#if defined(OS_CHROMEOS)
@@ -301,13 +305,23 @@ bool LaunchProcess(const std::vector<std::string>& argv,
pid_t pid;
#if defined(OS_LINUX)
- if (options.clone_flags) {
+ int map_pipe_fd[2];
+ int flags = options.clone_flags;
+
+ if (options.new_user_namespace) {
+ flags |= CLONE_NEWUSER;
+ if (pipe(map_pipe_fd) < 0) {
+ DPLOG(ERROR) << "user namespace pipe";
+ return false;
+ }
+ }
+
+ if (options.clone_flags || options.new_user_namespace) {
// Signal handling in this function assumes the creation of a new
// process, so we check that a thread is not being created by mistake
// and that signal handling follows the process-creation rules.
- RAW_CHECK(
- !(options.clone_flags & (CLONE_SIGHAND | CLONE_THREAD | CLONE_VM)));
- pid = syscall(__NR_clone, options.clone_flags, 0, 0, 0);
+ RAW_CHECK(!(flags & (CLONE_SIGHAND | CLONE_THREAD | CLONE_VM)));
+ pid = syscall(__NR_clone, flags, 0, 0, 0);
} else
#endif
{
@@ -328,6 +342,21 @@ bool LaunchProcess(const std::vector<std::string>& argv,
// DANGER: no calls to malloc or locks are allowed from now on:
// http://crbug.com/36678
+#if defined(OS_LINUX)
+ if (options.new_user_namespace) {
+ // Close the write end of the pipe so we get an EOF when the parent closes
+ // the FD. This is to avoid race conditions when the UID/GID mappings are
+ // written _after_ execvp().
+ close(map_pipe_fd[1]);
+
+ char dummy;
+ if (HANDLE_EINTR(read(map_pipe_fd[0], &dummy, 1)) != 0) {
+ RAW_LOG(ERROR, "Unexpected input in uid/gid mapping pipe.");
+ _exit(127);
+ }
+ }
+#endif
+
// DANGER: fork() rule: in the child, if you don't end up doing exec*(),
// you call _exit() instead of exit(). This is because _exit() does not
// call any previously-registered (in the parent) exit handlers, which
@@ -452,6 +481,40 @@ bool LaunchProcess(const std::vector<std::string>& argv,
_exit(127);
} else {
// Parent process
+#if defined(OS_LINUX)
+ if (options.new_user_namespace) {
+ // We need to write UID/GID mapping here to map the current user outside
+ // the namespace to the root user inside the namespace in order to
+ // correctly "fool" the child process.
+ char buf[256];
+ int map_fd, map_len;
+
+ snprintf(buf, sizeof(buf), "/proc/%d/uid_map", pid);
+ map_fd = open(buf, O_RDWR);
+ DPCHECK(map_fd >= 0);
+ snprintf(buf, sizeof(buf), "0 %d 1", geteuid());
+ map_len = strlen(buf);
+ if (write(map_fd, buf, map_len) != map_len) {
+ RAW_LOG(WARNING, "Can't write to uid_map.");
+ }
+ close(map_fd);
+
+ snprintf(buf, sizeof(buf), "/proc/%d/gid_map", pid);
+ map_fd = open(buf, O_RDWR);
+ DPCHECK(map_fd >= 0);
+ snprintf(buf, sizeof(buf), "0 %d 1", getegid());
+ map_len = strlen(buf);
+ if (write(map_fd, buf, map_len) != map_len) {
+ RAW_LOG(WARNING, "Can't write to gid_map.");
+ }
+ close(map_fd);
+
+ // Close the pipe on the parent, so the child can continue doing the
+ // execvp() call.
+ close(map_pipe_fd[1]);
+ }
+#endif
+
if (options.wait) {
// While this isn't strictly disk IO, waiting for another process to
// finish is the sort of thing ThreadRestrictions is trying to prevent.
diff --git a/content/browser/zygote_host/zygote_host_impl_linux.cc b/content/browser/zygote_host/zygote_host_impl_linux.cc
index 9d63ad9..0885705 100644
--- a/content/browser/zygote_host/zygote_host_impl_linux.cc
+++ b/content/browser/zygote_host/zygote_host_impl_linux.cc
@@ -144,6 +144,9 @@ void ZygoteHostImpl::Init(const std::string& sandbox_cmd) {
// A non empty sandbox_cmd means we want a SUID sandbox.
using_suid_sandbox_ = !sandbox_cmd.empty();
+ bool userns_sandbox = false;
+ const std::vector<std::string> cmd_line_unwrapped(cmd_line.argv());
+
// Start up the sandbox host process and get the file descriptor for the
// renderers to talk to it.
const int sfd = RenderSandboxHostLinux::GetInstance()->GetRendererSocket();
@@ -156,11 +159,24 @@ void ZygoteHostImpl::Init(const std::string& sandbox_cmd) {
sandbox_client->PrependWrapper(&cmd_line);
sandbox_client->SetupLaunchOptions(&options, &fds_to_map, &dummy_fd);
sandbox_client->SetupLaunchEnvironment();
+ userns_sandbox = sandbox_client->IsNoSuid();
}
base::ProcessHandle process = -1;
options.fds_to_remap = &fds_to_map;
+ if (userns_sandbox)
+ options.new_user_namespace = true;
base::LaunchProcess(cmd_line.argv(), options, &process);
+
+ if (process == -1 && userns_sandbox) {
+ LOG(ERROR) << "User namespace sandbox failed to start, running without "
+ << "sandbox! You need at least kernel 3.8.0 with CONFIG_USER_NS "
+ << "enabled in order to use the sandbox without setuid bit.";
+ using_suid_sandbox_ = false;
+ options.new_user_namespace = false;
+ base::LaunchProcess(cmd_line_unwrapped, options, &process);
+ }
+
CHECK(process != -1) << "Failed to launch zygote process";
dummy_fd.reset();
diff --git a/content/zygote/zygote_main_linux.cc b/content/zygote/zygote_main_linux.cc
index 11f0602..b7b8214 100644
--- a/content/zygote/zygote_main_linux.cc
+++ b/content/zygote/zygote_main_linux.cc
@@ -389,6 +389,13 @@ static bool EnterSuidSandbox(sandbox::SetuidSandboxClient* setuid_sandbox) {
CHECK(CreateInitProcessReaper());
}
+ // Don't set non-dumpable, as it causes trouble when the host tries to find
+ // the zygote process (XXX: Not quite sure why this happens with user
+ // namespaces). Fortunately, we also have the seccomp filter sandbox which
+ // should disallow the use of ptrace.
+ if (setuid_sandbox->IsNoSuid())
+ return true;
+
#if !defined(OS_OPENBSD)
// Previously, we required that the binary be non-readable. This causes the
// kernel to mark the process as non-dumpable at startup. The thinking was
diff --git a/sandbox/linux/suid/client/setuid_sandbox_client.cc b/sandbox/linux/suid/client/setuid_sandbox_client.cc
index fc03cdd..a972faa 100644
--- a/sandbox/linux/suid/client/setuid_sandbox_client.cc
+++ b/sandbox/linux/suid/client/setuid_sandbox_client.cc
@@ -229,6 +229,10 @@ bool SetuidSandboxClient::IsInNewNETNamespace() const {
return env_->HasVar(kSandboxNETNSEnvironmentVarName);
}
+bool SetuidSandboxClient::IsNoSuid() const {
+ return env_->HasVar(kSandboxNoSuidVarName);
+}
+
bool SetuidSandboxClient::IsSandboxed() const {
return sandboxed_;
}
@@ -277,8 +281,7 @@ void SetuidSandboxClient::PrependWrapper(base::CommandLine* cmd_line) {
"LinuxSUIDSandboxDevelopment.";
}
- if (access(sandbox_binary.c_str(), X_OK) != 0 || (st.st_uid != 0) ||
- ((st.st_mode & S_ISUID) == 0) || ((st.st_mode & S_IXOTH)) == 0) {
+ if (access(sandbox_binary.c_str(), X_OK) != 0) {
LOG(FATAL) << "The SUID sandbox helper binary was found, but is not "
"configured correctly. Rather than run without sandboxing "
"I'm aborting now. You need to make sure that "
@@ -286,6 +289,12 @@ void SetuidSandboxClient::PrependWrapper(base::CommandLine* cmd_line) {
}
cmd_line->PrependWrapper(sandbox_binary);
+
+ if (!((st.st_uid == 0) &&
+ (st.st_mode & S_ISUID) &&
+ (st.st_mode & S_IXOTH))) {
+ env_->SetVar(kSandboxNoSuidVarName, "1");
+ }
}
void SetuidSandboxClient::SetupLaunchOptions(
diff --git a/sandbox/linux/suid/client/setuid_sandbox_client.h b/sandbox/linux/suid/client/setuid_sandbox_client.h
index 2bbad7a..8605475 100644
--- a/sandbox/linux/suid/client/setuid_sandbox_client.h
+++ b/sandbox/linux/suid/client/setuid_sandbox_client.h
@@ -66,6 +66,8 @@ class SANDBOX_EXPORT SetuidSandboxClient {
bool IsInNewPIDNamespace() const;
// Did the setuid helper create a new network namespace ?
bool IsInNewNETNamespace() const;
+ // Is sandboxed without SUID binary ?
+ bool IsNoSuid() const;
// Are we done and fully sandboxed ?
bool IsSandboxed() const;
diff --git a/sandbox/linux/suid/common/sandbox.h b/sandbox/linux/suid/common/sandbox.h
index 9345287..2db659e 100644
--- a/sandbox/linux/suid/common/sandbox.h
+++ b/sandbox/linux/suid/common/sandbox.h
@@ -15,6 +15,7 @@ static const char kAdjustOOMScoreSwitch[] = "--adjust-oom-score";
static const char kSandboxDescriptorEnvironmentVarName[] = "SBX_D";
static const char kSandboxHelperPidEnvironmentVarName[] = "SBX_HELPER_PID";
+static const char kSandboxNoSuidVarName[] = "SBX_NO_SUID";
static const long kSUIDSandboxApiNumber = 1;
static const char kSandboxEnvironmentApiRequest[] = "SBX_CHROME_API_RQ";
diff --git a/sandbox/linux/suid/sandbox.c b/sandbox/linux/suid/sandbox.c
index 7410b71..a83593d 100644
--- a/sandbox/linux/suid/sandbox.c
+++ b/sandbox/linux/suid/sandbox.c
@@ -330,7 +330,7 @@ static bool DropRoot() {
return false;
}
- if (setresgid(rgid, rgid, rgid)) {
+ if (egid != rgid && setresgid(rgid, rgid, rgid)) {
perror("setresgid");
return false;
}

View File

@ -7,15 +7,15 @@
sha256bin64 = "1jzmkgiqn17ynbv0xljiifvlj1136jq98zrkd4hdmkgv8xrrzd74";
};
beta = {
version = "44.0.2403.52";
sha256 = "0zgcqbxm2slxpj6i50w7r3xxql1k6kgd51qn8w8gwfzhmad4zxyx";
sha256bin32 = "1kfgl2l7j5fhj6wg4i3bsany2rlwspprypdy0z7k3pqiwwyiw658";
sha256bin64 = "1sabqqh1hii7appmx6xwabnapf4cv7smsy31nvz063fa5p6h21m8";
version = "44.0.2403.61";
sha256 = "16bifaqs3fmfms305c1h10kabsyrscxkywf32pl6zwlzjd3y4ncm";
sha256bin32 = "1lgqf6bid02pjdzxg1jipfzjqzp5frqxv4bi6q127kky3lz9lmlc";
sha256bin64 = "1l6cyfn5mraprisib7q5rgy8vvkc7ky8z91c2iqsikjv7nmrm6hv";
};
stable = {
version = "43.0.2357.125";
sha256 = "01alba50zrc50bn4p3f298khk8fam2rv5wyysz7rq3zrjg8785xg";
sha256bin32 = "0527bdlf4nd4b1ydmwn6rnxy377388qb98v9anicfd4bc2p9jjml";
sha256bin64 = "0yhgcjaxcpgk32l1sjrgkq447ywcj156a7372v87m22dcwl8fi01";
version = "43.0.2357.130";
sha256 = "0bh093rfiklwj03my9d6x3118k2msbl7fhrxlndx99cnjd1mbyv2";
sha256bin32 = "083scn6dd11lnd0z5yxd6jfgdxj7iaafssccj8a9ybr1ay894ch1";
sha256bin64 = "14mfw64ips6nzz6kr8k8dq5253cbqd69hjlc54fl7nqfxi9zw31f";
};
}

View File

@ -4,185 +4,185 @@
# ruby generate_source.rb > source.nix
{
version = "38.0.5";
version = "39.0";
sources = [
{ locale = "ach"; arch = "linux-i686"; sha1 = "71e7e8194190bebcdde40a0e265b7dcb3d6173d1"; }
{ locale = "ach"; arch = "linux-x86_64"; sha1 = "eda799cc394838cf2a5eea4a182149ff2616bc00"; }
{ locale = "af"; arch = "linux-i686"; sha1 = "9162c87b2d1f420ccc5475b59bca72d45918fed3"; }
{ locale = "af"; arch = "linux-x86_64"; sha1 = "4f1d9f1bebea6a9adb085191b4bdb7b3367c4b9b"; }
{ locale = "an"; arch = "linux-i686"; sha1 = "537e6ea08c546d1ed704b1e9dd28b1219e1e5e8a"; }
{ locale = "an"; arch = "linux-x86_64"; sha1 = "34b9e09b3f29e1263105b713e743038b3a166cec"; }
{ locale = "ar"; arch = "linux-i686"; sha1 = "17b25623c086778caffd7ed45e10870a3d17baa1"; }
{ locale = "ar"; arch = "linux-x86_64"; sha1 = "4e35d4704dfd1218b783156d0a97340480eabe30"; }
{ locale = "as"; arch = "linux-i686"; sha1 = "596d66e6b3a8818ddd07ea285c08ca6ad508e4f6"; }
{ locale = "as"; arch = "linux-x86_64"; sha1 = "80b92c1881e2841dee4f955156237aadfdf37a33"; }
{ locale = "ast"; arch = "linux-i686"; sha1 = "7f6b67bbf751fb55419bb3893e121b50f4d5e34b"; }
{ locale = "ast"; arch = "linux-x86_64"; sha1 = "4705cda1e366b2be2be5164fedf22f5724454101"; }
{ locale = "az"; arch = "linux-i686"; sha1 = "5fa3021fcb1c0f7317738dcdd95f0f76ca70eb55"; }
{ locale = "az"; arch = "linux-x86_64"; sha1 = "b16d8a1e56ba3818f590952c19463b4eb08bb4a4"; }
{ locale = "be"; arch = "linux-i686"; sha1 = "300fca8783d59df6b4459760d0aaa5ac6af2a6cc"; }
{ locale = "be"; arch = "linux-x86_64"; sha1 = "d8d56febf53ed513628dc1604f65c60ac8460a37"; }
{ locale = "bg"; arch = "linux-i686"; sha1 = "4aad8ed44d69c3aecb9c629168f62d0e4711eea6"; }
{ locale = "bg"; arch = "linux-x86_64"; sha1 = "9eaddf470789ca0574ea07bbfdfbbcaca635c69d"; }
{ locale = "bn-BD"; arch = "linux-i686"; sha1 = "873db2012724c313f956ee0aca72341d443ff201"; }
{ locale = "bn-BD"; arch = "linux-x86_64"; sha1 = "3192ab016485d10abfb0dd7bccdbd94f3d33a706"; }
{ locale = "bn-IN"; arch = "linux-i686"; sha1 = "bb7b5dee4134546ce341e324a53c77e35e95b627"; }
{ locale = "bn-IN"; arch = "linux-x86_64"; sha1 = "057e4c7bc2a06c53209e87804516cb12a644be12"; }
{ locale = "br"; arch = "linux-i686"; sha1 = "d3a08e420b46d17f702c5b4bf1ed52160e8532c8"; }
{ locale = "br"; arch = "linux-x86_64"; sha1 = "e18d7a198b0bd1c08a3b0ef5ab453daacc7528a2"; }
{ locale = "bs"; arch = "linux-i686"; sha1 = "5ccfa1e2e8058707c6d0428bab370f8517c4e231"; }
{ locale = "bs"; arch = "linux-x86_64"; sha1 = "98e7ae1ca507e58b297acb39b7aa026530b75974"; }
{ locale = "ca"; arch = "linux-i686"; sha1 = "ff54c24002b0b1161a859771497f9a31013c265b"; }
{ locale = "ca"; arch = "linux-x86_64"; sha1 = "781161113c8719d8932365f113c1bfa1994caa63"; }
{ locale = "cs"; arch = "linux-i686"; sha1 = "f697723873da7961159ef17318b1b64c2d021a7c"; }
{ locale = "cs"; arch = "linux-x86_64"; sha1 = "44d20f198bbeca2c69fccbfc8d21c2861145102e"; }
{ locale = "cy"; arch = "linux-i686"; sha1 = "8ae202815c3c60aef0287f18b857ba432f122a84"; }
{ locale = "cy"; arch = "linux-x86_64"; sha1 = "c06b25151929540760d2d10dcdb0f4087a9f531a"; }
{ locale = "da"; arch = "linux-i686"; sha1 = "02690ab49d10976d5176c95f0cbc72509908fc1f"; }
{ locale = "da"; arch = "linux-x86_64"; sha1 = "0a4733b4e56e99976a53d99e209f84527c2a3059"; }
{ locale = "de"; arch = "linux-i686"; sha1 = "e3e067f028a018e4ae61542da9ae4e43c736f65b"; }
{ locale = "de"; arch = "linux-x86_64"; sha1 = "8161109d11373b07626b563c4ca494feca3abd41"; }
{ locale = "dsb"; arch = "linux-i686"; sha1 = "01fc9ebe4ac4a86a2bd4fedb6b07a9a832980a57"; }
{ locale = "dsb"; arch = "linux-x86_64"; sha1 = "7de40c35552ce74b66bdcf56a5e4edb75995f8d5"; }
{ locale = "el"; arch = "linux-i686"; sha1 = "f53b5bb439e882701dfe1efdcb7fb42ba15cc72d"; }
{ locale = "el"; arch = "linux-x86_64"; sha1 = "05843b9324fc255a4123a70d460e6db421cf55a7"; }
{ locale = "en-GB"; arch = "linux-i686"; sha1 = "c93568ad64a96235aec83ff8740335b07191d2ef"; }
{ locale = "en-GB"; arch = "linux-x86_64"; sha1 = "536b58997a39aed71a985d9eb9ab96602c9ab057"; }
{ locale = "en-US"; arch = "linux-i686"; sha1 = "8bfc35a45e9d0f2a2d4359ccaaee54c564d3b5e3"; }
{ locale = "en-US"; arch = "linux-x86_64"; sha1 = "b86e07f455da243f1236b8044aeccf41c4ade1b0"; }
{ locale = "en-ZA"; arch = "linux-i686"; sha1 = "cd3722feaebc63944e927ab244a95deb2a55aced"; }
{ locale = "en-ZA"; arch = "linux-x86_64"; sha1 = "0daf7c897bf695338310050374d29c2acdaea553"; }
{ locale = "eo"; arch = "linux-i686"; sha1 = "d79ecbf48f47a3e34e0bcf897d37d2a2abbf466a"; }
{ locale = "eo"; arch = "linux-x86_64"; sha1 = "95c616e21fe9d948d363db89c0a6a1a4e31301db"; }
{ locale = "es-AR"; arch = "linux-i686"; sha1 = "5ab97d5aebbde63477cf1868bf0cb5f1b79ee820"; }
{ locale = "es-AR"; arch = "linux-x86_64"; sha1 = "02d49650094d336e17f57fa43c9969d0b3221ca3"; }
{ locale = "es-CL"; arch = "linux-i686"; sha1 = "e8d10a3465e7efd01ee03e57316d60176710b124"; }
{ locale = "es-CL"; arch = "linux-x86_64"; sha1 = "f40a1ec33e5018d423b65bd26563ac8db100e50d"; }
{ locale = "es-ES"; arch = "linux-i686"; sha1 = "66a1bc0c31061d5738bc80e9254262ada65bfb71"; }
{ locale = "es-ES"; arch = "linux-x86_64"; sha1 = "8f22bab29fb4e7359aa1261f2333faecbafe4c08"; }
{ locale = "es-MX"; arch = "linux-i686"; sha1 = "34f60fef14360b754510a5378d4b5d6855d49326"; }
{ locale = "es-MX"; arch = "linux-x86_64"; sha1 = "9d024945473b55373c155dbbec8880f79ee2de5e"; }
{ locale = "et"; arch = "linux-i686"; sha1 = "2fd526c6fd23e5b0e7b292d99a60cf1530bb84e1"; }
{ locale = "et"; arch = "linux-x86_64"; sha1 = "15628af429866cac3a1604f587b08d4bbeccb7e9"; }
{ locale = "eu"; arch = "linux-i686"; sha1 = "ea55480fd572173c1461a9e41c2080af890c4667"; }
{ locale = "eu"; arch = "linux-x86_64"; sha1 = "1e7f8cd86df1cf74525f8d07d13bcd8ea2a22b87"; }
{ locale = "fa"; arch = "linux-i686"; sha1 = "24982ebb6d6cac67673a9c39c91da7adc4c825c2"; }
{ locale = "fa"; arch = "linux-x86_64"; sha1 = "02f221c5526e03edadb2c36bfa5d9e35557d03a3"; }
{ locale = "ff"; arch = "linux-i686"; sha1 = "f3b8962106a9a4bc5b4f1d2928255cfaaa9094b0"; }
{ locale = "ff"; arch = "linux-x86_64"; sha1 = "3a8ebe66407e6369ebc26757562b4f48a6773cdd"; }
{ locale = "fi"; arch = "linux-i686"; sha1 = "c8a838618b2a8d267e24596c6cbc25f539676762"; }
{ locale = "fi"; arch = "linux-x86_64"; sha1 = "3382937e58f6e244d3c6dcef1051aa6bdd38692c"; }
{ locale = "fr"; arch = "linux-i686"; sha1 = "6fefc6e8548fa8fcc7182a05b06b00a3b50bb5d6"; }
{ locale = "fr"; arch = "linux-x86_64"; sha1 = "5b58fe2c383d4d43d1731f25dc52754712bc207d"; }
{ locale = "fy-NL"; arch = "linux-i686"; sha1 = "118c326cdedbc4e5a1bac1ff6b1bb92f5d054847"; }
{ locale = "fy-NL"; arch = "linux-x86_64"; sha1 = "384e13b51d09e99b2abce566d06d7cd522a532a7"; }
{ locale = "ga-IE"; arch = "linux-i686"; sha1 = "ae6002a1a9b1be4f29a56176aa4dfd2fee543bdd"; }
{ locale = "ga-IE"; arch = "linux-x86_64"; sha1 = "c87ac5ff79b4dbf3d8738cc3309c882d7573eb3b"; }
{ locale = "gd"; arch = "linux-i686"; sha1 = "2bfd0ccec6d84b22d3f6f471f4ad096e6dc1edd3"; }
{ locale = "gd"; arch = "linux-x86_64"; sha1 = "cc919edd60169de8167c9e9fcf32f94fe9df4f52"; }
{ locale = "gl"; arch = "linux-i686"; sha1 = "70cdf62012d3d98b028d6b9fb9adf077c37e7c0c"; }
{ locale = "gl"; arch = "linux-x86_64"; sha1 = "a090ce8a36f3182aba809823ba171a0702bf17b5"; }
{ locale = "gu-IN"; arch = "linux-i686"; sha1 = "5698a36c3f1372446e38ada59e45468f07fd5d19"; }
{ locale = "gu-IN"; arch = "linux-x86_64"; sha1 = "18b49c1004778b8b11d2f3961dfed29ba562430a"; }
{ locale = "he"; arch = "linux-i686"; sha1 = "9edddef1ce1361d76917ce255f348e208bb16697"; }
{ locale = "he"; arch = "linux-x86_64"; sha1 = "64136eeab22a5150a95bdc916ce81e2f1b42a6df"; }
{ locale = "hi-IN"; arch = "linux-i686"; sha1 = "314f99e05cf58ec8a2c50f8fe93ebe648a62a570"; }
{ locale = "hi-IN"; arch = "linux-x86_64"; sha1 = "2e9245f46a28c70aa5451011bd2c59e8100a1804"; }
{ locale = "hr"; arch = "linux-i686"; sha1 = "4cc1112e81ec7f8df2ef95bbab3b3eb398ea67eb"; }
{ locale = "hr"; arch = "linux-x86_64"; sha1 = "e9d643c799542b118ce8cf274ab36aaec89850b3"; }
{ locale = "hsb"; arch = "linux-i686"; sha1 = "e525b1c0a77274c851417c1d3af887657d9dcb18"; }
{ locale = "hsb"; arch = "linux-x86_64"; sha1 = "016e3fcbaeb7844e3639e1c2599172de5c3f7b2f"; }
{ locale = "hu"; arch = "linux-i686"; sha1 = "2234cff2bb19e849d1a6ace38dd63258a54c192f"; }
{ locale = "hu"; arch = "linux-x86_64"; sha1 = "9498c156b33d8a9f90ccef6ccc202c69e4ee6c3d"; }
{ locale = "hy-AM"; arch = "linux-i686"; sha1 = "49e7923e60daea2e0df4c27d1f6baad70b24b030"; }
{ locale = "hy-AM"; arch = "linux-x86_64"; sha1 = "c9bed347d74b399901ee3f8e745ed1832462357e"; }
{ locale = "id"; arch = "linux-i686"; sha1 = "7fecad428f80346a6333aa6cdc912cec0644b306"; }
{ locale = "id"; arch = "linux-x86_64"; sha1 = "7370cb725b9087e5bff8943208762bc5bf4d01d9"; }
{ locale = "is"; arch = "linux-i686"; sha1 = "c1139da81e8e581e7ddd511d0ce16c0b169d46f0"; }
{ locale = "is"; arch = "linux-x86_64"; sha1 = "63c64558cd22ac170b39e186c1dd0e77a09c3200"; }
{ locale = "it"; arch = "linux-i686"; sha1 = "4eb39e3fc5c3847a85a618100d3a9edc9d3bfe78"; }
{ locale = "it"; arch = "linux-x86_64"; sha1 = "37fa87367363d7e337e75da89f8e5ce8f762c755"; }
{ locale = "ja"; arch = "linux-i686"; sha1 = "47b6d53050cf10535a5f7d6a8cee78ab15ad36b7"; }
{ locale = "ja"; arch = "linux-x86_64"; sha1 = "48b20dd2a743a1b887d15179c87b266dbe89a1ae"; }
{ locale = "kk"; arch = "linux-i686"; sha1 = "4046e0f75d4657d7423b4a0da53778348442ee5e"; }
{ locale = "kk"; arch = "linux-x86_64"; sha1 = "039f3c025f562e9278b16fb065d07511a3ca1f54"; }
{ locale = "km"; arch = "linux-i686"; sha1 = "7baebf01741af616e69520f4bc95dd56187c12a2"; }
{ locale = "km"; arch = "linux-x86_64"; sha1 = "f1a0557ac698f79bf926756cca2c33bd12a8ae83"; }
{ locale = "kn"; arch = "linux-i686"; sha1 = "1d2c2f8d9f455e0b6c793749f2298436167c25e4"; }
{ locale = "kn"; arch = "linux-x86_64"; sha1 = "473abeac7637b82d910427cac7e6da8ece20a4e5"; }
{ locale = "ko"; arch = "linux-i686"; sha1 = "41fe278dc963a7464679f4ec8a9e586666e7ceb3"; }
{ locale = "ko"; arch = "linux-x86_64"; sha1 = "58563ea60e40b73d1d5c9b10797d05aba5d13c95"; }
{ locale = "lij"; arch = "linux-i686"; sha1 = "dfa1c12416a9e7e6d04e5f4aaed3a03731d98372"; }
{ locale = "lij"; arch = "linux-x86_64"; sha1 = "75f9fb66b6610b65b402d3c8664096b4194ce1b0"; }
{ locale = "lt"; arch = "linux-i686"; sha1 = "667f035cb58c56967ed28f9cde44864cb15d5afa"; }
{ locale = "lt"; arch = "linux-x86_64"; sha1 = "d5709105b8255ee94c96358d2ac447dc5e4acc2d"; }
{ locale = "lv"; arch = "linux-i686"; sha1 = "b090761ded023ed465fc9629873e08ecdbaf924b"; }
{ locale = "lv"; arch = "linux-x86_64"; sha1 = "529312d4e7109472bf5b97ed4a9fff58bb8adbd5"; }
{ locale = "mai"; arch = "linux-i686"; sha1 = "d2ced083aefcdcd5aca84471bc382be8247e8745"; }
{ locale = "mai"; arch = "linux-x86_64"; sha1 = "be7a808a391a4fd1dde215834756bc61ae5e85fa"; }
{ locale = "mk"; arch = "linux-i686"; sha1 = "8a079d8ee62e3bf8fb37f81385a270af5e474aef"; }
{ locale = "mk"; arch = "linux-x86_64"; sha1 = "c644e5c7a6506ab203d1be61264f6bcf9fa52946"; }
{ locale = "ml"; arch = "linux-i686"; sha1 = "d3bd6308643ae805c69eeee8b716b97dc844ed9c"; }
{ locale = "ml"; arch = "linux-x86_64"; sha1 = "33f0f47e125f8a67a30d807775c7d0743135da84"; }
{ locale = "mr"; arch = "linux-i686"; sha1 = "9d38caee6d6c0baa8a7ea6148c65e7a28362a0fe"; }
{ locale = "mr"; arch = "linux-x86_64"; sha1 = "3c3f93fd22c8ae7d7056bbfae3df0ecaa7d7dcaf"; }
{ locale = "ms"; arch = "linux-i686"; sha1 = "8486b9a81265430e876410a6040e09f0bf6d4eed"; }
{ locale = "ms"; arch = "linux-x86_64"; sha1 = "6cd3c0ab1c33d8eb3de6f68ce7c7a219e80f49f9"; }
{ locale = "nb-NO"; arch = "linux-i686"; sha1 = "bcd8e685a023c9919479ffe0f77c16df4fe3e2e8"; }
{ locale = "nb-NO"; arch = "linux-x86_64"; sha1 = "8052c43680c9720783b6e1947c949030f1cfa51a"; }
{ locale = "nl"; arch = "linux-i686"; sha1 = "c0ae9e1fb361a7d085ef296f5afcc61a5b106c94"; }
{ locale = "nl"; arch = "linux-x86_64"; sha1 = "246213bd7baa7bb32b15c39237c0eece624a8dae"; }
{ locale = "nn-NO"; arch = "linux-i686"; sha1 = "f5f7b590544228f110ddb1153f1c5354bea58656"; }
{ locale = "nn-NO"; arch = "linux-x86_64"; sha1 = "c62e1e681736dbdf19d1a8c6a7f3eff01764d050"; }
{ locale = "or"; arch = "linux-i686"; sha1 = "8008fd2095b86bd05daee4e48f95aa9003982ebf"; }
{ locale = "or"; arch = "linux-x86_64"; sha1 = "a52d6d27d9612fe9b1aa3dac377d783bcc53baa1"; }
{ locale = "pa-IN"; arch = "linux-i686"; sha1 = "a819a01f2968030cc2102640f50e31cb340e5044"; }
{ locale = "pa-IN"; arch = "linux-x86_64"; sha1 = "2b8e58cf70e8cc841e720706a511e0626439b8ac"; }
{ locale = "pl"; arch = "linux-i686"; sha1 = "db1bb9bbf35166ba760274dd4c813bf4b52db2da"; }
{ locale = "pl"; arch = "linux-x86_64"; sha1 = "1a97efa01142188d282743bd3f97dec2bf51067a"; }
{ locale = "pt-BR"; arch = "linux-i686"; sha1 = "d3b3f3de01e6970909d6083a2164eb840897d46e"; }
{ locale = "pt-BR"; arch = "linux-x86_64"; sha1 = "e842275df31fa1202a6e5214424b870ed8e04789"; }
{ locale = "pt-PT"; arch = "linux-i686"; sha1 = "86001510f93e7063442415325cea1772a8fe04e8"; }
{ locale = "pt-PT"; arch = "linux-x86_64"; sha1 = "7090a6adb110be77527bca5a40ea5c44515e07d3"; }
{ locale = "rm"; arch = "linux-i686"; sha1 = "42087d61aed17ce567503cc944bbada7d5bc77a4"; }
{ locale = "rm"; arch = "linux-x86_64"; sha1 = "7b3a8078235ca307dc75b931b060d46a7b3e8e95"; }
{ locale = "ro"; arch = "linux-i686"; sha1 = "1ff6eb3feef71d37f943667945f4547fe9daca37"; }
{ locale = "ro"; arch = "linux-x86_64"; sha1 = "acf3f0c0ad5bd9b3c2edcafe7dd7b6e8e45a7ec4"; }
{ locale = "ru"; arch = "linux-i686"; sha1 = "3e9b32187704caec231fce83e5519d2b2fc066a7"; }
{ locale = "ru"; arch = "linux-x86_64"; sha1 = "065fee4f21ff6ebdc21a81aadc86a20ab3281dad"; }
{ locale = "si"; arch = "linux-i686"; sha1 = "d742e451a73195d0445b393b0f1127835ad4684b"; }
{ locale = "si"; arch = "linux-x86_64"; sha1 = "6341e742bfab7379d8a9de9545a126efa9f129ba"; }
{ locale = "sk"; arch = "linux-i686"; sha1 = "c714445df861c7073e8c840d904c91578c08db7a"; }
{ locale = "sk"; arch = "linux-x86_64"; sha1 = "a8fbdfa4c68092ff5258f88b7413d64fd0729ce6"; }
{ locale = "sl"; arch = "linux-i686"; sha1 = "dc4ef7a8aedbebcd3b9a0e6701c8b2fb245f784a"; }
{ locale = "sl"; arch = "linux-x86_64"; sha1 = "6165e3a1ef198eae25d56fa5b8dde4e37b037b9f"; }
{ locale = "son"; arch = "linux-i686"; sha1 = "2dd5909759dc85ae7a9401eb4c759748805b0729"; }
{ locale = "son"; arch = "linux-x86_64"; sha1 = "d09741294a24d80ddacb80676a2824cbd51a5585"; }
{ locale = "sq"; arch = "linux-i686"; sha1 = "1f2e3fa864c7c8f7f2d0ecca7812bfdfe7991d29"; }
{ locale = "sq"; arch = "linux-x86_64"; sha1 = "db5c95f01d258db2dfc04b7efecd1d7826663db8"; }
{ locale = "sr"; arch = "linux-i686"; sha1 = "54c0f91e41622e8263f7897d0b5a385870ae0d7a"; }
{ locale = "sr"; arch = "linux-x86_64"; sha1 = "b8b9c9001ed87429ce868144a50e6ab1ac7ccd5f"; }
{ locale = "sv-SE"; arch = "linux-i686"; sha1 = "667ed9f21997fc79e9ce40b8bf5e607258292699"; }
{ locale = "sv-SE"; arch = "linux-x86_64"; sha1 = "cb5abaca549b30ba5385ea3ef0a57be0bf446d44"; }
{ locale = "ta"; arch = "linux-i686"; sha1 = "13fdda06ab9a36a24128e12651a06f0499fbe581"; }
{ locale = "ta"; arch = "linux-x86_64"; sha1 = "95cd3149f404cfd0beadcdece8dfd5c102dbc72a"; }
{ locale = "te"; arch = "linux-i686"; sha1 = "4ec9f9b30078e70451bbf5bb06cc1c07530ed5a8"; }
{ locale = "te"; arch = "linux-x86_64"; sha1 = "1d5cbfee0731dfe10e3eb3aafe102e73c9e9eede"; }
{ locale = "th"; arch = "linux-i686"; sha1 = "a6809b082761293aca28b456b1489f270234f8bf"; }
{ locale = "th"; arch = "linux-x86_64"; sha1 = "77dba4a3eec1474be026dfc9021420af889172ad"; }
{ locale = "tr"; arch = "linux-i686"; sha1 = "eaa7a43b155ffbfc23e72b48fe0e150695a779e7"; }
{ locale = "tr"; arch = "linux-x86_64"; sha1 = "dfc241131ef4e46801e86bfe10e80b4c2bb5fdb3"; }
{ locale = "uk"; arch = "linux-i686"; sha1 = "fa5346d0c36f88a6a50259f0e170bbe5167f2393"; }
{ locale = "uk"; arch = "linux-x86_64"; sha1 = "bb5d61d9c14997958af850d663d48b607aa3e43e"; }
{ locale = "uz"; arch = "linux-i686"; sha1 = "d634d94bc28779757535d05295db33e186c15abc"; }
{ locale = "uz"; arch = "linux-x86_64"; sha1 = "0f469e0d5f2d92b4b3f2b47efef3aa44cd25803f"; }
{ locale = "vi"; arch = "linux-i686"; sha1 = "639aa1abebe1b670ecef9df6e9d06841124ddf0b"; }
{ locale = "vi"; arch = "linux-x86_64"; sha1 = "16f1319cb63cc4634a215a1c9b3e0e65c1833003"; }
{ locale = "xh"; arch = "linux-i686"; sha1 = "960338fec19485c733ebd7fbacd9b55ebd1b9981"; }
{ locale = "xh"; arch = "linux-x86_64"; sha1 = "3a795ffee6d119741fceaa0a4825e72f5cc4e0f2"; }
{ locale = "zh-CN"; arch = "linux-i686"; sha1 = "63dbb0328ea991b827fd5747d99aa3075486fce0"; }
{ locale = "zh-CN"; arch = "linux-x86_64"; sha1 = "a1d047de7685d70750850cfb0084259041d33cd4"; }
{ locale = "zh-TW"; arch = "linux-i686"; sha1 = "6f56944d2e31ab714d648bfd9262d39731e167b9"; }
{ locale = "zh-TW"; arch = "linux-x86_64"; sha1 = "d3cd71c2ceeb1856bea66de8d7220a8529888e86"; }
{ locale = "ach"; arch = "linux-i686"; sha1 = "802ac533ba95ecfb4780f84d52698a2cc2d7ac82"; }
{ locale = "ach"; arch = "linux-x86_64"; sha1 = "3c000ef496165cb4e0e104d72a381040a3bc6787"; }
{ locale = "af"; arch = "linux-i686"; sha1 = "6fa249f63fe690f3459f4b0112f4945a502a79eb"; }
{ locale = "af"; arch = "linux-x86_64"; sha1 = "f22b92d0fb0ed21f0e6a3a47c5f2fe873b3bfb56"; }
{ locale = "an"; arch = "linux-i686"; sha1 = "650c772ef89bc5ef6efe5129ddf8feaf993c8f1d"; }
{ locale = "an"; arch = "linux-x86_64"; sha1 = "e722d65e3b9b706e6b9214ae79543130ad6dba95"; }
{ locale = "ar"; arch = "linux-i686"; sha1 = "8ff6fbc92e5b9cedfa17eda240fc89f14eb68f73"; }
{ locale = "ar"; arch = "linux-x86_64"; sha1 = "a1e94f56148a554e522cd317d0f2384073020278"; }
{ locale = "as"; arch = "linux-i686"; sha1 = "c6815876c23117a462d79eb5da291610c1d96feb"; }
{ locale = "as"; arch = "linux-x86_64"; sha1 = "629997b112da84852a01606f7fa4f15448c0ebb3"; }
{ locale = "ast"; arch = "linux-i686"; sha1 = "acda6aefe872e4982d0e8f3ac337d4243bb5e00f"; }
{ locale = "ast"; arch = "linux-x86_64"; sha1 = "181d998305bb75ea5e99bb1b4b5059b54a724ab9"; }
{ locale = "az"; arch = "linux-i686"; sha1 = "230ebfaf61efac65c9daae983ec2fd854a9c1dac"; }
{ locale = "az"; arch = "linux-x86_64"; sha1 = "a8ddb38542bce008924e4b593691ae84a839e564"; }
{ locale = "be"; arch = "linux-i686"; sha1 = "47a242cd2c91cd7435c8c959d5eaa8595710f6aa"; }
{ locale = "be"; arch = "linux-x86_64"; sha1 = "db62ad921f9df2683522db1968db9b79edfbadf2"; }
{ locale = "bg"; arch = "linux-i686"; sha1 = "c2fddb3667c5bb50fee3011cfb782b2dff7f4063"; }
{ locale = "bg"; arch = "linux-x86_64"; sha1 = "1b891a9df513e9f099f68fe2f0429b00bd12505b"; }
{ locale = "bn-BD"; arch = "linux-i686"; sha1 = "0ad965be5c9ce5468e65667dcb0390a9afabd7b0"; }
{ locale = "bn-BD"; arch = "linux-x86_64"; sha1 = "301b659d5689de81ca60f7092176efaf48a50a18"; }
{ locale = "bn-IN"; arch = "linux-i686"; sha1 = "df99d9e80ebda8c146724f893ae2de77cf2518ab"; }
{ locale = "bn-IN"; arch = "linux-x86_64"; sha1 = "4b4cc8e588a518af8a922d32163249af115fac42"; }
{ locale = "br"; arch = "linux-i686"; sha1 = "39976bf6a0c7bdfc1832a6f2c48e92324f4a6727"; }
{ locale = "br"; arch = "linux-x86_64"; sha1 = "ea66a36ea70486f39c7cf7abbf637d37c04d32ef"; }
{ locale = "bs"; arch = "linux-i686"; sha1 = "71eeeccd5bf5757d6ec4f9e1442c4fcfbf312d79"; }
{ locale = "bs"; arch = "linux-x86_64"; sha1 = "10911d28d56d4083aea7eb2174d0d7dd78772215"; }
{ locale = "ca"; arch = "linux-i686"; sha1 = "434532ff2cca7a0401a7aed8753d1c5578e98c1a"; }
{ locale = "ca"; arch = "linux-x86_64"; sha1 = "2a6aaed334856d06ce8c426282f3345d9bcaa435"; }
{ locale = "cs"; arch = "linux-i686"; sha1 = "e2445b13ab680f5dfd5d67e4e796170fbd6bd120"; }
{ locale = "cs"; arch = "linux-x86_64"; sha1 = "ef1df48bd465a3b05d1046bf4627c1ae4f60ee06"; }
{ locale = "cy"; arch = "linux-i686"; sha1 = "f95974e478e2d0fec7400424a33202e1e2b1e5b9"; }
{ locale = "cy"; arch = "linux-x86_64"; sha1 = "c521abab2bffe24863c087f02d57ffafae47def7"; }
{ locale = "da"; arch = "linux-i686"; sha1 = "f11b050caae304029ccf23ce2906fe18115adbc8"; }
{ locale = "da"; arch = "linux-x86_64"; sha1 = "800e0f3b649c9a03d4e9cd2a4ccd8f14bbb5ed95"; }
{ locale = "de"; arch = "linux-i686"; sha1 = "b9502be9396e00b69946f0094c5939a8a57da64b"; }
{ locale = "de"; arch = "linux-x86_64"; sha1 = "84fab2779bc055821afdb5d7ff45e3ffe95e2858"; }
{ locale = "dsb"; arch = "linux-i686"; sha1 = "5eee946bc2182990b310ed57fbf527e82f93bc8b"; }
{ locale = "dsb"; arch = "linux-x86_64"; sha1 = "8b3219b071e836ecc4966e153ec0adb4e691de89"; }
{ locale = "el"; arch = "linux-i686"; sha1 = "9759c69061d6419edb949c55f7e797302b477c78"; }
{ locale = "el"; arch = "linux-x86_64"; sha1 = "db5025d393a763c7cd4ed447d61b640ee77e7e79"; }
{ locale = "en-GB"; arch = "linux-i686"; sha1 = "4fdc423d6d15bd6a14030a526ad7017fd5bdf937"; }
{ locale = "en-GB"; arch = "linux-x86_64"; sha1 = "0d8637f1ca6acfe494f963c936d8510c6c11f8bf"; }
{ locale = "en-US"; arch = "linux-i686"; sha1 = "e05722e42ea1d844d8fe40672026cacb19575ccf"; }
{ locale = "en-US"; arch = "linux-x86_64"; sha1 = "8143b339d0ceedaf797b49ca4b54bcc0c91925e3"; }
{ locale = "en-ZA"; arch = "linux-i686"; sha1 = "fac507eebec642fd50f248ac184dbde4538ad0bb"; }
{ locale = "en-ZA"; arch = "linux-x86_64"; sha1 = "2670a80c7ca5d5390df9fcee907afbe7a01f9f37"; }
{ locale = "eo"; arch = "linux-i686"; sha1 = "a134117ddd446b63f325a38f818a80921adb5b2f"; }
{ locale = "eo"; arch = "linux-x86_64"; sha1 = "5b073a912221e8e734ba17ecfe735d820f5febf3"; }
{ locale = "es-AR"; arch = "linux-i686"; sha1 = "0e518d9fe0644a6ada9463ae14fa67c2c49bfd5f"; }
{ locale = "es-AR"; arch = "linux-x86_64"; sha1 = "fa33935aa4abb696ea9a399cff0c1dc29beffab0"; }
{ locale = "es-CL"; arch = "linux-i686"; sha1 = "3c7df32ed5d2570e62e35dcb9f9d91588d7584d2"; }
{ locale = "es-CL"; arch = "linux-x86_64"; sha1 = "ced3821f7e334b2f0d5b5115cc04cbaf5bcdbe15"; }
{ locale = "es-ES"; arch = "linux-i686"; sha1 = "6af75a3e116162591dd6a15c8903ee5182afe03b"; }
{ locale = "es-ES"; arch = "linux-x86_64"; sha1 = "fa1ddbc5a3d9bd7c9cc424fe6c5e94c87d51eab2"; }
{ locale = "es-MX"; arch = "linux-i686"; sha1 = "8110bdf4c8657e88f71b8a6bec1ca92f2eac0538"; }
{ locale = "es-MX"; arch = "linux-x86_64"; sha1 = "30df4777fde7eba8724fab002cb7387203eeb82e"; }
{ locale = "et"; arch = "linux-i686"; sha1 = "2f16472e5cd030a14e3cfa761a32c0ef5ffd395e"; }
{ locale = "et"; arch = "linux-x86_64"; sha1 = "19a96b008a49e7a223ea2463edab7cda504e2ba5"; }
{ locale = "eu"; arch = "linux-i686"; sha1 = "786db5ad8d92324d3086f7b2b8da71767829a8f2"; }
{ locale = "eu"; arch = "linux-x86_64"; sha1 = "31273f797cb90615032611d2d86cac8cf6d28994"; }
{ locale = "fa"; arch = "linux-i686"; sha1 = "e2980430f1cd25edb401862b83fb49f2d730ff5e"; }
{ locale = "fa"; arch = "linux-x86_64"; sha1 = "dae850824c3eaaa31fec4aad19e38e2073d96f10"; }
{ locale = "ff"; arch = "linux-i686"; sha1 = "f865672eaa7815f3bb527baf3946c62c01c76dbb"; }
{ locale = "ff"; arch = "linux-x86_64"; sha1 = "aa207b51d24ca275b0cbd5ba4cd93ce16a6bd28a"; }
{ locale = "fi"; arch = "linux-i686"; sha1 = "30ef856ecdadeba171977859324f010d441a51e9"; }
{ locale = "fi"; arch = "linux-x86_64"; sha1 = "3ebbabc2346eeac01aaf88e91fd1fd55538c0770"; }
{ locale = "fr"; arch = "linux-i686"; sha1 = "4dd376ccc6811d46be052fcf1aab82e50a3e0999"; }
{ locale = "fr"; arch = "linux-x86_64"; sha1 = "f6409e276b400ecaa689d92fe5387662d1b5f2ab"; }
{ locale = "fy-NL"; arch = "linux-i686"; sha1 = "751cd1092a58a8b6cde5d9e80790715d249ac11b"; }
{ locale = "fy-NL"; arch = "linux-x86_64"; sha1 = "3cc75c55220f81b0291c16d2f237cb6a2d2609f0"; }
{ locale = "ga-IE"; arch = "linux-i686"; sha1 = "2bfa436c566a4e2f0fe7847feccf3c157e026d4b"; }
{ locale = "ga-IE"; arch = "linux-x86_64"; sha1 = "0b2ce0b246e107d99b13e497c64ad169e85eec51"; }
{ locale = "gd"; arch = "linux-i686"; sha1 = "3afc8ad8747bfcbc5a7e6f2e6de37cbefb3967e7"; }
{ locale = "gd"; arch = "linux-x86_64"; sha1 = "5bec8bcc0a67f304485b1efa7be5d952ce7985ce"; }
{ locale = "gl"; arch = "linux-i686"; sha1 = "8fa3dfdc0d2da19f6c98dc76363c9e0d9d10f978"; }
{ locale = "gl"; arch = "linux-x86_64"; sha1 = "4345cf5673267fb41c2c38f5fb92a3b0a9208cf0"; }
{ locale = "gu-IN"; arch = "linux-i686"; sha1 = "e57883626a22d3935716417194e78a689c5535c2"; }
{ locale = "gu-IN"; arch = "linux-x86_64"; sha1 = "be6095129ee3f3fc80f6705594a53c6ced996cb2"; }
{ locale = "he"; arch = "linux-i686"; sha1 = "7ca70c0648b2f3928c1dc33288b48f488cf1d19b"; }
{ locale = "he"; arch = "linux-x86_64"; sha1 = "f2eb7c6c33e8b4bc9a03bee587de4fe5b442ac95"; }
{ locale = "hi-IN"; arch = "linux-i686"; sha1 = "32b242a2c6865fdad63ba4de701c566ffb33ef99"; }
{ locale = "hi-IN"; arch = "linux-x86_64"; sha1 = "f83ceece81a71e6fb1494863b2970b2dc384d4c4"; }
{ locale = "hr"; arch = "linux-i686"; sha1 = "77f9c855e5f728dcd3b4ff27ed656aa67217dd35"; }
{ locale = "hr"; arch = "linux-x86_64"; sha1 = "f48bcf72d740f4a34bb7f888d977d4d39c141567"; }
{ locale = "hsb"; arch = "linux-i686"; sha1 = "2db09bd59f3761bfdba8bad565e27e1b42a93727"; }
{ locale = "hsb"; arch = "linux-x86_64"; sha1 = "99e0f119e5e79df5b20f686dd065fee5bda4511f"; }
{ locale = "hu"; arch = "linux-i686"; sha1 = "0d601a679675c517a535bf706e7cbad9882a5d7c"; }
{ locale = "hu"; arch = "linux-x86_64"; sha1 = "dbd3d180342d0946ab857bdd8d6bc30373e991b5"; }
{ locale = "hy-AM"; arch = "linux-i686"; sha1 = "5f3e01cf375af38bee7014ff21fe75daf4e27071"; }
{ locale = "hy-AM"; arch = "linux-x86_64"; sha1 = "a78fbb1cc4e6d10056cc7a3ccecf4750979c5953"; }
{ locale = "id"; arch = "linux-i686"; sha1 = "7efc031614247ddb93a27531d3fa1d19ce21d516"; }
{ locale = "id"; arch = "linux-x86_64"; sha1 = "e409bb73aad373791d83569dfb4a475bc617eac8"; }
{ locale = "is"; arch = "linux-i686"; sha1 = "0e5c4e9173379457b6c8edd1812121fce84cda07"; }
{ locale = "is"; arch = "linux-x86_64"; sha1 = "dc6cbffde61b6188080e458b4a31b634f4c0434c"; }
{ locale = "it"; arch = "linux-i686"; sha1 = "d75318f8421f634eeacf15aaa91a28261324044c"; }
{ locale = "it"; arch = "linux-x86_64"; sha1 = "b024d0e3498c3dd32757997a273d9f1051ccd47f"; }
{ locale = "ja"; arch = "linux-i686"; sha1 = "f74c1c567582a207efb501892845d1c28d7b8751"; }
{ locale = "ja"; arch = "linux-x86_64"; sha1 = "cb4151c0c1c6efa4c8ec5e4656de60b1abd65bac"; }
{ locale = "kk"; arch = "linux-i686"; sha1 = "1e9d43eedb0bab9f428a80ee3c2721a944961562"; }
{ locale = "kk"; arch = "linux-x86_64"; sha1 = "18a55f6ea18663922052411ebaed18c16c9f3050"; }
{ locale = "km"; arch = "linux-i686"; sha1 = "f4f6af5a09072e004e7c8db7a10edc9ab8d474c3"; }
{ locale = "km"; arch = "linux-x86_64"; sha1 = "43694f66fea7caf9b2f4d976564c00a99f7092e7"; }
{ locale = "kn"; arch = "linux-i686"; sha1 = "3a94f8a0cadc729e97bb6a7b273b02d79c9012dd"; }
{ locale = "kn"; arch = "linux-x86_64"; sha1 = "ec51644f69354aebac67f36e387d1a5b45d0dfa8"; }
{ locale = "ko"; arch = "linux-i686"; sha1 = "599de739c08799b8e4082190a53de3ae0dfc6617"; }
{ locale = "ko"; arch = "linux-x86_64"; sha1 = "338825804362d34911beaad146ca6d104bc69788"; }
{ locale = "lij"; arch = "linux-i686"; sha1 = "f2a6112a81043cc9608594cd56680a2e075dfd36"; }
{ locale = "lij"; arch = "linux-x86_64"; sha1 = "8650de76d89abdcba3d0e4bba8c2b90533e54ce6"; }
{ locale = "lt"; arch = "linux-i686"; sha1 = "0ea6e49b51dfd12150334b6023e26419716cdb65"; }
{ locale = "lt"; arch = "linux-x86_64"; sha1 = "a16c9e916462e3780159677528ffa35b9569a80b"; }
{ locale = "lv"; arch = "linux-i686"; sha1 = "0255634959aa739ae6807a1c249e4c78f51f8316"; }
{ locale = "lv"; arch = "linux-x86_64"; sha1 = "ada8dc2d3ea22c2afffac88b581dfc72a27f2f89"; }
{ locale = "mai"; arch = "linux-i686"; sha1 = "fa932b9e6d9798753e7b89b91a5db6565fe2b695"; }
{ locale = "mai"; arch = "linux-x86_64"; sha1 = "8a9252658d549d2cbc764197265275461db605b6"; }
{ locale = "mk"; arch = "linux-i686"; sha1 = "641c882870dfa7fb23bed9c07def585477ff459d"; }
{ locale = "mk"; arch = "linux-x86_64"; sha1 = "4b68d11f2a613bc8350d37dae899c2c65afe5dc9"; }
{ locale = "ml"; arch = "linux-i686"; sha1 = "f636e9b8d5e268f7c124ef3f35f6933de83fed62"; }
{ locale = "ml"; arch = "linux-x86_64"; sha1 = "ed98b20d8eb88a73b119c3a1435904f69529eabd"; }
{ locale = "mr"; arch = "linux-i686"; sha1 = "d5ef4d4dbf4d0b63f526d102e95f28078096032a"; }
{ locale = "mr"; arch = "linux-x86_64"; sha1 = "8e92bf456593359afb256c387578042c6085916f"; }
{ locale = "ms"; arch = "linux-i686"; sha1 = "d94320d0c8aee23b6d3c603664caab45180b6069"; }
{ locale = "ms"; arch = "linux-x86_64"; sha1 = "b9fdc0248d9656b3555c475643c7e07ca3c6b222"; }
{ locale = "nb-NO"; arch = "linux-i686"; sha1 = "d49719c255a43151ed5e94d7024c39914ea27ec7"; }
{ locale = "nb-NO"; arch = "linux-x86_64"; sha1 = "f2b1f00254ef350f817b5c1958384a9f5144f83e"; }
{ locale = "nl"; arch = "linux-i686"; sha1 = "cc54828041f57f623de691a49e4bb055bd059c54"; }
{ locale = "nl"; arch = "linux-x86_64"; sha1 = "5728a30bf53644a3b13bc00f5652e067cbe9100b"; }
{ locale = "nn-NO"; arch = "linux-i686"; sha1 = "0f69ddbd963a19d104ee96589c405c55aa7140b2"; }
{ locale = "nn-NO"; arch = "linux-x86_64"; sha1 = "26af2b8cf928fedb5442c5257289f5e38c4f8432"; }
{ locale = "or"; arch = "linux-i686"; sha1 = "2da0842ebe8ae5a8e80061d0fc159a5d408c4464"; }
{ locale = "or"; arch = "linux-x86_64"; sha1 = "b7cc446178a493589d8654236f6e9113aee48455"; }
{ locale = "pa-IN"; arch = "linux-i686"; sha1 = "dd81dc403366a7fd0d395338878b8b8fcb858365"; }
{ locale = "pa-IN"; arch = "linux-x86_64"; sha1 = "2ca8cc4c491f0ded4cef8e3826a3c1419a580051"; }
{ locale = "pl"; arch = "linux-i686"; sha1 = "468d45392126ac7852012ed43d76d83e238dc2ac"; }
{ locale = "pl"; arch = "linux-x86_64"; sha1 = "ed20af16563516671f32bb588728e90f29955964"; }
{ locale = "pt-BR"; arch = "linux-i686"; sha1 = "b197bca20e972ce2f8851dc128fb212a7d293454"; }
{ locale = "pt-BR"; arch = "linux-x86_64"; sha1 = "2cd05329c3612330fdc1354fe651cc13ab8d9a5f"; }
{ locale = "pt-PT"; arch = "linux-i686"; sha1 = "1087ba6ba17aa102888e929ccf7acc6b2476e447"; }
{ locale = "pt-PT"; arch = "linux-x86_64"; sha1 = "aa1907c10e980a8466c1604519ffa08aaabb2d7c"; }
{ locale = "rm"; arch = "linux-i686"; sha1 = "fdb717a0f40b94a53077ff036a55c0f93b61a2cc"; }
{ locale = "rm"; arch = "linux-x86_64"; sha1 = "af10206080a7ad21e5fda9cdf66a734ee33b07ac"; }
{ locale = "ro"; arch = "linux-i686"; sha1 = "f08c67c6ea2a63c216f944453b4ce8b36f4ed840"; }
{ locale = "ro"; arch = "linux-x86_64"; sha1 = "07efb37804ffab35f117eb32f9f645b554ac1dd8"; }
{ locale = "ru"; arch = "linux-i686"; sha1 = "874f588d7ac5554ae4e8e134bfc272897f839f97"; }
{ locale = "ru"; arch = "linux-x86_64"; sha1 = "af64b6eb8d33d6bd78ce86e4785be50babe5c919"; }
{ locale = "si"; arch = "linux-i686"; sha1 = "672523b996c7021e06b4a713f7ac1239a3b1800f"; }
{ locale = "si"; arch = "linux-x86_64"; sha1 = "2e594b56230c079a9f1735e9bab9dc4a9d9e31ab"; }
{ locale = "sk"; arch = "linux-i686"; sha1 = "6edffa576d9829673c65400d4570b34dc787faad"; }
{ locale = "sk"; arch = "linux-x86_64"; sha1 = "7b506fedbf3a25cd1ed54b05c9b5cb7b8c237ad8"; }
{ locale = "sl"; arch = "linux-i686"; sha1 = "e8d1fea389b7cb75b7ccbf22ad5b8691e9bf1b6a"; }
{ locale = "sl"; arch = "linux-x86_64"; sha1 = "20163798733ee36ffa510987b18d1eb67b82aca1"; }
{ locale = "son"; arch = "linux-i686"; sha1 = "9076d0e9de6adb7fbd26dbd3cd89dd5728939aab"; }
{ locale = "son"; arch = "linux-x86_64"; sha1 = "352aeb9f5ccb1e3bb87c8e47f93e96a049991412"; }
{ locale = "sq"; arch = "linux-i686"; sha1 = "838c4c525a9f93117704851ad81b2c199a9c28fc"; }
{ locale = "sq"; arch = "linux-x86_64"; sha1 = "0139a064056da0ed1730fd768da1322a9661bca9"; }
{ locale = "sr"; arch = "linux-i686"; sha1 = "7d74018cd9948ee31e05b30ff1fb45a84d417494"; }
{ locale = "sr"; arch = "linux-x86_64"; sha1 = "85c43e2359f444faf111efd83fb0dc3e1b0edb48"; }
{ locale = "sv-SE"; arch = "linux-i686"; sha1 = "bc95ee926f82aba58691d923eb4cb963aa4cb64a"; }
{ locale = "sv-SE"; arch = "linux-x86_64"; sha1 = "7c8946d6180e2c48a80958b6a790bf6c9231591e"; }
{ locale = "ta"; arch = "linux-i686"; sha1 = "dfaad8f934869d714c94a95a775bcdcd67fda3c4"; }
{ locale = "ta"; arch = "linux-x86_64"; sha1 = "5523c6df4e2b03ae71c865aabe6bb0dd0446fc87"; }
{ locale = "te"; arch = "linux-i686"; sha1 = "7a61ca88c832af3d15f197ba01d66c6fc43465d3"; }
{ locale = "te"; arch = "linux-x86_64"; sha1 = "696823890791a05c6cf0230d1063a30012873090"; }
{ locale = "th"; arch = "linux-i686"; sha1 = "4a3b932813ad0ab07f467a598e9e85b847bbe142"; }
{ locale = "th"; arch = "linux-x86_64"; sha1 = "f847f3f0fb07f97053066f4b4314d93e9614e6cf"; }
{ locale = "tr"; arch = "linux-i686"; sha1 = "59eee567e30cf6321c234c60002b416faec07aa4"; }
{ locale = "tr"; arch = "linux-x86_64"; sha1 = "b64dfdbdc75f87003f00883173084646a2617a29"; }
{ locale = "uk"; arch = "linux-i686"; sha1 = "44e6b53ede97835847ed84defe4235cad513c653"; }
{ locale = "uk"; arch = "linux-x86_64"; sha1 = "bb6f84f58a19c6287bbc84e0e7101fcd48bd720a"; }
{ locale = "uz"; arch = "linux-i686"; sha1 = "1aec3ba9efd52a1f386e0bb075745a7c01c443a2"; }
{ locale = "uz"; arch = "linux-x86_64"; sha1 = "2ce2caccb638c0467ba1382a15146ef1cc33fa72"; }
{ locale = "vi"; arch = "linux-i686"; sha1 = "d8b339892c152254c89ec1d42ff9b7f128455aab"; }
{ locale = "vi"; arch = "linux-x86_64"; sha1 = "e4503686f2a997e1c793ef8e3c80bccd3dc0e2f0"; }
{ locale = "xh"; arch = "linux-i686"; sha1 = "d130fae691b91a1f1f7d15ca84f643ccf299b0e3"; }
{ locale = "xh"; arch = "linux-x86_64"; sha1 = "18b5d09571f4db7b18dbbdb3f3c29c80480a16aa"; }
{ locale = "zh-CN"; arch = "linux-i686"; sha1 = "303816f99659e2bbb8ecc4f9b1c83932a0c9205d"; }
{ locale = "zh-CN"; arch = "linux-x86_64"; sha1 = "238b50b8bb745f2d80099354592c9b710c55f1d8"; }
{ locale = "zh-TW"; arch = "linux-i686"; sha1 = "9159a6fea44a97a33390c527abf7730cdbbc9216"; }
{ locale = "zh-TW"; arch = "linux-x86_64"; sha1 = "74e3c2292aed9c2a7de24d6f3693ac1d0ba4c41f"; }
];
}

View File

@ -16,14 +16,14 @@
assert stdenv.cc ? libc && stdenv.cc.libc != null;
let version = "38.0.6"; in
let version = "39.0"; in
stdenv.mkDerivation rec {
name = "firefox-${version}";
src = fetchurl {
url = "http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/${version}/source/firefox-${version}.source.tar.bz2";
sha1 = "d6103cdcc6a6eda029d44104354d3a5cafbf8d45";
sha1 = "32785daee7ddb9da8d7509ef095258fc58fe838e";
};
buildInputs =

View File

@ -4,11 +4,11 @@
, gsm, speex, portaudio, spandsp, libuuid
}:
stdenv.mkDerivation rec {
version = "0.4.12";
version = "0.4.13";
name = "baresip-${version}";
src=fetchurl {
url = "http://www.creytiv.com/pub/baresip-${version}.tar.gz";
sha256 = "0f4jfpyvlgvq47yha3ys3kbrpd6c20yxaqki70hl6b91jbhmq9i2";
sha256 = "1mndpcclp5cqlm5jfbh37ig8dmga75qxqfinp4dyd1c0wnd0f0jg";
};
buildInputs = [zlib openssl libre librem pkgconfig
cairo mpg123 gstreamer gst_ffmpeg gst_plugins_base gst_plugins_bad gst_plugins_good

View File

@ -4,11 +4,11 @@
stdenv.mkDerivation rec {
name = "mcabber-${version}";
version = "0.10.3";
version = "1.0.0";
src = fetchurl {
url = "http://mcabber.com/files/mcabber-${version}.tar.bz2";
sha256 = "0vgsqw6yn0lzzcnr4fql4ycgf3gwqj6w4p0l4nqnvhkc94w62ikp";
sha256 = "0ckh2l5fbnykzbvdrqjwd1ppalaifb79nnizh8kra2sy76xbqxjl";
};
buildInputs = [ openssl ncurses pkgconfig glib loudmouth libotr gpgme ];

View File

@ -24,8 +24,8 @@ let
langsSpaces = stdenv.lib.concatStringsSep " " langs;
major = "4";
minor = "4";
patch = "3";
tweak = "2";
patch = "4";
tweak = "3";
subdir = "${major}.${minor}.${patch}";
version = "${subdir}${if tweak == "" then "" else "."}${tweak}";
@ -80,14 +80,14 @@ let
translations = fetchSrc {
name = "translations";
sha256 = "17wfnbwcp7c5cx06c88gmprscfz05qyb5587m72xs6hzr741ygir";
sha256 = "1zyfpbdsx0kjkabdpkf0lg7hjnvxsf6hj9ljs8v9iqw3x3b7llib";
};
# TODO: dictionaries
help = fetchSrc {
name = "help";
sha256 = "09im7shbka9dfdh6mq31xq106khlyyw6rr1ij69smlkq0kg463g1";
sha256 = "1jbbbv63p63mwby52ynz2yk79pb32wsnakhxfhc75ng1br6cpll0";
};
};
@ -97,7 +97,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "http://download.documentfoundation.org/libreoffice/src/${subdir}/libreoffice-${version}.tar.xz";
sha256 = "0rl9x01ngxwnqwzxkrqy4vks4rb024m75z0w4zidwyp0az0m8qdd";
sha256 = "0wns7ny19bsl5ar1rq7n4033rfijl2cjn9l8bj1gwhpqlkd8db1i";
};
# Openoffice will open libcups dynamically, so we link it directly

View File

@ -6,7 +6,7 @@ let
version="1.8";
name="${baseName}-${version}";
hash="0bl4dr7k6simwdvdyxhnjkiz4nm5y0nr8bfhc34zk0360i9m6sk3";
url="http://www4.in.tum.de/~schulz/WORK/E_DOWNLOAD/V_1.8/E.tgz";
url="http://wwwlehre.dhbw-stuttgart.de/~sschulz/WORK/E_DOWNLOAD/V_1.8/E.tgz";
sha256="0bl4dr7k6simwdvdyxhnjkiz4nm5y0nr8bfhc34zk0360i9m6sk3";
};
in

View File

@ -1,3 +1,3 @@
url http://www4.informatik.tu-muenchen.de/~schulz/E/Download.html
url http://wwwlehre.dhbw-stuttgart.de/~sschulz/E/Download.html
version_link '[.]tgz$'
version '.*[/]V_([0-9.]+)[/].*' '\1'

View File

@ -1,12 +1,12 @@
{ stdenv, fetchurl, gmp, readline }:
stdenv.mkDerivation rec {
version = "2.7.3";
version = "2.7.4";
name = "pari-${version}";
src = fetchurl {
url = "http://pari.math.u-bordeaux.fr/pub/pari/unix/${name}.tar.gz";
sha256 = "02k54m7p47r54lgxqanxvf7pdrss17n8if1qwk5wx0j1px22j0rq";
sha256 = "0k1qqagfl6zn7gvwmsqffj6g9yrzqvszwh2mblhmxpjlw1pigfh8";
};
buildInputs = [gmp readline];

View File

@ -1,24 +1,16 @@
{ stdenv, fetchurl, python, rcs, git }:
stdenv.mkDerivation rec {
name = "src-0.13";
name = "src-0.19";
src = fetchurl {
url = "http://www.catb.org/~esr/src/${name}.tar.gz";
sha256 = "03x0slgi6bnzgfn7f9qbl6jma0pj7357kwdh832l3v8zafk41p51";
sha256 = "0p56g09ndbmnxxjz2rn7fq3yjx572ywj0xdim9rz5cqnx0pmr71x";
};
buildInputs = [ python ];
buildInputs = [ python rcs git ];
patches = [ ./path.patch ];
postPatch = ''
sed -i \
-e 's|@python@|${python}|' \
-e 's|@rcs@|${rcs}|' \
-e 's|@git@|${git}|' \
src srctest
'';
preConfigure = "patchShebangs .";
makeFlags = [ "prefix=$(out)" ];
@ -26,11 +18,8 @@ stdenv.mkDerivation rec {
meta = {
description = "Simple single-file revision control";
homepage = http://www.catb.org/~esr/src/;
license = stdenv.lib.licenses.bsd3;
platforms = stdenv.lib.platforms.all;
};
}

View File

@ -1,30 +0,0 @@
diff -Naur src-0.13-orig/src src-0.13/src
--- src-0.13-orig/src 2014-11-24 03:56:16.000000000 -0500
+++ src-0.13/src 2014-11-26 16:32:32.925151003 -0500
@@ -1,4 +1,4 @@
-#!/usr/bin/env python2
+#!@python@/bin/python
#
# src - simple revision control.
#
@@ -51,6 +51,8 @@
import sys, os, subprocess, time, calendar, stat, glob, shutil, hashlib
+os.environ['PATH'] = "@rcs@/bin:@git@/bin:" + os.environ['PATH']
+
version="0.13"
def rfc3339(t):
diff -Naur src-0.13-orig/srctest src-0.13/srctest
--- src-0.13-orig/srctest 2014-11-21 08:12:00.000000000 -0500
+++ src-0.13/srctest 2014-11-26 16:33:13.627715388 -0500
@@ -12,7 +12,7 @@
# Set the PATH to include the current directory, so the repository
# head version of src can always be tested.
-PATH="$(pwd)":$PATH
+PATH="$(pwd)":@git@/bin:$PATH
trap "rm -fr $SANDBOX" 0 1 2 15

View File

@ -4,20 +4,21 @@
let
version = "0.3.7.2";
srcs = {
x86_64-linux = fetchurl {
url = "https://get.popcorntime.io/build/Popcorn-Time-${version}-Linux64.tar.xz";
sha256 = "0lm9k4fr73a9p00i3xj2ywa4wvjf9csadm0pcz8d6imwwq44sa8b";
};
i686-linux = fetchurl {
url = "https://get.popcorntime.io/build/Popcorn-Time-${version}-Linux32.tar.xz";
sha256 = "1dz1cp31qbwamm9pf8ydmzzhnb6d9z73bigdv3y74dgicz3dpr91";
};
};
popcorntimePackage = stdenv.mkDerivation rec {
name = "popcorntime-package-${version}";
src = srcs."${stdenv.system}";
src =
if stdenv.system == "x86_64-linux" then
fetchurl {
url = "https://get.popcorntime.io/build/Popcorn-Time-${version}-Linux64.tar.xz";
sha256 = "0lm9k4fr73a9p00i3xj2ywa4wvjf9csadm0pcz8d6imwwq44sa8b";
}
else if stdenv.system == "i686-linux" then
fetchurl {
url = "https://get.popcorntime.io/build/Popcorn-Time-${version}-Linux32.tar.xz";
sha256 = "1dz1cp31qbwamm9pf8ydmzzhnb6d9z73bigdv3y74dgicz3dpr91";
}
else
throw "Unsupported system ${stdenv.system}";
sourceRoot = ".";
installPhase = ''
mkdir -p $out

View File

@ -0,0 +1,30 @@
{ stdenv, fetchgit }:
stdenv.mkDerivation {
name = "win-pvdrivers-git-20150701";
version = "20150701";
src = fetchgit {
url = "https://github.com/ts468/win-pvdrivers";
rev = "3054d645fc3ee182bea3e97ff01869f01cc3637a";
sha256 = "6232ca2b7c9af874abbcb9262faf2c74c819727ed2eb64599c790879df535106";
};
buildPhase =
let unpack = x: "tar xf $src/${x}.tar; mkdir -p x86/${x} amd64/${x}; cp ${x}/x86/* x86/${x}/.; cp ${x}/x64/* amd64/${x}/.";
in stdenv.lib.concatStringsSep "\n" (map unpack ["xenbus" "xeniface" "xenvif" "xennet" "xenvbd"]);
installPhase = ''
mkdir -p $out
cp -r x86 $out/.
cp -r amd64 $out/.
'';
meta = with stdenv.lib; {
description = "Xen Subproject: Windows PV Driver";
homepage = "http://xenproject.org/downloads/windows-pv-drivers.html";
maintainers = [ maintainers.tstrobel ];
platforms = platforms.linux;
license = licenses.bsd3;
};
}

View File

@ -0,0 +1,38 @@
{ stdenv, fetchurl, p7zip }:
stdenv.mkDerivation {
name = "win-qemu-0.1.105-1";
version = "0.1.105-1";
phases = [ "buildPhase" "installPhase" ];
src = fetchurl {
url = "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.105-1/virtio-win.iso";
sha256 = "065gz7s77y0q9kfqbr27451sr28rm9azpi88sqjkfph8c6r8q3wc";
};
buildPhase = ''
${p7zip}/bin/7z x $src
'';
installPhase =
let
copy_pvpanic = arch: version: "mkdir -p $out/${arch}/qemupanic; cp pvpanic/${version}/${arch}/* $out/${arch}/qemupanic/. \n";
copy_pciserial = arch: "mkdir -p $out/${arch}/qemupciserial; cp qemupciserial/* $out/${arch}/qemupciserial/. \n";
copy_agent = arch: ''
mkdir -p $out/${arch}/qemuagent
cp guest-agent/${if arch=="x86" then "qemu-ga-x86.msi" else "qemu-ga-x64.msi"} $out/${arch}/qemuagent/qemu-guest-agent.msi
(cd $out/${arch}/qemuagent; ${p7zip}/bin/7z x qemu-guest-agent.msi; rm qemu-guest-agent.msi)
'';
copy = arch: version: (copy_pvpanic arch version) + (copy_pciserial arch) + (copy_agent arch);
in
(copy "amd64" "w8.1") + (copy "x86" "w8.1");
meta = with stdenv.lib; {
description = "Windows QEMU Drivers";
homepage = "https://fedoraproject.org/wiki/Windows_Virtio_Drivers";
maintainers = [ maintainers.tstrobel ];
platforms = platforms.linux;
license = licenses.gpl2;
};
}

View File

@ -0,0 +1,46 @@
{ stdenv, fetchurl, p7zip }:
let
src_x86 = fetchurl {
url = "http://apt.univention.de/download/addons/gplpv-drivers/gplpv_Vista2008x32_signed_0.11.0.373.msi";
sha256 = "04r11xw8ikjmcdhrsk878c86g0d0pvras5arsas3zs6dhgjykqap";
};
src_amd64 = fetchurl {
url = "http://apt.univention.de/download/addons/gplpv-drivers/gplpv_Vista2008x64_signed_0.11.0.373.msi";
sha256 = "00k628mg9b039p8lmg2l9n81dr15svy70p3m6xmq6f0frmci38ph";
};
in
stdenv.mkDerivation {
name = "gplpv-0.11.0.373";
version = "0.11.0.373";
phases = [ "buildPhase" "installPhase" ];
buildPhase = ''
mkdir -p x86
(cd x86; ${p7zip}/bin/7z e ${src_x86})
mkdir -p amd64
(cd amd64; ${p7zip}/bin/7z e ${src_amd64})
'';
installPhase = ''
mkdir -p $out/x86 $out/amd64
cp x86/* $out/x86/.
cp amd64/* $out/amd64/.
'';
meta = with stdenv.lib; {
description = ''
A collection of open source Window PV drivers that allow
Windows to be para-virtualized.
The drivers are signed by Univention with a Software Publishers
Certificate obtained from the VeriSign CA.
'';
homepage = "http://wiki.univention.de/index.php?title=Installing-signed-GPLPV-drivers";
maintainers = [ maintainers.tstrobel ];
platforms = platforms.linux;
license = licenses.gpl2;
};
}

View File

@ -0,0 +1,69 @@
{ stdenv, fetchurl, p7zip, win-virtio }:
let
src_usbdk_x86 = fetchurl {
url = "http://www.spice-space.org/download/windows/usbdk/UsbDk_1.0.4_x86.msi";
sha256 = "17hv8034wk1xqnanm5jxs4741nl7asps1fdz6lhnrpp6gvj6yg9y";
};
src_usbdk_amd64 = fetchurl {
url = "http://www.spice-space.org/download/windows/usbdk/UsbDk_1.0.4_x64.msi";
sha256 = "0alcqsivp33pm8sy0lmkvq7m5yh6mmcmxdl39zjxjra67kw8r2sd";
};
src_qxlwddm = fetchurl {
url = "http://people.redhat.com/~vrozenfe/qxlwddm/qxlwddm-0.11.zip";
sha256 = "082zdpbh9i3bq2ds8g33rcbcw390jsm7cqf46rrlx02x8r03dm98";
};
src_vdagent_x86 = fetchurl {
url = "http://www.spice-space.org/download/windows/vdagent/vdagent-win-0.7.3/vdagent_0_7_3_x86.zip";
sha256 = "0d928g49rf4dl79jmvnqh6g864hp1flw1f0384sfp82himm3bxjs";
};
src_vdagent_amd64 = fetchurl {
url = "http://www.spice-space.org/download/windows/vdagent/vdagent-win-0.7.3/vdagent_0_7_3_x64.zip";
sha256 = "0djmvm66jcmcyhhbjppccbai45nqpva7vyvry6w8nyc0fwi1vm9l";
};
in
stdenv.mkDerivation {
# use version number of qxlwddm as qxlwddm is the most important component
name = "win-spice-0.11";
version = "0.11";
phases = [ "buildPhase" "installPhase" ];
buildPhase = ''
mkdir -p usbdk/x86 usbdk/amd64
(cd usbdk/x86; ${p7zip}/bin/7z x ${src_usbdk_x86})
(cd usbdk/amd64; ${p7zip}/bin/7z x ${src_usbdk_amd64})
mkdir -p vdagent/x86 vdagent/amd64
(cd vdagent/x86; ${p7zip}/bin/7z x ${src_vdagent_x86}; mv vdagent_0_7_3_x86/* .; rm -r vdagent_0_7_3_x86)
(cd vdagent/amd64; ${p7zip}/bin/7z x ${src_vdagent_amd64}; mv vdagent_0_7_3_x64/* .; rm -r vdagent_0_7_3_x64)
mkdir -p qxlwddm
(cd qxlwddm; ${p7zip}/bin/7z x ${src_qxlwddm}; mv Win8 w8.1; cd w8.1; mv x64 amd64)
'';
installPhase =
let
copy_qxl = arch: version: "mkdir -p $out/${arch}/qxl; cp qxlwddm/${version}/${arch}/* $out/${arch}/qxl/. \n";
copy_usbdk = arch: "mkdir -p $out/${arch}/usbdk; cp usbdk/${arch}/* $out/${arch}/usbdk/. \n";
copy_vdagent = arch: "mkdir -p $out/${arch}/vdagent; cp vdagent/${arch}/* $out/${arch}/vdagent/. \n";
# SPICE needs vioserial
# TODO: Link windows version in win-spice (here) to version used in win-virtio.
# That way it would never matter whether vioserial is installed from win-virtio or win-spice.
copy_vioserial = arch: "mkdir -p $out/${arch}/vioserial; cp ${win-virtio}/${arch}/vioserial/* $out/${arch}/vioserial/. \n";
copy = arch: version: (copy_qxl arch version) + (copy_usbdk arch) + (copy_vdagent arch) + (copy_vioserial arch);
in
(copy "amd64" "w8.1") + (copy "x86" "w8.1");
meta = with stdenv.lib; {
description = ''Windows SPICE Drivers'';
homepage = "http://www.spice-space.org";
maintainers = [ maintainers.tstrobel ];
platforms = platforms.linux;
};
}

View File

@ -0,0 +1,37 @@
{ stdenv, fetchurl, p7zip }:
stdenv.mkDerivation {
name = "win-virtio-0.1.105-1";
version = "0.1.105-1";
phases = [ "buildPhase" "installPhase" ];
src = fetchurl {
url = "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.105-1/virtio-win.iso";
sha256 = "065gz7s77y0q9kfqbr27451sr28rm9azpi88sqjkfph8c6r8q3wc";
};
buildPhase = ''
${p7zip}/bin/7z x $src
'';
installPhase =
let
copy = arch: version: {input, output}: "mkdir -p $out/${arch}/${output}; cp ${input}/${version}/${arch}/* $out/${arch}/${output}/.";
virtio = [{input="Balloon"; output="vioballoon";}
{input="NetKVM"; output="vionet";}
{input="vioscsi"; output="vioscsi";}
{input="vioserial"; output="vioserial";}
{input="viostor"; output="viostor";}
{input="viorng"; output="viorng";}
];
in
stdenv.lib.concatStringsSep "\n" ((map (copy "amd64" "w8.1") virtio) ++ (map (copy "x86" "w8.1") virtio));
meta = with stdenv.lib; {
description = "Windows VirtIO Drivers";
homepage = "https://fedoraproject.org/wiki/Windows_Virtio_Drivers";
maintainers = [ maintainers.tstrobel ];
platforms = platforms.linux;
};
}

View File

@ -0,0 +1,23 @@
diff --git a/src/Kconfig b/src/Kconfig
index 45ca59c..faf8951 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -144,13 +144,13 @@ menu "Hardware support"
config ATA_DMA
depends on ATA
bool "ATA DMA"
- default n
+ default y
help
Detect and try to use ATA bus mastering DMA controllers.
config ATA_PIO32
depends on ATA
bool "ATA 32bit PIO"
- default n
+ default y
help
Use 32bit PIO accesses on ATA (minor optimization on PCI
transfers).
config AHCI
--
1.7.10.4

View File

@ -0,0 +1,104 @@
From bd71555985efc423b1a119b6a3177de855763453 Mon Sep 17 00:00:00 2001
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Date: Tue, 20 Jan 2015 11:26:30 +0100
Subject: [PATCH] libxl: Spice image compression setting support for upstream
qemu
Usage:
spice_image_compression=[auto_glz|auto_lz|quic|glz|lz|off]
Specifies what image compression is to be used by spice (if given),
otherwise the qemu default will be used.
Signed-off-by: Fabio Fantoni <fabio.fantoni@m2r.biz>
Acked-by: Wei Liu <wei.liu2@citrix.com>
---
docs/man/xl.cfg.pod.5 | 6 ++++++
tools/libxl/libxl.h | 11 +++++++++++
tools/libxl/libxl_dm.c | 4 ++++
tools/libxl/libxl_types.idl | 1 +
tools/libxl/xl_cmdimpl.c | 2 ++
5 files changed, 24 insertions(+)
diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
index e2f91fc..0c2cbac 100644
--- a/docs/man/xl.cfg.pod.5
+++ b/docs/man/xl.cfg.pod.5
@@ -1427,6 +1427,12 @@ for redirection of up to 4 usb devices from spice client to domU's qemu.
It requires an usb controller and if not defined it will automatically adds
an usb2 controller. The default is disabled (0).
+=item B<spice_image_compression=[auto_glz|auto_lz|quic|glz|lz|off]>
+
+Specifies what image compression is to be used by spice (if given), otherwise
+the qemu default will be used. Please see documentations of your current qemu
+version for details.
+
=back
=head3 Miscellaneous Emulated Hardware
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 0a123f1..b8e0b67 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -528,6 +528,17 @@ typedef struct libxl__ctx libxl_ctx;
#define LIBXL_HAVE_SPICE_USBREDIREDIRECTION 1
/*
+ * LIBXL_HAVE_SPICE_IMAGECOMPRESSION
+ *
+ * If defined, then the libxl_spice_info structure will contain a string type
+ * field: image_compression. This value defines what Spice image compression
+ * is used.
+ *
+ * If this is not defined, the Spice image compression setting support is ignored.
+ */
+#define LIBXL_HAVE_SPICE_IMAGECOMPRESSION 1
+
+/*
* LIBXL_HAVE_DOMAIN_CREATE_RESTORE_PARAMS 1
*
* If this is defined, libxl_domain_create_restore()'s API has changed to
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index c2b0487..40c8649 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -398,6 +398,10 @@ static char *dm_spice_options(libxl__gc *gc,
if (!libxl_defbool_val(spice->clipboard_sharing))
opt = libxl__sprintf(gc, "%s,disable-copy-paste", opt);
+ if (spice->image_compression)
+ opt = libxl__sprintf(gc, "%s,image-compression=%s", opt,
+ spice->image_compression);
+
return opt;
}
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 1214d2e..052ded9 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -241,6 +241,7 @@ libxl_spice_info = Struct("spice_info", [
("vdagent", libxl_defbool),
("clipboard_sharing", libxl_defbool),
("usbredirection", integer),
+ ("image_compression", string),
])
libxl_sdl_info = Struct("sdl_info", [
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 0b02a6c..00aa69d 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1948,6 +1948,8 @@ skip_vfb:
&b_info->u.hvm.spice.clipboard_sharing, 0);
if (!xlu_cfg_get_long (config, "spiceusbredirection", &l, 0))
b_info->u.hvm.spice.usbredirection = l;
+ xlu_cfg_replace_string (config, "spice_image_compression",
+ &b_info->u.hvm.spice.image_compression, 0);
xlu_cfg_get_defbool(config, "nographic", &b_info->u.hvm.nographic, 0);
xlu_cfg_get_defbool(config, "gfx_passthru",
&b_info->u.hvm.gfx_passthru, 0);
--
1.9.2

View File

@ -0,0 +1,104 @@
From 296c7f3284efe655d95a8ae045a5dc1a20d6fff0 Mon Sep 17 00:00:00 2001
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Date: Tue, 20 Jan 2015 11:33:17 +0100
Subject: [PATCH] libxl: Spice streaming video setting support for upstream
qemu
Usage:
spice_streaming_video=[filter|all|off]
Specifies what streaming video setting is to be used by spice (if
given),
otherwise the qemu default will be used.
Signed-off-by: Fabio Fantoni <fabio.fantoni@m2r.biz>
Acked-by: Wei Liu <wei.liu2@citrix.com>
---
docs/man/xl.cfg.pod.5 | 5 +++++
tools/libxl/libxl.h | 11 +++++++++++
tools/libxl/libxl_dm.c | 4 ++++
tools/libxl/libxl_types.idl | 1 +
tools/libxl/xl_cmdimpl.c | 2 ++
5 files changed, 23 insertions(+)
diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
index 0c2cbac..408653f 100644
--- a/docs/man/xl.cfg.pod.5
+++ b/docs/man/xl.cfg.pod.5
@@ -1433,6 +1433,11 @@ Specifies what image compression is to be used by spice (if given), otherwise
the qemu default will be used. Please see documentations of your current qemu
version for details.
+=item B<spice_streaming_video=[filter|all|off]>
+
+Specifies what streaming video setting is to be used by spice (if given),
+otherwise the qemu default will be used.
+
=back
=head3 Miscellaneous Emulated Hardware
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index b8e0b67..c219f59 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -539,6 +539,17 @@ typedef struct libxl__ctx libxl_ctx;
#define LIBXL_HAVE_SPICE_IMAGECOMPRESSION 1
/*
+ * LIBXL_HAVE_SPICE_STREAMINGVIDEO
+ *
+ * If defined, then the libxl_spice_info structure will contain a string type
+ * field: streaming_video. This value defines what Spice streaming video setting
+ * is used.
+ *
+ * If this is not defined, the Spice streaming video setting support is ignored.
+ */
+#define LIBXL_HAVE_SPICE_STREAMINGVIDEO 1
+
+/*
* LIBXL_HAVE_DOMAIN_CREATE_RESTORE_PARAMS 1
*
* If this is defined, libxl_domain_create_restore()'s API has changed to
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 40c8649..d8d6f0c 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -402,6 +402,10 @@ static char *dm_spice_options(libxl__gc *gc,
opt = libxl__sprintf(gc, "%s,image-compression=%s", opt,
spice->image_compression);
+ if (spice->streaming_video)
+ opt = libxl__sprintf(gc, "%s,streaming-video=%s", opt,
+ spice->streaming_video);
+
return opt;
}
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 052ded9..02be466 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -242,6 +242,7 @@ libxl_spice_info = Struct("spice_info", [
("clipboard_sharing", libxl_defbool),
("usbredirection", integer),
("image_compression", string),
+ ("streaming_video", string),
])
libxl_sdl_info = Struct("sdl_info", [
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 00aa69d..b7eac29 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1950,6 +1950,8 @@ skip_vfb:
b_info->u.hvm.spice.usbredirection = l;
xlu_cfg_replace_string (config, "spice_image_compression",
&b_info->u.hvm.spice.image_compression, 0);
+ xlu_cfg_replace_string (config, "spice_streaming_video",
+ &b_info->u.hvm.spice.streaming_video, 0);
xlu_cfg_get_defbool(config, "nographic", &b_info->u.hvm.nographic, 0);
xlu_cfg_get_defbool(config, "gfx_passthru",
&b_info->u.hvm.gfx_passthru, 0);
--
1.9.2

View File

@ -0,0 +1,165 @@
From 161212ef02312c0681d2d809c8ff1e1f0ea6f6f9 Mon Sep 17 00:00:00 2001
From: Fabio Fantoni <fabio.fantoni@m2r.biz>
Date: Wed, 29 Apr 2015 11:20:28 +0200
Subject: [PATCH] libxl: Add qxl vga interface support for upstream qemu
Usage:
vga="qxl"
Qxl vga support many resolutions that not supported by stdvga,
mainly the 16:9 ones and other high up to 2560x1600.
With QXL you can get improved performance and smooth video also
with high resolutions and high quality.
Require their drivers installed in the domU and spice used
otherwise act as a simple stdvga.
Signed-off-by: Fabio Fantoni <fabio.fantoni@m2r.biz>
Signed-off-by: Zhou Peng <zpengxen@gmail.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: George Dunlap <george.dunlap@eu.citrix.com>
---
docs/man/xl.cfg.pod.5 | 10 +++++++++-
tools/libxl/libxl.h | 10 ++++++++++
tools/libxl/libxl_create.c | 13 +++++++++++++
tools/libxl/libxl_dm.c | 8 ++++++++
tools/libxl/libxl_types.idl | 1 +
tools/libxl/xl_cmdimpl.c | 2 ++
6 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/docs/man/xl.cfg.pod.5 b/docs/man/xl.cfg.pod.5
index f936dfc..8e4154f 100644
--- a/docs/man/xl.cfg.pod.5
+++ b/docs/man/xl.cfg.pod.5
@@ -1360,6 +1360,9 @@ qemu-xen-traditional device-model, the amount of video RAM is fixed at 4 MB,
which is sufficient for 1024x768 at 32 bpp. For the upstream qemu-xen
device-model, the default and minimum is 8 MB.
+For B<qxl> vga, the default is both default and minimal 128MB.
+If B<videoram> is set less than 128MB, an error will be triggered.
+
=item B<stdvga=BOOLEAN>
Select a standard VGA card with VBE (VESA BIOS Extensions) as the
@@ -1371,9 +1374,14 @@ This option is deprecated, use vga="stdvga" instead.
=item B<vga="STRING">
-Selects the emulated video card (none|stdvga|cirrus).
+Selects the emulated video card (none|stdvga|cirrus|qxl).
The default is cirrus.
+In general, QXL should work with the Spice remote display protocol
+for acceleration, and QXL driver is necessary in guest in this case.
+QXL can also work with the VNC protocol, but it will be like a standard
+VGA without acceleration.
+
=item B<vnc=BOOLEAN>
Allow access to the display via the VNC protocol. This enables the
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
index 44bd8e2..efc0617 100644
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -535,6 +535,16 @@ typedef struct libxl__ctx libxl_ctx;
#define LIBXL_HAVE_DOMINFO_OUTSTANDING_MEMKB 1
/*
+ * LIBXL_HAVE_QXL
+ *
+ * If defined, then the libxl_vga_interface_type will contain another value:
+ * "QXL". This value define if qxl vga is supported.
+ *
+ * If this is not defined, the qxl vga support is missed.
+ */
+#define LIBXL_HAVE_QXL 1
+
+/*
* LIBXL_HAVE_SPICE_VDAGENT
*
* If defined, then the libxl_spice_info structure will contain a boolean type:
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index e5a343f..188f7df 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -248,6 +248,10 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
b_info->video_memkb = 0;
break;
+ case LIBXL_VGA_INTERFACE_TYPE_QXL:
+ LOG(ERROR,"qemu upstream required for qxl vga");
+ return ERROR_INVAL;
+ break;
case LIBXL_VGA_INTERFACE_TYPE_STD:
if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
b_info->video_memkb = 8 * 1024;
@@ -272,6 +276,15 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc,
if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
b_info->video_memkb = 0;
break;
+ case LIBXL_VGA_INTERFACE_TYPE_QXL:
+ if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT) {
+ b_info->video_memkb = (128 * 1024);
+ } else if (b_info->video_memkb < (128 * 1024)) {
+ LOG(ERROR,
+ "128 Mib videoram is the minimum for qxl default");
+ return ERROR_INVAL;
+ }
+ break;
case LIBXL_VGA_INTERFACE_TYPE_STD:
if (b_info->video_memkb == LIBXL_MEMKB_DEFAULT)
b_info->video_memkb = 16 * 1024;
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 30c1578..58c9b99 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -251,6 +251,8 @@ static char ** libxl__build_device_model_args_old(libxl__gc *gc,
case LIBXL_VGA_INTERFACE_TYPE_NONE:
flexarray_append_pair(dm_args, "-vga", "none");
break;
+ case LIBXL_VGA_INTERFACE_TYPE_QXL:
+ break;
}
if (b_info->u.hvm.boot) {
@@ -625,6 +627,12 @@ static char ** libxl__build_device_model_args_new(libxl__gc *gc,
break;
case LIBXL_VGA_INTERFACE_TYPE_NONE:
break;
+ case LIBXL_VGA_INTERFACE_TYPE_QXL:
+ /* QXL have 2 ram regions, ram and vram */
+ flexarray_append_pair(dm_args, "-device",
+ GCSPRINTF("qxl-vga,vram_size_mb=%"PRIu64",ram_size_mb=%"PRIu64,
+ (b_info->video_memkb/2/1024), (b_info->video_memkb/2/1024) ) );
+ break;
}
if (b_info->u.hvm.boot) {
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 117b61d..023b21e 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -183,6 +183,7 @@ libxl_vga_interface_type = Enumeration("vga_interface_type", [
(1, "CIRRUS"),
(2, "STD"),
(3, "NONE"),
+ (4, "QXL"),
], init_val = "LIBXL_VGA_INTERFACE_TYPE_CIRRUS")
libxl_vendor_device = Enumeration("vendor_device", [
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 648ca08..526a1f6 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -2115,6 +2115,8 @@ skip_vfb:
b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_CIRRUS;
} else if (!strcmp(buf, "none")) {
b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_NONE;
+ } else if (!strcmp(buf, "qxl")) {
+ b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_QXL;
} else {
fprintf(stderr, "Unknown vga \"%s\" specified\n", buf);
exit(1);
--
1.9.2

View File

@ -14,30 +14,34 @@ let
# Sources needed to build the xen tools and tools/firmware.
toolsGits =
[ # tag qemu-xen-4.4.1
{ name = "qemu-xen";
url = git://xenbits.xen.org/qemu-upstream-4.4-testing.git;
rev = "65fc9b78ba3d868a26952db0d8e51cecf01d47b4";
sha256 = "e24fb58f773fd9134c5aae6d3ca7e9f754dc9822de92b1eb2cedc76faf911f18";
{ git = { name = "qemu-xen";
url = git://xenbits.xen.org/qemu-upstream-4.4-testing.git;
rev = "65fc9b78ba3d868a26952db0d8e51cecf01d47b4";
sha256 = "e24fb58f773fd9134c5aae6d3ca7e9f754dc9822de92b1eb2cedc76faf911f18";
};
}
# tag xen-4.4.1
{ name = "qemu-xen-traditional";
url = git://xenbits.xen.org/qemu-xen-4.4-testing.git;
rev = "6ae4e588081620b141071eb010ec40aca7e12876";
sha256 = "b1ed1feb92fbe658273a8d6d38d6ea60b79c1658413dd93979d6d128d8554ded";
{ git = { name = "qemu-xen-traditional";
url = git://xenbits.xen.org/qemu-xen-4.4-testing.git;
rev = "6ae4e588081620b141071eb010ec40aca7e12876";
sha256 = "b1ed1feb92fbe658273a8d6d38d6ea60b79c1658413dd93979d6d128d8554ded";
};
}
];
firmwareGits =
[ # tag 1.7.3.1
{ name = "seabios";
url = git://xenbits.xen.org/seabios.git;
rev = "7d9cbe613694924921ed1a6f8947d711c5832eee";
sha256 = "c071282bbcb1dd0d98536ef90cd1410f5d8da19648138e0e3863bc540d954a87";
{ git = { name = "seabios";
url = git://xenbits.xen.org/seabios.git;
rev = "7d9cbe613694924921ed1a6f8947d711c5832eee";
sha256 = "c071282bbcb1dd0d98536ef90cd1410f5d8da19648138e0e3863bc540d954a87";
};
}
{ name = "ovmf";
url = git://xenbits.xen.org/ovmf.git;
rev = "447d264115c476142f884af0be287622cd244423";
sha256 = "7086f882495a8be1497d881074e8f1005dc283a5e1686aec06c1913c76a6319b";
{ git = { name = "ovmf";
url = git://xenbits.xen.org/ovmf.git;
rev = "447d264115c476142f884af0be287622cd244423";
sha256 = "7086f882495a8be1497d881074e8f1005dc283a5e1686aec06c1913c76a6319b";
};
}
];

View File

@ -14,30 +14,47 @@ let
# Sources needed to build the xen tools and tools/firmware.
firmwareGits =
[ # tag 1.7.5
{ name = "seabios";
url = git://xenbits.xen.org/seabios.git;
rev = "e51488c5f8800a52ac5c8da7a31b85cca5cc95d2";
sha256 = "b96a0b9f31cab0f3993d007dcbe5f1bd69ad02b0a23eb2dc8a3ed1aafe7985cb";
{ git = { name = "seabios";
url = git://xenbits.xen.org/seabios.git;
rev = "e51488c5f8800a52ac5c8da7a31b85cca5cc95d2";
sha256 = "b96a0b9f31cab0f3993d007dcbe5f1bd69ad02b0a23eb2dc8a3ed1aafe7985cb";
};
patches = [ ./0000-qemu-seabios-enable-ATA_DMA.patch ];
}
{ name = "ovmf";
url = git://xenbits.xen.org/ovmf.git;
rev = "447d264115c476142f884af0be287622cd244423";
sha256 = "7086f882495a8be1497d881074e8f1005dc283a5e1686aec06c1913c76a6319b";
{ git = { name = "ovmf";
url = git://xenbits.xen.org/ovmf.git;
rev = "447d264115c476142f884af0be287622cd244423";
sha256 = "7086f882495a8be1497d881074e8f1005dc283a5e1686aec06c1913c76a6319b";
};
}
];
toolsGits =
[ # tag qemu-xen-4.5.0
{ name = "qemu-xen";
url = git://xenbits.xen.org/qemu-upstream-4.5-testing.git;
rev = "1ebb75b1fee779621b63e84fefa7b07354c43a99";
sha256 = "1j312q2mqvkvby9adkkxf7f1pn3nz85g5mr9nbg4qpf2y9cg122z";
{ git = { name = "qemu-xen";
url = git://xenbits.xen.org/qemu-upstream-4.5-testing.git;
rev = "1ebb75b1fee779621b63e84fefa7b07354c43a99";
sha256 = "1j312q2mqvkvby9adkkxf7f1pn3nz85g5mr9nbg4qpf2y9cg122z";
};
}
# tag xen-4.5.0
{ name = "qemu-xen-traditional";
url = git://xenbits.xen.org/qemu-xen-4.5-testing.git;
rev = "b0d42741f8e9a00854c3b3faca1da84bfc69bf22";
sha256 = "ce52b5108936c30ab85ec0c9554f88d5e7b34896f3acb666d56765b49c86f2af";
{ git = { name = "qemu-xen-traditional";
url = git://xenbits.xen.org/qemu-xen-4.5-testing.git;
rev = "b0d42741f8e9a00854c3b3faca1da84bfc69bf22";
sha256 = "ce52b5108936c30ab85ec0c9554f88d5e7b34896f3acb666d56765b49c86f2af";
};
}
{ git = { name = "xen-libhvm";
url = "https://github.com/ts468/xen-libhvm";
rev = "442dcc4f6f4e374a51e4613532468bd6b48bdf63";
sha256 = "9ba97c39a00a54c154785716aa06691d312c99be498ebbc00dc3769968178ba8";
};
description = ''
Helper library for reading ACPI and SMBIOS firmware values
from the host system for use with the HVM guest firmware
pass-through feature in Xen.
'';
#license = licenses.bsd2;
}
];
@ -52,6 +69,10 @@ let
quilt push -a
substituteInPlace tools/xenguest/Makefile --replace "_BSD_SOURCE" "_DEFAULT_SOURCE"
'';
xenPatches = [ ./0001-libxl-Spice-image-compression-setting-support-for-up.patch
./0002-libxl-Spice-streaming-video-setting-support-for-upst.patch
./0003-Add-qxl-vga-interface-support-for-upstream-qem.patch ];
};
in callPackage ./generic.nix (args // { xenConfig=xenConfig; })

View File

@ -0,0 +1,67 @@
{ callPackage, fetchurl, fetchgit, ... } @ args:
let
# Xen 4.5.1
xenConfig = {
name = "xen-4.5.1";
version = "4.5.1";
src = fetchurl {
url = "http://bits.xensource.com/oss-xen/release/4.5.1/xen-4.5.1.tar.gz";
sha256 = "0w8kbqy7zixacrpbk3yj51xx7b3f6l8ghsg3551w8ym6zka13336";
};
# Sources needed to build the xen tools and tools/firmware.
firmwareGits =
[ # tag 1.7.5
{ git = { name = "seabios";
url = git://xenbits.xen.org/seabios.git;
rev = "e51488c5f8800a52ac5c8da7a31b85cca5cc95d2";
sha256 = "b96a0b9f31cab0f3993d007dcbe5f1bd69ad02b0a23eb2dc8a3ed1aafe7985cb";
};
patches = [ ./0000-qemu-seabios-enable-ATA_DMA.patch ];
}
{ git = { name = "ovmf";
url = git://xenbits.xen.org/ovmf.git;
rev = "447d264115c476142f884af0be287622cd244423";
sha256 = "7086f882495a8be1497d881074e8f1005dc283a5e1686aec06c1913c76a6319b";
};
}
];
toolsGits =
[ # tag qemu-xen-4.5.1
{ git = { name = "qemu-xen";
url = git://xenbits.xen.org/qemu-upstream-4.5-testing.git;
rev = "d9552b0af21c27535cd3c8549bb31d26bbecd506";
sha256 = "15dbz8j26wl4vs5jijhccwgd8c6wkmpj4mz899fa7i1bbh8yysfy";
};
}
# tag xen-4.5.1
{ git = { name = "qemu-xen-traditional";
url = git://xenbits.xen.org/qemu-xen-4.5-testing.git;
rev = "afaa35b4bc975b2b89ad44c481d0d7623e3d1c49";
sha256 = "906b31cf32b52d29e521abaa76d641123bdf24f33fa53c6f109b6d7834e514be";
};
}
{ git = { name = "xen-libhvm";
url = "https://github.com/ts468/xen-libhvm";
rev = "442dcc4f6f4e374a51e4613532468bd6b48bdf63";
sha256 = "9ba97c39a00a54c154785716aa06691d312c99be498ebbc00dc3769968178ba8";
};
description = ''
Helper library for reading ACPI and SMBIOS firmware values
from the host system for use with the HVM guest firmware
pass-through feature in Xen.
'';
#license = licenses.bsd2;
}
];
xenPatches = [ ./0001-libxl-Spice-image-compression-setting-support-for-up.patch
./0002-libxl-Spice-streaming-video-setting-support-for-upst.patch
./0003-Add-qxl-vga-interface-support-for-upstream-qem.patch ];
};
in callPackage ./generic.nix (args // { xenConfig=xenConfig; })

View File

@ -3,7 +3,7 @@
, lvm2, utillinux, procps, texinfo, perl, pythonPackages
, glib, bridge-utils, xlibs, pixman, iproute, udev, bison
, flex, cmake, ocaml, ocamlPackages, figlet, libaio, yajl
, checkpolicy, transfig, glusterfs, fetchgit, xz, spice
, checkpolicy, transfig, glusterfs, acl, fetchgit, xz, spice
, spice_protocol, usbredir, alsaLib, quilt
, coreutils, gawk, gnused, gnugrep, diffutils, multipath_tools
, inetutils, iptables, openvswitch, nbd, drbd, xenConfig
@ -69,15 +69,14 @@ stdenv.mkDerivation {
glib bridge-utils pixman iproute udev bison xlibs.libX11
flex ocaml ocamlPackages.findlib figlet libaio
checkpolicy pythonPackages.markdown transfig
glusterfs cmake spice spice_protocol usbredir
glusterfs acl cmake spice spice_protocol usbredir
alsaLib quilt
];
pythonPath = [ pythonPackages.curses ];
patchPhase = if ((xenserverPatched == true) && (builtins.hasAttr "xenserverPatches" xenConfig))
then xenConfig.xenserverPatches
else "";
patches = stdenv.lib.optionals ((xenserverPatched == false) && (builtins.hasAttr "xenPatches" xenConfig)) xenConfig.xenPatches;
patchPhase = stdenv.lib.optional ((xenserverPatched == true) && (builtins.hasAttr "xenserverPatches" xenConfig)) xenConfig.xenserverPatches;
preConfigure = ''
# Fake wget: copy prefetched downloads instead
@ -87,13 +86,9 @@ stdenv.mkDerivation {
echo "cp \$4 \$3" >> wget/wget
chmod +x wget/wget
export PATH=$PATH:$PWD/wget
export EXTRA_QEMUU_CONFIGURE_ARGS="--enable-spice --enable-usb-redir --enable-linux-aio"
'';
# TODO: If multiple arguments are given with with-extra-qemuu,
# then the configuration aborts; the reason is unclear.
# If you know how to fix it, please let me know! :)
#configureFlags = "--with-extra-qemuu-configure-args='--enable-spice --enable-usb-redir --enable-linux-aio'";
# TODO: Flask needs more testing before enabling it by default.
#makeFlags = "XSM_ENABLE=y FLASK_ENABLE=y PREFIX=$(out) CONFIG_DIR=/etc XEN_EXTFILES_URL=\\$(XEN_ROOT)/xen_ext_files ";
makeFlags = "PREFIX=$(out) CONFIG_DIR=/etc XEN_EXTFILES_URL=\\$(XEN_ROOT)/xen_ext_files ";
@ -154,13 +149,17 @@ stdenv.mkDerivation {
# Xen's tools and firmares need various git repositories that it
# usually checks out at time using git. We can't have that.
${flip concatMapStrings xenConfig.toolsGits (x: let src = fetchgit x; in ''
${flip concatMapStrings xenConfig.toolsGits (x: let src = fetchgit x.git; in ''
cp -r ${src} tools/${src.name}-dir-remote
chmod +w tools/${src.name}-dir-remote
chmod -R +w tools/${src.name}-dir-remote
'' + stdenv.lib.optionalString (builtins.hasAttr "patches" x) ''
( cd tools/${src.name}-dir-remote; ${concatStringsSep "; " (map (p: "patch -p1 < ${p}") x.patches)} )
'')}
${flip concatMapStrings xenConfig.firmwareGits (x: let src = fetchgit x; in ''
${flip concatMapStrings xenConfig.firmwareGits (x: let src = fetchgit x.git; in ''
cp -r ${src} tools/firmware/${src.name}-dir-remote
chmod +w tools/firmware/${src.name}-dir-remote
chmod -R +w tools/firmware/${src.name}-dir-remote
'' + stdenv.lib.optionalString (builtins.hasAttr "patches" x) ''
( cd tools/firmware/${src.name}-dir-remote; ${concatStringsSep "; " (map (p: "patch -p1 < ${p}") x.patches)} )
'')}
# Xen's stubdoms and firmwares need various sources that are usually fetched
@ -178,6 +177,9 @@ stdenv.mkDerivation {
postBuild =
''
make -C docs man-pages
(cd tools/xen-libhvm-dir-remote; make)
(cd tools/xen-libhvm-dir-remote/biospt; cc -Wall -g -D_LINUX -Wstrict-prototypes biospt.c -o biospt -I../libhvm -L../libhvm -lxenhvm)
'';
installPhase =
@ -192,8 +194,11 @@ stdenv.mkDerivation {
shopt -s extglob
for i in $out/etc/xen/scripts/!(*.sh); do
sed -i '2s@^@export PATH=$out/bin:${scriptEnvPath}@' $i
sed -i "2s@^@export PATH=$out/bin:${scriptEnvPath}\n@" $i
done
(cd tools/xen-libhvm-dir-remote; make install)
cp tools/xen-libhvm-dir-remote/biospt/biospt $out/bin/.
'';
meta = {

View File

@ -0,0 +1,25 @@
{ stdenv, lib, fetchurl }:
stdenv.mkDerivation rec {
name = "xhyve-${version}";
version = "0.1.0";
src = fetchurl {
url = "https://github.com/mist64/xhyve/archive/v${version}.tar.gz";
sha256 = "0nbb9zy4iqmdz2dpyvcl1ynimrrpyd6f6cq8y2p78n1lmgqhrgkm";
};
buildFlags = "CFLAGS=-Wno-pedantic -Wno-shift-sign-overflow";
installPhase = ''
mkdir -p $out/bin
cp build/xhyve $out/bin
'';
meta = {
description = "Lightweight Virtualization on OS X Based on bhyve";
homepage = "https://github.com/mist64/xhyve";
maintainers = lib.maintainers.lnl7;
platforms = lib.platforms.darwin;
};
}

View File

@ -1,62 +1,6 @@
{ lib, stdenv, fetchurl, patchelf, perl, ncurses, expat, python, zlib
, xlibs, gtk2, glib, fontconfig, freetype, unixODBC, alsaLib
} :
{ callPackage, ... } @ args:
stdenv.mkDerivation rec {
name = "cudatoolkit-5.5.22";
dontPatchELF = true;
dontStrip = true;
src =
if stdenv.system == "x86_64-linux" then
fetchurl {
url = http://developer.download.nvidia.com/compute/cuda/5_5/rel/installers/cuda_5.5.22_linux_64.run;
sha256 = "b997e1dbe95704e0e806e0cedc5fd370a385351fef565c7bae0917baf3a29aa4";
}
else throw "cudatoolkit does not support platform ${stdenv.system}";
outputs = [ "out" "sdk" ];
buildInputs = [ perl ];
runtimeDependencies = [
ncurses expat python zlib
xlibs.libX11 xlibs.libXext xlibs.libXrender xlibs.libXt xlibs.libXtst xlibs.libXi xlibs.libXext
gtk2 glib fontconfig freetype unixODBC alsaLib
];
rpath = "${stdenv.lib.makeLibraryPath runtimeDependencies}:${stdenv.cc.cc}/lib64";
unpackPhase = ''
sh $src --keep --noexec
cd pkg/run_files
sh cuda-linux64-rel-5.5.22-16488124.run --keep --noexec
sh cuda-samples-linux-5.5.22-16488124.run --keep --noexec
cd pkg
'';
buildPhase = ''
find . -type f -executable -exec patchelf \
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
'{}' \; || true
find . -type f -exec patchelf \
--set-rpath $rpath:$out/jre/lib/amd64/jli:$out/lib:$out/lib64:$out/nvvm/lib:$out/nvvm/lib64:$(cat $NIX_CC/nix-support/orig-cc)/lib \
--force-rpath \
'{}' \; || true
'';
installPhase = ''
mkdir $out $sdk
perl ./install-linux.pl --prefix="$out"
rm $out/tools/CUDA_Occupancy_Calculator.xls
perl ./install-sdk-linux.pl --prefix="$sdk" --cudaprefix="$out"
mv $out/include $out/usr_include
'';
setupHook = ./setup-hook.sh;
meta = {
license = lib.licenses.unfree;
};
}
callPackage ./generic.nix (args // rec {
version = "5.5.22";
sha256 = "b997e1dbe95704e0e806e0cedc5fd370a385351fef565c7bae0917baf3a29aa4";
})

View File

@ -1,63 +1,6 @@
{ lib, stdenv, fetchurl, patchelf, perl, ncurses, expat, python, zlib
, xlibs, gtk2, glib, fontconfig, freetype, unixODBC, alsaLib
} :
stdenv.mkDerivation rec {
name = "cudatoolkit-6.0.37";
dontPatchELF = true;
dontStrip = true;
src =
if stdenv.system == "x86_64-linux" then
fetchurl {
url = http://developer.download.nvidia.com/compute/cuda/6_0/rel/installers/cuda_6.0.37_linux_64.run;
sha256 = "991e436c7a6c94ec67cf44204d136adfef87baa3ded270544fa211179779bc40";
}
else throw "cudatoolkit does not support platform ${stdenv.system}";
outputs = [ "out" "sdk" ];
buildInputs = [ perl ];
runtimeDependencies = [
ncurses expat python zlib
xlibs.libX11 xlibs.libXext xlibs.libXrender xlibs.libXt xlibs.libXtst xlibs.libXi xlibs.libXext
gtk2 glib fontconfig freetype unixODBC alsaLib
];
rpath = "${stdenv.lib.makeLibraryPath runtimeDependencies}:${stdenv.cc.cc}/lib64";
unpackPhase = ''
sh $src --keep --noexec
cd pkg/run_files
sh cuda-linux64-rel-6.0.37-18176142.run --keep --noexec
sh cuda-samples-linux-6.0.37-18176142.run --keep --noexec
cd pkg
'';
buildPhase = ''
find . -type f -executable -exec patchelf \
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
'{}' \; || true
find . -type f -exec patchelf \
--set-rpath $rpath:$out/jre/lib/amd64/jli:$out/lib:$out/lib64:$out/nvvm/lib:$out/nvvm/lib64:$(cat $NIX_CC/nix-support/orig-cc)/lib \
--force-rpath \
'{}' \; || true
'';
installPhase = ''
mkdir $out $sdk
perl ./install-linux.pl --prefix="$out"
rm $out/tools/CUDA_Occupancy_Calculator.xls
perl ./install-sdk-linux.pl --prefix="$sdk" --cudaprefix="$out"
mv $out/include $out/usr_include
'';
setupHook = ./setup-hook.sh;
meta = {
license = lib.licenses.unfree;
};
}
{ callPackage, ... } @ args:
callPackage ./generic.nix (args // rec {
version = "6.0.37";
sha256 = "991e436c7a6c94ec67cf44204d136adfef87baa3ded270544fa211179779bc40";
})

View File

@ -1,69 +1,6 @@
{ lib, stdenv, fetchurl, patchelf, perl, ncurses, expat, python, zlib
, xlibs, gtk2, glib, fontconfig, freetype, unixODBC, alsaLib, glibc
}:
let version = "6.5.19"; in
stdenv.mkDerivation rec {
name = "cudatoolkit-${version}";
dontPatchELF = true;
dontStrip = true;
src =
if stdenv.system == "x86_64-linux" then
fetchurl {
url = "http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda_${version}_linux_64.run";
sha256 = "1x9zdmk8z784d3d35vr2ak1l4h5v4jfjhpxfi9fl9dvjkcavqyaj";
}
else throw "cudatoolkit does not support platform ${stdenv.system}";
outputs = [ "out" "sdk" ];
buildInputs = [ perl ];
runtimeDependencies = [
glibc
ncurses expat python zlib
xlibs.libX11 xlibs.libXext xlibs.libXrender xlibs.libXt xlibs.libXtst xlibs.libXi xlibs.libXext
gtk2 glib fontconfig freetype unixODBC alsaLib
];
rpath = "${stdenv.lib.makeLibraryPath runtimeDependencies}:${stdenv.cc.cc}/lib64";
unpackPhase = ''
sh $src --keep --noexec
cd pkg/run_files
sh cuda-linux64-rel-${version}-*.run --keep --noexec
sh cuda-samples-linux-${version}-*.run --keep --noexec
cd pkg
'';
buildPhase = ''
find . -type f -executable -exec patchelf \
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
'{}' \; || true
find . -type f -exec patchelf \
--set-rpath $rpath:$out/jre/lib/amd64/jli:$out/lib:$out/lib64:$out/nvvm/lib:$out/nvvm/lib64:$(cat $NIX_CC/nix-support/orig-cc)/lib \
--force-rpath \
'{}' \; || true
'';
installPhase = ''
mkdir $out $sdk
perl ./install-linux.pl --prefix="$out"
rm $out/tools/CUDA_Occupancy_Calculator.xls
perl ./install-sdk-linux.pl --prefix="$sdk" --cudaprefix="$out"
mv $out/include $out/usr_include
# let's remove the 32-bit libraries, they confuse the lib64->lib mover
rm -rf $out/lib
'';
setupHook = ./setup-hook.sh;
meta = {
license = lib.licenses.unfree;
};
}
{ callPackage, ... } @ args:
callPackage ./generic.nix (args // rec {
version = "6.5.19";
sha256 = "1x9zdmk8z784d3d35vr2ak1l4h5v4jfjhpxfi9fl9dvjkcavqyaj";
})

View File

@ -0,0 +1,7 @@
{ callPackage, ... } @ args:
callPackage ./generic.nix (args // rec {
version = "7.0.28";
sha256 = "1km5hpiimx11jcazg0h3mjzk220klwahs2vfqhjavpds5ff2wafi";
url = "http://developer.download.nvidia.com/compute/cuda/7_0/Prod/local_installers/cuda_7.0.28_linux.run";
})

View File

@ -0,0 +1,73 @@
{ lib, stdenv, fetchurl, patchelf, perl, ncurses, expat, python, zlib
, xlibs, gtk2, glib, fontconfig, freetype, unixODBC, alsaLib, glibc
# generic inputs
, version, sha256, url ? null, ...
} :
let
# eg, 5.5.22 => 5_5
mkShort = let str = stdenv.lib.strings;
take = stdenv.lib.lists.take;
in v: str.concatStringsSep "_" (take 2 (str.splitString "." v));
shortVer = mkShort version;
in stdenv.mkDerivation rec {
name = "cudatoolkit-${version}";
dontPatchELF = true;
dontStrip = true;
src =
if stdenv.system == "x86_64-linux" then
fetchurl {
url = if url != null then url else "http://developer.download.nvidia.com/compute/cuda/${shortVer}/rel/installers/cuda_${version}_linux_64.run";
sha256 = sha256;
}
else throw "cudatoolkit does not support platform ${stdenv.system}";
outputs = [ "out" "sdk" ];
buildInputs = [ perl ];
runtimeDependencies = [
ncurses expat python zlib glibc
xlibs.libX11 xlibs.libXext xlibs.libXrender xlibs.libXt xlibs.libXtst xlibs.libXi xlibs.libXext
gtk2 glib fontconfig freetype unixODBC alsaLib
];
rpath = "${stdenv.lib.makeLibraryPath runtimeDependencies}:${stdenv.cc.cc}/lib64";
unpackPhase = ''
sh $src --keep --noexec
cd pkg/run_files
sh cuda-linux64-rel-${version}-*.run --keep --noexec
sh cuda-samples-linux-${version}-*.run --keep --noexec
cd pkg
'';
buildPhase = ''
find . -type f -executable -exec patchelf \
--set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
'{}' \; || true
find . -type f -exec patchelf \
--set-rpath $rpath:$out/jre/lib/amd64/jli:$out/lib:$out/lib64:$out/nvvm/lib:$out/nvvm/lib64:$(cat $NIX_CC/nix-support/orig-cc)/lib \
--force-rpath \
'{}' \; || true
'';
installPhase = ''
mkdir $out $sdk
perl ./install-linux.pl --prefix="$out"
rm $out/tools/CUDA_Occupancy_Calculator.xls
perl ./install-sdk-linux.pl --prefix="$sdk" --cudaprefix="$out"
mv $out/include $out/usr_include
# let's remove the 32-bit libraries, they confuse the lib64->lib mover
rm -rf $out/lib
'';
setupHook = ./setup-hook.sh;
meta = {
license = lib.licenses.unfree;
};
}

View File

@ -0,0 +1,56 @@
{ stdenv, fetchurl, fetchpatch, ghc, perl, gmp, ncurses, libiconv }:
let
buildMK = ''
libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-libraries="${gmp}/lib"
libraries/integer-gmp_CONFIGURE_OPTS += --configure-option=--with-gmp-includes="${gmp}/include"
libraries/terminfo_CONFIGURE_OPTS += --configure-option=--with-curses-includes="${ncurses}/include"
libraries/terminfo_CONFIGURE_OPTS += --configure-option=--with-curses-libraries="${ncurses}/lib"
${stdenv.lib.optionalString stdenv.isDarwin ''
libraries/base_CONFIGURE_OPTS += --configure-option=--with-iconv-includes="${libiconv}/include"
libraries/base_CONFIGURE_OPTS += --configure-option=--with-iconv-libraries="${libiconv}/lib"
''}
'';
in
stdenv.mkDerivation rec {
version = "7.10.1.20150630";
name = "ghc-${version}";
src = fetchurl {
url = "https://downloads.haskell.org/~ghc/7.10.2-rc2/${name}-src.tar.xz";
sha256 = "1wxf7jkkgpvvrg3q311c4rca4vsxrqrmnrqg4j4klgj445yj82gb";
};
buildInputs = [ ghc perl ];
enableParallelBuilding = true;
preConfigure = ''
echo >mk/build.mk "${buildMK}"
sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
'' + stdenv.lib.optionalString (!stdenv.isDarwin) ''
export NIX_LDFLAGS="$NIX_LDFLAGS -rpath $out/lib/ghc-${version}"
'' + stdenv.lib.optionalString stdenv.isDarwin ''
export NIX_LDFLAGS+=" -no_dtrace_dof"
'';
configureFlags = [
"--with-gcc=${stdenv.cc}/bin/cc"
"--with-gmp-includes=${gmp}/include" "--with-gmp-libraries=${gmp}/lib"
];
# required, because otherwise all symbols from HSffi.o are stripped, and
# that in turn causes GHCi to abort
stripDebugFlags = [ "-S" ] ++ stdenv.lib.optional (!stdenv.isDarwin) "--keep-file-symbols";
meta = {
homepage = "http://haskell.org/ghc";
description = "The Glasgow Haskell Compiler";
maintainers = with stdenv.lib.maintainers; [ marcweber andres simons ];
inherit (ghc.meta) license platforms;
};
}

View File

@ -17,14 +17,14 @@ let
in
stdenv.mkDerivation rec {
version = "7.11.20150607";
version = "7.11.20150705";
name = "ghc-${version}";
rev = "89223ce1340654455a9f3aa9cbf25f30884227fd";
rev = "3fabb71a559b493efdfb5bb91907f6a0f696a114";
src = fetchgit {
url = "git://git.haskell.org/ghc.git";
inherit rev;
sha256 = "1qsv2n5js21kqphq92xlyc91f11fnr9sh1glqzsirc8xr60dg5cs";
sha256 = "1c0fsk2yk08x02n6s722d36igc9prrql4wcnr8m8c62wp4yrf25z";
};
postUnpack = ''

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec {
name = "sbcl-${version}";
version = "1.2.12";
version = "1.2.13";
src = fetchurl {
url = "mirror://sourceforge/project/sbcl/sbcl/${version}/${name}-source.tar.bz2";
sha256 = "1bf98wi3gz8n09prwmxa38b2mhq69rqq11s9h9swi3avy5wchnxn";
sha256 = "018jxd7f39a5aimjzfjdj739m3jq82k0qi59032v48gqrfa3mng6";
};
buildInputs = [ which ]

View File

@ -135,6 +135,7 @@ self: super: {
});
# The Haddock phase fails for one reason or another.
acme-one = dontHaddock super.acme-one;
attoparsec-conduit = dontHaddock super.attoparsec-conduit;
base-noprelude = dontHaddock super.base-noprelude;
blaze-builder-conduit = dontHaddock super.blaze-builder-conduit;
@ -330,6 +331,7 @@ self: super: {
bitx-bitcoin = dontCheck super.bitx-bitcoin; # http://hydra.cryp.to/build/926187/log/raw
concurrent-dns-cache = dontCheck super.concurrent-dns-cache;
dbus = dontCheck super.dbus; # http://hydra.cryp.to/build/498404/log/raw
digitalocean-kzs = dontCheck super.digitalocean-kzs; # https://github.com/KazumaSATO/digitalocean-kzs/issues/1
hadoop-rpc = dontCheck super.hadoop-rpc; # http://hydra.cryp.to/build/527461/nixlog/2/raw
hasql = dontCheck super.hasql; # http://hydra.cryp.to/build/502489/nixlog/4/raw
hjsonschema = overrideCabal super.hjsonschema (drv: { testTarget = "local"; });
@ -344,14 +346,15 @@ self: super: {
raven-haskell = dontCheck super.raven-haskell; # http://hydra.cryp.to/build/502053/log/raw
riak = dontCheck super.riak; # http://hydra.cryp.to/build/498763/log/raw
scotty-binding-play = dontCheck super.scotty-binding-play;
serversession-backend-redis = dontCheck super.serversession-backend-redis;
slack-api = dontCheck super.slack-api; # https://github.com/mpickering/slack-api/issues/5
socket = dontCheck super.socket;
stackage = dontCheck super.stackage; # http://hydra.cryp.to/build/501867/nixlog/1/raw
textocat-api = dontCheck super.textocat-api; # http://hydra.cryp.to/build/887011/log/raw
warp = dontCheck super.warp; # http://hydra.cryp.to/build/501073/nixlog/5/raw
wreq = dontCheck super.wreq; # http://hydra.cryp.to/build/501895/nixlog/1/raw
wreq-sb = dontCheck super.wreq-sb; # http://hydra.cryp.to/build/783948/log/raw
wuss = dontCheck super.wuss; # http://hydra.cryp.to/build/875964/nixlog/2/raw
serversession-backend-redis = dontCheck super.serversession-backend-redis;
# https://github.com/NICTA/digit/issues/3
digit = dontCheck super.digit;
@ -626,6 +629,7 @@ self: super: {
# https://github.com/srijs/hwsl2/issues/1
hwsl2 = markBroken super.hwsl2;
hwsl2-reducers = dontDistribute super.hwsl2-reducers;
# https://code.google.com/p/linux-music-player/issues/detail?id=1
mp = markBroken super.mp;
@ -794,9 +798,6 @@ self: super: {
# Patch to consider NIX_GHC just like xmonad does
dyre = appendPatch super.dyre ./dyre-nix.patch;
# https://github.com/gwern/mueval/issues/9
mueval = appendPatch (appendPatch super.mueval ./mueval-fix.patch) ./mueval-nix.patch;
# Test suite won't compile against tasty-hunit 0.9.x.
zlib = dontCheck super.zlib;
@ -820,6 +821,7 @@ self: super: {
# https://github.com/goldfirere/singletons/issues/118
clash-lib = dontDistribute super.clash-lib;
clash-verilog = dontDistribute super.clash-verilog;
Frames = dontDistribute super.Frames;
hgeometry = dontDistribute super.hgeometry;
hipe = dontDistribute super.hipe;
singleton-nats = dontDistribute super.singleton-nats;
@ -898,4 +900,11 @@ self: super: {
# https://github.com/commercialhaskell/stack/issues/409
stack = overrideCabal super.stack (drv: { preCheck = "export HOME=$TMPDIR"; doCheck = false; });
# Missing dependency on some hid-usb library.
hid = markBroken super.hid;
msi-kb-backlit = dontDistribute super.msi-kb-backlit;
# Hydra no longer allows building texlive packages.
lhs2tex = dontDistribute super.lhs2tex;
}

File diff suppressed because it is too large Load Diff

View File

@ -1,90 +0,0 @@
diff --git a/Mueval/ArgsParse.hs b/Mueval/ArgsParse.hs
index 05c8fd9..0c32e27 100644
--- a/Mueval/ArgsParse.hs
+++ b/Mueval/ArgsParse.hs
@@ -1,10 +1,9 @@
+{-# LANGUAGE CPP #-}
module Mueval.ArgsParse (Options(..), interpreterOpts, getOptions) where
import Control.Monad (liftM)
import System.Console.GetOpt
-import qualified Codec.Binary.UTF8.String as Codec (decodeString)
-
import Mueval.Context (defaultModules, defaultPackages)
-- | See the results of --help for information on what each option means.
@@ -98,4 +97,11 @@ header = "Usage: mueval [OPTION...] --expression EXPRESSION..."
-- | Just give us the end result options; this parsing for
-- us. Bonus points for handling UTF.
getOptions :: [String] -> Either (Bool, String) Options
-getOptions = interpreterOpts . map Codec.decodeString
\ No newline at end of file
+getOptions = interpreterOpts . map decodeString
+
+decodeString :: String -> String
+#if __GLASGOW_HASKELL__ >= 702
+decodeString = id
+#else
+decodeString = Codec.decodeString
+#endif
diff --git a/Mueval/Context.hs b/Mueval/Context.hs
index 78925cf..548514c 100644
--- a/Mueval/Context.hs
+++ b/Mueval/Context.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
module Mueval.Context (
cleanModules,
defaultModules,
@@ -32,7 +33,9 @@ defaultModules = ["Prelude",
"Control.Monad.Error",
"Control.Monad.Fix",
"Control.Monad.Identity",
+#if !MIN_VERSION_base(4,7,0)
"Control.Monad.Instances",
+#endif
"Control.Monad.RWS",
"Control.Monad.Reader",
"Control.Monad.State",
diff --git a/Mueval/Interpreter.hs b/Mueval/Interpreter.hs
index 29b771f..6c39482 100644
--- a/Mueval/Interpreter.hs
+++ b/Mueval/Interpreter.hs
@@ -1,4 +1,5 @@
{-# LANGUAGE PatternGuards #-}
+{-# LANGUAGE FlexibleContexts #-}
-- TODO: suggest the convenience functions be put into Hint proper?
module Mueval.Interpreter where
@@ -12,8 +13,6 @@ import System.Exit (exitFailure)
import System.FilePath.Posix (takeFileName)
import qualified Control.Exception.Extensible as E (evaluate,catch,SomeException(..))
-import qualified System.IO.UTF8 as UTF (putStrLn)
-
import Language.Haskell.Interpreter (eval, set, reset, setImportsQ, loadModules, liftIO,
installedModulesInScope, languageExtensions,
typeOf, setTopLevelModules, runInterpreter, glasgowExtensions,
@@ -100,7 +99,7 @@ mvload lfl = do canonfile <- makeRelativeToCurrentDirectory lfl
-- flooding. Lambdabot has a similar limit.
sayIO :: String -> IO ()
sayIO str = do (out,b) <- render 1024 str
- UTF.putStrLn out
+ putStrLn out
when b exitFailure
-- | Oh no, something has gone wrong. If it's a compilation error pretty print
diff --git a/mueval.cabal b/mueval.cabal
index 3f9406d..b86d796 100644
--- a/mueval.cabal
+++ b/mueval.cabal
@@ -32,7 +32,7 @@ library
exposed-modules: Mueval.Parallel, Mueval.Context, Mueval.Interpreter,
Mueval.ArgsParse, Mueval.Resources
build-depends: base>=4 && < 5, containers, directory, mtl>2, filepath, unix, process,
- hint>=0.3.1, show>=0.3, utf8-string, Cabal, extensible-exceptions, simple-reflect
+ hint>=0.3.1, show>=0.3, Cabal, extensible-exceptions, simple-reflect
ghc-options: -Wall -static
executable mueval-core

View File

@ -1,23 +0,0 @@
diff --git a/Mueval/Interpreter.hs b/Mueval/Interpreter.hs
index 29b771f..6360ee3 100644
--- a/Mueval/Interpreter.hs
+++ b/Mueval/Interpreter.hs
@@ -8,6 +8,7 @@ import Control.Monad.Writer (Any(..),runWriterT,tell)
import Data.Char (isDigit)
import Data.List (stripPrefix)
import System.Directory (copyFile, makeRelativeToCurrentDirectory, removeFile, setCurrentDirectory)
+import System.Environment (lookupEnv)
import System.Exit (exitFailure)
import System.FilePath.Posix (takeFileName)
import qualified Control.Exception.Extensible as E (evaluate,catch,SomeException(..))
@@ -47,6 +48,10 @@ interpreter Options { extensions = exts, namedExtensions = nexts,
-- Explicitly adding ImplicitPrelude because of
-- http://darcsden.com/jcpetruzza/hint/issue/1
unless (null lexts) $ set [languageExtensions := (UnknownExtension "ImplicitPrelude" : lexts)]
+ pkgs' <- liftIO $ lookupEnv "NIX_GHC_LIBDIR"
+ case pkgs' of
+ Just pkgs -> unsafeSetGhcOption ("-package-db " ++ pkgs ++ "/package.conf.d")
+ Nothing -> return ()
when trust $ do
unsafeSetGhcOption "-fpackage-trust"
forM_ (trustPkgs >>= words) $ \pkg ->

View File

@ -3,10 +3,10 @@ let
s = # Generated upstream information
rec {
baseName="angelscript";
version = "2.30.0";
version = "2.30.1";
name="${baseName}-${version}";
url="http://www.angelcode.com/angelscript/sdk/files/angelscript_${version}.zip";
sha256 = "00w7h2g6g1lkq9ahsvzyk78nbdzhn1adsrns9mrqb2fbxv2wbz5d";
sha256 = "10ym7185h26gzmw5v6wz8zlycw8gzygv0aw87dmgjcyy7qfk74m4";
};
buildInputs = [
unzip

View File

@ -16,7 +16,7 @@ let
sourceInfo = rec {
baseName="allegro";
folderSuffix = "-unstable";
version = "5.1.10";
version = "5.1.11";
name="${baseName}-${version}";
project="alleg";
url="mirror://sourceforge/project/${project}/${baseName}${folderSuffix}/${version}/${name}.tar.gz";
@ -26,7 +26,7 @@ in
rec {
src = a.fetchurl {
url = sourceInfo.url;
sha256 = "13dfs007pyh908bm1hg7hz71y8fr9fj51byh5w149h8dsq2dds78";
sha256 = "0zz07gdyc6xflpvkknwgzsyyyh9qiwd69j42rm9cw1ciwcsic1vs";
};
inherit (sourceInfo) name version;

View File

@ -1,7 +1,7 @@
{stdenv, fetchurl, cmake}:
let
version = "3.2.4";
version = "3.2.5";
in
stdenv.mkDerivation {
name = "eigen-${version}";
@ -9,7 +9,7 @@ stdenv.mkDerivation {
src = fetchurl {
url = "http://bitbucket.org/eigen/eigen/get/${version}.tar.gz";
name = "eigen-${version}.tar.gz";
sha256 = "19c6as664a3kxvkhas2cq19r6ag19jw9lcz04sc0kza6i1hlh9xv";
sha256 = "1vjixip19lwfia2bjpjwm09j7l20ry75493i6mjsk9djszj61agi";
};
nativeBuildInputs = [ cmake ];

View File

@ -11,11 +11,11 @@ let
"${gnupg}/bin/gpg2";
in
stdenv.mkDerivation rec {
name = "gpgme-1.5.4";
name = "gpgme-1.5.5";
src = fetchurl {
url = "mirror://gnupg/gpgme/${name}.tar.bz2";
sha256 = "0v7azxazsfakvhrxzj5ysvcxma0892c89d27c17fkj8mi3nc0f5v";
sha256 = "01y28fkq52wwf4p470wscaxd2vgzl615irmafx3mj3380x8ksg8b";
};
propagatedBuildInputs = [ libgpgerror glib libassuan pth ];

View File

@ -1,13 +1,12 @@
{ stdenv, openexr, automake, autoconf, libtool, which }:
{ stdenv, fetchurl, automake, autoconf, libtool, which }:
stdenv.mkDerivation {
name = "ilmbase-${openexr.source.version}";
src = openexr.source.src;
stdenv.mkDerivation rec {
name = "ilmbase-2.2.0";
prePatch = ''
cd IlmBase
'';
src = fetchurl {
url = "http://download.savannah.nongnu.org/releases/openexr/${name}.tar.gz";
sha256 = "1izddjwbh1grs8080vmaix72z469qy29wrvkphgmqmcm0sv1by7c";
};
preConfigure = ''
./bootstrap

View File

@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
buildInputs = [ sqlite kyotocabinet ];
buildPhase = ''
make all db_bench{,_sqlite3,_tree_db} leveldbutil
make all db_bench{,_sqlite3,_tree_db} leveldbutil libmemenv.a
'';
installPhase = "
@ -22,6 +22,8 @@ stdenv.mkDerivation rec {
cp -r include $out
cp lib* $out/lib
cp db_bench{,_sqlite3,_tree_db} leveldbutil $out/bin
mkdir -p $out/include/leveldb/helpers
cp helpers/memenv/memenv.h $out/include/leveldb/helpers
";
meta = with stdenv.lib; {

View File

@ -1,14 +1,15 @@
{ stdenv, fetchgit, pkgconfig, cmake, git, doxygen, help2man, tecla, libusb1, udev }:
{ stdenv, fetchFromGitHub, pkgconfig, cmake, git, doxygen, help2man, tecla
, libusb1, udev }:
stdenv.mkDerivation rec {
version = "1.1.0";
version = "1.4.0";
name = "libbladeRF-v${version}";
src = fetchgit {
url = "https://github.com/Nuand/bladeRF/";
rev = "refs/tags/libbladeRF_v${version}";
sha256 = "19qd26yflig51scknyjf3r3nmnc2bni75294jpsv0idzqfj87lbr";
name = "libbladeRF_v${version}-checkout";
src = fetchFromGitHub {
owner = "Nuand";
repo = "bladeRF";
rev = "libbladeRF_v${version}";
sha256 = "1y00hqsmqaix4dql8mb75zx87zvn8b483yxv53x9qyjspksbs60c";
};
buildInputs = [ pkgconfig cmake git doxygen help2man tecla libusb1 udev ];
@ -19,7 +20,6 @@ stdenv.mkDerivation rec {
# Let us avoid nettools as a dependency.
patchPhase = ''
sed -i 's/$(hostname)/hostname/' host/utilities/bladeRF-cli/src/cmd/doc/generate.bash
sed -i 's/ --no-info/ --no-info --no-discard-stderr/' host/utilities/bladeRF-cli/CMakeLists.txt
'';
cmakeFlags = [
@ -29,11 +29,11 @@ stdenv.mkDerivation rec {
"-DBUILD_DOCUMENTATION=ON"
];
meta = {
homepage = "https://www.nuand.com/";
meta = with stdenv.lib; {
homepage = https://www.nuand.com/;
description = "Supporting library of the BladeRF SDR opensource hardware";
license = stdenv.lib.licenses.lgpl21;
maintainers = [ stdenv.lib.maintainers.funfunctor ];
platforms = with stdenv.lib.platforms; linux;
license = licenses.lgpl21;
maintainers = with maintainers; [ funfunctor ];
platforms = platforms.linux;
};
}

View File

@ -1,11 +1,11 @@
{ stdenv, fetchurl, automake, autoconf, libtool, pkgconfig, libzen, zlib }:
stdenv.mkDerivation rec {
version = "0.7.74";
version = "0.7.75";
name = "libmediainfo-${version}";
src = fetchurl {
url = "http://mediaarea.net/download/source/libmediainfo/${version}/libmediainfo_${version}.tar.bz2";
sha256 = "1dn7zwqkl08vafc979i1mx63r2jlr95gfazg4d2cc9v3pav28zpk";
url = "http://mediaarea.net/download/source/libmediainfo/${version}/libmediainfo_${version}.tar.xz";
sha256 = "1im39kd595ia6g41qvwgvszn1s10nwa3q5r2lj2g5fm4kgi0dwhr";
};
buildInputs = [ automake autoconf libtool pkgconfig libzen zlib ];

View File

@ -3,11 +3,11 @@ let
s = # Generated upstream information
rec {
baseName="libmwaw";
version="0.3.4";
version="0.3.5";
name="${baseName}-${version}";
hash="1sn95flxrh85qjsg1kk700c1ggxaaccr9j1nnw7x4daw8lky25ac";
url="mirror://sourceforge/project/libmwaw/libmwaw/libmwaw-0.3.4/libmwaw-0.3.4.tar.xz";
sha256="1sn95flxrh85qjsg1kk700c1ggxaaccr9j1nnw7x4daw8lky25ac";
hash="1vx9h419fcfcs0yj071hsg9d2qvkacgca6052m8hv3h743cdmzil";
url="mirror://sourceforge/project/libmwaw/libmwaw/libmwaw-0.3.5/libmwaw-0.3.5.tar.xz";
sha256="1vx9h419fcfcs0yj071hsg9d2qvkacgca6052m8hv3h743cdmzil";
};
buildInputs = [
boost pkgconfig cppunit zlib libwpg libwpd librevenge

View File

@ -3,11 +3,11 @@ let
s = # Generated upstream information
rec {
baseName="libodfgen";
version="0.1.3";
version="0.1.4";
name="${baseName}-${version}";
hash="1flfh1i4r116aqdlqpgpmyzpcylwba48l7mddj25a2cwgsc9v86k";
url="mirror://sourceforge/project/libwpd/libodfgen/libodfgen-0.1.3/libodfgen-0.1.3.tar.xz";
sha256="1flfh1i4r116aqdlqpgpmyzpcylwba48l7mddj25a2cwgsc9v86k";
hash="1qgilnsd57ayv9mqh4sg9mkknifr98dv70a35gizxh5cw7c5x6r4";
url="mirror://sourceforge/project/libwpd/libodfgen/libodfgen-0.1.4/libodfgen-0.1.4.tar.xz";
sha256="1qgilnsd57ayv9mqh4sg9mkknifr98dv70a35gizxh5cw7c5x6r4";
};
buildInputs = [
boost pkgconfig cppunit zlib libwpg libwpd librevenge

View File

@ -1,10 +1,10 @@
{stdenv, fetchurl, zlib, openssl}:
stdenv.mkDerivation rec {
version = "0.4.12";
version = "0.4.13";
name = "libre-${version}";
src=fetchurl {
url = "http://www.creytiv.com/pub/re-${version}.tar.gz";
sha256 = "1wjdcf5wr50d86rysj5haz53v7d58j7sszpc6k5b4mn1x6604i0d";
sha256 = "0496nfi7vi6ivnyici5bqs147pwkdqn48w2rajhr5k8jd07pq5qp";
};
buildInputs = [zlib openssl];
makeFlags = [

View File

@ -1,8 +1,11 @@
{ stdenv, fetchurl, libspotify, alsaLib, readline, pkgconfig, apiKey, unzip, gnused }:
let version = "12.1.51"; in
let
version = "12.1.51";
isLinux = (stdenv.system == "x86_64-linux" || stdenv.system == "i686-linux");
in
if (stdenv.system != "x86_64-linux" && stdenv.system != "x86_64-darwin")
if (stdenv.system != "x86_64-linux" && stdenv.system != "x86_64-darwin" && stdenv.system != "i686-linux")
then throw "Check https://developer.spotify.com/technologies/libspotify/ for a tarball for your system and add it here"
else stdenv.mkDerivation {
name = "libspotify-${version}";
@ -18,6 +21,11 @@ else stdenv.mkDerivation {
url = "https://developer.spotify.com/download/libspotify/libspotify-${version}-Darwin-universal.zip";
sha256 = "1gcgrc8arim3hnszcc886lmcdb4iigc08abkaa02l6gng43ky1c0";
}
else if stdenv.system == "i686-linux" then
fetchurl {
url = "https://developer.spotify.com/download/libspotify/libspotify-${version}-Linux-i686-release.tar.gz";
sha256 = "1bjmn64gbr4p9irq426yap4ipq9rb84zsyhjjr7frmmw22xb86ll";
}
else
null;
@ -26,9 +34,9 @@ else stdenv.mkDerivation {
# no patch or build phase for darwin
phases =
[ "unpackPhase" ] ++
(stdenv.lib.optionals (stdenv.system == "x86_64-linux") [ "patchPhase" "buildPhase" ]) ++
(stdenv.lib.optionals (isLinux) [ "patchPhase" "buildPhase" ]) ++
[ "installPhase" ];
installPhase = if (stdenv.system == "x86_64-linux")
installPhase = if (isLinux)
then "installPhase"
else ''
mkdir -p "$out"/include/libspotify
@ -46,11 +54,11 @@ else stdenv.mkDerivation {
buildInputs = stdenv.lib.optional (stdenv.system == "x86_64-darwin") unzip;
# linux-specific
installFlags = stdenv.lib.optionalString (stdenv.system == "x86_64-linux")
installFlags = stdenv.lib.optionalString (isLinux)
"prefix=$(out)";
patchPhase = stdenv.lib.optionalString (stdenv.system == "x86_64-linux")
patchPhase = stdenv.lib.optionalString (isLinux)
"${gnused}/bin/sed -i 's/ldconfig//' Makefile";
postInstall = stdenv.lib.optionalString (stdenv.system == "x86_64-linux")
postInstall = stdenv.lib.optionalString (isLinux)
"mv -v share $out";
passthru = {

View File

@ -0,0 +1,37 @@
{ stdenv, fetchzip }:
stdenv.mkDerivation rec {
name = "lmdb-${version}";
version = "0.9.15";
src = fetchzip {
url = "https://github.com/LMDB/lmdb/archive/LMDB_${version}.tar.gz";
sha256 = "0p79fpyh1yx2jg1f0kag5zsdn4spkgs1j3dxibvqdy32wkbpxd0g";
};
postUnpack = "sourceRoot=\${sourceRoot}/libraries/liblmdb";
makeFlags = "prefix=$(out)";
doCheck = true;
checkPhase = "make test";
preInstall = ''
mkdir -p $out/{man/man1,bin,lib,include}
'';
meta = with stdenv.lib; {
description = "Lightning memory-mapped database";
longDescription = ''
LMDB is an ultra-fast, ultra-compact key-value embedded data store
developed by Symas for the OpenLDAP Project. It uses memory-mapped files,
so it has the read performance of a pure in-memory database while still
offering the persistence of standard disk-based databases, and is only
limited to the size of the virtual address space.
'';
homepage = http://symas.com/mdb/;
maintainers = with maintainers; [ jb55 ];
license = licenses.openldap;
platforms = platforms.all;
};
}

View File

@ -1,7 +1,7 @@
{ lib, stdenv, fetchFromGitHub, cmake, pkgconfig, libxml2, pcre }:
# The exact revision specified by Blender's install_deps.sh script.
let rev = "18da7f4109a8eafaa290a33f5550501cc4c8bae8"; in
let rev = "3335ac164e68b2512a40914b14c74db260e6ff7d"; in
stdenv.mkDerivation {
name = "opencollada-1.3-${rev}";
@ -10,7 +10,7 @@ stdenv.mkDerivation {
owner = "KhronosGroup";
repo = "OpenCOLLADA";
inherit rev;
sha256 = "0ach32ws95mh0ijd8sr22kxka3riq72bb9ng46vs3615dxn7h18d";
sha256 = "0s2m8crbg1kf09hpscrplv65a45dlg157b9c20chrv7wy0qizbw5";
};
buildInputs = [ cmake pkgconfig ];

View File

@ -1,33 +1,28 @@
{ stdenv, callPackage, autoconf, automake, libtool, pkgconfig, zlib, ilmbase }:
let
source = callPackage ./source.nix { };
in
stdenv.mkDerivation rec {
name = "openexr-${source.version}";
src = source.src;
{ lib, stdenv, fetchurl, autoconf, automake, libtool, pkgconfig, zlib, ilmbase }:
prePatch = ''
cd OpenEXR
'';
stdenv.mkDerivation rec {
name = "openexr-${lib.getVersion ilmbase}";
src = fetchurl {
url = "http://download.savannah.nongnu.org/releases/openexr/${name}.tar.gz";
sha256 = "0ca2j526n4wlamrxb85y2jrgcv0gf21b3a19rr0gh4rjqkv1581n";
};
preConfigure = ''
./bootstrap
'';
configureFlags = [ "--enable-imfexamples" ];
buildInputs = [ autoconf automake libtool pkgconfig ];
propagatedBuildInputs = [ ilmbase zlib ];
enableParallelBuilding = true;
patches = [ ./bootstrap.patch ];
meta = with stdenv.lib; {
homepage = http://www.openexr.com/;
license = licenses.bsd3;
platforms = platforms.all;
maintainers = with maintainers; [ wkennington ];
};
passthru.source = source;
}

View File

@ -1,11 +0,0 @@
{ fetchFromGitHub }:
rec {
version = "2.2.0";
src = fetchFromGitHub {
owner = "openexr";
repo = "openexr";
rev = "v${version}";
sha256 = "030vj2jk3n65x1wl0rmxzpl1bd5mzmld2lzn7sg92svpnghry6a8";
};
}

View File

@ -46,10 +46,11 @@ cp "@out@/bin/qmake" "$qtOut/bin"
cat >"$qtOut/bin/qt.conf" <<EOF
[Paths]
Prefix = $qtOut
Plugins = $qtOut/lib/qt5/plugins
Imports = $qtOut/lib/qt5/imports
Qml2Imports = $qtOut/lib/qt5/qml
Plugins = lib/qt5/plugins
Imports = lib/qt5/imports
Qml2Imports = lib/qt5/qml
EOF
export QMAKE="$qtOut/bin/qmake"
envHooks+=(addQtModule)
preConfigurePhases+=" setQMakePath"

View File

@ -1,29 +1,30 @@
{stdenv, fetchurl, ocaml, findlib}:
assert stdenv.lib.versionAtLeast (stdenv.lib.getVersion ocaml) "3.11";
{ stdenv, fetchzip, ocaml, findlib }:
stdenv.mkDerivation {
name = "ocaml-csv-1.3.3";
name = "ocaml-csv-1.4";
src = fetchurl {
url = "https://forge.ocamlcore.org/frs/download.php/1376/csv-1.3.3.tar.gz";
sha256 = "19qsvw3n7k4xpy0sw7n5s29kzj91myihjljhr5js6xcxwj4cydh2";
src = fetchzip {
url = https://github.com/Chris00/ocaml-csv/releases/download/1.4/csv-1.4.tar.gz;
sha256 = "0si0v79rxzyzmgyhd6lidpzxdlcpprlhg0pgrsf688g83xsclkwa";
};
buildInputs = [ ocaml findlib ];
createFindlibDestdir = true;
configurePhase = "ocaml setup.ml -configure --prefix $out";
configurePhase = "ocaml setup.ml -configure --prefix $out --enable-tests";
buildPhase = "ocaml setup.ml -build";
doCheck = true;
checkPhase = "ocaml setup.ml -test";
installPhase = "ocaml setup.ml -install";
meta = with stdenv.lib; {
description = "A pure OCaml library to read and write CSV files";
homepage = "https://forge.ocamlcore.org/projects/csv/";
homepage = https://github.com/Chris00/ocaml-csv;
license = licenses.lgpl21;
maintainers = [ maintainers.vbgl ];
platforms = ocaml.meta.platforms;

View File

@ -0,0 +1,29 @@
{ stdenv, fetchzip, ocaml, findlib, oasis, ounit }:
assert stdenv.lib.versionAtLeast (stdenv.lib.getVersion ocaml) "4";
stdenv.mkDerivation {
name = "ocaml-qcheck-0.4.0.1";
src = fetchzip {
url = https://github.com/c-cube/qcheck/archive/0.4.0.1.tar.gz;
sha256 = "0j2jdrfz8rrslgjihnfgg8yy12860z2vvf7hqzjbmfmf03hz4pgv";
};
buildInputs = [ ocaml findlib oasis ounit ];
configureFlags = "--enable-tests --enable-ounit";
doCheck = true;
checkPhase = "ocaml setup.ml -test";
createFindlibDestdir = true;
meta = {
description = "QuickCheck inspired property-based testing for OCaml";
homepage = https://github.com/c-cube/qcheck/;
license = stdenv.lib.licenses.bsd2;
maintainers = with stdenv.lib.maintainers; [ vbgl ];
platforms = ocaml.meta.platforms;
};
}

View File

@ -1,17 +1,19 @@
{ stdenv, fetchzip, ocaml, findlib }:
{ stdenv, fetchzip, ocaml, findlib, ounit }:
stdenv.mkDerivation rec {
name = "ocaml-re-1.4.0";
name = "ocaml-re-1.4.1";
src = fetchzip {
url = "https://github.com/ocaml/ocaml-re/archive/${name}.tar.gz";
sha256 = "1xcfmhjgd7prqx2g1addlrk84xpfafmqnpjkqrvg7mw0hn1p7v2m";
sha256 = "1wmfgazydd20hc796zisqpmsw0sb5lv9g3x77ckmf50v3z8hyhvk";
};
buildInputs = [ ocaml findlib ];
buildInputs = [ ocaml findlib ounit ];
configurePhase = "ocaml setup.ml -configure --prefix $out";
configurePhase = "ocaml setup.ml -configure --prefix $out --enable-tests";
buildPhase = "ocaml setup.ml -build";
doCheck = true;
checkPhase = "ocaml setup.ml -test";
installPhase = "ocaml setup.ml -install";
createFindlibDestdir = true;

View File

@ -1,19 +1,25 @@
{ stdenv, fetchzip, ocaml, findlib }:
{ stdenv, fetchzip, ocaml, findlib, ounit, qcheck
# Optionally enable tests; test script use OCaml-4.01+ features
, doCheck ? stdenv.lib.versionAtLeast (stdenv.lib.getVersion ocaml) "4.01"
}:
let version = "1.3.0"; in
let version = "1.4.0"; in
stdenv.mkDerivation {
name = "ocaml-stringext-${version}";
src = fetchzip {
url = "https://github.com/rgrinberg/stringext/archive/v${version}.tar.gz";
sha256 = "0sd1chyxclmip0nxqhasp1ri91bwxr8nszkkr5kpja45f6bav6k9";
sha256 = "1jp0x9rkss8a48z9wbnc4v5zvmnysin30345psl3xnxb2aqzwlii";
};
buildInputs = [ ocaml findlib ];
buildInputs = [ ocaml findlib ounit qcheck ];
configurePhase = "ocaml setup.ml -configure --prefix $out";
configurePhase = "ocaml setup.ml -configure --prefix $out"
+ stdenv.lib.optionalString doCheck " --enable-tests";
buildPhase = "ocaml setup.ml -build";
inherit doCheck;
checkPhase = "ocaml setup.ml -test";
installPhase = "ocaml setup.ml -install";
createFindlibDestdir = true;

View File

@ -26,7 +26,7 @@ stdenv.mkDerivation {
homepage = http://www.cduce.org/download.html;
description = "A lexer generator for Unicode and OCaml";
license = stdenv.lib.licenses.mit;
platforms = stdenv.lib.platforms.linux;
platforms = ocaml.meta.platforms;
maintainers = [ stdenv.lib.maintainers.roconnor ];
};
}

View File

@ -1,25 +1,27 @@
{ stdenv, fetchzip, ocaml, findlib, re, sexplib, stringext }:
{ stdenv, fetchzip, ocaml, findlib, re, sexplib, stringext, ounit }:
assert stdenv.lib.versionAtLeast (stdenv.lib.getVersion ocaml) "4";
let version = "1.9.0"; in
let version = "1.9.1"; in
stdenv.mkDerivation {
name = "ocaml-uri-${version}";
src = fetchzip {
url = "https://github.com/mirage/ocaml-uri/archive/v${version}.tar.gz";
sha256 = "13vbv6q7npl2bvvqfw03mav90jcrrvjbdpdp4y8mcjz0iax5ww9b";
sha256 = "0v3jxqgyi4kj92r3x83rszfpnvvzy9lyb913basch4q64yka3w85";
};
buildInputs = [ ocaml findlib ];
buildInputs = [ ocaml findlib ounit ];
propagatedBuildInputs = [ re sexplib stringext ];
configurePhase = "ocaml setup.ml -configure --prefix $out";
configurePhase = "ocaml setup.ml -configure --prefix $out --enable-tests";
buildPhase = ''
ocaml setup.ml -build
ocaml setup.ml -doc
'';
doCheck = true;
checkPhase = "ocaml setup.ml -test";
installPhase = "ocaml setup.ml -install";
createFindlibDestdir = true;

View File

@ -3,8 +3,8 @@
with stdenv.lib;
let
baseVersion = "3.2";
revision = "1";
baseVersion = "3.4";
revision = "2";
version = "${baseVersion}.${revision}";
in
@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
src = fetchurl {
url = "http://download.qt-project.org/official_releases/qtcreator/${baseVersion}/${version}/qt-creator-opensource-src-${version}.tar.gz";
sha256 = "0kp7czn9mzncdpq8bx15s3sy13g4xlcdz7y7zy0s9350g4ijs8fx";
sha256 = "1asbfphws0aqs92gjgh0iqzr1911kg51r9al44jxpfk88yazjzgm";
};
# This property can be used in a nix development environment to refer to the Qt package

View File

@ -2,7 +2,7 @@
let
name = "scons";
version = "2.3.4";
version = "2.3.5";
in
stdenv.mkDerivation {
@ -10,7 +10,7 @@ stdenv.mkDerivation {
src = fetchurl {
url = "mirror://sourceforge/scons/${name}-${version}.tar.gz";
sha256 = "0hdlci43wjz8maryj83mz04ir6rwcdrrzpd7cpzvdlzycqhdfmsb";
sha256 = "0hlwkrr5fkjpjgmwipp9a2bnc9riqks2pjc3rvjsq0a8j7hr72ca";
};
buildInputs = [python makeWrapper];

View File

@ -1,23 +1,24 @@
{ stdenv, fetchurl, runCommand, gcc, perl, zlib }:
{ stdenv, fetchurl, runCommand, gcc, zlib }:
let
# TODO: find out if there's harm in just using 'rec' instead.
name = "ccache-${version}";
version = "3.2.2";
sha256 = "1jm0qb3h5sypllaiyj81zp6m009vm50hzjnx994ril94kxlrj3ag";
doCheck = true;
ccache =
stdenv.mkDerivation {
inherit name doCheck;
inherit name;
src = fetchurl {
inherit sha256;
url = "mirror://samba/ccache/${name}.tar.xz";
};
# The test dependency on perl should be gone in the next release:
buildInputs = [ zlib ]
++ stdenv.lib.optionals doCheck [ perl ];
patches = [ ./test-drop-perl-requirement.patch ];
buildInputs = [ zlib ];
doCheck = true;
passthru = {
# A derivation that provides gcc and g++ commands, but that

Some files were not shown because too many files have changed in this diff Show More