propellor 5.6.1 → 5.7.0
raw patch · 27 files changed
+205/−91 lines, 27 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Propellor.Property.PropellorRepo: OriginUrl :: String -> OriginUrl
- Propellor.Property.PropellorRepo: hasOriginUrl :: String -> Property (HasInfo + UnixLike)
- Propellor.Property.PropellorRepo: instance GHC.Show.Show Propellor.Property.PropellorRepo.OriginUrl
- Propellor.Property.PropellorRepo: newtype OriginUrl
- Propellor.Property.SiteSpecific.JoeySites: pumpRss :: Property DebianLike
+ Propellor.Property.Cron: jobDropped :: Desc -> Times -> Property UnixLike
+ Propellor.Property.Localdir: OriginUrl :: String -> OriginUrl
+ Propellor.Property.Localdir: hasOriginUrl :: String -> Property (HasInfo + UnixLike)
+ Propellor.Property.Localdir: instance GHC.Show.Show Propellor.Property.Localdir.OriginUrl
+ Propellor.Property.Localdir: newtype OriginUrl
+ Propellor.Property.Localdir: removed :: Property UnixLike
+ Propellor.Property.Mount: partialBindMountsOf :: FilePath -> IO [MountPoint]
+ Propellor.Property.Sbuild: osDebianStandard :: Property Debian
+ Propellor.Utilities: addModes :: [FileMode] -> FileMode -> FileMode
+ Propellor.Utilities: allowRead :: FilePath -> IO ()
+ Propellor.Utilities: allowWrite :: FilePath -> IO ()
+ Propellor.Utilities: checkMode :: FileMode -> FileMode -> Bool
+ Propellor.Utilities: combineModes :: [FileMode] -> FileMode
+ Propellor.Utilities: defaultFileMode :: IO FileMode
+ Propellor.Utilities: executeModes :: [FileMode]
+ Propellor.Utilities: getUmask :: IO FileMode
+ Propellor.Utilities: groupSharedModes :: [FileMode]
+ Propellor.Utilities: groupWriteRead :: FilePath -> IO ()
+ Propellor.Utilities: isExecutable :: FileMode -> Bool
+ Propellor.Utilities: isSticky :: FileMode -> Bool
+ Propellor.Utilities: isSymLink :: FileMode -> Bool
+ Propellor.Utilities: modifyFileMode :: FilePath -> (FileMode -> FileMode) -> IO ()
+ Propellor.Utilities: modifyFileMode' :: FilePath -> (FileMode -> FileMode) -> IO FileMode
+ Propellor.Utilities: noUmask :: (MonadIO m, MonadMask m) => FileMode -> m a -> m a
+ Propellor.Utilities: otherGroupModes :: [FileMode]
+ Propellor.Utilities: preventWrite :: FilePath -> IO ()
+ Propellor.Utilities: protectedOutput :: IO a -> IO a
+ Propellor.Utilities: readModes :: [FileMode]
+ Propellor.Utilities: removeModes :: [FileMode] -> FileMode -> FileMode
+ Propellor.Utilities: setSticky :: FilePath -> IO ()
+ Propellor.Utilities: stickyMode :: FileMode
+ Propellor.Utilities: type FileMode = CMode
+ Propellor.Utilities: withModifiedFileMode :: FilePath -> (FileMode -> FileMode) -> IO a -> IO a
+ Propellor.Utilities: withUmask :: (MonadIO m, MonadMask m) => FileMode -> m a -> m a
+ Propellor.Utilities: writeFileProtected :: FilePath -> String -> IO ()
+ Propellor.Utilities: writeFileProtected' :: FilePath -> (Handle -> IO ()) -> IO ()
+ Propellor.Utilities: writeModes :: [FileMode]
- Propellor.Property.Cron: runPropellor :: Times -> Property DebianLike
+ Propellor.Property.Cron: runPropellor :: Times -> RevertableProperty DebianLike UnixLike
Files
- CHANGELOG +23/−0
- debian/changelog +23/−0
- joeyconfig.hs +3/−2
- propellor.cabal +2/−2
- src/Propellor/Git/VerifiedBranch.hs +0/−1
- src/Propellor/Property/Bootstrap.hs +0/−1
- src/Propellor/Property/Ccache.hs +0/−1
- src/Propellor/Property/Cron.hs +59/−27
- src/Propellor/Property/Debootstrap.hs +0/−1
- src/Propellor/Property/DiskImage.hs +0/−1
- src/Propellor/Property/File.hs +0/−1
- src/Propellor/Property/HostingProvider/Linode.hs +0/−1
- src/Propellor/Property/Localdir.hs +61/−0
- src/Propellor/Property/Mount.hs +14/−0
- src/Propellor/Property/Openssl.hs +0/−2
- src/Propellor/Property/PropellorRepo.hs +0/−29
- src/Propellor/Property/Sbuild.hs +14/−3
- src/Propellor/Property/Schroot.hs +0/−2
- src/Propellor/Property/Service.hs +0/−1
- src/Propellor/Property/SiteSpecific/Branchable.hs +1/−1
- src/Propellor/Property/SiteSpecific/JoeySites.hs +2/−9
- src/Propellor/Property/Ssh.hs +0/−1
- src/Propellor/Property/Systemd.hs +0/−1
- src/Propellor/Property/Tor.hs +0/−1
- src/Propellor/Shim.hs +0/−1
- src/Propellor/Spin.hs +1/−2
- src/Propellor/Utilities.hs +2/−0
CHANGELOG view
@@ -1,3 +1,26 @@+propellor (5.7.0) unstable; urgency=medium++ * Sbuild.built no longer includes Apt.stdSourcesList by default,+ in order to support non-Debian OS's. (API change)+ To upgrade: Simply add Sbuild.osDebianStandard to all Sbuild.built+ calls which have osDebian.+ Thanks, Sean Whitton+ * Propellor.Property.PropellorRepo renamed to Propellor.Property.Localdir+ to widen its scope. (API change)+ * Added Localdir.removed property.+ Thanks, Sean Whitton+ * Sbuild.built uses Localdir.removed to clean up the propellor localdir+ after it's done running in a schroot.+ Thanks, Sean Whitton+ * Cron.runPropellor made revertable. (minor API change)+ Thanks, Sean Whitton+ * Added Cron.jobDropped.+ Thanks, Sean Whitton+ * Added Utility.FileMode to the modules exported by Propellor.Utilities+ to propellor library users.++ -- Joey Hess <id@joeyh.name> Fri, 05 Apr 2019 11:59:52 -0400+ propellor (5.6.1) unstable; urgency=medium * fix Libvirt.hs haddock build
debian/changelog view
@@ -1,3 +1,26 @@+propellor (5.7.0) unstable; urgency=medium++ * Sbuild.built no longer includes Apt.stdSourcesList by default,+ in order to support non-Debian OS's. (API change)+ To upgrade: Simply add Sbuild.osDebianStandard to all Sbuild.built+ calls which have osDebian.+ Thanks, Sean Whitton+ * Propellor.Property.PropellorRepo renamed to Propellor.Property.Localdir+ to widen its scope. (API change)+ * Added Localdir.removed property.+ Thanks, Sean Whitton+ * Sbuild.built uses Localdir.removed to clean up the propellor localdir+ after it's done running in a schroot.+ Thanks, Sean Whitton+ * Cron.runPropellor made revertable. (minor API change)+ Thanks, Sean Whitton+ * Added Cron.jobDropped.+ Thanks, Sean Whitton+ * Added Utility.FileMode to the modules exported by Propellor.Utilities+ to propellor library users.++ -- Joey Hess <id@joeyh.name> Fri, 05 Apr 2019 11:59:52 -0400+ propellor (5.6.1) unstable; urgency=medium * fix Libvirt.hs haddock build
joeyconfig.hs view
@@ -71,6 +71,7 @@ & Laptop.trimSSD & Grub.cmdline_Linux_default "i915.enable_psr=1" ! Grub.cmdline_Linux_default "quiet"+ & User.hasGroup (User "joey") (Group "dialout") & JoeySites.dkimMilter & JoeySites.postfixSaslPasswordClient@@ -184,7 +185,7 @@ `setSize` MegaBytes 16000 ) & JoeySites.cubieTruckOneWire- + & Systemd.persistentJournal & Apt.installed ["firmware-atheros"] & Apt.serviceInstalledRunning "ntp" -- no hardware clock & bootstrappedFrom GitRepoOutsideChroot@@ -259,7 +260,7 @@ ] [ Borg.KeepDays 7 , Borg.KeepWeeks 4- , Borg.KeepMonths 6+ , Borg.KeepMonths 3 ] `requires` Ssh.knownHost hosts "usw-s002.rsync.net" (User "root") `requires` Ssh.userKeys (User "root")
propellor.cabal view
@@ -1,5 +1,5 @@ Name: propellor-Version: 5.6.1+Version: 5.7.0 Cabal-Version: 1.20 License: BSD2 Maintainer: Joey Hess <id@joeyh.name>@@ -104,6 +104,7 @@ Propellor.Property.Libvirt Propellor.Property.List Propellor.Property.LightDM+ Propellor.Property.Localdir Propellor.Property.Locale Propellor.Property.Logcheck Propellor.Property.Lvm@@ -120,7 +121,6 @@ Propellor.Property.Parted.Types Propellor.Property.Partition Propellor.Property.Postfix- Propellor.Property.PropellorRepo Propellor.Property.Prosody Propellor.Property.Qemu Propellor.Property.Reboot
src/Propellor/Git/VerifiedBranch.hs view
@@ -3,7 +3,6 @@ import Propellor.Base import Propellor.Git import Propellor.PrivData.Paths-import Utility.FileMode {- To verify origin branch commit's signature, have to convince gpg - to use our keyring while running git verify-tag.
src/Propellor/Property/Bootstrap.hs view
@@ -15,7 +15,6 @@ import Propellor.Types.Info import Propellor.Property.Chroot import Propellor.PrivData.Paths-import Utility.FileMode import Data.List import qualified Data.ByteString as B
src/Propellor/Property/Ccache.hs view
@@ -11,7 +11,6 @@ import qualified Propellor.Property.File as File import qualified Propellor.Property.Apt as Apt -import Utility.FileMode import Utility.DataUnits import System.Posix.Files import qualified Data.Semigroup as Sem
src/Propellor/Property/Cron.hs view
@@ -1,10 +1,15 @@-module Propellor.Property.Cron where+module Propellor.Property.Cron (+ Times(..),+ job,+ niceJob,+ jobDropped,+ Propellor.Property.Cron.runPropellor+) where import Propellor.Base import qualified Propellor.Property.File as File import qualified Propellor.Property.Apt as Apt import Propellor.Bootstrap-import Utility.FileMode import Data.Char @@ -31,7 +36,7 @@ job desc times (User u) cddir command = combineProperties ("cronned " ++ desc) $ props & Apt.serviceInstalledRunning "cron" & Apt.installed ["util-linux", "moreutils"]- & cronjobfile `File.hasContent`+ & cronjobfile desc times `File.hasContent` [ case times of Times _ -> "" _ -> "#!/bin/sh\nset -e"@@ -41,47 +46,74 @@ , "PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" , "" , case times of- Times t -> t ++ "\t" ++ u ++ "\tchronic " ++ shellEscape scriptfile+ Times t -> t ++ "\t" ++ u ++ "\tchronic "+ ++ shellEscape (scriptfile desc) _ -> case u of- "root" -> "chronic " ++ shellEscape scriptfile- _ -> "chronic su " ++ u ++ " -c " ++ shellEscape scriptfile+ "root" -> "chronic " ++ shellEscape (scriptfile desc)+ _ -> "chronic su " ++ u ++ " -c "+ ++ shellEscape (scriptfile desc) ] & case times of Times _ -> doNothing- _ -> cronjobfile `File.mode` combineModes (readModes ++ executeModes)+ _ -> (cronjobfile desc times)+ `File.mode` combineModes (readModes ++ executeModes) -- Use a separate script because it makes the cron job name -- prettier in emails, and also allows running the job manually.- & scriptfile `File.hasContent`+ & scriptfile desc `File.hasContent` [ "#!/bin/sh" , "# Generated by propellor" , "set -e"- , "flock -n " ++ shellEscape cronjobfile+ , "flock -n " ++ shellEscape (cronjobfile desc times) ++ " sh -c " ++ shellEscape cmdline ]- & scriptfile `File.mode` combineModes (readModes ++ executeModes)+ & scriptfile desc `File.mode` combineModes (readModes ++ executeModes) where cmdline = "cd " ++ cddir ++ " && ( " ++ command ++ " )"- cronjobfile = "/etc" </> cronjobdir </> name- cronjobdir = case times of- Times _ -> "cron.d"- Daily -> "cron.daily"- Weekly -> "cron.weekly"- Monthly -> "cron.monthly"- scriptfile = "/usr/local/bin/" ++ name ++ "_cronjob"- name = map sanitize desc- sanitize c- | isAlphaNum c = c- | otherwise = '_' +-- | Removes a cron job created by 'job' or 'niceJob', as identified by the+-- 'Desc' passed to those properties when the cronjob was set up+--+-- Those properties are not revertable because simply removing a cronjob does+-- not undo the changes it might have made to the system, i.e., 'jobDropped' is+-- not in the general case a reversion of 'job' or 'niceJob'+jobDropped :: Desc -> Times -> Property UnixLike+jobDropped desc times = combineProperties ("uncronned " ++ desc) $ props+ & File.notPresent (scriptfile desc)+ & File.notPresent (cronjobfile desc times)+ -- | Installs a cron job, and runs it niced and ioniced. niceJob :: Desc -> Times -> User -> FilePath -> String -> Property DebianLike niceJob desc times user cddir command = job desc times user cddir ("nice ionice -c 3 sh -c " ++ shellEscape command) -- | Installs a cron job to run propellor.-runPropellor :: Times -> Property DebianLike-runPropellor times = withOS "propellor cron job" $ \w o -> do- bootstrapper <- getBootstrapper- ensureProperty w $- niceJob "propellor" times (User "root") localdir- (bootstrapPropellorCommand bootstrapper o ++ "; ./propellor")+runPropellor :: Times -> RevertableProperty DebianLike UnixLike+runPropellor times = cronned <!> uncronned+ where+ cronned = withOS "propellor cron job" $ \w o -> do+ bootstrapper <- getBootstrapper+ ensureProperty w $+ niceJob "propellor" times (User "root") localdir+ (bootstrapPropellorCommand bootstrapper o ++ "; ./propellor")+ uncronned = jobDropped "propellor" times++-- Utility functions++cronjobname :: Desc -> String+cronjobname d = map sanitize d+ where+ sanitize c+ | isAlphaNum c = c+ | otherwise = '_'++scriptfile :: Desc -> FilePath+scriptfile d = "/usr/local/bin/" ++ (cronjobname d) ++ "_cronjob"++cronjobfile :: Desc -> Times -> FilePath+cronjobfile d times = "/etc" </> cronjobdir </> (cronjobname d)+ where+ cronjobdir = case times of+ Times _ -> "cron.d"+ Daily -> "cron.daily"+ Weekly -> "cron.weekly"+ Monthly -> "cron.monthly"
src/Propellor/Property/Debootstrap.hs view
@@ -15,7 +15,6 @@ import Propellor.Property.Chroot.Util import Propellor.Property.Qemu import Utility.Path-import Utility.FileMode import Data.List import Data.Char
src/Propellor/Property/DiskImage.hs view
@@ -42,7 +42,6 @@ import Propellor.Types.Bootloader import Propellor.Container import Utility.Path-import Utility.FileMode import Utility.DataUnits import Data.List (isPrefixOf, isInfixOf, sortBy, unzip4)
src/Propellor/Property/File.hs view
@@ -3,7 +3,6 @@ module Propellor.Property.File where import Propellor.Base-import Utility.FileMode import qualified Data.ByteString.Lazy as L import Data.List (isInfixOf, isPrefixOf)
src/Propellor/Property/HostingProvider/Linode.hs view
@@ -3,7 +3,6 @@ import Propellor.Base import qualified Propellor.Property.Grub as Grub import qualified Propellor.Property.File as File-import Utility.FileMode -- | Configures grub to use the serial console as set up by Linode. -- Useful when running a distribution supplied kernel.
+ src/Propellor/Property/Localdir.hs view
@@ -0,0 +1,61 @@+{-# LANGUAGE DeriveDataTypeable #-}++-- | Properties to manipulate propellor's @/usr/local/propellor@ on spun hosts++module Propellor.Property.Localdir where++import Propellor.Base+import Propellor.Git.Config+import Propellor.Types.Info+import Propellor.Property.Chroot (inChroot)+import Propellor.Property.Mount (partialBindMountsOf, umountLazy)++-- | Sets the url to use as the origin of propellor's git repository.+--+-- By default, the url is taken from the deploy or origin remote of+-- the repository that propellor --spin is run in. Setting this property+-- overrides that default behavior with a different url.+--+-- When hosts are being updated without using -- --spin, eg when using+-- the `Propellor.Property.Cron.runPropellor` cron job, this property can+-- be set to redirect them to a new git repository url.+hasOriginUrl :: String -> Property (HasInfo + UnixLike)+hasOriginUrl u = setInfoProperty p (toInfo (InfoVal (OriginUrl u)))+ where+ p :: Property UnixLike+ p = property ("propellor repo url " ++ u) $ do+ curru <- liftIO getRepoUrl+ if curru == Just u+ then return NoChange+ else makeChange $ setRepoUrl u++newtype OriginUrl = OriginUrl String+ deriving (Show, Typeable)++-- | Removes the @/usr/local/propellor@ directory used to spin the host, after+-- ensuring other properties. Without this property, that directory is left+-- behind after the spin.+--+-- Does not perform other clean up, such as removing Haskell libraries that were+-- installed in order to build propellor, or removing cronjobs such as created+-- by 'Propellor.Property.Cron.runPropellor'.+removed :: Property UnixLike+removed = check (doesDirectoryExist localdir) $+ property "propellor's /usr/local dir to be removed" $ do+ endAction "removing /usr/local/propellor" atend+ return NoChange+ where+ atend _ = do+ ifM inChroot+ -- In a chroot, all we have to do is unmount localdir,+ -- and then delete it+ ( liftIO $ umountLazy localdir+ -- Outside of a chroot, if we don't unmount any bind+ -- mounts of localdir before deleting it, another run of+ -- propellor will have problems reestablishing those+ -- bind mounts in order to spin chroots+ , liftIO $ partialBindMountsOf localdir+ >>= mapM_ umountLazy+ )+ liftIO $ removeDirectoryRecursive localdir+ return NoChange
src/Propellor/Property/Mount.hs view
@@ -89,6 +89,20 @@ . filter (dirContains target) <$> mountPoints +-- | Get mountpoints which are bind mounts of subdirectories of mounted+-- filesystems+--+-- E.g. as created by @mount --bind /etc/foo /etc/bar@ where @/etc/foo@ is not+-- itself a mount point, but just a subdirectory. These are sometimes known as+-- "partial bind mounts"+partialBindMountsOf :: FilePath -> IO [MountPoint]+partialBindMountsOf sourceDir =+ map (drop 2 . dropWhile (/= ']')) . filter getThem . lines+ <$> readProcess "findmnt" ["-rn", "--output", "source,target"]+ where+ getThem l = bracketed `isSuffixOf` (takeWhile (/= ' ') l)+ bracketed = "[" ++ sourceDir ++ "]"+ -- | Filesystem type mounted at a given location. getFsType :: MountPoint -> IO (Maybe FsType) getFsType p = findmntField "fstype" [p]
src/Propellor/Property/Openssl.hs view
@@ -5,9 +5,7 @@ import Propellor.Base import qualified Propellor.Property.Apt as Apt import qualified Propellor.Property.File as File-import Utility.FileMode import Utility.SafeCommand- installed :: Property DebianLike installed = Apt.installed ["openssl"]
− src/Propellor/Property/PropellorRepo.hs
@@ -1,29 +0,0 @@-{-# LANGUAGE DeriveDataTypeable #-}--module Propellor.Property.PropellorRepo where--import Propellor.Base-import Propellor.Git.Config-import Propellor.Types.Info---- | Sets the url to use as the origin of propellor's git repository.------ By default, the url is taken from the deploy or origin remote of--- the repository that propellor --spin is run in. Setting this property--- overrides that default behavior with a different url.------ When hosts are being updated without using -- --spin, eg when using--- the `Propellor.Property.Cron.runPropellor` cron job, this property can--- be set to redirect them to a new git repository url.-hasOriginUrl :: String -> Property (HasInfo + UnixLike)-hasOriginUrl u = setInfoProperty p (toInfo (InfoVal (OriginUrl u)))- where- p :: Property UnixLike- p = property ("propellor repo url " ++ u) $ do- curru <- liftIO getRepoUrl- if curru == Just u- then return NoChange- else makeChange $ setRepoUrl u--newtype OriginUrl = OriginUrl String- deriving (Show, Typeable)
src/Propellor/Property/Sbuild.hs view
@@ -29,6 +29,7 @@ > where > sidSchrootBuilt = Sbuild.built Sbuild.UseCcache $ props > & osDebian Unstable X86_32+> & Sbuild.osDebianStandard > & Sbuild.update `period` Weekly (Just 1) > & Sbuild.useHostProxy mybox @@ -65,6 +66,7 @@ -- * Properties for use inside sbuild schroots update, useHostProxy,+ osDebianStandard, -- * Global sbuild configuration -- blockNetwork, keypairGenerated,@@ -86,8 +88,8 @@ -- import qualified Propellor.Property.Firewall as Firewall import qualified Propellor.Property.Schroot as Schroot import qualified Propellor.Property.Reboot as Reboot+import qualified Propellor.Property.Localdir as Localdir import qualified Propellor.Property.User as User-import Utility.FileMode import Data.List @@ -222,8 +224,11 @@ schroot = Chroot.debootstrapped Debootstrap.BuilddD schrootRoot (Props schrootProps) schrootProps =- ps ++ [toChildProperty Apt.stdSourcesList- , toChildProperty $ Apt.installed ["eatmydata", "ccache"]]+ ps ++ [toChildProperty $ Apt.installed ["eatmydata", "ccache"]+ -- Drop /usr/local/propellor since build chroots should be+ -- clean. Note that propellor does not have to install its+ -- build-deps into the chroot, so this is sufficient cleanup+ , toChildProperty $ Localdir.removed] -- static values suiteArch = suite ++ "-" ++ arch@@ -250,6 +255,12 @@ _ -> base where base = ["eatmydata"]++-- | Properties that will be wanted in almost any Debian schroot, but not in+-- schroots for other operating systems.+osDebianStandard :: Property Debian+osDebianStandard = propertyList "standard Debian sbuild properties" $ props+ & Apt.stdSourcesList -- | Ensure that an sbuild schroot's packages and apt indexes are updated --
src/Propellor/Property/Schroot.hs view
@@ -9,8 +9,6 @@ import qualified Propellor.Property.File as File import qualified Propellor.Property.Apt as Apt -import Utility.FileMode- data UseOverlays = UseOverlays deriving (Eq, Show, Typeable) -- | Indicate that a schroots on a host should use @union-type=overlay@
src/Propellor/Property/Service.hs view
@@ -5,7 +5,6 @@ import Propellor.Base import Propellor.Types.Info import qualified Propellor.Property.File as File-import Utility.FileMode type ServiceName = String
src/Propellor/Property/SiteSpecific/Branchable.hs view
@@ -56,7 +56,7 @@ ] [ Borg.KeepDays 7 , Borg.KeepWeeks 5- , Borg.KeepMonths 12+ , Borg.KeepMonths 3 , Borg.KeepYears 1 ] & Ssh.userKeys (User "root") (Context "branchable.com")
src/Propellor/Property/SiteSpecific/JoeySites.hs view
@@ -25,7 +25,6 @@ import qualified Propellor.Property.Fail2Ban as Fail2Ban import qualified Propellor.Property.LetsEncrypt as LetsEncrypt import qualified Propellor.Property.Mount as Mount-import Utility.FileMode import Utility.Split import Data.List@@ -345,13 +344,7 @@ "tmp.joeyh.name" "26fd6e38-1226-11e2-a75f-ff007033bdba" []- & pumpRss---- Work around for expired ssl cert.--- (Obsolete; need to revert this.)-pumpRss :: Property DebianLike-pumpRss = Cron.job "pump rss" (Cron.Times "15 * * * *") (User "joey") "/srv/web/tmp.joeyh.name/"- "wget https://pump2rss.com/feed/joeyh@identi.ca.atom -O pump.atom.new --no-check-certificate 2>/dev/null; sed 's/ & / /g' pump.atom.new > pump.atom"+ & Cron.jobDropped "pump rss" (Cron.Times "15 * * * *") ircBouncer :: Property (HasInfo + DebianLike) ircBouncer = propertyList "IRC bouncer" $ props@@ -1162,7 +1155,7 @@ , "w3m", "sm", "weechat" , "borgbackup", "wipe", "smartmontools", "libgfshare-bin" , "units"- , "virtualbox", "qemu-kvm"+ , "virtualbox", "virtualbox-guest-additions-iso", "qemu-kvm" ] `requires` baseSoftware `requires` devSoftware
src/Propellor/Property/Ssh.hs view
@@ -40,7 +40,6 @@ import qualified Propellor.Property.Apt as Apt import Propellor.Property.User import Propellor.Types.Info-import Utility.FileMode import System.PosixCompat import qualified Data.Map as M
src/Propellor/Property/Systemd.hs view
@@ -55,7 +55,6 @@ import qualified Propellor.Property.Apt as Apt import qualified Propellor.Property.File as File import Propellor.Property.Systemd.Core-import Utility.FileMode import Utility.Split import Data.List
src/Propellor/Property/Tor.hs view
@@ -7,7 +7,6 @@ import qualified Propellor.Property.Apt as Apt import qualified Propellor.Property.Service as Service import qualified Propellor.Property.ConfFile as ConfFile-import Utility.FileMode import Utility.DataUnits import System.Posix.Files
src/Propellor/Shim.hs view
@@ -8,7 +8,6 @@ import Propellor.Base import Utility.LinuxMkLibs-import Utility.FileMode import Data.List import System.Posix.Files
src/Propellor/Spin.hs view
@@ -29,9 +29,8 @@ import Propellor.Bootstrap import Propellor.Types.CmdLine import Propellor.Types.Info-import Propellor.Property.PropellorRepo (OriginUrl(..))+import Propellor.Property.Localdir (OriginUrl(..)) import qualified Propellor.Shim as Shim-import Utility.FileMode import Utility.SafeCommand import Utility.Process.NonConcurrent
src/Propellor/Utilities.hs view
@@ -19,6 +19,7 @@ , module Utility.Tmp.Dir , module Utility.Monad , module Utility.Misc+ , module Utility.FileMode ) where import Utility.PartialPrelude@@ -33,3 +34,4 @@ import Utility.Tmp.Dir import Utility.Monad import Utility.Misc+import Utility.FileMode