bootrecover: added udisks support, dropped hal

This commit is contained in:
Silvan Calarco 2011-09-05 01:28:56 +02:00
parent 9e32604293
commit d7ae79e2d5
2 changed files with 234 additions and 287 deletions

View File

@ -426,128 +426,6 @@ This tool is also useful before the installation of a third party boot manager i
<set>AlignCenter</set> <set>AlignCenter</set>
</property> </property>
</widget> </widget>
<widget class="ScriptObject">
<property name="name">
<cstring>setlabel</cstring>
</property>
<property name="geometry">
<rect>
<x>540</x>
<y>40</y>
<width>32</width>
<height>32</height>
</rect>
</property>
<property name="populationText">
<string></string>
</property>
<property name="associations" stdset="0">
<stringlist>
<string>@execBegin
@if (@devicesbox.currentItem &gt;= 0)
currdev=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0)
@showdevice.setText(@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0))
@dcop(@dcopid, KommanderIf, enableWidget(QString,bool), next, true)
@BackBox.setChecked(true)
parent_udi=`hal-find-by-property --key block.device --string /dev/$currdev`
#
# set MBR combo box
#
dcop @dcopid KommanderIf "clear(QString)" mbrbox
storages=`hal-find-by-capability --capability storage`
dcop @dcopid KommanderIf "addListItem(QString,QString,int)" mbrbox "$currdev (@i18n("System partition"))" 0
for udi in $storages; do
device=`hal-get-property --udi $udi --key block.device`
hotpluggable=`hal-get-property --udi $udi --key storage.hotpluggable` || hotpluggable="false"
partscheme=`hal-get-property --udi $udi --key storage.partitioning_scheme`
if [ "$partscheme" == "mbr" -a "$hotpluggable" != "true" ]; then
dcop @dcopid KommanderIf "addListItem(QString,QString,int)" mbrbox "${device:5:5} (master boot record)" 0
fi
done
dcop @dcopid KommanderIf "setCurrentItem(int)" 0
@endif
@execEnd
@setBootableCheckbox.execute()</string>
</stringlist>
</property>
</widget>
<widget class="ScriptObject">
<property name="name">
<cstring>scanDevices</cstring>
</property>
<property name="geometry">
<rect>
<x>540</x>
<y>0</y>
<width>32</width>
<height>32</height>
</rect>
</property>
<property name="associations" stdset="0">
<stringlist>
<string>@devicesbox.clear
@BackBox.setChecked(false)
@NextBox.setChecked(false)
@execBegin
volumes=`hal-find-by-capability --capability volume`
partlabel=
for udi in $volumes; do
device=`hal-get-property --udi $udi --key block.device`
parent_udi=`hal-get-property --udi $udi --key block.storage_device`
hotpluggable=`hal-get-property --udi $parent_udi --key storage.hotpluggable` || hotpluggable="false"
blocksize=`hal-get-property --udi $udi --key volume.block_size`
numblocks=`hal-get-property --udi $udi --key volume.num_blocks`
volsize=`expr $blocksize \* $numblocks / 1024 / 1024`
volname=`hal-get-property --udi $udi --key volume.label`
[ "$volname" ] || volname="unnamed"
parttype=`hal-get-property --udi $udi --key volume.partition.type`
[ "$parttype" ] || parttype="unknown"
partscheme=`hal-get-property --udi $udi --key volume.partition.scheme`
[ "$partscheme" ] || partscheme="unknown"
fstype=`hal-get-property --udi $udi --key volume.fstype`
[ "$fstype" ] || fstype="unformatted"
is_mounted=`hal-get-property --udi $udi --key volume.is_mounted`
[ "$is_mounted" = "true" ] || {
mkdir /mnt/${device:5:5} &amp;&amp; mount $device /mnt/${device:5:5}
}
mount_point=`hal-get-property --udi $udi --key volume.mount_point`
add_info=""
[ "$hotpluggable" = "true" ] &amp;&amp; {
add_info=",removable"
[ @removablebox.checked == 1 ] || continue
}
if [ "$partscheme" == "mbr" -o "$partscheme" == "embr" ]; then
partlabel="$partlabel&lt;br&gt;${device:5:5} $fstype $volname $volsize MB"
case "$parttype" in
0x82) ;;
0x83)
[ "$mount_point" -a -e $mount_point/etc/openmamba-release ] &amp;&amp; {
release=`cat $mount_point/etc/openmamba-release`
dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox "${device:5:5} $mount_point ($fstype,$volname,$volsize MB${add_info})" 0
}
;;
*) ;;
esac
elif [ "$partscheme" == "gpt" -o "$partscheme" == "unknown" -a $volsize -gt 0 ]; then
case "$fstype" in
swap|iso9660) ;;
ext2|ext3|reiserfs|unformatted)
[ "$mount_point" -a -e $mount_point/etc/openmamba-release ] &amp;&amp; {
release=`cat $mount_point/etc/openmamba-release`
dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox "${device:5:5} $mount_point $volsize MB ($release)" 0
}
;;
*) ;;
esac
fi
done
@execEnd
</string>
</stringlist>
</property>
</widget>
<widget class="GroupBox"> <widget class="GroupBox">
<property name="name"> <property name="name">
<cstring>PartitionBox</cstring> <cstring>PartitionBox</cstring>
@ -601,27 +479,6 @@ done
<set>WordBreak|AlignTop</set> <set>WordBreak|AlignTop</set>
</property> </property>
</widget> </widget>
<widget class="Label">
<property name="name">
<cstring>showdevice</cstring>
</property>
<property name="geometry">
<rect>
<x>230</x>
<y>340</y>
<width>280</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string></string>
</property>
<property name="associations" stdset="0">
<stringlist>
<string></string>
</stringlist>
</property>
</widget>
<widget class="Label"> <widget class="Label">
<property name="name"> <property name="name">
<cstring>Label3</cstring> <cstring>Label3</cstring>
@ -667,6 +524,157 @@ done
</stringlist> </stringlist>
</property> </property>
</widget> </widget>
<widget class="Label">
<property name="name">
<cstring>showdevice</cstring>
</property>
<property name="geometry">
<rect>
<x>180</x>
<y>340</y>
<width>350</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string></string>
</property>
<property name="associations" stdset="0">
<stringlist>
<string></string>
</stringlist>
</property>
</widget>
</widget>
<widget class="ScriptObject">
<property name="name">
<cstring>scanDevices</cstring>
</property>
<property name="geometry">
<rect>
<x>540</x>
<y>0</y>
<width>32</width>
<height>32</height>
</rect>
</property>
<property name="associations" stdset="0">
<stringlist>
<string>@devicesbox.clear
@BackBox.setChecked(false)
@NextBox.setChecked(false)
@execBegin
function get_udisks_key() {
LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|"
}
devices=`udisks --enumerate-device-files | grep -v /dev/disk | sort -n -r`
partlabel=
for device in $devices; do
native_path=`get_udisks_key $device native-path`
[ -e $native_path/partition ] || continue
is_system_internal=`get_udisks_key $device "system internal"`
volsize=`get_udisks_key $device size`
volsize=`expr $volsize / 1024 / 1024`
volname=`get_udisks_key $device label`
[ "$volname" ] || volname="unnamed"
parttype=`get_udisks_key $device usage`
[ "$parttype" ] || parttype="unknown"
partscheme=`get_udisks_key $device scheme`
[ "$partscheme" ] || partscheme="unknown"
fstype=`get_udisks_key $device type`
[ "$fstype" ] || fstype="unformatted"
add_info=""
is_mounted=`get_udisks_key $device "is mounted"`
[ "$is_mounted" = "1" ] || {
mkdir /mnt/${device:5:5} &amp;&amp; mount $device /mnt/${device:5:5}
}
mount_point=`get_udisks_key $device "mount paths"`
add_info=""
[ "$is_system_internal" == "1" ] || {
add_info=",removable"
[ @removablebox.checked == 1 ] || continue
}
if [ "$partscheme" == "mbr" -o "$partscheme" == "embr" ]; then
partlabel="$partlabel&lt;br&gt;${device:5:5} $fstype $volname $volsize MB"
case "$fstype" in
ext2|ext3|ext4|reiserfs|reiser4)
[ "$mount_point" -a -e $mount_point/etc/openmamba-release ] &amp;&amp; {
release=`cat $mount_point/etc/openmamba-release`
dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox "${device:5:5} $mount_point ($fstype,$volname,$volsize MB${add_info})" 0
}
;;
*) ;;
esac
elif [ "$partscheme" == "gpt" -o "$partscheme" == "unknown" -a $volsize -gt 0 ]; then
case "$fstype" in
swap|iso9660) ;;
ext2|ext3|ext4|reiserfs|reiser4)
[ "$mount_point" -a -e $mount_point/etc/openmamba-release ] &amp;&amp; {
release=`cat $mount_point/etc/openmamba-release`
dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox "${device:5:5} $mount_point $volsize MB ($release)" 0
}
;;
*) ;;
esac
fi
done
@execEnd
</string>
</stringlist>
</property>
</widget>
<widget class="ScriptObject">
<property name="name">
<cstring>setlabel</cstring>
</property>
<property name="geometry">
<rect>
<x>540</x>
<y>40</y>
<width>32</width>
<height>32</height>
</rect>
</property>
<property name="populationText">
<string></string>
</property>
<property name="associations" stdset="0">
<stringlist>
<string>@execBegin
function get_udisks_key() {
LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|"
}
@if (@devicesbox.currentItem &gt;= 0)
currdev=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0)
@showdevice.setText(@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0))
@dcop(@dcopid, KommanderIf, enableWidget(QString,bool), next, true)
@BackBox.setChecked(true)
#
# set MBR combo box
#
dcop @dcopid KommanderIf "clear(QString)" mbrbox
devices=`udisks --enumerate-device-files | grep -v /dev/disk`
dcop @dcopid KommanderIf "addListItem(QString,QString,int)" mbrbox "$currdev (@i18n("System partition"))" 0
for device in $devices; do
native_path=`get_udisks_key $d native-path`
[ ! -e $native_path/partition ] || continue
is_system_internal=`get_udisks_key $d "system internal"`
partscheme=`get_udisks_key $d scheme`
if [ "$is_system_internal" == "1" -o @removablebox.checked == 1 ]; then if [ "$partscheme" == "mbr" ]; then
dcop @dcopid KommanderIf "addListItem(QString,QString,int)" mbrbox "${device:5:5} (master boot record)" 0
fi
done
dcop @dcopid KommanderIf "setCurrentItem(int)" 0
@endif
@execEnd
@setBootableCheckbox.execute()
</string>
</stringlist>
</property>
</widget> </widget>
</widget> </widget>
<widget class="QWidget"> <widget class="QWidget">
@ -837,41 +845,6 @@ done
<set>WordBreak|AlignTop</set> <set>WordBreak|AlignTop</set>
</property> </property>
</widget> </widget>
<widget class="ScriptObject">
<property name="name">
<cstring>setBootableCheckbox</cstring>
</property>
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>520</x>
<y>70</y>
<width>32</width>
<height>32</height>
</rect>
</property>
<property name="associations" stdset="0">
<stringlist>
<string>@execBegin
mbrdevice=@String.section(@mbrbox.item(@mbrbox.currentItem)," ",0)
mbrpart=${mbrdevice:3:2}
if [ "$mbrpart" ]; then
if [ $mbrpart -le 4 ]; then
dcop @dcopid KommanderIf setEnabled bootableBox true
else
dcop @dcopid KommanderIf setEnabled bootableBox false
dcop @dcopid KommanderIf setChecked bootableBox false
fi
else
dcop @dcopid KommanderIf setEnabled bootableBox false
fi
@execEnd
</string>
</stringlist>
</property>
</widget>
<widget class="ListBox"> <widget class="ListBox">
<property name="name"> <property name="name">
<cstring>chainloadbox</cstring> <cstring>chainloadbox</cstring>
@ -907,6 +880,41 @@ fi
<set>WordBreak|AlignVCenter</set> <set>WordBreak|AlignVCenter</set>
</property> </property>
</widget> </widget>
<widget class="ScriptObject">
<property name="name">
<cstring>setBootableCheckbox</cstring>
</property>
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>520</x>
<y>70</y>
<width>32</width>
<height>32</height>
</rect>
</property>
<property name="associations" stdset="0">
<stringlist>
<string>@execBegin
mbrdevice=@String.section(@mbrbox.item(@mbrbox.currentItem)," ",0)
mbrpart=${mbrdevice:3:2}
if [ "$mbrpart" ]; then
if [ $mbrpart -le 4 ]; then
dcop @dcopid KommanderIf setEnabled bootableBox true
else
dcop @dcopid KommanderIf setEnabled bootableBox false
dcop @dcopid KommanderIf setChecked bootableBox false
fi
else
dcop @dcopid KommanderIf setEnabled bootableBox false
fi
@execEnd
</string>
</stringlist>
</property>
</widget>
</widget> </widget>
<widget class="ScriptObject"> <widget class="ScriptObject">
<property name="name"> <property name="name">
@ -927,38 +935,39 @@ fi
@chainloadbox.clear @chainloadbox.clear
@setBootableCheckbox.execute() @setBootableCheckbox.execute()
@execBegin @execBegin
function get_udisks_key() {
LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|"
}
installdevice=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0) installdevice=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0)
volumes=`hal-find-by-capability --capability volume` devices=`udisks --enumerate-device-files | grep -v /dev/disk | sort -n -r`
partlabel= partlabel=
for udi in $volumes; do for device in $devices; do
device=`hal-get-property --udi $udi --key block.device` native_path=`get_udisks_key $device native-path`
[ "${device:5:5}" = "$installdevice" ] &amp;&amp; continue [ -e $native_path/partition ] || continue
parent_udi=`hal-get-property --udi $udi --key block.storage_device` is_system_internal=`get_udisks_key $device "system internal"`
hotpluggable=`hal-get-property --udi $parent_udi --key storage.hotpluggable` || hotpluggable="false" volsize=`get_udisks_key $device size`
blocksize=`hal-get-property --udi $udi --key volume.block_size` volsize=`expr $volsize / 1024 / 1024`
numblocks=`hal-get-property --udi $udi --key volume.num_blocks`
volsize=`expr $blocksize \* $numblocks / 1024 / 1024`
[ $volsize = 0 ] &amp;&amp; continue [ $volsize = 0 ] &amp;&amp; continue
volname=`hal-get-property --udi $udi --key volume.label` volname=`get_udisks_key $device label`
mount_point=`hal-get-property --udi $udi --key volume.mount_point`
[ "$volname" ] || volname="unnamed" [ "$volname" ] || volname="unnamed"
parttype=`hal-get-property --udi $udi --key volume.partition.type` parttype=`get_udisks_key $device usage`
[ "$parttype" ] || parttype="unknown" [ "$parttype" ] || parttype="unknown"
partscheme=`hal-get-property --udi $udi --key volume.partition.scheme` partscheme=`get_udisks_key $device scheme`
[ "$partscheme" ] || partscheme="unknown" [ "$partscheme" ] || partscheme="unknown"
fstype=`hal-get-property --udi $udi --key volume.fstype` fstype=`get_udisks_key $device type`
[ "$fstype" ] || fstype="unformatted" [ "$fstype" ] || fstype="unformatted"
add_info="" add_info=""
[ "$hotpluggable" = "true" ] &amp;&amp; { [ "$is_system_internal" = "1" ] || {
add_info=",removable" add_info=",removable"
[ @removablebox.checked == 1 ] || continue [ @removablebox.checked == 1 ] || continue
} }
if [ "$partscheme" == "mbr" -o "$partscheme" == "embr" ]; then if [ "$partscheme" == "mbr" -o "$partscheme" == "embr" ]; then
partlabel="$partlabel&lt;br&gt;${device:5:5} $fstype $volname $volsize MB" partlabel="$partlabel&lt;br&gt;${device:5:5} $fstype $volname $volsize MB"
case "$parttype" in case "$fstype" in
0x82) ;; swap|iso9660|unformatted) ;;
0x83) ;; ext2|ext3|ext4|reiserfs|reiser4|unformatted) ;;
*) dcop @dcopid KommanderIf "addListItem(QString,QString,int)" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 0 *) dcop @dcopid KommanderIf "addListItem(QString,QString,int)" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 0
dcop @dcopid KommanderIf "setSelection" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" dcop @dcopid KommanderIf "setSelection" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})"
;; ;;
@ -966,7 +975,7 @@ for udi in $volumes; do
elif [ "$partscheme" == "gpt" -o "$partscheme" == "unknown" -a $volsize -gt 0 ]; then elif [ "$partscheme" == "gpt" -o "$partscheme" == "unknown" -a $volsize -gt 0 ]; then
case "$fstype" in case "$fstype" in
swap|iso9660|unformatted) ;; swap|iso9660|unformatted) ;;
ext2|ext3|reiserfs) ;; ext2|ext3|ext4|reiserfs|reiser4) ;;
*) dcop @dcopid KommanderIf "addListItem(QString,QString,int)" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 0 *) dcop @dcopid KommanderIf "addListItem(QString,QString,int)" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 0
dcop @dcopid KommanderIf "setSelection" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" dcop @dcopid KommanderIf "setSelection" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})"
;; ;;
@ -1025,6 +1034,33 @@ done
<set>AlignCenter</set> <set>AlignCenter</set>
</property> </property>
</widget> </widget>
<widget class="TextEdit">
<property name="name">
<cstring>installlog</cstring>
</property>
<property name="geometry">
<rect>
<x>20</x>
<y>60</y>
<width>540</width>
<height>360</height>
</rect>
</property>
<property name="hScrollBarMode">
<enum>AlwaysOn</enum>
</property>
<property name="textFormat">
<enum>LogText</enum>
</property>
<property name="populationText">
<string></string>
</property>
<property name="associations" stdset="0">
<stringlist>
<string></string>
</stringlist>
</property>
</widget>
<widget class="ScriptObject"> <widget class="ScriptObject">
<property name="name"> <property name="name">
<cstring>launchinstall</cstring> <cstring>launchinstall</cstring>
@ -1113,33 +1149,6 @@ _EOF
</stringlist> </stringlist>
</property> </property>
</widget> </widget>
<widget class="TextEdit">
<property name="name">
<cstring>installlog</cstring>
</property>
<property name="geometry">
<rect>
<x>20</x>
<y>60</y>
<width>540</width>
<height>360</height>
</rect>
</property>
<property name="hScrollBarMode">
<enum>AlwaysOn</enum>
</property>
<property name="textFormat">
<enum>LogText</enum>
</property>
<property name="populationText">
<string></string>
</property>
<property name="associations" stdset="0">
<stringlist>
<string></string>
</stringlist>
</property>
</widget>
</widget> </widget>
</widget> </widget>
<images> <images>

View File

@ -1,5 +1,5 @@
# openmamba boot loader recovery script # openmamba boot loader recovery script
# Copyright (c) 2007-2010 by Silvan Calarco <silvan.calarco@mambasoft.it> # Copyright (c) 2007-2011 by Silvan Calarco <silvan.calarco@mambasoft.it>
# #
# Released under the terms of the GNU GPLv3 License # Released under the terms of the GNU GPLv3 License
@ -72,61 +72,6 @@ Installation time: $TIME_ELAPSED minutes"
done done
} }
function find_driver_for_udi() {
local found_driver parent_udi
parent_udi=$1
while [ ! "$found_driver" -a "$parent_udi" != "/org/freedesktop/Hal/devices/computer" ]; do
parent_udi=`hal-get-property --udi $parent_udi --key info.parent 2>/dev/null`
[ "`hal-get-property --udi $parent_udi --key info.bus 2>/dev/null`" = "pci" ] &&
found_driver=`hal-get-property --udi $parent_udi --key info.linux.driver 2>/dev/null`
done
if [ "$found_driver" ]; then
echo $found_driver
return 0
else
return 1
fi
}
function find_remapped_device() {
local REMAPPED_INSTALL_DEVICE
tempfile=`tempfile 2>/dev/null`
mapfile=`tempfile 2>/dev/null`
# generate current volumes sorted list with driver information
storages=`hal-find-by-capability --capability storage`
for s in $storages; do
device=`hal-get-property --udi $s --key block.device`
linux_driver=`find_driver_for_udi $s`
[ "${device:5:2}" = "sd" ] && \
echo "${device:0:8} $linux_driver" >> $tempfile
done
# sort
cat $tempfile|sort > $mapfile
rm -f $tempfile
LETTERS=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
CURR_DRIVE_LETTER=0
while read line; do
set -- $line
[ "$1" = "$INSTALL_DISK_DEVICE" ] && REMAPPED_INSTALL_DEVICE="${INSTALL_DEVICE:0:7}${LETTERS[CURR_DRIVE_LETTER]}${INSTALL_DEVICE:8:2}"
[ "$2" = "$INSTALL_DRIVER" ] && {
DEV_NAME_ORIG=(${DEV_NAME_ORIG[*]} $1)
DEV_NAME_DEST=(${DEV_NAME_DEST[*]} ${1:0:7}${LETTERS[CURR_DRIVE_LETTER]})
let CURR_DRIVE_LETTER+=1
}
done < $mapfile
[ "$REMAPPED_INSTALL_DEVICE" ] || REMAPPED_INSTALL_DEVICE=$INSTALL_DEVICE
echo $REMAPPED_INSTALL_DEVICE
rm -f $mapfile
rm -f $tmpfile
}
DCOPID=$2 DCOPID=$2
echo $"\ echo $"\
@ -166,9 +111,6 @@ MOUNTPOINT=$INSTALL_MOUNTPOINT
abort abort
} }
REMAPPED_INSTALL_DEVICE=`find_remapped_device $INSTALL_DEVICE`
echo $"Install device $INSTALL_DEVICE will be known as $REMAPPED_INSTALL_DEVICE in the installed system" | tee -a $LOG_FILE
dcop_write $"Binding system dirs to new mountpoint..." 73 dcop_write $"Binding system dirs to new mountpoint..." 73
mount -o bind /dev $MOUNTPOINT/dev || { mount -o bind /dev $MOUNTPOINT/dev || {
echo $"Error: could not mount $MOUNTPOINT/dev; aborting." >&2 echo $"Error: could not mount $MOUNTPOINT/dev; aborting." >&2
@ -246,10 +188,6 @@ _EOF
} }
chroot $MOUNTPOINT update-grub | tee -a $LOGFILE chroot $MOUNTPOINT update-grub | tee -a $LOGFILE
[ "${INSTALL_DEVICE}" != "${REMAPPED_INSTALL_DEVICE}" ] && \
sed -i "s|root=/dev/${INSTALL_DEVICE:5:5}|root=/dev/${REMAPPED_INSTALL_DEVICE:5:5}|" \
$MOUNTPOINT/boot/grub/grub.cfg
else else
echo $"Info: skipping bootloader installation" | tee -a $LOG_FILE echo $"Info: skipping bootloader installation" | tee -a $LOG_FILE
fi fi