Какой сценарий используется для создания usbboot раздел и установка личинки в mkusb

Какой сценарий используется для создания раздела 3, (usbboot), и установка личинки в mkusb.

Я пытаюсь ответить на вопрос в ASK относительно создания мультиначальной загрузки USB с нуля, но врезаться в стену с установкой grub2 и папка личинки и раздел начальной загрузки.

Большинство ответов, в которых я могу найти, Просит, чтобы касающаяся личинка установки относилась к личинке прежней версии не grub2.

Я пытался смотреть на исходный код mkusb, но все, что я видел, было туманом.

Ссылка на сценарий оболочки высоко ценилась бы.

1
задан 27 October 2019 в 14:32

1 ответ

Короткий ответ

В mkusb я использую сценарий оболочки dus-persistent для создания персистентной живой системы. Это состоит из нескольких функций и конкретно функции grub_n_iso, чтобы создать разделы и поместить вещи в них. (Имя наследовано от старая система , где файлы ISO использовались.)

Более длинный ответ

, Если Вы уже имеете установленный mkusb, можно считать файл dus-persistent с less или с любимым текстовым редактором.

less /usr/sbin/dus-persistent

, Если Вы еще не установили его, можно считать его через следующую ссылку,

phillw.net/isos/linux-tools/mkusb/dus-persistent

Подробный ответ

, Но я думаю, что Вы хотите более подробную информацию, которая показывает детали, где третий раздел usbboot создается и заполняется содержанием (grub).

1. От функции grub_n_iso

echo "item 30"
echo "30
# make partitions: preparing $part" >> "$tailfile"

if $grubimg
then
 /bin/echo -e "$inversvid using grub.img: keeping file system of $part: $resetvid "
else
 echo "preparing $part  ------------------------------------------------"
 dd if=/dev/zero of="$part" bs=1024 count=1024 2>&1
 sync
 umount  "$part" 2>&1
 sync
 sleep 1
 mkfs.vfat -v -F 32 "$part"
 echo " "
 sync
 sleep 0.5
fi

В нескольких версиях Ubuntu при установке трудно создать личинку для 'другого' режима начальной загрузки, особенно создать личинку для режима BIOS при начальной загрузке в режиме UEFI. Поэтому существует изображение grub.img, подготовлено как описанный ниже, который может использоваться.

, Когда подходящий, раздел создается с [1 113], и это будет маркировано usbboot.

label="usbboot"
dosfslabel "$part" "$label"

2. От функции grub_n_iso

echo "item 70"
echo "70
# installing bootloaders" >> "$tailfile"

if [ "$distr" == "opensuse" ]
then
 grub_inst=grub2-install
else
 grub_inst=grub-install
fi

if $grubimg
then
 /bin/echo -ne "$inversvid UEFI Bootloader: $resetvid "
 $grub_inst --force --removable --no-floppy --boot-directory="$targ1"/boot \
 --efi-directory="$targ1"/EFI/BOOT "$2" 2>&1
fi

if $biosbl
then
 /bin/echo -ne "$inversvid UEFI Bootloader: $resetvid "
 $grub_inst --force --removable --no-floppy --boot-directory="$targ1"/boot \
 --efi-directory="$targ1"/EFI/BOOT "$2" 2>&1
elif ! test -f "$looper"/boot/grub/grub.cfg
then
 if test -f "$mkusb_sdir"/usb-pack_efi.tar.gz
 then
  if ! $upefi
  then
   echo "$inversvid Select 'upefi' to use 'usb-pack-efi' $resetvid"
  fi
 else
  /bin/echo -e "$inversvid No 'grub.cfg' for the UEFI Bootloader found in the iso file $resetvid
${version% *} needs the package 'usb-pack-efi' with the file
'usb-pack_efi.tar.gz' to make a persistent live system with
this iso file boot in UEFI mode."
  if test -f /usr/bin/apt-get
  then
   echo "You can use the following command lines in a terminal window.

sudo add-apt-repository ppa:mkusb/ppa
sudo apt-get update
sudo apt-get install usb-pack-efi"
  else
   echo "
Use search string 'ubuntu dus-plus' for the tarball 'dus-plus' which contains
'usb-pack-efi'. Be prepared to tweak the system manually afterwards. It may be
difficult to create a persistent live system in your linux distro."
   echo "$separator"
  fi
 fi
 if $grubimg
 then
  /bin/echo -e "$inversvid BIOS Bootloader via 'grub.img': $resetvid "
 else
  /bin/echo -ne "$inversvid BIOS Bootloader: $resetvid "
  $grub_inst --force --removable --no-floppy --boot-directory="$targ1"/boot "$2" 2>&1
 fi
fi
  • команда grub-install используется (в Ubuntu и Debian). Это использует опцию --efi-directory для загрузчика UEFI.

  • , Если установка 'upefi' (usb-pack-efi) выбрана или необходима, она будет извлечена.

  • команда grub-install используется снова. По очевидным причинам это делает не , используют опцию --efi-directory для загрузчика BIOS.

3. От функции grub_n_iso

echo "item 80"
echo "80
# copying files ..." >> "$tailfile"

error=""

# start copy/extract boot files (not upefi) ----------------------------

if ! $upefi && test -f "$looper"/boot/grub/grub.cfg
then

# copy the boot files from the iso file

/bin/echo -e "$inversvid 64-bit bootloader: copy the boot files from the iso file $resetvid"
echo "looper=$looper"
echo "targ1=$targ1"

rsync -Ha --exclude=filesystem.squashfs "$looper/" "$targ1"
symlink_error_comment="rsync:$inversvid  don't worry, $resetvid symlink errors are *expected*
because of the target file system."
/bin/echo -e "$symlink_error_comment"
#if [ "$disk_name_type" == "debian" ] && [ "$release" == "stretch" ]
#then
# mount -o loop "$looper"/boot/grub/efi.img "$loopefi"
# rsync -Ha "$loopefi/efi" "$targ1"
# umount  "$loopefi"
# ls -l "$targ1"|grep ^d    ###
# find "$targ1/efi"         ###
# read -p "after rsync efi" ###
#fi

is_file "$targ1"/boot/grub/grub.cfg
if [ $? -ne 0 ]
then
 echo "'$targ1/boot/grub/grub.cfg': file not found"
 echo "This way to use ${version% *} needs 'grub.cfg' from the source iso file,"
 echo "and it is available in Debian and Ubuntu family *amd64* iso files"
 clear_grn "$pid" "$looper" "$targ1" "$tailfile" "$usbdata"
 exit
fi

# tweak 1 grub.cfg

sed "$targ1"/boot/grub/grub.cfg \
-e '/menuentry/a \ set root=(hd0,4)' \
-e '/linux/s#/#($root)/#' \
-e '/initrd/s#/#($root)/#' \
> "$targ1"/boot/grub/grub.cfg0
sync
menu_entry_1 "$targ1"/boot/grub/grub.cfg0 "$targ1"/boot/grub/grub.cfg
if [ $? -ne 0 ]
then
 error="$error - menu_entry_1: tweaking grub.cfg"
fi
rm "$targ1"/boot/grub/grub.cfg0

else  # ... copy/extract boot files (upefi) ----------------------------

# extract files originally from Andre's zip-file (except grub.cfg grub4dos/ ini/)

if $grubimg
then
 /bin/echo -e "$inversvid Bootloaders via 'grub.img', skipping 'usb-pack_efi': $resetvid "
 rm "$targ1"/boot/grub/grub.cfg
else
 if test -f "$mkusb_sdir"/usb-pack_efi.tar.gz
 then
  echo "using usb-pack_efi.tar.gz"
  tar -xvzf "$mkusb_sdir"/usb-pack_efi.tar.gz --directory "$targ1"
  if [ $? -ne 0 ]
  then
   error="- tar: extracting usb-pack_efi"
  fi
 fi
fi

# tweak 2 grub.cfg

if ! test -f "$targ1"/boot/grub/grub.cfg
then
 < "$mkusb_sdir"/grub.cfg sed '2'q > "$targ1"/boot/grub/grub.cfg  # copy two first lines
 if [ $? -ne 0 ]
 then
  error="$error - sed: copying start of grub.cfg"
 fi
fi
sync
sleep 0.5
cat "$targ1"/boot/grub/grub.cfg

# append the rest of the file (after two first lines)

menu_name

< "$mkusb_sdir"/grub.cfg sed -e '1,2'd \
-e '/menuentry "ubuntu/a \ set root=(hd0,4)' \
-e '/menuentry "memtest/a \  set root=(hd0,3)' \
-e '/loopback/d' -e 's#iso-scan/filename=/ubuntu.iso ##' \
-e 's/loop/$root/' \
-e "s%ubuntu.iso%$menuname%g" \
-e "s/vmlinuz/$vmlinuz/" \
-e "s/casper/$persist/g" \
-e "s/initrd.lz/$initrd/" \
-e '/menuentry/s/"./\U&/' \
>> "$targ1"/boot/grub/grub.cfg

#read -p "at 'append the rest of the file (after two first lines)'
#disk_name_type=$disk_name_type"

if [ "$disk_name_type" == "debian" ] \
|| [ "$disk_name_type" == "torios-debian" ] \
|| [ "$disk_name_type" == "9w-debian-wheezy" ]
then
 sed -i 's/persistent --/persistence --/' "$targ1"/boot/grub/grub.cfg
fi

if [ $? -ne 0 ]
then
 error="$error - sed: appending grub.cfg"
fi

fi  # end copy/extract boot files --------------------------------------

я не добавляю более подробные объяснения теперь. Укажите точно, какие потребности быть объясненным, если Вы хотите больше деталей.

1
ответ дан 7 December 2019 в 14:57

Другие вопросы по тегам:

Похожие вопросы: