propellor/Propellor.hs

71 lines
2.4 KiB
Haskell
Raw Normal View History

import Property
2014-03-30 04:08:02 +00:00
import HostName
2014-03-30 17:39:55 +00:00
import Utility.SafeCommand
2014-03-30 17:12:33 +00:00
import qualified Property.File as File
import qualified Property.Apt as Apt
import qualified Property.Ssh as Ssh
import qualified Property.User as User
2014-03-30 03:45:48 +00:00
import qualified Property.Hostname as Hostname
import qualified Property.Reboot as Reboot
2014-03-30 04:38:16 +00:00
import qualified Property.Tor as Tor
import qualified Property.GitHome as GitHome
2014-03-30 04:08:02 +00:00
main :: IO ()
main = ensureProperties . getProperties =<< getHostName
{- This is where the system's HostName, either as returned by uname
2014-03-30 06:26:23 +00:00
- or one specified on the command line, is converted into a list of
2014-03-30 04:08:02 +00:00
- Properties for that system. -}
getProperties :: HostName -> [Property]
2014-03-30 06:26:23 +00:00
getProperties hostname@"clam.kitenet.net" =
[ cleanCloudAtCost hostname
2014-03-30 06:12:48 +00:00
, standardSystem Apt.Unstable
-- This is not an important system so I don't want to need to
-- manually upgrade it.
, Apt.unattendedUpgrades True
2014-03-30 06:33:44 +00:00
-- Clam is a tor bridge.
, Tor.isBridge
2014-03-30 06:12:48 +00:00
-- Should come last as it reboots.
2014-03-30 17:39:09 +00:00
, Apt.installed ["systemd-sysv"] `onChange` Reboot.now
2014-03-30 06:12:48 +00:00
]
-- add more hosts here...
--getProperties "foo" =
getProperties h = error $ "Unknown host: " ++ h ++ " (perhaps you should specify the real hostname on the command line?)"
-- This is my standard system setup
2014-03-30 06:26:23 +00:00
standardSystem :: Apt.Suite -> Property
standardSystem suite = propertyList "standard system"
2014-03-30 06:12:48 +00:00
[ Apt.stdSourcesList suite `onChange` Apt.upgrade
2014-03-30 04:28:56 +00:00
, Apt.installed ["etckeeper"]
, Apt.installed ["ssh"]
, GitHome.installedFor "root"
2014-03-30 04:28:56 +00:00
-- Harden the system, but only once root's authorized_keys
-- is safely in place.
, check (Ssh.hasAuthorizedKeys "root") $
Ssh.passwordAuthentication False
2014-03-30 04:17:44 +00:00
, check (Ssh.hasAuthorizedKeys "root") $
User.lockedPassword "root"
2014-03-30 05:49:11 +00:00
, Apt.installed ["vim"]
, User.nonsystem "joey"
, Apt.installed ["sudo"]
2014-03-30 06:12:48 +00:00
-- nopasswd because no password is set up for joey.
2014-03-30 17:12:33 +00:00
, "/etc/sudoers" `File.containsLine` "joey ALL=(ALL:ALL) NOPASSWD:ALL"
, GitHome.installedFor "joey"
]
2014-03-30 06:26:23 +00:00
-- Clean up a system as installed by cloudatcost.com
cleanCloudAtCost :: HostName -> Property
cleanCloudAtCost hostname = propertyList "cloudatcost cleanup"
[ User.nuked "user"
, Apt.removed ["exim4"] `onChange` Apt.autoRemove
, Hostname.set hostname
, Ssh.uniqueHostKeys
2014-03-30 17:39:09 +00:00
-- Work around for #612402
, "/etc/default/grub" `File.containsLine` "GRUB_DISABLE_LINUX_UUID=true"
`onChange` cmdProperty "update-grub" []
`onChange` cmdProperty "update-initramfs" [Param "-u"]
2014-03-30 19:14:36 +00:00
-- Cruft
, File.notPresent "/etc/rc.local"
, File.notPresent "/etc/init.d/S97-setup.sh"
2014-03-30 06:26:23 +00:00
]