amazon-init.service: fix starting services at startup

We now make it happen later in the boot process so that multi-user
has already activated, so as to not run afoul of the logic in
switch-to-configuration.pl. It's not my favorite solution, but at
least it works. Also added a check to the VM test to catch the failure
so we don't break in future.

Fixes #23121
This commit is contained in:
Dan Peebles 2017-02-27 16:51:36 +00:00
parent bccac381b2
commit 6018cf4a69
2 changed files with 21 additions and 5 deletions

View file

@ -45,9 +45,8 @@ in {
inherit script;
description = "Reconfigure the system from EC2 userdata on startup";
wantedBy = [ "sshd.service" ];
before = [ "sshd.service" ];
after = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
after = [ "multi-user.target" ];
requires = [ "network-online.target" ];
restartIfChanged = false;

View file

@ -25,8 +25,13 @@ let
# access. Mostly copied from
# modules/profiles/installation-device.nix.
system.extraDependencies =
[ pkgs.stdenv pkgs.busybox pkgs.perlPackages.ArchiveCpio
pkgs.unionfs-fuse pkgs.mkinitcpio-nfs-utils
with pkgs; [
stdenv busybox perlPackages.ArchiveCpio unionfs-fuse mkinitcpio-nfs-utils
# These are used in the configure-from-userdata tests for EC2. Httpd and valgrind are requested
# directly by the configuration we set, and libxslt.bin is used indirectly as a build dependency
# of the derivation for dbus configuration files.
apacheHttpd valgrind.doc libxslt.bin
];
}
];
@ -137,6 +142,8 @@ in {
# ### http://nixos.org/channels/nixos-unstable nixos
userData = ''
{ pkgs, ... }:
{
imports = [
<nixpkgs/nixos/modules/virtualisation/amazon-image.nix>
@ -146,12 +153,22 @@ in {
environment.etc.testFile = {
text = "whoa";
};
services.httpd = {
enable = true;
adminAddr = "test@example.org";
documentRoot = "${pkgs.valgrind.doc}/share/doc/valgrind/html";
};
networking.firewall.allowedTCPPorts = [ 80 ];
}
'';
script = ''
$machine->start;
$machine->waitForFile("/etc/testFile");
$machine->succeed("cat /etc/testFile | grep -q 'whoa'");
$machine->waitForUnit("httpd.service");
$machine->succeed("curl http://localhost | grep Valgrind");
'';
};
}