Merge staging-next into staging
This commit is contained in:
commit
1d18c5a0fe
5
.github/CODEOWNERS
vendored
5
.github/CODEOWNERS
vendored
@ -167,3 +167,8 @@
|
||||
/nixos/modules/services/monitoring/prometheus/exporters.nix @WilliButz
|
||||
/nixos/modules/services/monitoring/prometheus/exporters.xml @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
|
||||
|
@ -1780,6 +1780,12 @@
|
||||
githubId = 875324;
|
||||
name = "David Johnson";
|
||||
};
|
||||
dmrauh = {
|
||||
email = "dmrauh@posteo.de";
|
||||
github = "dmrauh";
|
||||
githubId = 37698547;
|
||||
name = "Dominik Michael Rauh";
|
||||
};
|
||||
dmvianna = {
|
||||
email = "dmlvianna@gmail.com";
|
||||
github = "dmvianna";
|
||||
@ -2515,6 +2521,7 @@
|
||||
gazally = {
|
||||
email = "gazally@runbox.com";
|
||||
github = "gazally";
|
||||
githubId = 16470252;
|
||||
name = "Gemini Lasswell";
|
||||
};
|
||||
gebner = {
|
||||
@ -3700,6 +3707,18 @@
|
||||
githubId = 449813;
|
||||
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 = {
|
||||
email = "kylelacy+nix@pm.me";
|
||||
github = "kylewlacy";
|
||||
@ -6087,7 +6106,7 @@
|
||||
name = "Shahrukh Khan";
|
||||
};
|
||||
shanemikel = {
|
||||
email = "shanemikel1@gmail.com";
|
||||
email = "shanepearlman@pm.me";
|
||||
github = "shanemikel";
|
||||
githubId = 6720672;
|
||||
name = "Shane Pearlman";
|
||||
|
@ -13,9 +13,7 @@
|
||||
<para>
|
||||
It sets <xref linkend="opt-services.xserver.enable"/>,
|
||||
<xref linkend="opt-services.xserver.displayManager.sddm.enable"/>,
|
||||
<xref linkend="opt-services.xserver.desktopManager.plasma5.enable"/> (
|
||||
<link linkend="opt-services.xserver.desktopManager.plasma5.enableQt4Support">
|
||||
without Qt4 Support</link>), and
|
||||
<xref linkend="opt-services.xserver.desktopManager.plasma5.enable"/>, and
|
||||
<xref linkend="opt-services.xserver.libinput.enable"/> to true. It also
|
||||
includes glxinfo and firefox in the system packages list.
|
||||
</para>
|
||||
|
@ -45,12 +45,12 @@
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>git tag -a -s -m "Release 17.09-beta" 17.09-beta
|
||||
&& git push --tags</literal>
|
||||
&& git push origin 17.09-beta</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
From the master branch run <literal>git checkout -B
|
||||
From the master branch run <literal>git checkout -b
|
||||
release-17.09</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
@ -157,7 +157,7 @@
|
||||
<listitem>
|
||||
<para>
|
||||
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>
|
||||
</para>
|
||||
</listitem>
|
||||
@ -169,8 +169,8 @@
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Change <literal>stableBranch</literal> to true and wait for channel to
|
||||
update.
|
||||
Change <literal>stableBranch</literal> to <literal>true</literal> in Hydra and wait for
|
||||
the channel to update.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
@ -193,9 +193,11 @@
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Update http://nixos.org/nixos/download.html and
|
||||
http://nixos.org/nixos/manual in
|
||||
https://github.com/NixOS/nixos-org-configurations
|
||||
Update the
|
||||
<link xlink:href="https://github.com/NixOS/nixos-homepage/commit/2a37975d5a617ecdfca94696242b6f32ffcba9f1"><code>NIXOS_SERIES</code></link>
|
||||
in the
|
||||
<link xlink:href="https://github.com/NixOS/nixos-homepage">nixos-homepage</link>
|
||||
repository.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
@ -212,7 +214,8 @@
|
||||
</listitem>
|
||||
<listitem>
|
||||
<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
|
||||
included.
|
||||
</para>
|
||||
|
@ -392,11 +392,11 @@
|
||||
<filename>hardware-configuration.nix</filename> is included from
|
||||
<filename>configuration.nix</filename> and will be overwritten by future
|
||||
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
|
||||
configuration for known-hardware</link> at this point or after
|
||||
installation.
|
||||
|
||||
|
||||
</para>
|
||||
<note>
|
||||
<para>
|
||||
@ -418,11 +418,11 @@
|
||||
Do the installation:
|
||||
<screen>
|
||||
<prompt># </prompt>nixos-install</screen>
|
||||
Cross fingers. If this fails due to a temporary problem (such as a network
|
||||
issue while downloading binaries from the NixOS binary cache), you can
|
||||
just re-run <command>nixos-install</command>. Otherwise, fix your
|
||||
<filename>configuration.nix</filename> and then re-run
|
||||
<command>nixos-install</command>.
|
||||
This will install your system based on the configuration you provided.
|
||||
If anything fails due to a configuration problem or any other issue
|
||||
(such as a network outage while downloading binaries from the NixOS
|
||||
binary cache), you can re-run <command>nixos-install</command> after
|
||||
fixing your <filename>configuration.nix</filename>.
|
||||
</para>
|
||||
<para>
|
||||
As the last step, <command>nixos-install</command> will ask you to set the
|
||||
|
@ -163,6 +163,19 @@
|
||||
time during the releases development (if viable).
|
||||
</para>
|
||||
</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>
|
||||
KDE’s 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>
|
||||
</section>
|
||||
|
||||
|
@ -290,10 +290,15 @@ class Machine:
|
||||
|
||||
def wait_for_monitor_prompt(self) -> str:
|
||||
assert self.monitor is not None
|
||||
answer = ""
|
||||
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) "):
|
||||
return answer
|
||||
break
|
||||
return answer
|
||||
|
||||
def send_monitor_command(self, command: str) -> str:
|
||||
message = ("{}\n".format(command)).encode()
|
||||
@ -606,12 +611,15 @@ class Machine:
|
||||
+ os.environ.get("QEMU_OPTS", "")
|
||||
)
|
||||
|
||||
environment = {
|
||||
"QEMU_OPTS": qemu_options,
|
||||
"SHARED_DIR": self.shared_dir,
|
||||
"USE_TMPDIR": "1",
|
||||
}
|
||||
environment.update(dict(os.environ))
|
||||
environment = dict(os.environ)
|
||||
environment.update(
|
||||
{
|
||||
"TMPDIR": self.state_dir,
|
||||
"SHARED_DIR": self.shared_dir,
|
||||
"USE_TMPDIR": "1",
|
||||
"QEMU_OPTS": qemu_options,
|
||||
}
|
||||
)
|
||||
|
||||
self.process = subprocess.Popen(
|
||||
self.script,
|
||||
@ -749,7 +757,7 @@ def run_tests() -> None:
|
||||
if tests is not None:
|
||||
with log.nested("running the VM test script"):
|
||||
try:
|
||||
exec(tests)
|
||||
exec(tests, globals())
|
||||
except Exception as e:
|
||||
eprint("error: {}".format(str(e)))
|
||||
sys.exit(1)
|
||||
|
@ -211,11 +211,11 @@ upload_image() {
|
||||
log "Registering snapshot $snapshot_id as AMI"
|
||||
|
||||
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=(
|
||||
--root-device-name /dev/sda1
|
||||
--root-device-name /dev/xvda
|
||||
--sriov-net-support simple
|
||||
--ena-support
|
||||
--virtualization-type hvm
|
||||
|
@ -10,7 +10,7 @@ let
|
||||
isQtStyle = cfg.platformTheme == "gtk2" && cfg.style != "adwaita";
|
||||
|
||||
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.";
|
||||
|
||||
in
|
||||
|
@ -11,7 +11,6 @@ with lib;
|
||||
services.xserver = {
|
||||
desktopManager.plasma5 = {
|
||||
enable = true;
|
||||
enableQt4Support = false;
|
||||
};
|
||||
|
||||
# Automatically login as nixos.
|
||||
|
@ -9,7 +9,6 @@
|
||||
displayManager.sddm.enable = true;
|
||||
desktopManager.plasma5 = {
|
||||
enable = true;
|
||||
enableQt4Support = false;
|
||||
};
|
||||
libinput.enable = true; # for touchpad support on many laptops
|
||||
};
|
||||
|
@ -23,7 +23,8 @@ with lib;
|
||||
###### implementation
|
||||
config = mkIf config.programs.adb.enable {
|
||||
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 = {};
|
||||
};
|
||||
}
|
||||
|
@ -44,7 +44,8 @@ in
|
||||
serviceConfig = {
|
||||
DynamicUser = true;
|
||||
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";
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -390,6 +390,7 @@ in {
|
||||
in {
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
before = [ "phpfpm-nextcloud.service" ];
|
||||
path = [ occ ];
|
||||
script = ''
|
||||
chmod og+x ${cfg.home}
|
||||
ln -sf ${pkgs.nextcloud}/apps ${cfg.home}/
|
||||
|
@ -262,6 +262,7 @@ in {
|
||||
in {
|
||||
Slice = "phpfpm.slice";
|
||||
PrivateDevices = true;
|
||||
PrivateTmp = true;
|
||||
ProtectSystem = "full";
|
||||
ProtectHome = true;
|
||||
# XXX: We need AF_NETLINK to make the sendmail SUID binary from postfix work
|
||||
|
@ -309,7 +309,7 @@ in
|
||||
gnome-shell
|
||||
gnome-shell-extensions
|
||||
gnome-themes-extra
|
||||
gnome-user-docs
|
||||
pkgs.gnome-user-docs
|
||||
pkgs.orca
|
||||
pkgs.glib # for gsettings
|
||||
pkgs.gnome-menus
|
||||
|
@ -27,20 +27,13 @@ in
|
||||
example = "vlc";
|
||||
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 [
|
||||
(mkIf cfg.enable {
|
||||
@ -173,9 +166,7 @@ in
|
||||
|
||||
# Phonon audio backend
|
||||
++ 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" && cfg.enableQt4Support) pkgs.phonon-backend-vlc
|
||||
|
||||
# Optional hardware support features
|
||||
++ lib.optionals config.hardware.bluetooth.enable [ bluedevil bluez-qt ]
|
||||
|
@ -31,6 +31,44 @@ let
|
||||
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
|
||||
|
||||
{
|
||||
@ -156,6 +194,8 @@ in
|
||||
cat - > /run/gdm/.config/gnome-initial-setup-done <<- EOF
|
||||
yes
|
||||
EOF
|
||||
'' + optionalString hasDefaultUserSession ''
|
||||
${setSessionScript}/bin/set-session ${defaultSessionName}
|
||||
'';
|
||||
};
|
||||
|
||||
|
86
nixos/modules/services/x11/display-managers/set-session.py
Executable file
86
nixos/modules/services/x11/display-managers/set-session.py
Executable 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()
|
@ -201,7 +201,7 @@ let
|
||||
(assertValueOneOf "IPv6AcceptRA" boolValues)
|
||||
(assertValueOneOf "IPv4ProxyARP" boolValues)
|
||||
(assertValueOneOf "IPv6ProxyNDP" boolValues)
|
||||
(assertValueOneOf "IPv6PrefixDelegation" boolValues)
|
||||
(assertValueOneOf "IPv6PrefixDelegation" (boolValues ++ [ "dhcpv6" "static" ]))
|
||||
(assertValueOneOf "ActiveSlave" boolValues)
|
||||
(assertValueOneOf "PrimarySlave" boolValues)
|
||||
(assertValueOneOf "ConfigureWithoutCarrier" boolValues)
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({pkgs, lib, ...}:
|
||||
import ./make-test-python.nix ({pkgs, lib, ...}:
|
||||
|
||||
let
|
||||
cfg = {
|
||||
@ -109,105 +109,105 @@ let
|
||||
# For other ways to deploy a ceph cluster, look at the documentation at
|
||||
# https://docs.ceph.com/docs/master/
|
||||
testscript = { ... }: ''
|
||||
startAll;
|
||||
start_all()
|
||||
|
||||
$monA->waitForUnit("network.target");
|
||||
$osd0->waitForUnit("network.target");
|
||||
$osd1->waitForUnit("network.target");
|
||||
monA.wait_for_unit("network.target")
|
||||
osd0.wait_for_unit("network.target")
|
||||
osd1.wait_for_unit("network.target")
|
||||
|
||||
# Bootstrap ceph-mon daemon
|
||||
$monA->mustSucceed(
|
||||
"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 /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",
|
||||
"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 touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done",
|
||||
"systemctl start ceph-mon-${cfg.monA.name}"
|
||||
);
|
||||
$monA->waitForUnit("ceph-mon-${cfg.monA.name}");
|
||||
$monA->mustSucceed("ceph mon enable-msgr2");
|
||||
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 /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",
|
||||
"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 mkdir -p /var/lib/ceph/mgr/ceph-${cfg.monA.name}/",
|
||||
"sudo -u ceph touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done",
|
||||
"systemctl start ceph-mon-${cfg.monA.name}",
|
||||
)
|
||||
monA.wait_for_unit("ceph-mon-${cfg.monA.name}")
|
||||
monA.succeed("ceph mon enable-msgr2")
|
||||
|
||||
# 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
|
||||
$monA->mustSucceed(
|
||||
"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}"
|
||||
);
|
||||
$monA->waitForUnit("ceph-mgr-a");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
|
||||
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",
|
||||
"systemctl start ceph-mgr-${cfg.monA.name}",
|
||||
)
|
||||
monA.wait_for_unit("ceph-mgr-a")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
|
||||
|
||||
# Send the admin keyring to the OSD machines
|
||||
$monA->mustSucceed("cp /etc/ceph/ceph.client.admin.keyring /tmp/shared");
|
||||
$osd0->mustSucceed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph");
|
||||
$osd1->mustSucceed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph");
|
||||
monA.succeed("cp /etc/ceph/ceph.client.admin.keyring /tmp/shared")
|
||||
osd0.succeed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph")
|
||||
osd1.succeed("cp /tmp/shared/ceph.client.admin.keyring /etc/ceph")
|
||||
|
||||
# Bootstrap both OSDs
|
||||
$osd0->mustSucceed(
|
||||
"mkfs.xfs /dev/vdb",
|
||||
"mkdir -p /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}",
|
||||
"echo '{\"cephx_secret\": \"${cfg.osd0.key}\"}' | ceph osd new ${cfg.osd0.uuid} -i -",
|
||||
);
|
||||
$osd1->mustSucceed(
|
||||
"mkfs.xfs /dev/vdb",
|
||||
"mkdir -p /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}",
|
||||
"echo '{\"cephx_secret\": \"${cfg.osd1.key}\"}' | ceph osd new ${cfg.osd1.uuid} -i -"
|
||||
);
|
||||
osd0.succeed(
|
||||
"mkfs.xfs /dev/vdb",
|
||||
"mkdir -p /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}",
|
||||
'echo \'{"cephx_secret": "${cfg.osd0.key}"}\' | ceph osd new ${cfg.osd0.uuid} -i -',
|
||||
)
|
||||
osd1.succeed(
|
||||
"mkfs.xfs /dev/vdb",
|
||||
"mkdir -p /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}",
|
||||
'echo \'{"cephx_secret": "${cfg.osd1.key}"}\' | ceph osd new ${cfg.osd1.uuid} -i -',
|
||||
)
|
||||
|
||||
# Initialize the OSDs with regular filestore
|
||||
$osd0->mustSucceed(
|
||||
"ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
|
||||
"chown -R ceph:ceph /var/lib/ceph/osd",
|
||||
"systemctl start ceph-osd-${cfg.osd0.name}",
|
||||
);
|
||||
$osd1->mustSucceed(
|
||||
"ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
|
||||
"chown -R ceph:ceph /var/lib/ceph/osd",
|
||||
"systemctl start ceph-osd-${cfg.osd1.name}"
|
||||
);
|
||||
$monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
|
||||
osd0.succeed(
|
||||
"ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
|
||||
"chown -R ceph:ceph /var/lib/ceph/osd",
|
||||
"systemctl start ceph-osd-${cfg.osd0.name}",
|
||||
)
|
||||
osd1.succeed(
|
||||
"ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
|
||||
"chown -R ceph:ceph /var/lib/ceph/osd",
|
||||
"systemctl start ceph-osd-${cfg.osd1.name}",
|
||||
)
|
||||
monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
|
||||
|
||||
$monA->mustSucceed(
|
||||
"ceph osd pool create multi-node-test 100 100",
|
||||
"ceph osd pool ls | grep 'multi-node-test'",
|
||||
"ceph osd pool rename multi-node-test multi-node-other-test",
|
||||
"ceph osd pool ls | grep 'multi-node-other-test'"
|
||||
);
|
||||
$monA->waitUntilSucceeds("ceph -s | grep '1 pools, 100 pgs'");
|
||||
$monA->mustSucceed("ceph osd pool set multi-node-other-test size 2");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep '100 active+clean'");
|
||||
$monA->mustFail(
|
||||
"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"
|
||||
);
|
||||
monA.succeed(
|
||||
"ceph osd pool create multi-node-test 100 100",
|
||||
"ceph osd pool ls | grep 'multi-node-test'",
|
||||
"ceph osd pool rename multi-node-test multi-node-other-test",
|
||||
"ceph osd pool ls | grep 'multi-node-other-test'",
|
||||
)
|
||||
monA.wait_until_succeeds("ceph -s | grep '1 pools, 100 pgs'")
|
||||
monA.succeed("ceph osd pool set multi-node-other-test size 2")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
|
||||
monA.wait_until_succeeds("ceph -s | grep '100 active+clean'")
|
||||
monA.fail(
|
||||
"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",
|
||||
)
|
||||
|
||||
# Shut down ceph on all machines in a very unpolite way
|
||||
$monA->crash;
|
||||
$osd0->crash;
|
||||
$osd1->crash;
|
||||
monA.crash()
|
||||
osd0.crash()
|
||||
osd1.crash()
|
||||
|
||||
# Start it up
|
||||
$osd0->start;
|
||||
$osd1->start;
|
||||
$monA->start;
|
||||
osd0.start()
|
||||
osd1.start()
|
||||
monA.start()
|
||||
|
||||
# Ensure the cluster comes back up again
|
||||
$monA->succeed("ceph -s | grep 'mon: 1 daemons'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'");
|
||||
$monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
|
||||
monA.succeed("ceph -s | grep 'mon: 1 daemons'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
|
||||
monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
|
||||
'';
|
||||
in {
|
||||
name = "basic-multi-node-ceph-cluster";
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({pkgs, lib, ...}:
|
||||
import ./make-test-python.nix ({pkgs, lib, ...}:
|
||||
|
||||
let
|
||||
cfg = {
|
||||
@ -74,100 +74,100 @@ let
|
||||
# For other ways to deploy a ceph cluster, look at the documentation at
|
||||
# https://docs.ceph.com/docs/master/
|
||||
testscript = { ... }: ''
|
||||
startAll;
|
||||
start_all()
|
||||
|
||||
$monA->waitForUnit("network.target");
|
||||
monA.wait_for_unit("network.target")
|
||||
|
||||
# Bootstrap ceph-mon daemon
|
||||
$monA->mustSucceed(
|
||||
"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 /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",
|
||||
"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",
|
||||
"systemctl start ceph-mon-${cfg.monA.name}"
|
||||
);
|
||||
$monA->waitForUnit("ceph-mon-${cfg.monA.name}");
|
||||
$monA->mustSucceed("ceph mon enable-msgr2");
|
||||
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 /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",
|
||||
"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 touch /var/lib/ceph/mon/ceph-${cfg.monA.name}/done",
|
||||
"systemctl start ceph-mon-${cfg.monA.name}",
|
||||
)
|
||||
monA.wait_for_unit("ceph-mon-${cfg.monA.name}")
|
||||
monA.succeed("ceph mon enable-msgr2")
|
||||
|
||||
# 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
|
||||
$monA->mustSucceed(
|
||||
"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",
|
||||
"systemctl start ceph-mgr-${cfg.monA.name}"
|
||||
);
|
||||
$monA->waitForUnit("ceph-mgr-a");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
|
||||
monA.succeed(
|
||||
"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",
|
||||
"systemctl start ceph-mgr-${cfg.monA.name}",
|
||||
)
|
||||
monA.wait_for_unit("ceph-mgr-a")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
|
||||
|
||||
# Bootstrap both OSDs
|
||||
$monA->mustSucceed(
|
||||
"mkfs.xfs /dev/vdb",
|
||||
"mkfs.xfs /dev/vdc",
|
||||
"mkdir -p /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}",
|
||||
"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.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.osd1.key}\"}' | ceph osd new ${cfg.osd1.uuid} -i -"
|
||||
);
|
||||
monA.succeed(
|
||||
"mkfs.xfs /dev/vdb",
|
||||
"mkfs.xfs /dev/vdc",
|
||||
"mkdir -p /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}",
|
||||
"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.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.osd1.key}"}\' | ceph osd new ${cfg.osd1.uuid} -i -',
|
||||
)
|
||||
|
||||
# Initialize the OSDs with regular filestore
|
||||
$monA->mustSucceed(
|
||||
"ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
|
||||
"ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
|
||||
"chown -R ceph:ceph /var/lib/ceph/osd",
|
||||
"systemctl start ceph-osd-${cfg.osd0.name}",
|
||||
"systemctl start ceph-osd-${cfg.osd1.name}"
|
||||
);
|
||||
$monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
|
||||
monA.succeed(
|
||||
"ceph-osd -i ${cfg.osd0.name} --mkfs --osd-uuid ${cfg.osd0.uuid}",
|
||||
"ceph-osd -i ${cfg.osd1.name} --mkfs --osd-uuid ${cfg.osd1.uuid}",
|
||||
"chown -R ceph:ceph /var/lib/ceph/osd",
|
||||
"systemctl start ceph-osd-${cfg.osd0.name}",
|
||||
"systemctl start ceph-osd-${cfg.osd1.name}",
|
||||
)
|
||||
monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
|
||||
|
||||
$monA->mustSucceed(
|
||||
"ceph osd pool create single-node-test 100 100",
|
||||
"ceph osd pool ls | grep 'single-node-test'",
|
||||
"ceph osd pool rename single-node-test single-node-other-test",
|
||||
"ceph osd pool ls | grep 'single-node-other-test'"
|
||||
);
|
||||
$monA->waitUntilSucceeds("ceph -s | grep '1 pools, 100 pgs'");
|
||||
$monA->mustSucceed(
|
||||
"ceph osd getcrushmap -o crush",
|
||||
"crushtool -d crush -o decrushed",
|
||||
"sed 's/step chooseleaf firstn 0 type host/step chooseleaf firstn 0 type osd/' decrushed > modcrush",
|
||||
"crushtool -c modcrush -o recrushed",
|
||||
"ceph osd setcrushmap -i recrushed",
|
||||
"ceph osd pool set single-node-other-test size 2"
|
||||
);
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep '100 active+clean'");
|
||||
$monA->mustFail(
|
||||
"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"
|
||||
);
|
||||
monA.succeed(
|
||||
"ceph osd pool create single-node-test 100 100",
|
||||
"ceph osd pool ls | grep 'single-node-test'",
|
||||
"ceph osd pool rename single-node-test single-node-other-test",
|
||||
"ceph osd pool ls | grep 'single-node-other-test'",
|
||||
)
|
||||
monA.wait_until_succeeds("ceph -s | grep '1 pools, 100 pgs'")
|
||||
monA.succeed(
|
||||
"ceph osd getcrushmap -o crush",
|
||||
"crushtool -d crush -o decrushed",
|
||||
"sed 's/step chooseleaf firstn 0 type host/step chooseleaf firstn 0 type osd/' decrushed > modcrush",
|
||||
"crushtool -c modcrush -o recrushed",
|
||||
"ceph osd setcrushmap -i recrushed",
|
||||
"ceph osd pool set single-node-other-test size 2",
|
||||
)
|
||||
monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
|
||||
monA.wait_until_succeeds("ceph -s | grep '100 active+clean'")
|
||||
monA.fail(
|
||||
"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",
|
||||
)
|
||||
|
||||
# Shut down ceph by stopping ceph.target.
|
||||
$monA->mustSucceed("systemctl stop ceph.target");
|
||||
monA.succeed("systemctl stop ceph.target")
|
||||
|
||||
# Start it up
|
||||
$monA->succeed("systemctl start ceph.target");
|
||||
$monA->waitForUnit("ceph-mon-${cfg.monA.name}");
|
||||
$monA->waitForUnit("ceph-mgr-${cfg.monA.name}");
|
||||
$monA->waitForUnit("ceph-osd-${cfg.osd0.name}");
|
||||
$monA->waitForUnit("ceph-osd-${cfg.osd1.name}");
|
||||
monA.succeed("systemctl start ceph.target")
|
||||
monA.wait_for_unit("ceph-mon-${cfg.monA.name}")
|
||||
monA.wait_for_unit("ceph-mgr-${cfg.monA.name}")
|
||||
monA.wait_for_unit("ceph-osd-${cfg.osd0.name}")
|
||||
monA.wait_for_unit("ceph-osd-${cfg.osd1.name}")
|
||||
|
||||
# Ensure the cluster comes back up again
|
||||
$monA->succeed("ceph -s | grep 'mon: 1 daemons'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'quorum ${cfg.monA.name}'");
|
||||
$monA->waitUntilSucceeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'");
|
||||
$monA->waitUntilSucceeds("ceph -s | grep 'HEALTH_OK'");
|
||||
monA.succeed("ceph -s | grep 'mon: 1 daemons'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'quorum ${cfg.monA.name}'")
|
||||
monA.wait_until_succeeds("ceph osd stat | grep -e '2 osds: 2 up[^,]*, 2 in'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'mgr: ${cfg.monA.name}(active,'")
|
||||
monA.wait_until_succeeds("ceph -s | grep 'HEALTH_OK'")
|
||||
'';
|
||||
in {
|
||||
name = "basic-single-node-ceph-cluster";
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ pkgs, ... }: {
|
||||
import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
name = "clickhouse";
|
||||
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`";
|
||||
in
|
||||
''
|
||||
$machine->start();
|
||||
$machine->waitForUnit("clickhouse.service");
|
||||
$machine->waitForOpenPort(9000);
|
||||
machine.start()
|
||||
machine.wait_for_unit("clickhouse.service")
|
||||
machine.wait_for_open_port(9000)
|
||||
|
||||
$machine->succeed("cat ${tableDDL} | clickhouse-client");
|
||||
$machine->succeed("cat ${insertQuery} | clickhouse-client");
|
||||
$machine->succeed("cat ${selectQuery} | clickhouse-client | grep foo");
|
||||
machine.succeed(
|
||||
"cat ${tableDDL} | clickhouse-client"
|
||||
)
|
||||
machine.succeed(
|
||||
"cat ${insertQuery} | clickhouse-client"
|
||||
)
|
||||
machine.succeed(
|
||||
"cat ${selectQuery} | clickhouse-client | grep foo"
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ pkgs, ...} : {
|
||||
import ./make-test-python.nix ({ pkgs, ...} : {
|
||||
name = "deluge";
|
||||
meta = with pkgs.stdenv.lib.maintainers; {
|
||||
maintainers = [ flokli ];
|
||||
@ -45,18 +45,20 @@ import ./make-test.nix ({ pkgs, ...} : {
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
startAll;
|
||||
start_all()
|
||||
|
||||
$simple->waitForUnit("deluged");
|
||||
$simple->waitForUnit("delugeweb");
|
||||
$simple->waitForOpenPort("8112");
|
||||
$declarative->waitForUnit("network.target");
|
||||
$declarative->waitUntilSucceeds("curl --fail http://simple:8112");
|
||||
simple.wait_for_unit("deluged")
|
||||
simple.wait_for_unit("delugeweb")
|
||||
simple.wait_for_open_port("8112")
|
||||
declarative.wait_for_unit("network.target")
|
||||
declarative.wait_until_succeeds("curl --fail http://simple:8112")
|
||||
|
||||
$declarative->waitForUnit("deluged");
|
||||
$declarative->waitForUnit("delugeweb");
|
||||
$declarative->waitUntilSucceeds("curl --fail http://declarative:3142");
|
||||
$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.wait_for_unit("deluged")
|
||||
declarative.wait_for_unit("delugeweb")
|
||||
declarative.wait_until_succeeds("curl --fail http://declarative:3142")
|
||||
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'"
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix {
|
||||
import ./make-test-python.nix {
|
||||
name = "dovecot";
|
||||
|
||||
machine = { pkgs, ... }: {
|
||||
@ -66,12 +66,12 @@ import ./make-test.nix {
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
$machine->waitForUnit('postfix.service');
|
||||
$machine->waitForUnit('dovecot2.service');
|
||||
$machine->succeed('send-testmail');
|
||||
$machine->succeed('send-lda');
|
||||
$machine->waitUntilFails('[ "$(postqueue -p)" != "Mail queue is empty" ]');
|
||||
$machine->succeed('test-imap');
|
||||
$machine->succeed('test-pop');
|
||||
machine.wait_for_unit("postfix.service")
|
||||
machine.wait_for_unit("dovecot2.service")
|
||||
machine.succeed("send-testmail")
|
||||
machine.succeed("send-lda")
|
||||
machine.wait_until_fails('[ "$(postqueue -p)" != "Mail queue is empty" ]')
|
||||
machine.succeed("test-imap")
|
||||
machine.succeed("test-pop")
|
||||
'';
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ pkgs, ... } : {
|
||||
import ./make-test-python.nix ({ pkgs, ... } : {
|
||||
name = "fancontrol";
|
||||
|
||||
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.
|
||||
testScript = ''
|
||||
$machine->waitForUnit("fancontrol.service");
|
||||
$machine->waitUntilSucceeds("journalctl -eu fancontrol | grep 'Configuration appears to be outdated'");
|
||||
start_all()
|
||||
machine.wait_for_unit("fancontrol.service")
|
||||
machine.wait_until_succeeds(
|
||||
"journalctl -eu fancontrol | grep 'Configuration appears to be outdated'"
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Test the firewall module.
|
||||
|
||||
import ./make-test.nix ( { pkgs, ... } : {
|
||||
import ./make-test-python.nix ( { pkgs, ... } : {
|
||||
name = "firewall";
|
||||
meta = with pkgs.stdenv.lib.maintainers; {
|
||||
maintainers = [ eelco ];
|
||||
@ -36,30 +36,30 @@ import ./make-test.nix ( { pkgs, ... } : {
|
||||
testScript = { nodes, ... }: let
|
||||
newSystem = nodes.walled2.config.system.build.toplevel;
|
||||
in ''
|
||||
$walled->start;
|
||||
$attacker->start;
|
||||
start_all()
|
||||
|
||||
$walled->waitForUnit("firewall");
|
||||
$walled->waitForUnit("httpd");
|
||||
$attacker->waitForUnit("network.target");
|
||||
walled.wait_for_unit("firewall")
|
||||
walled.wait_for_unit("httpd")
|
||||
attacker.wait_for_unit("network.target")
|
||||
|
||||
# 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.
|
||||
$attacker->fail("curl --fail --connect-timeout 2 http://walled/ >&2");
|
||||
$attacker->succeed("ping -c 1 walled >&2");
|
||||
attacker.fail("curl --fail --connect-timeout 2 http://walled/ >&2")
|
||||
attacker.succeed("ping -c 1 walled >&2")
|
||||
|
||||
# Outgoing connections/pings should still work.
|
||||
$walled->succeed("curl -v http://attacker/ >&2");
|
||||
$walled->succeed("ping -c 1 attacker >&2");
|
||||
walled.succeed("curl -v http://attacker/ >&2")
|
||||
walled.succeed("ping -c 1 attacker >&2")
|
||||
|
||||
# If we stop the firewall, then connections should succeed.
|
||||
$walled->stopJob("firewall");
|
||||
$attacker->succeed("curl -v http://walled/ >&2");
|
||||
walled.stop_job("firewall")
|
||||
attacker.succeed("curl -v http://walled/ >&2")
|
||||
|
||||
# Check whether activation of a new configuration reloads the firewall.
|
||||
$walled->succeed("${newSystem}/bin/switch-to-configuration test 2>&1" .
|
||||
" | grep -qF firewall.service");
|
||||
walled.succeed(
|
||||
"${newSystem}/bin/switch-to-configuration test 2>&1 | grep -qF firewall.service"
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ pkgs, ... }: {
|
||||
import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
name = "fish";
|
||||
|
||||
machine =
|
||||
@ -14,8 +14,11 @@ import ./make-test.nix ({ pkgs, ... }: {
|
||||
|
||||
testScript =
|
||||
''
|
||||
$machine->waitForFile("/etc/fish/generated_completions/coreutils.fish");
|
||||
$machine->waitForFile("/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\$'");
|
||||
start_all()
|
||||
machine.wait_for_file("/etc/fish/generated_completions/coreutils.fish")
|
||||
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$'"
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ pkgs, lib, ... }: {
|
||||
import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
||||
name = "fluentd";
|
||||
|
||||
machine = { pkgs, ... }: {
|
||||
@ -33,14 +33,17 @@ import ./make-test.nix ({ pkgs, lib, ... }: {
|
||||
inherit testMessage;
|
||||
});
|
||||
in ''
|
||||
$machine->start;
|
||||
$machine->waitForUnit('fluentd.service');
|
||||
$machine->waitForOpenPort(9880);
|
||||
machine.start()
|
||||
machine.wait_for_unit("fluentd.service")
|
||||
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")
|
||||
'';
|
||||
})
|
||||
|
@ -3,7 +3,7 @@
|
||||
let
|
||||
initialRootPassword = "notproduction";
|
||||
in
|
||||
import ./make-test.nix ({ pkgs, lib, ...} : with lib; {
|
||||
import ./make-test-python.nix ({ pkgs, lib, ...} : with lib; {
|
||||
name = "gitlab";
|
||||
meta = with pkgs.stdenv.lib.maintainers; {
|
||||
maintainers = [ globin ];
|
||||
@ -63,21 +63,35 @@ import ./make-test.nix ({ pkgs, lib, ...} : with lib; {
|
||||
});
|
||||
in
|
||||
''
|
||||
$gitlab->start();
|
||||
$gitlab->waitForUnit("gitaly.service");
|
||||
$gitlab->waitForUnit("gitlab-workhorse.service");
|
||||
$gitlab->waitForUnit("gitlab.service");
|
||||
$gitlab->waitForUnit("gitlab-sidekiq.service");
|
||||
$gitlab->waitForFile("/var/gitlab/state/tmp/sockets/gitlab.socket");
|
||||
$gitlab->waitUntilSucceeds("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("${pkgs.sudo}/bin/sudo -u gitlab -H gitlab-rake gitlab:check 1>&2");
|
||||
$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("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");
|
||||
gitlab.start()
|
||||
gitlab.wait_for_unit("gitaly.service")
|
||||
gitlab.wait_for_unit("gitlab-workhorse.service")
|
||||
gitlab.wait_for_unit("gitlab.service")
|
||||
gitlab.wait_for_unit("gitlab-sidekiq.service")
|
||||
gitlab.wait_for_file("/var/gitlab/state/tmp/sockets/gitlab.socket")
|
||||
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(
|
||||
"${pkgs.sudo}/bin/sudo -u gitlab -H gitlab-rake gitlab:check 1>&2"
|
||||
)
|
||||
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(
|
||||
"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")
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ ... } :
|
||||
import ./make-test-python.nix ({pkgs, lib, ...}:
|
||||
|
||||
let
|
||||
client = { pkgs, ... } : {
|
||||
@ -39,27 +39,29 @@ in {
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
$server1->waitForUnit("glusterd.service");
|
||||
$server2->waitForUnit("glusterd.service");
|
||||
server1.wait_for_unit("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
|
||||
$server1->succeed("sleep 2");
|
||||
$server1->succeed("gluster peer probe server2");
|
||||
$server1->succeed("gluster peer probe server1");
|
||||
server1.succeed("gluster peer probe server2")
|
||||
server1.succeed("gluster peer probe server1")
|
||||
|
||||
$server1->succeed("gluster peer status | grep Connected");
|
||||
server1.succeed("gluster peer status | grep Connected")
|
||||
|
||||
# create volumes
|
||||
$server1->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 start gv0");
|
||||
server1.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 start gv0")
|
||||
|
||||
# test clients
|
||||
$client1->waitForUnit("gluster.mount");
|
||||
$client2->waitForUnit("gluster.mount");
|
||||
client1.wait_for_unit("gluster.mount")
|
||||
client2.wait_for_unit("gluster.mount")
|
||||
|
||||
$client1->succeed("echo test > /gluster/file1");
|
||||
$client2->succeed("grep test /gluster/file1");
|
||||
client1.succeed("echo test > /gluster/file1")
|
||||
client2.succeed("grep test /gluster/file1")
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ pkgs, ... }:
|
||||
import ./make-test-python.nix ({ pkgs, ... }:
|
||||
let
|
||||
# Download Big Buck Bunny example, licensed under CC Attribution 3.0.
|
||||
testMkv = pkgs.fetchurl {
|
||||
@ -19,7 +19,13 @@ in {
|
||||
testScript = ''
|
||||
# Test MP4 and MKV transcoding. Since this is a short clip, transcoding typically
|
||||
# only takes a few seconds.
|
||||
$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");
|
||||
start_all()
|
||||
|
||||
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"
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Test whether hibernation from partition works.
|
||||
|
||||
import ./make-test.nix (pkgs: {
|
||||
import ./make-test-python.nix (pkgs: {
|
||||
name = "hibernate";
|
||||
|
||||
nodes = {
|
||||
@ -28,16 +28,17 @@ import ./make-test.nix (pkgs: {
|
||||
|
||||
testScript =
|
||||
''
|
||||
$machine->waitForUnit("multi-user.target");
|
||||
$machine->succeed("mkswap /dev/vdb");
|
||||
$machine->succeed("swapon -a");
|
||||
$machine->startJob("listener");
|
||||
$machine->waitForOpenPort(4444);
|
||||
$machine->succeed("systemctl hibernate &");
|
||||
$machine->waitForShutdown;
|
||||
$probe->waitForUnit("multi-user.target");
|
||||
$machine->start;
|
||||
$probe->waitUntilSucceeds("echo test | nc machine 4444 -N");
|
||||
machine.start()
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.succeed("mkswap /dev/vdb")
|
||||
machine.succeed("swapon -a")
|
||||
machine.start_job("listener")
|
||||
machine.wait_for_open_port(4444)
|
||||
machine.succeed("systemctl hibernate &")
|
||||
machine.wait_for_shutdown()
|
||||
probe.wait_for_unit("multi-user.target")
|
||||
machine.start()
|
||||
probe.wait_until_succeeds("echo test | nc machine 4444 -N")
|
||||
'';
|
||||
|
||||
})
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Test whether `houndd` indexes nixpkgs
|
||||
import ./make-test.nix ({ pkgs, ... } : {
|
||||
import ./make-test-python.nix ({ pkgs, ... } : {
|
||||
name = "hound";
|
||||
meta = with pkgs.stdenv.lib.maintainers; {
|
||||
maintainers = [ grahamc ];
|
||||
@ -46,13 +46,14 @@ import ./make-test.nix ({ pkgs, ... } : {
|
||||
};
|
||||
};
|
||||
|
||||
testScript =
|
||||
'' startAll;
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
$machine->waitForUnit("network.target");
|
||||
$machine->waitForUnit("hound.service");
|
||||
$machine->waitForOpenPort(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_for_unit("network.target")
|
||||
machine.wait_for_unit("hound.service")
|
||||
machine.wait_for_open_port(6080)
|
||||
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'"
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ pkgs, ... }: {
|
||||
import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
name = "icingaweb2";
|
||||
meta = with pkgs.stdenv.lib.maintainers; {
|
||||
maintainers = [ das_j ];
|
||||
@ -64,8 +64,8 @@ import ./make-test.nix ({ pkgs, ... }: {
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
startAll();
|
||||
$icingaweb2->waitForUnit("multi-user.target");
|
||||
$icingaweb2->succeed("curl -sSf http://icingaweb2/authentication/login");
|
||||
start_all()
|
||||
icingaweb2.wait_for_unit("multi-user.target")
|
||||
icingaweb2.succeed("curl -sSf http://icingaweb2/authentication/login")
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ pkgs, lib, ... }:
|
||||
import ./make-test-python.nix ({ pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
name = "incron";
|
||||
@ -19,34 +19,34 @@ import ./make-test.nix ({ pkgs, lib, ... }:
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
startAll;
|
||||
start_all()
|
||||
|
||||
$machine->waitForUnit("multi-user.target");
|
||||
$machine->waitForUnit("incron.service");
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.wait_for_unit("incron.service")
|
||||
|
||||
$machine->succeed("test -d /test");
|
||||
machine.succeed("test -d /test")
|
||||
# create some activity for incron to monitor
|
||||
$machine->succeed("touch /test/file");
|
||||
$machine->succeed("echo foo >> /test/file");
|
||||
$machine->succeed("mv /test/file /root");
|
||||
$machine->succeed("mv /root/file /test");
|
||||
machine.succeed("touch /test/file")
|
||||
machine.succeed("echo foo >> /test/file")
|
||||
machine.succeed("mv /test/file /root")
|
||||
machine.succeed("mv /root/file /test")
|
||||
|
||||
$machine->sleep(1);
|
||||
machine.sleep(1)
|
||||
|
||||
# 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
|
||||
$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_MODIFY' /root/incron.log")
|
||||
machine.succeed("grep '/test/file IN_CLOSE_WRITE' /root/incron.log")
|
||||
|
||||
# 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
|
||||
$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
|
||||
$machine->fail("grep 'IN_OPEN' /root/incron.log");
|
||||
machine.fail("grep 'IN_OPEN' /root/incron.log")
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ lib, ... }:
|
||||
import ./make-test-python.nix ({ lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
@ -11,8 +11,9 @@ with lib;
|
||||
{ services.jackett.enable = true; };
|
||||
|
||||
testScript = ''
|
||||
$machine->waitForUnit('jackett.service');
|
||||
$machine->waitForOpenPort('9117');
|
||||
$machine->succeed("curl --fail http://localhost:9117/");
|
||||
machine.start()
|
||||
machine.wait_for_unit("jackett.service")
|
||||
machine.wait_for_open_port(9117)
|
||||
machine.succeed("curl --fail http://localhost:9117/")
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ../make-test.nix ({pkgs, ...}: {
|
||||
import ../make-test-python.nix ({pkgs, ...}: {
|
||||
name = "kerberos_server-heimdal";
|
||||
machine = { config, libs, pkgs, ...}:
|
||||
{ services.kerberos_server =
|
||||
@ -23,31 +23,20 @@ import ../make-test.nix ({pkgs, ...}: {
|
||||
};
|
||||
|
||||
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(
|
||||
"kadmin -l init --realm-max-ticket-life='8 day' \\
|
||||
--realm-max-renewable-life='10 day' FOO.BAR"
|
||||
);
|
||||
for unit in ["kadmind", "kdc", "kpasswdd"]:
|
||||
machine.wait_for_unit(f"{unit}.service")
|
||||
|
||||
$machine->succeed("systemctl restart kadmind.service kdc.service");
|
||||
$machine->waitForUnit("kadmind.service");
|
||||
$machine->waitForUnit("kdc.service");
|
||||
$machine->waitForUnit("kpasswdd.service");
|
||||
|
||||
$machine->succeed(
|
||||
"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");
|
||||
machine.succeed(
|
||||
"kadmin -l add --password=admin_pw --use-defaults admin",
|
||||
"kadmin -l ext_keytab --keytab=admin.keytab admin",
|
||||
"kadmin -p admin -K admin.keytab add --password=alice_pw --use-defaults alice",
|
||||
"kadmin -l ext_keytab --keytab=alice.keytab alice",
|
||||
"kinit -kt alice.keytab alice",
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ../make-test.nix ({pkgs, ...}: {
|
||||
import ../make-test-python.nix ({pkgs, ...}: {
|
||||
name = "kerberos_server-mit";
|
||||
machine = { config, libs, pkgs, ...}:
|
||||
{ services.kerberos_server =
|
||||
@ -24,22 +24,18 @@ import ../make-test.nix ({pkgs, ...}: {
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
$machine->start;
|
||||
machine.succeed(
|
||||
"kdb5_util create -s -r FOO.BAR -P master_key",
|
||||
"systemctl restart kadmind.service kdc.service",
|
||||
)
|
||||
|
||||
$machine->succeed(
|
||||
"kdb5_util create -s -r FOO.BAR -P master_key"
|
||||
);
|
||||
for unit in ["kadmind", "kdc"]:
|
||||
machine.wait_for_unit(f"{unit}.service")
|
||||
|
||||
$machine->succeed("systemctl restart kadmind.service kdc.service");
|
||||
$machine->waitForUnit("kadmind.service");
|
||||
$machine->waitForUnit("kdc.service");
|
||||
|
||||
$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");
|
||||
machine.succeed(
|
||||
"kadmin.local add_principal -pw admin_pw admin",
|
||||
"kadmin -p admin -w admin_pw addprinc -pw alice_pw alice",
|
||||
"echo alice_pw | sudo -u alice kinit",
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ pkgs, ... }: {
|
||||
import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
name = "minidlna";
|
||||
|
||||
nodes = {
|
||||
@ -29,11 +29,11 @@ import ./make-test.nix ({ pkgs, ... }: {
|
||||
|
||||
testScript =
|
||||
''
|
||||
startAll;
|
||||
$server->succeed("mkdir -p /tmp/stuff && chown minidlna: /tmp/stuff");
|
||||
$server->waitForUnit("minidlna");
|
||||
$server->waitForOpenPort("8200");
|
||||
$server->succeed("curl --fail http://localhost:8200/");
|
||||
$client->succeed("curl --fail http://server:8200/");
|
||||
start_all()
|
||||
server.succeed("mkdir -p /tmp/stuff && chown minidlna: /tmp/stuff")
|
||||
server.wait_for_unit("minidlna")
|
||||
server.wait_for_open_port("8200")
|
||||
server.succeed("curl --fail http://localhost:8200/")
|
||||
client.succeed("curl --fail http://server:8200/")
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ pkgs, lib, ... }:
|
||||
import ./make-test-python.nix ({ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
port = 3142;
|
||||
@ -37,16 +37,20 @@ with lib;
|
||||
};
|
||||
};
|
||||
testScript = ''
|
||||
startAll;
|
||||
start_all()
|
||||
|
||||
$default->waitForUnit('miniflux.service');
|
||||
$default->waitForOpenPort(${toString defaultPort});
|
||||
$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.wait_for_unit("miniflux.service")
|
||||
default.wait_for_open_port(${toString defaultPort})
|
||||
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'"
|
||||
)
|
||||
|
||||
$customized->waitForUnit('miniflux.service');
|
||||
$customized->waitForOpenPort(${toString port});
|
||||
$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.wait_for_unit("miniflux.service")
|
||||
customized.wait_for_open_port(${toString port})
|
||||
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'"
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 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" ''
|
||||
db.greetings.insert({ "greeting": "hello" });
|
||||
print(db.greetings.findOne().greeting);
|
||||
@ -33,8 +33,10 @@ in {
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
startAll;
|
||||
$one->waitForUnit("mongodb.service");
|
||||
$one->succeed("mongo -u nixtest -p nixtest nixtest ${testQuery}") =~ /hello/ or die;
|
||||
start_all()
|
||||
one.wait_for_unit("mongodb.service")
|
||||
one.succeed(
|
||||
"mongo -u nixtest -p nixtest nixtest ${testQuery} | grep -q hello"
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -1,21 +1,10 @@
|
||||
import ./make-test.nix ({ pkgs, ... }:
|
||||
import ./make-test-python.nix ({ pkgs, ... }:
|
||||
|
||||
let
|
||||
port = 1888;
|
||||
username = "mqtt";
|
||||
password = "VERY_secret";
|
||||
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 {
|
||||
name = "mosquitto";
|
||||
meta = with pkgs.stdenv.lib; {
|
||||
@ -49,40 +38,53 @@ in {
|
||||
|
||||
testScript = let
|
||||
file = "/tmp/msg";
|
||||
sub = args:
|
||||
"(${cmd "sub"} -C 1 ${args} | tee ${file} &)";
|
||||
in ''
|
||||
startAll;
|
||||
$server->waitForUnit("mosquitto.service");
|
||||
def mosquitto_cmd(binary):
|
||||
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
|
||||
$server->execute("${sub "-q 0"}");
|
||||
server.execute(subscribe("-q 0"))
|
||||
|
||||
# we need to give the subscribers some time to connect
|
||||
$client2->execute("sleep 5");
|
||||
$client2->succeed("${cmd "pub"} -m FOO -q 0");
|
||||
|
||||
$server->waitUntilSucceeds("grep -q FOO ${file}");
|
||||
$server->execute("rm ${file}");
|
||||
client2.execute("sleep 5")
|
||||
client2.succeed(publish("-m FOO -q 0"))
|
||||
|
||||
server.wait_until_succeeds("grep -q FOO ${file}")
|
||||
server.execute("rm ${file}")
|
||||
|
||||
# QoS = 1, so both subscribers should get it
|
||||
$server->execute("${sub "-q 1"}");
|
||||
$client1->execute("${sub "-q 1"}");
|
||||
server.execute(subscribe("-q 1"))
|
||||
client1.execute(subscribe("-q 1"))
|
||||
|
||||
# we need to give the subscribers some time to connect
|
||||
$client2->execute("sleep 5");
|
||||
$client2->succeed("${cmd "pub"} -m BAR -q 1");
|
||||
client2.execute("sleep 5")
|
||||
client2.succeed(publish("-m BAR -q 1"))
|
||||
|
||||
$server->waitUntilSucceeds("grep -q BAR ${file}");
|
||||
$server->execute("rm ${file}");
|
||||
|
||||
$client1->waitUntilSucceeds("grep -q BAR ${file}");
|
||||
$client1->execute("rm ${file}");
|
||||
for machine in server, client1:
|
||||
machine.wait_until_succeeds("grep -q BAR ${file}")
|
||||
machine.execute("rm ${file}")
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ pkgs, lib, ... }:
|
||||
import ./make-test-python.nix ({ pkgs, lib, ... }:
|
||||
let
|
||||
track = pkgs.fetchurl {
|
||||
# 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 = ''
|
||||
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.
|
||||
sub play_some_music {
|
||||
my $server = $_[0];
|
||||
def play_some_music(server):
|
||||
server.wait_for_unit("mpd.service")
|
||||
server.succeed(f"{mpc} update")
|
||||
_, tracks = server.execute(f"{mpc} ls")
|
||||
|
||||
$server->waitForUnit("mpd.service");
|
||||
$server->succeed("$mpc update");
|
||||
my @tracks = $server->execute("$mpc ls");
|
||||
for track in tracks.splitlines():
|
||||
server.succeed(f"{mpc} add {track}")
|
||||
|
||||
for my $track (split(/\n/, $tracks[1])) {
|
||||
$server->succeed("$mpc add $track");
|
||||
};
|
||||
_, added_tracks = server.execute(f"{mpc} listall")
|
||||
|
||||
my @added_tracks = $server->execute("$mpc listall");
|
||||
(length $added_tracks[1]) > 0 or die "Failed to add audio tracks to the playlist.";
|
||||
# Check we succeeded adding 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");
|
||||
my @output = split(/\n/, $status[1]);
|
||||
$output[1] =~ /.*playing.*/ or die "Audio track is not playing, as expected.";
|
||||
_, output = server.execute(f"{mpc} status")
|
||||
# Assure audio track is playing
|
||||
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");
|
||||
$client->succeed("$mpc -h serverALSA status");
|
||||
play_some_music(serverALSA)
|
||||
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
|
||||
# to perform the following test:
|
||||
$client->fail("$mpc -h serverPulseAudio status");
|
||||
client.fail(f"{mpc} -h serverPulseAudio status")
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix {
|
||||
import ./make-test-python.nix {
|
||||
name = "neo4j";
|
||||
|
||||
nodes = {
|
||||
@ -11,10 +11,10 @@ import ./make-test.nix {
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
startAll;
|
||||
start_all()
|
||||
|
||||
$master->waitForUnit("neo4j");
|
||||
$master->sleep(20); # Hopefully this is long enough!!
|
||||
$master->succeed("curl http://localhost:7474/");
|
||||
master.wait_for_unit("neo4j")
|
||||
master.wait_for_open_port(7474)
|
||||
master.succeed("curl http://localhost:7474/")
|
||||
'';
|
||||
}
|
||||
|
@ -21,11 +21,10 @@ import ./make-test-python.nix ({ pkgs, ...} : {
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
$roundcube->start;
|
||||
$roundcube->waitForUnit("postgresql.service");
|
||||
$roundcube->waitForUnit("roundcube-setup.service");
|
||||
$roundcube->waitForUnit("phpfpm-roundcube.service");
|
||||
$roundcube->waitForUnit("nginx.service");
|
||||
$roundcube->succeed("curl -sSfL http://roundcube/ | grep 'Keep me logged in'");
|
||||
roundcube.start
|
||||
roundcube.wait_for_unit("postgresql.service")
|
||||
roundcube.wait_for_unit("phpfpm-roundcube.service")
|
||||
roundcube.wait_for_unit("nginx.service")
|
||||
roundcube.succeed("curl -sSfL http://roundcube/ | grep 'Keep me logged in'")
|
||||
'';
|
||||
})
|
||||
|
@ -1,4 +1,4 @@
|
||||
import ./make-test.nix ({ ... } :
|
||||
import ./make-test-python.nix ({ ... } :
|
||||
|
||||
let
|
||||
node = { pkgs, ... } : {
|
||||
@ -26,27 +26,21 @@ in {
|
||||
|
||||
testScript = ''
|
||||
# Test if rxe interface comes up
|
||||
$server->waitForUnit("default.target");
|
||||
$server->succeed("systemctl status rxe.service");
|
||||
$server->succeed("ibv_devices | grep rxe0");
|
||||
server.wait_for_unit("default.target")
|
||||
server.succeed("systemctl status rxe.service")
|
||||
server.succeed("ibv_devices | grep rxe0")
|
||||
|
||||
$client->waitForUnit("default.target");
|
||||
client.wait_for_unit("default.target")
|
||||
|
||||
# ping pong test
|
||||
$server->succeed("screen -dmS rc_pingpong ibv_rc_pingpong -p 4800 -g0");
|
||||
$client->succeed("sleep 2; ibv_rc_pingpong -p 4800 -g0 server");
|
||||
# ping pong tests
|
||||
for proto in "rc", "uc", "ud", "srq":
|
||||
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");
|
||||
$client->succeed("sleep 2; ibv_uc_pingpong -p 4800 -g0 server");
|
||||
|
||||
$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");
|
||||
server.succeed("screen -dmS rping rping -s -a server -C 10")
|
||||
client.succeed("sleep 2; rping -c -a server -C 10")
|
||||
'';
|
||||
})
|
||||
|
||||
|
@ -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";
|
||||
meta = with pkgs.stdenv.lib.maintainers; {
|
||||
maintainers = [ ninjatrappeur ];
|
||||
@ -70,12 +70,12 @@ in import ./make-test.nix ({pkgs, ... }: {
|
||||
in generateNodeConf (attrs // localConf);
|
||||
};
|
||||
testScript = ''
|
||||
startAll;
|
||||
$node1->waitForUnit('systemd-networkd-wait-online.service');
|
||||
$node2->waitForUnit('systemd-networkd-wait-online.service');
|
||||
$node1->succeed('ping -c 5 10.0.0.2');
|
||||
$node2->succeed('ping -c 5 10.0.0.1');
|
||||
start_all()
|
||||
node1.wait_for_unit("systemd-networkd-wait-online.service")
|
||||
node2.wait_for_unit("systemd-networkd-wait-online.service")
|
||||
node1.succeed("ping -c 5 10.0.0.2")
|
||||
node2.succeed("ping -c 5 10.0.0.1")
|
||||
# Is the fwmark set?
|
||||
$node2->succeed('wg | grep -q 42');
|
||||
node2.succeed("wg | grep -q 42")
|
||||
'';
|
||||
})
|
||||
|
@ -19,7 +19,7 @@ let
|
||||
SigningPrivateKey = "2a6c21550f3fca0331df50668ffab66b6dce8237bcd5728e571e8033b363e247de111da0ec781e45bf6c63ecb45a78c24d7d4655abfaeea83b26c36eb5c0fd5b";
|
||||
};
|
||||
|
||||
in import ./make-test.nix ({ pkgs, ...} : {
|
||||
in import ./make-test-python.nix ({ pkgs, ...} : {
|
||||
name = "yggdrasil";
|
||||
meta = with pkgs.stdenv.lib.maintainers; {
|
||||
maintainers = [ gazally ];
|
||||
@ -91,33 +91,35 @@ in import ./make-test.nix ({ pkgs, ...} : {
|
||||
|
||||
testScript =
|
||||
''
|
||||
import re
|
||||
|
||||
# Give Alice a head start so she is ready when Bob calls.
|
||||
$alice->start;
|
||||
$alice->waitForUnit("yggdrasil.service");
|
||||
alice.start()
|
||||
alice.wait_for_unit("yggdrasil.service")
|
||||
|
||||
$bob->start;
|
||||
$carol->start;
|
||||
$bob->waitForUnit("yggdrasil.service");
|
||||
$carol->waitForUnit("yggdrasil.service");
|
||||
bob.start()
|
||||
carol.start()
|
||||
bob.wait_for_unit("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 ]");
|
||||
my $carolIp6 = (split /[ \/]+/, $carol->succeed("ip -o -6 addr show dev ygg0 scope global"))[3];
|
||||
ip_addr_show = "ip -o -6 addr show dev ygg0 scope global"
|
||||
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
|
||||
# local peering have succeeded and everybody is connected.
|
||||
$alice->waitUntilSucceeds("ping -c 1 $carolIp6");
|
||||
$alice->succeed("ping -c 1 ${bobIp6}");
|
||||
alice.wait_until_succeeds(f"ping -c 1 {carol_ip6}")
|
||||
alice.succeed(f"ping -c 1 ${bobIp6}")
|
||||
|
||||
$bob->succeed("ping -c 1 ${aliceIp6}");
|
||||
$bob->succeed("ping -c 1 $carolIp6");
|
||||
bob.succeed("ping -c 1 ${aliceIp6}")
|
||||
bob.succeed(f"ping -c 1 {carol_ip6}")
|
||||
|
||||
$carol->succeed("ping -c 1 ${aliceIp6}");
|
||||
$carol->succeed("ping -c 1 ${bobIp6}");
|
||||
carol.succeed("ping -c 1 ${aliceIp6}")
|
||||
carol.succeed("ping -c 1 ${bobIp6}")
|
||||
|
||||
$carol->fail("journalctl -u dhcpcd | grep ygg0");
|
||||
|
||||
$alice->waitForUnit("httpd.service");
|
||||
$carol->succeed("curl --fail -g http://[${aliceIp6}]");
|
||||
carol.fail("journalctl -u dhcpcd | grep ygg0")
|
||||
|
||||
alice.wait_for_unit("httpd.service")
|
||||
carol.succeed("curl --fail -g http://[${aliceIp6}]")
|
||||
'';
|
||||
})
|
||||
|
@ -1,45 +1,74 @@
|
||||
{ stdenv, fetchurl, fetchpatch, meson, ninja, gettext, cargo, rustc, python3, pkgconfig, gnome3
|
||||
, glib, libhandy, gtk3, dbus, openssl, sqlite, gst_all_1, wrapGAppsHook }:
|
||||
{ stdenv
|
||||
, 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 {
|
||||
stdenv.mkDerivation {
|
||||
version = "0.4.6";
|
||||
rustPlatform.buildRustPackage rec {
|
||||
version = "0.4.7";
|
||||
pname = "gnome-podcasts";
|
||||
|
||||
src = fetchurl {
|
||||
url = https://gitlab.gnome.org/World/podcasts/uploads/e59ac5d618d7daf4c7f33ba72957c466/gnome-podcasts-0.4.6.tar.xz;
|
||||
sha256 = "0g2rk3w251fp5jwbxs5ya1adv8nsgdqjy1vmfg8qqab6qyndhbrc";
|
||||
src = fetchFromGitLab {
|
||||
domain = "gitlab.gnome.org";
|
||||
owner = "World";
|
||||
repo = "podcasts";
|
||||
rev = version;
|
||||
sha256 = "0vy5i77bv8c22ldhrnr4z6kx22zqnb1lg3s7y8673bqjgd7dppi0";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# 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";
|
||||
# };
|
||||
cargoSha256 = "1h0n8zclb8a1b1ri83viiwwzlj3anm38m4cp38aqyf6q40qga35q";
|
||||
|
||||
nativeBuildInputs = [
|
||||
meson ninja pkgconfig gettext cargo rustc python3 wrapGAppsHook
|
||||
];
|
||||
buildInputs = [
|
||||
glib gtk3 libhandy dbus openssl sqlite gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-bad
|
||||
meson
|
||||
ninja
|
||||
pkgconfig
|
||||
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 = ''
|
||||
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; {
|
||||
|
@ -22,7 +22,7 @@
|
||||
, libpulseaudio ? null
|
||||
, libselinux ? null
|
||||
, libsepol ? null
|
||||
, p11_kit ? null
|
||||
, p11-kit ? null
|
||||
, utillinux ? null
|
||||
, qtbase
|
||||
, qtx11extras
|
||||
@ -66,7 +66,7 @@ mkDerivation rec {
|
||||
libpulseaudio
|
||||
libselinux
|
||||
libsepol
|
||||
p11_kit
|
||||
p11-kit
|
||||
utillinux
|
||||
]
|
||||
++ lib.optionals withGstreamer (with gst_all_1; [
|
||||
|
@ -1,20 +1,46 @@
|
||||
{ stdenv, fetchFromGitLab, substituteAll, meson, ninja, pkgconfig, vala_0_40, gettext
|
||||
, gnome3, libnotify, itstool, glib, gtk3, libxml2, gnome-online-accounts
|
||||
, coreutils, libpeas, libsecret, pcre, libxkbcommon, wrapGAppsHook
|
||||
, libpthreadstubs, libXdmcp, epoxy, at-spi2-core, dbus, libgpgerror
|
||||
, appstream-glib, desktop-file-utils, duplicity
|
||||
{ stdenv
|
||||
, fetchFromGitLab
|
||||
, substituteAll
|
||||
, meson
|
||||
, 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 {
|
||||
pname = "deja-dup";
|
||||
version = "38.3";
|
||||
version = "40.4";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "gitlab.gnome.org";
|
||||
owner = "World";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "1bnvmdlm67k1b6115x75j3nl92x5yl4psq5pna2w6cg9npxdd3fa";
|
||||
sha256 = "0x9z8z1mh1sxi28ilml3pvbc0g6ghcbyiy002rziwwlarxnbwkky";
|
||||
};
|
||||
|
||||
patches = [
|
||||
@ -22,37 +48,55 @@ stdenv.mkDerivation rec {
|
||||
src = ./fix-paths.patch;
|
||||
inherit coreutils;
|
||||
})
|
||||
|
||||
# Hardcode GSettings path for Nautilus extension to avoid crashes from missing schemas
|
||||
./hardcode-gsettings.patch
|
||||
];
|
||||
|
||||
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 = [
|
||||
meson ninja pkgconfig vala_0_40 gettext itstool
|
||||
appstream-glib desktop-file-utils libxml2 wrapGAppsHook
|
||||
meson
|
||||
ninja
|
||||
pkgconfig
|
||||
vala
|
||||
gettext
|
||||
itstool
|
||||
appstream-glib
|
||||
desktop-file-utils
|
||||
libxml2
|
||||
wrapGAppsHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
libnotify libpeas glib gtk3 libsecret
|
||||
pcre libxkbcommon libpthreadstubs libXdmcp epoxy gnome3.nautilus
|
||||
at-spi2-core dbus gnome-online-accounts libgpgerror
|
||||
libnotify
|
||||
libsoup
|
||||
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 ];
|
||||
|
||||
# install nautilus plug-in to correct path
|
||||
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; {
|
||||
description = "A simple backup tool";
|
||||
longDescription = ''
|
||||
@ -60,7 +104,7 @@ stdenv.mkDerivation rec {
|
||||
of backing up the Right Way (encrypted, off-site, and regular) \
|
||||
and uses duplicity as the backend.
|
||||
'';
|
||||
homepage = https://wiki.gnome.org/Apps/DejaDup;
|
||||
homepage = "https://wiki.gnome.org/Apps/DejaDup";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = with maintainers; [ jtojnar joncojonathan ];
|
||||
platforms = platforms.linux;
|
||||
|
@ -1,38 +1,16 @@
|
||||
--- a/deja-dup/nautilus/NautilusExtension.c
|
||||
+++ b/deja-dup/nautilus/NautilusExtension.c
|
||||
@@ -24,6 +24,8 @@
|
||||
#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 @@
|
||||
@@ -313,7 +313,12 @@
|
||||
bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR);
|
||||
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
|
||||
|
||||
- settings = g_settings_new("org.gnome.DejaDup");
|
||||
+ schema_source = g_settings_schema_source_new_from_directory ("@DEJA_DUP_GSETTINGS_PATH@",
|
||||
- settings = g_settings_new(APPLICATION_ID);
|
||||
+ g_autoptr (GSettingsSchemaSource) schema_source = g_settings_schema_source_new_from_directory ("@DEJA_DUP_GSETTINGS_PATH@",
|
||||
+ g_settings_schema_source_get_default (), TRUE, NULL);
|
||||
+
|
||||
+ schema = g_settings_schema_source_lookup (schema_source,
|
||||
+ "org.gnome.DejaDup", FALSE);
|
||||
+ g_autoptr (GSettingsSchema) schema = g_settings_schema_source_lookup (schema_source, APPLICATION_ID, FALSE);
|
||||
+
|
||||
+ settings = g_settings_new_full (schema, NULL, NULL);
|
||||
g_signal_connect(settings, "changed::include-list",
|
||||
update_include_excludes, NULL);
|
||||
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 */
|
||||
|
@ -1,6 +1,6 @@
|
||||
let
|
||||
version = "2.6.4";
|
||||
sha256 = "11l93w97961zig4gqf345j9l20g0mjp7fayl1mdwdp14hhd5zk5g";
|
||||
cargoSha256 = "1q6cbms7j1h726bvq38npxkjkmz14b5ir9c4z7pb0jcy7gkplyxx";
|
||||
version = "2.6.5";
|
||||
sha256 = "1ykrsphqil68051wwp9b0259gsmfrj9xmx0pfhh2yvmmjzv7k4fv";
|
||||
cargoSha256 = "1xqmnirx2r91q5gy1skxl0f79xvaqzimq3l0cj4xvfms7mpdfbg1";
|
||||
in
|
||||
import ./parity.nix { inherit version sha256 cargoSha256; }
|
||||
|
@ -1,6 +1,6 @@
|
||||
let
|
||||
version = "2.5.9";
|
||||
sha256 = "06gmfw5l8n5i35dimsmj6dn0fxhbp53zjrdvbkff63r5kfqnwnx2";
|
||||
cargoSha256 = "1kdy0bnmyqx4rhpq0a8gliy6mws68n035kfkxrfa6cxr2cn53dyb";
|
||||
version = "2.5.10";
|
||||
sha256 = "0s8llcb1xdzs2zb6rnbsa9hck7dj4m8mamzkkvr0xjmgvigskf64";
|
||||
cargoSha256 = "16nf6y0hyffwdhxn1w4ms4zycs5lkzir8sj6c2lgsabig057hb6z";
|
||||
in
|
||||
import ./parity.nix { inherit version sha256 cargoSha256; }
|
||||
|
@ -27,6 +27,7 @@
|
||||
, qt4
|
||||
, withQt5 ? false
|
||||
, qtbase
|
||||
, yelp-tools
|
||||
}:
|
||||
|
||||
with stdenv.lib;
|
||||
@ -47,7 +48,7 @@ stdenv.mkDerivation rec {
|
||||
nativeBuildInputs = [
|
||||
autoconf
|
||||
automake
|
||||
gnome3.yelp-tools
|
||||
yelp-tools
|
||||
gnome3.yelp-xsl
|
||||
gobject-introspection
|
||||
gtk-doc
|
||||
|
@ -1,5 +1,5 @@
|
||||
{ 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 }:
|
||||
|
||||
let
|
||||
@ -13,7 +13,7 @@ in stdenv.mkDerivation {
|
||||
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 ];
|
||||
|
||||
preConfigure = "./autogen.sh";
|
||||
|
@ -21,13 +21,13 @@ let
|
||||
in
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "neovim-unwrapped";
|
||||
version = "0.4.2";
|
||||
version = "0.4.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "neovim";
|
||||
repo = "neovim";
|
||||
rev = "v${version}";
|
||||
sha256 = "13w446plvgl219lhj29jyimhiqvs1y1byrz4qpdmxgyddmx9xqss";
|
||||
sha256 = "03p7pic7hw9yxxv7fbgls1f42apx3lik2k6mpaz1a109ngyc5kaj";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
@ -52,6 +52,8 @@ in stdenv.mkDerivation rec {
|
||||
pname = "gimp";
|
||||
version = "2.10.14";
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://download.gimp.org/pub/gimp/v${lib.versions.majorMinor version}/${pname}-${version}.tar.bz2";
|
||||
sha256 = "0m6wdnfvsxyhimdd4v3351g4r1fklllnbipbwcfym3h7q88hz6yz";
|
||||
|
@ -68,13 +68,20 @@ stdenv.lib.makeScope pkgs.newScope (self: with self; {
|
||||
Filters/Generic/FFT Forward
|
||||
Filters/Generic/FFT Inverse
|
||||
*/
|
||||
name = "fourier-0.4.1";
|
||||
name = "fourier-0.4.3";
|
||||
buildInputs = with pkgs; [ fftw ];
|
||||
postInstall = "fail";
|
||||
installPhase = "installPlugins fourier";
|
||||
|
||||
src = fetchurl {
|
||||
url = "http://registry.gimp.org/files/${name}.tar.gz";
|
||||
sha256 = "1pr3y3zl9w8xs1circdrxpr98myz9m8wfzy022al79z4pdanwvs1";
|
||||
url = "https://www.lprp.fr/files/old-web/soft/gimp/${name}.tar.gz";
|
||||
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 ];
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{ stdenv, fetchurl, barcode, gnome3, autoreconfHook
|
||||
, gtk3, gtk-doc, libxml2, librsvg , libtool, libe-book, gsettings-desktop-schemas
|
||||
, intltool, itstool, makeWrapper, pkgconfig
|
||||
, intltool, itstool, makeWrapper, pkgconfig, yelp-tools
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
nativeBuildInputs = [ autoreconfHook pkgconfig makeWrapper intltool ];
|
||||
buildInputs = [
|
||||
barcode gtk3 gtk-doc gnome3.yelp-tools
|
||||
barcode gtk3 gtk-doc yelp-tools
|
||||
gnome3.gnome-common gsettings-desktop-schemas
|
||||
itstool libxml2 librsvg libe-book libtool
|
||||
];
|
||||
|
@ -17,13 +17,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ideogram";
|
||||
version = "1.2.2";
|
||||
version = "1.3.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cassidyjames";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "1qakgg3y4n2vcnykk2004ndvwmjbk2yy0p4j30mlb7p14dxscif6";
|
||||
sha256 = "0ghc7hk4b4r3a0x9r30rrgv3rarxyjr2hf9ig244xwvhh5rn3j10";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
@ -45,14 +45,6 @@ stdenv.mkDerivation rec {
|
||||
xorg.libXtst
|
||||
];
|
||||
|
||||
patches = [
|
||||
# See: https://github.com/cassidyjames/ideogram/issues/26
|
||||
(fetchpatch {
|
||||
url = "https://github.com/cassidyjames/ideogram/commit/65994ee11bd21f8316b057cec01afbf50639a708.patch";
|
||||
sha256 = "12vrvvggpqq53dmhbm7gbbbigncn19m1fjln9wxaady21m0w776c";
|
||||
})
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
chmod +x meson/post_install.py
|
||||
patchShebangs meson/post_install.py
|
||||
|
@ -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)
|
||||
{
|
@ -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;
|
||||
};
|
||||
}
|
@ -1,7 +1,8 @@
|
||||
{
|
||||
mkDerivation, lib,
|
||||
extra-cmake-modules, kdoctools,
|
||||
karchive, ki18n, kio, perl, python, php, qttools,
|
||||
karchive, ki18n, kio, perl, python, php, qttools
|
||||
, kdbusaddons
|
||||
}:
|
||||
|
||||
mkDerivation {
|
||||
@ -11,5 +12,5 @@ mkDerivation {
|
||||
maintainers = with lib.maintainers; [ orivej ];
|
||||
};
|
||||
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
|
||||
buildInputs = [ karchive ki18n kio perl python php qttools ];
|
||||
buildInputs = [ karchive ki18n kio perl python php qttools kdbusaddons ];
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
, ilmbase, libXi, libX11, libXext, libXrender
|
||||
, libjpeg, libpng, libsamplerate, libsndfile
|
||||
, libtiff, libGLU, libGL, openal, opencolorio, openexr, openimageio, openjpeg_1, python3Packages
|
||||
, openvdb, libXxf86vm, tbb
|
||||
, zlib, fftw, opensubdiv, freetype, jemalloc, ocl-icd, addOpenGLRunpath
|
||||
, jackaudioSupport ? false, libjack2
|
||||
, cudaSupport ? config.cudaSupport or false, cudatoolkit
|
||||
@ -15,11 +16,11 @@ let python = python3Packages.python; in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "blender";
|
||||
version = "2.80";
|
||||
version = "2.81";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://download.blender.org/source/${pname}-${version}.tar.gz";
|
||||
sha256 = "1h550jisdbis50hxwk5kxrvrk1a6sh2fsri3yyj66vhzbi87x7fd";
|
||||
url = "https://download.blender.org/source/${pname}-${version}.tar.xz";
|
||||
sha256 = "1prp0f2152f1sz23jlc86vndfvmplb7qhllikkirq7hgpykrshna";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ] ++ optional cudaSupport addOpenGLRunpath;
|
||||
@ -29,6 +30,7 @@ stdenv.mkDerivation rec {
|
||||
freetype libjpeg libpng libsamplerate libsndfile libtiff libGLU libGL openal
|
||||
opencolorio openexr openimageio openjpeg_1 python zlib fftw jemalloc
|
||||
(opensubdiv.override { inherit cudaSupport; })
|
||||
openvdb libXxf86vm tbb
|
||||
makeWrapper
|
||||
]
|
||||
++ optional jackaudioSupport libjack2
|
||||
@ -56,6 +58,9 @@ stdenv.mkDerivation rec {
|
||||
"-DWITH_PYTHON_INSTALL=OFF"
|
||||
"-DWITH_PYTHON_INSTALL_NUMPY=OFF"
|
||||
"-DPYTHON_NUMPY_PATH=${python3Packages.numpy}/${python.sitePackages}"
|
||||
"-DWITH_OPENVDB=ON"
|
||||
"-DWITH_TBB=ON"
|
||||
"-DWITH_IMAGE_OPENJPEG=ON"
|
||||
]
|
||||
++ optional jackaudioSupport "-DWITH_JACK=ON"
|
||||
++ optional cudaSupport "-DWITH_CYCLES_CUDA_BINARIES=ON"
|
||||
|
@ -29,13 +29,13 @@ with stdenv.lib;
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "elogind";
|
||||
version = "239.5";
|
||||
version = "241.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "elogind";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "1gdiy4vbx4gs2hnb79x14zi530mlq26glxpzp3c95w8l058wj4ba";
|
||||
sha256 = "0jpb55prqq5cm3w2gy9766cbaqknjvbrbniyshb8bz1q31vf4jlq";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "et";
|
||||
version = "0.1.1";
|
||||
version = "0.1.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "geistesk";
|
||||
repo = "et";
|
||||
rev = version;
|
||||
sha256 = "167w9qwfpd63rgy0xmkkkh5krmd91q42c3ijy3j099krgdfbb9bc";
|
||||
sha256 = "0i0lgmnly8n7y4y6pb10pxgxyz8s5zk26k8z1g1578v1wan01lnq";
|
||||
};
|
||||
|
||||
buildInputs = [ libnotify gdk-pixbuf ];
|
||||
@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Minimal libnotify-based (egg) timer";
|
||||
homepage = https://github.com/geistesk/et;
|
||||
homepage = "https://github.com/geistesk/et";
|
||||
license = licenses.gpl3;
|
||||
platforms = platforms.unix;
|
||||
maintainers = with maintainers; [ geistesk ];
|
||||
|
@ -1,5 +1,5 @@
|
||||
{ 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
|
||||
}:
|
||||
|
||||
@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
|
||||
itstool
|
||||
desktop-file-utils
|
||||
vala
|
||||
gnome3.yelp-tools
|
||||
yelp-tools
|
||||
wrapGAppsHook
|
||||
# For https://github.com/FontManager/master/blob/master/lib/unicode/meson.build
|
||||
gobject-introspection
|
||||
|
@ -20,13 +20,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "formatter";
|
||||
version = "0.3.0";
|
||||
version = "0.3.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Djaler";
|
||||
repo = "Formatter";
|
||||
rev = version;
|
||||
sha256 = "145742dk16736zxj30rzn61h4k0xpggfsbqkxllxd302mgbmxlzq";
|
||||
sha256 = "1ghxd2h0pklhlrjslfr46vza1kjsm3mr0sdzzjiqi9jd6hddnk7i";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
@ -30,6 +30,7 @@
|
||||
, postgresql
|
||||
, gnome3
|
||||
, gobject-introspection
|
||||
, yelp-tools
|
||||
, wrapGAppsHook
|
||||
}:
|
||||
|
||||
@ -67,7 +68,7 @@ in stdenv.mkDerivation rec {
|
||||
libtool
|
||||
mm-common
|
||||
intltool
|
||||
gnome3.yelp-tools
|
||||
yelp-tools
|
||||
itstool
|
||||
doxygen
|
||||
graphviz
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
mkDerivation rec {
|
||||
pname = "gpxsee";
|
||||
version = "7.17";
|
||||
version = "7.18";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "tumic0";
|
||||
repo = "GPXSee";
|
||||
rev = version;
|
||||
sha256 = "10mch709m4ws73yzkrx9lm2hwzl179ggpk6xkbhkvnl7rsd2yz08";
|
||||
sha256 = "1z3knfqfv0rwsq66adk0qngw1r500yvy4z259bygqkzbn2l5fcjk";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ qmake ];
|
||||
|
@ -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
|
||||
ld_library_path = builtins.concatStringsSep ":" [
|
||||
@ -24,6 +24,7 @@ let
|
||||
zlib
|
||||
libpng
|
||||
dbus
|
||||
addOpenGLRunpath.driverLink
|
||||
])
|
||||
];
|
||||
license_dir = "~/.config/houdini";
|
||||
|
@ -16,6 +16,7 @@
|
||||
, sshfs
|
||||
, makeWrapper
|
||||
, kwayland
|
||||
, kio
|
||||
}:
|
||||
|
||||
mkDerivation rec {
|
||||
@ -30,7 +31,7 @@ mkDerivation rec {
|
||||
buildInputs = [
|
||||
libfakekey libXtst
|
||||
ki18n kiconthemes kcmutils kconfigwidgets kdbusaddons knotifications
|
||||
qca-qt5 qtx11extras makeWrapper kwayland
|
||||
qca-qt5 qtx11extras makeWrapper kwayland kio
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ extra-cmake-modules kdoctools ];
|
||||
|
@ -1,21 +1,47 @@
|
||||
{ stdenv, pkgconfig, fetchurl, buildPythonApplication
|
||||
, autoreconfHook, wrapGAppsHook, 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
|
||||
{ stdenv
|
||||
, pkgconfig
|
||||
, fetchurl
|
||||
, buildPythonApplication
|
||||
, autoreconfHook
|
||||
, wrapGAppsHook
|
||||
, 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 {
|
||||
pname = "orca";
|
||||
version = "3.34.0";
|
||||
version = "3.34.1";
|
||||
|
||||
format = "other";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "10h258cprsxzb2hz9wqrkzv1yrsm19ws46l6fsnspywza5wq0z4p";
|
||||
sha256 = "1q38n7hyshkiszmn361skxjynxr31lcms7a1iny6d0zlpmh1vnk4";
|
||||
};
|
||||
|
||||
patches = [
|
||||
@ -29,19 +55,40 @@ buildPythonApplication rec {
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
autoreconfHook wrapGAppsHook pkgconfig libxmlxx3
|
||||
gettext yelp-tools itstool gobject-introspection
|
||||
autoreconfHook
|
||||
wrapGAppsHook
|
||||
pkgconfig
|
||||
libxmlxx3
|
||||
gettext
|
||||
yelp-tools
|
||||
itstool
|
||||
gobject-introspection
|
||||
];
|
||||
|
||||
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;
|
||||
|
||||
buildInputs = [
|
||||
python 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
|
||||
python
|
||||
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 = {
|
||||
@ -51,7 +98,7 @@ buildPythonApplication rec {
|
||||
};
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
homepage = https://wiki.gnome.org/Projects/Orca;
|
||||
homepage = "https://wiki.gnome.org/Projects/Orca";
|
||||
description = "Screen reader";
|
||||
longDescription = ''
|
||||
A free, open source, flexible and extensible screen reader that provides
|
||||
|
@ -19,6 +19,6 @@ stdenv.mkDerivation rec {
|
||||
homepage = http://tasktools.org;
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ matthiasbeyer ];
|
||||
platforms = platforms.linux;
|
||||
platforms = platforms.unix;
|
||||
};
|
||||
}
|
||||
|
@ -1,20 +1,22 @@
|
||||
{ enableGUI ? true, enablePDFtoPPM ? true, useT1Lib ? false
|
||||
, stdenv, fetchurl, zlib, libpng, freetype ? null, t1lib ? null
|
||||
, cmake, qtbase ? null, qtsvg ? null, wrapQtAppsHook
|
||||
{ enableGUI ? true
|
||||
, enablePDFtoPPM ? true
|
||||
, 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 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 {
|
||||
name = "xpdf-4.00";
|
||||
|
||||
src = fetchurl {
|
||||
url = http://www.xpdfreader.com/dl/xpdf-4.00.tar.gz;
|
||||
sha256 = "1mhn89738vjva14xr5gblc2zrdgzmpqbbjdflqdmpqv647294ggz";
|
||||
src = fetchzip {
|
||||
url = "https://xpdfreader-dl.s3.amazonaws.com/${pname}-${version}.tar.gz";
|
||||
sha256 = "0dzwq6fnk013wa4l5mjpvm4mms2mh5hbrxv4rhk2ab5ljbzz7b2w";
|
||||
};
|
||||
|
||||
# Fix "No known features for CXX compiler", see
|
||||
@ -26,20 +28,33 @@ stdenv.mkDerivation {
|
||||
[ cmake ]
|
||||
++ 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 ] ++
|
||||
stdenv.lib.optional enableGUI qtbase ++
|
||||
stdenv.lib.optional useT1Lib t1lib ++
|
||||
stdenv.lib.optional enablePrinting cups ++
|
||||
stdenv.lib.optional enablePDFtoPPM freetype;
|
||||
|
||||
# Debian uses '-fpermissive' to bypass some errors on char* constantness.
|
||||
CXXFLAGS = "-O2 -fpermissive";
|
||||
|
||||
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; {
|
||||
homepage = https://www.xpdfreader.com;
|
||||
homepage = "https://www.xpdfreader.com";
|
||||
description = "Viewer for Portable Document Format (PDF) files";
|
||||
longDescription = ''
|
||||
XPDF includes multiple tools for viewing and processing PDF files.
|
||||
@ -56,5 +71,13 @@ stdenv.mkDerivation {
|
||||
'';
|
||||
license = with licenses; [ gpl2 gpl3 ];
|
||||
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"
|
||||
];
|
||||
};
|
||||
}
|
||||
|
@ -19,13 +19,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ephemeral";
|
||||
version = "6.0.0";
|
||||
version = "6.1.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cassidyjames";
|
||||
repo = "ephemeral";
|
||||
rev = version;
|
||||
sha256 = "0g9rrx41grmgf4nn2pp17yhjxxayk826gs6nmkfdnimd4gmlf3nk";
|
||||
sha256 = "1i77chbjjg8zda5bnn1wj4h00a88awfls5b3i3dqwgsi356hv4wb";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -1,11 +1,11 @@
|
||||
{ lib, buildGoPackage, fetchFromGitHub }:
|
||||
|
||||
# SHA of ${version} for the tool's help output
|
||||
let rev = "7ad367535a6710802085d41e0dbb53df359b9882";
|
||||
let rev = "c9c2a461cd3397909fe6e45ff71836347ef89fd8";
|
||||
in
|
||||
buildGoPackage rec {
|
||||
pname = "sonobuoy";
|
||||
version = "0.15.0";
|
||||
version = "0.16.1";
|
||||
|
||||
goPackagePath = "github.com/heptio/sonobuoy";
|
||||
|
||||
@ -19,10 +19,10 @@ buildGoPackage rec {
|
||||
'';
|
||||
|
||||
src = fetchFromGitHub {
|
||||
sha256 = "0dkmhmr7calk8mkdxfpy3yjzk10ja4gz1jq8pgk3v8rh04f4h1x5";
|
||||
sha256 = "14qc5a7jbr403wjpk6pgpb94i72yx647sg9srz07q6drq650kyfv";
|
||||
rev = "v${version}";
|
||||
repo = "sonobuoy";
|
||||
owner = "heptio";
|
||||
owner = "vmware-tanzu";
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
@ -36,8 +36,8 @@ buildGoPackage rec {
|
||||
accessible and non-destructive manner.
|
||||
'';
|
||||
|
||||
homepage = "https://github.com/heptio/sonobuoy";
|
||||
homepage = "https://sonobuoy.io";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ carlosdagos ];
|
||||
maintainers = with maintainers; [ carlosdagos saschagrunert ];
|
||||
};
|
||||
}
|
||||
|
@ -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:
|
||||
# * versions of `riot-web` and `riot-desktop` should be kept in sync.
|
||||
@ -14,7 +14,7 @@ let
|
||||
sha256 = "1xi5zg3602d7gdjxskpk2q3anpn2drrkxyirfvi9mzcfp2r05557";
|
||||
};
|
||||
|
||||
in yarn2nix-moretea.mkYarnPackage rec {
|
||||
in mkYarnPackage rec {
|
||||
name = "riot-desktop-${version}";
|
||||
inherit version;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/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
|
||||
|
||||
|
@ -14,11 +14,11 @@ assert pulseaudioSupport -> libpulseaudio != null;
|
||||
let
|
||||
inherit (stdenv.lib) concatStringsSep makeBinPath optional;
|
||||
|
||||
version = "3.0.309708.1027";
|
||||
version = "3.0.317369.1110";
|
||||
srcs = {
|
||||
x86_64-linux = fetchurl {
|
||||
url = "https://zoom.us/client/${version}/zoom_x86_64.tar.xz";
|
||||
sha256 = "0g0nmlbcps331vdnfj571lzhcw8cb2gxbll09jananxdpnmwv5l6";
|
||||
sha256 = "0r4wp9qb1739xwr24kglc4sj8qaxwr4nh5p1igi3x6f1f8gczia7";
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
buildGoPackage rec {
|
||||
pname = "rclone";
|
||||
version = "1.50.1";
|
||||
version = "1.50.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = pname;
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "0iwm0a9h6xxdsqw86xlqcsz7h4pzsg134m6yfqj5s2xg7kfy5laq";
|
||||
sha256 = "0yaspkh88q8i58i8g8mm6sqb75hczavz2lvzdd1iif1bqgi6b5fz";
|
||||
};
|
||||
|
||||
goPackagePath = "github.com/rclone/rclone";
|
||||
|
@ -4,13 +4,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "meteo";
|
||||
version = "0.9.7";
|
||||
version = "0.9.8";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "bitseater";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "014x3mg2dc58h1qwy2nrz3a5mzdnbzish8zgn3x6lj6szfz5c72n";
|
||||
sha256 = "1ll5fja0dqxcr6hrh2dk4hgw9gf8ms9bcp1ifznd21byxzyhdlr0";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
@ -40,9 +40,9 @@ stdenv.mkDerivation rec {
|
||||
|
||||
meta = with stdenv.lib; {
|
||||
description = "Know the forecast of the next hours & days";
|
||||
homepage = https://gitlab.com/bitseater/meteo;
|
||||
license = licenses.gpl3Plus;
|
||||
homepage = https://gitlab.com/bitseater/meteo;
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = with maintainers; [ worldofpeace ];
|
||||
platforms = platforms.linux;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
@ -3,13 +3,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "aesop";
|
||||
version = "1.1.2";
|
||||
version = "1.1.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "lainsce";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "1vadm8295jb7jaah2qykf3h9zvl5c013sanmxqi4snmmq4pa32ax";
|
||||
sha256 = "1hnwhxaz0zx4fswrxjzyv5s77v5fimn87yid9sd1qgfv2g1ck0jc";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -65,6 +65,8 @@ in stdenv.mkDerivation rec {
|
||||
|
||||
inherit (primary-src) src;
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
# For some reason librdf_redland sometimes refers to rasqal.h instead
|
||||
# of rasqal/rasqal.h
|
||||
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"
|
||||
sed -re 's@Icon=libreoffice(dev)?[0-9.]*-?@Icon=@' -i "$out/share/applications/"*.desktop
|
||||
|
||||
mkdir -p $dev
|
||||
cp -r include $dev
|
||||
'';
|
||||
|
||||
configureFlags = [
|
||||
|
@ -65,6 +65,8 @@ in stdenv.mkDerivation rec {
|
||||
|
||||
inherit (primary-src) src;
|
||||
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
# For some reason librdf_redland sometimes refers to rasqal.h instead
|
||||
# of rasqal/rasqal.h
|
||||
NIX_CFLAGS_COMPILE = [ "-I${librdf_rasqal}/include/rasqal" ];
|
||||
@ -276,6 +278,9 @@ in stdenv.mkDerivation rec {
|
||||
|
||||
cp -r sysui/desktop/icons "$out/share"
|
||||
sed -re 's@Icon=libreoffice(dev)?[0-9.]*-?@Icon=@' -i "$out/share/applications/"*.desktop
|
||||
|
||||
mkdir -p $dev
|
||||
cp -r include $dev
|
||||
'';
|
||||
|
||||
configureFlags = [
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
callPackage ./generic.nix (args // rec {
|
||||
pname = "freeoffice";
|
||||
version = "971";
|
||||
version = "973";
|
||||
edition = "2018";
|
||||
suiteName = "FreeOffice";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://www.softmaker.net/down/softmaker-freeoffice-${version}-amd64.tgz";
|
||||
sha256 = "1h36pjbpbiy4cw383cbrwh1jx2kp1ay29734zailmhifz53gj44f";
|
||||
sha256 = "0xac4ynf1lfh8qmni5bhp4ybaamdfngva4bqaq21n1m4pgrx1ba5";
|
||||
};
|
||||
|
||||
archive = "freeoffice${edition}.tar.lzma";
|
||||
|
@ -96,6 +96,10 @@ in stdenv.mkDerivation rec {
|
||||
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
|
||||
${desktopItems.planmaker.buildCommand}
|
||||
${desktopItems.presentations.buildCommand}
|
||||
|
@ -2,14 +2,14 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "freebayes";
|
||||
version = "2017-08-23";
|
||||
version = "1.3.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
name = "freebayes-${version}-src";
|
||||
owner = "ekg";
|
||||
repo = "freebayes";
|
||||
rev = "8d2b3a060da473e1f4f89be04edfce5cba63f1d3";
|
||||
sha256 = "0yyrgk2639lz1yvg4jf0ccahnkic31dy77q05pb3i28rjf37v45z";
|
||||
rev = "v${version}";
|
||||
sha256 = "035nriknjqq8gvil81vvsmvqwi35v80q8h1cw24vd1gdyn1x7bys";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
@ -298,6 +298,10 @@ stdenv.mkDerivation {
|
||||
|
||||
# As of 2.19.0, t5562 refers to #!/usr/bin/perl
|
||||
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 ''
|
||||
# Test fails (as of 2.17.0, musl 1.1.19)
|
||||
disable_test t3900-i18n-commit
|
||||
|
@ -1,7 +1,7 @@
|
||||
{ stdenv, lib, fetchurl, fetchFromGitLab, bundlerEnv
|
||||
, ruby, tzdata, git, nettools, nixosTests, nodejs
|
||||
, gitlabEnterprise ? false, callPackage, yarn
|
||||
, yarn2nix-moretea, replace
|
||||
, fixup_yarn_lock, replace
|
||||
}:
|
||||
|
||||
let
|
||||
@ -62,7 +62,7 @@ let
|
||||
yarn config --offline set yarn-offline-mirror ${yarnOfflineCache}
|
||||
|
||||
# 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
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/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_log
|
||||
|
@ -1,6 +1,17 @@
|
||||
{ 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";
|
||||
version = "0.12.0";
|
||||
|
||||
@ -20,7 +31,7 @@ rustPlatform.buildRustPackage rec {
|
||||
|
||||
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 ]);
|
||||
|
||||
doCheck = false;
|
||||
|
@ -1,7 +1,7 @@
|
||||
{ stdenv, fetchFromGitHub
|
||||
, meson, ninja, pkgconfig, makeWrapper
|
||||
, wlroots, wayland, wayland-protocols, pixman, libxkbcommon
|
||||
, systemd, mesa, libX11
|
||||
, systemd, libGL, libX11
|
||||
, xwayland ? null
|
||||
}:
|
||||
|
||||
@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
|
||||
buildInputs = [
|
||||
wlroots wayland wayland-protocols pixman libxkbcommon
|
||||
# TODO: Not specified but required:
|
||||
systemd mesa libX11
|
||||
systemd libGL libX11
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
@ -185,7 +185,7 @@ rec {
|
||||
keyutils.lib
|
||||
libjack2
|
||||
fribidi
|
||||
p11_kit
|
||||
p11-kit
|
||||
|
||||
# libraries not on the upstream include list, but nevertheless expected
|
||||
# by at least one appimage
|
||||
|
@ -1,6 +1,8 @@
|
||||
addEmacsVars () {
|
||||
if [[ -d "$1/share/emacs/site-lisp" ]]; then
|
||||
export EMACSLOADPATH="$1/share/emacs/site-lisp${EMACSLOADPATH:+:}${EMACSLOADPATH-}"
|
||||
if test -d $1/share/emacs/site-lisp; then
|
||||
# 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
|
||||
}
|
||||
|
||||
|
@ -1,27 +1,41 @@
|
||||
{ stdenv, fetchurl, itstool, libxml2, gettext, gnome3 }:
|
||||
{ stdenv
|
||||
, fetchurl
|
||||
, gettext
|
||||
, gnome3
|
||||
, itstool
|
||||
, libxml2
|
||||
, yelp-tools
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "gnome-user-docs";
|
||||
version = "3.2.2";
|
||||
version = "3.34.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnome/sources/${pname}/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "1ka0nw2kc85p10y8x31v0wv06a88k7qrgafp4ys04y9fzz0rkcjj";
|
||||
url = "mirror://gnome/sources/gnome-user-docs/${stdenv.lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "11m9fv8k2hynrcgah4jvbm6yczg0s1ly302mipysbwpn6gbdkvf2";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ itstool libxml2 gettext ];
|
||||
nativeBuildInputs = [
|
||||
gettext
|
||||
itstool
|
||||
libxml2
|
||||
yelp-tools
|
||||
];
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
passthru = {
|
||||
updateScript = gnome3.updateScript {
|
||||
packageName = pname;
|
||||
attrPath = "gnome3.gnome-user-docs";
|
||||
};
|
||||
};
|
||||
|
||||
meta = {
|
||||
homepage = "https://gitlab.gnome.org/GNOME/gnome-user-docs";
|
||||
description = "GNOME User Documentation";
|
||||
license = stdenv.lib.licenses.cc-by-30;
|
||||
meta = with stdenv.lib; {
|
||||
description = "User and system administration help for the GNOME desktop";
|
||||
homepage = "https://help.gnome.org/users/gnome-help/";
|
||||
license = licenses.cc-by-30;
|
||||
maintainers = gnome3.maintainers;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ in fetchzip {
|
||||
|
||||
meta = with lib; {
|
||||
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;
|
||||
platforms = platforms.all;
|
||||
|
@ -1,7 +1,7 @@
|
||||
{ lib, fetchzip }:
|
||||
|
||||
let
|
||||
version = "1.7.2";
|
||||
version = "1.8.0";
|
||||
in
|
||||
|
||||
fetchzip rec {
|
||||
@ -15,7 +15,7 @@ fetchzip rec {
|
||||
unzip -j $downloadedFile README.md -d $out/share/doc/${name}
|
||||
'';
|
||||
|
||||
sha256 = "1fwvbqfrgb539xybwdawvwa8cg4f215kw905rgl9a6p0iwa1nxqk";
|
||||
sha256 = "07y2w6xzkbaj6vr95fvvnmwq1pw9jib4z02xf8937dx812yic9ni";
|
||||
|
||||
meta = with lib; {
|
||||
homepage = https://github.com/belluzj/fantasque-sans;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user