Merge staging-next into staging

This commit is contained in:
Frederik Rietdijk 2019-11-24 10:13:31 +01:00
commit 1d18c5a0fe
295 changed files with 3869 additions and 1803 deletions

5
.github/CODEOWNERS vendored
View File

@ -167,3 +167,8 @@
/nixos/modules/services/monitoring/prometheus/exporters.nix @WilliButz /nixos/modules/services/monitoring/prometheus/exporters.nix @WilliButz
/nixos/modules/services/monitoring/prometheus/exporters.xml @WilliButz /nixos/modules/services/monitoring/prometheus/exporters.xml @WilliButz
/nixos/tests/prometheus-exporters.nix @WilliButz /nixos/tests/prometheus-exporters.nix @WilliButz
# PHP
/pkgs/development/interpreters/php @etu
/pkgs/top-level/php-packages.nix @etu
/pkgs/build-support/build-pecl.nix @etu

View File

@ -1780,6 +1780,12 @@
githubId = 875324; githubId = 875324;
name = "David Johnson"; name = "David Johnson";
}; };
dmrauh = {
email = "dmrauh@posteo.de";
github = "dmrauh";
githubId = 37698547;
name = "Dominik Michael Rauh";
};
dmvianna = { dmvianna = {
email = "dmlvianna@gmail.com"; email = "dmlvianna@gmail.com";
github = "dmvianna"; github = "dmvianna";
@ -2515,6 +2521,7 @@
gazally = { gazally = {
email = "gazally@runbox.com"; email = "gazally@runbox.com";
github = "gazally"; github = "gazally";
githubId = 16470252;
name = "Gemini Lasswell"; name = "Gemini Lasswell";
}; };
gebner = { gebner = {
@ -3700,6 +3707,18 @@
githubId = 449813; githubId = 449813;
name = "Roman Kuznetsov"; name = "Roman Kuznetsov";
}; };
kylesferrazza = {
name = "Kyle Sferrazza";
email = "kyle.sferrazza@gmail.com";
github = "kylesferrazza";
githubId = 6677292;
keys = [{
longkeyid = "rsa4096/81A1540948162372";
fingerprint = "5A9A 1C9B 2369 8049 3B48 CF5B 81A1 5409 4816 2372";
}];
};
kylewlacy = { kylewlacy = {
email = "kylelacy+nix@pm.me"; email = "kylelacy+nix@pm.me";
github = "kylewlacy"; github = "kylewlacy";
@ -6087,7 +6106,7 @@
name = "Shahrukh Khan"; name = "Shahrukh Khan";
}; };
shanemikel = { shanemikel = {
email = "shanemikel1@gmail.com"; email = "shanepearlman@pm.me";
github = "shanemikel"; github = "shanemikel";
githubId = 6720672; githubId = 6720672;
name = "Shane Pearlman"; name = "Shane Pearlman";

View File

@ -13,9 +13,7 @@
<para> <para>
It sets <xref linkend="opt-services.xserver.enable"/>, It sets <xref linkend="opt-services.xserver.enable"/>,
<xref linkend="opt-services.xserver.displayManager.sddm.enable"/>, <xref linkend="opt-services.xserver.displayManager.sddm.enable"/>,
<xref linkend="opt-services.xserver.desktopManager.plasma5.enable"/> ( <xref linkend="opt-services.xserver.desktopManager.plasma5.enable"/>, and
<link linkend="opt-services.xserver.desktopManager.plasma5.enableQt4Support">
without Qt4 Support</link>), and
<xref linkend="opt-services.xserver.libinput.enable"/> to true. It also <xref linkend="opt-services.xserver.libinput.enable"/> to true. It also
includes glxinfo and firefox in the system packages list. includes glxinfo and firefox in the system packages list.
</para> </para>

View File

@ -45,12 +45,12 @@
<listitem> <listitem>
<para> <para>
<literal>git tag -a -s -m &quot;Release 17.09-beta&quot; 17.09-beta <literal>git tag -a -s -m &quot;Release 17.09-beta&quot; 17.09-beta
&amp;&amp; git push --tags</literal> &amp;&amp; git push origin 17.09-beta</literal>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
From the master branch run <literal>git checkout -B From the master branch run <literal>git checkout -b
release-17.09</literal>. release-17.09</literal>.
</para> </para>
</listitem> </listitem>
@ -157,7 +157,7 @@
<listitem> <listitem>
<para> <para>
Release Nix (currently only Eelco Dolstra can do that). Release Nix (currently only Eelco Dolstra can do that).
<link xlink:href="https://github.com/NixOS/nixpkgs/commit/53710c752a85f00658882531bc90a23a3d1287e4"> <link xlink:href="https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/installer/tools/nix-fallback-paths.nix">
Make sure fallback is updated. </link> Make sure fallback is updated. </link>
</para> </para>
</listitem> </listitem>
@ -169,8 +169,8 @@
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Change <literal>stableBranch</literal> to true and wait for channel to Change <literal>stableBranch</literal> to <literal>true</literal> in Hydra and wait for
update. the channel to update.
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
@ -193,9 +193,11 @@
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Update http://nixos.org/nixos/download.html and Update the
http://nixos.org/nixos/manual in <link xlink:href="https://github.com/NixOS/nixos-homepage/commit/2a37975d5a617ecdfca94696242b6f32ffcba9f1"><code>NIXOS_SERIES</code></link>
https://github.com/NixOS/nixos-org-configurations in the
<link xlink:href="https://github.com/NixOS/nixos-homepage">nixos-homepage</link>
repository.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
@ -212,7 +214,8 @@
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Send an email to nix-dev to announce the release with above information. Create a new topic on <link xlink:href="https://discourse.nixos.org/">the
Discourse instance</link> to announce the release with the above information.
Best to check how previous email was formulated to see what needs to be Best to check how previous email was formulated to see what needs to be
included. included.
</para> </para>

View File

@ -392,11 +392,11 @@
<filename>hardware-configuration.nix</filename> is included from <filename>hardware-configuration.nix</filename> is included from
<filename>configuration.nix</filename> and will be overwritten by future <filename>configuration.nix</filename> and will be overwritten by future
invocations of <command>nixos-generate-config</command>; thus, you invocations of <command>nixos-generate-config</command>; thus, you
generally should not modify it.) Additionally, you may want to look at generally should not modify it.) Additionally, you may want to look at
<link xlink:href="https://github.com/NixOS/nixos-hardware">Hardware <link xlink:href="https://github.com/NixOS/nixos-hardware">Hardware
configuration for known-hardware</link> at this point or after configuration for known-hardware</link> at this point or after
installation. installation.
</para> </para>
<note> <note>
<para> <para>
@ -418,11 +418,11 @@
Do the installation: Do the installation:
<screen> <screen>
<prompt># </prompt>nixos-install</screen> <prompt># </prompt>nixos-install</screen>
Cross fingers. If this fails due to a temporary problem (such as a network This will install your system based on the configuration you provided.
issue while downloading binaries from the NixOS binary cache), you can If anything fails due to a configuration problem or any other issue
just re-run <command>nixos-install</command>. Otherwise, fix your (such as a network outage while downloading binaries from the NixOS
<filename>configuration.nix</filename> and then re-run binary cache), you can re-run <command>nixos-install</command> after
<command>nixos-install</command>. fixing your <filename>configuration.nix</filename>.
</para> </para>
<para> <para>
As the last step, <command>nixos-install</command> will ask you to set the As the last step, <command>nixos-install</command> will ask you to set the

View File

@ -163,6 +163,19 @@
time during the releases development (if viable). time during the releases development (if viable).
</para> </para>
</listitem> </listitem>
<listitem>
<para>
The <link linkend="opt-services.phpfpm.pools">phpfpm</link> module now sets
<literal>PrivateTmp=true</literal> in its systemd units for better process isolation.
If you rely on <literal>/tmp</literal> being shared with other services, explicitly override this by
setting <literal>serviceConfig.PrivateTmp</literal> to <literal>false</literal> for each phpfpm unit.
</para>
</listitem>
<listitem>
<para>
KDEs old multimedia framework Phonon no longer supports Qt 4. For that reason, Plasma desktop also does not have <option>enableQt4Support</option> option any more.
</para>
</listitem>
</itemizedlist> </itemizedlist>
</section> </section>

View File

@ -290,10 +290,15 @@ class Machine:
def wait_for_monitor_prompt(self) -> str: def wait_for_monitor_prompt(self) -> str:
assert self.monitor is not None assert self.monitor is not None
answer = ""
while True: while True:
answer = self.monitor.recv(1024).decode() undecoded_answer = self.monitor.recv(1024)
if not undecoded_answer:
break
answer += undecoded_answer.decode()
if answer.endswith("(qemu) "): if answer.endswith("(qemu) "):
return answer break
return answer
def send_monitor_command(self, command: str) -> str: def send_monitor_command(self, command: str) -> str:
message = ("{}\n".format(command)).encode() message = ("{}\n".format(command)).encode()
@ -606,12 +611,15 @@ class Machine:
+ os.environ.get("QEMU_OPTS", "") + os.environ.get("QEMU_OPTS", "")
) )
environment = { environment = dict(os.environ)
"QEMU_OPTS": qemu_options, environment.update(
"SHARED_DIR": self.shared_dir, {
"USE_TMPDIR": "1", "TMPDIR": self.state_dir,
} "SHARED_DIR": self.shared_dir,
environment.update(dict(os.environ)) "USE_TMPDIR": "1",
"QEMU_OPTS": qemu_options,
}
)
self.process = subprocess.Popen( self.process = subprocess.Popen(
self.script, self.script,
@ -749,7 +757,7 @@ def run_tests() -> None:
if tests is not None: if tests is not None:
with log.nested("running the VM test script"): with log.nested("running the VM test script"):
try: try:
exec(tests) exec(tests, globals())
except Exception as e: except Exception as e:
eprint("error: {}".format(str(e))) eprint("error: {}".format(str(e)))
sys.exit(1) sys.exit(1)

View File

@ -211,11 +211,11 @@ upload_image() {
log "Registering snapshot $snapshot_id as AMI" log "Registering snapshot $snapshot_id as AMI"
local block_device_mappings=( local block_device_mappings=(
"DeviceName=/dev/sda1,Ebs={SnapshotId=$snapshot_id,VolumeSize=$image_logical_gigabytes,DeleteOnTermination=true,VolumeType=gp2}" "DeviceName=/dev/xvda,Ebs={SnapshotId=$snapshot_id,VolumeSize=$image_logical_gigabytes,DeleteOnTermination=true,VolumeType=gp2}"
) )
local extra_flags=( local extra_flags=(
--root-device-name /dev/sda1 --root-device-name /dev/xvda
--sriov-net-support simple --sriov-net-support simple
--ena-support --ena-support
--virtualization-type hvm --virtualization-type hvm

View File

@ -10,7 +10,7 @@ let
isQtStyle = cfg.platformTheme == "gtk2" && cfg.style != "adwaita"; isQtStyle = cfg.platformTheme == "gtk2" && cfg.style != "adwaita";
packages = if isQGnome then [ pkgs.qgnomeplatform pkgs.adwaita-qt ] packages = if isQGnome then [ pkgs.qgnomeplatform pkgs.adwaita-qt ]
else if isQtStyle then [ pkgs.qtstyleplugins ] else if isQtStyle then [ pkgs.libsForQt5.qtstyleplugins ]
else throw "`qt5.platformTheme` ${cfg.platformTheme} and `qt5.style` ${cfg.style} are not compatible."; else throw "`qt5.platformTheme` ${cfg.platformTheme} and `qt5.style` ${cfg.style} are not compatible.";
in in

View File

@ -11,7 +11,6 @@ with lib;
services.xserver = { services.xserver = {
desktopManager.plasma5 = { desktopManager.plasma5 = {
enable = true; enable = true;
enableQt4Support = false;
}; };
# Automatically login as nixos. # Automatically login as nixos.

View File

@ -9,7 +9,6 @@
displayManager.sddm.enable = true; displayManager.sddm.enable = true;
desktopManager.plasma5 = { desktopManager.plasma5 = {
enable = true; enable = true;
enableQt4Support = false;
}; };
libinput.enable = true; # for touchpad support on many laptops libinput.enable = true; # for touchpad support on many laptops
}; };

View File

@ -23,7 +23,8 @@ with lib;
###### implementation ###### implementation
config = mkIf config.programs.adb.enable { config = mkIf config.programs.adb.enable {
services.udev.packages = [ pkgs.android-udev-rules ]; services.udev.packages = [ pkgs.android-udev-rules ];
environment.systemPackages = [ pkgs.androidenv.androidPkgs_9_0.platform-tools ]; # Give platform-tools lower priority so mke2fs+friends are taken from other packages first
environment.systemPackages = [ (lowPrio pkgs.androidenv.androidPkgs_9_0.platform-tools) ];
users.groups.adbusers = {}; users.groups.adbusers = {};
}; };
} }

View File

@ -44,7 +44,8 @@ in
serviceConfig = { serviceConfig = {
DynamicUser = true; DynamicUser = true;
Restart = "always"; Restart = "always";
ExecStart = "${pkg}/bin/beanstalkd -l ${cfg.listen.address} -p ${toString cfg.listen.port}"; ExecStart = "${pkg}/bin/beanstalkd -l ${cfg.listen.address} -p ${toString cfg.listen.port} -b $STATE_DIRECTORY";
StateDirectory = "beanstalkd";
}; };
}; };

View File

@ -390,6 +390,7 @@ in {
in { in {
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
before = [ "phpfpm-nextcloud.service" ]; before = [ "phpfpm-nextcloud.service" ];
path = [ occ ];
script = '' script = ''
chmod og+x ${cfg.home} chmod og+x ${cfg.home}
ln -sf ${pkgs.nextcloud}/apps ${cfg.home}/ ln -sf ${pkgs.nextcloud}/apps ${cfg.home}/

View File

@ -262,6 +262,7 @@ in {
in { in {
Slice = "phpfpm.slice"; Slice = "phpfpm.slice";
PrivateDevices = true; PrivateDevices = true;
PrivateTmp = true;
ProtectSystem = "full"; ProtectSystem = "full";
ProtectHome = true; ProtectHome = true;
# XXX: We need AF_NETLINK to make the sendmail SUID binary from postfix work # XXX: We need AF_NETLINK to make the sendmail SUID binary from postfix work

View File

@ -309,7 +309,7 @@ in
gnome-shell gnome-shell
gnome-shell-extensions gnome-shell-extensions
gnome-themes-extra gnome-themes-extra
gnome-user-docs pkgs.gnome-user-docs
pkgs.orca pkgs.orca
pkgs.glib # for gsettings pkgs.glib # for gsettings
pkgs.gnome-menus pkgs.gnome-menus

View File

@ -27,20 +27,13 @@ in
example = "vlc"; example = "vlc";
description = "Phonon audio backend to install."; description = "Phonon audio backend to install.";
}; };
enableQt4Support = mkOption {
type = types.bool;
default = true;
description = ''
Enable support for Qt 4-based applications. Particularly, install a
default backend for Phonon.
'';
};
}; };
}; };
imports = [
(mkRemovedOptionModule [ "services" "xserver" "desktopManager" "plasma5" "enableQt4Support" ] "Phonon no longer supports Qt 4.")
];
config = mkMerge [ config = mkMerge [
(mkIf cfg.enable { (mkIf cfg.enable {
@ -173,9 +166,7 @@ in
# Phonon audio backend # Phonon audio backend
++ lib.optional (cfg.phononBackend == "gstreamer") libsForQt5.phonon-backend-gstreamer ++ lib.optional (cfg.phononBackend == "gstreamer") libsForQt5.phonon-backend-gstreamer
++ lib.optional (cfg.phononBackend == "gstreamer" && cfg.enableQt4Support) pkgs.phonon-backend-gstreamer
++ lib.optional (cfg.phononBackend == "vlc") libsForQt5.phonon-backend-vlc ++ lib.optional (cfg.phononBackend == "vlc") libsForQt5.phonon-backend-vlc
++ lib.optional (cfg.phononBackend == "vlc" && cfg.enableQt4Support) pkgs.phonon-backend-vlc
# Optional hardware support features # Optional hardware support features
++ lib.optionals config.hardware.bluetooth.enable [ bluedevil bluez-qt ] ++ lib.optionals config.hardware.bluetooth.enable [ bluedevil bluez-qt ]

View File

@ -31,6 +31,44 @@ let
load-module module-position-event-sounds load-module module-position-event-sounds
''; '';
dmDefault = config.services.xserver.desktopManager.default;
wmDefault = config.services.xserver.windowManager.default;
hasDefaultUserSession = dmDefault != "none" || wmDefault != "none";
defaultSessionName = dmDefault + optionalString (wmDefault != "none") ("+" + wmDefault);
setSessionScript = pkgs.python3.pkgs.buildPythonApplication {
name = "set-session";
format = "other";
src = ./set-session.py;
dontUnpack = true;
strictDeps = false;
nativeBuildInputs = with pkgs; [
wrapGAppsHook
gobject-introspection
];
buildInputs = with pkgs; [
accountsservice
glib
];
propagatedBuildInputs = with pkgs.python3.pkgs; [
pygobject3
ordered-set
];
installPhase = ''
mkdir -p $out/bin
cp $src $out/bin/set-session
chmod +x $out/bin/set-session
'';
};
in in
{ {
@ -156,6 +194,8 @@ in
cat - > /run/gdm/.config/gnome-initial-setup-done <<- EOF cat - > /run/gdm/.config/gnome-initial-setup-done <<- EOF
yes yes
EOF EOF
'' + optionalString hasDefaultUserSession ''
${setSessionScript}/bin/set-session ${defaultSessionName}
''; '';
}; };

View File

@ -0,0 +1,86 @@
#!/usr/bin/env python
import gi, argparse, os, logging, sys
gi.require_version("AccountsService", "1.0")
from gi.repository import AccountsService, GLib
from ordered_set import OrderedSet
def get_session_file(session):
system_data_dirs = GLib.get_system_data_dirs()
session_dirs = OrderedSet(
os.path.join(data_dir, session)
for data_dir in system_data_dirs
for session in {"wayland-sessions", "xsessions"}
)
session_files = OrderedSet(
os.path.join(dir, session + ".desktop")
for dir in session_dirs
if os.path.exists(os.path.join(dir, session + ".desktop"))
)
# Deal with duplicate wayland-sessions and xsessions.
# Needed for the situation in gnome-session, where there's
# a xsession named the same as a wayland session.
if any(map(is_session_wayland, session_files)):
session_files = OrderedSet(
session for session in session_files if is_session_wayland(session)
)
else:
session_files = OrderedSet(
session for session in session_files if is_session_xsession(session)
)
if len(session_files) == 0:
logging.warning("No session files are found.")
sys.exit(0)
else:
return session_files[0]
def is_session_xsession(session_file):
return "/xsessions/" in session_file
def is_session_wayland(session_file):
return "/wayland-sessions/" in session_file
def main():
parser = argparse.ArgumentParser(
description="Set session type for all normal users."
)
parser.add_argument("session", help="Name of session to set.")
args = parser.parse_args()
session = getattr(args, "session")
session_file = get_session_file(session)
user_manager = AccountsService.UserManager.get_default()
users = user_manager.list_users()
for user in users:
if user.is_system_account():
continue
else:
if is_session_wayland(session_file):
logging.debug(
f"Setting session name: {session}, as we found the existing wayland-session: {session_file}"
)
user.set_session(session)
elif is_session_xsession(session_file):
logging.debug(
f"Setting session name: {session}, as we found the existing xsession: {session_file}"
)
user.set_x_session(session)
else:
logging.error(f"Couldn't figure out session type for {session_file}")
sys.exit(1)
if __name__ == "__main__":
main()

View File

@ -201,7 +201,7 @@ let
(assertValueOneOf "IPv6AcceptRA" boolValues) (assertValueOneOf "IPv6AcceptRA" boolValues)
(assertValueOneOf "IPv4ProxyARP" boolValues) (assertValueOneOf "IPv4ProxyARP" boolValues)
(assertValueOneOf "IPv6ProxyNDP" boolValues) (assertValueOneOf "IPv6ProxyNDP" boolValues)
(assertValueOneOf "IPv6PrefixDelegation" boolValues) (assertValueOneOf "IPv6PrefixDelegation" (boolValues ++ [ "dhcpv6" "static" ]))
(assertValueOneOf "ActiveSlave" boolValues) (assertValueOneOf "ActiveSlave" boolValues)
(assertValueOneOf "PrimarySlave" boolValues) (assertValueOneOf "PrimarySlave" boolValues)
(assertValueOneOf "ConfigureWithoutCarrier" boolValues) (assertValueOneOf "ConfigureWithoutCarrier" boolValues)

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({pkgs, lib, ...}: import ./make-test-python.nix ({pkgs, lib, ...}:
let let
cfg = { cfg = {
@ -109,105 +109,105 @@ let
# For other ways to deploy a ceph cluster, look at the documentation at # For other ways to deploy a ceph cluster, look at the documentation at
# https://docs.ceph.com/docs/master/ # https://docs.ceph.com/docs/master/
testscript = { ... }: '' testscript = { ... }: ''
startAll; start_all()
$monA->waitForUnit("network.target"); monA.wait_for_unit("network.target")
$osd0->waitForUnit("network.target"); osd0.wait_for_unit("network.target")
$osd1->waitForUnit("network.target"); osd1.wait_for_unit("network.target")
# Bootstrap ceph-mon daemon # Bootstrap ceph-mon daemon
$monA->mustSucceed( monA.succeed(
"sudo -u ceph ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'", "sudo -u ceph ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'",
"sudo -u ceph ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'", "sudo -u ceph ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'",
"sudo -u ceph ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring", "sudo -u ceph ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring",
"monmaptool --create --add ${cfg.monA.name} ${cfg.monA.ip} --fsid ${cfg.clusterId} /tmp/monmap", "monmaptool --create --add ${cfg.monA.name} ${cfg.monA.ip} --fsid ${cfg.clusterId} /tmp/monmap",
"sudo -u ceph ceph-mon --mkfs -i ${cfg.monA.name} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring", "sudo -u ceph ceph-mon --mkfs -i ${cfg.monA.name} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring",
"sudo -u ceph mkdir -p /var/lib/ceph/mgr/ceph-${cfg.monA.name}/", "sudo -u ceph mkdir -p /var/lib/ceph/mgr/ceph-${cfg.monA.name}/",
"sudo -u ceph touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done", "sudo -u ceph touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done",
"systemctl start ceph-mon-${cfg.monA.name}" "systemctl start ceph-mon-${cfg.monA.name}",
); )
$monA->waitForUnit("ceph-mon-${cfg.monA.name}"); monA.wait_for_unit("ceph-mon-${cfg.monA.name}")
$monA->mustSucceed("ceph mon enable-msgr2"); monA.succeed("ceph mon enable-msgr2")
# Can't check ceph status until a mon is up # Can't check ceph status until a mon is up
$monA->succeed("ceph -s | grep 'mon: 1 daemons'"); monA.succeed("ceph -s | grep 'mon: 1 daemons'")
# Start the ceph-mgr daemon, it has no deps and hardly any setup # Start the ceph-mgr daemon, it has no deps and hardly any setup
$monA->mustSucceed( monA.succeed(
"ceph auth get-or-create mgr.${cfg.monA.name} mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-${cfg.monA.name}/keyring", "ceph auth get-or-create mgr.${cfg.monA.name} mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-${cfg.monA.name}/keyring",
"systemctl start ceph-mgr-${cfg.monA.name}" "systemctl start ceph-mgr-${cfg.monA.name}",
); )
$monA->waitForUnit("ceph-mgr-a"); monA.wait_for_unit("ceph-mgr-a")
$monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'"); monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'"); monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
# Send the admin keyring to the OSD machines # Send the admin keyring to the OSD machines
$monA->mustSucceed("cp /etc/ceph/ceph.client.admin.keyring /tmp/shared"); monA.succeed("cp /etc/ceph/ceph.client.admin.keyring /tmp/shared")
$osd0->mustSucceed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph"); osd0.succeed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph")
$osd1->mustSucceed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph"); osd1.succeed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph")
# Bootstrap both OSDs # Bootstrap both OSDs
$osd0->mustSucceed( osd0.succeed(
"mkfs.xfs /dev/vdb", "mkfs.xfs /dev/vdb",
"mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd0.name}", "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
"mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd0.name}", "mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
"ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd0.name}/keyring --name osd.${cfg.osd0.name} --add-key ${cfg.osd0.key}", "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd0.name}/keyring --name osd.${cfg.osd0.name} --add-key ${cfg.osd0.key}",
"echo '{\"cephx_secret\": \"${cfg.osd0.key}\"}' | ceph osd new ${cfg.osd0.uuid} -i -", 'echo \'{"cephx_secret": "${cfg.osd0.key}"}\' | ceph osd new ${cfg.osd0.uuid} -i -',
); )
$osd1->mustSucceed( osd1.succeed(
"mkfs.xfs /dev/vdb", "mkfs.xfs /dev/vdb",
"mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd1.name}", "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
"mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd1.name}", "mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
"ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd1.name}/keyring --name osd.${cfg.osd1.name} --add-key ${cfg.osd1.key}", "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd1.name}/keyring --name osd.${cfg.osd1.name} --add-key ${cfg.osd1.key}",
"echo '{\"cephx_secret\": \"${cfg.osd1.key}\"}' | ceph osd new ${cfg.osd1.uuid} -i -" 'echo \'{"cephx_secret": "${cfg.osd1.key}"}\' | ceph osd new ${cfg.osd1.uuid} -i -',
); )
# Initialize the OSDs with regular filestore # Initialize the OSDs with regular filestore
$osd0->mustSucceed( osd0.succeed(
"ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}", "ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
"chown -R ceph:ceph /var/lib/ceph/osd", "chown -R ceph:ceph /var/lib/ceph/osd",
"systemctl start ceph-osd-${cfg.osd0.name}", "systemctl start ceph-osd-${cfg.osd0.name}",
); )
$osd1->mustSucceed( osd1.succeed(
"ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}", "ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
"chown -R ceph:ceph /var/lib/ceph/osd", "chown -R ceph:ceph /var/lib/ceph/osd",
"systemctl start ceph-osd-${cfg.osd1.name}" "systemctl start ceph-osd-${cfg.osd1.name}",
); )
$monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'"); monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'"); monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'"); monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
$monA->mustSucceed( monA.succeed(
"ceph osd pool create multi-node-test 100 100", "ceph osd pool create multi-node-test 100 100",
"ceph osd pool ls | grep 'multi-node-test'", "ceph osd pool ls | grep 'multi-node-test'",
"ceph osd pool rename multi-node-test multi-node-other-test", "ceph osd pool rename multi-node-test multi-node-other-test",
"ceph osd pool ls | grep 'multi-node-other-test'" "ceph osd pool ls | grep 'multi-node-other-test'",
); )
$monA->waitUntilSucceeds("ceph -s | grep '1 pools, 100 pgs'"); monA.wait_until_succeeds("ceph -s | grep '1 pools, 100 pgs'")
$monA->mustSucceed("ceph osd pool set multi-node-other-test size 2"); monA.succeed("ceph osd pool set multi-node-other-test size 2")
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'"); monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
$monA->waitUntilSucceeds("ceph -s | grep '100 active+clean'"); monA.wait_until_succeeds("ceph -s | grep '100 active+clean'")
$monA->mustFail( monA.fail(
"ceph osd pool ls | grep 'multi-node-test'", "ceph osd pool ls | grep 'multi-node-test'",
"ceph osd pool delete multi-node-other-test multi-node-other-test --yes-i-really-really-mean-it" "ceph osd pool delete multi-node-other-test multi-node-other-test --yes-i-really-really-mean-it",
); )
# Shut down ceph on all machines in a very unpolite way # Shut down ceph on all machines in a very unpolite way
$monA->crash; monA.crash()
$osd0->crash; osd0.crash()
$osd1->crash; osd1.crash()
# Start it up # Start it up
$osd0->start; osd0.start()
$osd1->start; osd1.start()
$monA->start; monA.start()
# Ensure the cluster comes back up again # Ensure the cluster comes back up again
$monA->succeed("ceph -s | grep 'mon: 1 daemons'"); monA.succeed("ceph -s | grep 'mon: 1 daemons'")
$monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'"); monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
$monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'"); monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'"); monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'"); monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
''; '';
in { in {
name = "basic-multi-node-ceph-cluster"; name = "basic-multi-node-ceph-cluster";

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({pkgs, lib, ...}: import ./make-test-python.nix ({pkgs, lib, ...}:
let let
cfg = { cfg = {
@ -74,100 +74,100 @@ let
# For other ways to deploy a ceph cluster, look at the documentation at # For other ways to deploy a ceph cluster, look at the documentation at
# https://docs.ceph.com/docs/master/ # https://docs.ceph.com/docs/master/
testscript = { ... }: '' testscript = { ... }: ''
startAll; start_all()
$monA->waitForUnit("network.target"); monA.wait_for_unit("network.target")
# Bootstrap ceph-mon daemon # Bootstrap ceph-mon daemon
$monA->mustSucceed( monA.succeed(
"sudo -u ceph ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'", "sudo -u ceph ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'",
"sudo -u ceph ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'", "sudo -u ceph ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'",
"sudo -u ceph ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring", "sudo -u ceph ceph-authtool /tmp/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring",
"monmaptool --create --add ${cfg.monA.name} ${cfg.monA.ip} --fsid ${cfg.clusterId} /tmp/monmap", "monmaptool --create --add ${cfg.monA.name} ${cfg.monA.ip} --fsid ${cfg.clusterId} /tmp/monmap",
"sudo -u ceph ceph-mon --mkfs -i ${cfg.monA.name} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring", "sudo -u ceph ceph-mon --mkfs -i ${cfg.monA.name} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring",
"sudo -u ceph touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done", "sudo -u ceph touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done",
"systemctl start ceph-mon-${cfg.monA.name}" "systemctl start ceph-mon-${cfg.monA.name}",
); )
$monA->waitForUnit("ceph-mon-${cfg.monA.name}"); monA.wait_for_unit("ceph-mon-${cfg.monA.name}")
$monA->mustSucceed("ceph mon enable-msgr2"); monA.succeed("ceph mon enable-msgr2")
# Can't check ceph status until a mon is up # Can't check ceph status until a mon is up
$monA->succeed("ceph -s | grep 'mon: 1 daemons'"); monA.succeed("ceph -s | grep 'mon: 1 daemons'")
# Start the ceph-mgr daemon, after copying in the keyring # Start the ceph-mgr daemon, after copying in the keyring
$monA->mustSucceed( monA.succeed(
"sudo -u ceph mkdir -p /var/lib/ceph/mgr/ceph-${cfg.monA.name}/", "sudo -u ceph mkdir -p /var/lib/ceph/mgr/ceph-${cfg.monA.name}/",
"ceph auth get-or-create mgr.${cfg.monA.name} mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-${cfg.monA.name}/keyring", "ceph auth get-or-create mgr.${cfg.monA.name} mon 'allow profile mgr' osd 'allow *' mds 'allow *' > /var/lib/ceph/mgr/ceph-${cfg.monA.name}/keyring",
"systemctl start ceph-mgr-${cfg.monA.name}" "systemctl start ceph-mgr-${cfg.monA.name}",
); )
$monA->waitForUnit("ceph-mgr-a"); monA.wait_for_unit("ceph-mgr-a")
$monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'"); monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'"); monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
# Bootstrap both OSDs # Bootstrap both OSDs
$monA->mustSucceed( monA.succeed(
"mkfs.xfs /dev/vdb", "mkfs.xfs /dev/vdb",
"mkfs.xfs /dev/vdc", "mkfs.xfs /dev/vdc",
"mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd0.name}", "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
"mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd0.name}", "mount /dev/vdb /var/lib/ceph/osd/ceph-${cfg.osd0.name}",
"mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd1.name}", "mkdir -p /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
"mount /dev/vdc /var/lib/ceph/osd/ceph-${cfg.osd1.name}", "mount /dev/vdc /var/lib/ceph/osd/ceph-${cfg.osd1.name}",
"ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd0.name}/keyring --name osd.${cfg.osd0.name} --add-key ${cfg.osd0.key}", "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd0.name}/keyring --name osd.${cfg.osd0.name} --add-key ${cfg.osd0.key}",
"ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd1.name}/keyring --name osd.${cfg.osd1.name} --add-key ${cfg.osd1.key}", "ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-${cfg.osd1.name}/keyring --name osd.${cfg.osd1.name} --add-key ${cfg.osd1.key}",
"echo '{\"cephx_secret\": \"${cfg.osd0.key}\"}' | ceph osd new ${cfg.osd0.uuid} -i -", 'echo \'{"cephx_secret": "${cfg.osd0.key}"}\' | ceph osd new ${cfg.osd0.uuid} -i -',
"echo '{\"cephx_secret\": \"${cfg.osd1.key}\"}' | ceph osd new ${cfg.osd1.uuid} -i -" 'echo \'{"cephx_secret": "${cfg.osd1.key}"}\' | ceph osd new ${cfg.osd1.uuid} -i -',
); )
# Initialize the OSDs with regular filestore # Initialize the OSDs with regular filestore
$monA->mustSucceed( monA.succeed(
"ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}", "ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
"ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}", "ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
"chown -R ceph:ceph /var/lib/ceph/osd", "chown -R ceph:ceph /var/lib/ceph/osd",
"systemctl start ceph-osd-${cfg.osd0.name}", "systemctl start ceph-osd-${cfg.osd0.name}",
"systemctl start ceph-osd-${cfg.osd1.name}" "systemctl start ceph-osd-${cfg.osd1.name}",
); )
$monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'"); monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'"); monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'"); monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
$monA->mustSucceed( monA.succeed(
"ceph osd pool create single-node-test 100 100", "ceph osd pool create single-node-test 100 100",
"ceph osd pool ls | grep 'single-node-test'", "ceph osd pool ls | grep 'single-node-test'",
"ceph osd pool rename single-node-test single-node-other-test", "ceph osd pool rename single-node-test single-node-other-test",
"ceph osd pool ls | grep 'single-node-other-test'" "ceph osd pool ls | grep 'single-node-other-test'",
); )
$monA->waitUntilSucceeds("ceph -s | grep '1 pools, 100 pgs'"); monA.wait_until_succeeds("ceph -s | grep '1 pools, 100 pgs'")
$monA->mustSucceed( monA.succeed(
"ceph osd getcrushmap -o crush", "ceph osd getcrushmap -o crush",
"crushtool -d crush -o decrushed", "crushtool -d crush -o decrushed",
"sed 's/step chooseleaf firstn 0 type host/step chooseleaf firstn 0 type osd/' decrushed > modcrush", "sed 's/step chooseleaf firstn 0 type host/step chooseleaf firstn 0 type osd/' decrushed > modcrush",
"crushtool -c modcrush -o recrushed", "crushtool -c modcrush -o recrushed",
"ceph osd setcrushmap -i recrushed", "ceph osd setcrushmap -i recrushed",
"ceph osd pool set single-node-other-test size 2" "ceph osd pool set single-node-other-test size 2",
); )
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'"); monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
$monA->waitUntilSucceeds("ceph -s | grep '100 active+clean'"); monA.wait_until_succeeds("ceph -s | grep '100 active+clean'")
$monA->mustFail( monA.fail(
"ceph osd pool ls | grep 'multi-node-test'", "ceph osd pool ls | grep 'multi-node-test'",
"ceph osd pool delete single-node-other-test single-node-other-test --yes-i-really-really-mean-it" "ceph osd pool delete single-node-other-test single-node-other-test --yes-i-really-really-mean-it",
); )
# Shut down ceph by stopping ceph.target. # Shut down ceph by stopping ceph.target.
$monA->mustSucceed("systemctl stop ceph.target"); monA.succeed("systemctl stop ceph.target")
# Start it up # Start it up
$monA->succeed("systemctl start ceph.target"); monA.succeed("systemctl start ceph.target")
$monA->waitForUnit("ceph-mon-${cfg.monA.name}"); monA.wait_for_unit("ceph-mon-${cfg.monA.name}")
$monA->waitForUnit("ceph-mgr-${cfg.monA.name}"); monA.wait_for_unit("ceph-mgr-${cfg.monA.name}")
$monA->waitForUnit("ceph-osd-${cfg.osd0.name}"); monA.wait_for_unit("ceph-osd-${cfg.osd0.name}")
$monA->waitForUnit("ceph-osd-${cfg.osd1.name}"); monA.wait_for_unit("ceph-osd-${cfg.osd1.name}")
# Ensure the cluster comes back up again # Ensure the cluster comes back up again
$monA->succeed("ceph -s | grep 'mon: 1 daemons'"); monA.succeed("ceph -s | grep 'mon: 1 daemons'")
$monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'"); monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
$monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'"); monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'"); monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'"); monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
''; '';
in { in {
name = "basic-single-node-ceph-cluster"; name = "basic-single-node-ceph-cluster";

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ... }: { import ./make-test-python.nix ({ pkgs, ... }: {
name = "clickhouse"; name = "clickhouse";
meta.maintainers = with pkgs.stdenv.lib.maintainers; [ ma27 ]; meta.maintainers = with pkgs.stdenv.lib.maintainers; [ ma27 ];
@ -14,12 +14,18 @@ import ./make-test.nix ({ pkgs, ... }: {
selectQuery = pkgs.writeText "select.sql" "SELECT * from `demo`"; selectQuery = pkgs.writeText "select.sql" "SELECT * from `demo`";
in in
'' ''
$machine->start(); machine.start()
$machine->waitForUnit("clickhouse.service"); machine.wait_for_unit("clickhouse.service")
$machine->waitForOpenPort(9000); machine.wait_for_open_port(9000)
$machine->succeed("cat ${tableDDL} | clickhouse-client"); machine.succeed(
$machine->succeed("cat ${insertQuery} | clickhouse-client"); "cat ${tableDDL} | clickhouse-client"
$machine->succeed("cat ${selectQuery} | clickhouse-client | grep foo"); )
machine.succeed(
"cat ${insertQuery} | clickhouse-client"
)
machine.succeed(
"cat ${selectQuery} | clickhouse-client | grep foo"
)
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ...} : { import ./make-test-python.nix ({ pkgs, ...} : {
name = "deluge"; name = "deluge";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ flokli ]; maintainers = [ flokli ];
@ -45,18 +45,20 @@ import ./make-test.nix ({ pkgs, ...} : {
}; };
testScript = '' testScript = ''
startAll; start_all()
$simple->waitForUnit("deluged"); simple.wait_for_unit("deluged")
$simple->waitForUnit("delugeweb"); simple.wait_for_unit("delugeweb")
$simple->waitForOpenPort("8112"); simple.wait_for_open_port("8112")
$declarative->waitForUnit("network.target"); declarative.wait_for_unit("network.target")
$declarative->waitUntilSucceeds("curl --fail http://simple:8112"); declarative.wait_until_succeeds("curl --fail http://simple:8112")
$declarative->waitForUnit("deluged"); declarative.wait_for_unit("deluged")
$declarative->waitForUnit("delugeweb"); declarative.wait_for_unit("delugeweb")
$declarative->waitUntilSucceeds("curl --fail http://declarative:3142"); declarative.wait_until_succeeds("curl --fail http://declarative:3142")
$declarative->succeed("deluge-console 'help' | grep -q 'rm - Remove a torrent'"); declarative.succeed("deluge-console 'help' | grep -q 'rm - Remove a torrent'")
$declarative->succeed("deluge-console 'connect 127.0.0.1:58846 andrew password; help' | grep -q 'rm - Remove a torrent'"); declarative.succeed(
"deluge-console 'connect 127.0.0.1:58846 andrew password; help' | grep -q 'rm - Remove a torrent'"
)
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix { import ./make-test-python.nix {
name = "dovecot"; name = "dovecot";
machine = { pkgs, ... }: { machine = { pkgs, ... }: {
@ -66,12 +66,12 @@ import ./make-test.nix {
}; };
testScript = '' testScript = ''
$machine->waitForUnit('postfix.service'); machine.wait_for_unit("postfix.service")
$machine->waitForUnit('dovecot2.service'); machine.wait_for_unit("dovecot2.service")
$machine->succeed('send-testmail'); machine.succeed("send-testmail")
$machine->succeed('send-lda'); machine.succeed("send-lda")
$machine->waitUntilFails('[ "$(postqueue -p)" != "Mail queue is empty" ]'); machine.wait_until_fails('[ "$(postqueue -p)" != "Mail queue is empty" ]')
$machine->succeed('test-imap'); machine.succeed("test-imap")
$machine->succeed('test-pop'); machine.succeed("test-pop")
''; '';
} }

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ... } : { import ./make-test-python.nix ({ pkgs, ... } : {
name = "fancontrol"; name = "fancontrol";
machine = machine =
@ -19,7 +19,10 @@ import ./make-test.nix ({ pkgs, ... } : {
# This configuration cannot be valid for the test VM, so it's expected to get an 'outdated' error. # This configuration cannot be valid for the test VM, so it's expected to get an 'outdated' error.
testScript = '' testScript = ''
$machine->waitForUnit("fancontrol.service"); start_all()
$machine->waitUntilSucceeds("journalctl -eu fancontrol | grep 'Configuration appears to be outdated'"); machine.wait_for_unit("fancontrol.service")
machine.wait_until_succeeds(
"journalctl -eu fancontrol | grep 'Configuration appears to be outdated'"
)
''; '';
}) })

View File

@ -1,6 +1,6 @@
# Test the firewall module. # Test the firewall module.
import ./make-test.nix ( { pkgs, ... } : { import ./make-test-python.nix ( { pkgs, ... } : {
name = "firewall"; name = "firewall";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ eelco ]; maintainers = [ eelco ];
@ -36,30 +36,30 @@ import ./make-test.nix ( { pkgs, ... } : {
testScript = { nodes, ... }: let testScript = { nodes, ... }: let
newSystem = nodes.walled2.config.system.build.toplevel; newSystem = nodes.walled2.config.system.build.toplevel;
in '' in ''
$walled->start; start_all()
$attacker->start;
$walled->waitForUnit("firewall"); walled.wait_for_unit("firewall")
$walled->waitForUnit("httpd"); walled.wait_for_unit("httpd")
$attacker->waitForUnit("network.target"); attacker.wait_for_unit("network.target")
# Local connections should still work. # Local connections should still work.
$walled->succeed("curl -v http://localhost/ >&2"); walled.succeed("curl -v http://localhost/ >&2")
# Connections to the firewalled machine should fail, but ping should succeed. # Connections to the firewalled machine should fail, but ping should succeed.
$attacker->fail("curl --fail --connect-timeout 2 http://walled/ >&2"); attacker.fail("curl --fail --connect-timeout 2 http://walled/ >&2")
$attacker->succeed("ping -c 1 walled >&2"); attacker.succeed("ping -c 1 walled >&2")
# Outgoing connections/pings should still work. # Outgoing connections/pings should still work.
$walled->succeed("curl -v http://attacker/ >&2"); walled.succeed("curl -v http://attacker/ >&2")
$walled->succeed("ping -c 1 attacker >&2"); walled.succeed("ping -c 1 attacker >&2")
# If we stop the firewall, then connections should succeed. # If we stop the firewall, then connections should succeed.
$walled->stopJob("firewall"); walled.stop_job("firewall")
$attacker->succeed("curl -v http://walled/ >&2"); attacker.succeed("curl -v http://walled/ >&2")
# Check whether activation of a new configuration reloads the firewall. # Check whether activation of a new configuration reloads the firewall.
$walled->succeed("${newSystem}/bin/switch-to-configuration test 2>&1" . walled.succeed(
" | grep -qF firewall.service"); "${newSystem}/bin/switch-to-configuration test 2>&1 | grep -qF firewall.service"
)
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ... }: { import ./make-test-python.nix ({ pkgs, ... }: {
name = "fish"; name = "fish";
machine = machine =
@ -14,8 +14,11 @@ import ./make-test.nix ({ pkgs, ... }: {
testScript = testScript =
'' ''
$machine->waitForFile("/etc/fish/generated_completions/coreutils.fish"); start_all()
$machine->waitForFile("/etc/fish/generated_completions/kill.fish"); machine.wait_for_file("/etc/fish/generated_completions/coreutils.fish")
$machine->succeed("fish -ic 'echo \$fish_complete_path' | grep -q '/share/fish/completions /etc/fish/generated_completions /root/.local/share/fish/generated_completions\$'"); machine.wait_for_file("/etc/fish/generated_completions/kill.fish")
machine.succeed(
"fish -ic 'echo $fish_complete_path' | grep -q '/share/fish/completions /etc/fish/generated_completions /root/.local/share/fish/generated_completions$'"
)
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, lib, ... }: { import ./make-test-python.nix ({ pkgs, lib, ... }: {
name = "fluentd"; name = "fluentd";
machine = { pkgs, ... }: { machine = { pkgs, ... }: {
@ -33,14 +33,17 @@ import ./make-test.nix ({ pkgs, lib, ... }: {
inherit testMessage; inherit testMessage;
}); });
in '' in ''
$machine->start; machine.start()
$machine->waitForUnit('fluentd.service'); machine.wait_for_unit("fluentd.service")
$machine->waitForOpenPort(9880); machine.wait_for_open_port(9880)
$machine->succeed("curl -fsSL -X POST -H 'Content-type: application/json' -d @${payload} http://localhost:9880/test.tag"); machine.succeed(
"curl -fsSL -X POST -H 'Content-type: application/json' -d @${payload} http://localhost:9880/test.tag"
)
$machine->succeed("systemctl stop fluentd"); # blocking flush # blocking flush
machine.succeed("systemctl stop fluentd")
$machine->succeed("grep '${testMessage}' /tmp/current-log"); machine.succeed("grep '${testMessage}' /tmp/current-log")
''; '';
}) })

View File

@ -3,7 +3,7 @@
let let
initialRootPassword = "notproduction"; initialRootPassword = "notproduction";
in in
import ./make-test.nix ({ pkgs, lib, ...} : with lib; { import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
name = "gitlab"; name = "gitlab";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ globin ]; maintainers = [ globin ];
@ -63,21 +63,35 @@ import ./make-test.nix ({ pkgs, lib, ...} : with lib; {
}); });
in in
'' ''
$gitlab->start(); gitlab.start()
$gitlab->waitForUnit("gitaly.service"); gitlab.wait_for_unit("gitaly.service")
$gitlab->waitForUnit("gitlab-workhorse.service"); gitlab.wait_for_unit("gitlab-workhorse.service")
$gitlab->waitForUnit("gitlab.service"); gitlab.wait_for_unit("gitlab.service")
$gitlab->waitForUnit("gitlab-sidekiq.service"); gitlab.wait_for_unit("gitlab-sidekiq.service")
$gitlab->waitForFile("/var/gitlab/state/tmp/sockets/gitlab.socket"); gitlab.wait_for_file("/var/gitlab/state/tmp/sockets/gitlab.socket")
$gitlab->waitUntilSucceeds("curl -sSf http://gitlab/users/sign_in"); gitlab.wait_until_succeeds("curl -sSf http://gitlab/users/sign_in")
$gitlab->succeed("curl -isSf http://gitlab | grep -i location | grep -q http://gitlab/users/sign_in"); gitlab.succeed(
$gitlab->succeed("${pkgs.sudo}/bin/sudo -u gitlab -H gitlab-rake gitlab:check 1>&2"); "curl -isSf http://gitlab | grep -i location | grep -q http://gitlab/users/sign_in"
$gitlab->succeed("echo \"Authorization: Bearer \$(curl -X POST -H 'Content-Type: application/json' -d @${auth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers"); )
$gitlab->succeed("curl -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${createProject} http://gitlab/api/v4/projects"); gitlab.succeed(
$gitlab->succeed("curl -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${putFile} http://gitlab/api/v4/projects/1/repository/files/some-file.txt"); "${pkgs.sudo}/bin/sudo -u gitlab -H gitlab-rake gitlab:check 1>&2"
$gitlab->succeed("curl -H @/tmp/headers http://gitlab/api/v4/projects/1/repository/archive.tar.gz > /tmp/archive.tar.gz"); )
$gitlab->succeed("curl -H @/tmp/headers http://gitlab/api/v4/projects/1/repository/archive.tar.bz2 > /tmp/archive.tar.bz2"); gitlab.succeed(
$gitlab->succeed("test -s /tmp/archive.tar.gz"); "echo \"Authorization: Bearer \$(curl -X POST -H 'Content-Type: application/json' -d @${auth} http://gitlab/oauth/token | ${pkgs.jq}/bin/jq -r '.access_token')\" >/tmp/headers"
$gitlab->succeed("test -s /tmp/archive.tar.bz2"); )
gitlab.succeed(
"curl -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${createProject} http://gitlab/api/v4/projects"
)
gitlab.succeed(
"curl -X POST -H 'Content-Type: application/json' -H @/tmp/headers -d @${putFile} http://gitlab/api/v4/projects/1/repository/files/some-file.txt"
)
gitlab.succeed(
"curl -H @/tmp/headers http://gitlab/api/v4/projects/1/repository/archive.tar.gz > /tmp/archive.tar.gz"
)
gitlab.succeed(
"curl -H @/tmp/headers http://gitlab/api/v4/projects/1/repository/archive.tar.bz2 > /tmp/archive.tar.bz2"
)
gitlab.succeed("test -s /tmp/archive.tar.gz")
gitlab.succeed("test -s /tmp/archive.tar.bz2")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ ... } : import ./make-test-python.nix ({pkgs, lib, ...}:
let let
client = { pkgs, ... } : { client = { pkgs, ... } : {
@ -39,27 +39,29 @@ in {
}; };
testScript = '' testScript = ''
$server1->waitForUnit("glusterd.service"); server1.wait_for_unit("glusterd.service")
$server2->waitForUnit("glusterd.service"); server2.wait_for_unit("glusterd.service")
server1.wait_until_succeeds("gluster peer status")
server2.wait_until_succeeds("gluster peer status")
# establish initial contact # establish initial contact
$server1->succeed("sleep 2"); server1.succeed("gluster peer probe server2")
$server1->succeed("gluster peer probe server2"); server1.succeed("gluster peer probe server1")
$server1->succeed("gluster peer probe server1");
$server1->succeed("gluster peer status | grep Connected"); server1.succeed("gluster peer status | grep Connected")
# create volumes # create volumes
$server1->succeed("mkdir -p /data/vg0"); server1.succeed("mkdir -p /data/vg0")
$server2->succeed("mkdir -p /data/vg0"); server2.succeed("mkdir -p /data/vg0")
$server1->succeed("gluster volume create gv0 server1:/data/vg0 server2:/data/vg0"); server1.succeed("gluster volume create gv0 server1:/data/vg0 server2:/data/vg0")
$server1->succeed("gluster volume start gv0"); server1.succeed("gluster volume start gv0")
# test clients # test clients
$client1->waitForUnit("gluster.mount"); client1.wait_for_unit("gluster.mount")
$client2->waitForUnit("gluster.mount"); client2.wait_for_unit("gluster.mount")
$client1->succeed("echo test > /gluster/file1"); client1.succeed("echo test > /gluster/file1")
$client2->succeed("grep test /gluster/file1"); client2.succeed("grep test /gluster/file1")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ... }: import ./make-test-python.nix ({ pkgs, ... }:
let let
# Download Big Buck Bunny example, licensed under CC Attribution 3.0. # Download Big Buck Bunny example, licensed under CC Attribution 3.0.
testMkv = pkgs.fetchurl { testMkv = pkgs.fetchurl {
@ -19,7 +19,13 @@ in {
testScript = '' testScript = ''
# Test MP4 and MKV transcoding. Since this is a short clip, transcoding typically # Test MP4 and MKV transcoding. Since this is a short clip, transcoding typically
# only takes a few seconds. # only takes a few seconds.
$machine->succeed("HandBrakeCLI -i ${testMkv} -o test.mp4 -e x264 -q 20 -B 160"); start_all()
$machine->succeed("HandBrakeCLI -i ${testMkv} -o test.mkv -e x264 -q 20 -B 160");
machine.succeed(
"HandBrakeCLI -i ${testMkv} -o test.mp4 -e x264 -q 20 -B 160"
)
machine.succeed(
"HandBrakeCLI -i ${testMkv} -o test.mkv -e x264 -q 20 -B 160"
)
''; '';
}) })

View File

@ -1,6 +1,6 @@
# Test whether hibernation from partition works. # Test whether hibernation from partition works.
import ./make-test.nix (pkgs: { import ./make-test-python.nix (pkgs: {
name = "hibernate"; name = "hibernate";
nodes = { nodes = {
@ -28,16 +28,17 @@ import ./make-test.nix (pkgs: {
testScript = testScript =
'' ''
$machine->waitForUnit("multi-user.target"); machine.start()
$machine->succeed("mkswap /dev/vdb"); machine.wait_for_unit("multi-user.target")
$machine->succeed("swapon -a"); machine.succeed("mkswap /dev/vdb")
$machine->startJob("listener"); machine.succeed("swapon -a")
$machine->waitForOpenPort(4444); machine.start_job("listener")
$machine->succeed("systemctl hibernate &"); machine.wait_for_open_port(4444)
$machine->waitForShutdown; machine.succeed("systemctl hibernate &")
$probe->waitForUnit("multi-user.target"); machine.wait_for_shutdown()
$machine->start; probe.wait_for_unit("multi-user.target")
$probe->waitUntilSucceeds("echo test | nc machine 4444 -N"); machine.start()
probe.wait_until_succeeds("echo test | nc machine 4444 -N")
''; '';
}) })

View File

@ -1,5 +1,5 @@
# Test whether `houndd` indexes nixpkgs # Test whether `houndd` indexes nixpkgs
import ./make-test.nix ({ pkgs, ... } : { import ./make-test-python.nix ({ pkgs, ... } : {
name = "hound"; name = "hound";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ grahamc ]; maintainers = [ grahamc ];
@ -46,13 +46,14 @@ import ./make-test.nix ({ pkgs, ... } : {
}; };
}; };
testScript = testScript = ''
'' startAll; start_all()
$machine->waitForUnit("network.target"); machine.wait_for_unit("network.target")
$machine->waitForUnit("hound.service"); machine.wait_for_unit("hound.service")
$machine->waitForOpenPort(6080); machine.wait_for_open_port(6080)
$machine->waitUntilSucceeds('curl http://127.0.0.1:6080/api/v1/search\?stats\=fosho\&repos\=\*\&rng=%3A20\&q\=hi\&files\=\&i=nope | grep "Filename" | grep "hello"'); machine.wait_until_succeeds(
"curl http://127.0.0.1:6080/api/v1/search\?stats\=fosho\&repos\=\*\&rng=%3A20\&q\=hi\&files\=\&i=nope | grep 'Filename' | grep 'hello'"
''; )
'';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ... }: { import ./make-test-python.nix ({ pkgs, ... }: {
name = "icingaweb2"; name = "icingaweb2";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ das_j ]; maintainers = [ das_j ];
@ -64,8 +64,8 @@ import ./make-test.nix ({ pkgs, ... }: {
}; };
testScript = '' testScript = ''
startAll(); start_all()
$icingaweb2->waitForUnit("multi-user.target"); icingaweb2.wait_for_unit("multi-user.target")
$icingaweb2->succeed("curl -sSf http://icingaweb2/authentication/login"); icingaweb2.succeed("curl -sSf http://icingaweb2/authentication/login")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, lib, ... }: import ./make-test-python.nix ({ pkgs, lib, ... }:
{ {
name = "incron"; name = "incron";
@ -19,34 +19,34 @@ import ./make-test.nix ({ pkgs, lib, ... }:
}; };
testScript = '' testScript = ''
startAll; start_all()
$machine->waitForUnit("multi-user.target"); machine.wait_for_unit("multi-user.target")
$machine->waitForUnit("incron.service"); machine.wait_for_unit("incron.service")
$machine->succeed("test -d /test"); machine.succeed("test -d /test")
# create some activity for incron to monitor # create some activity for incron to monitor
$machine->succeed("touch /test/file"); machine.succeed("touch /test/file")
$machine->succeed("echo foo >> /test/file"); machine.succeed("echo foo >> /test/file")
$machine->succeed("mv /test/file /root"); machine.succeed("mv /test/file /root")
$machine->succeed("mv /root/file /test"); machine.succeed("mv /root/file /test")
$machine->sleep(1); machine.sleep(1)
# touch /test/file # touch /test/file
$machine->succeed("grep '/test/file IN_CREATE' /root/incron.log"); machine.succeed("grep '/test/file IN_CREATE' /root/incron.log")
# echo foo >> /test/file # echo foo >> /test/file
$machine->succeed("grep '/test/file IN_MODIFY' /root/incron.log"); machine.succeed("grep '/test/file IN_MODIFY' /root/incron.log")
$machine->succeed("grep '/test/file IN_CLOSE_WRITE' /root/incron.log"); machine.succeed("grep '/test/file IN_CLOSE_WRITE' /root/incron.log")
# mv /test/file /root # mv /test/file /root
$machine->succeed("grep '/test/file IN_MOVED_FROM' /root/incron.log"); machine.succeed("grep '/test/file IN_MOVED_FROM' /root/incron.log")
# mv /root/file /test # mv /root/file /test
$machine->succeed("grep '/test/file IN_MOVED_TO' /root/incron.log"); machine.succeed("grep '/test/file IN_MOVED_TO' /root/incron.log")
# ensure something unexpected is not present # ensure something unexpected is not present
$machine->fail("grep 'IN_OPEN' /root/incron.log"); machine.fail("grep 'IN_OPEN' /root/incron.log")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ lib, ... }: import ./make-test-python.nix ({ lib, ... }:
with lib; with lib;
@ -11,8 +11,9 @@ with lib;
{ services.jackett.enable = true; }; { services.jackett.enable = true; };
testScript = '' testScript = ''
$machine->waitForUnit('jackett.service'); machine.start()
$machine->waitForOpenPort('9117'); machine.wait_for_unit("jackett.service")
$machine->succeed("curl --fail http://localhost:9117/"); machine.wait_for_open_port(9117)
machine.succeed("curl --fail http://localhost:9117/")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ../make-test.nix ({pkgs, ...}: { import ../make-test-python.nix ({pkgs, ...}: {
name = "kerberos_server-heimdal"; name = "kerberos_server-heimdal";
machine = { config, libs, pkgs, ...}: machine = { config, libs, pkgs, ...}:
{ services.kerberos_server = { services.kerberos_server =
@ -23,31 +23,20 @@ import ../make-test.nix ({pkgs, ...}: {
}; };
testScript = '' testScript = ''
$machine->start; machine.succeed(
"kadmin -l init --realm-max-ticket-life='8 day' --realm-max-renewable-life='10 day' FOO.BAR",
"systemctl restart kadmind.service kdc.service",
)
$machine->succeed( for unit in ["kadmind", "kdc", "kpasswdd"]:
"kadmin -l init --realm-max-ticket-life='8 day' \\ machine.wait_for_unit(f"{unit}.service")
--realm-max-renewable-life='10 day' FOO.BAR"
);
$machine->succeed("systemctl restart kadmind.service kdc.service"); machine.succeed(
$machine->waitForUnit("kadmind.service"); "kadmin -l add --password=admin_pw --use-defaults admin",
$machine->waitForUnit("kdc.service"); "kadmin -l ext_keytab --keytab=admin.keytab admin",
$machine->waitForUnit("kpasswdd.service"); "kadmin -p admin -K admin.keytab add --password=alice_pw --use-defaults alice",
"kadmin -l ext_keytab --keytab=alice.keytab alice",
$machine->succeed( "kinit -kt alice.keytab alice",
"kadmin -l add --password=admin_pw --use-defaults admin" )
);
$machine->succeed(
"kadmin -l ext_keytab --keytab=admin.keytab admin"
);
$machine->succeed(
"kadmin -p admin -K admin.keytab add --password=alice_pw --use-defaults \\
alice"
);
$machine->succeed(
"kadmin -l ext_keytab --keytab=alice.keytab alice"
);
$machine->succeed("kinit -kt alice.keytab alice");
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ../make-test.nix ({pkgs, ...}: { import ../make-test-python.nix ({pkgs, ...}: {
name = "kerberos_server-mit"; name = "kerberos_server-mit";
machine = { config, libs, pkgs, ...}: machine = { config, libs, pkgs, ...}:
{ services.kerberos_server = { services.kerberos_server =
@ -24,22 +24,18 @@ import ../make-test.nix ({pkgs, ...}: {
}; };
testScript = '' testScript = ''
$machine->start; machine.succeed(
"kdb5_util create -s -r FOO.BAR -P master_key",
"systemctl restart kadmind.service kdc.service",
)
$machine->succeed( for unit in ["kadmind", "kdc"]:
"kdb5_util create -s -r FOO.BAR -P master_key" machine.wait_for_unit(f"{unit}.service")
);
$machine->succeed("systemctl restart kadmind.service kdc.service"); machine.succeed(
$machine->waitForUnit("kadmind.service"); "kadmin.local add_principal -pw admin_pw admin",
$machine->waitForUnit("kdc.service"); "kadmin -p admin -w admin_pw addprinc -pw alice_pw alice",
"echo alice_pw | sudo -u alice kinit",
$machine->succeed( )
"kadmin.local add_principal -pw admin_pw admin"
);
$machine->succeed(
"kadmin -p admin -w admin_pw addprinc -pw alice_pw alice"
);
$machine->succeed("echo alice_pw | sudo -u alice kinit");
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, ... }: { import ./make-test-python.nix ({ pkgs, ... }: {
name = "minidlna"; name = "minidlna";
nodes = { nodes = {
@ -29,11 +29,11 @@ import ./make-test.nix ({ pkgs, ... }: {
testScript = testScript =
'' ''
startAll; start_all()
$server->succeed("mkdir -p /tmp/stuff && chown minidlna: /tmp/stuff"); server.succeed("mkdir -p /tmp/stuff && chown minidlna: /tmp/stuff")
$server->waitForUnit("minidlna"); server.wait_for_unit("minidlna")
$server->waitForOpenPort("8200"); server.wait_for_open_port("8200")
$server->succeed("curl --fail http://localhost:8200/"); server.succeed("curl --fail http://localhost:8200/")
$client->succeed("curl --fail http://server:8200/"); client.succeed("curl --fail http://server:8200/")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, lib, ... }: import ./make-test-python.nix ({ pkgs, lib, ... }:
let let
port = 3142; port = 3142;
@ -37,16 +37,20 @@ with lib;
}; };
}; };
testScript = '' testScript = ''
startAll; start_all()
$default->waitForUnit('miniflux.service'); default.wait_for_unit("miniflux.service")
$default->waitForOpenPort(${toString defaultPort}); default.wait_for_open_port(${toString defaultPort})
$default->succeed("curl --fail 'http://localhost:${toString defaultPort}/healthcheck' | grep -q OK"); default.succeed("curl --fail 'http://localhost:${toString defaultPort}/healthcheck' | grep -q OK")
$default->succeed("curl 'http://localhost:${toString defaultPort}/v1/me' -u '${defaultUsername}:${defaultPassword}' -H Content-Type:application/json | grep -q '\"is_admin\":true'"); default.succeed(
"curl 'http://localhost:${toString defaultPort}/v1/me' -u '${defaultUsername}:${defaultPassword}' -H Content-Type:application/json | grep -q '\"is_admin\":true'"
)
$customized->waitForUnit('miniflux.service'); customized.wait_for_unit("miniflux.service")
$customized->waitForOpenPort(${toString port}); customized.wait_for_open_port(${toString port})
$customized->succeed("curl --fail 'http://localhost:${toString port}/healthcheck' | grep -q OK"); customized.succeed("curl --fail 'http://localhost:${toString port}/healthcheck' | grep -q OK")
$customized->succeed("curl 'http://localhost:${toString port}/v1/me' -u '${username}:${password}' -H Content-Type:application/json | grep -q '\"is_admin\":true'"); customized.succeed(
"curl 'http://localhost:${toString port}/v1/me' -u '${username}:${password}' -H Content-Type:application/json | grep -q '\"is_admin\":true'"
)
''; '';
}) })

View File

@ -1,6 +1,6 @@
# This test start mongodb, runs a query using mongo shell # This test start mongodb, runs a query using mongo shell
import ./make-test.nix ({ pkgs, ...} : let import ./make-test-python.nix ({ pkgs, ...} : let
testQuery = pkgs.writeScript "nixtest.js" '' testQuery = pkgs.writeScript "nixtest.js" ''
db.greetings.insert({ "greeting": "hello" }); db.greetings.insert({ "greeting": "hello" });
print(db.greetings.findOne().greeting); print(db.greetings.findOne().greeting);
@ -33,8 +33,10 @@ in {
}; };
testScript = '' testScript = ''
startAll; start_all()
$one->waitForUnit("mongodb.service"); one.wait_for_unit("mongodb.service")
$one->succeed("mongo -u nixtest -p nixtest nixtest ${testQuery}") =~ /hello/ or die; one.succeed(
"mongo -u nixtest -p nixtest nixtest ${testQuery} | grep -q hello"
)
''; '';
}) })

View File

@ -1,21 +1,10 @@
import ./make-test.nix ({ pkgs, ... }: import ./make-test-python.nix ({ pkgs, ... }:
let let
port = 1888; port = 1888;
username = "mqtt"; username = "mqtt";
password = "VERY_secret"; password = "VERY_secret";
topic = "test/foo"; topic = "test/foo";
cmd = bin: pkgs.lib.concatStringsSep " " [
"${pkgs.mosquitto}/bin/mosquitto_${bin}"
"-V mqttv311"
"-h server"
"-p ${toString port}"
"-u ${username}"
"-P '${password}'"
"-t ${topic}"
];
in { in {
name = "mosquitto"; name = "mosquitto";
meta = with pkgs.stdenv.lib; { meta = with pkgs.stdenv.lib; {
@ -49,40 +38,53 @@ in {
testScript = let testScript = let
file = "/tmp/msg"; file = "/tmp/msg";
sub = args:
"(${cmd "sub"} -C 1 ${args} | tee ${file} &)";
in '' in ''
startAll; def mosquitto_cmd(binary):
$server->waitForUnit("mosquitto.service"); return (
"${pkgs.mosquitto}/bin/mosquitto_{} "
"-V mqttv311 "
"-h server "
"-p ${toString port} "
"-u ${username} "
"-P '${password}' "
"-t ${topic}"
).format(binary)
$server->fail("test -f ${file}");
$client1->fail("test -f ${file}");
$client2->fail("test -f ${file}");
def publish(args):
return "{} {}".format(mosquitto_cmd("pub"), args)
def subscribe(args):
return "({} -C 1 {} | tee ${file} &)".format(mosquitto_cmd("sub"), args)
start_all()
server.wait_for_unit("mosquitto.service")
for machine in server, client1, client2:
machine.fail("test -f ${file}")
# QoS = 0, so only one subscribers should get it # QoS = 0, so only one subscribers should get it
$server->execute("${sub "-q 0"}"); server.execute(subscribe("-q 0"))
# we need to give the subscribers some time to connect # we need to give the subscribers some time to connect
$client2->execute("sleep 5"); client2.execute("sleep 5")
$client2->succeed("${cmd "pub"} -m FOO -q 0"); client2.succeed(publish("-m FOO -q 0"))
$server->waitUntilSucceeds("grep -q FOO ${file}");
$server->execute("rm ${file}");
server.wait_until_succeeds("grep -q FOO ${file}")
server.execute("rm ${file}")
# QoS = 1, so both subscribers should get it # QoS = 1, so both subscribers should get it
$server->execute("${sub "-q 1"}"); server.execute(subscribe("-q 1"))
$client1->execute("${sub "-q 1"}"); client1.execute(subscribe("-q 1"))
# we need to give the subscribers some time to connect # we need to give the subscribers some time to connect
$client2->execute("sleep 5"); client2.execute("sleep 5")
$client2->succeed("${cmd "pub"} -m BAR -q 1"); client2.succeed(publish("-m BAR -q 1"))
$server->waitUntilSucceeds("grep -q BAR ${file}"); for machine in server, client1:
$server->execute("rm ${file}"); machine.wait_until_succeeds("grep -q BAR ${file}")
machine.execute("rm ${file}")
$client1->waitUntilSucceeds("grep -q BAR ${file}");
$client1->execute("rm ${file}");
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ pkgs, lib, ... }: import ./make-test-python.nix ({ pkgs, lib, ... }:
let let
track = pkgs.fetchurl { track = pkgs.fetchurl {
# Sourced from http://freemusicarchive.org/music/Blue_Wave_Theory/Surf_Music_Month_Challenge/Skyhawk_Beach_fade_in # Sourced from http://freemusicarchive.org/music/Blue_Wave_Theory/Surf_Music_Month_Challenge/Skyhawk_Beach_fade_in
@ -94,40 +94,39 @@ import ./make-test.nix ({ pkgs, lib, ... }:
}; };
testScript = '' testScript = ''
my $mpc = "${pkgs.mpc_cli}/bin/mpc --wait"; mpc = "${pkgs.mpc_cli}/bin/mpc --wait"
# Connects to the given server and attempts to play a tune. # Connects to the given server and attempts to play a tune.
sub play_some_music { def play_some_music(server):
my $server = $_[0]; server.wait_for_unit("mpd.service")
server.succeed(f"{mpc} update")
_, tracks = server.execute(f"{mpc} ls")
$server->waitForUnit("mpd.service"); for track in tracks.splitlines():
$server->succeed("$mpc update"); server.succeed(f"{mpc} add {track}")
my @tracks = $server->execute("$mpc ls");
for my $track (split(/\n/, $tracks[1])) { _, added_tracks = server.execute(f"{mpc} listall")
$server->succeed("$mpc add $track");
};
my @added_tracks = $server->execute("$mpc listall"); # Check we succeeded adding audio tracks to the playlist
(length $added_tracks[1]) > 0 or die "Failed to add audio tracks to the playlist."; assert len(added_tracks.splitlines()) > 0
$server->succeed("$mpc play"); server.succeed(f"{mpc} play")
my @status = $server->execute("$mpc status"); _, output = server.execute(f"{mpc} status")
my @output = split(/\n/, $status[1]); # Assure audio track is playing
$output[1] =~ /.*playing.*/ or die "Audio track is not playing, as expected."; assert "playing" in output
$server->succeed("$mpc stop"); server.succeed(f"{mpc} stop")
};
play_some_music($serverALSA);
play_some_music($serverPulseAudio);
$client->waitForUnit("multi-user.target"); play_some_music(serverALSA)
$client->succeed("$mpc -h serverALSA status"); play_some_music(serverPulseAudio)
client.wait_for_unit("multi-user.target")
client.succeed(f"{mpc} -h serverALSA status")
# The PulseAudio-based server is configured not to accept external client connections # The PulseAudio-based server is configured not to accept external client connections
# to perform the following test: # to perform the following test:
$client->fail("$mpc -h serverPulseAudio status"); client.fail(f"{mpc} -h serverPulseAudio status")
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix { import ./make-test-python.nix {
name = "neo4j"; name = "neo4j";
nodes = { nodes = {
@ -11,10 +11,10 @@ import ./make-test.nix {
}; };
testScript = '' testScript = ''
startAll; start_all()
$master->waitForUnit("neo4j"); master.wait_for_unit("neo4j")
$master->sleep(20); # Hopefully this is long enough!! master.wait_for_open_port(7474)
$master->succeed("curl http://localhost:7474/"); master.succeed("curl http://localhost:7474/")
''; '';
} }

View File

@ -21,11 +21,10 @@ import ./make-test-python.nix ({ pkgs, ...} : {
}; };
testScript = '' testScript = ''
$roundcube->start; roundcube.start
$roundcube->waitForUnit("postgresql.service"); roundcube.wait_for_unit("postgresql.service")
$roundcube->waitForUnit("roundcube-setup.service"); roundcube.wait_for_unit("phpfpm-roundcube.service")
$roundcube->waitForUnit("phpfpm-roundcube.service"); roundcube.wait_for_unit("nginx.service")
$roundcube->waitForUnit("nginx.service"); roundcube.succeed("curl -sSfL http://roundcube/ | grep 'Keep me logged in'")
$roundcube->succeed("curl -sSfL http://roundcube/ | grep 'Keep me logged in'");
''; '';
}) })

View File

@ -1,4 +1,4 @@
import ./make-test.nix ({ ... } : import ./make-test-python.nix ({ ... } :
let let
node = { pkgs, ... } : { node = { pkgs, ... } : {
@ -26,27 +26,21 @@ in {
testScript = '' testScript = ''
# Test if rxe interface comes up # Test if rxe interface comes up
$server->waitForUnit("default.target"); server.wait_for_unit("default.target")
$server->succeed("systemctl status rxe.service"); server.succeed("systemctl status rxe.service")
$server->succeed("ibv_devices | grep rxe0"); server.succeed("ibv_devices | grep rxe0")
$client->waitForUnit("default.target"); client.wait_for_unit("default.target")
# ping pong test # ping pong tests
$server->succeed("screen -dmS rc_pingpong ibv_rc_pingpong -p 4800 -g0"); for proto in "rc", "uc", "ud", "srq":
$client->succeed("sleep 2; ibv_rc_pingpong -p 4800 -g0 server"); server.succeed(
"screen -dmS {0}_pingpong ibv_{0}_pingpong -p 4800 -s 1024 -g0".format(proto)
)
client.succeed("sleep 2; ibv_{}_pingpong -p 4800 -s 1024 -g0 server".format(proto))
$server->succeed("screen -dmS uc_pingpong ibv_uc_pingpong -p 4800 -g0"); server.succeed("screen -dmS rping rping -s -a server -C 10")
$client->succeed("sleep 2; ibv_uc_pingpong -p 4800 -g0 server"); client.succeed("sleep 2; rping -c -a server -C 10")
$server->succeed("screen -dmS ud_pingpong ibv_ud_pingpong -p 4800 -s 1024 -g0");
$client->succeed("sleep 2; ibv_ud_pingpong -p 4800 -s 1024 -g0 server");
$server->succeed("screen -dmS srq_pingpong ibv_srq_pingpong -p 4800 -g0");
$client->succeed("sleep 2; ibv_srq_pingpong -p 4800 -g0 server");
$server->succeed("screen -dmS rping rping -s -a server -C 10");
$client->succeed("sleep 2; rping -c -a server -C 10");
''; '';
}) })

View File

@ -45,7 +45,7 @@ let generateNodeConf = { lib, pkgs, config, privkpath, pubk, peerId, nodeId, ...
}; };
}; };
}; };
in import ./make-test.nix ({pkgs, ... }: { in import ./make-test-python.nix ({pkgs, ... }: {
name = "networkd-wireguard"; name = "networkd-wireguard";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ ninjatrappeur ]; maintainers = [ ninjatrappeur ];
@ -70,12 +70,12 @@ in import ./make-test.nix ({pkgs, ... }: {
in generateNodeConf (attrs // localConf); in generateNodeConf (attrs // localConf);
}; };
testScript = '' testScript = ''
startAll; start_all()
$node1->waitForUnit('systemd-networkd-wait-online.service'); node1.wait_for_unit("systemd-networkd-wait-online.service")
$node2->waitForUnit('systemd-networkd-wait-online.service'); node2.wait_for_unit("systemd-networkd-wait-online.service")
$node1->succeed('ping -c 5 10.0.0.2'); node1.succeed("ping -c 5 10.0.0.2")
$node2->succeed('ping -c 5 10.0.0.1'); node2.succeed("ping -c 5 10.0.0.1")
# Is the fwmark set? # Is the fwmark set?
$node2->succeed('wg | grep -q 42'); node2.succeed("wg | grep -q 42")
''; '';
}) })

View File

@ -19,7 +19,7 @@ let
SigningPrivateKey = "2a6c21550f3fca0331df50668ffab66b6dce8237bcd5728e571e8033b363e247de111da0ec781e45bf6c63ecb45a78c24d7d4655abfaeea83b26c36eb5c0fd5b"; SigningPrivateKey = "2a6c21550f3fca0331df50668ffab66b6dce8237bcd5728e571e8033b363e247de111da0ec781e45bf6c63ecb45a78c24d7d4655abfaeea83b26c36eb5c0fd5b";
}; };
in import ./make-test.nix ({ pkgs, ...} : { in import ./make-test-python.nix ({ pkgs, ...} : {
name = "yggdrasil"; name = "yggdrasil";
meta = with pkgs.stdenv.lib.maintainers; { meta = with pkgs.stdenv.lib.maintainers; {
maintainers = [ gazally ]; maintainers = [ gazally ];
@ -91,33 +91,35 @@ in import ./make-test.nix ({ pkgs, ...} : {
testScript = testScript =
'' ''
import re
# Give Alice a head start so she is ready when Bob calls. # Give Alice a head start so she is ready when Bob calls.
$alice->start; alice.start()
$alice->waitForUnit("yggdrasil.service"); alice.wait_for_unit("yggdrasil.service")
$bob->start; bob.start()
$carol->start; carol.start()
$bob->waitForUnit("yggdrasil.service"); bob.wait_for_unit("yggdrasil.service")
$carol->waitForUnit("yggdrasil.service"); carol.wait_for_unit("yggdrasil.service")
$carol->waitUntilSucceeds("[ `ip -o -6 addr show dev ygg0 scope global | grep -v tentative | wc -l` -ge 1 ]"); ip_addr_show = "ip -o -6 addr show dev ygg0 scope global"
my $carolIp6 = (split /[ \/]+/, $carol->succeed("ip -o -6 addr show dev ygg0 scope global"))[3]; carol.wait_until_succeeds(f"[ `{ip_addr_show} | grep -v tentative | wc -l` -ge 1 ]")
carol_ip6 = re.split(" +|/", carol.succeed(ip_addr_show))[3]
# If Alice can talk to Carol, then Bob's outbound peering and Carol's # If Alice can talk to Carol, then Bob's outbound peering and Carol's
# local peering have succeeded and everybody is connected. # local peering have succeeded and everybody is connected.
$alice->waitUntilSucceeds("ping -c 1 $carolIp6"); alice.wait_until_succeeds(f"ping -c 1 {carol_ip6}")
$alice->succeed("ping -c 1 ${bobIp6}"); alice.succeed(f"ping -c 1 ${bobIp6}")
$bob->succeed("ping -c 1 ${aliceIp6}"); bob.succeed("ping -c 1 ${aliceIp6}")
$bob->succeed("ping -c 1 $carolIp6"); bob.succeed(f"ping -c 1 {carol_ip6}")
$carol->succeed("ping -c 1 ${aliceIp6}"); carol.succeed("ping -c 1 ${aliceIp6}")
$carol->succeed("ping -c 1 ${bobIp6}"); carol.succeed("ping -c 1 ${bobIp6}")
$carol->fail("journalctl -u dhcpcd | grep ygg0"); carol.fail("journalctl -u dhcpcd | grep ygg0")
$alice->waitForUnit("httpd.service");
$carol->succeed("curl --fail -g http://[${aliceIp6}]");
alice.wait_for_unit("httpd.service")
carol.succeed("curl --fail -g http://[${aliceIp6}]")
''; '';
}) })

View File

@ -1,45 +1,74 @@
{ stdenv, fetchurl, fetchpatch, meson, ninja, gettext, cargo, rustc, python3, pkgconfig, gnome3 { stdenv
, glib, libhandy, gtk3, dbus, openssl, sqlite, gst_all_1, wrapGAppsHook }: , rustPlatform
, fetchFromGitLab
, fetchpatch
, meson
, ninja
, gettext
, cargo
, rustc
, python3
, pkgconfig
, gnome3
, glib
, libhandy
, gtk3
, dbus
, openssl
, sqlite
, gst_all_1
, wrapGAppsHook
}:
# TODO: build from git for easier updates rustPlatform.buildRustPackage rec {
# rustPlatform.buildRustPackage rec { version = "0.4.7";
stdenv.mkDerivation {
version = "0.4.6";
pname = "gnome-podcasts"; pname = "gnome-podcasts";
src = fetchurl { src = fetchFromGitLab {
url = https://gitlab.gnome.org/World/podcasts/uploads/e59ac5d618d7daf4c7f33ba72957c466/gnome-podcasts-0.4.6.tar.xz; domain = "gitlab.gnome.org";
sha256 = "0g2rk3w251fp5jwbxs5ya1adv8nsgdqjy1vmfg8qqab6qyndhbrc"; owner = "World";
repo = "podcasts";
rev = version;
sha256 = "0vy5i77bv8c22ldhrnr4z6kx22zqnb1lg3s7y8673bqjgd7dppi0";
}; };
patches = [ cargoSha256 = "1h0n8zclb8a1b1ri83viiwwzlj3anm38m4cp38aqyf6q40qga35q";
# podcasts-data would fail to build because it errors on warnings
(fetchpatch {
url = "https://gitlab.gnome.org/World/podcasts/commit/7dc1b25ee7fc59a188312d31b1fa00c3110ae63e.patch";
sha256 = "03ibbh1snk1391vnni529agqs14lzg5g0axjgpf3gn8dwwh1yvd5";
})
];
# src = fetchFromGitLab {
# domain = "gitlab.gnome.org";
# owner = "World";
# repo = "podcasts";
# rev = version;
# sha256 = "15xj98dhxvys0cnya9488qsfsm0ys1wy69wkc39z8j6hwdm7byq2";
# };
nativeBuildInputs = [ nativeBuildInputs = [
meson ninja pkgconfig gettext cargo rustc python3 wrapGAppsHook meson
]; ninja
buildInputs = [ pkgconfig
glib gtk3 libhandy dbus openssl sqlite gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-bad gettext
cargo
rustc
python3
wrapGAppsHook
]; ];
# cargoSha256 = "0721b5f700vvvzvmdl8nfjaa6j412q1fjssgrjv8n6rmn9z13d2v"; buildInputs = [
glib
gtk3
libhandy
dbus
openssl
sqlite
gst_all_1.gstreamer
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-bad
];
# use Meson/Ninja phases
configurePhase = null;
buildPhase = null;
checkPhase = null;
installPhase = null;
# tests require network
doCheck = false;
postPatch = '' postPatch = ''
chmod +x scripts/compile-gschema.py # patchShebangs requires executable file chmod +x scripts/compile-gschema.py # patchShebangs requires executable file
patchShebangs scripts/compile-gschema.py patchShebangs scripts/compile-gschema.py scripts/cargo.sh scripts/test.sh
''; '';
meta = with stdenv.lib; { meta = with stdenv.lib; {

View File

@ -22,7 +22,7 @@
, libpulseaudio ? null , libpulseaudio ? null
, libselinux ? null , libselinux ? null
, libsepol ? null , libsepol ? null
, p11_kit ? null , p11-kit ? null
, utillinux ? null , utillinux ? null
, qtbase , qtbase
, qtx11extras , qtx11extras
@ -66,7 +66,7 @@ mkDerivation rec {
libpulseaudio libpulseaudio
libselinux libselinux
libsepol libsepol
p11_kit p11-kit
utillinux utillinux
] ]
++ lib.optionals withGstreamer (with gst_all_1; [ ++ lib.optionals withGstreamer (with gst_all_1; [

View File

@ -1,20 +1,46 @@
{ stdenv, fetchFromGitLab, substituteAll, meson, ninja, pkgconfig, vala_0_40, gettext { stdenv
, gnome3, libnotify, itstool, glib, gtk3, libxml2, gnome-online-accounts , fetchFromGitLab
, coreutils, libpeas, libsecret, pcre, libxkbcommon, wrapGAppsHook , substituteAll
, libpthreadstubs, libXdmcp, epoxy, at-spi2-core, dbus, libgpgerror , meson
, appstream-glib, desktop-file-utils, duplicity , ninja
, pkgconfig
, vala
, gettext
, gnome3
, libnotify
, itstool
, glib
, gtk3
, libxml2
, gnome-online-accounts
, coreutils
, libsoup
, libsecret
, pcre
, libxkbcommon
, wrapGAppsHook
, libpthreadstubs
, libXdmcp
, epoxy
, at-spi2-core
, dbus
, libgpgerror
, json-glib
, appstream-glib
, desktop-file-utils
, duplicity
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "deja-dup"; pname = "deja-dup";
version = "38.3"; version = "40.4";
src = fetchFromGitLab { src = fetchFromGitLab {
domain = "gitlab.gnome.org"; domain = "gitlab.gnome.org";
owner = "World"; owner = "World";
repo = pname; repo = pname;
rev = version; rev = version;
sha256 = "1bnvmdlm67k1b6115x75j3nl92x5yl4psq5pna2w6cg9npxdd3fa"; sha256 = "0x9z8z1mh1sxi28ilml3pvbc0g6ghcbyiy002rziwwlarxnbwkky";
}; };
patches = [ patches = [
@ -22,37 +48,55 @@ stdenv.mkDerivation rec {
src = ./fix-paths.patch; src = ./fix-paths.patch;
inherit coreutils; inherit coreutils;
}) })
# Hardcode GSettings path for Nautilus extension to avoid crashes from missing schemas
./hardcode-gsettings.patch ./hardcode-gsettings.patch
]; ];
postPatch = '' postPatch = ''
substituteInPlace deja-dup/nautilus/NautilusExtension.c --subst-var-by DEJA_DUP_GSETTINGS_PATH ${glib.makeSchemaPath "$out" "${pname}-${version}"} # substitute variable from hardcode-gsettings.patch
substituteInPlace deja-dup/nautilus/NautilusExtension.c --subst-var-by DEJA_DUP_GSETTINGS_PATH "${glib.makeSchemaPath (placeholder "out") "${pname}-${version}"}"
''; '';
nativeBuildInputs = [ nativeBuildInputs = [
meson ninja pkgconfig vala_0_40 gettext itstool meson
appstream-glib desktop-file-utils libxml2 wrapGAppsHook ninja
pkgconfig
vala
gettext
itstool
appstream-glib
desktop-file-utils
libxml2
wrapGAppsHook
]; ];
buildInputs = [ buildInputs = [
libnotify libpeas glib gtk3 libsecret libnotify
pcre libxkbcommon libpthreadstubs libXdmcp epoxy gnome3.nautilus libsoup
at-spi2-core dbus gnome-online-accounts libgpgerror glib
gtk3
libsecret
pcre
libxkbcommon
libpthreadstubs
libXdmcp
epoxy
gnome3.nautilus
at-spi2-core
dbus
gnome-online-accounts # GOA not used any more, only for transferring legacy keys
libgpgerror
json-glib
]; ];
# TODO: hard code the path
# https://gitlab.gnome.org/World/deja-dup/merge_requests/32
propagatedUserEnvPkgs = [ duplicity ]; propagatedUserEnvPkgs = [ duplicity ];
# install nautilus plug-in to correct path
PKG_CONFIG_LIBNAUTILUS_EXTENSION_EXTENSIONDIR = "${placeholder "out"}/lib/nautilus/extensions-3.0"; PKG_CONFIG_LIBNAUTILUS_EXTENSION_EXTENSIONDIR = "${placeholder "out"}/lib/nautilus/extensions-3.0";
postInstall = ''
glib-compile-schemas $out/share/glib-2.0/schemas
'';
postFixup = ''
# Unwrap accidentally wrapped library
mv $out/libexec/deja-dup/tools/.libduplicity.so-wrapped $out/libexec/deja-dup/tools/libduplicity.so
'';
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "A simple backup tool"; description = "A simple backup tool";
longDescription = '' longDescription = ''
@ -60,7 +104,7 @@ stdenv.mkDerivation rec {
of backing up the Right Way (encrypted, off-site, and regular) \ of backing up the Right Way (encrypted, off-site, and regular) \
and uses duplicity as the backend. and uses duplicity as the backend.
''; '';
homepage = https://wiki.gnome.org/Apps/DejaDup; homepage = "https://wiki.gnome.org/Apps/DejaDup";
license = licenses.gpl3Plus; license = licenses.gpl3Plus;
maintainers = with maintainers; [ jtojnar joncojonathan ]; maintainers = with maintainers; [ jtojnar joncojonathan ];
platforms = platforms.linux; platforms = platforms.linux;

View File

@ -1,38 +1,16 @@
--- a/deja-dup/nautilus/NautilusExtension.c --- a/deja-dup/nautilus/NautilusExtension.c
+++ b/deja-dup/nautilus/NautilusExtension.c +++ b/deja-dup/nautilus/NautilusExtension.c
@@ -24,6 +24,8 @@ @@ -313,7 +313,12 @@
#include <glib/gi18n-lib.h>
GList *dirs = NULL;
+GSettingsSchemaSource *schema_source = NULL;
+GSettingsSchema *schema = NULL;
GSettings *settings = NULL;
// This will treat a < b iff a is 'lower' in the file tree than b
@@ -313,7 +315,13 @@
bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR); bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR);
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
- settings = g_settings_new("org.gnome.DejaDup"); - settings = g_settings_new(APPLICATION_ID);
+ schema_source = g_settings_schema_source_new_from_directory ("@DEJA_DUP_GSETTINGS_PATH@", + g_autoptr (GSettingsSchemaSource) schema_source = g_settings_schema_source_new_from_directory ("@DEJA_DUP_GSETTINGS_PATH@",
+ g_settings_schema_source_get_default (), TRUE, NULL); + g_settings_schema_source_get_default (), TRUE, NULL);
+ +
+ schema = g_settings_schema_source_lookup (schema_source, + g_autoptr (GSettingsSchema) schema = g_settings_schema_source_lookup (schema_source, APPLICATION_ID, FALSE);
+ "org.gnome.DejaDup", FALSE);
+ +
+ settings = g_settings_new_full (schema, NULL, NULL); + settings = g_settings_new_full (schema, NULL, NULL);
g_signal_connect(settings, "changed::include-list", g_signal_connect(settings, "changed::include-list",
update_include_excludes, NULL); update_include_excludes, NULL);
g_signal_connect(settings, "changed::exclude-list", g_signal_connect(settings, "changed::exclude-list",
@@ -329,7 +337,11 @@
void nautilus_module_shutdown(void)
{
+ g_settings_schema_source_unref(schema_source);
+ g_settings_schema_unref(schema);
g_object_unref(settings);
+ schema_source = NULL;
+ schema = NULL;
settings = NULL;
update_include_excludes(); /* will clear it now that settings is NULL */

View File

@ -1,6 +1,6 @@
let let
version = "2.6.4"; version = "2.6.5";
sha256 = "11l93w97961zig4gqf345j9l20g0mjp7fayl1mdwdp14hhd5zk5g"; sha256 = "1ykrsphqil68051wwp9b0259gsmfrj9xmx0pfhh2yvmmjzv7k4fv";
cargoSha256 = "1q6cbms7j1h726bvq38npxkjkmz14b5ir9c4z7pb0jcy7gkplyxx"; cargoSha256 = "1xqmnirx2r91q5gy1skxl0f79xvaqzimq3l0cj4xvfms7mpdfbg1";
in in
import ./parity.nix { inherit version sha256 cargoSha256; } import ./parity.nix { inherit version sha256 cargoSha256; }

View File

@ -1,6 +1,6 @@
let let
version = "2.5.9"; version = "2.5.10";
sha256 = "06gmfw5l8n5i35dimsmj6dn0fxhbp53zjrdvbkff63r5kfqnwnx2"; sha256 = "0s8llcb1xdzs2zb6rnbsa9hck7dj4m8mamzkkvr0xjmgvigskf64";
cargoSha256 = "1kdy0bnmyqx4rhpq0a8gliy6mws68n035kfkxrfa6cxr2cn53dyb"; cargoSha256 = "16nf6y0hyffwdhxn1w4ms4zycs5lkzir8sj6c2lgsabig057hb6z";
in in
import ./parity.nix { inherit version sha256 cargoSha256; } import ./parity.nix { inherit version sha256 cargoSha256; }

View File

@ -27,6 +27,7 @@
, qt4 , qt4
, withQt5 ? false , withQt5 ? false
, qtbase , qtbase
, yelp-tools
}: }:
with stdenv.lib; with stdenv.lib;
@ -47,7 +48,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ nativeBuildInputs = [
autoconf autoconf
automake automake
gnome3.yelp-tools yelp-tools
gnome3.yelp-xsl gnome3.yelp-xsl
gobject-introspection gobject-introspection
gtk-doc gtk-doc

View File

@ -1,5 +1,5 @@
{ avahiSupport ? false # build support for Avahi in libinfinity { avahiSupport ? false # build support for Avahi in libinfinity
, stdenv, fetchFromGitHub, autoconf, automake, pkgconfig, wrapGAppsHook , stdenv, fetchFromGitHub, autoconf, automake, pkgconfig, wrapGAppsHook, yelp-tools
, gtkmm3, gsasl, gtksourceview3, libxmlxx, libinfinity, intltool, itstool, gnome3 }: , gtkmm3, gsasl, gtksourceview3, libxmlxx, libinfinity, intltool, itstool, gnome3 }:
let let
@ -13,7 +13,7 @@ in stdenv.mkDerivation {
sha256 = "0q7lq64yn16lxvj4jphs8y9194h0xppj8k7y9x8b276krraak2az"; sha256 = "0q7lq64yn16lxvj4jphs8y9194h0xppj8k7y9x8b276krraak2az";
}; };
nativeBuildInputs = [ autoconf automake pkgconfig intltool itstool gnome3.yelp-tools wrapGAppsHook ]; nativeBuildInputs = [ autoconf automake pkgconfig intltool itstool yelp-tools wrapGAppsHook ];
buildInputs = [ gtkmm3 gsasl gtksourceview3 libxmlxx libinf ]; buildInputs = [ gtkmm3 gsasl gtksourceview3 libxmlxx libinf ];
preConfigure = "./autogen.sh"; preConfigure = "./autogen.sh";

View File

@ -21,13 +21,13 @@ let
in in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "neovim-unwrapped"; pname = "neovim-unwrapped";
version = "0.4.2"; version = "0.4.3";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "neovim"; owner = "neovim";
repo = "neovim"; repo = "neovim";
rev = "v${version}"; rev = "v${version}";
sha256 = "13w446plvgl219lhj29jyimhiqvs1y1byrz4qpdmxgyddmx9xqss"; sha256 = "03p7pic7hw9yxxv7fbgls1f42apx3lik2k6mpaz1a109ngyc5kaj";
}; };
patches = [ patches = [

View File

@ -52,6 +52,8 @@ in stdenv.mkDerivation rec {
pname = "gimp"; pname = "gimp";
version = "2.10.14"; version = "2.10.14";
outputs = [ "out" "dev" ];
src = fetchurl { src = fetchurl {
url = "http://download.gimp.org/pub/gimp/v${lib.versions.majorMinor version}/${pname}-${version}.tar.bz2"; url = "http://download.gimp.org/pub/gimp/v${lib.versions.majorMinor version}/${pname}-${version}.tar.bz2";
sha256 = "0m6wdnfvsxyhimdd4v3351g4r1fklllnbipbwcfym3h7q88hz6yz"; sha256 = "0m6wdnfvsxyhimdd4v3351g4r1fklllnbipbwcfym3h7q88hz6yz";

View File

@ -68,13 +68,20 @@ stdenv.lib.makeScope pkgs.newScope (self: with self; {
Filters/Generic/FFT Forward Filters/Generic/FFT Forward
Filters/Generic/FFT Inverse Filters/Generic/FFT Inverse
*/ */
name = "fourier-0.4.1"; name = "fourier-0.4.3";
buildInputs = with pkgs; [ fftw ]; buildInputs = with pkgs; [ fftw ];
postInstall = "fail";
installPhase = "installPlugins fourier";
src = fetchurl { src = fetchurl {
url = "http://registry.gimp.org/files/${name}.tar.gz"; url = "https://www.lprp.fr/files/old-web/soft/gimp/${name}.tar.gz";
sha256 = "1pr3y3zl9w8xs1circdrxpr98myz9m8wfzy022al79z4pdanwvs1"; sha256 = "0mf7f8vaqs2madx832x3kcxw3hv3w3wampvzvaps1mkf2kvrjbsn";
};
installPhase = "installPlugins fourier";
meta = with stdenv.lib; {
description = "GIMP plug-in to do the fourier transform";
homepage = "https://people.via.ecp.fr/~remi/soft/gimp/gimp_plugin_en.php3#fourier";
license = with licenses; [ gpl3Plus ];
}; };
}; };

View File

@ -1,6 +1,6 @@
{ stdenv, fetchurl, barcode, gnome3, autoreconfHook { stdenv, fetchurl, barcode, gnome3, autoreconfHook
, gtk3, gtk-doc, libxml2, librsvg , libtool, libe-book, gsettings-desktop-schemas , gtk3, gtk-doc, libxml2, librsvg , libtool, libe-book, gsettings-desktop-schemas
, intltool, itstool, makeWrapper, pkgconfig , intltool, itstool, makeWrapper, pkgconfig, yelp-tools
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ autoreconfHook pkgconfig makeWrapper intltool ]; nativeBuildInputs = [ autoreconfHook pkgconfig makeWrapper intltool ];
buildInputs = [ buildInputs = [
barcode gtk3 gtk-doc gnome3.yelp-tools barcode gtk3 gtk-doc yelp-tools
gnome3.gnome-common gsettings-desktop-schemas gnome3.gnome-common gsettings-desktop-schemas
itstool libxml2 librsvg libe-book libtool itstool libxml2 librsvg libe-book libtool
]; ];

View File

@ -17,13 +17,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "ideogram"; pname = "ideogram";
version = "1.2.2"; version = "1.3.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "cassidyjames"; owner = "cassidyjames";
repo = pname; repo = pname;
rev = version; rev = version;
sha256 = "1qakgg3y4n2vcnykk2004ndvwmjbk2yy0p4j30mlb7p14dxscif6"; sha256 = "0ghc7hk4b4r3a0x9r30rrgv3rarxyjr2hf9ig244xwvhh5rn3j10";
}; };
nativeBuildInputs = [ nativeBuildInputs = [
@ -45,14 +45,6 @@ stdenv.mkDerivation rec {
xorg.libXtst xorg.libXtst
]; ];
patches = [
# See: https://github.com/cassidyjames/ideogram/issues/26
(fetchpatch {
url = "https://github.com/cassidyjames/ideogram/commit/65994ee11bd21f8316b057cec01afbf50639a708.patch";
sha256 = "12vrvvggpqq53dmhbm7gbbbigncn19m1fjln9wxaady21m0w776c";
})
];
postPatch = '' postPatch = ''
chmod +x meson/post_install.py chmod +x meson/post_install.py
patchShebangs meson/post_install.py patchShebangs meson/post_install.py

View File

@ -1,81 +0,0 @@
diff --git a/Core/Geometry/Transform.cc b/Core/Geometry/Transform.cc
index 4f16fdc..0da4679 100644
--- a/Core/Geometry/Transform.cc
+++ b/Core/Geometry/Transform.cc
@@ -28,6 +28,7 @@
#include <cassert>
#include <cstring>
+#include <cstdio>
#include <Core/Util/TypeDescription.h>
#include <Core/Geometry/Transform.h>
diff --git a/Core/Util/FullFileName.cc b/Core/Util/FullFileName.cc
index 7a2cad7..7710e92 100644
--- a/Core/Util/FullFileName.cc
+++ b/Core/Util/FullFileName.cc
@@ -29,6 +29,7 @@
#include <Core/Util/FullFileName.h>
#include <iostream>
+#include <cstdio>
namespace SCIRun {
diff --git a/Externals/particle-system-mm/src/sizingfield/LFS.cxx b/Externals/particle-system-mm/src/sizingfield/LFS.cxx
index d1fa5aa..a5a4358 100644
--- a/Externals/particle-system-mm/src/sizingfield/LFS.cxx
+++ b/Externals/particle-system-mm/src/sizingfield/LFS.cxx
@@ -1,5 +1,6 @@
#include <cstdlib>
#include <iostream>
+#include <cstdio>
#include <LFS.h>
using namespace std;
diff --git a/Externals/slivr/Point.cc b/Externals/slivr/Point.cc
index d3be03e..ed4e503 100644
--- a/Externals/slivr/Point.cc
+++ b/Externals/slivr/Point.cc
@@ -42,6 +42,7 @@
#include <slivr/Point.h>
#include <slivr/Vector.h>
#include <iostream>
+#include <cstdio>
namespace SLIVR {
diff --git a/Externals/slivr/Transform.cc b/Externals/slivr/Transform.cc
index c0a4430..520179f 100644
--- a/Externals/slivr/Transform.cc
+++ b/Externals/slivr/Transform.cc
@@ -47,6 +47,7 @@
#include <math.h>
#include <string.h>
#include <iostream>
+#include <cstdio>
using namespace SLIVR;
using namespace std;
diff --git a/Externals/slivr/Vector.cc b/Externals/slivr/Vector.cc
index 8370d65..8b04bb9 100644
--- a/Externals/slivr/Vector.cc
+++ b/Externals/slivr/Vector.cc
@@ -43,6 +43,7 @@
#include <slivr/Point.h>
#include <assert.h>
#include <iostream>
+#include <cstdio>
using std::istream;
using std::ostream;
diff --git a/Externals/vispack/src/image/imagefile.txx b/Externals/vispack/src/image/imagefile.txx
index ced2590..13a32b2 100644
--- a/Externals/vispack/src/image/imagefile.txx
+++ b/Externals/vispack/src/image/imagefile.txx
@@ -1,3 +1,5 @@
+#include <cstdio>
+
template <class T>
int write_raw(const char* name, const VISImage<T>& im)
{

View File

@ -1,54 +0,0 @@
{ fetchurl, stdenv, cmake, wxGTK, itk, libGLU, libGL, libXft, libXext, libXi, zlib, libXmu,
libuuid }:
assert (stdenv ? glibc);
stdenv.mkDerivation {
name = "seg3d-1.12_20090930";
src = fetchurl {
url = https://www.sci.utah.edu/releases/seg3d_v1.12/Seg3D_1.12_20090930_source.tgz;
sha256 = "1wr6rc6v5qjjkmws8yrc03z35h3iydxk1z28p06v1wdnca0y71z8";
};
patches = [ ./cstdio.patch ];
cmakeFlags = [
"-DM_LIBRARY=${stdenv.glibc.out}/lib/libm.so"
"-DDL_LIBRARY=${stdenv.glibc.out}/lib/libdl.so"
"-DBUILD_UTILS=1"
"-DBUILD_SEG3D=1"
"-DBUILD_DATAFLOW=0"
"-DBUILD_SHARED_LIBS=0"
"-DWITH_X11=1"
"-DBUILD_BIOMESH3D=1"
"-DWITH_TETGEN=1"
"-DBUILD_TYPE=Release"
"-DWITH_WXWIDGETS=ON"
"-DITK_DIR=${itk}/lib/InsightToolkit"
"-DGDCM_LIBRARY=${itk}/lib/libitkgdcm.a"
];
makeFlags = "VERBOSE=1";
preBuild = ''
export LD_LIBRARY_PATH=`pwd`/lib
export NIX_LDFLAGS="$NIX_LDFLAGS -lGLU -lSM -lICE -lX11 -lXext -luuid";
'';
preUnpack = ''
set -x
sourceRoot=`pwd`/src
'';
postInstall = ''
cp Seg3D $out/bin
exit 1
'';
buildInputs = [ cmake wxGTK itk libGLU libGL libXft libXext libXi zlib libXmu libuuid ];
meta = {
broken = true;
};
}

View File

@ -1,7 +1,8 @@
{ {
mkDerivation, lib, mkDerivation, lib,
extra-cmake-modules, kdoctools, extra-cmake-modules, kdoctools,
karchive, ki18n, kio, perl, python, php, qttools, karchive, ki18n, kio, perl, python, php, qttools
, kdbusaddons
}: }:
mkDerivation { mkDerivation {
@ -11,5 +12,5 @@ mkDerivation {
maintainers = with lib.maintainers; [ orivej ]; maintainers = with lib.maintainers; [ orivej ];
}; };
nativeBuildInputs = [ extra-cmake-modules kdoctools ]; nativeBuildInputs = [ extra-cmake-modules kdoctools ];
buildInputs = [ karchive ki18n kio perl python php qttools ]; buildInputs = [ karchive ki18n kio perl python php qttools kdbusaddons ];
} }

View File

@ -2,6 +2,7 @@
, ilmbase, libXi, libX11, libXext, libXrender , ilmbase, libXi, libX11, libXext, libXrender
, libjpeg, libpng, libsamplerate, libsndfile , libjpeg, libpng, libsamplerate, libsndfile
, libtiff, libGLU, libGL, openal, opencolorio, openexr, openimageio, openjpeg_1, python3Packages , libtiff, libGLU, libGL, openal, opencolorio, openexr, openimageio, openjpeg_1, python3Packages
, openvdb, libXxf86vm, tbb
, zlib, fftw, opensubdiv, freetype, jemalloc, ocl-icd, addOpenGLRunpath , zlib, fftw, opensubdiv, freetype, jemalloc, ocl-icd, addOpenGLRunpath
, jackaudioSupport ? false, libjack2 , jackaudioSupport ? false, libjack2
, cudaSupport ? config.cudaSupport or false, cudatoolkit , cudaSupport ? config.cudaSupport or false, cudatoolkit
@ -15,11 +16,11 @@ let python = python3Packages.python; in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "blender"; pname = "blender";
version = "2.80"; version = "2.81";
src = fetchurl { src = fetchurl {
url = "https://download.blender.org/source/${pname}-${version}.tar.gz"; url = "https://download.blender.org/source/${pname}-${version}.tar.xz";
sha256 = "1h550jisdbis50hxwk5kxrvrk1a6sh2fsri3yyj66vhzbi87x7fd"; sha256 = "1prp0f2152f1sz23jlc86vndfvmplb7qhllikkirq7hgpykrshna";
}; };
nativeBuildInputs = [ cmake ] ++ optional cudaSupport addOpenGLRunpath; nativeBuildInputs = [ cmake ] ++ optional cudaSupport addOpenGLRunpath;
@ -29,6 +30,7 @@ stdenv.mkDerivation rec {
freetype libjpeg libpng libsamplerate libsndfile libtiff libGLU libGL openal freetype libjpeg libpng libsamplerate libsndfile libtiff libGLU libGL openal
opencolorio openexr openimageio openjpeg_1 python zlib fftw jemalloc opencolorio openexr openimageio openjpeg_1 python zlib fftw jemalloc
(opensubdiv.override { inherit cudaSupport; }) (opensubdiv.override { inherit cudaSupport; })
openvdb libXxf86vm tbb
makeWrapper makeWrapper
] ]
++ optional jackaudioSupport libjack2 ++ optional jackaudioSupport libjack2
@ -56,6 +58,9 @@ stdenv.mkDerivation rec {
"-DWITH_PYTHON_INSTALL=OFF" "-DWITH_PYTHON_INSTALL=OFF"
"-DWITH_PYTHON_INSTALL_NUMPY=OFF" "-DWITH_PYTHON_INSTALL_NUMPY=OFF"
"-DPYTHON_NUMPY_PATH=${python3Packages.numpy}/${python.sitePackages}" "-DPYTHON_NUMPY_PATH=${python3Packages.numpy}/${python.sitePackages}"
"-DWITH_OPENVDB=ON"
"-DWITH_TBB=ON"
"-DWITH_IMAGE_OPENJPEG=ON"
] ]
++ optional jackaudioSupport "-DWITH_JACK=ON" ++ optional jackaudioSupport "-DWITH_JACK=ON"
++ optional cudaSupport "-DWITH_CYCLES_CUDA_BINARIES=ON" ++ optional cudaSupport "-DWITH_CYCLES_CUDA_BINARIES=ON"

View File

@ -29,13 +29,13 @@ with stdenv.lib;
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "elogind"; pname = "elogind";
version = "239.5"; version = "241.3";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "elogind"; owner = "elogind";
repo = pname; repo = pname;
rev = "v${version}"; rev = "v${version}";
sha256 = "1gdiy4vbx4gs2hnb79x14zi530mlq26glxpzp3c95w8l058wj4ba"; sha256 = "0jpb55prqq5cm3w2gy9766cbaqknjvbrbniyshb8bz1q31vf4jlq";
}; };
nativeBuildInputs = [ nativeBuildInputs = [

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "et"; pname = "et";
version = "0.1.1"; version = "0.1.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "geistesk"; owner = "geistesk";
repo = "et"; repo = "et";
rev = version; rev = version;
sha256 = "167w9qwfpd63rgy0xmkkkh5krmd91q42c3ijy3j099krgdfbb9bc"; sha256 = "0i0lgmnly8n7y4y6pb10pxgxyz8s5zk26k8z1g1578v1wan01lnq";
}; };
buildInputs = [ libnotify gdk-pixbuf ]; buildInputs = [ libnotify gdk-pixbuf ];
@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Minimal libnotify-based (egg) timer"; description = "Minimal libnotify-based (egg) timer";
homepage = https://github.com/geistesk/et; homepage = "https://github.com/geistesk/et";
license = licenses.gpl3; license = licenses.gpl3;
platforms = platforms.unix; platforms = platforms.unix;
maintainers = with maintainers; [ geistesk ]; maintainers = with maintainers; [ geistesk ];

View File

@ -1,5 +1,5 @@
{ stdenv, fetchFromGitHub, meson, ninja, gettext, python3, fetchpatch, { stdenv, fetchFromGitHub, meson, ninja, gettext, python3, fetchpatch,
pkgconfig, libxml2, json-glib , sqlite, itstool, librsvg, pkgconfig, libxml2, json-glib , sqlite, itstool, librsvg, yelp-tools,
vala, gtk3, gnome3, desktop-file-utils, wrapGAppsHook, gobject-introspection vala, gtk3, gnome3, desktop-file-utils, wrapGAppsHook, gobject-introspection
}: }:
@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
itstool itstool
desktop-file-utils desktop-file-utils
vala vala
gnome3.yelp-tools yelp-tools
wrapGAppsHook wrapGAppsHook
# For https://github.com/FontManager/master/blob/master/lib/unicode/meson.build # For https://github.com/FontManager/master/blob/master/lib/unicode/meson.build
gobject-introspection gobject-introspection

View File

@ -20,13 +20,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "formatter"; pname = "formatter";
version = "0.3.0"; version = "0.3.1";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "Djaler"; owner = "Djaler";
repo = "Formatter"; repo = "Formatter";
rev = version; rev = version;
sha256 = "145742dk16736zxj30rzn61h4k0xpggfsbqkxllxd302mgbmxlzq"; sha256 = "1ghxd2h0pklhlrjslfr46vza1kjsm3mr0sdzzjiqi9jd6hddnk7i";
}; };
patches = [ patches = [

View File

@ -30,6 +30,7 @@
, postgresql , postgresql
, gnome3 , gnome3
, gobject-introspection , gobject-introspection
, yelp-tools
, wrapGAppsHook , wrapGAppsHook
}: }:
@ -67,7 +68,7 @@ in stdenv.mkDerivation rec {
libtool libtool
mm-common mm-common
intltool intltool
gnome3.yelp-tools yelp-tools
itstool itstool
doxygen doxygen
graphviz graphviz

View File

@ -2,13 +2,13 @@
mkDerivation rec { mkDerivation rec {
pname = "gpxsee"; pname = "gpxsee";
version = "7.17"; version = "7.18";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "tumic0"; owner = "tumic0";
repo = "GPXSee"; repo = "GPXSee";
rev = version; rev = version;
sha256 = "10mch709m4ws73yzkrx9lm2hwzl179ggpk6xkbhkvnl7rsd2yz08"; sha256 = "1z3knfqfv0rwsq66adk0qngw1r500yvy4z259bygqkzbn2l5fcjk";
}; };
nativeBuildInputs = [ qmake ]; nativeBuildInputs = [ qmake ];

View File

@ -1,4 +1,4 @@
{ stdenv, requireFile, zlib, libpng, libSM, libICE, fontconfig, xorg, libGLU, libGL, alsaLib, dbus, xkeyboardconfig, bc }: { stdenv, requireFile, zlib, libpng, libSM, libICE, fontconfig, xorg, libGLU, libGL, alsaLib, dbus, xkeyboardconfig, bc, addOpenGLRunpath }:
let let
ld_library_path = builtins.concatStringsSep ":" [ ld_library_path = builtins.concatStringsSep ":" [
@ -24,6 +24,7 @@ let
zlib zlib
libpng libpng
dbus dbus
addOpenGLRunpath.driverLink
]) ])
]; ];
license_dir = "~/.config/houdini"; license_dir = "~/.config/houdini";

View File

@ -16,6 +16,7 @@
, sshfs , sshfs
, makeWrapper , makeWrapper
, kwayland , kwayland
, kio
}: }:
mkDerivation rec { mkDerivation rec {
@ -30,7 +31,7 @@ mkDerivation rec {
buildInputs = [ buildInputs = [
libfakekey libXtst libfakekey libXtst
ki18n kiconthemes kcmutils kconfigwidgets kdbusaddons knotifications ki18n kiconthemes kcmutils kconfigwidgets kdbusaddons knotifications
qca-qt5 qtx11extras makeWrapper kwayland qca-qt5 qtx11extras makeWrapper kwayland kio
]; ];
nativeBuildInputs = [ extra-cmake-modules kdoctools ]; nativeBuildInputs = [ extra-cmake-modules kdoctools ];

View File

@ -1,21 +1,47 @@
{ stdenv, pkgconfig, fetchurl, buildPythonApplication { stdenv
, autoreconfHook, wrapGAppsHook, gobject-introspection , pkgconfig
, gettext, yelp-tools, itstool, libxmlxx3 , fetchurl
, python, pygobject3, gtk3, gnome3, substituteAll , buildPythonApplication
, at-spi2-atk, at-spi2-core, pyatspi, dbus, dbus-python, pyxdg , autoreconfHook
, xkbcomp, procps, lsof, coreutils, gsettings-desktop-schemas , wrapGAppsHook
, speechd, brltty, liblouis, setproctitle, gst_all_1, gst-python , gobject-introspection
, gettext
, yelp-tools
, itstool
, libxmlxx3
, python
, pygobject3
, gtk3
, gnome3
, substituteAll
, at-spi2-atk
, at-spi2-core
, pyatspi
, dbus
, dbus-python
, pyxdg
, xkbcomp
, procps
, lsof
, coreutils
, gsettings-desktop-schemas
, speechd
, brltty
, liblouis
, setproctitle
, gst_all_1
, gst-python
}: }:
buildPythonApplication rec { buildPythonApplication rec {
pname = "orca"; pname = "orca";
version = "3.34.0"; version = "3.34.1";
format = "other"; format = "other";
src = fetchurl { src = fetchurl {
url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz"; url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "10h258cprsxzb2hz9wqrkzv1yrsm19ws46l6fsnspywza5wq0z4p"; sha256 = "1q38n7hyshkiszmn361skxjynxr31lcms7a1iny6d0zlpmh1vnk4";
}; };
patches = [ patches = [
@ -29,19 +55,40 @@ buildPythonApplication rec {
]; ];
nativeBuildInputs = [ nativeBuildInputs = [
autoreconfHook wrapGAppsHook pkgconfig libxmlxx3 autoreconfHook
gettext yelp-tools itstool gobject-introspection wrapGAppsHook
pkgconfig
libxmlxx3
gettext
yelp-tools
itstool
gobject-introspection
]; ];
propagatedBuildInputs = [ propagatedBuildInputs = [
pygobject3 pyatspi dbus-python pyxdg brltty liblouis speechd gst-python setproctitle pygobject3
pyatspi
dbus-python
pyxdg
brltty
liblouis
speechd
gst-python
setproctitle
]; ];
strictDeps = false; strictDeps = false;
buildInputs = [ buildInputs = [
python gtk3 at-spi2-atk at-spi2-core dbus gsettings-desktop-schemas python
gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good gtk3
at-spi2-atk
at-spi2-core
dbus
gsettings-desktop-schemas
gst_all_1.gstreamer
gst_all_1.gst-plugins-base
gst_all_1.gst-plugins-good
]; ];
passthru = { passthru = {
@ -51,7 +98,7 @@ buildPythonApplication rec {
}; };
meta = with stdenv.lib; { meta = with stdenv.lib; {
homepage = https://wiki.gnome.org/Projects/Orca; homepage = "https://wiki.gnome.org/Projects/Orca";
description = "Screen reader"; description = "Screen reader";
longDescription = '' longDescription = ''
A free, open source, flexible and extensible screen reader that provides A free, open source, flexible and extensible screen reader that provides

View File

@ -19,6 +19,6 @@ stdenv.mkDerivation rec {
homepage = http://tasktools.org; homepage = http://tasktools.org;
license = licenses.mit; license = licenses.mit;
maintainers = with maintainers; [ matthiasbeyer ]; maintainers = with maintainers; [ matthiasbeyer ];
platforms = platforms.linux; platforms = platforms.unix;
}; };
} }

View File

@ -1,20 +1,22 @@
{ enableGUI ? true, enablePDFtoPPM ? true, useT1Lib ? false { enableGUI ? true
, stdenv, fetchurl, zlib, libpng, freetype ? null, t1lib ? null , enablePDFtoPPM ? true
, cmake, qtbase ? null, qtsvg ? null, wrapQtAppsHook , enablePrinting ? true
, stdenv, fetchzip, cmake, makeDesktopItem
, zlib, libpng, cups ? null, freetype ? null
, qtbase ? null, qtsvg ? null, wrapQtAppsHook
}: }:
assert enableGUI -> qtbase != null && qtsvg != null && freetype != null; assert enableGUI -> qtbase != null && qtsvg != null && freetype != null;
assert enablePDFtoPPM -> freetype != null; assert enablePDFtoPPM -> freetype != null;
assert useT1Lib -> t1lib != null; assert enablePrinting -> cups != null;
assert !useT1Lib; # t1lib has multiple unpatched security vulnerabilities stdenv.mkDerivation rec {
pname = "xpdf";
version = "4.02";
stdenv.mkDerivation { src = fetchzip {
name = "xpdf-4.00"; url = "https://xpdfreader-dl.s3.amazonaws.com/${pname}-${version}.tar.gz";
sha256 = "0dzwq6fnk013wa4l5mjpvm4mms2mh5hbrxv4rhk2ab5ljbzz7b2w";
src = fetchurl {
url = http://www.xpdfreader.com/dl/xpdf-4.00.tar.gz;
sha256 = "1mhn89738vjva14xr5gblc2zrdgzmpqbbjdflqdmpqv647294ggz";
}; };
# Fix "No known features for CXX compiler", see # Fix "No known features for CXX compiler", see
@ -26,20 +28,33 @@ stdenv.mkDerivation {
[ cmake ] [ cmake ]
++ stdenv.lib.optional enableGUI wrapQtAppsHook; ++ stdenv.lib.optional enableGUI wrapQtAppsHook;
cmakeFlags = ["-DSYSTEM_XPDFRC=/etc/xpdfrc" "-DA4_PAPER=ON"]; cmakeFlags = ["-DSYSTEM_XPDFRC=/etc/xpdfrc" "-DA4_PAPER=ON" "-DOPI_SUPPORT=ON"]
++ stdenv.lib.optional (!enablePrinting) "-DXPDFWIDGET_PRINTING=OFF";
buildInputs = [ zlib libpng ] ++ buildInputs = [ zlib libpng ] ++
stdenv.lib.optional enableGUI qtbase ++ stdenv.lib.optional enableGUI qtbase ++
stdenv.lib.optional useT1Lib t1lib ++ stdenv.lib.optional enablePrinting cups ++
stdenv.lib.optional enablePDFtoPPM freetype; stdenv.lib.optional enablePDFtoPPM freetype;
# Debian uses '-fpermissive' to bypass some errors on char* constantness.
CXXFLAGS = "-O2 -fpermissive";
hardeningDisable = [ "format" ]; hardeningDisable = [ "format" ];
desktopItem = makeDesktopItem {
name = "xpdf";
desktopName = "Xpdf";
comment = "Views Adobe PDF files";
icon = "xpdf";
exec = "xpdf %f";
categories = "Office;";
terminal = "false";
};
postInstall = ''
install -Dm644 ${desktopItem}/share/applications/xpdf.desktop $out/share/applications/xpdf.desktop
install -Dm644 $src/xpdf-qt/xpdf-icon.svg $out/share/pixmaps/xpdf.svg
'';
meta = with stdenv.lib; { meta = with stdenv.lib; {
homepage = https://www.xpdfreader.com; homepage = "https://www.xpdfreader.com";
description = "Viewer for Portable Document Format (PDF) files"; description = "Viewer for Portable Document Format (PDF) files";
longDescription = '' longDescription = ''
XPDF includes multiple tools for viewing and processing PDF files. XPDF includes multiple tools for viewing and processing PDF files.
@ -56,5 +71,13 @@ stdenv.mkDerivation {
''; '';
license = with licenses; [ gpl2 gpl3 ]; license = with licenses; [ gpl2 gpl3 ];
platforms = platforms.unix; platforms = platforms.unix;
maintainers = with maintainers; [ sikmir ];
knownVulnerabilities = [
"CVE-2018-7453: loop in PDF objects"
"CVE-2018-16369: loop in PDF objects"
"CVE-2019-9587: loop in PDF objects"
"CVE-2019-9588: loop in PDF objects"
"CVE-2019-16088: loop in PDF objects"
];
}; };
} }

View File

@ -19,13 +19,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "ephemeral"; pname = "ephemeral";
version = "6.0.0"; version = "6.1.1";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "cassidyjames"; owner = "cassidyjames";
repo = "ephemeral"; repo = "ephemeral";
rev = version; rev = version;
sha256 = "0g9rrx41grmgf4nn2pp17yhjxxayk826gs6nmkfdnimd4gmlf3nk"; sha256 = "1i77chbjjg8zda5bnn1wj4h00a88awfls5b3i3dqwgsi356hv4wb";
}; };
nativeBuildInputs = [ nativeBuildInputs = [

View File

@ -1,11 +1,11 @@
{ lib, buildGoPackage, fetchFromGitHub }: { lib, buildGoPackage, fetchFromGitHub }:
# SHA of ${version} for the tool's help output # SHA of ${version} for the tool's help output
let rev = "7ad367535a6710802085d41e0dbb53df359b9882"; let rev = "c9c2a461cd3397909fe6e45ff71836347ef89fd8";
in in
buildGoPackage rec { buildGoPackage rec {
pname = "sonobuoy"; pname = "sonobuoy";
version = "0.15.0"; version = "0.16.1";
goPackagePath = "github.com/heptio/sonobuoy"; goPackagePath = "github.com/heptio/sonobuoy";
@ -19,10 +19,10 @@ buildGoPackage rec {
''; '';
src = fetchFromGitHub { src = fetchFromGitHub {
sha256 = "0dkmhmr7calk8mkdxfpy3yjzk10ja4gz1jq8pgk3v8rh04f4h1x5"; sha256 = "14qc5a7jbr403wjpk6pgpb94i72yx647sg9srz07q6drq650kyfv";
rev = "v${version}"; rev = "v${version}";
repo = "sonobuoy"; repo = "sonobuoy";
owner = "heptio"; owner = "vmware-tanzu";
}; };
meta = with lib; { meta = with lib; {
@ -36,8 +36,8 @@ buildGoPackage rec {
accessible and non-destructive manner. accessible and non-destructive manner.
''; '';
homepage = "https://github.com/heptio/sonobuoy"; homepage = "https://sonobuoy.io";
license = licenses.asl20; license = licenses.asl20;
maintainers = with maintainers; [ carlosdagos ]; maintainers = with maintainers; [ carlosdagos saschagrunert ];
}; };
} }

View File

@ -1,4 +1,4 @@
{ pkgs, stdenv, fetchFromGitHub, makeWrapper, makeDesktopItem, electron_5, riot-web, yarn2nix-moretea }: { pkgs, stdenv, fetchFromGitHub, makeWrapper, makeDesktopItem, electron_5, riot-web, mkYarnPackage }:
# Notes for maintainers: # Notes for maintainers:
# * versions of `riot-web` and `riot-desktop` should be kept in sync. # * versions of `riot-web` and `riot-desktop` should be kept in sync.
@ -14,7 +14,7 @@ let
sha256 = "1xi5zg3602d7gdjxskpk2q3anpn2drrkxyirfvi9mzcfp2r05557"; sha256 = "1xi5zg3602d7gdjxskpk2q3anpn2drrkxyirfvi9mzcfp2r05557";
}; };
in yarn2nix-moretea.mkYarnPackage rec { in mkYarnPackage rec {
name = "riot-desktop-${version}"; name = "riot-desktop-${version}";
inherit version; inherit version;

View File

@ -1,5 +1,5 @@
#!/usr/bin/env nix-shell #!/usr/bin/env nix-shell
#!nix-shell -I nixpkgs=../../../../../ -i bash -p wget yarn2nix-moretea.yarn2nix #!nix-shell -I nixpkgs=../../../../../ -i bash -p wget yarn2nix
set -euo pipefail set -euo pipefail

View File

@ -14,11 +14,11 @@ assert pulseaudioSupport -> libpulseaudio != null;
let let
inherit (stdenv.lib) concatStringsSep makeBinPath optional; inherit (stdenv.lib) concatStringsSep makeBinPath optional;
version = "3.0.309708.1027"; version = "3.0.317369.1110";
srcs = { srcs = {
x86_64-linux = fetchurl { x86_64-linux = fetchurl {
url = "https://zoom.us/client/${version}/zoom_x86_64.tar.xz"; url = "https://zoom.us/client/${version}/zoom_x86_64.tar.xz";
sha256 = "0g0nmlbcps331vdnfj571lzhcw8cb2gxbll09jananxdpnmwv5l6"; sha256 = "0r4wp9qb1739xwr24kglc4sj8qaxwr4nh5p1igi3x6f1f8gczia7";
}; };
}; };

View File

@ -2,13 +2,13 @@
buildGoPackage rec { buildGoPackage rec {
pname = "rclone"; pname = "rclone";
version = "1.50.1"; version = "1.50.2";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = pname; owner = pname;
repo = pname; repo = pname;
rev = "v${version}"; rev = "v${version}";
sha256 = "0iwm0a9h6xxdsqw86xlqcsz7h4pzsg134m6yfqj5s2xg7kfy5laq"; sha256 = "0yaspkh88q8i58i8g8mm6sqb75hczavz2lvzdd1iif1bqgi6b5fz";
}; };
goPackagePath = "github.com/rclone/rclone"; goPackagePath = "github.com/rclone/rclone";

View File

@ -4,13 +4,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "meteo"; pname = "meteo";
version = "0.9.7"; version = "0.9.8";
src = fetchFromGitLab { src = fetchFromGitLab {
owner = "bitseater"; owner = "bitseater";
repo = pname; repo = pname;
rev = version; rev = version;
sha256 = "014x3mg2dc58h1qwy2nrz3a5mzdnbzish8zgn3x6lj6szfz5c72n"; sha256 = "1ll5fja0dqxcr6hrh2dk4hgw9gf8ms9bcp1ifznd21byxzyhdlr0";
}; };
nativeBuildInputs = [ nativeBuildInputs = [
@ -40,9 +40,9 @@ stdenv.mkDerivation rec {
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Know the forecast of the next hours & days"; description = "Know the forecast of the next hours & days";
homepage = https://gitlab.com/bitseater/meteo; homepage = https://gitlab.com/bitseater/meteo;
license = licenses.gpl3Plus; license = licenses.gpl3Plus;
maintainers = with maintainers; [ worldofpeace ]; maintainers = with maintainers; [ worldofpeace ];
platforms = platforms.linux; platforms = platforms.linux;
}; };
} }

View File

@ -3,13 +3,13 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "aesop"; pname = "aesop";
version = "1.1.2"; version = "1.1.3";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "lainsce"; owner = "lainsce";
repo = pname; repo = pname;
rev = version; rev = version;
sha256 = "1vadm8295jb7jaah2qykf3h9zvl5c013sanmxqi4snmmq4pa32ax"; sha256 = "1hnwhxaz0zx4fswrxjzyv5s77v5fimn87yid9sd1qgfv2g1ck0jc";
}; };
nativeBuildInputs = [ nativeBuildInputs = [

View File

@ -65,6 +65,8 @@ in stdenv.mkDerivation rec {
inherit (primary-src) src; inherit (primary-src) src;
outputs = [ "out" "dev" ];
# For some reason librdf_redland sometimes refers to rasqal.h instead # For some reason librdf_redland sometimes refers to rasqal.h instead
# of rasqal/rasqal.h # of rasqal/rasqal.h
NIX_CFLAGS_COMPILE = [ "-I${librdf_rasqal}/include/rasqal" ] ++ lib.optional stdenv.isx86_64 "-mno-fma"; NIX_CFLAGS_COMPILE = [ "-I${librdf_rasqal}/include/rasqal" ] ++ lib.optional stdenv.isx86_64 "-mno-fma";
@ -276,6 +278,9 @@ in stdenv.mkDerivation rec {
cp -r sysui/desktop/icons "$out/share" cp -r sysui/desktop/icons "$out/share"
sed -re 's@Icon=libreoffice(dev)?[0-9.]*-?@Icon=@' -i "$out/share/applications/"*.desktop sed -re 's@Icon=libreoffice(dev)?[0-9.]*-?@Icon=@' -i "$out/share/applications/"*.desktop
mkdir -p $dev
cp -r include $dev
''; '';
configureFlags = [ configureFlags = [

View File

@ -65,6 +65,8 @@ in stdenv.mkDerivation rec {
inherit (primary-src) src; inherit (primary-src) src;
outputs = [ "out" "dev" ];
# For some reason librdf_redland sometimes refers to rasqal.h instead # For some reason librdf_redland sometimes refers to rasqal.h instead
# of rasqal/rasqal.h # of rasqal/rasqal.h
NIX_CFLAGS_COMPILE = [ "-I${librdf_rasqal}/include/rasqal" ]; NIX_CFLAGS_COMPILE = [ "-I${librdf_rasqal}/include/rasqal" ];
@ -276,6 +278,9 @@ in stdenv.mkDerivation rec {
cp -r sysui/desktop/icons "$out/share" cp -r sysui/desktop/icons "$out/share"
sed -re 's@Icon=libreoffice(dev)?[0-9.]*-?@Icon=@' -i "$out/share/applications/"*.desktop sed -re 's@Icon=libreoffice(dev)?[0-9.]*-?@Icon=@' -i "$out/share/applications/"*.desktop
mkdir -p $dev
cp -r include $dev
''; '';
configureFlags = [ configureFlags = [

View File

@ -2,13 +2,13 @@
callPackage ./generic.nix (args // rec { callPackage ./generic.nix (args // rec {
pname = "freeoffice"; pname = "freeoffice";
version = "971"; version = "973";
edition = "2018"; edition = "2018";
suiteName = "FreeOffice"; suiteName = "FreeOffice";
src = fetchurl { src = fetchurl {
url = "https://www.softmaker.net/down/softmaker-freeoffice-${version}-amd64.tgz"; url = "https://www.softmaker.net/down/softmaker-freeoffice-${version}-amd64.tgz";
sha256 = "1h36pjbpbiy4cw383cbrwh1jx2kp1ay29734zailmhifz53gj44f"; sha256 = "0xac4ynf1lfh8qmni5bhp4ybaamdfngva4bqaq21n1m4pgrx1ba5";
}; };
archive = "freeoffice${edition}.tar.lzma"; archive = "freeoffice${edition}.tar.lzma";

View File

@ -96,6 +96,10 @@ in stdenv.mkDerivation rec {
done done
done done
# freeoffice 973 misses the 96x96 application icons, giving broken symbolic links
# remove broken symbolic links
find $out -xtype l -ls -exec rm {} \;
# Add desktop items # Add desktop items
${desktopItems.planmaker.buildCommand} ${desktopItems.planmaker.buildCommand}
${desktopItems.presentations.buildCommand} ${desktopItems.presentations.buildCommand}

View File

@ -2,14 +2,14 @@
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "freebayes"; pname = "freebayes";
version = "2017-08-23"; version = "1.3.1";
src = fetchFromGitHub { src = fetchFromGitHub {
name = "freebayes-${version}-src"; name = "freebayes-${version}-src";
owner = "ekg"; owner = "ekg";
repo = "freebayes"; repo = "freebayes";
rev = "8d2b3a060da473e1f4f89be04edfce5cba63f1d3"; rev = "v${version}";
sha256 = "0yyrgk2639lz1yvg4jf0ccahnkic31dy77q05pb3i28rjf37v45z"; sha256 = "035nriknjqq8gvil81vvsmvqwi35v80q8h1cw24vd1gdyn1x7bys";
fetchSubmodules = true; fetchSubmodules = true;
}; };

View File

@ -298,6 +298,10 @@ stdenv.mkDerivation {
# As of 2.19.0, t5562 refers to #!/usr/bin/perl # As of 2.19.0, t5562 refers to #!/usr/bin/perl
patchShebangs t/t5562/invoke-with-content-length.pl patchShebangs t/t5562/invoke-with-content-length.pl
'' + stdenv.lib.optionalString stdenv.isDarwin ''
# XXX: Some tests added in 2.24.0 fail.
# Please try to re-enable on the next release.
disable_test t7816-grep-binary-pattern
'' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl '' '' + stdenv.lib.optionalString stdenv.hostPlatform.isMusl ''
# Test fails (as of 2.17.0, musl 1.1.19) # Test fails (as of 2.17.0, musl 1.1.19)
disable_test t3900-i18n-commit disable_test t3900-i18n-commit

View File

@ -1,7 +1,7 @@
{ stdenv, lib, fetchurl, fetchFromGitLab, bundlerEnv { stdenv, lib, fetchurl, fetchFromGitLab, bundlerEnv
, ruby, tzdata, git, nettools, nixosTests, nodejs , ruby, tzdata, git, nettools, nixosTests, nodejs
, gitlabEnterprise ? false, callPackage, yarn , gitlabEnterprise ? false, callPackage, yarn
, yarn2nix-moretea, replace , fixup_yarn_lock, replace
}: }:
let let
@ -62,7 +62,7 @@ let
yarn config --offline set yarn-offline-mirror ${yarnOfflineCache} yarn config --offline set yarn-offline-mirror ${yarnOfflineCache}
# Fixup "resolved"-entries in yarn.lock to match our offline cache # Fixup "resolved"-entries in yarn.lock to match our offline cache
${yarn2nix-moretea.fixup_yarn_lock}/bin/fixup_yarn_lock yarn.lock ${fixup_yarn_lock}/bin/fixup_yarn_lock yarn.lock
yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive

View File

@ -1,5 +1,5 @@
#!/usr/bin/env nix-shell #!/usr/bin/env nix-shell
#! nix-shell -i python3 -p bundix common-updater-scripts nix nix-prefetch-git python3 python3Packages.requests python3Packages.lxml python3Packages.click python3Packages.click-log vgo2nix yarn2nix-moretea.yarn2nix #! nix-shell -i python3 -p bundix common-updater-scripts nix nix-prefetch-git python3 python3Packages.requests python3Packages.lxml python3Packages.click python3Packages.click-log vgo2nix yarn2nix
import click import click
import click_log import click_log

View File

@ -1,6 +1,17 @@
{ stdenv, fetchurl, rustPlatform, darwin, openssl, libsodium, nettle, clang, libclang, pkgconfig }: { stdenv, fetchurl, rustPlatform, darwin, openssl, libsodium, nettle, clang, libclang, pkgconfig }:
rustPlatform.buildRustPackage rec { let
# nettle-sys=1.0.1 requires the des-compat.h header, but it was removed in
# nettle 3.5. See https://nest.pijul.com/pijul_org/pijul/discussions/416
# Remove with the next release
nettle_34 = nettle.overrideAttrs (_oldAttrs: rec {
version = "3.4.1";
src = fetchurl {
url = "mirror://gnu/nettle/nettle-${version}.tar.gz";
sha256 = "1bcji95n1iz9p9vsgdgr26v6s7zhpsxfbjjwpqcihpfd6lawyhgr";
};
});
in rustPlatform.buildRustPackage rec {
pname = "pijul"; pname = "pijul";
version = "0.12.0"; version = "0.12.0";
@ -20,7 +31,7 @@ rustPlatform.buildRustPackage rec {
LIBCLANG_PATH = libclang + "/lib"; LIBCLANG_PATH = libclang + "/lib";
buildInputs = [ openssl libsodium nettle libclang ] ++ stdenv.lib.optionals stdenv.isDarwin buildInputs = [ openssl libsodium nettle_34 libclang ] ++ stdenv.lib.optionals stdenv.isDarwin
(with darwin.apple_sdk.frameworks; [ CoreServices Security ]); (with darwin.apple_sdk.frameworks; [ CoreServices Security ]);
doCheck = false; doCheck = false;

View File

@ -1,7 +1,7 @@
{ stdenv, fetchFromGitHub { stdenv, fetchFromGitHub
, meson, ninja, pkgconfig, makeWrapper , meson, ninja, pkgconfig, makeWrapper
, wlroots, wayland, wayland-protocols, pixman, libxkbcommon , wlroots, wayland, wayland-protocols, pixman, libxkbcommon
, systemd, mesa, libX11 , systemd, libGL, libX11
, xwayland ? null , xwayland ? null
}: }:
@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
buildInputs = [ buildInputs = [
wlroots wayland wayland-protocols pixman libxkbcommon wlroots wayland wayland-protocols pixman libxkbcommon
# TODO: Not specified but required: # TODO: Not specified but required:
systemd mesa libX11 systemd libGL libX11
]; ];
enableParallelBuilding = true; enableParallelBuilding = true;

View File

@ -185,7 +185,7 @@ rec {
keyutils.lib keyutils.lib
libjack2 libjack2
fribidi fribidi
p11_kit p11-kit
# libraries not on the upstream include list, but nevertheless expected # libraries not on the upstream include list, but nevertheless expected
# by at least one appimage # by at least one appimage

View File

@ -1,6 +1,8 @@
addEmacsVars () { addEmacsVars () {
if [[ -d "$1/share/emacs/site-lisp" ]]; then if test -d $1/share/emacs/site-lisp; then
export EMACSLOADPATH="$1/share/emacs/site-lisp${EMACSLOADPATH:+:}${EMACSLOADPATH-}" # it turns out, that the trailing : is actually required
# see https://www.gnu.org/software/emacs/manual/html_node/elisp/Library-Search.html
export EMACSLOADPATH="$1/share/emacs/site-lisp:${EMACSLOADPATH-}"
fi fi
} }

View File

@ -1,27 +1,41 @@
{ stdenv, fetchurl, itstool, libxml2, gettext, gnome3 }: { stdenv
, fetchurl
, gettext
, gnome3
, itstool
, libxml2
, yelp-tools
}:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "gnome-user-docs"; pname = "gnome-user-docs";
version = "3.2.2"; version = "3.34.1";
src = fetchurl { src = fetchurl {
url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz"; url = "mirror://gnome/sources/gnome-user-docs/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
sha256 = "1ka0nw2kc85p10y8x31v0wv06a88k7qrgafp4ys04y9fzz0rkcjj"; sha256 = "11m9fv8k2hynrcgah4jvbm6yczg0s1ly302mipysbwpn6gbdkvf2";
}; };
nativeBuildInputs = [ itstool libxml2 gettext ]; nativeBuildInputs = [
gettext
itstool
libxml2
yelp-tools
];
enableParallelBuilding = true;
passthru = { passthru = {
updateScript = gnome3.updateScript { updateScript = gnome3.updateScript {
packageName = pname; packageName = pname;
attrPath = "gnome3.gnome-user-docs";
}; };
}; };
meta = { meta = with stdenv.lib; {
homepage = "https://gitlab.gnome.org/GNOME/gnome-user-docs"; description = "User and system administration help for the GNOME desktop";
description = "GNOME User Documentation"; homepage = "https://help.gnome.org/users/gnome-help/";
license = stdenv.lib.licenses.cc-by-30; license = licenses.cc-by-30;
maintainers = gnome3.maintainers; maintainers = gnome3.maintainers;
platforms = platforms.linux;
}; };
} }

View File

@ -14,7 +14,7 @@ in fetchzip {
meta = with lib; { meta = with lib; {
description = "Unicode CJK font with over 36000 Han characters"; description = "Unicode CJK font with over 36000 Han characters";
homepage = http://www.babelstone.co.uk/Fonts/Han.html; homepage = https://www.babelstone.co.uk/Fonts/Han.html;
license = licenses.free; license = licenses.free;
platforms = platforms.all; platforms = platforms.all;

View File

@ -1,7 +1,7 @@
{ lib, fetchzip }: { lib, fetchzip }:
let let
version = "1.7.2"; version = "1.8.0";
in in
fetchzip rec { fetchzip rec {
@ -15,7 +15,7 @@ fetchzip rec {
unzip -j $downloadedFile README.md -d $out/share/doc/${name} unzip -j $downloadedFile README.md -d $out/share/doc/${name}
''; '';
sha256 = "1fwvbqfrgb539xybwdawvwa8cg4f215kw905rgl9a6p0iwa1nxqk"; sha256 = "07y2w6xzkbaj6vr95fvvnmwq1pw9jib4z02xf8937dx812yic9ni";
meta = with lib; { meta = with lib; {
homepage = https://github.com/belluzj/fantasque-sans; homepage = https://github.com/belluzj/fantasque-sans;

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