Remove dependence on bsd-sysctl package
… since it doesn't work on Linux
This commit is contained in:
parent
24fb4b7fea
commit
614ed2ca65
@ -1,4 +0,0 @@
|
||||
module Sysctl where
|
||||
|
||||
_SO_MAX_CONN :: String
|
||||
_SO_MAX_CONN = "kern.ipc.somaxconn"
|
||||
@ -1,4 +0,0 @@
|
||||
module Sysctl where
|
||||
|
||||
_SO_MAX_CONN :: String
|
||||
_SO_MAX_CONN = "net.core.somaxconn"
|
||||
@ -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
|
||||
|
||||
@ -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";
|
||||
|
||||
17
src/Main.hs
17
src/Main.hs
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user