@@ -0,0 +1,258 @@
{ config , lib , pkgs , . . . }:
with lib ;
let
cfg = config . services . mwlib ;
pypkgs = pkgs . python27Packages ;
inherit ( pypkgs ) python mwlib ;
user = mkOption {
default = " n o b o d y " ;
type = types . str ;
description = " U s e r t o r u n a s . " ;
} ;
in
{
options . services . mwlib = {
nserve = {
enable = mkOption {
default = false ;
type = types . bool ;
description = ''
W h e t h e r t o e n a b l e n s e r v e . N s e r v e i s a H T T P
s e r v e r . T h e C o l l e c t i o n e x t e n s i o n i s t a l k i n g t o
t h a t p r o g r a m d i r e c t l y . N s e r v e u s e s a t l e a s t
o n e q s e r v e i n s t a n c e i n o r d e r t o d i s t r i b u t e
a n d m a n a g e j o b s .
'' ;
} ; # nserve.enable
port = mkOption {
default = 8899 ;
type = types . int ;
description = " S p e c i f y p o r t t o l i s t e n o n . " ;
} ; # nserve.port
address = mkOption {
default = " 1 2 7 . 0 . 0 . 1 " ;
type = types . str ;
description = " S p e c i f y n e t w o r k i n t e r f a c e t o l i s t e n o n . " ;
} ; # nserve.address
qserve = mkOption {
default = [ " ${ cfg . qserve . address } : ${ toString cfg . qserve . port } " ] ;
type = types . listOf types . str ;
description = " R e g i s t e r q s e r v e i n s t a n c e . " ;
} ; # nserve.qserve
inherit user ;
} ; # nserve
qserve = {
enable = mkOption {
default = false ;
type = types . bool ;
description = ''
A j o b q u e u e s e r v e r u s e d t o d i s t r i b u t e a n d m a n a g e
j o b s . Y o u s h o u l d s t a r t o n e q s e r v e i n s t a n c e
f o r e a c h m a c h i n e t h a t i s s u p p o s e d t o r e n d e r p d f
f i l e s . U n l e s s y o u ’ r e o p e r a t i n g t h e W i k i p e d i a
i n s t a l l a t i o n , o n e m a c h i n e s h o u l d s u f f i c e .
'' ;
} ; # qserve.enable
port = mkOption {
default = 14311 ;
type = types . int ;
description = " S p e c i f y p o r t t o l i s t e n o n . " ;
} ; # qserve.port
address = mkOption {
default = " 1 2 7 . 0 . 0 . 1 " ;
type = types . str ;
description = " S p e c i f y n e t w o r k i n t e r f a c e t o l i s t e n o n . " ;
} ; # qserve.address
datadir = mkOption {
default = " / v a r / l i b / m w l i b - q s e r v e " ;
type = types . path ;
description = " q s e r v e d a t a d i r e c t o r y ( F I X M E : u n u s e d ? ) " ;
} ; # qserve.datadir
allow = mkOption {
default = [ " 1 2 7 . 0 . 0 . 1 " ] ;
type = types . listOf types . str ;
description = " L i s t o f a l l o w e d c l i e n t I P s . E m p t y m e a n s a n y . " ;
} ; # qserve.allow
inherit user ;
} ; # qserve
nslave = {
enable = mkOption {
default = cfg . qserve . enable ;
type = types . bool ;
description = ''
P u l l s n e w j o b s f r o m e x a c t l y o n e q s e r v e i n s t a n c e
a n d c a l l s t h e z i p a n d r e n d e r p r o g r a m s
i n o r d e r t o d o w n l o a d a r t i c l e c o l l e c t i o n s a n d
c o n v e r t t h e m t o d i f f e r e n t o u t p u t f o r m a t s . N s l a v e
u s e s a c a c h e d i r e c t o r y t o s t o r e t h e g e n e r a t e d
d o c u m e n t s . N s l a v e a l s o s t a r t s a n i n t e r n a l h t t p
s e r v e r s e r v i n g t h e c o n t e n t o f t h e c a c h e d i r e c t o r y .
'' ;
} ; # nslave.enable
cachedir = mkOption {
default = " / v a r / c a c h e / m w l i b - n s l a v e " ;
type = types . path ;
description = " D i r e c t o r y t o s t o r e g e n e r a t e d d o c u m e n t s . " ;
} ; # nslave.cachedir
numprocs = mkOption {
default = 10 ;
type = types . int ;
description = " N u m b e r o f p a r a l l e l j o b s t o b e e x e c u t e d . " ;
} ; # nslave.numprocs
http = mkOption {
default = { } ;
description = ''
I n t e r n a l h t t p s e r v e r s e r v i n g t h e c o n t e n t o f t h e c a c h e d i r e c t o r y .
Y o u h a v e t o e n a b l e i t , o r u s e y o u r o w n w a y f o r s e r v i n g f i l e s
a n d s e t t h e h t t p . u r l o p t i o n a c c o r d i n g l y .
'' ;
type = types . submodule ( {
options = {
enable = mkOption {
default = true ;
type = types . bool ;
description = " E n a b l e i n t e r n a l h t t p s e r v e r . " ;
} ; # nslave.http.enable
port = mkOption {
default = 8898 ;
type = types . int ;
description = " P o r t t o l i s t e n t o w h e n s e r v i n g f i l e s f r o m c a c h e . " ;
} ; # nslave.http.port
address = mkOption {
default = " 1 2 7 . 0 . 0 . 1 " ;
type = types . str ;
description = " S p e c i f y n e t w o r k i n t e r f a c e t o l i s t e n o n . " ;
} ; # nslave.http.address
url = mkOption {
default = " h t t p : / / l o c a l h o s t : ${ toString cfg . nslave . http . port } / c a c h e " ;
type = types . str ;
description = ''
S p e c i f y U R L f o r a c c e s s i n g g e n e r a t e d f i l e s f r o m c a c h e .
T h e C o l l e c t i o n e x t e n s i o n o f M e d i a w i k i w o n ' t b e a b l e t o
d o w n l o a d f i l e s w i t h o u t i t .
'' ;
} ; # nslave.http.url
} ;
} ) ; # types.submodule
} ; # nslave.http
inherit user ;
} ; # nslave
} ; # options.services
config = {
systemd . services . mwlib-nserve = mkIf cfg . nserve . enable
{
description = " m w l i b n e t w o r k i n t e r f a c e " ;
wantedBy = [ " m u l t i - u s e r . t a r g e t " ] ;
after = [ " n e t w o r k . t a r g e t " " m w l i b - q s e r v e . s e r v i c e " ] ;
serviceConfig = {
ExecStart = concatStringsSep " " (
[
" ${ mwlib } / b i n / n s e r v e "
" - - p o r t ${ toString cfg . nserve . port } "
" - - i n t e r f a c e ${ cfg . nserve . address } "
] ++ cfg . nserve . qserve
) ;
User = cfg . nserve . user ;
} ;
} ; # systemd.services.mwlib-nserve
systemd . services . mwlib-qserve = mkIf cfg . qserve . enable
{
description = " m w l i b j o b q u e u e s e r v e r " ;
wantedBy = [ " m u l t i - u s e r . t a r g e t " ] ;
after = [ " n e t w o r k . t a r g e t " " l o c a l - f s . t a r g e t " ] ;
preStart = ''
m k d i r - p v ' ${ cfg . qserve . datadir } '
c h o w n - R c ${ cfg . qserve . user } : ` i d - n g ${ cfg . qserve . user } ` ' ${ cfg . qserve . datadir } '
c h m o d - R c u = r w X , g o = ' ${ cfg . qserve . datadir } '
'' ;
serviceConfig = {
ExecStart = concatStringsSep " " (
[
" ${ mwlib } / b i n / m w - q s e r v e "
" - p ${ toString cfg . qserve . port } "
" - i ${ cfg . qserve . address } "
" - d ${ cfg . qserve . datadir } "
] ++ map ( a : " - a ${ a } " ) cfg . qserve . allow
) ;
User = cfg . qserve . user ;
PermissionsStartOnly = true ;
} ;
} ; # systemd.services.mwlib-qserve
systemd . services . mwlib-nslave = mkIf cfg . nslave . enable
{
description = " m w l i b w o r k e r " ;
wantedBy = [ " m u l t i - u s e r . t a r g e t " ] ;
after = [ " n e t w o r k . t a r g e t " " l o c a l - f s . t a r g e t " ] ;
preStart = ''
m k d i r - p v ' ${ cfg . nslave . cachedir } '
c h o w n - R c ${ cfg . nslave . user } : ` i d - n g ${ cfg . nslave . user } ` ' ${ cfg . nslave . cachedir } '
c h m o d - R c u = r w X , g o = ' ${ cfg . nslave . cachedir } '
'' ;
environment = {
PYTHONPATH = concatMapStringsSep " : "
( m : " ${ pypkgs . ${ m } } / l i b / ${ python . libPrefix } / s i t e - p a c k a g e s " )
[ " m w l i b - r l " " m w l i b - e x t " " p y g m e n t s " ] ;
} ;
serviceConfig = {
ExecStart = concatStringsSep " " (
[
" ${ mwlib } / b i n / n s l a v e "
" - - c a c h e d i r ${ cfg . nslave . cachedir } "
" - - n u m p r o c s ${ toString cfg . nslave . numprocs } "
" - - u r l ${ cfg . nslave . http . url } "
] ++ (
if cfg . nslave . http . enable then
[
" - - s e r v e - f i l e s - p o r t ${ toString cfg . nslave . http . port } "
" - - s e r v e - f i l e s - a d d r e s s ${ cfg . nslave . http . address } "
] else
[
" - - n o - s e r v e - f i l e s "
]
) ) ;
User = cfg . nslave . user ;
PermissionsStartOnly = true ;
} ;
} ; # systemd.services.mwlib-nslave
} ; # config
}