Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)

softether: support SoftEther VPN 4.18

+208
+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 + 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 + ./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 + { config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + pkg = pkgs.softether; 7 + cfg = config.services.softether; 8 + 9 + in 10 + { 11 + 12 + ###### interface 13 + 14 + options = { 15 + 16 + services.softether = { 17 + 18 + enable = mkEnableOption "SoftEther VPN services"; 19 + 20 + vpnserver.enable = mkEnableOption "SoftEther VPN Server"; 21 + 22 + vpnbridge.enable = mkEnableOption "SoftEther VPN Bridge"; 23 + 24 + vpnclient = { 25 + enable = mkEnableOption "SoftEther VPN Client"; 26 + up = mkOption { 27 + type = types.lines; 28 + default = ""; 29 + description = '' 30 + Shell commands executed when the Virtual Network Adapter(s) is/are starting. 31 + ''; 32 + }; 33 + down = mkOption { 34 + type = types.lines; 35 + default = ""; 36 + description = '' 37 + Shell commands executed when the Virtual Network Adapter(s) is/are shutting down. 38 + ''; 39 + }; 40 + }; 41 + 42 + dataDir = mkOption { 43 + type = types.string; 44 + default = "${pkg.dataDir}"; 45 + description = '' 46 + Data directory for SoftEther VPN. 47 + ''; 48 + }; 49 + 50 + }; 51 + 52 + }; 53 + 54 + ###### implementation 55 + 56 + config = mkIf cfg.enable ( 57 + 58 + mkMerge [{ 59 + environment.systemPackages = [ 60 + (pkgs.lib.overrideDerivation pkg (attrs: { 61 + dataDir = cfg.dataDir; 62 + })) 63 + ]; 64 + jobs.softether = { 65 + description = "SoftEther VPN services initial job"; 66 + startOn = "started network-interfaces"; 67 + preStart = '' 68 + for d in vpnserver vpnbridge vpnclient vpncmd; do 69 + if ! test -e ${cfg.dataDir}/$d; then 70 + ${pkgs.coreutils}/bin/mkdir -m0700 -p ${cfg.dataDir}/$d 71 + install -m0600 ${pkg}${cfg.dataDir}/$d/hamcore.se2 ${cfg.dataDir}/$d/hamcore.se2 72 + fi 73 + done 74 + rm -rf ${cfg.dataDir}/vpncmd/vpncmd 75 + ln -s ${pkg}${cfg.dataDir}/vpncmd/vpncmd ${cfg.dataDir}/vpncmd/vpncmd 76 + ''; 77 + exec = "true"; 78 + }; 79 + } 80 + 81 + (mkIf (cfg.vpnserver.enable) { 82 + systemd.services.vpnserver = { 83 + description = "SoftEther VPN Server"; 84 + after = [ "network-interfaces.target" ]; 85 + wantedBy = [ "multi-user.target" ]; 86 + serviceConfig = { 87 + ExecStart = "${pkg}/bin/vpnserver start"; 88 + ExecStop = "${pkg}/bin/vpnserver stop"; 89 + Type = "forking"; 90 + }; 91 + preStart = '' 92 + rm -rf ${cfg.dataDir}/vpnserver/vpnserver 93 + ln -s ${pkg}${cfg.dataDir}/vpnserver/vpnserver ${cfg.dataDir}/vpnserver/vpnserver 94 + ''; 95 + postStop = '' 96 + rm -rf ${cfg.dataDir}/vpnserver/vpnserver 97 + ''; 98 + }; 99 + }) 100 + 101 + (mkIf (cfg.vpnbridge.enable) { 102 + systemd.services.vpnbridge = { 103 + description = "SoftEther VPN Bridge"; 104 + after = [ "network-interfaces.target" ]; 105 + wantedBy = [ "multi-user.target" ]; 106 + serviceConfig = { 107 + ExecStart = "${pkg}/bin/vpnbridge start"; 108 + ExecStop = "${pkg}/bin/vpnbridge stop"; 109 + Type = "forking"; 110 + }; 111 + preStart = '' 112 + rm -rf ${cfg.dataDir}/vpnbridge/vpnbridge 113 + ln -s ${pkg}${cfg.dataDir}/vpnbridge/vpnbridge ${cfg.dataDir}/vpnbridge/vpnbridge 114 + ''; 115 + postStop = '' 116 + rm -rf ${cfg.dataDir}/vpnbridge/vpnbridge 117 + ''; 118 + }; 119 + }) 120 + 121 + (mkIf (cfg.vpnclient.enable) { 122 + systemd.services.vpnclient = { 123 + description = "SoftEther VPN Client"; 124 + after = [ "network-interfaces.target" ]; 125 + wantedBy = [ "multi-user.target" ]; 126 + serviceConfig = { 127 + ExecStart = "${pkg}/bin/vpnclient start"; 128 + ExecStop = "${pkg}/bin/vpnclient stop"; 129 + Type = "forking"; 130 + }; 131 + preStart = '' 132 + rm -rf ${cfg.dataDir}/vpnclient/vpnclient 133 + ln -s ${pkg}${cfg.dataDir}/vpnclient/vpnclient ${cfg.dataDir}/vpnclient/vpnclient 134 + ''; 135 + postStart = '' 136 + sleep 1 137 + ${cfg.vpnclient.up} 138 + ''; 139 + postStop = '' 140 + rm -rf ${cfg.dataDir}/vpnclient/vpnclient 141 + sleep 1 142 + ${cfg.vpnclient.down} 143 + ''; 144 + }; 145 + boot.kernelModules = [ "tun" ]; 146 + }) 147 + 148 + ]); 149 + 150 + }
+53
pkgs/servers/softether/4.18.nix
··· 1 + { stdenv, fetchurl 2 + , openssl, readline, ncurses, zlib }: 3 + 4 + let 5 + os = if stdenv.isLinux then "1" 6 + else if stdenv.isFreeBSD then "2" 7 + else if stdenv.isSunOS then "3" 8 + else if stdenv.isDarwin then "4" 9 + else if stdenv.isOpenBSD then "5" 10 + else ""; 11 + cpuBits = if stdenv.is64bit then "2" else "1"; 12 + 13 + in 14 + 15 + stdenv.mkDerivation rec { 16 + name = "softether-${version}"; 17 + version = "4.18"; 18 + build = "9570"; 19 + compiledDate = "2015.07.26"; 20 + dataDir = "/var/lib/softether"; 21 + 22 + src = fetchurl { 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 + sha256 = "585d61e524d3cad90806cbeb52ebe54b5144359e6c44676e8e7fb5683ffd4574"; 25 + }; 26 + 27 + buildInputs = [ openssl readline ncurses zlib ]; 28 + 29 + preConfigure = '' 30 + echo "${os} 31 + ${cpuBits} 32 + " | ./configure 33 + rm configure 34 + ''; 35 + 36 + buildPhase = '' 37 + mkdir -p $out/bin 38 + sed -i \ 39 + -e "/INSTALL_BINDIR=/s|/usr/bin|/bin|g" \ 40 + -e "/_DIR=/s|/usr|${dataDir}|g" \ 41 + -e "s|\$(INSTALL|$out/\$(INSTALL|g" \ 42 + -e "/echo/s|echo $out/|echo |g" \ 43 + Makefile 44 + ''; 45 + 46 + meta = with stdenv.lib; { 47 + description = "An Open-Source Free Cross-platform Multi-protocol VPN Program"; 48 + homepage = https://www.softether.org/; 49 + license = licenses.gpl2; 50 + maintainers = [ maintainers.rick68 ]; 51 + platforms = platforms.all; 52 + }; 53 + }
+3
pkgs/top-level/all-packages.nix
··· 3031 3031 3032 3032 socat2pre = lowPrio (callPackage ../tools/networking/socat/2.x.nix { }); 3033 3033 3034 + softether_4_18 = callPackage ../servers/softether/4.18.nix { }; 3035 + softether = softether_4_18; 3036 + 3034 3037 sourceHighlight = callPackage ../tools/text/source-highlight { }; 3035 3038 3036 3039 spaceFM = callPackage ../applications/misc/spacefm { };