[augeas-devel] [PATCH 2/6] Grub: parse kernel and module arguments
David Lutterkort
lutter at redhat.com
Thu Apr 9 23:17:05 UTC 2009
---
lenses/grub.aug | 45 ++++++++++++++++++++++++++++++-------------
lenses/tests/test_grub.aug | 17 ++++++++++-----
2 files changed, 42 insertions(+), 20 deletions(-)
diff --git a/lenses/grub.aug b/lenses/grub.aug
index ccfcc7e..8015a31 100644
--- a/lenses/grub.aug
+++ b/lenses/grub.aug
@@ -8,19 +8,25 @@ module Grub =
let value_to_eol = store /[^= \t\n][^\n]*[^= \t\n]|[^= \t\n]/
let eol = Util.eol
let del_to_eol = del /[^ \t\n]*/ ""
+ let spc = Util.del_ws_spc
let opt_ws = Util.del_opt_ws ""
+ let dels (s:string) = Util.del_str s
+ let eq = dels "="
+ let switch (n:string) = dels ("--" . n) . label n
let value_sep (dflt:string) = del /[ \t]*[ \t=][ \t]*/ dflt
+ let command (kw:string) (indent:string) =
+ Util.del_opt_ws indent . key kw
+
let kw_arg (kw:string) (indent:string) (dflt_sep:string) =
- [ Util.del_opt_ws indent . key kw . value_sep dflt_sep
- . value_to_eol . eol ]
+ [ command kw indent . value_sep dflt_sep . value_to_eol . eol ]
let kw_boot_arg (kw:string) = kw_arg kw "\t" " "
let kw_menu_arg (kw:string) = kw_arg kw "" "="
let password_arg = [ key "password" .
- (Util.del_ws_spc . [ Util.del_str "--md5" . label "md5" ])? .
- Util.del_ws_spc . store (/[^ \t\n]+/ - "--md5") .
- (Util.del_ws_spc . [ label "file" . store /[^ \t\n]+/ ])? .
+ (spc . [ switch "md5" ])? .
+ spc . store (/[^ \t\n]+/ - "--md5") .
+ (spc . [ label "file" . store /[^ \t\n]+/ ])? .
eol ]
let kw_pres (kw:string) = [ opt_ws . key kw . del_to_eol . eol ]
@@ -31,11 +37,11 @@ module Grub =
let color_name = store /[A-Za-z-]+/ in
let color_spec =
[ label "foreground" . color_name] .
- Util.del_str "/" .
+ dels "/" .
[ label "background" . color_name ] in
[ opt_ws . key "color" .
- Util.del_ws_spc . [ label "normal" . color_spec ] .
- (Util.del_ws_spc . [ label "highlight" . color_spec ])? .
+ spc . [ label "normal" . color_spec ] .
+ (spc . [ label "highlight" . color_spec ])? .
eol ]
let menu_setting = kw_menu_arg "default"
@@ -50,20 +56,31 @@ module Grub =
let title = del /title[ \t]+/ "title " . value_to_eol . eol
- let module_lines = [ label "modules" .
- Util.del_ws "\t" .
- Util.del_str "module" . Util.del_ws_spc
- . value_to_eol . eol ]
+ (* Parse the file name and args on a kernel or module line *)
+ let kernel_args =
+ let arg = Rx.word - /type|no-mem-option/ in
+ store /\/[^ \t\n]*/ .
+ (spc . [ key arg . (eq . store Rx.no_spaces)?])* . eol
+
+ let module_line =
+ [ command "module" "\t" . spc . kernel_args ]
+
+ let kernel =
+ [ command "kernel" "\t" .
+ (spc .
+ ([switch "type" . eq . store /[a-z]+/]
+ |[switch "no-mem-option"]))* .
+ spc . kernel_args ]
let boot_setting = kw_boot_arg "root"
- | kw_boot_arg "kernel"
+ | kernel
| kw_boot_arg "initrd"
| kw_boot_arg "rootnoverify"
| kw_boot_arg "chainloader"
| kw_boot_arg "uuid"
| kw_pres "quiet" (* Seems to be a Ubuntu extension *)
| kw_pres "savedefault"
- | module_lines
+ | module_line
let boot = [ label "title" . title . boot_setting* ]
diff --git a/lenses/tests/test_grub.aug b/lenses/tests/test_grub.aug
index 4b7818f..e104f35 100644
--- a/lenses/tests/test_grub.aug
+++ b/lenses/tests/test_grub.aug
@@ -51,20 +51,24 @@ title Fedora (2.6.24.3-34.fc8)
{ "hiddenmenu" }
{ "title" = "Fedora (2.6.24.4-64.fc8)"
{ "root" = "(hd0,0)" }
- { "kernel" = "/vmlinuz-2.6.24.4-64.fc8 ro root=/dev/vg00/lv00" }
+ { "kernel" = "/vmlinuz-2.6.24.4-64.fc8"
+ { "ro" } { "root" = "/dev/vg00/lv00" } }
{ "initrd" = "/initrd-2.6.24.4-64.fc8.img" } }
{ "title" = "Fedora (2.6.24.3-50.fc8)"
{ "root" = "(hd0,0)" }
- { "kernel" = "/vmlinuz-2.6.24.3-50.fc8 ro root=/dev/vg00/lv00" }
+ { "kernel" = "/vmlinuz-2.6.24.3-50.fc8"
+ { "ro" } { "root" = "/dev/vg00/lv00" } }
{ "initrd" = "/initrd-2.6.24.3-50.fc8.img" } }
{ "title" = "Fedora (2.6.21.7-3.fc8xen)"
{ "root" = "(hd0,0)" }
{ "kernel" = "/xen.gz-2.6.21.7-3.fc8" }
- { "modules" = "/vmlinuz-2.6.21.7-3.fc8xen ro root=/dev/vg00/lv00" }
- { "modules" = "/initrd-2.6.21.7-3.fc8xen.img" } }
+ { "module" = "/vmlinuz-2.6.21.7-3.fc8xen"
+ { "ro" } { "root" = "/dev/vg00/lv00" } }
+ { "module" = "/initrd-2.6.21.7-3.fc8xen.img" } }
{ "title" = "Fedora (2.6.24.3-34.fc8)"
{ "root" = "(hd0,0)" }
- { "kernel" = "/vmlinuz-2.6.24.3-34.fc8 ro root=/dev/vg00/lv00" }
+ { "kernel" = "/vmlinuz-2.6.24.3-34.fc8"
+ { "ro" } { "root" = "/dev/vg00/lv00" } }
{ "initrd" = "/initrd-2.6.24.3-34.fc8.img" } }
test Grub.lns put conf after set "default" "0" = conf
@@ -105,7 +109,8 @@ initrd\t\t/boot/initrd.img-2.6.18-6-vserver-686
test Grub.lns get boot_savedefault =
{ "title" = "Debian GNU/Linux, kernel 2.6.18-6-vserver-686"
{ "root" = "(hd0,0)" }
- { "kernel" = "/boot/vmlinuz-2.6.18-6-vserver-686 root=/dev/md0 ro" }
+ { "kernel" = "/boot/vmlinuz-2.6.18-6-vserver-686"
+ { "root" = "/dev/md0" } { "ro" } }
{ "initrd" = "/boot/initrd.img-2.6.18-6-vserver-686" }
{ "savedefault" } }
--
1.6.0.6
More information about the augeas-devel
mailing list