Skip to content

Commit 4b4e59b

Browse files
authored
Merge pull request #77664 from tfc/transmission-torrent-test-fix
nixos/transmisison: Transmission torrent test fix
2 parents 5bdb653 + adf5642 commit 4b4e59b

2 files changed

Lines changed: 88 additions & 83 deletions

File tree

nixos/modules/services/torrent/transmission.nix

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,19 +129,23 @@ in
129129
# It's useful to have transmission in path, e.g. for remote control
130130
environment.systemPackages = [ pkgs.transmission ];
131131

132-
users.users = optionalAttrs (cfg.user == "transmission") (singleton
133-
{ name = "transmission";
132+
users.users = optionalAttrs (cfg.user == "transmission") ({
133+
transmission = {
134+
name = "transmission";
134135
group = cfg.group;
135136
uid = config.ids.uids.transmission;
136137
description = "Transmission BitTorrent user";
137138
home = homeDir;
138139
createHome = true;
139-
});
140+
};
141+
});
140142

141-
users.groups = optionalAttrs (cfg.group == "transmission") (singleton
142-
{ name = "transmission";
143+
users.groups = optionalAttrs (cfg.group == "transmission") ({
144+
transmission = {
145+
name = "transmission";
143146
gid = config.ids.gids.transmission;
144-
});
147+
};
148+
});
145149

146150
# AppArmor profile
147151
security.apparmor.profiles = mkIf apparmor [

nixos/tests/bittorrent.nix

Lines changed: 78 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,17 @@ let
1818
externalRouterAddress = "80.100.100.1";
1919
externalClient2Address = "80.100.100.2";
2020
externalTrackerAddress = "80.100.100.3";
21+
22+
transmissionConfig = { ... }: {
23+
environment.systemPackages = [ pkgs.transmission ];
24+
services.transmission = {
25+
enable = true;
26+
settings = {
27+
dht-enabled = false;
28+
message-level = 3;
29+
};
30+
};
31+
};
2132
in
2233

2334
{
@@ -26,88 +37,79 @@ in
2637
maintainers = [ domenkozar eelco rob bobvanderlinden ];
2738
};
2839

29-
nodes =
30-
{ tracker =
31-
{ pkgs, ... }:
32-
{ environment.systemPackages = [ pkgs.transmission ];
33-
34-
virtualisation.vlans = [ 1 ];
35-
networking.interfaces.eth1.ipv4.addresses = [
36-
{ address = externalTrackerAddress; prefixLength = 24; }
37-
];
38-
39-
# We need Apache on the tracker to serve the torrents.
40-
services.httpd.enable = true;
41-
services.httpd.adminAddr = "foo@example.org";
42-
services.httpd.documentRoot = "/tmp";
43-
44-
networking.firewall.enable = false;
45-
46-
services.opentracker.enable = true;
47-
48-
services.transmission.enable = true;
49-
services.transmission.settings.dht-enabled = false;
50-
services.transmission.settings.port-forwaring-enabled = false;
51-
};
52-
53-
router =
54-
{ pkgs, nodes, ... }:
55-
{ virtualisation.vlans = [ 1 2 ];
56-
networking.nat.enable = true;
57-
networking.nat.internalInterfaces = [ "eth2" ];
58-
networking.nat.externalInterface = "eth1";
59-
networking.firewall.enable = true;
60-
networking.firewall.trustedInterfaces = [ "eth2" ];
61-
networking.interfaces.eth0.ipv4.addresses = [];
62-
networking.interfaces.eth1.ipv4.addresses = [
63-
{ address = externalRouterAddress; prefixLength = 24; }
64-
];
65-
networking.interfaces.eth2.ipv4.addresses = [
66-
{ address = internalRouterAddress; prefixLength = 24; }
67-
];
68-
services.miniupnpd = {
69-
enable = true;
70-
externalInterface = "eth1";
71-
internalIPs = [ "eth2" ];
72-
appendConfig = ''
73-
ext_ip=${externalRouterAddress}
74-
'';
40+
nodes = {
41+
tracker = { pkgs, ... }: {
42+
imports = [ transmissionConfig ];
43+
44+
virtualisation.vlans = [ 1 ];
45+
networking.firewall.enable = false;
46+
networking.interfaces.eth1.ipv4.addresses = [
47+
{ address = externalTrackerAddress; prefixLength = 24; }
48+
];
49+
50+
# We need Apache on the tracker to serve the torrents.
51+
services.httpd = {
52+
enable = true;
53+
virtualHosts = {
54+
"torrentserver.org" = {
55+
adminAddr = "foo@example.org";
56+
documentRoot = "/tmp";
7557
};
7658
};
59+
};
60+
services.opentracker.enable = true;
61+
};
7762

78-
client1 =
79-
{ pkgs, nodes, ... }:
80-
{ environment.systemPackages = [ pkgs.transmission pkgs.miniupnpc ];
81-
virtualisation.vlans = [ 2 ];
82-
networking.interfaces.eth0.ipv4.addresses = [];
83-
networking.interfaces.eth1.ipv4.addresses = [
84-
{ address = internalClient1Address; prefixLength = 24; }
85-
];
86-
networking.defaultGateway = internalRouterAddress;
87-
networking.firewall.enable = false;
88-
services.transmission.enable = true;
89-
services.transmission.settings.dht-enabled = false;
90-
services.transmission.settings.message-level = 3;
91-
};
63+
router = { pkgs, nodes, ... }: {
64+
virtualisation.vlans = [ 1 2 ];
65+
networking.nat.enable = true;
66+
networking.nat.internalInterfaces = [ "eth2" ];
67+
networking.nat.externalInterface = "eth1";
68+
networking.firewall.enable = true;
69+
networking.firewall.trustedInterfaces = [ "eth2" ];
70+
networking.interfaces.eth0.ipv4.addresses = [];
71+
networking.interfaces.eth1.ipv4.addresses = [
72+
{ address = externalRouterAddress; prefixLength = 24; }
73+
];
74+
networking.interfaces.eth2.ipv4.addresses = [
75+
{ address = internalRouterAddress; prefixLength = 24; }
76+
];
77+
services.miniupnpd = {
78+
enable = true;
79+
externalInterface = "eth1";
80+
internalIPs = [ "eth2" ];
81+
appendConfig = ''
82+
ext_ip=${externalRouterAddress}
83+
'';
84+
};
85+
};
9286

93-
client2 =
94-
{ pkgs, ... }:
95-
{ environment.systemPackages = [ pkgs.transmission ];
96-
virtualisation.vlans = [ 1 ];
97-
networking.interfaces.eth0.ipv4.addresses = [];
98-
networking.interfaces.eth1.ipv4.addresses = [
99-
{ address = externalClient2Address; prefixLength = 24; }
100-
];
101-
networking.firewall.enable = false;
102-
services.transmission.enable = true;
103-
services.transmission.settings.dht-enabled = false;
104-
services.transmission.settings.port-forwaring-enabled = false;
105-
};
87+
client1 = { pkgs, nodes, ... }: {
88+
imports = [ transmissionConfig ];
89+
environment.systemPackages = [ pkgs.miniupnpc ];
90+
91+
virtualisation.vlans = [ 2 ];
92+
networking.interfaces.eth0.ipv4.addresses = [];
93+
networking.interfaces.eth1.ipv4.addresses = [
94+
{ address = internalClient1Address; prefixLength = 24; }
95+
];
96+
networking.defaultGateway = internalRouterAddress;
97+
networking.firewall.enable = false;
10698
};
10799

108-
testScript =
109-
{ nodes, ... }:
110-
''
100+
client2 = { pkgs, ... }: {
101+
imports = [ transmissionConfig ];
102+
103+
virtualisation.vlans = [ 1 ];
104+
networking.interfaces.eth0.ipv4.addresses = [];
105+
networking.interfaces.eth1.ipv4.addresses = [
106+
{ address = externalClient2Address; prefixLength = 24; }
107+
];
108+
networking.firewall.enable = false;
109+
};
110+
};
111+
112+
testScript = { nodes, ... }: ''
111113
start_all()
112114
113115
# Wait for network and miniupnpd.
@@ -159,5 +161,4 @@ in
159161
"cmp /tmp/test.tar.bz2 ${file}"
160162
)
161163
'';
162-
163164
})

0 commit comments

Comments
 (0)