diff --git a/config-joey.hs b/config-joey.hs index 783c548..18f0a32 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -21,8 +21,10 @@ import qualified Propellor.Property.Git as Git import qualified Propellor.Property.Apache as Apache import qualified Propellor.Property.Postfix as Postfix import qualified Propellor.Property.Service as Service +import qualified Propellor.Property.Grub as Grub import qualified Propellor.Property.HostingProvider.DigitalOcean as DigitalOcean import qualified Propellor.Property.HostingProvider.CloudAtCost as CloudAtCost +import qualified Propellor.Property.HostingProvider.Linode as Linode import qualified Propellor.Property.SiteSpecific.GitHome as GitHome import qualified Propellor.Property.SiteSpecific.GitAnnexBuilder as GitAnnexBuilder import qualified Propellor.Property.SiteSpecific.JoeySites as JoeySites @@ -34,7 +36,6 @@ main = defaultMain hosts -- / \___-=O`/|O`/__| (____.' Deployed -} -- `/-==__ _/__|/__=-| ( \_ hosts :: [Host] -- * \ | | '--------' hosts = -- (o) ` - -- My laptop [ host "darkstar.kitenet.net" & ipv6 "2001:4830:1600:187::2" -- sixxs tunnel @@ -42,8 +43,8 @@ hosts = -- (o) ` & Docker.configured & Docker.docked hosts "android-git-annex" - -- Unreliable server. , standardSystem "clam.kitenet.net" Unstable "amd64" + [ "Unreliable server. Anything here may be lost at any time!" ] & ipv4 "162.248.9.29" & CloudAtCost.decruft @@ -57,6 +58,7 @@ hosts = -- (o) ` -- Orca is the main git-annex build box. , standardSystem "orca.kitenet.net" Unstable "amd64" + [ "Main git-annex build box." ] & ipv4 "138.38.108.179" & Hostname.sane @@ -71,16 +73,27 @@ hosts = -- (o) ` & Docker.garbageCollected `period` Daily & Apt.buildDep ["git-annex"] `period` Daily - -- Important stuff that needs not too much memory or CPU. - , let ctx = Context "diatom.kitenet.net" - in standardSystem "diatom.kitenet.net" Stable "amd64" + , standardSystem "kite.kitenet.net" Unstable "amd64" + [ "Welcome to the new kitenet.net server!" + , "This is still under construction and not yet live.." + ] + & ipv4 "66.228.36.95" + & ipv6 "2600:3c03::f03c:91ff:fe73:b0d2" + + & Apt.installed ["linux-image-amd64"] + & Linode.chainPVGrub 5 + & Hostname.sane + & Apt.unattendedUpgrades + & Apt.installed ["systemd"] + & Ssh.hostKeys (Context "kitenet.net") + + , standardSystem "diatom.kitenet.net" Stable "amd64" + [ "Important stuff that needs not too much memory or CPU." ] & ipv4 "107.170.31.195" & DigitalOcean.distroKernel & Hostname.sane - & Ssh.hostKey SshDsa ctx - & Ssh.hostKey SshRsa ctx - & Ssh.hostKey SshEcdsa ctx + & Ssh.hostKeys (Context "diatom.kitenet.net") & Apt.unattendedUpgrades & Apt.serviceInstalledRunning "ntp" & Postfix.satellite @@ -133,36 +146,18 @@ hosts = -- (o) ` & Dns.secondaryFor ["animx"] hosts "animx.eu.org" - -- storage and backup server , let ctx = Context "elephant.kitenet.net" in standardSystem "elephant.kitenet.net" Unstable "amd64" + [ "Storage, big data, and backups, omnomnom!" ] & ipv4 "193.234.225.114" + & Grub.chainPVGrub "hd0,0" "xen/xvda1" 30 & Hostname.sane & Postfix.satellite & Apt.unattendedUpgrades - & Ssh.hostKey SshDsa ctx - & Ssh.hostKey SshRsa ctx - & Ssh.hostKey SshEcdsa ctx + & Ssh.hostKeys ctx & Ssh.keyImported SshRsa "joey" ctx - - -- PV-grub chaining - -- http://notes.pault.ag/linode-pv-grub-chainning/ - -- (Adapted to use xvda1/hd0,0 instead of xvda/hd0) - & "/boot/grub/menu.lst" `File.hasContent` - [ "default 1" - , "timeout 30" - , "" - , "title grub-xen shim" - , "root (hd0,0)" - , "kernel /boot/xen-shim" - , "boot" - ] - & "/boot/load.cf" `File.hasContent` - [ "configfile (xen/xvda1)/boot/grub/grub.cfg" ] - & Apt.installed ["grub-xen"] - & flagFile (scriptProperty ["update-grub; grub-mkimage --prefix '(xen/xvda1)/boot/grub' -c /boot/load.cf -O x86_64-xen /usr/lib/grub/x86_64-xen/*.mod > /boot/xen-shim"]) "/boot/xen-shim" - `describe` "/boot-xen-shim" + & Apt.serviceInstalledRunning "swapspace" & alias "eubackup.kitenet.net" & Apt.installed ["obnam", "sshfs", "rsync"] @@ -204,6 +199,11 @@ hosts = -- (o) ` -- block 22. & "/etc/ssh/sshd_config" `File.containsLine` "Port 80" `onChange` Service.restarted "ssh" + + -- temp + & Docker.docked hosts "amd64-git-annex-builder" + & Docker.docked hosts "i386-git-annex-builder" + & Docker.docked hosts "android-git-annex-builder" --' __|II| ,. @@ -257,10 +257,13 @@ hosts = -- (o) ` -- temp for an acquantance ] ++ monsters +type Motd = [String] + -- This is my standard system setup. -standardSystem :: HostName -> DebianSuite -> Architecture -> Host -standardSystem hn suite arch = host hn +standardSystem :: HostName -> DebianSuite -> Architecture -> Motd -> Host +standardSystem hn suite arch motd = host hn & os (System (Debian suite) arch) + & File.hasContent "/etc/motd" ("":motd++[""]) & Apt.stdSourcesList `onChange` Apt.upgrade & Apt.cacheCleaned & Apt.installed ["etckeeper"] @@ -352,7 +355,6 @@ monsters = -- but do want to track their public keys etc. & ipv4 "80.68.85.49" & ipv6 "2001:41c8:125:49::10" & alias "kitenet.net" - & alias "kite.kitenet.net" & alias "ns1.kitenet.net" & alias "ftp.kitenet.net" & alias "mail.kitenet.net" diff --git a/debian/changelog b/debian/changelog index 3c84ac9..5492366 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,13 @@ +propellor (0.8.1) unstable; urgency=medium + + * Run apt-get update in initial bootstrap. + * --list-fields now includes a table of fields that are not currently set, + but would be used if they got set. + * Remove .gitignore from cabal file list, to avoid build failure on Debian. + Closes: #754334 + + -- Joey Hess Wed, 09 Jul 2014 22:11:31 -0400 + propellor (0.8.0) unstable; urgency=medium * Completely reworked privdata storage. There is now a single file, diff --git a/privdata/privdata.gpg b/privdata/privdata.gpg index 9cb56a9..afafeee 100644 --- a/privdata/privdata.gpg +++ b/privdata/privdata.gpg @@ -1,434 +1,439 @@ -----BEGIN PGP MESSAGE----- Version: GnuPG v1 -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 -=KIFU +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 +=6HOm -----END PGP MESSAGE----- diff --git a/propellor.cabal b/propellor.cabal index 1c3c868..50067b8 100644 --- a/propellor.cabal +++ b/propellor.cabal @@ -1,5 +1,5 @@ Name: propellor -Version: 0.8.0 +Version: 0.8.1 Cabal-Version: >= 1.6 License: BSD3 Maintainer: Joey Hess @@ -25,7 +25,6 @@ Extra-Source-Files: debian/copyright debian/rules debian/lintian-overrides - .gitignore Synopsis: property-based host configuration management in haskell Description: Propellor enures that the system it's run in satisfies a list of @@ -81,6 +80,7 @@ Library Propellor.Property.File Propellor.Property.Git Propellor.Property.Gpg + Propellor.Property.Grub Propellor.Property.Network Propellor.Property.Obnam Propellor.Property.OpenId @@ -92,8 +92,9 @@ Library Propellor.Property.Sudo Propellor.Property.Tor Propellor.Property.User - Propellor.Property.HostingProvider.DigitalOcean Propellor.Property.HostingProvider.CloudAtCost + Propellor.Property.HostingProvider.DigitalOcean + Propellor.Property.HostingProvider.Linode Propellor.Property.SiteSpecific.GitHome Propellor.Property.SiteSpecific.JoeySites Propellor.Property.SiteSpecific.GitAnnexBuilder diff --git a/src/Propellor/CmdLine.hs b/src/Propellor/CmdLine.hs index 448e70d..7b39cd2 100644 --- a/src/Propellor/CmdLine.hs +++ b/src/Propellor/CmdLine.hs @@ -92,7 +92,7 @@ defaultMain hostlist = do go False (Boot hn) = onlyProcess $ withhost hn boot withhost :: HostName -> (Host -> IO ()) -> IO () - withhost hn a = maybe (unknownhost hn) a (findHost hostlist hn) + withhost hn a = maybe (unknownhost hn hostlist) a (findHost hostlist hn) onlyProcess :: IO a -> IO a onlyProcess a = bracket lock unlock (const a) @@ -106,11 +106,12 @@ onlyProcess a = bracket lock unlock (const a) alreadyrunning = error "Propellor is already running on this host!" lockfile = localdir ".lock" -unknownhost :: HostName -> IO a -unknownhost h = errorMessage $ unlines +unknownhost :: HostName -> [Host] -> IO a +unknownhost h hosts = errorMessage $ unlines [ "Propellor does not know about host: " ++ h , "(Perhaps you should specify the real hostname on the command line?)" , "(Or, edit propellor's config.hs to configure this host)" + , "Known hosts: " ++ unwords (map hostName hosts) ] buildFirst :: CmdLine -> IO () -> IO () @@ -209,7 +210,8 @@ spin hn hst = do bootstrapcmd = shellWrap $ intercalate " ; " [ "if [ ! -d " ++ localdir ++ " ]" , "then " ++ intercalate " && " - [ "apt-get --no-install-recommends --no-upgrade -y install git make" + [ "apt-get update" + , "apt-get --no-install-recommends --no-upgrade -y install git make" , "echo " ++ toMarked statusMarker (show NeedGitClone) ] , "else " ++ intercalate " && " diff --git a/src/Propellor/PrivData.hs b/src/Propellor/PrivData.hs index c6e41b4..f85ded1 100644 --- a/src/Propellor/PrivData.hs +++ b/src/Propellor/PrivData.hs @@ -109,20 +109,24 @@ editPrivData field context = do listPrivDataFields :: [Host] -> IO () listPrivDataFields hosts = do m <- decryptPrivData - putStrLn "\n" - let usedby = M.unionsWith (++) $ map mkhostmap hosts - let rows = map (mkrow usedby) (M.keys m) - let table = tableWithHeader header rows - putStr $ unlines $ formatTable table + showtable "Currently set data:" $ + map mkrow (M.keys m) + showtable "Data that would be used if set:" $ + map mkrow (M.keys $ M.difference wantedmap m) where header = ["Field", "Context", "Used by"] - mkrow usedby k@(field, (Context context)) = + mkrow k@(field, (Context context)) = [ shellEscape $ show field , shellEscape context , intercalate ", " $ sort $ fromMaybe [] $ M.lookup k usedby ] mkhostmap host = M.fromList $ map (\k -> (k, [hostName host])) $ S.toList $ _privDataFields $ hostInfo host + usedby = M.unionsWith (++) $ map mkhostmap hosts + wantedmap = M.fromList $ zip (M.keys usedby) (repeat "") + showtable desc rows = do + putStrLn $ "\n" ++ desc + putStr $ unlines $ formatTable $ tableWithHeader header rows setPrivDataTo :: PrivDataField -> Context -> PrivData -> IO () setPrivDataTo field context value = do diff --git a/src/Propellor/Property/Grub.hs b/src/Propellor/Property/Grub.hs new file mode 100644 index 0000000..841861f --- /dev/null +++ b/src/Propellor/Property/Grub.hs @@ -0,0 +1,39 @@ +module Propellor.Property.Grub where + +import Propellor +import qualified Propellor.Property.File as File +import qualified Propellor.Property.Apt as Apt + +-- | Eg, hd0,0 or xen/xvda1 +type GrubDevice = String + +type TimeoutSecs = Int + +-- | Use PV-grub chaining to boot +-- +-- Useful when the VPS's pv-grub is too old to boot a modern kernel image. +-- +-- http://notes.pault.ag/linode-pv-grub-chainning/ +-- +-- The rootdev should be in the form "hd0", while the bootdev is in the form +-- "xen/xvda". +chainPVGrub :: GrubDevice -> GrubDevice -> TimeoutSecs -> Property +chainPVGrub rootdev bootdev timeout = combineProperties desc + [ File.dirExists "/boot/grub" + , "/boot/grub/menu.lst" `File.hasContent` + [ "default 1" + , "timeout " ++ show timeout + , "" + , "title grub-xen shim" + , "root (" ++ rootdev ++ ")" + , "kernel /boot/xen-shim" + , "boot" + ] + , "/boot/load.cf" `File.hasContent` + [ "configfile (" ++ bootdev ++ ")/boot/grub/grub.cfg" ] + , Apt.installed ["grub-xen"] + , flagFile (scriptProperty ["update-grub; grub-mkimage --prefix '(" ++ bootdev ++ ")/boot/grub' -c /boot/load.cf -O x86_64-xen /usr/lib/grub/x86_64-xen/*.mod > /boot/xen-shim"]) "/boot/xen-shim" + `describe` "/boot-xen-shim" + ] + where + desc = "chain PV-grub" diff --git a/src/Propellor/Property/HostingProvider/Linode.hs b/src/Propellor/Property/HostingProvider/Linode.hs new file mode 100644 index 0000000..34d7218 --- /dev/null +++ b/src/Propellor/Property/HostingProvider/Linode.hs @@ -0,0 +1,10 @@ +module Propellor.Property.HostingProvider.Linode where + +import Propellor +import qualified Propellor.Property.Grub as Grub + +-- | Linode's pv-grub-x86_64 does not currently support booting recent +-- Debian kernels compressed with xz. This sets up pv-grub chaing to enable +-- it. +chainPVGrub :: Grub.TimeoutSecs -> Property +chainPVGrub = Grub.chainPVGrub "hd0" "xen/xvda" diff --git a/src/Propellor/Property/Ssh.hs b/src/Propellor/Property/Ssh.hs index 6785ede..5a26047 100644 --- a/src/Propellor/Property/Ssh.hs +++ b/src/Propellor/Property/Ssh.hs @@ -5,6 +5,7 @@ module Propellor.Property.Ssh ( hasAuthorizedKeys, restartSshd, randomHostKeys, + hostKeys, hostKey, keyImported, knownHost, @@ -75,7 +76,15 @@ randomHostKeys = flagFile prop "/etc/ssh/.unique_host_keys" ensureProperty $ scriptProperty [ "DPKG_MAINTSCRIPT_NAME=postinst DPKG_MAINTSCRIPT_PACKAGE=openssh-server /var/lib/dpkg/info/openssh-server.postinst configure" ] --- | Sets ssh host keys. +-- | Sets all types of ssh host keys from the privdata. +hostKeys :: Context -> Property +hostKeys ctx = propertyList "known ssh host keys" + [ hostKey SshDsa ctx + , hostKey SshRsa ctx + , hostKey SshEcdsa ctx + ] + +-- | Sets a single ssh host key from the privdata. hostKey :: SshKeyType -> Context -> Property hostKey keytype context = combineProperties desc [ installkey (SshPubKey keytype "") (install writeFile ".pub")