summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--Propellor/Attr.hs2
-rw-r--r--Propellor/CmdLine.hs28
-rw-r--r--Propellor/Property/Dns.hs65
-rw-r--r--Propellor/Property/SiteSpecific/JoeySites.hs31
-rw-r--r--Propellor/SimpleSh.hs4
-rw-r--r--Propellor/Types/Dns.hs16
-rw-r--r--config-joey.hs93
-rw-r--r--debian/changelog11
-rw-r--r--debian/control4
-rw-r--r--privdata/clam.kitenet.net.gpg93
-rw-r--r--privdata/diatom.kitenet.net.gpg701
-rw-r--r--propellor.cabal4
-rw-r--r--propellor.hs2
14 files changed, 634 insertions, 422 deletions
diff --git a/Makefile b/Makefile
index e53de8c5..7f4833fc 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,7 @@ build: dist/setup-config
deps:
@if [ $$(whoami) = root ]; then apt-get --no-upgrade --no-install-recommends -y install gnupg ghc cabal-install libghc-missingh-dev libghc-ansi-terminal-dev libghc-ifelse-dev libghc-unix-compat-dev libghc-hslogger-dev libghc-network-dev libghc-quickcheck2-dev libghc-mtl-dev libghc-monadcatchio-transformers-dev; fi || true
- @if [ $$(whoami) = root ]; then apt-get --no-upgrade --no-install-recommends -y install libghc-async-dev || cabal update; cabal install async; fi || true
+ @if [ $$(whoami) = root ]; then apt-get --no-upgrade --no-install-recommends -y install libghc-async-dev || (cabal update; cabal install async); fi || true
dist/setup-config: propellor.cabal
if [ "$(CABAL)" = ./Setup ]; then ghc --make Setup; fi
diff --git a/Propellor/Attr.hs b/Propellor/Attr.hs
index acaf28db..98cfc64d 100644
--- a/Propellor/Attr.hs
+++ b/Propellor/Attr.hs
@@ -59,7 +59,7 @@ addNamedConf conf d = d { _namedconf = new }
where
m = _namedconf d
domain = confDomain conf
- new = case (confType conf, confType <$> M.lookup domain m) of
+ new = case (confDnsServerType conf, confDnsServerType <$> M.lookup domain m) of
(Secondary, Just Master) -> m
_ -> M.insert domain conf m
diff --git a/Propellor/CmdLine.hs b/Propellor/CmdLine.hs
index 5be91c4f..ad04abe6 100644
--- a/Propellor/CmdLine.hs
+++ b/Propellor/CmdLine.hs
@@ -10,6 +10,7 @@ import System.Log.Handler.Simple
import System.PosixCompat
import Control.Exception (bracket)
import System.Posix.IO
+import Data.Time.Clock.POSIX
import Propellor
import qualified Propellor.Property.Docker as Docker
@@ -346,14 +347,37 @@ checkDebugMode = go =<< getEnv "PROPELLOR_DEBUG"
setLevel DEBUG . setHandlers [f]
go _ = noop
--- Parameters can be passed to both ssh and scp.
+-- Parameters can be passed to both ssh and scp, to enable a ssh connection
+-- caching socket.
+--
+-- If the socket already exists, check if its mtime is older than 10
+-- minutes, and if so stop that ssh process, in order to not try to
+-- use an old stale connection. (atime would be nicer, but there's
+-- a good chance a laptop uses noatime)
sshCachingParams :: HostName -> IO [CommandParam]
sshCachingParams hn = do
home <- myHomeDir
let cachedir = home </> ".ssh" </> "propellor"
createDirectoryIfMissing False cachedir
let socketfile = cachedir </> hn ++ ".sock"
- return
+ let ps =
[ Param "-o", Param ("ControlPath=" ++ socketfile)
, Params "-o ControlMaster=auto -o ControlPersist=yes"
]
+
+ maybe noop (expireold ps socketfile)
+ =<< catchMaybeIO (getFileStatus socketfile)
+
+ return ps
+
+ where
+ expireold ps f s = do
+ now <- truncate <$> getPOSIXTime :: IO Integer
+ if modificationTime s > fromIntegral now - tenminutes
+ then touchFile f
+ else do
+ void $ boolSystem "ssh" $
+ [ Params "-O stop" ] ++ ps ++
+ [ Param "localhost" ]
+ nukeFile f
+ tenminutes = 600
diff --git a/Propellor/Property/Dns.hs b/Propellor/Property/Dns.hs
index 73d427c0..5c3162cb 100644
--- a/Propellor/Property/Dns.hs
+++ b/Propellor/Property/Dns.hs
@@ -40,6 +40,17 @@ import Data.List
-- that cannot be configured elsewhere. This often includes NS records,
-- TXT records and perhaps CNAMEs pointing at hosts that propellor does
-- not control.
+--
+-- The primary server is configured to only allow zone transfers to
+-- secondary dns servers. These are determined in two ways:
+--
+-- 1. By looking at the properties of other hosts, to find hosts that
+-- are configured as the secondary dns server.
+--
+-- 2. By looking for NS Records in the passed list of records.
+--
+-- In either case, the secondary dns server Host should have an ipv4 and/or
+-- ipv6 property defined.
primary :: [Host] -> Domain -> SOA -> [(BindDomain, Record)] -> RevertableProperty
primary hosts domain soa rs = RevertableProperty setup cleanup
where
@@ -52,22 +63,31 @@ primary hosts domain soa rs = RevertableProperty setup cleanup
`requires` namedConfWritten
`onChange` Service.reloaded "bind9"
- (partialzone, warnings) = genZone hosts domain soa
+ (partialzone, zonewarnings) = genZone hosts domain soa
zone = partialzone { zHosts = zHosts partialzone ++ rs }
zonefile = "/etc/bind/propellor/db." ++ domain
baseprop = Property ("dns primary for " ++ domain)
(makeChange $ writeZoneFile zone zonefile)
(addNamedConf conf)
withwarnings p = adjustProperty p $ \satisfy -> do
- mapM_ warningMessage warnings
+ mapM_ warningMessage $ zonewarnings ++ secondarywarnings
satisfy
conf = NamedConf
{ confDomain = domain
- , confType = Master
+ , confDnsServerType = Master
, confFile = zonefile
, confMasters = []
+ , confAllowTransfer = nub $
+ concatMap (\h -> hostAddresses h hosts) $
+ secondaries ++ nssecondaries
, confLines = []
}
+ secondaries = otherServers Secondary hosts domain
+ secondarywarnings = map (\h -> "No IP address defined for DNS seconary " ++ h) $
+ filter (\h -> null (hostAddresses h hosts)) secondaries
+ nssecondaries = mapMaybe (domainHostName <=< getNS) rootRecords
+ rootRecords = map snd $
+ filter (\(d, _r) -> d == RootDomain || d == AbsDomain domain) rs
needupdate = do
v <- readZonePropellorFile zonefile
return $ case v of
@@ -86,12 +106,7 @@ primary hosts domain soa rs = RevertableProperty setup cleanup
-- Note that if a host is declared to be a primary and a secondary dns
-- server for the same domain, the primary server config always wins.
secondary :: [Host] -> Domain -> RevertableProperty
-secondary hosts domain = secondaryFor masters hosts domain
- where
- masters = M.keys $ M.filter ismaster $ hostAttrMap hosts
- ismaster attr = case M.lookup domain (_namedconf attr) of
- Nothing -> False
- Just conf -> confType conf == Master && confDomain conf == domain
+secondary hosts domain = secondaryFor (otherServers Master hosts domain) hosts domain
-- | This variant is useful if the primary server does not have its DNS
-- configured via propellor.
@@ -105,19 +120,29 @@ secondaryFor masters hosts domain = RevertableProperty setup cleanup
desc = "dns secondary for " ++ domain
conf = NamedConf
{ confDomain = domain
- , confType = Secondary
+ , confDnsServerType = Secondary
, confFile = "db." ++ domain
, confMasters = concatMap (\m -> hostAddresses m hosts) masters
- , confLines = ["allow-transfer { }"]
+ , confAllowTransfer = []
+ , confLines = []
}
+otherServers :: DnsServerType -> [Host] -> Domain -> [HostName]
+otherServers wantedtype hosts domain =
+ M.keys $ M.filter wanted $ hostAttrMap hosts
+ where
+ wanted attr = case M.lookup domain (_namedconf attr) of
+ Nothing -> False
+ Just conf -> confDnsServerType conf == wantedtype
+ && confDomain conf == domain
+
-- | Rewrites the whole named.conf.local file to serve the zones
-- configured by `primary` and `secondary`, and ensures that bind9 is
-- running.
servingZones :: Property
servingZones = namedConfWritten
- `requires` Apt.serviceInstalledRunning "bind9"
`onChange` Service.reloaded "bind9"
+ `requires` Apt.serviceInstalledRunning "bind9"
namedConfWritten :: Property
namedConfWritten = property "named.conf configured" $ do
@@ -130,20 +155,26 @@ confStanza :: NamedConf -> [Line]
confStanza c =
[ "// automatically generated by propellor"
, "zone \"" ++ confDomain c ++ "\" {"
- , cfgline "type" (if confType c == Master then "master" else "slave")
+ , cfgline "type" (if confDnsServerType c == Master then "master" else "slave")
, cfgline "file" ("\"" ++ confFile c ++ "\"")
] ++
- (if null (confMasters c) then [] else mastersblock) ++
+ mastersblock ++
+ allowtransferblock ++
(map (\l -> "\t" ++ l ++ ";") (confLines c)) ++
[ "};"
, ""
]
where
cfgline f v = "\t" ++ f ++ " " ++ v ++ ";"
- mastersblock =
- [ "\tmasters {" ] ++
- (map (\ip -> "\t\t" ++ fromIPAddr ip ++ ";") (confMasters c)) ++
+ ipblock name l =
+ [ "\t" ++ name ++ " {" ] ++
+ (map (\ip -> "\t\t" ++ fromIPAddr ip ++ ";") l) ++
[ "\t};" ]
+ mastersblock
+ | null (confMasters c) = []
+ | otherwise = ipblock "masters" (confMasters c)
+ -- an empty block prohibits any transfers
+ allowtransferblock = ipblock "allow-transfer" (confAllowTransfer c)
namedConfFile :: FilePath
namedConfFile = "/etc/bind/named.conf.local"
diff --git a/Propellor/Property/SiteSpecific/JoeySites.hs b/Propellor/Property/SiteSpecific/JoeySites.hs
index b43d83f8..06865c45 100644
--- a/Propellor/Property/SiteSpecific/JoeySites.hs
+++ b/Propellor/Property/SiteSpecific/JoeySites.hs
@@ -102,6 +102,30 @@ kgbServer = withOS desc $ \o -> case o of
where
desc = "kgb.kitenet.net setup"
+mumbleServer :: [Host] -> Property
+mumbleServer hosts = combineProperties "mumble.debian.net"
+ [ Obnam.latestVersion
+ , Obnam.backup "/var/lib/mumble-server" "55 5 * * *"
+ [ "--repository=sftp://joey@turtle.kitenet.net/~/lib/backup/mumble.debian.net.obnam"
+ , "--client-name=mumble"
+ ] Obnam.OnlyClient
+ `requires` Ssh.keyImported SshRsa "root"
+ `requires` Ssh.knownHost hosts "turtle.kitenet.net" "root"
+ , trivial $ cmdProperty "chown" ["-R", "mumble-server:mumble-server", "/var/lib/mumble-server"]
+ , Apt.serviceInstalledRunning "mumble-server"
+ ]
+
+obnamLowMem :: Property
+obnamLowMem = combineProperties "obnam tuned for low memory use"
+ [ Obnam.latestVersion
+ , "/etc/obnam.conf" `File.containsLines`
+ [ "[config]"
+ , "# Suggested by liw to keep Obnam memory consumption down (at some speed cost)."
+ , "upload-queue-size = 128"
+ , "lru-size = 128"
+ ]
+ ]
+
-- git.kitenet.net and git.joeyh.name
gitServer :: [Host] -> Property
gitServer hosts = propertyList "git.kitenet.net setup"
@@ -229,9 +253,8 @@ mainhttpscert True =
, " SSLCertificateChainFile /etc/ssl/certs/startssl.pem"
]
-
-annexRsyncServer :: Property
-annexRsyncServer = combineProperties "rsync server for git-annex autobuilders"
+gitAnnexDistributor :: Property
+gitAnnexDistributor = combineProperties "git-annex distributor, including rsync server and signer"
[ Apt.installed ["rsync"]
, File.hasPrivContent "/etc/rsyncd.conf"
, File.hasPrivContent "/etc/rsyncd.secrets"
@@ -239,6 +262,8 @@ annexRsyncServer = combineProperties "rsync server for git-annex autobuilders"
`onChange` Service.running "rsync"
, endpoint "/srv/web/downloads.kitenet.net/git-annex/autobuild"
, endpoint "/srv/web/downloads.kitenet.net/git-annex/autobuild/x86_64-apple-mavericks"
+ -- git-annex distribution signing key
+ , Gpg.keyImported "89C809CB" "joey"
]
where
endpoint d = combineProperties ("endpoint " ++ d)
diff --git a/Propellor/SimpleSh.hs b/Propellor/SimpleSh.hs
index 7e0f19ff..c088eda7 100644
--- a/Propellor/SimpleSh.hs
+++ b/Propellor/SimpleSh.hs
@@ -32,7 +32,6 @@ simpleSh namedpipe = do
forever $ do
(client, _addr) <- accept s
h <- socketToHandle client ReadWriteMode
- hSetBuffering h LineBuffering
maybe noop (run h) . readish =<< hGetLine h
where
run h (Cmd cmd params) = do
@@ -47,6 +46,7 @@ simpleSh namedpipe = do
let runwriter = do
v <- readChan chan
hPutStrLn h (show v)
+ hFlush h
case v of
Done -> noop
_ -> runwriter
@@ -73,8 +73,8 @@ simpleShClient namedpipe cmd params handler = do
s <- socket AF_UNIX Stream defaultProtocol
connect s (SockAddrUnix namedpipe)
h <- socketToHandle s ReadWriteMode
- hSetBuffering h LineBuffering
hPutStrLn h $ show $ Cmd cmd params
+ hFlush h
resps <- catMaybes . map readish . lines <$> hGetContents h
hClose h `after` handler resps
diff --git a/Propellor/Types/Dns.hs b/Propellor/Types/Dns.hs
index 9b2ad1e7..ba6a92dd 100644
--- a/Propellor/Types/Dns.hs
+++ b/Propellor/Types/Dns.hs
@@ -1,5 +1,7 @@
module Propellor.Types.Dns where
+import Propellor.Types.OS (HostName)
+
import Data.Word
type Domain = String
@@ -14,14 +16,15 @@ fromIPAddr (IPv6 addr) = addr
-- | Represents a bind 9 named.conf file.
data NamedConf = NamedConf
{ confDomain :: Domain
- , confType :: Type
+ , confDnsServerType :: DnsServerType
, confFile :: FilePath
, confMasters :: [IPAddr]
+ , confAllowTransfer :: [IPAddr]
, confLines :: [String]
}
deriving (Show, Eq, Ord)
-data Type = Master | Secondary
+data DnsServerType = Master | Secondary
deriving (Show, Eq, Ord)
-- | Represents a bind 9 zone file.
@@ -66,6 +69,10 @@ getCNAME :: Record -> Maybe BindDomain
getCNAME (CNAME d) = Just d
getCNAME _ = Nothing
+getNS :: Record -> Maybe BindDomain
+getNS (NS d) = Just d
+getNS _ = Nothing
+
-- | Bind serial numbers are unsigned, 32 bit integers.
type SerialNumber = Word32
@@ -78,3 +85,8 @@ type SerialNumber = Word32
-- to add nameservers, MX's, etc to a domain.
data BindDomain = RelDomain Domain | AbsDomain Domain | RootDomain
deriving (Read, Show, Eq, Ord)
+
+domainHostName :: BindDomain -> Maybe HostName
+domainHostName (RelDomain d) = Just d
+domainHostName (AbsDomain d) = Just d
+domainHostName RootDomain = Nothing
diff --git a/config-joey.hs b/config-joey.hs
index 5dd466ee..254e810a 100644
--- a/config-joey.hs
+++ b/config-joey.hs
@@ -64,6 +64,9 @@ hosts = -- (o) `
-- I'd rather this were on diatom, but it needs unstable.
& alias "kgb.kitenet.net"
& JoeySites.kgbServer
+
+ & alias "mumble.kitenet.net"
+ & JoeySites.mumbleServer hosts
& alias "ns9.kitenet.net"
& myDnsSecondary
@@ -97,6 +100,10 @@ hosts = -- (o) `
& Apt.unattendedUpgrades
& Apt.serviceInstalledRunning "ntp"
& Postfix.satellite
+
+ -- Diatom has 500 mb of memory, so tune for that.
+ & JoeySites.obnamLowMem
+ & Apt.serviceInstalledRunning "swapspace"
& Apt.serviceInstalledRunning "apache2"
& File.hasPrivContent "/etc/ssl/certs/web.pem"
@@ -105,6 +112,7 @@ hosts = -- (o) `
& Apache.modEnabled "ssl"
& Apache.multiSSL
& File.ownerGroup "/srv/web" "joey" "joey"
+ & Apt.installed ["analog"]
& alias "git.kitenet.net"
& alias "git.joeyh.name"
@@ -115,7 +123,7 @@ hosts = -- (o) `
"downloads.kitenet.net"
"840760dc-08f0-11e2-8c61-576b7e66acfd"
[("turtle", "ssh://turtle.kitenet.net/~/lib/downloads/")]
- & JoeySites.annexRsyncServer
+ & JoeySites.gitAnnexDistributor
& alias "tmp.kitenet.net"
& JoeySites.annexWebSite hosts "/srv/git/joey/tmp.git"
@@ -129,18 +137,17 @@ hosts = -- (o) `
& JoeySites.oldUseNetServer hosts
& alias "ns2.kitenet.net"
- & myDnsSecondary
- & Dns.primary hosts "olduse.net"
- (Dns.mkSOA "ns2.kitenet.net" 100)
- [ (RootDomain, NS $ AbsDomain "ns2.kitenet.net")
- , (RootDomain, NS $ AbsDomain "ns6.gandi.net")
- , (RootDomain, NS $ AbsDomain "ns9.kitenet.net")
- , (RootDomain, MX 0 $ AbsDomain "kitenet.net")
- , (RootDomain, TXT "v=spf1 a -all")
- , (RelDomain "article", CNAME $ AbsDomain "virgil.koldfront.dk")
- ]
-
- & Apt.installed ["ntop"]
+ & myDnsPrimary "kitenet.net" []
+ & myDnsPrimary "joeyh.name" []
+ & myDnsPrimary "ikiwiki.info" []
+ & myDnsPrimary "olduse.net"
+ [ (RelDomain "article",
+ CNAME $ AbsDomain "virgil.koldfront.dk") ]
+
+ & alias "ns3.branchable.com"
+ & branchableSecondary
+
+ & Dns.secondaryFor ["animx"] hosts "animx.eu.org"
--' __|II| ,.
@@ -168,7 +175,7 @@ hosts = -- (o) `
, standardContainer "ancient-kitenet" Stable "amd64"
& Docker.publish "1994:80"
& Apt.serviceInstalledRunning "apache2"
- & Git.cloned "root" "git://git.kitenet.net/kitewiki" "/var/www"
+ & Git.cloned "root" "git://kitenet-net.branchable.com/" "/var/www"
(Just "remotes/origin/old-kitenet.net")
-- git-annex autobuilder containers
@@ -253,16 +260,27 @@ cleanCloudAtCost = propertyList "cloudatcost cleanup"
myDnsSecondary :: Property
myDnsSecondary = propertyList "dns secondary for all my domains" $ map toProp
- [ Dns.secondaryFor wren hosts "kitenet.net"
- , Dns.secondaryFor wren hosts "joeyh.name"
- , Dns.secondaryFor wren hosts "ikiwiki.info"
+ [ Dns.secondary hosts "kitenet.net"
+ , Dns.secondary hosts "joeyh.name"
+ , Dns.secondary hosts "ikiwiki.info"
, Dns.secondary hosts "olduse.net"
- , Dns.secondaryFor branchable hosts "branchable.com"
]
- where
- wren = ["wren.kitenet.net"]
- branchable = ["branchable.com"]
+branchableSecondary :: RevertableProperty
+branchableSecondary = Dns.secondaryFor ["branchable.com"] hosts "branchable.com"
+
+-- Currently using diatom (ns2) as primary with secondaries
+-- clam (ns9) and gandi.
+-- kite handles all mail.
+myDnsPrimary :: Domain -> [(BindDomain, Record)] -> RevertableProperty
+myDnsPrimary domain extras = Dns.primary hosts domain
+ (Dns.mkSOA "ns2.kitenet.net" 100) $
+ [ (RootDomain, NS $ AbsDomain "ns2.kitenet.net")
+ , (RootDomain, NS $ AbsDomain "ns6.gandi.net")
+ , (RootDomain, NS $ AbsDomain "ns9.kitenet.net")
+ , (RootDomain, MX 0 $ AbsDomain "kitenet.net")
+ , (RootDomain, TXT "v=spf1 a ?all")
+ ] ++ extras
-- o
@@ -282,20 +300,49 @@ monsters = -- but do want to track their public keys etc.
& sshPubKey "ssh-dss AAAAB3NzaC1kc3MAAAEBAI6ZsoW8a+Zl6NqUf9a4xXSMcV1akJHDEKKBzlI2YZo9gb9YoCf5p9oby8THUSgfh4kse7LJeY7Nb64NR6Y/X7I2/QzbE1HGGl5mMwB6LeUcJ74T3TQAlNEZkGt/MOIVLolJHk049hC09zLpkUDtX8K0t1yaCirC9SxDGLTCLEhvU9+vVdVrdQlKZ9wpLUNbdAzvbra+O/IVvExxDZ9WCHrnfNA8ddVZIGEWMqsoNgiuCxiXpi8qL+noghsSQNFTXwo7W2Vp9zj1JkCt3GtSz5IzEpARQaXEAWNEM0n1nJ686YUOhou64iRM8bPC1lp3QXvvZNgj3m+QHhIempx+de8AAAAVAKB5vUDaZOg14gRn7Bp81ja/ik+RAAABACPH/bPbW912x1NxNiikzGR6clLh+bLpIp8Qie3J7DwOr8oC1QOKjNDK+UgQ7mDQEgr4nGjNKSvpDi4c1QCw4sbLqQgx1y2VhT0SmUPHf5NQFldRQyR/jcevSSwOBxszz3aq9AwHiv9OWaO3XY18suXPouiuPTpIcZwc2BLDNHFnDURQeGEtmgqj6gZLIkTY0iw7q9Tj5FOyl4AkvEJC5B4CSzaWgey93Wqn1Imt7KI8+H9lApMKziVL1q+K7xAuNkGmx5YOSNlE6rKAPtsIPHZGxR7dch0GURv2jhh0NQYvBRn3ukCjuIO5gx56HLgilq59/o50zZ4NcT7iASF76TcAAAEAC6YxX7rrs8pp13W4YGiJHwFvIO1yXLGOdqu66JM0plO4J1ItV1AQcazOXLiliny3p2/W+wXZZKd5HIRt52YafCA8YNyMk/sF7JcTR4d4z9CfKaAxh0UpzKiAk+0j/Wu3iPoTOsyt7N0j1+dIyrFodY2sKKuBMT4TQ0yqQpbC+IDQv2i1IlZAPneYGfd5MIGygs2QMfaMQ1jWAKJvEO0vstZ7GB6nDAcg4in3ZiBHtomx3PL5w+zg48S4Ed69BiFXLZ1f6MnjpUOP75pD4MP6toS0rgK9b93xCrEQLgm4oD/7TCHHBo2xR7wwcsN2OddtwWsEM2QgOkt/jdCAoVCqwQ=="
, host "github.com"
& sshPubKey "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ=="
+ , host "ns6.gandi.net"
+ & ipv4 "217.70.177.40"
, host "turtle.kitenet.net"
& ipv4 "67.223.19.96"
& ipv6 "2001:4978:f:2d9::2"
+ & alias "backup.kitenet.net"
& sshPubKey "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAokMXQiX/NZjA1UbhMdgAscnS5dsmy+Q7bWrQ6tsTZ/o+6N/T5cbjoBHOdpypXJI3y/PiJTDJaQtXIhLa8gFg/EvxMnMz/KG9skADW1361JmfCc4BxicQIO2IOOe6eilPr+YsnOwiHwL0vpUnuty39cppuMWVD25GzxXlS6KQsLCvXLzxLLuNnGC43UAM0q4UwQxDtAZEK1dH2o3HMWhgMP2qEQupc24dbhpO3ecxh2C9678a3oGDuDuNf7mLp3s7ptj5qF3onitpJ82U5o7VajaHoygMaSRFeWxP2c13eM57j3bLdLwxVXFhePcKXARu1iuFTLS5uUf3hN6MkQcOGw=="
, host "wren.kitenet.net"
& ipv4 "80.68.85.49"
& ipv6 "2001:41c8:125:49::10"
- & alias "kite.kitenet.net"
& alias "kitenet.net"
+ & alias "kite.kitenet.net"
& alias "ns1.kitenet.net"
+ & alias "ftp.kitenet.net"
+ & alias "mail.kitenet.net"
+ & alias "smtp.kitenet.net"
+ & alias "sows-ear.kitenet.net"
+ & alias "www.sows-ear.kitenet.net"
+ & alias "wortroot.kitenet.net"
+ & alias "www.wortroot.kitenet.net"
+ & alias "joey.kitenet.net"
+ & alias "annex.kitenet.net"
+ & alias "ipv6.kitenet.net"
+ , host "mouse.kitenet.net"
+ & ipv6 "2001:4830:1600:492::2"
+ , host "beaver.kitenet.net"
+ & ipv6 "2001:4830:1600:195::2"
+ , host "hydra.kitenet.net"
+ & ipv4 "192.25.206.60"
, host "branchable.com"
& ipv4 "66.228.46.55"
& ipv6 "2600:3c03::f03c:91ff:fedf:c0e5"
& alias "olduse.net"
& alias "www.olduse.net"
- & alias "git.olduse.net"
+ & alias "www.kitenet.net"
+ & alias "joeyh.name"
+ & alias "campaign.joeyh.name"
+ & alias "ikiwiki.info"
+ & alias "git.ikiwiki.info"
+ & alias "l10n.ikiwiki.info"
+ & alias "dist-bugs.kitenet.net"
+ & alias "family.kitenet.net"
+ , host "animx"
+ & ipv4 "76.7.162.101"
+ & ipv4 "76.7.162.186"
]
diff --git a/debian/changelog b/debian/changelog
index 723d554d..8579097d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,14 @@
+propellor (0.5.1) unstable; urgency=medium
+
+ * Primary DNS servers now have allow-transfer automatically populated
+ with the IP addresses of secondary dns servers. So, it's important
+ that all secondary DNS servers have an ipv4 (and/or ipv6) property
+ configured.
+ * Deal with old ssh connection caching sockets.
+ * Add missing build deps and deps. Closes: #745459
+
+ -- Joey Hess <joeyh@debian.org> Thu, 24 Apr 2014 18:09:58 -0400
+
propellor (0.5.0) unstable; urgency=medium
* Removed root domain records from SOA. Instead, use RootDomain
diff --git a/debian/control b/debian/control
index bfdc5880..a4dc2466 100644
--- a/debian/control
+++ b/debian/control
@@ -11,6 +11,8 @@ Build-Depends:
libghc-unix-compat-dev,
libghc-ansi-terminal-dev,
libghc-ifelse-dev,
+ libghc-network-dev,
+ libghc-quickcheck2-dev,
libghc-mtl-dev,
libghc-monadcatchio-transformers-dev,
Maintainer: Joey Hess <joeyh@debian.org>
@@ -30,6 +32,8 @@ Depends: ${misc:Depends}, ${shlibs:Depends},
libghc-unix-compat-dev,
libghc-ansi-terminal-dev,
libghc-ifelse-dev,
+ libghc-network-dev,
+ libghc-quickcheck2-dev,
libghc-mtl-dev,
libghc-monadcatchio-transformers-dev,
git,
diff --git a/privdata/clam.kitenet.net.gpg b/privdata/clam.kitenet.net.gpg
index a486e828..052bc6b3 100644
--- a/privdata/clam.kitenet.net.gpg
+++ b/privdata/clam.kitenet.net.gpg
@@ -1,33 +1,68 @@
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1
-hQIMA7ODiaEXBlRZARAAwRCedlPz0UfWaS+CXyFA/LEFNoLlGhYsDSHaNcxC6Y9x
-0APA5VjbsAPagOOgHXLLpJrSOtGoA42amKvpsNpUf8XOwMb/AkQKEgfQ2bMeEMrf
-PHPOQxU79ouXBkEn2DXcrG4txSky0C/kEt2JmuHI6LJk0phnLs9NvrL4XaE2Dspz
-R8ZfTxPHzmt/yJr9allDokFGSoNOiapcOisyRW9F1sqGAS4C0WDCOFqiGtdXOdVN
-wvhkompsHUnxLHg3oNVgh2WHGjjgos2CKHNF7KpD/vzfEV9++7yH2Y9094M2Dn2m
-buj1XIORSlmxBKTVpw2PN0uI01QgX6hQ9YpDvozMFdQPvZwbBVDBa5rvdJg9nv6Z
-usy38x9C/Ry7RL2EFR0jJ32WQCAbMDR5hTZ9owjg1adUTlj8wWgBqP3NOWsEQBit
-aaqTmsuXKva7IBldLR357DSCGFefkTdyKzxY36J26lrbco2mhm83k7Z+JaSo7myN
-8x/Rm86Y5J4iICWjzqtdpg2hjlJAJAYcLFLe5r26t4VaCeDPWM0nQetZzDR/vb0B
-hisNPJm6NoTt71lTvHZA/+4xk5pH+ua3EnTA+u1qC6OAh9eoGZSeLI7VCsCVL8U/
-Tvo/mXknfN7VmpUNSmRiePBfshyi4Ckd+Pgc2XJFa/8tiPPRqyXkEercDZI4I+DS
-6QHX0cfvNgK7f9nDJkFx5T9kP/l0OlACLnMbnUjoe4l3uFoIb02akrM9+Q+2KW6L
-vzies7WuKNDNlnb08M1u9pB3ShDfs6SfHntSzVBdnCdWwgLveBoqwx8NXP5jTr8j
-TrP9H0Bp9uh63EkbBlcUThjkMob9mxHtk6y0pz/xvzNukELvQtfsIBiLde7A7ymV
-mmnRkfS7QKf/EUnw6C+DtT0JsXRgpDy1YS+l5rrzuqL+9AyRIJzbTH0MAkkqnvCI
-bNH3ogPI657J50AXCPZbFfDiU3k0RYuXbY9yDaxLJi/3+TEdOEGcVdbu4pOO5D2f
-OcbJrWq5vk/ifQuoMpqNCHnWzHuVIeARCOmd3tOC5wV5Ae73C80oh36lYVYxyu9U
-s1mHN+PyUFS2F4MBDWu9DhxGlzO5MJIQYiBy1SMEkrWj71ngpAqii33F2B+vIQmx
-VObBZs8upPrIswGzc9Xa2eYKkd2xASNmynqGo/tsTn3j4vKXSPdRUuPFUxNXuTt4
-ClLyf12P8Kgbd5tB/Jm9r1c+yHjowg0d6u9zhyhi9Aklg1jgFTRYauiwQLxOWZ4H
-yuhPSgI91ySKJBqH+YJg9Bzb7dYVX8UNOZSBRz9U18RCUxMzpsmhcHC2tFrr9FRN
-FOyD7kX1O7DUkLTFPDjZZTbO5LmYaEqHi+ptriJyX9/2wE2qiDUWCbIji/1vqCmT
-2saPIS/UdIoNR9c6q9ws3XRKHhkRI8QZTQd+Jcx0xwzqOMnHnnRw8jselfSHtTL4
-1GV/K5SQp0+ZzYnC67Qu0nJrqfM7eH7e6n1j+dgV1LkLKwunZ5sQU9KF84+NncA7
-QhED0ppL4bClg1N/VLVOhPlzorUHds4np2wIorCVoS2XqjPUIFNlmfWlwZRd5P/p
-Po70TktbtifqNBrl5KU2SmM/lRjJeU/RJl4NSsnvA8m3A7mvIuB9fWmVkjmoepi6
-r+HhYXFdkcz6w3BYOJjNM18zKEuxSffcgwjtxPO7a+RvyreRhPxuBXYCsLn1FeDT
-gdM492sCouTWKUpECPJEjw==
-=2knt
+hQIMA7ODiaEXBlRZAQ//Vbtv4CUUimUJUgEvuTkr+6UL1dk4Kx5KXydHNrguq/hN
+Q2QWetPq+AkGbrrmP0LEqJ739kYQBM5Kpv0vTWTUNyeAZ38NY8MqqeXlTYYUitfg
+n98tAjubHzp/5rFPx1GPmwFrZUAver7ySZ73s/GqTYnd2IIBJhWWz6joMRhKPLhI
+Fyo3LZ1+Cx3COKCqUqknE4CqWwZ/tbUMOq33We8TanWrbNKalr0wJ+7/8zDl8NjH
+cu6IuBDFQLakJmPmgZZ+PIehpCfPXzuIJehuuAQ4sKdE8Wgm4zik3bARlg1lqfZE
+cW6Bf84RjgdxDzuq7Oc09jcb7+xevEm/lQkxNzh5RqADBfMGzR2NtXpjbKHLr8m7
+NG1uke8CkKHMdZe/Xg0u3WIkqMvaKp1rfboSMSNl+tmDxg3WLERBhZxZSFkwP7/c
+VZDmRA10RMn0RawLfCToPzoy7gK9jH7iM67yYpjh5d6gR46IZSpYdAFDCEBqgjm6
+Qxfvh/lzf+btTna5TXc9FnqVuHlY9o2D4/IeM+u2ESydBKBPEcProHIlxk6Vz+1z
+EmOvO0kLsFu7YJTEu8GhuEd1wwoeH7Ca4nBes/PF+su1IGXNUNgUc0eS7JLQACK+
+O9dBVKdMN+1/+BtA5N6S+EzmTMvVIkrhSECoF7nu3cUSd9hdCODFnGGXG0ij33bS
+6wEeM0smHfrwx8gbgZxDbSTwH9XbuBVqaN3t6r9UMNPEWpJkQQFZ/B9ashaAOReN
+8jIiEqwY+UY5KsuFGe8AJkBOsHu7ODb+2ivYdxk6Wo9wv+HB7S51ePkNsboxwQC9
+cB3I4QcDVJA4OUsOMCpaKpRdfoQbqDamnGzxiBeMf+TLpFJ6zLvV1FrFDjcGR2iC
+LdATWZb59kA3Fg8uNsip9c1yhERDXIQOKTUdH/meQVngZfSzRfrMFIevvpZS/9Qu
+HbLQOXiTQPzUCHUs3oAiN4ggRAGGMcKhLpCdkGx1AJ2EwM3iJI2pSUfYaqHwE8iO
+HWVquAKMYYTb7COLL8/rcZc1NeUGq5qfC1bKvlyNVpbeOnWk5N2rSPKbkAbI9dVa
+jOzdbtOMVzRhe8qyTxFy4l69P/RvgzrXNYPp3DpnCO/B0ioGCxhSpoxFzDMBNge+
+ogXxaO+TssyFYqyOnNzzarIsR3gM/GH89/7ZO+bvnX2deySJQt4N/7uo5FBMwKCM
+lV1WCiXPVa2Agwp+/St0/MthEFypmCn5PgVwDN2PvWR4boITsqnhrurymBQ9nlfa
+IPe225V2TIZjaKku0Zv9bR+Knri/tR9582rO6w53UmVcjrcsezPOxIRDAIKm+T2r
+EQbfytYVeGaJc/GK7hGM445gzG6pM2R/tl485592bldEWAryeMJJ71IaXQlal2i1
+qUmDNtOODq7wYQd/H1InxV1cHeMUM3nJrNn0JjkMtxsvnlJNU5SyCVX9N0TkkY5T
+dNbXkMmzeJSRqvHCLlbRfOudejYxxdp5lQzBbvoInfVx0MGRO3O9D5j3c+VDKO+1
+76gB+sN+8x7mM1r8DzixYcFfaPsnseCQuZy3lh1Le+VBohk+7yv2boKVYF79RB5t
+IKDWxmp62pjhOZyNvOCu2e3hdh2KOeUdyW0hQWkzscOJN28o5USnHU+pTguvikez
+jIbU73Cefpg4gyDnhTwelZCkRKokXS2gS7bFkVwVqjp5DbdGvBmITW4TfuGCJ1zd
+N0fCu3XUFsk0uIhhJJ6kXsRcJFvHCcIhyXCMxW656hlcIjeDUOup1jNWfaQ2LMTC
+HSNTmKYXpOuA/A/tkGF9yBzMSwqskMXcnNIVfi8kj+uNq6/1IFoolu5JHJKBxZwi
+QqkpWJ5j8qkajCSyZksqQyScMn/T8/g6qK+bprMZP8vc3R9jiCyvehvkKHg3wnBs
+G08MKNYiwlzfQm0t3iJ7EBv6k5a+zn2X187NcvignsRrgfcPHpb/XmgvxqmM6DyD
+KspIxWwOSCQJSjR0lcYSBX+Efnx1zg6XpOsUtgelaIQ/H6KxF3997tza7x9emniq
+j4FJqPeKTyp8rBdJmJJ13dIxfkfqTjuOJ7hth6hrsU0RlKbFfMFP0MrNBpb/aZZa
+4lVR9N0sT6kyXbj8dFKwyQrgsQIjlzpXmJB3O6RA3ydaoJycN/AUEf510CQ0dZ7j
+yXCxCeCm8PIS+Pcffg9gBLN2kY8NH5PQYww0ydfigRmJMUTBtPW545pAyxilEsxX
+rgWeYft6hE447lLwPgJk2DgAKf+E1Osge3qW2VkR6WrOraWiconpoRWbNon31EUs
+G3l7CIXVugzjfehMolq3W7jf8VcmYp9eGQcGTo9zdxSI7yZuw9aaKKyMvGYkoKLw
+tNWPAZFtSJQ23flGR7Ga5VDS5RGJAtNc6kIzXVP6IXreuEIJajuObFkgavpgZiTx
+Tswp3EvaqPaR5TuyWWtmFjxhhVh1Q8fNyY8UsMClwVYhmMcLgn2r8FjL/zy1K/rL
+i0izJokwU8/e1g5jPNxGGgzITQEkPVA7qdHdJ75xA8rFer8LUKsAoxEkaJG2TRrj
+RuGtSTPXRzX1EqCLc6U/Q51PBmiDJXSe4vhohaqzq68Bb/lc94zdY9/t8rscJLnH
+ZJUTkSl46ZyOANIsY/DFsAKLqcKWn4F6vdRzTJ7t/ng+s/xxIYZT9vpA0BQtPf9D
+OzfsLj5UUeWW5/T9fV+Ee+mwzhas0yQc507rEUvNIluciwHHKpBN/FpAleakgkJB
+5Ion0vI5PBDwiA881fbop7M+EcoHG9Z8/M5W9eG1QNmiA4FFkxSmgsvw3MyartT3
+4Ogmkwd5mmqS4o8i7i0N81Wwh+cX6HU1ifw8MjeE1Yshv4WVxqygqHnw26IybdVn
+KWWkWn1jQhfiFm5rzqAXVQb4jlvpueL7DvaQDzpLGQLivSFZfPbkILIvFTdYcZWY
+zV1i74TIkHmwf6W17gjGn08bv2QPQyHkRhy8++v7eSWLxzhVeWPD1X5AshvbayBj
+udKyC0irZi6R5BZ1T3xodyX4GNXIdp3htNb8VV9djJ57Mc7uBRFAy5hNvhmtJXfA
++qob3p8Zm0wIVwCDgt7z2sHEcGaV2fph3VPibQad1qUImj+7y+hrSbctqL1dmZuU
+h2i6Yt5eZ2JJaRQMpooiSCIYVZRgXyNfYsL9T41FQWQhnKiX2JmzCqzQ2EcDNVtX
+2k/HZL7KZP4VEXEPXRZcO1uplb+SBuhtn9eNTNz12ajPQhR/EwFJ3KbuuQnamhXL
+1kjnCLh6t56TbKltCaL9UMPWt44fmNUOau2Z6wFCiQnB8BUCdwh7Vez10h32iQzN
+2J9Jx7bKKwND3nI6FPW+YDJgTYGAdPdS8ihy7CJiDH3vbAfAFDyORUFTTbByMSHt
+dpdhjeG3G3O6emdvbl44u7ZXk1HeJNXuaJBG8xWWZHX3wNf34V9C+boK34+yFm0H
+b6Z829BtAZZB2l6m+Fz0WWGGNUx9zFBAaQzh21oP+O3EseKVA+Y+8MivFMCuZgEI
+Xljhuv/zG1wfYZKn9XJWt9L9gok2T9BoHJWPFj52QmzpH2q/teS26+4HrXiu8uQF
+ilP6yV+JTh/qhEeDdzybQA9xZ2aGCKPRNbrCPExjaPu8pMr45+zur+klndS178iU
+DMLaNO074WuPFK2o0QuHtF9Z1JM6yRIIgO+T8APzg7cuxh+9xBkOAPTkvFBmoYxP
+tzsN9azP5lqy8H34pxk6kQJ9anbq20ZY8t6q5Oreq1VBh/FvJYi5FnCWcSH0zn8O
+QD3JRCBQRgbd5EaU9zWgIRr9P032iZePLL1t02y3v9Cgb9Dxf3r3MiZZm5rks8QG
+irziXV0IWeM6mPkpwYSrTcc5dQpWD1YdVp3pR8gYr9qmHPaESQ9BlvPK/aLjXhti
+SDFgcUHclljFRPHfj/JBB3fvTytQFrlQzjLdvmbzmake07YtcVYK1AnnDQ0oTZsH
+rZ/dBe5tZ4HbXw==
+=xx7F
-----END PGP MESSAGE-----
diff --git a/privdata/diatom.kitenet.net.gpg b/privdata/diatom.kitenet.net.gpg
index 99be63bc..f03e91c5 100644
--- a/privdata/diatom.kitenet.net.gpg
+++ b/privdata/diatom.kitenet.net.gpg
@@ -1,343 +1,366 @@
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1
-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
-=GAmO
+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
+ZeWCt3M2QDPYox2/qZBR23+JUsiT
+=n+YJ
-----END PGP MESSAGE-----
diff --git a/propellor.cabal b/propellor.cabal
index 0d8ace05..30d61af9 100644
--- a/propellor.cabal
+++ b/propellor.cabal
@@ -1,5 +1,5 @@
Name: propellor
-Version: 0.5.0
+Version: 0.5.1
Cabal-Version: >= 1.6
License: GPL
Maintainer: Joey Hess <joey@kitenet.net>
@@ -35,7 +35,7 @@ Description:
Executable propellor
Main-Is: propellor.hs
- GHC-Options: -Wall
+ GHC-Options: -Wall -threaded
Build-Depends: MissingH, directory, filepath, base >= 4.5, base < 5,
IfElse, process, bytestring, hslogger, unix-compat, ansi-terminal,
containers, network, async, time, QuickCheck, mtl,
diff --git a/propellor.hs b/propellor.hs
index e4653f30..c7727751 100644
--- a/propellor.hs
+++ b/propellor.hs
@@ -74,7 +74,7 @@ wrapper args propellordir propellorbin = do
void $ boolSystem "git" [Param "remote", Param "add", Param "upstream", Param srcrepo]
-- Connect synthetic git repo with upstream history so
-- merging with upstream will work going forward.
- -- Note -s outs is used to avoid getting any divergent
+ -- Note -s ours is used to avoid getting any divergent
-- changes from upstream.
when fromsrcdir $ do
void $ boolSystem "git" [Param "fetch", Param "upstream"]