tangled
alpha
login
or
join now
tjh.dev
/
nixpkgs
Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
0
fork
atom
overview
issues
pulls
pipelines
softether: support SoftEther VPN 4.18
Wei-Ming Yang
10 years ago
efd34824
13576925
+208
5 changed files
expand all
collapse all
unified
split
lib
maintainers.nix
nixos
modules
module-list.nix
services
networking
softether.nix
pkgs
servers
softether
4.18.nix
top-level
all-packages.nix
+1
lib/maintainers.nix
···
210
210
refnil = "Martin Lavoie <broemartino@gmail.com>";
211
211
relrod = "Ricky Elrod <ricky@elrod.me>";
212
212
renzo = "Renzo Carbonara <renzocarbonara@gmail.com>";
213
213
+
rick68 = "Wei-Ming Yang <rick68@gmail.com>";
213
214
rickynils = "Rickard Nilsson <rickynils@gmail.com>";
214
215
rob = "Rob Vermaas <rob.vermaas@gmail.com>";
215
216
robberer = "Longrin Wischnewski <robberer@freakmail.de>";
+1
nixos/modules/module-list.nix
···
330
330
./services/networking/seeks.nix
331
331
./services/networking/skydns.nix
332
332
./services/networking/shout.nix
333
333
+
./services/networking/softether.nix
333
334
./services/networking/spiped.nix
334
335
./services/networking/sslh.nix
335
336
./services/networking/ssh/lshd.nix
+150
nixos/modules/services/networking/softether.nix
···
1
1
+
{ config, lib, pkgs, ... }:
2
2
+
3
3
+
with lib;
4
4
+
5
5
+
let
6
6
+
pkg = pkgs.softether;
7
7
+
cfg = config.services.softether;
8
8
+
9
9
+
in
10
10
+
{
11
11
+
12
12
+
###### interface
13
13
+
14
14
+
options = {
15
15
+
16
16
+
services.softether = {
17
17
+
18
18
+
enable = mkEnableOption "SoftEther VPN services";
19
19
+
20
20
+
vpnserver.enable = mkEnableOption "SoftEther VPN Server";
21
21
+
22
22
+
vpnbridge.enable = mkEnableOption "SoftEther VPN Bridge";
23
23
+
24
24
+
vpnclient = {
25
25
+
enable = mkEnableOption "SoftEther VPN Client";
26
26
+
up = mkOption {
27
27
+
type = types.lines;
28
28
+
default = "";
29
29
+
description = ''
30
30
+
Shell commands executed when the Virtual Network Adapter(s) is/are starting.
31
31
+
'';
32
32
+
};
33
33
+
down = mkOption {
34
34
+
type = types.lines;
35
35
+
default = "";
36
36
+
description = ''
37
37
+
Shell commands executed when the Virtual Network Adapter(s) is/are shutting down.
38
38
+
'';
39
39
+
};
40
40
+
};
41
41
+
42
42
+
dataDir = mkOption {
43
43
+
type = types.string;
44
44
+
default = "${pkg.dataDir}";
45
45
+
description = ''
46
46
+
Data directory for SoftEther VPN.
47
47
+
'';
48
48
+
};
49
49
+
50
50
+
};
51
51
+
52
52
+
};
53
53
+
54
54
+
###### implementation
55
55
+
56
56
+
config = mkIf cfg.enable (
57
57
+
58
58
+
mkMerge [{
59
59
+
environment.systemPackages = [
60
60
+
(pkgs.lib.overrideDerivation pkg (attrs: {
61
61
+
dataDir = cfg.dataDir;
62
62
+
}))
63
63
+
];
64
64
+
jobs.softether = {
65
65
+
description = "SoftEther VPN services initial job";
66
66
+
startOn = "started network-interfaces";
67
67
+
preStart = ''
68
68
+
for d in vpnserver vpnbridge vpnclient vpncmd; do
69
69
+
if ! test -e ${cfg.dataDir}/$d; then
70
70
+
${pkgs.coreutils}/bin/mkdir -m0700 -p ${cfg.dataDir}/$d
71
71
+
install -m0600 ${pkg}${cfg.dataDir}/$d/hamcore.se2 ${cfg.dataDir}/$d/hamcore.se2
72
72
+
fi
73
73
+
done
74
74
+
rm -rf ${cfg.dataDir}/vpncmd/vpncmd
75
75
+
ln -s ${pkg}${cfg.dataDir}/vpncmd/vpncmd ${cfg.dataDir}/vpncmd/vpncmd
76
76
+
'';
77
77
+
exec = "true";
78
78
+
};
79
79
+
}
80
80
+
81
81
+
(mkIf (cfg.vpnserver.enable) {
82
82
+
systemd.services.vpnserver = {
83
83
+
description = "SoftEther VPN Server";
84
84
+
after = [ "network-interfaces.target" ];
85
85
+
wantedBy = [ "multi-user.target" ];
86
86
+
serviceConfig = {
87
87
+
ExecStart = "${pkg}/bin/vpnserver start";
88
88
+
ExecStop = "${pkg}/bin/vpnserver stop";
89
89
+
Type = "forking";
90
90
+
};
91
91
+
preStart = ''
92
92
+
rm -rf ${cfg.dataDir}/vpnserver/vpnserver
93
93
+
ln -s ${pkg}${cfg.dataDir}/vpnserver/vpnserver ${cfg.dataDir}/vpnserver/vpnserver
94
94
+
'';
95
95
+
postStop = ''
96
96
+
rm -rf ${cfg.dataDir}/vpnserver/vpnserver
97
97
+
'';
98
98
+
};
99
99
+
})
100
100
+
101
101
+
(mkIf (cfg.vpnbridge.enable) {
102
102
+
systemd.services.vpnbridge = {
103
103
+
description = "SoftEther VPN Bridge";
104
104
+
after = [ "network-interfaces.target" ];
105
105
+
wantedBy = [ "multi-user.target" ];
106
106
+
serviceConfig = {
107
107
+
ExecStart = "${pkg}/bin/vpnbridge start";
108
108
+
ExecStop = "${pkg}/bin/vpnbridge stop";
109
109
+
Type = "forking";
110
110
+
};
111
111
+
preStart = ''
112
112
+
rm -rf ${cfg.dataDir}/vpnbridge/vpnbridge
113
113
+
ln -s ${pkg}${cfg.dataDir}/vpnbridge/vpnbridge ${cfg.dataDir}/vpnbridge/vpnbridge
114
114
+
'';
115
115
+
postStop = ''
116
116
+
rm -rf ${cfg.dataDir}/vpnbridge/vpnbridge
117
117
+
'';
118
118
+
};
119
119
+
})
120
120
+
121
121
+
(mkIf (cfg.vpnclient.enable) {
122
122
+
systemd.services.vpnclient = {
123
123
+
description = "SoftEther VPN Client";
124
124
+
after = [ "network-interfaces.target" ];
125
125
+
wantedBy = [ "multi-user.target" ];
126
126
+
serviceConfig = {
127
127
+
ExecStart = "${pkg}/bin/vpnclient start";
128
128
+
ExecStop = "${pkg}/bin/vpnclient stop";
129
129
+
Type = "forking";
130
130
+
};
131
131
+
preStart = ''
132
132
+
rm -rf ${cfg.dataDir}/vpnclient/vpnclient
133
133
+
ln -s ${pkg}${cfg.dataDir}/vpnclient/vpnclient ${cfg.dataDir}/vpnclient/vpnclient
134
134
+
'';
135
135
+
postStart = ''
136
136
+
sleep 1
137
137
+
${cfg.vpnclient.up}
138
138
+
'';
139
139
+
postStop = ''
140
140
+
rm -rf ${cfg.dataDir}/vpnclient/vpnclient
141
141
+
sleep 1
142
142
+
${cfg.vpnclient.down}
143
143
+
'';
144
144
+
};
145
145
+
boot.kernelModules = [ "tun" ];
146
146
+
})
147
147
+
148
148
+
]);
149
149
+
150
150
+
}
+53
pkgs/servers/softether/4.18.nix
···
1
1
+
{ stdenv, fetchurl
2
2
+
, openssl, readline, ncurses, zlib }:
3
3
+
4
4
+
let
5
5
+
os = if stdenv.isLinux then "1"
6
6
+
else if stdenv.isFreeBSD then "2"
7
7
+
else if stdenv.isSunOS then "3"
8
8
+
else if stdenv.isDarwin then "4"
9
9
+
else if stdenv.isOpenBSD then "5"
10
10
+
else "";
11
11
+
cpuBits = if stdenv.is64bit then "2" else "1";
12
12
+
13
13
+
in
14
14
+
15
15
+
stdenv.mkDerivation rec {
16
16
+
name = "softether-${version}";
17
17
+
version = "4.18";
18
18
+
build = "9570";
19
19
+
compiledDate = "2015.07.26";
20
20
+
dataDir = "/var/lib/softether";
21
21
+
22
22
+
src = fetchurl {
23
23
+
url = "http://www.softether-download.com/files/softether/v${version}-${build}-rtm-${compiledDate}-tree/Source_Code/softether-src-v${version}-${build}-rtm.tar.gz";
24
24
+
sha256 = "585d61e524d3cad90806cbeb52ebe54b5144359e6c44676e8e7fb5683ffd4574";
25
25
+
};
26
26
+
27
27
+
buildInputs = [ openssl readline ncurses zlib ];
28
28
+
29
29
+
preConfigure = ''
30
30
+
echo "${os}
31
31
+
${cpuBits}
32
32
+
" | ./configure
33
33
+
rm configure
34
34
+
'';
35
35
+
36
36
+
buildPhase = ''
37
37
+
mkdir -p $out/bin
38
38
+
sed -i \
39
39
+
-e "/INSTALL_BINDIR=/s|/usr/bin|/bin|g" \
40
40
+
-e "/_DIR=/s|/usr|${dataDir}|g" \
41
41
+
-e "s|\$(INSTALL|$out/\$(INSTALL|g" \
42
42
+
-e "/echo/s|echo $out/|echo |g" \
43
43
+
Makefile
44
44
+
'';
45
45
+
46
46
+
meta = with stdenv.lib; {
47
47
+
description = "An Open-Source Free Cross-platform Multi-protocol VPN Program";
48
48
+
homepage = https://www.softether.org/;
49
49
+
license = licenses.gpl2;
50
50
+
maintainers = [ maintainers.rick68 ];
51
51
+
platforms = platforms.all;
52
52
+
};
53
53
+
}
+3
pkgs/top-level/all-packages.nix
···
3031
3031
3032
3032
socat2pre = lowPrio (callPackage ../tools/networking/socat/2.x.nix { });
3033
3033
3034
3034
+
softether_4_18 = callPackage ../servers/softether/4.18.nix { };
3035
3035
+
softether = softether_4_18;
3036
3036
+
3034
3037
sourceHighlight = callPackage ../tools/text/source-highlight { };
3035
3038
3036
3039
spaceFM = callPackage ../applications/misc/spacefm { };