[arch-releng] [PATCH] Moved kernel parameter generation into get_kernel_parameters
Matthew Gyurgyik
pyther at pyther.net
Mon Feb 7 19:03:09 EST 2011
On 02/07/2011 06:57 PM, Matthew Gyurgyik wrote:
> On 02/07/2011 04:32 PM, Dieter Plaetinck wrote:
>> On Sun, 30 Jan 2011 10:24:46 -0500
>> pyther at pyther.net wrote:
>>
>>> The function now stores parameters into var kernel_parameters. The
>>> new function does not set the kernel name (vmlinuz). This must now be
>>> done in the bootloader configuration code.
>>> ---
>>> src/core/libs/lib-ui-interactive.sh | 135
>>> +++++++++++++++++++---------------
>>> 1 files changed, 75 insertions(+), 60 deletions(-)
>>>
>>> diff --git a/src/core/libs/lib-ui-interactive.sh
>>> b/src/core/libs/lib-ui-interactive.sh
>>> index 829556a..359a016 100644
>>> --- a/src/core/libs/lib-ui-interactive.sh
>>> +++ b/src/core/libs/lib-ui-interactive.sh
>>> @@ -1045,79 +1045,30 @@ generate_grub_menulst() {
>>> fi
>>> fi
>>> # Now that we have our grub-legacy root device (grubdev).
>>> - # keep the file from being completely bogus
>>> + # keep the file from being completely bogus
>>> [ "$grubdev" = "DEVICE NOT FOUND" ]&& grubdev=
>>> if [ -z "$grubdev" ]; then
>>> - notify "Your root boot device could not be
>>> autodetected by setup. Ensure you adjust the 'root (hd0,0)' line in
>>> your GRUB config accordingly."
>>> - grubdev="(hd0,0)"
>>> - fi
>>> - # remove default entries by truncating file at our
>>> little tag (#-*)
>>> - sed -i -e '/#-\*/q' $grubmenu
>>> + notify "Your root boot device could not be autodetected by
>>> setup. Ensure you adjust the 'root (hd0,0)' line in your GRUB
>>> config accordingly."
>>> + grubdev="(hd0,0)"
>>> + fi
>>>
>>> - # find label or uuid of the root partition
>>> - case $PART_ACCESS in
>>> - label)
>>> - local _label="$(getlabel $_rootpart)"
>>> - if [ -n "${_label}" ]; then
>>> - _rootpart="/dev/disk/by-label/${_label}"
>>> - fi
>>> - ;;
>>> - uuid)
>>> - local _uuid="$(getuuid $_rootpart)"
>>> - if [ -n "${_uuid}" ]; then
>>> - _rootpart="/dev/disk/by-uuid/${_uuid}"
>>> - fi
>>> - ;;
>>> - esac
>>> + # remove default entries by truncating file at our little tag
>>> (#-*)
>>> + sed -i -e '/#-\*/q' $grubmenu
>>>
>>> - # handle dmraid/mdadm,lvm,dm_crypt etc. replace entries
>>> where needed automatically
>>> - kernel="kernel $subdir/vmlinuz26 root=${_rootpart} ro"
>>> - if get_anchestors_mount ';/;'
>>> - then
>>> - if echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q
>>> 'dm_crypt$'&& echo "$ANSWER_DEVICES" | sed -n '2p' | grep -q 'raw$'
>>> - then
>>> - debug 'FS' 'Grub kernel line? Found / on dm_crypt
>>> on raw'
>>> - raw_device=`echo "$ANSWER_DEVICES" | sed -n '2p' |
>>> cut -d ' ' -f1`
>>> - crypt_device=`echo "$ANSWER_DEVICES" | sed -n '1p'
>>> | cut -d ' ' -f1`
>>> - kernel="kernel $subdir/vmlinuz26 root=$crypt_device
>>> cryptdevice=$raw_device:`basename $crypt_device` ro"
>>> - elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q
>>> 'lvm-lv$'&& echo "$ANSWER_DEVICES" | sed -n '4p' | grep -q
>>> 'dm_crypt$'&& echo "$ANSWER_DEVICES" | sed -n '5p' | grep -q 'raw$'
>>> - then
>>> - debug 'FS' 'Grub kernel line? Found / on lvm on
>>> dm_crypt on raw'
>>> - lv_device=`echo "$ANSWER_DEVICES" | sed -n '1p' |
>>> cut -d ' ' -f1`
>>> - crypt_device=`echo "$ANSWER_DEVICES" | sed -n '4p'
>>> | cut -d ' ' -f1`
>>> - raw_device=`echo "$ANSWER_DEVICES" | sed -n '5p' |
>>> cut -d ' ' -f1`
>>> - kernel="kernel $subdir/vmlinuz26 root=$lv_device
>>> cryptdevice=$raw_device:`basename $crypt_device` ro"
>>> - elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q
>>> 'dm_crypt$'&& echo "$ANSWER_DEVICES" | sed -n '2p' | grep -q
>>> 'lvm-lv$'&& echo "$ANSWER_DEVICES" | sed -n '5p' | grep -q 'raw$'
>>> - then
>>> - debug 'FS' 'Grub kernel line? Found / on dm_crypt
>>> on lvm on raw'
>>> - crypt_device=`echo "$ANSWER_DEVICES" | sed -n '1p'
>>> | cut -d ' ' -f1`
>>> - lv_device=`echo "$ANSWER_DEVICES" | sed -n '2p' |
>>> cut -d ' ' -f1`
>>> - kernel="kernel $subdir/vmlinuz26 root=$crypt_device
>>> cryptdevice=$lv_device:`basename $crypt_device` ro"
>>> - elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q 'raw$'
>>> - then
>>> - debug 'FS' 'Grub kernel line? Found / on raw'
>>> - elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q
>>> 'lvm-lv$'&& echo "$ANSWER_DEVICES" | sed -n '4p' | grep -q 'raw$'
>>> - then
>>> - debug 'FS' 'Grub kernel line? Found / on lvm on raw'
>>> - else
>>> - debug 'FS' 'Grub kernel line? Could not figure this
>>> one out'
>>> - show_warning "Disk setup detection" "Are you using
>>> some really fancy dm_crypt/lvm/softraid setup?\nI could not figure
>>> it out, so the kernel line will be the default: you'll probably need
>>> to edit it.\nPlease file a bug for this and supply all files from
>>> /tmp/aif/"
>>> - fi
>>> - else
>>> - show_warning "Disk setup detection" "Could not find out
>>> where your / is. Did you setup filesystems/blockdevices?
>>> manual/autoprepare? If yes, please file a bug and tell us about this"
>>> - fi
>>> - cat>>$grubmenu<<EOF
>>> + get_kernel_parameters || return $?
>>> +
>>> + cat>>$grubmenu<<EOF
>>>
>>> # (0) Arch Linux
>>> title Arch Linux
>>> root $grubdev
>>> -$kernel
>>> +kernel $subdir/vmlinuz26 $kernel_parameters
>>> initrd $subdir/kernel26.img
>>>
>>> # (1) Arch Linux
>>> title Arch Linux Fallback
>>> root $grubdev
>>> -$kernel
>>> +kernel $subdir/vmlinuz26 $kernel_parameters
>>> initrd $subdir/kernel26-fallback.img
>>>
>>> # (2) Windows
>>> @@ -1179,6 +1130,70 @@ EOF
>>> fi
>>> }
>>>
>>> +get_kernel_parameters()
>>> +{
>>> + get_device_with_mount '/' || return 1
>>> + local _rootpart="$ANSWER_DEVICE"
>>> +
>>> + case "$PART_ACCESS" in
>>> + label)
>>> + local _label="$(getlabel $_rootpart)"
>>> + if [[ -n "${_label}" ]]; then
>> why the [[ ]]?
> It is recommended to use [[ ]] in bash when we are not trying to right
> a POSIX compliant script. However, [[ ]] implies -n by default.
> Therefore, I shortened the code as so: [[ "${_label}" ]] &&
> _rootpart="/dev/disk/by-label/${_label}"
>>> + _rootpart="/dev/disk/by-label/${_label}"
>>> + fi
>>> + ;;
>>> + uuid)
>>> + local _uuid="$(getuuid $_rootpart)"
>>> + if [[ -n "${_uuid}" ]]; then
>> same here.
>>> + _rootpart="/dev/disk/by-uuid/${_uuid}"
>>> + fi
>>> + ;;
>>> + esac
>>> +
>>> + kernel_parameters="root=$_rootpart ro"
>>> +
>>> + # No seperate /boot partition
>>> + if [[ -z "$bootdev" ]]; then
>>> + subdir='/boot'
>>> + fi
>> this branch seems useless in this function. the variable $subdir is
>> not used here?
>
> I was thinking that we could do this assignment here and use it for
> both the grub and Syslinux menu generation code. However, now looking
> at it, $subdir would have to be global variable. Since the check is
> simple and can be condensed to one line of code [[ -z "$bootdev" ]] &&
> local subdir="/boot" it would make more sense to add the assigment in
> generate_grub_menulst and generate_syslinux_menu. That code isn't very
> likely to change or get modified.
>
>
> -----------------------------------
>
> local raw_device crypt_device lv_device
>
> What do you think of making these variables local? As far as I can
> tell they are not used anywhere else in the code.
>>> +
>>> + if get_anchestors_mount ';/;'
>>> + then
>>> + if echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q
>>> 'dm_crypt$'&& echo "$ANSWER_DEVICES" | sed -n '2p' | grep -q 'raw$'
>> messed up indentation here.
> Woops, fixed. IIRC that is the way it was originally.
>
>
> I will reply to this email, with a patch of these changes so you can
> see the code that has changed.
My github commit:
https://github.com/pyther/aif/commit/9a3da9565c1308aa708ce917de48cccdda1f8182
I rebased and forced a push to github, therefore the above commit has
the updated code.
------
Use local variables for raw_device, crypt_device, lv_device
Fixed indentation and moved subdir assigment to generate_grub_menulst
---
src/core/libs/lib-ui-interactive.sh | 80
++++++++++++++++------------------
1 files changed, 38 insertions(+), 42 deletions(-)
diff --git a/src/core/libs/lib-ui-interactive.sh
b/src/core/libs/lib-ui-interactive.sh
index 359a016..e0ad6c9 100644
--- a/src/core/libs/lib-ui-interactive.sh
+++ b/src/core/libs/lib-ui-interactive.sh
@@ -1057,6 +1057,9 @@ generate_grub_menulst() {
get_kernel_parameters || return $?
+ # No seperate /boot partition
+ [[ -z "$bootdev" ]] && local subdir="/boot"
+
cat >>$grubmenu <<EOF
# (0) Arch Linux
@@ -1132,62 +1135,55 @@ EOF
get_kernel_parameters()
{
+
get_device_with_mount '/' || return 1
local _rootpart="$ANSWER_DEVICE"
case "$PART_ACCESS" in
label)
local _label="$(getlabel $_rootpart)"
- if [[ -n "${_label}" ]]; then
- _rootpart="/dev/disk/by-label/${_label}"
- fi
+ [[ "${_label}" ]] && _rootpart="/dev/disk/by-label/${_label}"
;;
uuid)
local _uuid="$(getuuid $_rootpart)"
- if [[ -n "${_uuid}" ]]; then
- _rootpart="/dev/disk/by-uuid/${_uuid}"
- fi
+ [[ "${_uuid}" ]] && _rootpart="/dev/disk/by-uuid/${_uuid}"
;;
esac
kernel_parameters="root=$_rootpart ro"
- # No seperate /boot partition
- if [[ -z "$bootdev" ]]; then
- subdir='/boot'
- fi
-
- if get_anchestors_mount ';/;'
- then
- if echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q 'dm_crypt$' &&
echo "$ANSWER_DEVICES" | sed -n '2p' | grep -q 'raw$'
- then
- debug 'FS' 'get_kernel_parameters - Found / on dm_crypt on raw'
- raw_device="$(echo "$ANSWER_DEVICES" | sed -n '2p' | cut -d
' ' -f1)"
- crypt_device="$(echo "$ANSWER_DEVICES" | sed -n '1p' | cut
-d ' ' -f1)"
- kernel_parameters="root=$crypt_device
cryptdevice=$raw_device:`basename $crypt_device` ro"
- elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q 'lvm-lv$'
&& echo "$ANSWER_DEVICES" | sed -n '4p' | grep -q 'dm_crypt$' && echo
"$ANSWER_DEVICES" | sed -n '5p' | grep -q 'raw$'
- then
- debug 'FS' 'get_kernel_parameters - Found / on lvm on dm_crypt
on raw'
- lv_device="$(echo "$ANSWER_DEVICES" | sed -n '1p' | cut -d
' ' -f1)"
- crypt_device="$(echo "$ANSWER_DEVICES" | sed -n '4p' | cut
-d ' ' -f1)"
- raw_device="$(echo "$ANSWER_DEVICES" | sed -n '5p' | cut -d
' ' -f1)"
- kernel_parameters="root=$lv_device
cryptdevice=$raw_device:`basename $crypt_device` ro"
- elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q 'dm_crypt$'
&& echo "$ANSWER_DEVICES" | sed -n '2p' | grep -q 'lvm-lv$' && echo
"$ANSWER_DEVICES" | sed -n '5p' | grep -q 'raw$'
- then
- debug 'FS' 'get_kernel_parameters - Found / on dm_crypt on
lvm on raw'
- crypt_device="$(echo "$ANSWER_DEVICES" | sed -n '1p' | cut
-d ' ' -f1)"
- lv_device="$(echo "$ANSWER_DEVICES" | sed -n '2p' | cut -d
' ' -f1)"
- kernel_parameters="root=$crypt_device
cryptdevice=$lv_device:`basename $crypt_device` ro"
- elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q 'raw$'
- then
- debug 'FS' 'get_kernel_parameters - Found / on raw'
- elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q 'lvm-lv$'
&& echo "$ANSWER_DEVICES" | sed -n '4p' | grep -q 'raw$'
- then
- debug 'FS' 'get_kernel_parameters - Found / on lvm on raw'
- else
- debug 'FS' 'get_kernel_parameters - Could not figure this
one out'
- show_warning "Disk setup detection" "Are you using some
really fancy dm_crypt/lvm/softraid setup?\nI could not figure it out, so
the kernel line will be the default: you'll probably need to edit
it.\nPlease file a bug for this and supply all files from /tmp/aif/"
- fi
+ local raw_device crypt_device lv_device
+
+ if get_anchestors_mount ';/;'; then
+ if echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q 'dm_crypt$'
&& echo "$ANSWER_DEVICES" | sed -n '2p' | grep -q 'raw$'
+ then
+ debug 'FS' 'get_kernel_parameters - Found / on dm_crypt
on raw'
+ raw_device="$(echo "$ANSWER_DEVICES" | sed -n '2p' |
cut -d ' ' -f1)"
+ crypt_device="$(echo "$ANSWER_DEVICES" | sed -n '1p' |
cut -d ' ' -f1)"
+ kernel_parameters="root=$crypt_device
cryptdevice=$raw_device:`basename $crypt_device` ro"
+ elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q
'lvm-lv$' && echo "$ANSWER_DEVICES" | sed -n '4p' | grep -q 'dm_crypt$'
&& echo "$ANSWER_DEVICES" | sed -n '5p' | grep -q 'raw$'
+ then
+ debug 'FS' 'get_kernel_parameters - Found / on lvm on
dm_crypt on raw'
+ lv_device="$(echo "$ANSWER_DEVICES" | sed -n '1p' | cut
-d ' ' -f1)"
+ crypt_device="$(echo "$ANSWER_DEVICES" | sed -n '4p' |
cut -d ' ' -f1)"
+ raw_device="$(echo "$ANSWER_DEVICES" | sed -n '5p' |
cut -d ' ' -f1)"
+ kernel_parameters="root=$lv_device
cryptdevice=$raw_device:`basename $crypt_device` ro"
+ elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q
'dm_crypt$' && echo "$ANSWER_DEVICES" | sed -n '2p' | grep -q 'lvm-lv$'
&& echo "$ANSWER_DEVICES" | sed -n '5p' | grep -q 'raw$'
+ then
+ debug 'FS' 'get_kernel_parameters - Found / on dm_crypt
on lvm on raw'
+ crypt_device="$(echo "$ANSWER_DEVICES" | sed -n '1p' |
cut -d ' ' -f1)"
+ lv_device="$(echo "$ANSWER_DEVICES" | sed -n '2p' | cut
-d ' ' -f1)"
+ kernel_parameters="root=$crypt_device
cryptdevice=$lv_device:`basename $crypt_device` ro"
+ elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q 'raw$'
+ then
+ debug 'FS' 'get_kernel_parameters - Found / on raw'
+ elif echo "$ANSWER_DEVICES" | sed -n '1p' | grep -q
'lvm-lv$' && echo "$ANSWER_DEVICES" | sed -n '4p' | grep -q 'raw$'
+ then
+ debug 'FS' 'get_kernel_parameters - Found / on lvm on raw'
+ else
+ debug 'FS' 'get_kernel_parameters - Could not figure
this one out'
+ show_warning "Disk setup detection" "Are you using some
really fancy dm_crypt/lvm/softraid setup?\nI could not figure it out, so
the kernel line will be the default: you'll probably need to edit
it.\nPlease file a bug for this and supply all files from /tmp/aif/"
+ fi
else
show_warning "Disk setup detection" "Could not find out where
your / is. Did you setup filesystems/blockdevices? manual/autoprepare?
If yes, please file a bug and tell us about this"
return 1
--
1.7.4
More information about the arch-releng
mailing list