module Propellor.Property.Grub where import Propellor import qualified Propellor.Property.File as File import qualified Propellor.Property.Apt as Apt -- | Eg, hd0,0 or xen/xvda1 type GrubDevice = String type TimeoutSecs = Int -- | Use PV-grub chaining to boot -- -- Useful when the VPS's pv-grub is too old to boot a modern kernel image. -- -- http://notes.pault.ag/linode-pv-grub-chainning/ -- -- The rootdev should be in the form "hd0", while the bootdev is in the form -- "xen/xvda". chainPVGrub :: GrubDevice -> GrubDevice -> TimeoutSecs -> Property chainPVGrub rootdev bootdev timeout = combineProperties desc [ File.dirExists "/boot/grub" , "/boot/grub/menu.lst" `File.hasContent` [ "default 1" , "timeout " ++ show timeout , "" , "title grub-xen shim" , "root (" ++ rootdev ++ ")" , "kernel /boot/xen-shim" , "boot" ] , "/boot/load.cf" `File.hasContent` [ "configfile (" ++ bootdev ++ ")/boot/grub/grub.cfg" ] , Apt.installed ["grub-xen"] , flagFile (scriptProperty ["update-grub; grub-mkimage --prefix '(" ++ bootdev ++ ")/boot/grub' -c /boot/load.cf -O x86_64-xen /usr/lib/grub/x86_64-xen/*.mod > /boot/xen-shim"]) "/boot/xen-shim" `describe` "/boot-xen-shim" ] where desc = "chain PV-grub"