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
other-modules: Sysctl
, Nix
other-modules: Nix
, 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
if arch(i686) && os(linux)
cxx-options: -DSYSTEM="i686-linux"
@ -49,7 +41,6 @@ executable nix-serve-ng
build-depends: base < 5
, base16
, base32
, bsd-sysctl
, bytestring
, charset
, http-types

View File

@ -1,7 +1,7 @@
{ mkDerivation, base, base16, base32, bsd-sysctl, bytestring
, charset, http-types, lib, managed, megaparsec, mtl, network
, nixstore, nixutil, optparse-applicative, vector, wai, wai-extra
, warp, warp-tls
{ mkDerivation, base, base16, base32, bytestring, charset
, http-types, lib, managed, megaparsec, mtl, network, nixstore
, nixutil, optparse-applicative, vector, wai, wai-extra, warp
, warp-tls
}:
mkDerivation {
pname = "nix-serve-ng";
@ -10,9 +10,8 @@ mkDerivation {
isLibrary = false;
isExecutable = true;
executableHaskellDepends = [
base base16 base32 bsd-sysctl bytestring charset http-types managed
megaparsec mtl network optparse-applicative vector wai wai-extra
warp warp-tls
base base16 base32 bytestring charset http-types managed megaparsec
mtl network optparse-applicative vector wai wai-extra warp warp-tls
];
executableSystemDepends = [ nixstore nixutil ];
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.Wai (Application)
import Nix (PathInfo(..))
import Numeric.Natural (Natural)
import Options (Options(..), Socket(..), SSL(..), Verbosity(..))
import Sysctl (_SO_MAX_CONN)
import qualified Control.Monad as Monad
import qualified Control.Monad.Except as Except
@ -34,7 +34,6 @@ import qualified Network.Wai.Middleware.RequestLogger as RequestLogger
import qualified Nix
import qualified Options
import qualified Options.Applicative as Options
import qualified System.BSD.Sysctl as Sysctl
import qualified System.Environment as Environment
data ApplicationOptions = ApplicationOptions
@ -330,8 +329,8 @@ makeApplication ApplicationOptions{..} request respond = do
Left response -> respond response
Right void -> Void.absurd void
toSocket :: FilePath -> IO Socket.Socket
toSocket path = do
toSocket :: Natural -> FilePath -> IO Socket.Socket
toSocket backlog path = do
let family = Socket.AF_UNIX
Monad.unless (Socket.isSupportedFamily family) do
@ -341,8 +340,6 @@ toSocket path = do
Socket.bind socket (SockAddrUnix path)
backlog <- Sysctl.sysctlReadInt _SO_MAX_CONN
Socket.listen socket (fromIntegral backlog)
return socket
@ -378,10 +375,10 @@ main = do
Warp.runSettings settings application
Options{ ssl = Disabled, socket = Unix{ path } } -> do
Options{ ssl = Disabled, socket = Unix{ backlog, path } } -> do
let settings = Warp.defaultSettings
socket <- toSocket path
socket <- toSocket backlog path
Warp.runSettingsSocket settings socket application
@ -395,11 +392,11 @@ main = do
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 settings = Warp.defaultSettings
socket <- toSocket path
socket <- toSocket backlog path
WarpTLS.runTLSSocket tlsSettings settings socket application

View File

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