From ebb7353f49249967c219ed2aaffd9be8be70e6b8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 15:06:24 -0400 Subject: propellor spin --- src/Propellor/Property/Obnam.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/Obnam.hs b/src/Propellor/Property/Obnam.hs index 15a8494c..b5c6d776 100644 --- a/src/Propellor/Property/Obnam.hs +++ b/src/Propellor/Property/Obnam.hs @@ -33,8 +33,8 @@ data NumClients = OnlyClient | MultipleClients -- > [ "--repository=sftp://2318@usw-s002.rsync.net/~/mygitrepos.obnam" -- > , "--encrypt-with=1B169BE1" -- > ] Obnam.OnlyClient --- > `requires` Gpg.keyImported "1B169BE1" "root" --- > `requires` Ssh.keyImported SshRsa "root" +-- > `requires` Gpg.keyImported "1B169BE1" "root" +-- > `requires` Ssh.keyImported SshRsa "root" (Context hostname) -- -- How awesome is that? backup :: FilePath -> Cron.CronTimes -> [ObnamParam] -> NumClients -> Property -- cgit v1.3-2-g0d8e From 79f1a6c67b72b695b23db69aaa606dc79c313d86 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 15:33:02 -0400 Subject: propellor spin --- config-joey.hs | 10 ++++++---- src/Propellor/Property/Cron.hs | 2 +- src/Propellor/Property/SiteSpecific/JoeySites.hs | 23 +++++++++++++++++++++++ 3 files changed, 30 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index d4af95ea..ec4e6aa9 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -97,7 +97,7 @@ hosts = -- (o) ` , "--exclude=/home/joey/lib" , "--exclude=.*/tmp/" ] Obnam.OnlyClient - `requires` Gpg.keyImported "" "root" + `requires` Gpg.keyImported "98147487" "root" `requires` Ssh.keyImported SshRsa "root" (Context "kite.kitenet.net") @@ -175,12 +175,13 @@ hosts = -- (o) ` & alias "eubackup.kitenet.net" & Apt.installed ["obnam", "sshfs", "rsync"] - & JoeySites.githubBackup & JoeySites.obnamRepos ["wren", "pell", "kite"] - & Ssh.knownHost hosts "usw-s002.rsync.net" "joey" + & JoeySites.githubBackup + & JoeySites.rsyncNetBackup hosts + & JoeySites.backupsBackedupTo hosts "usbackup.kitenet.net" "lib/backup/eubackup" & alias "podcatcher.kitenet.net" - & Apt.installed ["git-annex"] + & JoeySites.podcatcher & alias "znc.kitenet.net" & JoeySites.ircBouncer @@ -364,6 +365,7 @@ monsters = -- but do want to track their public keys etc. & ipv4 "67.223.19.96" & ipv6 "2001:4978:f:2d9::2" & alias "backup.kitenet.net" + & alias "usbackup.kitenet.net" & sshPubKey "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAokMXQiX/NZjA1UbhMdgAscnS5dsmy+Q7bWrQ6tsTZ/o+6N/T5cbjoBHOdpypXJI3y/PiJTDJaQtXIhLa8gFg/EvxMnMz/KG9skADW1361JmfCc4BxicQIO2IOOe6eilPr+YsnOwiHwL0vpUnuty39cppuMWVD25GzxXlS6KQsLCvXLzxLLuNnGC43UAM0q4UwQxDtAZEK1dH2o3HMWhgMP2qEQupc24dbhpO3ecxh2C9678a3oGDuDuNf7mLp3s7ptj5qF3onitpJ82U5o7VajaHoygMaSRFeWxP2c13eM57j3bLdLwxVXFhePcKXARu1iuFTLS5uUf3hN6MkQcOGw==" , host "wren.kitenet.net" & ipv4 "80.68.85.49" diff --git a/src/Propellor/Property/Cron.hs b/src/Propellor/Property/Cron.hs index 5b070eff..d7138e3b 100644 --- a/src/Propellor/Property/Cron.hs +++ b/src/Propellor/Property/Cron.hs @@ -42,7 +42,7 @@ job desc times user cddir command = cronjobfile `File.hasContent` -- | Installs a cron job, and runs it niced and ioniced. niceJob :: Desc -> CronTimes -> UserName -> FilePath -> String -> Property niceJob desc times user cddir command = job desc times user cddir - ("nice ionice -c 3 " ++ command) + ("nice ionice -c 3 sh -c " ++ shellEscape command) -- | Installs a cron job to run propellor. runPropellor :: CronTimes -> Property diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index c770907b..fbb1492b 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -348,8 +348,26 @@ githubBackup = propertyList "github-backup box" , let f = "/home/joey/.github-keys" in File.hasPrivContent f anyContext `onChange` File.ownerGroup f "joey" "joey" + , Cron.niceJob "github-backup run" "30 4 * * *" "joey" + "/home/joey/lib/backup" $ intercalate "&" + [ "mkdir -p github" + , "cd github" + , "$HOME/.github-keys && github-backup joeyh" + ] ] +rsyncNetBackup :: [Host] -> Property +rsyncNetBackup hosts = Cron.niceJob "rsync.net copied in daily" "30 5 * * *" + "joey" "/home/joey/lib/backup" "mkdir -p rsync.net && rsync --delete -az 2318@usw-s002.rsync.net: rsync.net" + `requires` Ssh.knownHost hosts "usw-s002.rsync.net" "joey" + +backupsBackedupTo :: [Host] -> HostName -> FilePath -> Property +backupsBackedupTo hosts desthost destdir = Cron.niceJob "backups copied to usbackup weekly" + "1 1 * * 3" "joey" "/" cmd + `requires` Ssh.knownHost hosts desthost "joey" + where + cmd = "rsync -az --delete /home/joey/lib/backup " ++ desthost ++ ":" ++ destdir + obnamRepos :: [String] -> Property obnamRepos rs = propertyList ("obnam repos for " ++ unwords rs) (mkbase : map mkrepo rs) @@ -360,3 +378,8 @@ obnamRepos rs = propertyList ("obnam repos for " ++ unwords rs) mkdir d = File.dirExists d `before` File.ownerGroup d "joey" "joey" +podcatcher :: Property +podcatcher = Cron.niceJob "podcatcher run hourly" "55 * * * *" + "joey" "/home/joey/lib/sound/podcasts" + "xargs git-annex importfeed -c annex.genmetadata=true < feeds; mr --quiet update" + `requires` Apt.installed ["git-annex"] -- cgit v1.3-2-g0d8e From a788c957d2eddaa0af7e240be069f048c462df0b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 15:36:11 -0400 Subject: propellor spin --- config-joey.hs | 3 +-- src/Propellor/Property/SiteSpecific/JoeySites.hs | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index ec4e6aa9..e5ee45b4 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -178,7 +178,7 @@ hosts = -- (o) ` & JoeySites.obnamRepos ["wren", "pell", "kite"] & JoeySites.githubBackup & JoeySites.rsyncNetBackup hosts - & JoeySites.backupsBackedupTo hosts "usbackup.kitenet.net" "lib/backup/eubackup" + & JoeySites.backupsBackedupTo hosts "turtle.kitenet.net" "lib/backup/eubackup" & alias "podcatcher.kitenet.net" & JoeySites.podcatcher @@ -365,7 +365,6 @@ monsters = -- but do want to track their public keys etc. & ipv4 "67.223.19.96" & ipv6 "2001:4978:f:2d9::2" & alias "backup.kitenet.net" - & alias "usbackup.kitenet.net" & sshPubKey "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAokMXQiX/NZjA1UbhMdgAscnS5dsmy+Q7bWrQ6tsTZ/o+6N/T5cbjoBHOdpypXJI3y/PiJTDJaQtXIhLa8gFg/EvxMnMz/KG9skADW1361JmfCc4BxicQIO2IOOe6eilPr+YsnOwiHwL0vpUnuty39cppuMWVD25GzxXlS6KQsLCvXLzxLLuNnGC43UAM0q4UwQxDtAZEK1dH2o3HMWhgMP2qEQupc24dbhpO3ecxh2C9678a3oGDuDuNf7mLp3s7ptj5qF3onitpJ82U5o7VajaHoygMaSRFeWxP2c13eM57j3bLdLwxVXFhePcKXARu1iuFTLS5uUf3hN6MkQcOGw==" , host "wren.kitenet.net" & ipv4 "80.68.85.49" diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index fbb1492b..5c9ac941 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -362,10 +362,11 @@ rsyncNetBackup hosts = Cron.niceJob "rsync.net copied in daily" "30 5 * * *" `requires` Ssh.knownHost hosts "usw-s002.rsync.net" "joey" backupsBackedupTo :: [Host] -> HostName -> FilePath -> Property -backupsBackedupTo hosts desthost destdir = Cron.niceJob "backups copied to usbackup weekly" +backupsBackedupTo hosts desthost destdir = Cron.niceJob desc "1 1 * * 3" "joey" "/" cmd `requires` Ssh.knownHost hosts desthost "joey" where + desc = "backups copied to " ++ desthost ++ " weekly" cmd = "rsync -az --delete /home/joey/lib/backup " ++ desthost ++ ":" ++ destdir obnamRepos :: [String] -> Property -- cgit v1.3-2-g0d8e From 330c00efa4de9f927d5ce932bcbe6144f82dbcd9 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 15:53:12 -0400 Subject: propellor spin --- config-joey.hs | 3 +++ src/Propellor/Property/SiteSpecific/JoeySites.hs | 4 +--- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index e5ee45b4..9295119c 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -91,6 +91,7 @@ hosts = -- (o) ` & Ssh.hostKeys (Context "kitenet.net") & Obnam.backup "/" "33 1 * * *" [ "--repository=sftp://joey@eubackup.kitenet.net/~/lib/backup/kite.obnam" + , "--client-name=kitenet.net" , "--encrypt-with=" , "--exclude=/var/cache" , "--exclude=/var/tmp" @@ -134,6 +135,8 @@ hosts = -- (o) ` "downloads.kitenet.net" "840760dc-08f0-11e2-8c61-576b7e66acfd" [("turtle", "ssh://turtle.kitenet.net/~/lib/downloads/")] + `requires` Ssh.keyImported SshRsa "joey" (Context "downloads.kitenet.net") + `requires` Ssh.knownHost hosts "turtle.kitenet.net" "joey" & JoeySites.gitAnnexDistributor & alias "tmp.kitenet.net" diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 5c9ac941..db9be1c2 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -142,7 +142,7 @@ gitServer hosts = propertyList "git.kitenet.net setup" , Obnam.backup "/srv/git" "33 3 * * *" [ "--repository=sftp://2318@usw-s002.rsync.net/~/git.kitenet.net" , "--encrypt-with=1B169BE1" - , "--client-name=wren" + , "--client-name=wren" -- historical ] Obnam.OnlyClient `requires` Gpg.keyImported "1B169BE1" "root" `requires` Ssh.keyImported SshRsa "root" (Context "git.kitenet.net") @@ -206,8 +206,6 @@ annexWebSite hosts origin hn uuid remotes = propertyList (hn ++" website using g dir = "/srv/web/" ++ hn postupdatehook = dir ".git/hooks/post-update" setup = userScriptProperty "joey" setupscript - `requires` Ssh.keyImported SshRsa "joey" (Context hn) - `requires` Ssh.knownHost hosts "turtle.kitenet.net" "joey" setupscript = [ "cd " ++ shellEscape dir , "git config annex.uuid " ++ shellEscape uuid -- cgit v1.3-2-g0d8e From c8feea04e107195b5f75acd207901d18f9757dc4 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 15:54:32 -0400 Subject: propellor spin --- config-joey.hs | 4 ++-- src/Propellor/Property/SiteSpecific/JoeySites.hs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index 9295119c..14ceb109 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -131,7 +131,7 @@ hosts = -- (o) ` & JoeySites.gitServer hosts & alias "downloads.kitenet.net" - & JoeySites.annexWebSite hosts "/srv/git/downloads.git" + & JoeySites.annexWebSite "/srv/git/downloads.git" "downloads.kitenet.net" "840760dc-08f0-11e2-8c61-576b7e66acfd" [("turtle", "ssh://turtle.kitenet.net/~/lib/downloads/")] @@ -140,7 +140,7 @@ hosts = -- (o) ` & JoeySites.gitAnnexDistributor & alias "tmp.kitenet.net" - & JoeySites.annexWebSite hosts "/srv/git/joey/tmp.git" + & JoeySites.annexWebSite "/srv/git/joey/tmp.git" "tmp.kitenet.net" "26fd6e38-1226-11e2-a75f-ff007033bdba" [] diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index db9be1c2..14e3aa0e 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -191,8 +191,8 @@ gitServer hosts = propertyList "git.kitenet.net setup" type AnnexUUID = String -- | A website, with files coming from a git-annex repository. -annexWebSite :: [Host] -> Git.RepoUrl -> HostName -> AnnexUUID -> [(String, Git.RepoUrl)] -> Property -annexWebSite hosts origin hn uuid remotes = propertyList (hn ++" website using git-annex") +annexWebSite :: Git.RepoUrl -> HostName -> AnnexUUID -> [(String, Git.RepoUrl)] -> Property +annexWebSite origin hn uuid remotes = propertyList (hn ++" website using git-annex") [ Git.cloned "joey" origin dir Nothing `onChange` setup , postupdatehook `File.hasContent` -- cgit v1.3-2-g0d8e From b0fd7f0006546c856ab8d2d25e26dfbc8c030124 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 16:16:13 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 14e3aa0e..11702c69 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -381,4 +381,4 @@ podcatcher :: Property podcatcher = Cron.niceJob "podcatcher run hourly" "55 * * * *" "joey" "/home/joey/lib/sound/podcasts" "xargs git-annex importfeed -c annex.genmetadata=true < feeds; mr --quiet update" - `requires` Apt.installed ["git-annex"] + `requires` Apt.installed ["git-annex", "myrepos"] -- cgit v1.3-2-g0d8e From e31210248defec9ca3559c20b25f4b06d94ba4da Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 21:16:03 -0400 Subject: propellor spin --- config-joey.hs | 37 +--------- src/Propellor/Property/Postfix.hs | 9 +++ src/Propellor/Property/SiteSpecific/JoeySites.hs | 86 ++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 36 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index 7f55b953..2f56f999 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -101,17 +101,8 @@ hosts = -- (o) ` `requires` Gpg.keyImported "98147487" "root" `requires` Ssh.keyImported SshRsa "root" (Context "kite.kitenet.net") + & JoeySites.kiteMailServer - & Docker.configured - & Docker.garbageCollected `period` (Weekly (Just 1)) - - -- Mail server is in a docker container for stability. - & Docker.docked hosts "mail-server" - `requires` File.dirExists "/var/spool/postfix" - -- sstmp is used to relay mail on kite into the container's - -- mail server. - & Apt.installed ["ssmtp"] - , standardSystem "diatom.kitenet.net" Stable "amd64" [ "Important stuff that needs not too much memory or CPU." ] & ipv4 "107.170.31.195" @@ -250,32 +241,6 @@ hosts = -- (o) ` & Docker.volume "/var/www:/var/www" & Apt.serviceInstalledRunning "apache2" - -- Mail server (smtp, pop, imap) in a container. - -- Uses the host's /home, /var/mail and /var/spool/postfix directories, - -- which must exist on the host. - , standardContainer "mail-server" Stable "amd64" - & Docker.volume "/home" - & Docker.volume "/var/mail" - & Docker.volume "/var/spool/postfix" - & Docker.publish "25:25" -- smtp - & Docker.publish "110:110" -- pop3 - & Docker.publish "220:220" -- imap3 - & Docker.publish "465:465" -- smtps - & Docker.publish "993:993" -- imaps - & Docker.publish "995:995" -- pop3s - & Postfix.installed - & Apt.installed ["postgrey", "postfix-pcre"] - & Apt.installed ["spamass-milter", "spamassassin"] - & "/etc/default/spamassassin" `File.containsLines` - [ "ENABLED=1" - , "OPTIONS=\"--create-prefs --max-children 5 --helper-home-dir\"" - , "CRON=1" - , "NICE=\"--nicelevel 15\"" - ] - & Apt.installed ["maildrop"] - & Apt.serviceInstalledRunning "dovecot-imapd" - & Apt.serviceInstalledRunning "dovecot-pop3d" - -- My own openid provider. Uses php, so containerized for security -- and administrative sanity. , standardContainer "openid-provider" Stable "amd64" diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index ef96e086..04ff37a2 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -23,3 +23,12 @@ satellite = setup `requires` installed , ("postfix/destinations", "string", " ") , ("postfix/mailname", "string", hn) ] + +-- | Sets up a file by running a property (which the filename is passed +-- to). If the setup property makes a change, postmap will be run on the +-- file, and postfix will be reloaded. +mappedFile :: FilePath -> (FilePath -> Property) -> Property +mappedFile f setup = setup f + `onChange` cmdProperty postmap [postmap] + where + postmap = "postmap " ++ f diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 11702c69..713b2aab 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -14,6 +14,7 @@ import qualified Propellor.Property.Service as Service import qualified Propellor.Property.User as User import qualified Propellor.Property.Obnam as Obnam import qualified Propellor.Property.Apache as Apache +import qualified Propellor.Property.Postfix as Postfix import Utility.SafeCommand import Utility.FileMode import Utility.Path @@ -382,3 +383,88 @@ podcatcher = Cron.niceJob "podcatcher run hourly" "55 * * * *" "joey" "/home/joey/lib/sound/podcasts" "xargs git-annex importfeed -c annex.genmetadata=true < feeds; mr --quiet update" `requires` Apt.installed ["git-annex", "myrepos"] + +kiteMailServer :: Property +kiteMailServer = propertyList "kitenet.net mail server" + [ Postfix.installed + , Apt.installed ["postfix-pcre"] + , Apt.serviceInstalledRunning "postgrey" + , Apt.serviceInstalledRunning "spamassassin" + , "/etc/default/spamassassin" `File.containsLines` + [ "ENABLED=1" + , "OPTIONS=\"--create-prefs --max-children 5 --helper-home-dir\"" + , "CRON=1" + , "NICE=\"--nicelevel 15\"" + ] `onChange` Service.restarted "spamassassin" + , Apt.serviceInstalledRunning "spamass-miter" + , Apt.installed ["maildrop"] + , "/etc/aliases" `File.hasPrivContentExposed` ctx + `onChange` cmdProperty "newaliases" ["newaliases"] + , "/etc/ssl/certs/joeyca.pem" `File.hasPrivContentExposed` ctx + , "/etc/ssl/certs/postfix.pem" `File.hasPrivContentExposed` ctx + , "/etc/ssl/private/postfix.pem" `File.hasPrivContent` ctx + , "/etc/postfix/mydomain" `File.containsLines` + [ "/.*\\.kitenet\\.net/\tOK" + , "/mooix\\.net/\tOK" + , "/ikiwiki\\.info/\tOK" + , "/joeyh\\.name/\tOK" + ] + `onChange` Service.restarted "postfix" + , "/etc/postfix/obscure_client_relay.pcre" `File.containsLine` + "/^Received: from ([^.]+)\\.kitenet\\.net.*using TLS.*by kitenet\\.net \\(([^)]+)\\) with (E?SMTPS?A?) id ([A-F[:digit:]]+)(.*)/ IGNORE" + `onChange` Service.restarted "postfix" + , Postfix.mappedFile "/etc/postfix/virtual" $ + flip File.containsLines + [ "# *@joeyh.name to joey" + , "@joeyh.name\tjoey" + ] + , Postfix.mappedFile "/etc/postfix/relay_clientcerts" $ + flip File.hasPrivContentExposed ctx + , "/etc/postfix/main.cf" `File.containsLines` + [ "myhostname = kitenet.net" + , "mydomain = $myhostname" + , "append_dot_mydomain = no" + , "myorigin = kitenet.net" + , "mydestination = $myhostname, localhost.$mydomain, $mydomain, kite.$mydomain., localhost, regexp:$config_directory/mydomain" + , "mailbox_command = maildrop" + , "virtual_alias_maps = hash:/etc/postfix/virtual" + + , "# Allow clients with trusted certs to relay mail through." + , "relay_clientcerts = hash:/etc/postfix/relay_clientcerts" + , "smtpd_relay_restrictions = permit_mynetworks,permit_tls_clientcerts,permit_sasl_authenticated,reject_unauth_destination" + + , "# Filter out client relay lines from headers." + , "header_checks = pcre:$config_directory/obscure_client_relay.pcre" + + , "# Enable postgrey." + , "smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination,check_policy_service inet:127.0.0.1:10023" + + , "# Enable spamass-milter." + , "smtpd_milters = unix:/spamass/spamass.sock" + , "milter_connect_macros = j {daemon_name} v {if_name} _" + + , "# TLS setup -- server" + , "smtpd_tls_CAfile = /etc/ssl/certs/joeyca.pem" + , "smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem" + , "smtpd_tls_key_file = /etc/ssl/private/postfix.pem" + , "smtpd_tls_loglevel = 1" + , "smtpd_tls_received_header = yes" + , "smtpd_use_tls = yes" + , "smtpd_tls_ask_ccert = yes" + , "smtpd_tls_session_cache_database = sdbm:/etc/postfix/smtpd_scache" + + , "# TLS setup -- client" + , "smtp_tls_CAfile = /etc/ssl/certs/joeyca.pem" + , "smtp_tls_cert_file = /etc/ssl/certs/postfix.pem" + , "smtp_tls_key_file = /etc/ssl/private/postfix.pem" + , "smtp_tls_loglevel = 1" + , "smtp_use_tls = yes" + , "smtp_tls_session_cache_database = sdbm:/etc/postfix/smtp_scache" + ] + `onChange` Service.restarted "postfix" + , Apt.serviceInstalledRunning "dovecot-imapd" + , Apt.serviceInstalledRunning "dovecot-pop3d" + , Apt.serviceInstalledRunning "cron" + ] + where + ctx = Context "kitenet.net" -- cgit v1.3-2-g0d8e From e242c68de7762b3e13548bdd6547873aba511baa Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 21:35:43 -0400 Subject: propellor spin --- privdata/privdata.gpg | 1147 ++++++++++++---------- src/Propellor/Property/SiteSpecific/JoeySites.hs | 6 +- 2 files changed, 631 insertions(+), 522 deletions(-) (limited to 'src') diff --git a/privdata/privdata.gpg b/privdata/privdata.gpg index 39beeb57..5a524589 100644 --- a/privdata/privdata.gpg +++ b/privdata/privdata.gpg @@ -1,525 +1,630 @@ -----BEGIN PGP MESSAGE----- Version: GnuPG v1 -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 -=SVy6 +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 +EJzfO9tLf0vZmQHUbXDeVtTjK4oRbBF/40Yv9A/Da4uv3kEd7PMHK/i+2h4sPAhM +W1VIeFzAiovpwkJQ62SY1ky/hwseOk/EOd+JeGPSNl+fIRmFoNBM0LtM4CH+tIk4 +b1jP9o0GJyN5pRbpP7vvsQlzB+VQB3p0JK0ddssydgkdn9DEFslSvdeacE7EphkN +QyiQ54x2qLpcwnhcYUkOwwgAmock+qS28MWGxa0w1Ae9Izh5jNQhgKHiOqMajP9X +IMcIoAtyZSrRy95xdQPIgUhnz2D70APQBkpBBhbMNr0NAb7Y3HvfFLw/jpi+6We7 +UEs/xHAY7GY2kUdtUpg4BFfRfTISyrnM1hy9wBG7Mc8cFjiigykMOmypKWxA831D +N22lJsxPjx/tFYezvKkbSA7HCs7jqdKmLkOldsYWzxecKy2Xs0dUyi+Tv6h6nJOm +sLYy796lIrP2LQ7pSYU0MlbJ489HKy49rpfBQzko8SsW7FiQctwU7JoBfqODQpL0 +ZMfzW0FRjvzsDzAQxSsQsIm6oTHL/+C0VePdBs7qlUBCU+/XOuLGmk9xZ7fnQP7I +aYqZTsPRuQ8N5RU0G1YOPl3nyU4hR1oWtmAC4B4dz2Xt8QdEPTktPwgnyWEysTnm +SbmyAOioHS1OX4zkLzvIq6P2GkwZNiF0zvMfdHh6aXBu3kEMR062XlQt/8jnDeYk +6x38f5AXwwRZ9sJLgtW0zuGh1kMMxHpK2vwP3bEgrXwng812VQteNjX9Y1krsje4 +QkM/F2fJs+6psc8BjjbpGk+6D72Z5tUy+R7I4RqHbqU7SzrG8TpdxOLqjSvLneCv +3aWhrerT1+sWsRQwWTGxP3sDhsxLc+fzcjawGhAlyidtmEkP3694XADDlHute2Qf +J1ZgPy0ZNuk8z+fj+tTuN7Q3m7wUODXw1huAfWyXZwBtvFXUpjwGPrWXcKniyrQ6 +7xw6Y4mZjJ/0TZD9vrSopmgVad+tINQUKBGxcqjrJn+4F1K6tUrbFqzLdplOupT9 +OV5LS6k5megOprp/aQySMoIoEKy3CRmUpRTla/vQXRbrvXs603LjsvdBz1zPDSsL +978ZMogI7sTe8vTDpt7XhLO3WKDTLgdQ8BJS0TCL8HIPMBTKLL2CiMkoN8ae8RbI +tabbutJ1L53zLsHPdhabtFmB8v5Cr4hP08IbwmYFobNTnwg3boW8WtL8hwDr0JXe ++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 +=gxjK -----END PGP MESSAGE----- diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 713b2aab..eaed66b1 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -400,7 +400,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , Apt.installed ["maildrop"] , "/etc/aliases" `File.hasPrivContentExposed` ctx `onChange` cmdProperty "newaliases" ["newaliases"] - , "/etc/ssl/certs/joeyca.pem" `File.hasPrivContentExposed` ctx + , hasJoeyCAChain , "/etc/ssl/certs/postfix.pem" `File.hasPrivContentExposed` ctx , "/etc/ssl/private/postfix.pem" `File.hasPrivContent` ctx , "/etc/postfix/mydomain" `File.containsLines` @@ -468,3 +468,7 @@ kiteMailServer = propertyList "kitenet.net mail server" ] where ctx = Context "kitenet.net" + +hasJoeyCAChain :: Property +hasJoeyCAChain = "/etc/ssl/certs/joeyca.pem" `File.hasPrivContentExposed` + Context "joeyca.pem" -- cgit v1.3-2-g0d8e From cb7009e994af067f077c845035adb8f6ee9a9d0a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 21:47:15 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index eaed66b1..f9bbb50b 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -410,14 +410,17 @@ kiteMailServer = propertyList "kitenet.net mail server" , "/joeyh\\.name/\tOK" ] `onChange` Service.restarted "postfix" + `describe` "postfix mydomain file configured" , "/etc/postfix/obscure_client_relay.pcre" `File.containsLine` "/^Received: from ([^.]+)\\.kitenet\\.net.*using TLS.*by kitenet\\.net \\(([^)]+)\\) with (E?SMTPS?A?) id ([A-F[:digit:]]+)(.*)/ IGNORE" `onChange` Service.restarted "postfix" - , Postfix.mappedFile "/etc/postfix/virtual" $ - flip File.containsLines + `describe` "postfix obscure_client_relay file configured" + , Postfix.mappedFile "/etc/postfix/virtual" + (flip File.containsLines [ "# *@joeyh.name to joey" , "@joeyh.name\tjoey" ] + ) `describe` "postfix virtual file configured" , Postfix.mappedFile "/etc/postfix/relay_clientcerts" $ flip File.hasPrivContentExposed ctx , "/etc/postfix/main.cf" `File.containsLines` @@ -462,6 +465,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "smtp_tls_session_cache_database = sdbm:/etc/postfix/smtp_scache" ] `onChange` Service.restarted "postfix" + `describe` "postfix configured" , Apt.serviceInstalledRunning "dovecot-imapd" , Apt.serviceInstalledRunning "dovecot-pop3d" , Apt.serviceInstalledRunning "cron" -- cgit v1.3-2-g0d8e From 3e41d350f4e9105c75bfabd11e740329cfc808d1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 22:20:16 -0400 Subject: propellor spin --- src/Propellor/Property/Postfix.hs | 43 ++++++++++++++++++++++-- src/Propellor/Property/SiteSpecific/JoeySites.hs | 3 +- 2 files changed, 43 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index 04ff37a2..03b4367e 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -2,6 +2,10 @@ module Propellor.Property.Postfix where import Propellor import qualified Propellor.Property.Apt as Apt +import Propellor.Property.File + +import qualified Data.Map as M +import Data.List installed :: Property installed = Apt.serviceInstalledRunning "postfix" @@ -29,6 +33,41 @@ satellite = setup `requires` installed -- file, and postfix will be reloaded. mappedFile :: FilePath -> (FilePath -> Property) -> Property mappedFile f setup = setup f - `onChange` cmdProperty postmap [postmap] + `onChange` cmdProperty "postmap" [f] + +-- | Parses main.cf, and removes any initial configuration lines that are +-- overridden to other values later in the file. +-- +-- For example, to add some settings, removing any old settings: +-- +-- > mainCf `File.containsLines` +-- > [ "# I like bars." +-- > , "foo = bar" +-- > ] `onChange` dedupMainCf +-- +-- Note that multiline configurations that continue onto the next line +-- are not currently supported. +dedupMainCf :: Property +dedupMainCf = fileProperty "postfix main.cf dedupped" go mainCf where - postmap = "postmap " ++ f + go ls = + let parsed = map parse ls + in dedup [] (keycounts $ rights parsed) parsed + + parse l + | "#" `isPrefixOf` l = Left l + | "=" `isInfixOf` l = Right (separate (== '=') l) + | otherwise = Left l + fmt k v = k ++ "=" ++ v + + keycounts = M.fromListWith (+) . map (\(k, _v) -> (k, (1 :: Integer))) + + dedup c _ [] = reverse c + dedup c kc ((Left v):rest) = dedup (v:c) kc rest + dedup c kc ((Right (k, v)):rest) = case M.lookup k kc of + Just n | n > 1 -> dedup c (M.insert k (n - 1) kc) rest + _ -> dedup (fmt k v:c) kc rest + +-- | The main config file for postfix. +mainCf :: FilePath +mainCf = "/etc/postfix/main.cf" diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index f9bbb50b..c7acb9eb 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -423,7 +423,7 @@ kiteMailServer = propertyList "kitenet.net mail server" ) `describe` "postfix virtual file configured" , Postfix.mappedFile "/etc/postfix/relay_clientcerts" $ flip File.hasPrivContentExposed ctx - , "/etc/postfix/main.cf" `File.containsLines` + , Postfix.mainCf `File.containsLines` [ "myhostname = kitenet.net" , "mydomain = $myhostname" , "append_dot_mydomain = no" @@ -464,6 +464,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "smtp_use_tls = yes" , "smtp_tls_session_cache_database = sdbm:/etc/postfix/smtp_scache" ] + `onChange` Postfix.dedupMainCf `onChange` Service.restarted "postfix" `describe` "postfix configured" , Apt.serviceInstalledRunning "dovecot-imapd" -- cgit v1.3-2-g0d8e From f4ce2124ac91c13475193fbfe25fb6877cd3228b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 22:23:49 -0400 Subject: propellor spin --- src/Propellor/Property/Postfix.hs | 5 ++++- src/Propellor/Property/SiteSpecific/JoeySites.hs | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index 03b4367e..027ea4cf 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -6,6 +6,7 @@ import Propellor.Property.File import qualified Data.Map as M import Data.List +import Data.Char installed :: Property installed = Apt.serviceInstalledRunning "postfix" @@ -56,7 +57,9 @@ dedupMainCf = fileProperty "postfix main.cf dedupped" go mainCf parse l | "#" `isPrefixOf` l = Left l - | "=" `isInfixOf` l = Right (separate (== '=') l) + | "=" `isInfixOf` l = + let (k, v) = separate (== '=') l + in Right ((filter (not . isSpace) k), v) | otherwise = Left l fmt k v = k ++ "=" ++ v diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index c7acb9eb..4ecdd9f0 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -396,6 +396,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "CRON=1" , "NICE=\"--nicelevel 15\"" ] `onChange` Service.restarted "spamassassin" + `describe` "spamd enabled" , Apt.serviceInstalledRunning "spamass-miter" , Apt.installed ["maildrop"] , "/etc/aliases" `File.hasPrivContentExposed` ctx -- cgit v1.3-2-g0d8e From 91d148215aba848a0af7d7106a3303ecbbb844f1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 22:27:57 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 4ecdd9f0..a4d335e3 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -471,6 +471,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , Apt.serviceInstalledRunning "dovecot-imapd" , Apt.serviceInstalledRunning "dovecot-pop3d" , Apt.serviceInstalledRunning "cron" + , Apt.installed ["bsd-mailx"] ] where ctx = Context "kitenet.net" -- cgit v1.3-2-g0d8e From cfb758d655ec9e825cfd25c233c2c55589324236 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 22:35:59 -0400 Subject: better hasPrivContentExposed Avoid locking down and then lossening the file mode; just use the default/current mode from the beginning. --- src/Propellor/Property/File.hs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/File.hs b/src/Propellor/Property/File.hs index 0e738f25..07ac8c26 100644 --- a/src/Propellor/Property/File.hs +++ b/src/Propellor/Property/File.hs @@ -18,17 +18,23 @@ f `hasContent` newcontent = fileProperty ("replace " ++ f) -- The file's permissions are preserved if the file already existed. -- Otherwise, they're set to 600. hasPrivContent :: FilePath -> Context -> Property -hasPrivContent f context = withPrivData (PrivFile f) context $ \getcontent -> - property desc $ getcontent $ \privcontent -> - ensureProperty $ fileProperty' writeFileProtected desc - (\_oldcontent -> lines privcontent) f - where - desc = "privcontent " ++ f +hasPrivContent = hasPrivContent' writeFileProtected --- | Leaves the file world-readable. +-- | Leaves the file at its default or current mode, +-- allowing "private" data to be read. +-- +-- Use with caution! hasPrivContentExposed :: FilePath -> Context -> Property -hasPrivContentExposed f context = hasPrivContent f context `onChange` - mode f (combineModes (ownerWriteMode:readModes)) +hasPrivContentExposed = hasPrivContent' writeFile + +hasPrivContent' :: (String -> FilePath -> IO ()) -> FilePath -> Context -> Property +hasPrivContent' writer f context = + withPrivData (PrivFile f) context $ \getcontent -> + property desc $ getcontent $ \privcontent -> + ensureProperty $ fileProperty' writer desc + (\_oldcontent -> lines privcontent) f + where + desc = "privcontent " ++ f -- | Ensures that a line is present in a file, adding it to the end if not. containsLine :: FilePath -> Line -> Property -- cgit v1.3-2-g0d8e From c65e9adc7f2cbd80df3f58f188a8efa9bdf42b45 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 23:27:42 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index a4d335e3..e00c3191 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -465,7 +465,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "smtp_use_tls = yes" , "smtp_tls_session_cache_database = sdbm:/etc/postfix/smtp_scache" ] - `onChange` Postfix.dedupMainCf + -- `onChange` Postfix.dedupMainCf `onChange` Service.restarted "postfix" `describe` "postfix configured" , Apt.serviceInstalledRunning "dovecot-imapd" -- cgit v1.3-2-g0d8e From 55a638ad4c7605041ece96843a1d608d40c2984d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 23:32:29 -0400 Subject: Fix bug in File.containsLines that caused lines that were already in the file to sometimes be appended to the end. --- debian/changelog | 7 +++++++ src/Propellor/Property/File.hs | 6 ++---- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/debian/changelog b/debian/changelog index 54923662..5e5460e3 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +propellor (0.8.2) UNRELEASED; urgency=medium + + * Fix bug in File.containsLines that caused lines that were already in the + file to sometimes be appended to the end. + + -- Joey Hess Thu, 17 Jul 2014 23:32:01 -0400 + propellor (0.8.1) unstable; urgency=medium * Run apt-get update in initial bootstrap. diff --git a/src/Propellor/Property/File.hs b/src/Propellor/Property/File.hs index 07ac8c26..bc499e07 100644 --- a/src/Propellor/Property/File.hs +++ b/src/Propellor/Property/File.hs @@ -41,11 +41,9 @@ containsLine :: FilePath -> Line -> Property f `containsLine` l = f `containsLines` [l] containsLines :: FilePath -> [Line] -> Property -f `containsLines` l = fileProperty (f ++ " contains:" ++ show l) go f +f `containsLines` ls = fileProperty (f ++ " contains:" ++ show ls) go f where - go ls - | all (`elem` ls) l = ls - | otherwise = ls++l + go content = content ++ filter (`notElem` content) ls -- | Ensures that a line is not present in a file. -- Note that the file is ensured to exist, so if it doesn't, an empty diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index e00c3191..a4d335e3 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -465,7 +465,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "smtp_use_tls = yes" , "smtp_tls_session_cache_database = sdbm:/etc/postfix/smtp_scache" ] - -- `onChange` Postfix.dedupMainCf + `onChange` Postfix.dedupMainCf `onChange` Service.restarted "postfix" `describe` "postfix configured" , Apt.serviceInstalledRunning "dovecot-imapd" -- cgit v1.3-2-g0d8e From c27afcea4ee9a1d0cd86371c46472afff616db5d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 23:36:04 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index a4d335e3..e00c3191 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -465,7 +465,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "smtp_use_tls = yes" , "smtp_tls_session_cache_database = sdbm:/etc/postfix/smtp_scache" ] - `onChange` Postfix.dedupMainCf + -- `onChange` Postfix.dedupMainCf `onChange` Service.restarted "postfix" `describe` "postfix configured" , Apt.serviceInstalledRunning "dovecot-imapd" -- cgit v1.3-2-g0d8e From 93a2b92f6215eb4b3b5bd81a2417f0edddea598c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 23:41:17 -0400 Subject: propellor spin --- src/Propellor/Property/Postfix.hs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index 027ea4cf..1cfc64d3 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -49,12 +49,13 @@ mappedFile f setup = setup f -- Note that multiline configurations that continue onto the next line -- are not currently supported. dedupMainCf :: Property -dedupMainCf = fileProperty "postfix main.cf dedupped" go mainCf - where - go ls = - let parsed = map parse ls - in dedup [] (keycounts $ rights parsed) parsed - +dedupMainCf = fileProperty "postfix main.cf dedupped" dedupCf mainCf + +dedupCf :: [String] -> [String] +dedupCf ls = + let parsed = map parse ls + in dedup [] (keycounts $ rights parsed) parsed + where parse l | "#" `isPrefixOf` l = Left l | "=" `isInfixOf` l = -- cgit v1.3-2-g0d8e From a6a82a23a9e9e4e659180e8b77e5de594073c048 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 23:42:10 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index e00c3191..a4d335e3 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -465,7 +465,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "smtp_use_tls = yes" , "smtp_tls_session_cache_database = sdbm:/etc/postfix/smtp_scache" ] - -- `onChange` Postfix.dedupMainCf + `onChange` Postfix.dedupMainCf `onChange` Service.restarted "postfix" `describe` "postfix configured" , Apt.serviceInstalledRunning "dovecot-imapd" -- cgit v1.3-2-g0d8e From 8b90fc9a5217f92da0e3c10423f299f1df15ac5a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 23:43:33 -0400 Subject: propellor spin --- src/Propellor/Property/Postfix.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index 1cfc64d3..3b35eee6 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -62,7 +62,7 @@ dedupCf ls = let (k, v) = separate (== '=') l in Right ((filter (not . isSpace) k), v) | otherwise = Left l - fmt k v = k ++ "=" ++ v + fmt k v = k ++ " =" ++ v keycounts = M.fromListWith (+) . map (\(k, _v) -> (k, (1 :: Integer))) -- cgit v1.3-2-g0d8e From 863cdf470b91fb284405f4b96910f32727da1281 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 17 Jul 2014 23:51:11 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index a4d335e3..80287686 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -397,7 +397,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "NICE=\"--nicelevel 15\"" ] `onChange` Service.restarted "spamassassin" `describe` "spamd enabled" - , Apt.serviceInstalledRunning "spamass-miter" + , Apt.serviceInstalledRunning "spamass-milter" , Apt.installed ["maildrop"] , "/etc/aliases" `File.hasPrivContentExposed` ctx `onChange` cmdProperty "newaliases" ["newaliases"] -- cgit v1.3-2-g0d8e From 5590c1c75a4207ab5ad3d02a2073f974b0b27add Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 00:20:09 -0400 Subject: propellor spin --- config-joey.hs | 6 ++---- src/Propellor/Property/Hostname.hs | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index 94869ddf..6db3e81d 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -63,7 +63,6 @@ hosts = -- (o) ` [ "Main git-annex build box." ] & ipv4 "138.38.108.179" - & Hostname.sane & Apt.unattendedUpgrades & Postfix.satellite & Docker.configured @@ -85,7 +84,6 @@ hosts = -- (o) ` & Apt.installed ["linux-image-amd64"] & Linode.chainPVGrub 5 - & Hostname.sane & Apt.unattendedUpgrades & Apt.installed ["systemd"] & Ssh.hostKeys (Context "kitenet.net") @@ -110,7 +108,6 @@ hosts = -- (o) ` & ipv4 "107.170.31.195" & DigitalOcean.distroKernel - & Hostname.sane & Ssh.hostKeys (Context "diatom.kitenet.net") & Apt.unattendedUpgrades & Apt.serviceInstalledRunning "ntp" @@ -174,7 +171,6 @@ hosts = -- (o) ` & ipv4 "193.234.225.114" & Grub.chainPVGrub "hd0,0" "xen/xvda1" 30 - & Hostname.sane & Postfix.satellite & Apt.unattendedUpgrades & Ssh.hostKeys ctx @@ -286,6 +282,8 @@ type Motd = [String] standardSystem :: HostName -> DebianSuite -> Architecture -> Motd -> Host standardSystem hn suite arch motd = host hn & os (System (Debian suite) arch) + & Hostname.sane + & Hostname.searchDomain & File.hasContent "/etc/motd" ("":motd++[""]) & Apt.stdSourcesList `onChange` Apt.upgrade & Apt.cacheCleaned diff --git a/src/Propellor/Property/Hostname.hs b/src/Propellor/Property/Hostname.hs index 1cce4e60..c3821eb4 100644 --- a/src/Propellor/Property/Hostname.hs +++ b/src/Propellor/Property/Hostname.hs @@ -3,6 +3,8 @@ module Propellor.Property.Hostname where import Propellor import qualified Propellor.Property.File as File +import Data.List + -- | Ensures that the hostname is set using best practices. -- -- Configures /etc/hostname and the current hostname. @@ -37,3 +39,21 @@ setTo hn = combineProperties desc go addhostsline ip names ls = (ip ++ "\t" ++ (unwords names)) : filter (not . hasip ip) ls hasip ip l = headMaybe (words l) == Just ip + +-- | Makes /etc/resolv.conf contain search and domain lines for +-- the domain that the hostname is in. +searchDomain :: Property +searchDomain = property desc (ensureProperty . go =<< asks hostName) + where + desc = "resolv.conf search and domain configured" + go hn = + let (_basehost, domain) = separate (== '.') hn + in File.fileProperty desc (use domain) "/etc/resolv.conf" + use domain ls = filter wanted $ nub (ls ++ cfgs) + where + cfgs = ["domain " ++ domain, "search " ++ domain] + wanted l + | l `elem` cfgs = True + | "domain " `isPrefixOf` l = False + | "search " `isPrefixOf` l = False + | otherwise = True -- cgit v1.3-2-g0d8e From fddcf13973f46377ebf68b58eaa3cda66f8bdbc8 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 00:36:21 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 80287686..a42349d6 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -389,6 +389,7 @@ kiteMailServer = propertyList "kitenet.net mail server" [ Postfix.installed , Apt.installed ["postfix-pcre"] , Apt.serviceInstalledRunning "postgrey" + , Apt.serviceInstalledRunning "spamassassin" , "/etc/default/spamassassin" `File.containsLines` [ "ENABLED=1" @@ -397,13 +398,35 @@ kiteMailServer = propertyList "kitenet.net mail server" , "NICE=\"--nicelevel 15\"" ] `onChange` Service.restarted "spamassassin" `describe` "spamd enabled" + , Apt.serviceInstalledRunning "spamass-milter" + -- Add -m to prevent modifying messages Subject or body. + , "/etc/default/spamass-milter" `File.containsLine` + "OPTIONS=\"-m -u spamass-milter -i 127.0.0.1\"" + `onChange` Service.restarted "spamass-milter" + `describe` "spamass-milter configured" + , Apt.installed ["maildrop"] + , "/etc/maildroprc" `File.hasContent` + [ "# Global maildrop filter file (deployed with propellor" + , "DEFAULT=\"$HOME/Maildir\"" + , "MAILBOX=\"$DEFAULT/.\"" + , "# Filter spam to a spam folder, unless .keepspam exists" + , "if (/^X-Spam-Status: Yes/)" + , "{" + , " `test -e \"$HOME/.keepspam\"`" + , " if ( $RETURNCODE != 0 )" + , " to ${MAILBOX}spam" + , "}" + ] + `describe` "maildrop configured" + , "/etc/aliases" `File.hasPrivContentExposed` ctx `onChange` cmdProperty "newaliases" ["newaliases"] , hasJoeyCAChain , "/etc/ssl/certs/postfix.pem" `File.hasPrivContentExposed` ctx , "/etc/ssl/private/postfix.pem" `File.hasPrivContent` ctx + , "/etc/postfix/mydomain" `File.containsLines` [ "/.*\\.kitenet\\.net/\tOK" , "/mooix\\.net/\tOK" @@ -468,8 +491,10 @@ kiteMailServer = propertyList "kitenet.net mail server" `onChange` Postfix.dedupMainCf `onChange` Service.restarted "postfix" `describe` "postfix configured" + , Apt.serviceInstalledRunning "dovecot-imapd" , Apt.serviceInstalledRunning "dovecot-pop3d" + , Apt.serviceInstalledRunning "cron" , Apt.installed ["bsd-mailx"] ] -- cgit v1.3-2-g0d8e From 2812719e5466d2676db3fd5c4ac36c45bb873e89 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 01:03:05 -0400 Subject: propellor spin --- src/Propellor/Property/Postfix.hs | 9 +++++++++ src/Propellor/Property/SiteSpecific/JoeySites.hs | 18 ++++++++++-------- 2 files changed, 19 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index 3b35eee6..1711a7dd 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -3,6 +3,7 @@ module Propellor.Property.Postfix where import Propellor import qualified Propellor.Property.Apt as Apt import Propellor.Property.File +import qualified Propellor.Property.Service as Service import qualified Data.Map as M import Data.List @@ -11,6 +12,9 @@ import Data.Char installed :: Property installed = Apt.serviceInstalledRunning "postfix" +restarted :: Property +restarted = Service.restarted "postfix" + -- | Configures postfix as a satellite system, which -- relats all mail through a relay host, which defaults to smtp.domain. -- @@ -36,6 +40,11 @@ mappedFile :: FilePath -> (FilePath -> Property) -> Property mappedFile f setup = setup f `onChange` cmdProperty "postmap" [f] +-- | Run newaliases command, which should be done after changing +-- /etc/aliases. +newaliases :: Property +newaliases = trivial $ cmdProperty "newaliases" [] + -- | Parses main.cf, and removes any initial configuration lines that are -- overridden to other values later in the file. -- diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index a42349d6..0838af47 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -392,12 +392,15 @@ kiteMailServer = propertyList "kitenet.net mail server" , Apt.serviceInstalledRunning "spamassassin" , "/etc/default/spamassassin" `File.containsLines` - [ "ENABLED=1" + [ "# Propellor deployed" + , "ENABLED=1" + , "CRON=1" , "OPTIONS=\"--create-prefs --max-children 5 --helper-home-dir\"" , "CRON=1" , "NICE=\"--nicelevel 15\"" ] `onChange` Service.restarted "spamassassin" `describe` "spamd enabled" + `requires` Apt.serviceInstalledRunning "cron" , Apt.serviceInstalledRunning "spamass-milter" -- Add -m to prevent modifying messages Subject or body. @@ -408,7 +411,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , Apt.installed ["maildrop"] , "/etc/maildroprc" `File.hasContent` - [ "# Global maildrop filter file (deployed with propellor" + [ "# Global maildrop filter file (deployed with propellor)" , "DEFAULT=\"$HOME/Maildir\"" , "MAILBOX=\"$DEFAULT/.\"" , "# Filter spam to a spam folder, unless .keepspam exists" @@ -422,22 +425,21 @@ kiteMailServer = propertyList "kitenet.net mail server" `describe` "maildrop configured" , "/etc/aliases" `File.hasPrivContentExposed` ctx - `onChange` cmdProperty "newaliases" ["newaliases"] + `onChange` Postfix.newaliases , hasJoeyCAChain , "/etc/ssl/certs/postfix.pem" `File.hasPrivContentExposed` ctx , "/etc/ssl/private/postfix.pem" `File.hasPrivContent` ctx , "/etc/postfix/mydomain" `File.containsLines` [ "/.*\\.kitenet\\.net/\tOK" - , "/mooix\\.net/\tOK" , "/ikiwiki\\.info/\tOK" , "/joeyh\\.name/\tOK" ] - `onChange` Service.restarted "postfix" + `onChange` Postfix.restarted `describe` "postfix mydomain file configured" , "/etc/postfix/obscure_client_relay.pcre" `File.containsLine` "/^Received: from ([^.]+)\\.kitenet\\.net.*using TLS.*by kitenet\\.net \\(([^)]+)\\) with (E?SMTPS?A?) id ([A-F[:digit:]]+)(.*)/ IGNORE" - `onChange` Service.restarted "postfix" + `onChange` Postfix.restarted `describe` "postfix obscure_client_relay file configured" , Postfix.mappedFile "/etc/postfix/virtual" (flip File.containsLines @@ -445,6 +447,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "@joeyh.name\tjoey" ] ) `describe` "postfix virtual file configured" + `onChange` Postfix.restarted , Postfix.mappedFile "/etc/postfix/relay_clientcerts" $ flip File.hasPrivContentExposed ctx , Postfix.mainCf `File.containsLines` @@ -489,13 +492,12 @@ kiteMailServer = propertyList "kitenet.net mail server" , "smtp_tls_session_cache_database = sdbm:/etc/postfix/smtp_scache" ] `onChange` Postfix.dedupMainCf - `onChange` Service.restarted "postfix" + `onChange` Postfix.restarted `describe` "postfix configured" , Apt.serviceInstalledRunning "dovecot-imapd" , Apt.serviceInstalledRunning "dovecot-pop3d" - , Apt.serviceInstalledRunning "cron" , Apt.installed ["bsd-mailx"] ] where -- cgit v1.3-2-g0d8e From 6957f28945bc4360882c8337f91d471de8fbadee Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 02:08:13 -0400 Subject: propellor spin --- config-joey.hs | 20 ++++++++++++++------ src/Propellor/Property/Postfix.hs | 3 +++ src/Propellor/Property/SiteSpecific/JoeySites.hs | 8 ++++---- 3 files changed, 21 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index 6db3e81d..b95a3278 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -75,7 +75,10 @@ hosts = -- (o) ` & Docker.garbageCollected `period` Daily & Apt.buildDep ["git-annex"] `period` Daily - , standardSystem "kite.kitenet.net" Unstable "amd64" + -- This is not a complete description of kite, since it's a + -- multiuser system with eg, user passwords that are not deployed + -- with propellor. + , standardSystemUnhardened "kite.kitenet.net" Unstable "amd64" [ "Welcome to the new kitenet.net server!" , "This is still under construction and not yet live.." ] @@ -102,6 +105,8 @@ hosts = -- (o) ` & JoeySites.kiteMailServer & Apt.installed ["mutt", "alpine", "git-annex", "myrepos"] + -- Since password authentication is allowed: + & Apt.serviceInstalledRunning "fail2ban" , standardSystem "diatom.kitenet.net" Stable "amd64" [ "Important stuff that needs not too much memory or CPU." ] @@ -280,7 +285,14 @@ type Motd = [String] -- This is my standard system setup. standardSystem :: HostName -> DebianSuite -> Architecture -> Motd -> Host -standardSystem hn suite arch motd = host hn +standardSystem hn suite arch motd = standardSystemUnhardened hn suite arch motd + -- Harden the system, but only once root's authorized_keys + -- is safely in place. + & check (Ssh.hasAuthorizedKeys "root") + (Ssh.passwordAuthentication False) + +standardSystemUnhardened :: HostName -> DebianSuite -> Architecture -> Motd -> Host +standardSystemUnhardened hn suite arch motd = host hn & os (System (Debian suite) arch) & Hostname.sane & Hostname.searchDomain @@ -291,10 +303,6 @@ standardSystem hn suite arch motd = host hn & Apt.installed ["ssh"] & GitHome.installedFor "root" & User.hasSomePassword "root" (Context hn) - -- Harden the system, but only once root's authorized_keys - -- is safely in place. - & check (Ssh.hasAuthorizedKeys "root") - (Ssh.passwordAuthentication False) & User.accountFor "joey" & User.hasSomePassword "joey" (Context hn) & Sudo.enabledFor "joey" diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index 1711a7dd..fbe39299 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -15,6 +15,9 @@ installed = Apt.serviceInstalledRunning "postfix" restarted :: Property restarted = Service.restarted "postfix" +reloaded :: Property +reloaded = Service.reloaded "postfix" + -- | Configures postfix as a satellite system, which -- relats all mail through a relay host, which defaults to smtp.domain. -- diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 0838af47..a6be2411 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -435,11 +435,11 @@ kiteMailServer = propertyList "kitenet.net mail server" , "/ikiwiki\\.info/\tOK" , "/joeyh\\.name/\tOK" ] - `onChange` Postfix.restarted + `onChange` Postfix.reloaded `describe` "postfix mydomain file configured" , "/etc/postfix/obscure_client_relay.pcre" `File.containsLine` "/^Received: from ([^.]+)\\.kitenet\\.net.*using TLS.*by kitenet\\.net \\(([^)]+)\\) with (E?SMTPS?A?) id ([A-F[:digit:]]+)(.*)/ IGNORE" - `onChange` Postfix.restarted + `onChange` Postfix.reloaded `describe` "postfix obscure_client_relay file configured" , Postfix.mappedFile "/etc/postfix/virtual" (flip File.containsLines @@ -447,7 +447,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "@joeyh.name\tjoey" ] ) `describe` "postfix virtual file configured" - `onChange` Postfix.restarted + `onChange` Postfix.reloaded , Postfix.mappedFile "/etc/postfix/relay_clientcerts" $ flip File.hasPrivContentExposed ctx , Postfix.mainCf `File.containsLines` @@ -492,7 +492,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "smtp_tls_session_cache_database = sdbm:/etc/postfix/smtp_scache" ] `onChange` Postfix.dedupMainCf - `onChange` Postfix.restarted + `onChange` Postfix.reloaded `describe` "postfix configured" , Apt.serviceInstalledRunning "dovecot-imapd" -- cgit v1.3-2-g0d8e From f93b2f5e52ee35a611f036c57f6247155a27b2c6 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 02:27:15 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index a6be2411..403554fb 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -409,6 +409,8 @@ kiteMailServer = propertyList "kitenet.net mail server" `onChange` Service.restarted "spamass-milter" `describe` "spamass-milter configured" + , Apt.serviceInstalledRunning "clamav-milter" + , Apt.installed ["maildrop"] , "/etc/maildroprc" `File.hasContent` [ "# Global maildrop filter file (deployed with propellor)" -- cgit v1.3-2-g0d8e From 9a31b95e7d530717f2eef28b5c5f4377ad73d390 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 02:35:32 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 403554fb..f5447c2a 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -409,7 +409,8 @@ kiteMailServer = propertyList "kitenet.net mail server" `onChange` Service.restarted "spamass-milter" `describe` "spamass-milter configured" - , Apt.serviceInstalledRunning "clamav-milter" + , Apt.serviceInstalledRunning "clamav-freshclam" + , Apt.serviceInstalledRunning "amavisd-milter" , Apt.installed ["maildrop"] , "/etc/maildroprc" `File.hasContent` -- cgit v1.3-2-g0d8e From 8aabde7a3a4eef37a9d74a0fc75f4e244912ae01 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 02:51:47 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index f5447c2a..a1a5ca6d 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -409,8 +409,16 @@ kiteMailServer = propertyList "kitenet.net mail server" `onChange` Service.restarted "spamass-milter" `describe` "spamass-milter configured" - , Apt.serviceInstalledRunning "clamav-freshclam" , Apt.serviceInstalledRunning "amavisd-milter" + , "/etc/default/amavisd-milter" `File.containsLines` + [ "# Propellor deployed" + , "MILTERSOCKET=/var/spool/postfix/amavis/amavis.sock" + , "MILTERSOCKETOWNER=\"postfix:postfix\"" + , "MILTERSOCKETMODE=\"0660\"" + ] + `onChange` Service.restarted "amavisd-milter" + `describe` "amavisd-milter configured for postfix" + , Apt.serviceInstalledRunning "clamav-freshclam" , Apt.installed ["maildrop"] , "/etc/maildroprc" `File.hasContent` @@ -472,8 +480,8 @@ kiteMailServer = propertyList "kitenet.net mail server" , "# Enable postgrey." , "smtpd_recipient_restrictions = permit_mynetworks,reject_unauth_destination,check_policy_service inet:127.0.0.1:10023" - , "# Enable spamass-milter." - , "smtpd_milters = unix:/spamass/spamass.sock" + , "# Enable spamass-milter and amavis-milter." + , "smtpd_milters = unix:/spamass/spamass.sock unix:amavis/amavis.sock" , "milter_connect_macros = j {daemon_name} v {if_name} _" , "# TLS setup -- server" -- cgit v1.3-2-g0d8e From 00b7323d4e7d554a308eada9d20b2e836d74d809 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 12:22:50 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index a1a5ca6d..d1f22fc1 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -351,7 +351,7 @@ githubBackup = propertyList "github-backup box" "/home/joey/lib/backup" $ intercalate "&" [ "mkdir -p github" , "cd github" - , "$HOME/.github-keys && github-backup joeyh" + , ". $HOME/.github-keys && github-backup joeyh" ] ] -- cgit v1.3-2-g0d8e From 6e490dff6e82be1d0d77117bc2aa8cafb15a949e Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 12:35:00 -0400 Subject: propellor spin --- src/Propellor/Property/Cron.hs | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/Cron.hs b/src/Propellor/Property/Cron.hs index d7138e3b..627599e6 100644 --- a/src/Propellor/Property/Cron.hs +++ b/src/Propellor/Property/Cron.hs @@ -4,6 +4,7 @@ import Propellor import qualified Propellor.Property.File as File import qualified Propellor.Property.Apt as Apt import Utility.SafeCommand +import Utility.FileMode import Data.Char @@ -19,22 +20,33 @@ type CronTimes = String -- -- The cron job's output will only be emailed if it exits nonzero. job :: Desc -> CronTimes -> UserName -> FilePath -> String -> Property -job desc times user cddir command = cronjobfile `File.hasContent` - [ "# Generated by propellor" - , "" - , "SHELL=/bin/sh" - , "PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" - , "" - , times ++ "\t" ++ user ++ "\t" - ++ "chronic flock -n " ++ shellEscape cronjobfile - ++ " sh -c " ++ shellEscape cmdline +job desc times user cddir command = combineProperties ("cronned " ++ desc) + [ cronjobfile `File.hasContent` + [ "# Generated by propellor" + , "" + , "SHELL=/bin/sh" + , "PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" + , "" + , times ++ "\t" ++ user ++ "\t" ++ shellEscape scriptfile + ] + -- Use a separate script because it makes the cron job name + -- prettier in emails, and also allows running the job manually. + , scriptfile `File.hasContent` + [ "#!/bin/sh" + , "# Generated by propellor" + , "set -e" + , "chronic flock -n " ++ shellEscape cronjobfile + ++ " sh -c " ++ shellEscape cmdline + ] + , scriptfile `File.mode` combineModes (readModes ++ executeModes) ] `requires` Apt.serviceInstalledRunning "cron" `requires` Apt.installed ["util-linux", "moreutils"] - `describe` ("cronned " ++ desc) where cmdline = "cd " ++ cddir ++ " && ( " ++ command ++ " )" - cronjobfile = "/etc/cron.d/" ++ map sanitize desc + cronjobfile = "/etc/cron.d/" ++ name + scriptfile = "/usr/local/bin/" ++ name ++ "_cronjob" + name = map sanitize desc sanitize c | isAlphaNum c = c | otherwise = '_' -- cgit v1.3-2-g0d8e From ad80a1600df71eb23c0e6948b179637dc3f74e24 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 12:39:45 -0400 Subject: propellor spin --- src/Propellor/Property/Cron.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/Cron.hs b/src/Propellor/Property/Cron.hs index 627599e6..d55c3dbb 100644 --- a/src/Propellor/Property/Cron.hs +++ b/src/Propellor/Property/Cron.hs @@ -27,7 +27,7 @@ job desc times user cddir command = combineProperties ("cronned " ++ desc) , "SHELL=/bin/sh" , "PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" , "" - , times ++ "\t" ++ user ++ "\t" ++ shellEscape scriptfile + , times ++ "\t" ++ user ++ "\tchronic " ++ shellEscape scriptfile ] -- Use a separate script because it makes the cron job name -- prettier in emails, and also allows running the job manually. @@ -35,7 +35,7 @@ job desc times user cddir command = combineProperties ("cronned " ++ desc) [ "#!/bin/sh" , "# Generated by propellor" , "set -e" - , "chronic flock -n " ++ shellEscape cronjobfile + , "flock -n " ++ shellEscape cronjobfile ++ " sh -c " ++ shellEscape cmdline ] , scriptfile `File.mode` combineModes (readModes ++ executeModes) -- cgit v1.3-2-g0d8e From 1143ca7c5c673094ec2ab11d61d75a8928da6f2b Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 12:48:08 -0400 Subject: propellor spin --- config-joey.hs | 2 ++ src/Propellor/Property/Hostname.hs | 4 ++++ 2 files changed, 6 insertions(+) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index b95a3278..c3fb177f 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -102,7 +102,9 @@ hosts = -- (o) ` `requires` Gpg.keyImported "98147487" "root" `requires` Ssh.keyImported SshRsa "root" (Context "kite.kitenet.net") + & JoeySites.kiteMailServer + -- & alias "smtp.kitenet.net" -- not yet live! & Apt.installed ["mutt", "alpine", "git-annex", "myrepos"] -- Since password authentication is allowed: diff --git a/src/Propellor/Property/Hostname.hs b/src/Propellor/Property/Hostname.hs index c3821eb4..c489e2fb 100644 --- a/src/Propellor/Property/Hostname.hs +++ b/src/Propellor/Property/Hostname.hs @@ -9,6 +9,8 @@ import Data.List -- -- Configures /etc/hostname and the current hostname. -- +-- Configures /etc/mailname with the domain part of the hostname. +-- -- /etc/hosts is also configured, with an entry for 127.0.1.1, which is -- standard at least on Debian to set the FDQN. -- @@ -31,6 +33,8 @@ setTo hn = combineProperties desc go else Just $ trivial $ hostsline "127.0.1.1" [hn, basehost] , Just $ trivial $ hostsline "127.0.0.1" ["localhost"] , Just $ trivial $ cmdProperty "hostname" [basehost] + , Just $ "/etc/mailname" `File.hasContent` + [if null domain then hn else domain] ] hostsline ip names = File.fileProperty desc -- cgit v1.3-2-g0d8e From 614a6a13acd3e3a7b83dcae86dcf40eb76b824dc Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 13:03:13 -0400 Subject: propellor spin --- src/Propellor/Property/Postfix.hs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index fbe39299..1a4a313a 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -19,22 +19,31 @@ reloaded :: Property reloaded = Service.reloaded "postfix" -- | Configures postfix as a satellite system, which --- relats all mail through a relay host, which defaults to smtp.domain. +-- relays all mail through a relay host, which defaults to smtp.domain. -- -- The smarthost may refuse to relay mail on to other domains, without -- futher coniguration/keys. But this should be enough to get cron job -- mail flowing to a place where it will be seen. satellite :: Property -satellite = setup `requires` installed +satellite = check norelayhost setup + `requires` installed where setup = trivial $ property "postfix satellite system" $ do hn <- asks hostName + let (_, domain) = separate (== '.') hn ensureProperty $ Apt.reConfigure "postfix" [ ("postfix/main_mailer_type", "select", "Satellite system") , ("postfix/root_address", "string", "root") , ("postfix/destinations", "string", " ") , ("postfix/mailname", "string", hn) + , ("postfix/relayhost", "string", "smtp." ++ domain) ] + norelayhost = not . any relayhostset . lines + <$> readProcess "postconf" [] + relayhostset l + | l == "relayhost =" = False + | "relayhost =" `isPrefixOf` l = True + | otherwise = False -- | Sets up a file by running a property (which the filename is passed -- to). If the setup property makes a change, postmap will be run on the -- cgit v1.3-2-g0d8e From 4d38e8bfd65e935819b6c0ba07d746232de9eb08 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 13:09:55 -0400 Subject: propellor spin --- src/Propellor/Property/Postfix.hs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index 1a4a313a..52c329bd 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -31,12 +31,16 @@ satellite = check norelayhost setup setup = trivial $ property "postfix satellite system" $ do hn <- asks hostName let (_, domain) = separate (== '.') hn - ensureProperty $ Apt.reConfigure "postfix" - [ ("postfix/main_mailer_type", "select", "Satellite system") - , ("postfix/root_address", "string", "root") - , ("postfix/destinations", "string", " ") - , ("postfix/mailname", "string", hn) - , ("postfix/relayhost", "string", "smtp." ++ domain) + ensureProperties + [ Apt.reConfigure "postfix" + [ ("postfix/main_mailer_type", "select", "Satellite system") + , ("postfix/root_address", "string", "root") + , ("postfix/destinations", "string", " ") + , ("postfix/mailname", "string", hn) + ] + , mainCf `containsLine` ("relayhost = " ++ domain) + `onChange` dedupMainCf + `onChange` reloaded ] norelayhost = not . any relayhostset . lines <$> readProcess "postconf" [] -- cgit v1.3-2-g0d8e From 0d188bf5f6a1ad519a660e06d7e74c6cf683ff32 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 14:33:30 -0400 Subject: propellor spin --- src/Propellor/Property/Postfix.hs | 33 +++++++++++++++++++----- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 2 files changed, 27 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index 52c329bd..96bc1bc1 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -38,14 +38,14 @@ satellite = check norelayhost setup , ("postfix/destinations", "string", " ") , ("postfix/mailname", "string", hn) ] - , mainCf `containsLine` ("relayhost = " ++ domain) - `onChange` dedupMainCf + , mainCf ("relayhost", domain) `onChange` reloaded ] norelayhost = not . any relayhostset . lines <$> readProcess "postconf" [] relayhostset l | l == "relayhost =" = False + | l == "relayhost = " = False | "relayhost =" `isPrefixOf` l = True | otherwise = False @@ -61,6 +61,29 @@ mappedFile f setup = setup f newaliases :: Property newaliases = trivial $ cmdProperty "newaliases" [] +-- | The main config file for postfix. +mainCfFile :: FilePath +mainCfFile = "/etc/postfix/main.cf" + +-- | Sets a main.cf name=value pair. Does not reload postfix immediately. +mainCf :: (String, String) -> Property +mainCf (name, value) = check notset set + `describe` ("postfix main.cf " ++ setting) + where + setting = name ++ "=" ++ value + notset = (/= Just value) <$> getMainCf name + set = cmdProperty "postconf" ["-e", setting] + +-- | Gets a man.cf setting. +getMainCf :: String -> IO (Maybe String) +getMainCf name = parse . lines <$> readProcess "postconf" [name] + where + parse (l:_) = Just $ + case separate (== '=') l of + (_, (' ':v)) -> v + (_, v) -> v + parse [] = Nothing + -- | Parses main.cf, and removes any initial configuration lines that are -- overridden to other values later in the file. -- @@ -74,7 +97,7 @@ newaliases = trivial $ cmdProperty "newaliases" [] -- Note that multiline configurations that continue onto the next line -- are not currently supported. dedupMainCf :: Property -dedupMainCf = fileProperty "postfix main.cf dedupped" dedupCf mainCf +dedupMainCf = fileProperty "postfix main.cf dedupped" dedupCf mainCfFile dedupCf :: [String] -> [String] dedupCf ls = @@ -96,7 +119,3 @@ dedupCf ls = dedup c kc ((Right (k, v)):rest) = case M.lookup k kc of Just n | n > 1 -> dedup c (M.insert k (n - 1) kc) rest _ -> dedup (fmt k v:c) kc rest - --- | The main config file for postfix. -mainCf :: FilePath -mainCf = "/etc/postfix/main.cf" diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index d1f22fc1..14cae614 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -461,7 +461,7 @@ kiteMailServer = propertyList "kitenet.net mail server" `onChange` Postfix.reloaded , Postfix.mappedFile "/etc/postfix/relay_clientcerts" $ flip File.hasPrivContentExposed ctx - , Postfix.mainCf `File.containsLines` + , Postfix.mainCfFile `File.containsLines` [ "myhostname = kitenet.net" , "mydomain = $myhostname" , "append_dot_mydomain = no" -- cgit v1.3-2-g0d8e From 90682a79844078b721f0e071598103ccadb44622 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 14:36:51 -0400 Subject: propellor spin --- src/Propellor/Property/Postfix.hs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index 96bc1bc1..a9815226 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -25,7 +25,7 @@ reloaded = Service.reloaded "postfix" -- futher coniguration/keys. But this should be enough to get cron job -- mail flowing to a place where it will be seen. satellite :: Property -satellite = check norelayhost setup +satellite = check (not <$> mainCfIsSet "relayhost") setup `requires` installed where setup = trivial $ property "postfix satellite system" $ do @@ -41,13 +41,6 @@ satellite = check norelayhost setup , mainCf ("relayhost", domain) `onChange` reloaded ] - norelayhost = not . any relayhostset . lines - <$> readProcess "postconf" [] - relayhostset l - | l == "relayhost =" = False - | l == "relayhost = " = False - | "relayhost =" `isPrefixOf` l = True - | otherwise = False -- | Sets up a file by running a property (which the filename is passed -- to). If the setup property makes a change, postmap will be run on the @@ -84,6 +77,13 @@ getMainCf name = parse . lines <$> readProcess "postconf" [name] (_, v) -> v parse [] = Nothing +-- | Checks if a main.cf field is set. A field that is set to "" +-- is considered not set. +mainCfIsSet :: String -> IO Bool +mainCfIsSet name = do + v <- getMainCf name + return $ v == Nothing || v == Just "" + -- | Parses main.cf, and removes any initial configuration lines that are -- overridden to other values later in the file. -- -- cgit v1.3-2-g0d8e From ef472be6a6e1270245ec50554d6d59c31e1e733d Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 14:42:46 -0400 Subject: propellor spin --- src/Propellor/Property/Postfix.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/Postfix.hs b/src/Propellor/Property/Postfix.hs index a9815226..b3d12727 100644 --- a/src/Propellor/Property/Postfix.hs +++ b/src/Propellor/Property/Postfix.hs @@ -82,7 +82,7 @@ getMainCf name = parse . lines <$> readProcess "postconf" [name] mainCfIsSet :: String -> IO Bool mainCfIsSet name = do v <- getMainCf name - return $ v == Nothing || v == Just "" + return $ v /= Nothing && v /= Just "" -- | Parses main.cf, and removes any initial configuration lines that are -- overridden to other values later in the file. -- cgit v1.3-2-g0d8e From fd7d6907b82b0505584ff174ecee98d7e3d68493 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 15:58:05 -0400 Subject: propellor spin --- config-joey.hs | 15 +++++++------- src/Propellor/Property/SiteSpecific/JoeySites.hs | 25 +++++++++++++++++++++++- 2 files changed, 32 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index c3fb177f..a2c2554e 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -105,8 +105,9 @@ hosts = -- (o) ` & JoeySites.kiteMailServer -- & alias "smtp.kitenet.net" -- not yet live! + -- & alias "imap.kitenet.net" -- not yet live! - & Apt.installed ["mutt", "alpine", "git-annex", "myrepos"] + & Apt.installed ["git-annex", "myrepos"] -- Since password authentication is allowed: & Apt.serviceInstalledRunning "fail2ban" @@ -400,14 +401,14 @@ monsters = -- but do want to track their public keys etc. {- Remaining services on kite: - - mail - - postfix - - postgrey + - /postfix + - /postgrey - mailman - - spamassassin + - /spamassassin - sqwebmail - - courier - - imap - - tls + - /courier + - /imap + - /pop - apache - some static websites - bitlbee diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 14cae614..52706d7e 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -508,11 +508,34 @@ kiteMailServer = propertyList "kitenet.net mail server" , Apt.serviceInstalledRunning "dovecot-imapd" , Apt.serviceInstalledRunning "dovecot-pop3d" + , "/etc/dovecot/conf.d/10-mail.conf" `File.containsLine` + "mail_location = maildir:~/Maildir" + `onChange` Service.reloaded "dovecot" + `describe` "dovecot configured" - , Apt.installed ["bsd-mailx"] + , Apt.installed ["mutt", "bsd-mailx", "alpine"] + + , pinescript `File.hasContent` + [ "#!/bin/sh" + , "# deployed with propellor" + , "set -e" + , "pass=$HOME/.pine-password" + , "if [ ! -e $pass ]; then" + , "\ttouch $pass" + , "fi" + , "chmod 600 pass" + , "exec alpine -passfile $pass \"$@\"" + ] + `onChange` (pinescript `File.mode` combineModes (readModes ++ executeModes)) + `describe` "pine wrapper script" + , "/etc/pine.conf" `File.containsLines` + [ "inbox-path={localhost/novalidate-cert}inbox" + ] + `describe` "pine configured to use local imap server" ] where ctx = Context "kitenet.net" + pinescript = "/usr/local/bin/pine" hasJoeyCAChain :: Property hasJoeyCAChain = "/etc/ssl/certs/joeyca.pem" `File.hasPrivContentExposed` -- cgit v1.3-2-g0d8e From d5abbeb116a749c77d9d594097bd83c027374384 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 15:59:17 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 52706d7e..1b70807a 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -523,7 +523,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , "if [ ! -e $pass ]; then" , "\ttouch $pass" , "fi" - , "chmod 600 pass" + , "chmod 600 $pass" , "exec alpine -passfile $pass \"$@\"" ] `onChange` (pinescript `File.mode` combineModes (readModes ++ executeModes)) -- cgit v1.3-2-g0d8e From 93730d530a722e951e51c675c1aed9fdd3c75a87 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 16:40:09 -0400 Subject: propellor spin --- config-joey.hs | 16 ++++++++++------ src/Propellor/Property/SiteSpecific/JoeySites.hs | 13 +++++++++++-- 2 files changed, 21 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index a2c2554e..6b02ed49 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -90,6 +90,8 @@ hosts = -- (o) ` & Apt.unattendedUpgrades & Apt.installed ["systemd"] & Ssh.hostKeys (Context "kitenet.net") + -- Since ssh password authentication is allowed: + & Apt.serviceInstalledRunning "fail2ban" & Obnam.backup "/" "33 1 * * *" [ "--repository=sftp://joey@eubackup.kitenet.net/~/lib/backup/kite.obnam" , "--client-name=kitenet.net" @@ -107,9 +109,12 @@ hosts = -- (o) ` -- & alias "smtp.kitenet.net" -- not yet live! -- & alias "imap.kitenet.net" -- not yet live! - & Apt.installed ["git-annex", "myrepos"] - -- Since password authentication is allowed: - & Apt.serviceInstalledRunning "fail2ban" + & Apt.installed + ["git-annex", "myrepos" + , "build-essential", "make" + -- Some users have zsh as their login shell. + , "zsh" + ] , standardSystem "diatom.kitenet.net" Stable "amd64" [ "Important stuff that needs not too much memory or CPU." ] @@ -406,9 +411,8 @@ monsters = -- but do want to track their public keys etc. - mailman - /spamassassin - sqwebmail - - /courier - - /imap - - /pop + - /imap server + - /pop server - apache - some static websites - bitlbee diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 1b70807a..5f647bf2 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -511,7 +511,14 @@ kiteMailServer = propertyList "kitenet.net mail server" , "/etc/dovecot/conf.d/10-mail.conf" `File.containsLine` "mail_location = maildir:~/Maildir" `onChange` Service.reloaded "dovecot" - `describe` "dovecot configured" + `describe` "dovecot mail.conf" + , "/etc/dovecot/conf.d/10-auth.conf" `File.containsLine` + "!include auth-passwdfile.conf.ex" + `onChange` Service.restarted "dovecot" + `describe` "dovecot auth.conf" + , File.hasPrivContent dovecotusers ctx + `onChange` (dovecotusers `File.mode` + combineModes [ownerReadMode, groupReadMode]) , Apt.installed ["mutt", "bsd-mailx", "alpine"] @@ -526,7 +533,8 @@ kiteMailServer = propertyList "kitenet.net mail server" , "chmod 600 $pass" , "exec alpine -passfile $pass \"$@\"" ] - `onChange` (pinescript `File.mode` combineModes (readModes ++ executeModes)) + `onChange` (pinescript `File.mode` + combineModes (readModes ++ executeModes)) `describe` "pine wrapper script" , "/etc/pine.conf" `File.containsLines` [ "inbox-path={localhost/novalidate-cert}inbox" @@ -536,6 +544,7 @@ kiteMailServer = propertyList "kitenet.net mail server" where ctx = Context "kitenet.net" pinescript = "/usr/local/bin/pine" + dovecotusers = "/etc/dovecot/users" hasJoeyCAChain :: Property hasJoeyCAChain = "/etc/ssl/certs/joeyca.pem" `File.hasPrivContentExposed` -- cgit v1.3-2-g0d8e From 51edffe1733149a2019afd128e97ad72f9c2676a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 16:43:11 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 5f647bf2..4ff3d608 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -519,6 +519,7 @@ kiteMailServer = propertyList "kitenet.net mail server" , File.hasPrivContent dovecotusers ctx `onChange` (dovecotusers `File.mode` combineModes [ownerReadMode, groupReadMode]) + , File.ownerGroup dovecotusers "root" "dovecot" , Apt.installed ["mutt", "bsd-mailx", "alpine"] -- cgit v1.3-2-g0d8e From 7028c2c9cc2cab29a5be4abf4b63ea1b589318e1 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Fri, 18 Jul 2014 16:45:40 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 4ff3d608..e6c4bf01 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -513,7 +513,7 @@ kiteMailServer = propertyList "kitenet.net mail server" `onChange` Service.reloaded "dovecot" `describe` "dovecot mail.conf" , "/etc/dovecot/conf.d/10-auth.conf" `File.containsLine` - "!include auth-passwdfile.conf.ex" + "!include auth-passwdfile.conf.ext" `onChange` Service.restarted "dovecot" `describe` "dovecot auth.conf" , File.hasPrivContent dovecotusers ctx -- cgit v1.3-2-g0d8e From 98a311476379eb8c05a7a720799cd3416091bbe7 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 22 Jul 2014 15:25:07 -0400 Subject: propellor spin --- config-joey.hs | 18 +- debian/changelog | 1 + privdata/privdata.gpg | 1486 +++++++++++----------- src/Propellor/Property/Apache.hs | 20 +- src/Propellor/Property/SiteSpecific/JoeySites.hs | 171 +++ 5 files changed, 938 insertions(+), 758 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index cdd21c80..40d48cb2 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -84,6 +84,7 @@ hosts = -- (o) ` ] & ipv4 "66.228.36.95" & ipv6 "2600:3c03::f03c:91ff:fe73:b0d2" + -- & alias "kitenet.net" -- not yet live! & Apt.installed ["linux-image-amd64"] & Linode.chainPVGrub 5 @@ -105,9 +106,12 @@ hosts = -- (o) ` `requires` Ssh.keyImported SshRsa "root" (Context "kite.kitenet.net") - & JoeySites.kiteMailServer -- & alias "smtp.kitenet.net" -- not yet live! -- & alias "imap.kitenet.net" -- not yet live! + -- & alias "mail.kitenet.net" -- not yet live! + & JoeySites.kiteMailServer + + & JoeySites.legacyWebSites & Apt.installed ["git-annex", "myrepos" @@ -131,10 +135,7 @@ hosts = -- (o) ` & Apt.serviceInstalledRunning "swapspace" & Apt.serviceInstalledRunning "apache2" - & File.hasPrivContent "/etc/ssl/certs/web.pem" (Context "kitenet.net") - & File.hasPrivContent "/etc/ssl/private/web.pem" (Context "kitenet.net") - & File.hasPrivContent "/etc/ssl/certs/startssl.pem" (Context "kitenet.net") - & Apache.modEnabled "ssl" + & JoeySites.kitenetHttps & Apache.multiSSL & File.ownerGroup "/srv/web" "joey" "joey" & Apt.installed ["analog"] @@ -410,14 +411,13 @@ monsters = -- but do want to track their public keys etc. - /postgrey - mailman - /spamassassin - - sqwebmail + - sqwebmail (cannot use this with dovecot, alternatives?) - /imap server - /pop server - apache - some static websites - - bitlbee - - prosody - - (used by daddy's git-annex) + - bitlbee (EOL?) + - prosody (EOL?) - named - (branchable is still pushing to here - (thinking it's ns2.branchable.com), but it's no diff --git a/debian/changelog b/debian/changelog index f9242968..6f54b219 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,7 @@ propellor (0.8.2) UNRELEASED; urgency=medium * Hostname.sane also configures /etc/mailname. * Fixed Postfix.satellite to really configure relayhost = smtp.domain. * Avoid reconfiguring postfix unncessarily when it already has a relayhost. + * Deal with apache 2.4's change in the name of site-available config files. -- Joey Hess Thu, 17 Jul 2014 23:32:01 -0400 diff --git a/privdata/privdata.gpg b/privdata/privdata.gpg index 92084f85..290a7837 100644 --- a/privdata/privdata.gpg +++ b/privdata/privdata.gpg @@ -1,747 +1,747 @@ -----BEGIN PGP MESSAGE----- Version: GnuPG v1 -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 -=gq7b +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 +=JTfB -----END PGP MESSAGE----- diff --git a/src/Propellor/Property/Apache.hs b/src/Propellor/Property/Apache.hs index cf3e62cc..b1fa9d9a 100644 --- a/src/Propellor/Property/Apache.hs +++ b/src/Propellor/Property/Apache.hs @@ -15,15 +15,16 @@ siteEnabled hn cf = RevertableProperty enable disable `requires` siteAvailable hn cf `requires` installed `onChange` reloaded - disable = trivial $ File.notPresent (siteCfg hn) - `describe` ("apache site disabled " ++ hn) + disable = trivial $ combineProperties + ("apache site disabled " ++ hn) + (map File.notPresent (siteCfg hn)) `onChange` cmdProperty "a2dissite" ["--quiet", hn] `requires` installed `onChange` reloaded siteAvailable :: HostName -> ConfigFile -> Property -siteAvailable hn cf = siteCfg hn `File.hasContent` (comment:cf) - `describe` ("apache site available " ++ hn) +siteAvailable hn cf = combineProperties ("apache site available " ++ hn) $ + map (`File.hasContent` (comment:cf)) (siteCfg hn) where comment = "# deployed with propellor, do not modify" @@ -39,8 +40,15 @@ modEnabled modname = RevertableProperty enable disable `requires` installed `onChange` reloaded -siteCfg :: HostName -> FilePath -siteCfg hn = "/etc/apache2/sites-available/" ++ hn +-- This is a list of config files because different versions of apache +-- use different filenames. Propellor simply writen them all. +siteCfg :: HostName -> [FilePath] +siteCfg hn = + -- Debian pre-2.4 + [ "/etc/apache2/sites-available/" ++ hn + -- Debian 2.4+ + , "/etc/apache2/sites-available/" ++ hn ++ ".conf" + ] installed :: Property installed = Apt.installed ["apache2"] diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index e6c4bf01..277f209b 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -21,6 +21,7 @@ import Utility.Path import Data.List import System.Posix.Files +import Data.String.Utils oldUseNetServer :: [Host] -> Property oldUseNetServer hosts = propertyList ("olduse.net server") @@ -550,3 +551,173 @@ kiteMailServer = propertyList "kitenet.net mail server" hasJoeyCAChain :: Property hasJoeyCAChain = "/etc/ssl/certs/joeyca.pem" `File.hasPrivContentExposed` Context "joeyca.pem" + +kitenetHttps :: Property +kitenetHttps = propertyList "kitenet.net https certs" + [ File.hasPrivContent "/etc/ssl/certs/web.pem" ctx + , File.hasPrivContent "/etc/ssl/private/web.pem" ctx + , File.hasPrivContent "/etc/ssl/certs/startssl.pem" ctx + , toProp $ Apache.modEnabled "ssl" + ] + where + ctx = Context "kitenet.net" + +-- Legacy static web sites and redirections from kitenet.net to newer +-- sites. +legacyWebSites :: Property +legacyWebSites = propertyList "legacy web sites" + [ Apt.serviceInstalledRunning "apache2" + , toProp $ Apache.modEnabled "rewrite" + , toProp $ Apache.modEnabled "cgi" + , toProp $ Apache.modEnabled "speling" + , userDirHtml + , kitenetHttps + , toProp $ Apache.siteEnabled "kitenet.net" $ apachecfg "kitenet.net" True + -- /var/www is empty + [ "DocumentRoot /var/www" + , "" + , " Options Options Indexes FollowSymLinks MultiViews ExecCGI Includes" + , " AllowOverride None" + , " Order allow,deny" + , " allow from all" + , "" + , "ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/" + + -- for mailman cgi scripts + , "" + , " AllowOverride None" + , " Options ExecCGI" + , " Order allow,deny" + , " allow from all" + , "" + , "Alias /pipermail/ /var/lib/mailman/archives/public/" + , "" + , " Options Indexes MultiViews FollowSymlinks" + , " AllowOverride None" + , " Order allow,deny" + , " Allow from all" + , " Require all granted" + , "" + , "Alias /images/ /usr/share/images/" + , "" + , " Options Indexes MultiViews" + , " AllowOverride None" + , " Order allow,deny" + , " Allow from all" + , "" + + , "RewriteEngine On" + , "# Force hostname to kitenet.net" + , "RewriteCond %{HTTP_HOST} !^kitenet\\.net [NC]" + , "RewriteCond %{HTTP_HOST} !^$" + , "RewriteRule ^/(.*) http://kitenet\\.net/$1 [L,R]" + + , "# Moved pages" + , "RewriteRule /programs/debhelper http://joeyh.name/code/debhelper/ [L]" + , "RewriteRule /programs/satutils http://joeyh.name/code/satutils/ [L]" + , "RewriteRule /programs/filters http://joeyh.name/code/filters/ [L]" + , "RewriteRule /programs/ticker http://joeyh.name/code/ticker/ [L]" + , "RewriteRule /programs/pdmenu http://joeyh.name/code/pdmenu/ [L]" + , "RewriteRule /programs/sleepd http://joeyh.name/code/sleepd/ [L]" + , "RewriteRule /programs/Lingua::EN::Words2Nums http://joeyh.name/code/Words2Nums/ [L]" + , "RewriteRule /programs/wmbattery http://joeyh.name/code/wmbattery/ [L]" + , "RewriteRule /programs/dpkg-repack http://joeyh.name/code/dpkg-repack/ [L]" + , "RewriteRule /programs/debconf http://joeyh.name/code/debconf/ [L]" + , "RewriteRule /programs/perlmoo http://joeyh.name/code/perlmoo/ [L]" + , "RewriteRule /programs/alien http://joeyh.name/code/alien/ [L]" + , "RewriteRule /~joey/blog/entry/(.+)-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9].html http://joeyh.name/blog/entry/$1/ [L]" + , "RewriteRule /~anna/.* http://waldeneffect\\.org/ [R]" + , "RewriteRule /~anna/.* http://waldeneffect\\.org/ [R]" + , "RewriteRule /~anna http://waldeneffect\\.org/ [R]" + , "RewriteRule /simpleid/ http://openid.kitenet.net:8081/simpleid/" + , "# Even the kite home page is not here any more!" + , "RewriteRule ^/$ http://www.kitenet.net/ [R]" + , "RewriteRule ^/index.html http://www.kitenet.net/ [R]" + , "RewriteRule ^/joey http://www.kitenet.net/joey/ [R]" + , "RewriteRule ^/joey/index.html http://www.kitenet.net/joey/ [R]" + , "RewriteRule ^/wifi http://www.kitenet.net/wifi/ [R]" + , "RewriteRule ^/wifi/index.html http://www.kitenet.net/wifi/ [R]" + + , "# Old ikiwiki filenames for kitenet.net wiki." + , "rewritecond $1 !^/~" + , "rewritecond $1 !^/doc/" + , "rewritecond $1 !^/pipermail/" + , "rewritecond $1 !^/cgi-bin/" + , "rewritecond $1 !.*/index$" + , "rewriterule (.+).html$ $1/ [r]" + + , "# Old ikiwiki filenames for joey's wiki." + , "rewritecond $1 ^/~joey/" + , "rewritecond $1 !.*/index$" + , "rewriterule (.+).html$ http://kitenet.net/$1/ [L,R]" + + , "# ~joey to joeyh.name" + , "rewriterule /~joey/(.*) http://joeyh.name/$1 [L]" + + , "# Old familywiki location." + , "rewriterule /~family/(.*).html http://family.kitenet.net/$1 [L]" + , "rewriterule /~family/(.*).rss http://family.kitenet.net/$1/index.rss [L]" + , "rewriterule /~family(.*) http://family.kitenet.net$1 [L]" + + , "rewriterule /~kyle/bywayofscience(.*) http://bywayofscience.branchable.com$1 [L]" + , "rewriterule /~kyle/family/wiki/(.*).html http://macleawiki.branchable.com/$1 [L]" + , "rewriterule /~kyle/family/wiki/(.*).rss http://macleawiki.branchable.com/$1/index.rss [L]" + , "rewriterule /~kyle/family/wiki(.*) http://macleawiki.branchable.com$1 [L]" + ] + , alias "anna.kitenet.net" + , toProp $ Apache.siteEnabled "anna.kitenet.net" $ apachecfg "anna.kitenet.net" False + [ "DocumentRoot /home/anna/html" + , "" + , " Options Indexes ExecCGI" + , " AllowOverride None" + , "" + ] + , alias "sows-ear.kitenet.net" + , alias "www.sows-ear.kitenet.net" + , toProp $ Apache.siteEnabled "sows-ear.kitenet.net" $ apachecfg "sows-ear.kitenet.net" False + [ "ServerAlias www.sows-ear.kitenet.net" + , "DocumentRoot /srv/web/sows-ear.kitenet.net" + , "" + , " Options FollowSymLinks" + , " AllowOverride None" + , "" + ] + , alias "wortroot.kitenet.net" + , alias "www.wortroot.kitenet.net" + , toProp $ Apache.siteEnabled "wortroot.kitenet.net" $ apachecfg "wortroot.kitenet.net" False + [ "ServerAlias www.wortroot.kitenet.net" + , "DocumentRoot /srv/web/wortroot.kitenet.net" + , "" + , " Options FollowSymLinks" + , " AllowOverride None" + , "" + ] + , alias "joey.kitenet.net" + , toProp $ Apache.siteEnabled "joey.kitenet.net" $ apachecfg "joey.kitenet.net" False + [ "DocumentRoot /home/joey/html" + , "" + , " Options Indexes ExecCGI" + , " AllowOverride None" + , "" + + , "RewriteEngine On" + + , "# Old ikiwiki filenames for joey's wiki." + , "rewritecond $1 !.*/index$" + , "rewriterule (.+).html$ http://joeyh.name/$1/ [l]" + + , "rewritecond $1 !.*/index$" + , "rewriterule (.+).rss$ http://joeyh.name/$1/index.rss [l]" + + , "# Redirect all to joeyh.name." + , "rewriterule (.*) http://joeyh.name$1 [r]" + ] + ] + +userDirHtml :: Property +userDirHtml = File.fileProperty "apache userdir is html" (map munge) conf + `onChange` Apache.reloaded + `requires` (toProp $ Apache.modEnabled "userdir") + where + munge = replace "public_html" "html" + conf = "/etc/apache2/mods-available/userdir.conf" -- cgit v1.3-2-g0d8e From 400422a7e6d4fb6a352a8b3a81e2553fc97c9f5f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 22 Jul 2014 15:27:44 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 277f209b..2442b985 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -576,7 +576,7 @@ legacyWebSites = propertyList "legacy web sites" -- /var/www is empty [ "DocumentRoot /var/www" , "" - , " Options Options Indexes FollowSymLinks MultiViews ExecCGI Includes" + , " Options Indexes FollowSymLinks MultiViews ExecCGI Includes" , " AllowOverride None" , " Order allow,deny" , " allow from all" -- cgit v1.3-2-g0d8e From e01fc46ba30ffab6b3e53f518718a334d763ac80 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 22 Jul 2014 16:21:54 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 2442b985..40e1bead 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -580,6 +580,7 @@ legacyWebSites = propertyList "legacy web sites" , " AllowOverride None" , " Order allow,deny" , " allow from all" + , " Require all granted" , "" , "ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/" @@ -604,6 +605,7 @@ legacyWebSites = propertyList "legacy web sites" , " AllowOverride None" , " Order allow,deny" , " Allow from all" + , " Require all granted" , "" , "RewriteEngine On" @@ -670,6 +672,7 @@ legacyWebSites = propertyList "legacy web sites" , "" , " Options Indexes ExecCGI" , " AllowOverride None" + , " Require all granted" , "" ] , alias "sows-ear.kitenet.net" @@ -680,6 +683,7 @@ legacyWebSites = propertyList "legacy web sites" , "" , " Options FollowSymLinks" , " AllowOverride None" + , " Require all granted" , "" ] , alias "wortroot.kitenet.net" @@ -690,6 +694,7 @@ legacyWebSites = propertyList "legacy web sites" , "" , " Options FollowSymLinks" , " AllowOverride None" + , " Require all granted" , "" ] , alias "joey.kitenet.net" @@ -698,6 +703,7 @@ legacyWebSites = propertyList "legacy web sites" , "" , " Options Indexes ExecCGI" , " AllowOverride None" + , " Require all granted" , "" , "RewriteEngine On" -- cgit v1.3-2-g0d8e From dc1a8db06455a287169f765b4e5c115200386359 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 22 Jul 2014 16:28:04 -0400 Subject: propellor spin --- src/Propellor/Property/Apache.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/Apache.hs b/src/Propellor/Property/Apache.hs index b1fa9d9a..e2ee0346 100644 --- a/src/Propellor/Property/Apache.hs +++ b/src/Propellor/Property/Apache.hs @@ -10,7 +10,7 @@ type ConfigFile = [String] siteEnabled :: HostName -> ConfigFile -> RevertableProperty siteEnabled hn cf = RevertableProperty enable disable where - enable = trivial $ cmdProperty "a2ensite" ["--quiet", hn] + enable = cmdProperty "a2ensite" ["--quiet", hn] `describe` ("apache site enabled " ++ hn) `requires` siteAvailable hn cf `requires` installed -- cgit v1.3-2-g0d8e From ed8396646039c68eeb7aec7788258205fd998a5f Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 22 Jul 2014 16:29:22 -0400 Subject: propellor spin --- src/Propellor/Property/Apache.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/Propellor/Property/Apache.hs b/src/Propellor/Property/Apache.hs index e2ee0346..a8014999 100644 --- a/src/Propellor/Property/Apache.hs +++ b/src/Propellor/Property/Apache.hs @@ -10,7 +10,7 @@ type ConfigFile = [String] siteEnabled :: HostName -> ConfigFile -> RevertableProperty siteEnabled hn cf = RevertableProperty enable disable where - enable = cmdProperty "a2ensite" ["--quiet", hn] + enable = trivial (cmdProperty "a2ensite" ["--quiet", hn]) `describe` ("apache site enabled " ++ hn) `requires` siteAvailable hn cf `requires` installed -- cgit v1.3-2-g0d8e From 660f77c28fe11534139e8d9ecda2d573921fa8dd Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Tue, 22 Jul 2014 16:40:11 -0400 Subject: propellor spin --- src/Propellor/Property/Apache.hs | 16 ++++++++++++++ src/Propellor/Property/SiteSpecific/JoeySites.hs | 27 ++++++++---------------- 2 files changed, 25 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/Apache.hs b/src/Propellor/Property/Apache.hs index a8014999..e6930893 100644 --- a/src/Propellor/Property/Apache.hs +++ b/src/Propellor/Property/Apache.hs @@ -68,3 +68,19 @@ multiSSL = "/etc/apache2/conf.d/ssl" `File.hasContent` ] `describe` "apache SNI enabled" `onChange` reloaded + +-- | Config file fragment that can be inserted into a +-- stanza to allow global read access to the directory. +-- +-- Works with multiple versions of apache that have different ways to do +-- it. +allowAll :: String +allowAll = unlines + [ "" + , "Order allow,deny" + , "allow from all" + , "" + , "= 2.4>" + , "Require all granted" + , "" + ] diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 40e1bead..51d3d60c 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -61,9 +61,7 @@ oldUseNetServer hosts = propertyList ("olduse.net server") , " " , " Options Indexes FollowSymlinks" , " AllowOverride None" - -- I had this in the file before. - -- This may be needed by a newer version of apache? - --, " Require all granted" + , Apache.allowAll , " " ] ] @@ -578,9 +576,7 @@ legacyWebSites = propertyList "legacy web sites" , "" , " Options Indexes FollowSymLinks MultiViews ExecCGI Includes" , " AllowOverride None" - , " Order allow,deny" - , " allow from all" - , " Require all granted" + , Apache.allowAll , "" , "ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/" @@ -588,24 +584,19 @@ legacyWebSites = propertyList "legacy web sites" , "" , " AllowOverride None" , " Options ExecCGI" - , " Order allow,deny" - , " allow from all" + , Apache.allowAll , "" , "Alias /pipermail/ /var/lib/mailman/archives/public/" , "" , " Options Indexes MultiViews FollowSymlinks" , " AllowOverride None" - , " Order allow,deny" - , " Allow from all" - , " Require all granted" + , Apache.allowAll , "" , "Alias /images/ /usr/share/images/" , "" , " Options Indexes MultiViews" , " AllowOverride None" - , " Order allow,deny" - , " Allow from all" - , " Require all granted" + , Apache.allowAll , "" , "RewriteEngine On" @@ -672,7 +663,7 @@ legacyWebSites = propertyList "legacy web sites" , "" , " Options Indexes ExecCGI" , " AllowOverride None" - , " Require all granted" + , Apache.allowAll , "" ] , alias "sows-ear.kitenet.net" @@ -683,7 +674,7 @@ legacyWebSites = propertyList "legacy web sites" , "" , " Options FollowSymLinks" , " AllowOverride None" - , " Require all granted" + , Apache.allowAll , "" ] , alias "wortroot.kitenet.net" @@ -694,7 +685,7 @@ legacyWebSites = propertyList "legacy web sites" , "" , " Options FollowSymLinks" , " AllowOverride None" - , " Require all granted" + , Apache.allowAll , "" ] , alias "joey.kitenet.net" @@ -703,7 +694,7 @@ legacyWebSites = propertyList "legacy web sites" , "" , " Options Indexes ExecCGI" , " AllowOverride None" - , " Require all granted" + , Apache.allowAll , "" , "RewriteEngine On" -- cgit v1.3-2-g0d8e From 321a0bdef6c34c250af8c893290747e6e3e628c3 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 23 Jul 2014 10:52:26 -0400 Subject: propellor spin --- config-joey.hs | 24 +++++++++++++++++++++--- src/Propellor/Property/SiteSpecific/JoeySites.hs | 10 ++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index 17369445..92ec0a84 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -409,16 +409,34 @@ monsters = -- but do want to track their public keys etc. - /spamassassin - sqwebmail (cannot use this with dovecot, alternatives?) - /imap server - - (note: will need to re-download offlineimap) - /pop server - - (note: different hostname and ssl cert, will need - - to reconfigure errol's email client) - /apache - (need to re-rsync /srv/web to new kite.kitenet.net - server before decommissioning) - bitlbee (EOL?) - prosody (EOL?) - ftpd (EOL) + - + - Pre-transition: + - - re-rsync /home + - - set up imap passwords for users who use pine + - + - Transition plan: + - - on darkstar: offlineimap run & disable cron job + - & move offlineimap files to tmp + - - take down wren pstfix, imap, pop servers + - - log all users out of wren + - - final /home rsync + - - rsync /var/mail + - - rsync mailman and mailman list archives dirs + - - switch kitenet.net dns and enable pop.kitenet.net etc aliass + - - point wren.kitenet.net at kite.kitenet.net temporarily + - (make real-wren.kitenet.net alias) + - - reconfigure errol's email client to use new server + - - re-run offlinimap against new server + - - test mail + - - test virus filtering + - - test http://kitenet.net/~kyle/ (user home dirs) -} , host "mouse.kitenet.net" & ipv6 "2001:4830:1600:492::2" diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 51d3d60c..6409cac8 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -688,6 +688,16 @@ legacyWebSites = propertyList "legacy web sites" , Apache.allowAll , "" ] + , alias "creeksidepress.com" + , toProp $ Apache.siteEnabled "creeksidepress.com" $ apachecfg "creeksidepress.com" False + [ "ServerAlias www.creeksidepress.com" + , "DocumentRoot /srv/web/creeksidepress.com" + , "" + , " Options FollowSymLinks" + , " AllowOverride None" + , Apache.allowAll + , "" + ] , alias "joey.kitenet.net" , toProp $ Apache.siteEnabled "joey.kitenet.net" $ apachecfg "joey.kitenet.net" False [ "DocumentRoot /home/joey/html" -- cgit v1.3-2-g0d8e From 78bbd860c608368185d3ddc010393c07734b4ec0 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 23 Jul 2014 10:54:21 -0400 Subject: propellor spin --- src/Propellor/Property/SiteSpecific/JoeySites.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 6409cac8..2394eb29 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -691,8 +691,8 @@ legacyWebSites = propertyList "legacy web sites" , alias "creeksidepress.com" , toProp $ Apache.siteEnabled "creeksidepress.com" $ apachecfg "creeksidepress.com" False [ "ServerAlias www.creeksidepress.com" - , "DocumentRoot /srv/web/creeksidepress.com" - , "" + , "DocumentRoot /srv/web/www.creeksidepress.com" + , "" , " Options FollowSymLinks" , " AllowOverride None" , Apache.allowAll -- cgit v1.3-2-g0d8e From 7d3c09df5f33e1560e5d4c5b8f3c78a5a588dd5a Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 23 Jul 2014 11:52:46 -0400 Subject: propellor spin --- config-joey.hs | 1 + src/Propellor/Property/SiteSpecific/JoeySites.hs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index f96902b2..9a9e036a 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -436,6 +436,7 @@ monsters = -- but do want to track their public keys etc. - - test mail - - test virus filtering - - test http://kitenet.net/~kyle/ (user home dirs) + - - migrate user cron jobs -} , host "mouse.kitenet.net" & ipv6 "2001:4830:1600:492::2" diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 2394eb29..9f60631c 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -347,7 +347,7 @@ githubBackup = propertyList "github-backup box" in File.hasPrivContent f anyContext `onChange` File.ownerGroup f "joey" "joey" , Cron.niceJob "github-backup run" "30 4 * * *" "joey" - "/home/joey/lib/backup" $ intercalate "&" + "/home/joey/lib/backup" $ intercalate "&&" [ "mkdir -p github" , "cd github" , ". $HOME/.github-keys && github-backup joeyh" -- cgit v1.3-2-g0d8e From ecc275cfeb9dc2c18abe525f3a93aad7614e1a0c Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 23 Jul 2014 12:23:44 -0400 Subject: propellor spin --- src/Propellor/Info.hs | 19 +++++++++++++++---- src/Propellor/Types/Info.hs | 4 +++- 2 files changed, 18 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/Propellor/Info.hs b/src/Propellor/Info.hs index 00f1b0e9..080a971e 100644 --- a/src/Propellor/Info.hs +++ b/src/Propellor/Info.hs @@ -43,11 +43,15 @@ ipv6 = addDNS . Address . IPv6 -- problems with CNAMEs, and also means that when multiple hosts have the -- same alias, a DNS round-robin is automatically set up. alias :: Domain -> Property -alias = addDNS . CNAME . AbsDomain +alias d = pureInfoProperty ("alias " ++ d) $ mempty + { _aliases = S.singleton d + -- A CNAME is added here, but the DNS setup code converts it to an + -- IP address when that makes sense. + , _dns = S.singleton $ CNAME $ AbsDomain d + } addDNS :: Record -> Property -addDNS r = pureInfoProperty (rdesc r) $ - mempty { _dns = S.singleton r } +addDNS r = pureInfoProperty (rdesc r) $ mempty { _dns = S.singleton r } where rdesc (CNAME d) = unwords ["alias", ddesc d] rdesc (Address (IPv4 addr)) = unwords ["ipv4", addr] @@ -71,8 +75,15 @@ getSshPubKey = askInfo _sshPubKey hostMap :: [Host] -> M.Map HostName Host hostMap l = M.fromList $ zip (map hostName l) l +aliasMap :: [Host] -> M.Map HostName Host +aliasMap l = M.fromList $ concat $ map (flip zip l) $ + map (S.toList . _aliases . hostInfo) l + findHost :: [Host] -> HostName -> Maybe Host -findHost l hn = M.lookup hn (hostMap l) +findHost l hn = maybe (findAlias l hn) Just (M.lookup hn (hostMap l)) + +findAlias :: [Host] -> HostName -> Maybe Host +findAlias l hn = M.lookup hn (aliasMap l) getAddresses :: Info -> [IPAddr] getAddresses = mapMaybe getIPAddr . S.toList . _dns diff --git a/src/Propellor/Types/Info.hs b/src/Propellor/Types/Info.hs index 8856e06f..de072aa0 100644 --- a/src/Propellor/Types/Info.hs +++ b/src/Propellor/Types/Info.hs @@ -12,6 +12,7 @@ data Info = Info { _os :: Val System , _privDataFields :: S.Set (PrivDataField, Context) , _sshPubKey :: Val String + , _aliases :: S.Set HostName , _dns :: S.Set Dns.Record , _namedconf :: Dns.NamedConfMap , _dockerinfo :: DockerInfo @@ -19,11 +20,12 @@ data Info = Info deriving (Eq, Show) instance Monoid Info where - mempty = Info mempty mempty mempty mempty mempty mempty + mempty = Info mempty mempty mempty mempty mempty mempty mempty mappend old new = Info { _os = _os old <> _os new , _privDataFields = _privDataFields old <> _privDataFields new , _sshPubKey = _sshPubKey old <> _sshPubKey new + , _aliases = _aliases old <> _aliases new , _dns = _dns old <> _dns new , _namedconf = _namedconf old <> _namedconf new , _dockerinfo = _dockerinfo old <> _dockerinfo new -- cgit v1.3-2-g0d8e From dd32a63a07107a749a5a8e7ab1d2b0d629ac4538 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 23 Jul 2014 12:25:38 -0400 Subject: propellor spin --- src/Propellor/Engine.hs | 4 +++- src/Propellor/Property/Ssh.hs | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/Propellor/Engine.hs b/src/Propellor/Engine.hs index a3fc0f30..b4260e9f 100644 --- a/src/Propellor/Engine.hs +++ b/src/Propellor/Engine.hs @@ -44,6 +44,8 @@ ensureProperty = catchPropellor . propertySatisfy -- For example, `fromHost hosts "otherhost" getSshPubKey` fromHost :: [Host] -> HostName -> Propellor a -> Propellor (Maybe a) fromHost l hn getter = case findHost l hn of - Nothing -> return Nothing + Nothing -> do + liftIO $ print "fromHost found Nothing" + return Nothing Just h -> liftIO $ Just <$> runReaderT (runWithHost getter) h diff --git a/src/Propellor/Property/Ssh.hs b/src/Propellor/Property/Ssh.hs index 5a260476..76f03671 100644 --- a/src/Propellor/Property/Ssh.hs +++ b/src/Propellor/Property/Ssh.hs @@ -148,8 +148,8 @@ knownHost hosts hn user = property desc $ , f `File.containsLine` (hn ++ " " ++ k) , File.ownerGroup f user user ] - go _ = do - warningMessage $ "no configred sshPubKey for " ++ hn + go v = do + warningMessage $ "no configred sshPubKey for " ++ hn ++ " " ++ show v return FailedChange -- | Makes a user have authorized_keys from the PrivData -- cgit v1.3-2-g0d8e From 41a23743e7f5b90c12a2b2ef19ccb3dcbb7bfef9 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 23 Jul 2014 12:27:38 -0400 Subject: propellor spin --- src/Propellor/Engine.hs | 10 +++++----- src/Propellor/Property/Ssh.hs | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/Propellor/Engine.hs b/src/Propellor/Engine.hs index b4260e9f..ed886ef7 100644 --- a/src/Propellor/Engine.hs +++ b/src/Propellor/Engine.hs @@ -44,8 +44,8 @@ ensureProperty = catchPropellor . propertySatisfy -- For example, `fromHost hosts "otherhost" getSshPubKey` fromHost :: [Host] -> HostName -> Propellor a -> Propellor (Maybe a) fromHost l hn getter = case findHost l hn of - Nothing -> do - liftIO $ print "fromHost found Nothing" - return Nothing - Just h -> liftIO $ Just <$> - runReaderT (runWithHost getter) h + Nothing -> return Nothing + Just h -> liftIO $ do + print ("fromHost", hn, "using", h) + Just <$> + runReaderT (runWithHost getter) h diff --git a/src/Propellor/Property/Ssh.hs b/src/Propellor/Property/Ssh.hs index 76f03671..5a260476 100644 --- a/src/Propellor/Property/Ssh.hs +++ b/src/Propellor/Property/Ssh.hs @@ -148,8 +148,8 @@ knownHost hosts hn user = property desc $ , f `File.containsLine` (hn ++ " " ++ k) , File.ownerGroup f user user ] - go v = do - warningMessage $ "no configred sshPubKey for " ++ hn ++ " " ++ show v + go _ = do + warningMessage $ "no configred sshPubKey for " ++ hn return FailedChange -- | Makes a user have authorized_keys from the PrivData -- cgit v1.3-2-g0d8e From 3d617fd98b981929886498bf881c93e650096248 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 23 Jul 2014 12:33:11 -0400 Subject: propellor spin --- src/Propellor/Info.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Propellor/Info.hs b/src/Propellor/Info.hs index 080a971e..1b89c008 100644 --- a/src/Propellor/Info.hs +++ b/src/Propellor/Info.hs @@ -76,8 +76,8 @@ hostMap :: [Host] -> M.Map HostName Host hostMap l = M.fromList $ zip (map hostName l) l aliasMap :: [Host] -> M.Map HostName Host -aliasMap l = M.fromList $ concat $ map (flip zip l) $ - map (S.toList . _aliases . hostInfo) l +aliasMap = M.fromList . concat . + map (\h -> map (\aka -> (aka, h)) $ S.toList $ _aliases $ hostInfo h) findHost :: [Host] -> HostName -> Maybe Host findHost l hn = maybe (findAlias l hn) Just (M.lookup hn (hostMap l)) -- cgit v1.3-2-g0d8e From ac46ab4d0c2df3f2f19c9f45b0a8e22122e3fb59 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 23 Jul 2014 12:33:44 -0400 Subject: propellor spin --- src/Propellor/Engine.hs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/Propellor/Engine.hs b/src/Propellor/Engine.hs index ed886ef7..a3fc0f30 100644 --- a/src/Propellor/Engine.hs +++ b/src/Propellor/Engine.hs @@ -45,7 +45,5 @@ ensureProperty = catchPropellor . propertySatisfy fromHost :: [Host] -> HostName -> Propellor a -> Propellor (Maybe a) fromHost l hn getter = case findHost l hn of Nothing -> return Nothing - Just h -> liftIO $ do - print ("fromHost", hn, "using", h) - Just <$> - runReaderT (runWithHost getter) h + Just h -> liftIO $ Just <$> + runReaderT (runWithHost getter) h -- cgit v1.3-2-g0d8e From 08a3c52017b20bb6d4c8a89da019c072a90ddd50 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 23 Jul 2014 12:48:46 -0400 Subject: propellor spin --- config-joey.hs | 4 ++-- src/Propellor/Property/SiteSpecific/JoeySites.hs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/config-joey.hs b/config-joey.hs index 41e25025..55f1a01e 100644 --- a/config-joey.hs +++ b/config-joey.hs @@ -150,9 +150,9 @@ hosts = -- (o) ` & JoeySites.annexWebSite "/srv/git/downloads.git" "downloads.kitenet.net" "840760dc-08f0-11e2-8c61-576b7e66acfd" - [("turtle", "ssh://turtle.kitenet.net/~/lib/downloads/")] + [("turtle", "ssh://usbackup.kitenet.net/~/lib/downloads/")] `requires` Ssh.keyImported SshRsa "joey" (Context "downloads.kitenet.net") - `requires` Ssh.knownHost hosts "turtle.kitenet.net" "joey" + `requires` Ssh.knownHost hosts "usbackup.kitenet.net" "joey" & JoeySites.gitAnnexDistributor & alias "tmp.kitenet.net" diff --git a/src/Propellor/Property/SiteSpecific/JoeySites.hs b/src/Propellor/Property/SiteSpecific/JoeySites.hs index 9f60631c..fa8773de 100644 --- a/src/Propellor/Property/SiteSpecific/JoeySites.hs +++ b/src/Propellor/Property/SiteSpecific/JoeySites.hs @@ -114,11 +114,11 @@ mumbleServer hosts = combineProperties hn [ Apt.serviceInstalledRunning "mumble-server" , Obnam.latestVersion , Obnam.backup "/var/lib/mumble-server" "55 5 * * *" - [ "--repository=sftp://joey@turtle.kitenet.net/~/lib/backup/" ++ hn ++ ".obnam" + [ "--repository=sftp://joey@usbackup.kitenet.net/~/lib/backup/" ++ hn ++ ".obnam" , "--client-name=mumble" ] Obnam.OnlyClient `requires` Ssh.keyImported SshRsa "root" (Context hn) - `requires` Ssh.knownHost hosts "turtle.kitenet.net" "root" + `requires` Ssh.knownHost hosts "usbackup.kitenet.net" "root" , trivial $ cmdProperty "chown" ["-R", "mumble-server:mumble-server", "/var/lib/mumble-server"] ] where -- cgit v1.3-2-g0d8e