2014-07-07 06:58:34 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
-- | 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 -> Property
|
|
|
|
chainPVGrub rootdev bootdev = combineProperties desc
|
2014-07-07 07:08:12 +00:00
|
|
|
[ File.dirExists "/boot/grub"
|
|
|
|
, "/boot/grub/menu.lst" `File.hasContent`
|
2014-07-07 06:58:34 +00:00
|
|
|
[ "default 1"
|
|
|
|
, "timeout 30"
|
|
|
|
, ""
|
|
|
|
, "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"
|