propellor 4.1.0 → 4.2.0
raw patch · 6 files changed
+87/−53 lines, 6 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Propellor.Property.DiskImage: grubBooted :: BIOS -> Finalization
+ Propellor.Property.DiskImage: grubBooted :: Finalization
- Propellor.Property.DiskImage: type Finalization = (Property Linux, FilePath -> [LoopDev] -> Property Linux)
+ Propellor.Property.DiskImage: type Finalization = FilePath -> [LoopDev] -> Property Linux
Files
- CHANGELOG +16/−0
- debian/changelog +16/−0
- joeyconfig.hs +3/−1
- propellor.cabal +1/−1
- src/Propellor/Property/DiskImage.hs +47/−49
- src/Propellor/Property/Grub.hs +4/−2
CHANGELOG view
@@ -1,3 +1,19 @@+propellor (4.2.0) unstable; urgency=medium++ * DiskImage.grubBooted no longer takes a BIOS parameter,+ and no longer implicitly adds Grub.installed to the properties of+ the disk image. If you used DiskImage.grubBooted, you'll need to update+ your propellor configuration, removing the BIOS parameter from+ grubBooted and adding a Grub.installed property to the disk image, eg:+ & Grub.installed PC+ (API change)+ * Grub.installed: Avoid running update-grub when used in a chroot, since+ it will get confused.+ * DiskImage.Finalization: Simplified this type since it does not need to+ be used to install packages anymore. (API change)++ -- Joey Hess <id@joeyh.name> Wed, 05 Jul 2017 18:10:49 -0400+ propellor (4.1.0) unstable; urgency=medium * User.hasInsecurePassword makes sure shadow passwords are enabled,
debian/changelog view
@@ -1,3 +1,19 @@+propellor (4.2.0) unstable; urgency=medium++ * DiskImage.grubBooted no longer takes a BIOS parameter,+ and no longer implicitly adds Grub.installed to the properties of+ the disk image. If you used DiskImage.grubBooted, you'll need to update+ your propellor configuration, removing the BIOS parameter from+ grubBooted and adding a Grub.installed property to the disk image, eg:+ & Grub.installed PC+ (API change)+ * Grub.installed: Avoid running update-grub when used in a chroot, since+ it will get confused.+ * DiskImage.Finalization: Simplified this type since it does not need to+ be used to install packages anymore. (API change)++ -- Joey Hess <id@joeyh.name> Wed, 05 Jul 2017 18:10:49 -0400+ propellor (4.1.0) unstable; urgency=medium * User.hasInsecurePassword makes sure shadow passwords are enabled,
joeyconfig.hs view
@@ -99,7 +99,7 @@ & imageBuilt "/srv/propellor-disk.img" (Chroot.hostChroot demo (Chroot.Debootstrapped mempty))- MSDOS (grubBooted PC)+ MSDOS grubBooted [ partition EXT2 `mountedAt` "/boot" `setFlag` BootFlag , partition EXT4 `mountedAt` "/"@@ -113,8 +113,10 @@ demo = host "demo" $ props & osDebian Unstable X86_64 & Apt.installed ["linux-image-amd64"]+ & Grub.installed PC & bootstrappedFrom GitRepoOutsideChroot & User.accountFor user+ & User.hasDesktopGroups user & root `User.hasInsecurePassword` "debian" & user `User.hasInsecurePassword` "debian" & XFCE.installedMin
propellor.cabal view
@@ -1,5 +1,5 @@ Name: propellor-Version: 4.1.0+Version: 4.2.0 Cabal-Version: >= 1.20 License: BSD2 Maintainer: Joey Hess <id@joeyh.name>
src/Propellor/Property/DiskImage.hs view
@@ -71,7 +71,7 @@ -- > -- > foo = host "foo.example.com" $ props -- > & imageBuilt "/srv/diskimages/disk.img" mychroot--- > MSDOS (grubBooted PC)+-- > MSDOS grubBooted -- > [ partition EXT2 `mountedAt` "/boot" -- > `setFlag` BootFlag -- > , partition EXT4 `mountedAt` "/"@@ -83,6 +83,7 @@ -- > mychroot d = debootstrapped mempty d $ props -- > & osDebian Unstable X86_64 -- > & Apt.installed ["linux-image-amd64"]+-- > & Grub.installed PC -- > & User.hasPassword (User "root") -- > & User.accountFor (User "demo") -- > & User.hasPassword (User "demo")@@ -96,7 +97,7 @@ -- > foo = host "foo.example.com" $ props -- > & imageBuilt "/srv/diskimages/bar-disk.img" -- > (hostChroot bar (Debootstrapped mempty))--- > MSDOS (grubBooted PC)+-- > MSDOS grubBooted -- > [ partition EXT2 `mountedAt` "/boot" -- > `setFlag` BootFlag -- > , partition EXT4 `mountedAt` "/"@@ -108,6 +109,7 @@ -- > bar = host "bar.example.com" $ props -- > & osDebian Unstable X86_64 -- > & Apt.installed ["linux-image-amd64"]+-- > & Grub.installed PC -- > & hasPassword (User "root") imageBuilt :: DiskImage -> (FilePath -> Chroot) -> TableType -> Finalization -> [PartSpec] -> RevertableProperty (HasInfo + DebianLike) Linux imageBuilt = imageBuilt' False@@ -139,8 +141,6 @@ -- Before ensuring any other properties of the chroot, -- avoid starting services. Reverted by imageFinalized. &^ Chroot.noServices- -- First stage finalization.- & fst final & cachesCleaned -- Only propagate privdata Info from this chroot, nothing else. propprivdataonly (Chroot.Chroot d b ip h) =@@ -269,20 +269,17 @@ -- Common sector sizes are 512 and 4096; use 4096 as it's larger. sectorsize = 4096 :: Double --- | A pair of properties. The first property is satisfied within the--- chroot, and is typically used to download the boot loader.------ The second property is run after the disk image is created,--- with its populated partition tree mounted in the provided--- location from the provided loop devices. This will typically--- take care of installing the boot loader to the image.+-- | A property that is run after the disk image is created, with+-- its populated partition tree mounted in the provided+-- location from the provided loop devices. This is typically used to+-- install a boot loader in the image's superblock. ----- It's ok if the second property leaves additional things mounted+-- It's ok if the property leaves additional things mounted -- in the partition tree.-type Finalization = (Property Linux, (FilePath -> [LoopDev] -> Property Linux))+type Finalization = (FilePath -> [LoopDev] -> Property Linux) imageFinalized :: Finalization -> [Maybe MountPoint] -> [MountOpts] -> [LoopDev] -> PartTable -> Property Linux-imageFinalized (_, final) mnts mntopts devs (PartTable _ parts) =+imageFinalized final mnts mntopts devs (PartTable _ parts) = property' "disk image finalized" $ \w -> withTmpDir "mnt" $ \top -> go w top `finally` liftIO (unmountall top)@@ -327,47 +324,48 @@ allowservices top = nukeFile (top ++ "/usr/sbin/policy-rc.d") noFinalization :: Finalization-noFinalization = (doNothing, \_ _ -> doNothing)+noFinalization = \_ _ -> doNothing -- | Makes grub be the boot loader of the disk image.-grubBooted :: Grub.BIOS -> Finalization-grubBooted bios = (Grub.installed' bios, boots)+--+-- This does not install the grub package. You will need to add+-- the `Grub.installed` property to the chroot.+grubBooted :: Finalization+grubBooted mnt loopdevs = combineProperties "disk image boots using grub" $ props+ -- bind mount host /dev so grub can access the loop devices+ & bindMount "/dev" (inmnt "/dev")+ & mounted "proc" "proc" (inmnt "/proc") mempty+ & mounted "sysfs" "sys" (inmnt "/sys") mempty+ -- update the initramfs so it gets the uuid of the root partition+ & inchroot "update-initramfs" ["-u"]+ `assume` MadeChange+ -- work around for http://bugs.debian.org/802717+ & check haveosprober (inchroot "chmod" ["-x", osprober])+ & inchroot "update-grub" []+ `assume` MadeChange+ & check haveosprober (inchroot "chmod" ["+x", osprober])+ & inchroot "grub-install" [wholediskloopdev]+ `assume` MadeChange+ -- sync all buffered changes out to the disk image+ -- may not be necessary, but seemed needed sometimes+ -- when using the disk image right away.+ & cmdProperty "sync" []+ `assume` NoChange where- boots mnt loopdevs = combineProperties "disk image boots using grub" $ props- -- bind mount host /dev so grub can access the loop devices- & bindMount "/dev" (inmnt "/dev")- & mounted "proc" "proc" (inmnt "/proc") mempty- & mounted "sysfs" "sys" (inmnt "/sys") mempty- -- update the initramfs so it gets the uuid of the root partition- & inchroot "update-initramfs" ["-u"]- `assume` MadeChange- -- work around for http://bugs.debian.org/802717- & check haveosprober (inchroot "chmod" ["-x", osprober])- & inchroot "update-grub" []- `assume` MadeChange- & check haveosprober (inchroot "chmod" ["+x", osprober])- & inchroot "grub-install" [wholediskloopdev]- `assume` MadeChange- -- sync all buffered changes out to the disk image- -- may not be necessary, but seemed needed sometimes- -- when using the disk image right away.- & cmdProperty "sync" []- `assume` NoChange- where- -- cannot use </> since the filepath is absolute- inmnt f = mnt ++ f+ -- cannot use </> since the filepath is absolute+ inmnt f = mnt ++ f - inchroot cmd ps = cmdProperty "chroot" ([mnt, cmd] ++ ps)+ inchroot cmd ps = cmdProperty "chroot" ([mnt, cmd] ++ ps) - haveosprober = doesFileExist (inmnt osprober)- osprober = "/etc/grub.d/30_os-prober"+ haveosprober = doesFileExist (inmnt osprober)+ osprober = "/etc/grub.d/30_os-prober" - -- It doesn't matter which loopdev we use; all- -- come from the same disk image, and it's the loop dev- -- for the whole disk image we seek.- wholediskloopdev = case loopdevs of- (l:_) -> wholeDiskLoopDev l- [] -> error "No loop devs provided!"+ -- It doesn't matter which loopdev we use; all+ -- come from the same disk image, and it's the loop dev+ -- for the whole disk image we seek.+ wholediskloopdev = case loopdevs of+ (l:_) -> wholeDiskLoopDev l+ [] -> error "No loop devs provided!" isChild :: FilePath -> Maybe MountPoint -> Bool isChild mntpt (Just d)
src/Propellor/Property/Grub.hs view
@@ -3,6 +3,7 @@ import Propellor.Base import qualified Propellor.Property.File as File import qualified Propellor.Property.Apt as Apt+import Propellor.Property.Chroot (inChroot) -- | Eg, \"hd0,0\" or \"xen/xvda1\" type GrubDevice = String@@ -18,9 +19,10 @@ -- | Installs the grub package. This does not make grub be used as the -- bootloader. ----- This includes running update-grub.+-- This includes running update-grub, unless it's run in a chroot. installed :: BIOS -> Property DebianLike-installed bios = installed' bios `onChange` mkConfig+installed bios = installed' bios + `onChange` (check (not <$> inChroot) mkConfig) -- Run update-grub, to generate the grub boot menu. It will be -- automatically updated when kernel packages are installed.