uboot: (firmwareOdroidC2/C4) don't invoke patch tool, use patches = [] instead
https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh#L948 this can do it nicely. Signed-off-by: Anton Arapov <anton@deadbeef.mx>
This commit is contained in:
commit
56de2bcd43
30691 changed files with 3076956 additions and 0 deletions
145
nixos/tests/initrd-network-openvpn/default.nix
Normal file
145
nixos/tests/initrd-network-openvpn/default.nix
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
import ../make-test-python.nix ({ lib, ...}:
|
||||
|
||||
{
|
||||
name = "initrd-network-openvpn";
|
||||
|
||||
nodes =
|
||||
let
|
||||
|
||||
# Inlining of the shared secret for the
|
||||
# OpenVPN server and client
|
||||
secretblock = ''
|
||||
secret [inline]
|
||||
<secret>
|
||||
${lib.readFile ./shared.key}
|
||||
</secret>
|
||||
'';
|
||||
|
||||
in
|
||||
{
|
||||
|
||||
# Minimal test case to check a successful boot, even with invalid config
|
||||
minimalboot =
|
||||
{ ... }:
|
||||
{
|
||||
boot.initrd.network = {
|
||||
enable = true;
|
||||
openvpn = {
|
||||
enable = true;
|
||||
configuration = "/dev/null";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# initrd VPN client
|
||||
ovpnclient =
|
||||
{ ... }:
|
||||
{
|
||||
virtualisation.useBootLoader = true;
|
||||
virtualisation.vlans = [ 1 ];
|
||||
|
||||
boot.initrd = {
|
||||
# This command does not fork to keep the VM in the state where
|
||||
# only the initramfs is loaded
|
||||
preLVMCommands =
|
||||
''
|
||||
/bin/nc -p 1234 -lke /bin/echo TESTVALUE
|
||||
'';
|
||||
|
||||
network = {
|
||||
enable = true;
|
||||
|
||||
# Work around udhcpc only getting a lease on eth0
|
||||
postCommands = ''
|
||||
/bin/ip addr add 192.168.1.2/24 dev eth1
|
||||
'';
|
||||
|
||||
# Example configuration for OpenVPN
|
||||
# This is the main reason for this test
|
||||
openvpn = {
|
||||
enable = true;
|
||||
configuration = "${./initrd.ovpn}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# VPN server and gateway for ovpnclient between vlan 1 and 2
|
||||
ovpnserver =
|
||||
{ ... }:
|
||||
{
|
||||
virtualisation.vlans = [ 1 2 ];
|
||||
|
||||
# Enable NAT and forward port 12345 to port 1234
|
||||
networking.nat = {
|
||||
enable = true;
|
||||
internalInterfaces = [ "tun0" ];
|
||||
externalInterface = "eth2";
|
||||
forwardPorts = [ { destination = "10.8.0.2:1234";
|
||||
sourcePort = 12345; } ];
|
||||
};
|
||||
|
||||
# Trust tun0 and allow the VPN Server to be reached
|
||||
networking.firewall = {
|
||||
trustedInterfaces = [ "tun0" ];
|
||||
allowedUDPPorts = [ 1194 ];
|
||||
};
|
||||
|
||||
# Minimal OpenVPN server configuration
|
||||
services.openvpn.servers.testserver =
|
||||
{
|
||||
config = ''
|
||||
dev tun0
|
||||
ifconfig 10.8.0.1 10.8.0.2
|
||||
${secretblock}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
# Client that resides in the "external" VLAN
|
||||
testclient =
|
||||
{ ... }:
|
||||
{
|
||||
virtualisation.vlans = [ 2 ];
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
testScript =
|
||||
''
|
||||
# Minimal test case, checks whether enabling (with invalid config) harms
|
||||
# the boot process
|
||||
with subtest("Check for successful boot with broken openvpn config"):
|
||||
minimalboot.start()
|
||||
# If we get to multi-user.target, we booted successfully
|
||||
minimalboot.wait_for_unit("multi-user.target")
|
||||
minimalboot.shutdown()
|
||||
|
||||
# Elaborated test case where the ovpnclient (where this module is used)
|
||||
# can be reached by testclient only over ovpnserver.
|
||||
# This is an indirect test for success.
|
||||
with subtest("Check for connection from initrd VPN client, config as file"):
|
||||
ovpnserver.start()
|
||||
testclient.start()
|
||||
ovpnclient.start()
|
||||
|
||||
# Wait until the OpenVPN Server is available
|
||||
ovpnserver.wait_for_unit("openvpn-testserver.service")
|
||||
ovpnserver.succeed("ping -c 1 10.8.0.1")
|
||||
|
||||
# Wait for the client to connect
|
||||
ovpnserver.wait_until_succeeds("ping -c 1 10.8.0.2")
|
||||
|
||||
# Wait until the testclient has network
|
||||
testclient.wait_for_unit("network.target")
|
||||
|
||||
# Check that ovpnclient is reachable over vlan 1
|
||||
ovpnserver.succeed("nc -w 2 192.168.1.2 1234 | grep -q TESTVALUE")
|
||||
|
||||
# Check that ovpnclient is reachable over tun0
|
||||
ovpnserver.succeed("nc -w 2 10.8.0.2 1234 | grep -q TESTVALUE")
|
||||
|
||||
# Check that ovpnclient is reachable from testclient over the gateway
|
||||
testclient.succeed("nc -w 2 192.168.2.3 12345 | grep -q TESTVALUE")
|
||||
'';
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue