summaryrefslogtreecommitdiff
path: root/src/Propellor/Property/Grub.hs
diff options
context:
space:
mode:
authorJoey Hess <joeyh@debian.org>2014-07-09 22:11:31 -0400
committerJoey Hess <joeyh@debian.org>2014-07-09 22:11:31 -0400
commitf118c369d3240b656e4fef77b6efc758b3f714eb (patch)
tree0a3e0c6e134680e35665364b2cd6895863bcc990 /src/Propellor/Property/Grub.hs
parent17b21794a72f6cfaddda321d6f2cbdb87ce3dee0 (diff)
parent82da31b3e0e9acdfbca4c48eb12ab1f28515ba10 (diff)
Record propellor (0.8.1) in archive suite sid
Diffstat (limited to 'src/Propellor/Property/Grub.hs')
-rw-r--r--src/Propellor/Property/Grub.hs39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/Propellor/Property/Grub.hs b/src/Propellor/Property/Grub.hs
new file mode 100644
index 00000000..841861f4
--- /dev/null
+++ b/src/Propellor/Property/Grub.hs
@@ -0,0 +1,39 @@
+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"