Remove dependence on bsd-sysctl package

… since it doesn't work on Linux
This commit is contained in:
Gabriella Gonzalez
2022-06-30 15:59:38 -07:00
parent 24fb4b7fea
commit 614ed2ca65
6 changed files with 29 additions and 36 deletions

View File

@@ -1,4 +0,0 @@
module Sysctl where
_SO_MAX_CONN :: String
_SO_MAX_CONN = "kern.ipc.somaxconn"

View File

@@ -1,4 +0,0 @@
module Sysctl where
_SO_MAX_CONN :: String
_SO_MAX_CONN = "net.core.somaxconn"

View File

@@ -15,17 +15,9 @@ executable nix-serve-ng
main-is: Main.hs main-is: Main.hs
other-modules: Sysctl other-modules: Nix
, Nix
, Options , Options
if os(darwin)
hs-source-dirs: darwin
elif os(linux)
hs-source-dirs: linux
else
buildable: False
-- https://nixos.org/manual/nix/stable/installation/supported-platforms.html -- https://nixos.org/manual/nix/stable/installation/supported-platforms.html
if arch(i686) && os(linux) if arch(i686) && os(linux)
cxx-options: -DSYSTEM="i686-linux" cxx-options: -DSYSTEM="i686-linux"
@@ -49,7 +41,6 @@ executable nix-serve-ng
build-depends: base < 5 build-depends: base < 5
, base16 , base16
, base32 , base32
, bsd-sysctl
, bytestring , bytestring
, charset , charset
, http-types , http-types

View File

@@ -1,7 +1,7 @@
{ mkDerivation, base, base16, base32, bsd-sysctl, bytestring { mkDerivation, base, base16, base32, bytestring, charset
, charset, http-types, lib, managed, megaparsec, mtl, network , http-types, lib, managed, megaparsec, mtl, network, nixstore
, nixstore, nixutil, optparse-applicative, vector, wai, wai-extra , nixutil, optparse-applicative, vector, wai, wai-extra, warp
, warp, warp-tls , warp-tls
}: }:
mkDerivation { mkDerivation {
pname = "nix-serve-ng"; pname = "nix-serve-ng";
@@ -10,9 +10,8 @@ mkDerivation {
isLibrary = false; isLibrary = false;
isExecutable = true; isExecutable = true;
executableHaskellDepends = [ executableHaskellDepends = [
base base16 base32 bsd-sysctl bytestring charset http-types managed base base16 base32 bytestring charset http-types managed megaparsec
megaparsec mtl network optparse-applicative vector wai wai-extra mtl network optparse-applicative vector wai wai-extra warp warp-tls
warp warp-tls
]; ];
executableSystemDepends = [ nixstore nixutil ]; executableSystemDepends = [ nixstore nixutil ];
description = "A drop-in replacement for nix-serve that's faster and more stable"; description = "A drop-in replacement for nix-serve that's faster and more stable";

View File

@@ -13,8 +13,8 @@ import Data.Function ((&))
import Network.Socket (SockAddr(..)) import Network.Socket (SockAddr(..))
import Network.Wai (Application) import Network.Wai (Application)
import Nix (PathInfo(..)) import Nix (PathInfo(..))
import Numeric.Natural (Natural)
import Options (Options(..), Socket(..), SSL(..), Verbosity(..)) import Options (Options(..), Socket(..), SSL(..), Verbosity(..))
import Sysctl (_SO_MAX_CONN)
import qualified Control.Monad as Monad import qualified Control.Monad as Monad
import qualified Control.Monad.Except as Except import qualified Control.Monad.Except as Except
@@ -34,7 +34,6 @@ import qualified Network.Wai.Middleware.RequestLogger as RequestLogger
import qualified Nix import qualified Nix
import qualified Options import qualified Options
import qualified Options.Applicative as Options import qualified Options.Applicative as Options
import qualified System.BSD.Sysctl as Sysctl
import qualified System.Environment as Environment import qualified System.Environment as Environment
data ApplicationOptions = ApplicationOptions data ApplicationOptions = ApplicationOptions
@@ -330,8 +329,8 @@ makeApplication ApplicationOptions{..} request respond = do
Left response -> respond response Left response -> respond response
Right void -> Void.absurd void Right void -> Void.absurd void
toSocket :: FilePath -> IO Socket.Socket toSocket :: Natural -> FilePath -> IO Socket.Socket
toSocket path = do toSocket backlog path = do
let family = Socket.AF_UNIX let family = Socket.AF_UNIX
Monad.unless (Socket.isSupportedFamily family) do Monad.unless (Socket.isSupportedFamily family) do
@@ -341,8 +340,6 @@ toSocket path = do
Socket.bind socket (SockAddrUnix path) Socket.bind socket (SockAddrUnix path)
backlog <- Sysctl.sysctlReadInt _SO_MAX_CONN
Socket.listen socket (fromIntegral backlog) Socket.listen socket (fromIntegral backlog)
return socket return socket
@@ -378,10 +375,10 @@ main = do
Warp.runSettings settings application Warp.runSettings settings application
Options{ ssl = Disabled, socket = Unix{ path } } -> do Options{ ssl = Disabled, socket = Unix{ backlog, path } } -> do
let settings = Warp.defaultSettings let settings = Warp.defaultSettings
socket <- toSocket path socket <- toSocket backlog path
Warp.runSettingsSocket settings socket application Warp.runSettingsSocket settings socket application
@@ -395,11 +392,11 @@ main = do
WarpTLS.runTLS tlsSettings settings application WarpTLS.runTLS tlsSettings settings application
Options{ ssl = Enabled{ cert, key }, socket = Unix{ path } } -> do Options{ ssl = Enabled{ cert, key }, socket = Unix{ backlog, path } } -> do
let tlsSettings = WarpTLS.tlsSettings cert key let tlsSettings = WarpTLS.tlsSettings cert key
let settings = Warp.defaultSettings let settings = Warp.defaultSettings
socket <- toSocket path socket <- toSocket backlog path
WarpTLS.runTLSSocket tlsSettings settings socket application WarpTLS.runTLSSocket tlsSettings settings socket application

View File

@@ -9,6 +9,7 @@ import Control.Applicative (optional, (<|>))
import Data.String (IsString(..)) import Data.String (IsString(..))
import Data.Void (Void) import Data.Void (Void)
import Network.Wai.Handler.Warp (HostPreference, Port) import Network.Wai.Handler.Warp (HostPreference, Port)
import Numeric.Natural (Natural)
import Options.Applicative (Parser, ParserInfo, ReadM) import Options.Applicative (Parser, ParserInfo, ReadM)
import Text.Megaparsec (Parsec) import Text.Megaparsec (Parsec)
@@ -18,7 +19,7 @@ import qualified Text.Megaparsec.Char.Lexer as Lexer
data Socket data Socket
= TCP { host :: HostPreference, port :: Port } = TCP { host :: HostPreference, port :: Port }
| Unix { path :: FilePath } | Unix { backlog :: Natural, path :: FilePath }
data SSL = Disabled | Enabled { cert :: FilePath, key :: FilePath } data SSL = Disabled | Enabled { cert :: FilePath, key :: FilePath }
@@ -94,8 +95,18 @@ parseTcp = do
return TCP{..} return TCP{..}
defaultBacklog :: Natural
defaultBacklog = 1024
parseUnix :: Parser Socket parseUnix :: Parser Socket
parseUnix = do parseUnix = do
backlog <- Options.option Options.auto
( Options.long "backlog"
<> Options.help "The maximum number of connections allowed for the backlog"
<> Options.metavar "INTEGER"
<> Options.value defaultBacklog
)
path <- Options.strOption path <- Options.strOption
( Options.long "socket" ( Options.long "socket"
<> Options.short 'S' <> Options.short 'S'
@@ -167,7 +178,10 @@ parseListen = do
let parseUnixListen :: Parsec Void String Socket let parseUnixListen :: Parsec Void String Socket
parseUnixListen = do parseUnixListen = do
let backlog = defaultBacklog
path <- Megaparsec.takeRest path <- Megaparsec.takeRest
return Unix{..} return Unix{..}
let parseSocketListen = parseTcpListen <|> parseUnixListen let parseSocketListen = parseTcpListen <|> parseUnixListen