scragnoth
December 13th, 2020, 08:39 PM
I got the Lenovo Yoga Tablet 2-851F and want to install Linux on it. It has a 64-bit capable Intel Atom CPU architecture and 2 GB of RAM. It's not to be confused with the Yoga Tablet 2 Pro. Originally it comes with a 32-bit version of Windows 8 since Lenovo only developed 32-bit Windows drivers for the internal hardware. The only way to connect any external USB hardware is a Micro-USB-OTG-Hub since there's only the one Micro-USB-port also used to charge the battery on the tablet.
I have a few issues: I can only get a Fedora USB volume to be recognized as a bootable UEFI USB volume, Bodhi and Lubuntu USB volumes won't show up in the boot menu, regardless what I tried. I wrote each image again on Windows with the Rufus tool, where I especially checkted the "GPT" option "for UEFI computers". And I tried this tutorial: https://askubuntu.com/questions/395879/how-to-create-uefi-only-bootable-usb-live-media/395880#395880
I disabled the "Secure Boot" option in the Bios menu as I learned that this can cause issues. I also learned that this tablet is especially iffy in what it likes to boot from.
I began with Fedora because of this tutorial: https://www.srobb.net/yoga2.html
It installed fine, essential hardware (Bluetooth; Wifi, Touch) works right away, it's just a bit heavy for this system.
I found out that it's possible to install Linux from another Linux: https://help.ubuntu.com/community/Installation/FromLinux
I used the Fedora Terminal to try this, but it didn't work right. The Install won't show up in grub on boot.
From that tutorial, I altered some commands since I had issues with mounting, it gave me the "can't find in /etc/fstab" error otherwise.
Original version
mkdir /tmp/install_cd
mkdir /tmp/installer
sudo mount [location of ISO) -o loop /tmp/install_cd
sudo mount [location of prepared ext4 partition] /tmp/installer
sudo rsync -a /tmp/install_cd/. /tmp/installer
sudo umount /tmp/install_cd
sudo umount /tmp/installer
My version:
mkdir /mnt/iso
mkdir /mnt/install
sudo mount [location of ISO] -o loop /mnt/iso
sudo mount /dev/mmcblk2p5 /mnt/install
sudo rsync -a /mnt/iso . /mnt/install
sudo umount /mnt/iso
sudo umount /mnt/install
I read somewhere that I had to define mount points in /mnt. I don't know where anymore.
The rsync did the following: It copied the ISO itself to my ext4 partition, it created empty home folder folders (Downloads etc.) there and put the ISO's contents into a protected subfolder called "Iso". With the terminal I moved everything from that "Iso" folder to the partition's root directory.
Creating the GRUB entry seemed to work fine, I could use all commands 1:1.
menuentry "Ubuntu Ver??? Installer" {
set root=(hd0,3)
linux /casper/vmlinuz.efi boot=casper ignore_uuid
initrd /casper/initrd.lz
}
my adaptation
menuentry "bodhi Ver5.1.0-64-hwe Installer" {
set root=(hd2,5)
linux /casper/vmlinuz.efi boot=casper ignore_uuid
initrd /casper/initrd.lz
}
Inside "Disks" utility my partition location shows: /dev/mmcblk2p5
The tablet's SD card slot on the back is /dev/mmcblk0
I don't know what mmcblk1 is then, or if that even exists. I can't see it.
I thus think that mmcblk2p5 is "hd2,5 for grub.
To rebuild the grub configuration, on fedora the command "sudo grub2-mkconfig" is used... I found that here: https://docs.fedoraproject.org/en-US/Fedora/23/html/Multiboot_Guide/GRUB-recreating.html
Here's the output:
[XY@localhost-live ~]$ sudo grub2-mkconfig
Generating grub configuration file ...
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
set pager=1
if [ -f ${config_directory}/grubenv ]; then
load_env -f ${config_directory}/grubenv
elif [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
terminal_output console
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=5
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/01_users ###
if [ -f ${prefix}/user.cfg ]; then
source ${prefix}/user.cfg
if [ -n "${GRUB2_PASSWORD}" ]; then
set superusers="root"
export superusers
password_pbkdf2 root ${GRUB2_PASSWORD}
fi
fi
### END /etc/grub.d/01_users ###
### BEGIN /etc/grub.d/08_fallback_counting ###
insmod increment
# Check if boot_counter exists and boot_success=0 to activate this behaviour.
if [ -n "${boot_counter}" -a "${boot_success}" = "0" ]; then
# if countdown has ended, choose to boot rollback deployment,
# i.e. default=1 on OSTree-based systems.
if [ "${boot_counter}" = "0" -o "${boot_counter}" = "-1" ]; then
set default=1
set boot_counter=-1
# otherwise decrement boot_counter
else
decrement boot_counter
fi
save_env boot_counter
fi
### END /etc/grub.d/08_fallback_counting ###
### BEGIN /etc/grub.d/10_linux ###
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root 8641b910-c8db-4cc4-87db-e3654ddf33db
else
search --no-floppy --fs-uuid --set=root 8641b910-c8db-4cc4-87db-e3654ddf33db
fi
insmod part_gpt
insmod fat
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=boot 7A46-3A9A
else
search --no-floppy --fs-uuid --set=boot 7A46-3A9A
fi
# This section was generated by a script. Do not modify the generated file - all changes
# will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.
#
# The blscfg command parses the BootLoaderSpec files stored in /boot/loader/entries and
# populates the boot menu. Please refer to the Boot Loader Specification documentation
# for the files format: https://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/.
# The kernelopts variable should be defined in the grubenv file. But to ensure that menu
# entries populated from BootLoaderSpec files that use this variable work correctly even
# without a grubenv file, define a fallback kernelopts variable if this has not been set.
#
# The kernelopts variable in the grubenv file can be modified using the grubby tool or by
# executing the grub2-mkconfig tool. For the latter, the values of the GRUB_CMDLINE_LINUX
# and GRUB_CMDLINE_LINUX_DEFAULT options from /etc/default/grub file are used to set both
# the kernelopts variable in the grubenv file and the fallback kernelopts variable.
if [ -z "${kernelopts}" ]; then
set kernelopts="root=/dev/mapper/fedora_localhost--live-root ro rd.lvm.lv=fedora_localhost-live/root rhgb quiet "
fi
insmod blscfg
blscfg
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/10_reset_boot_success ###
# Hiding the menu is ok if last boot was ok or if this is a first boot attempt to boot the entry
if [ "${boot_success}" = "1" -o "${boot_indeterminate}" = "1" ]; then
set menu_hide_ok=1
else
set menu_hide_ok=0
fi
# Reset boot_indeterminate after a successful boot
if [ "${boot_success}" = "1" ] ; then
set boot_indeterminate=0
# Avoid boot_indeterminate causing the menu to be hidden more then once
elif [ "${boot_indeterminate}" = "1" ]; then
set boot_indeterminate=2
fi
# Reset boot_success for current boot
set boot_success=0
save_env boot_success boot_indeterminate
### END /etc/grub.d/10_reset_boot_success ###
### BEGIN /etc/grub.d/12_menu_auto_hide ###
if [ x$feature_timeout_style = xy ] ; then
if [ "${menu_show_once}" ]; then
unset menu_show_once
save_env menu_show_once
set timeout_style=menu
set timeout=60
elif [ "${menu_auto_hide}" -a "${menu_hide_ok}" = "1" ]; then
set orig_timeout_style=${timeout_style}
set orig_timeout=${timeout}
if [ "${fastboot}" = "1" ]; then
# timeout_style=menu + timeout=0 avoids the countdown code keypress check
set timeout_style=menu
set timeout=0
else
set timeout_style=hidden
set timeout=1
fi
fi
fi
### END /etc/grub.d/12_menu_auto_hide ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###
### BEGIN /etc/grub.d/30_os-prober ###
Found Windows Boot Manager on /dev/mmcblk2p1@/EFI/Microsoft/Boot/bootmgfw.efi
menuentry 'Windows Boot Manager (on /dev/mmcblk2p1)' --class windows --class os $menuentry_id_option 'osprober-efi-7A46-3A9A' {
insmod part_gpt
insmod fat
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root 7A46-3A9A
else
search --no-floppy --fs-uuid --set=root 7A46-3A9A
fi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
# Other OS found, undo autohiding of menu unless menu_auto_hide=2
if [ "${orig_timeout_style}" -a "${menu_auto_hide}" != "2" ]; then
set timeout_style=${orig_timeout_style}
set timeout=${orig_timeout}
fi
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/30_uefi-firmware ###
Adding boot menu entry for EFI firmware configuration
menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {
fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "bodhi Ver5.1.0-64-hwe Installer" {
set root=(hd2,5)
linux /casper/vmlinuz.efi boot=casper ignore_uuid
initrd /casper/initrd.lz
}
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
done
[XY@localhost-live ~]$
At the end it just shows what I typed into the /etc/grub.d/40_custom file. I just checked if the mentioned "exec tail" line was still there since it wasn't shown in the output, but it's still there as it should be.
Is there an obvious error with that whole grub editing step? Help would be much appreciated, I'm pulling my hair out...
I didn't try regular Ubuntu yet (if a USB volume with Ubuntu would boot). I think that would also be too recource-hungry. Fedora consumes 1 GB of RAM on idle, the firefox tab with my mail web service (which I used to copy the terminal output over) crashed several times.
I have a few issues: I can only get a Fedora USB volume to be recognized as a bootable UEFI USB volume, Bodhi and Lubuntu USB volumes won't show up in the boot menu, regardless what I tried. I wrote each image again on Windows with the Rufus tool, where I especially checkted the "GPT" option "for UEFI computers". And I tried this tutorial: https://askubuntu.com/questions/395879/how-to-create-uefi-only-bootable-usb-live-media/395880#395880
I disabled the "Secure Boot" option in the Bios menu as I learned that this can cause issues. I also learned that this tablet is especially iffy in what it likes to boot from.
I began with Fedora because of this tutorial: https://www.srobb.net/yoga2.html
It installed fine, essential hardware (Bluetooth; Wifi, Touch) works right away, it's just a bit heavy for this system.
I found out that it's possible to install Linux from another Linux: https://help.ubuntu.com/community/Installation/FromLinux
I used the Fedora Terminal to try this, but it didn't work right. The Install won't show up in grub on boot.
From that tutorial, I altered some commands since I had issues with mounting, it gave me the "can't find in /etc/fstab" error otherwise.
Original version
mkdir /tmp/install_cd
mkdir /tmp/installer
sudo mount [location of ISO) -o loop /tmp/install_cd
sudo mount [location of prepared ext4 partition] /tmp/installer
sudo rsync -a /tmp/install_cd/. /tmp/installer
sudo umount /tmp/install_cd
sudo umount /tmp/installer
My version:
mkdir /mnt/iso
mkdir /mnt/install
sudo mount [location of ISO] -o loop /mnt/iso
sudo mount /dev/mmcblk2p5 /mnt/install
sudo rsync -a /mnt/iso . /mnt/install
sudo umount /mnt/iso
sudo umount /mnt/install
I read somewhere that I had to define mount points in /mnt. I don't know where anymore.
The rsync did the following: It copied the ISO itself to my ext4 partition, it created empty home folder folders (Downloads etc.) there and put the ISO's contents into a protected subfolder called "Iso". With the terminal I moved everything from that "Iso" folder to the partition's root directory.
Creating the GRUB entry seemed to work fine, I could use all commands 1:1.
menuentry "Ubuntu Ver??? Installer" {
set root=(hd0,3)
linux /casper/vmlinuz.efi boot=casper ignore_uuid
initrd /casper/initrd.lz
}
my adaptation
menuentry "bodhi Ver5.1.0-64-hwe Installer" {
set root=(hd2,5)
linux /casper/vmlinuz.efi boot=casper ignore_uuid
initrd /casper/initrd.lz
}
Inside "Disks" utility my partition location shows: /dev/mmcblk2p5
The tablet's SD card slot on the back is /dev/mmcblk0
I don't know what mmcblk1 is then, or if that even exists. I can't see it.
I thus think that mmcblk2p5 is "hd2,5 for grub.
To rebuild the grub configuration, on fedora the command "sudo grub2-mkconfig" is used... I found that here: https://docs.fedoraproject.org/en-US/Fedora/23/html/Multiboot_Guide/GRUB-recreating.html
Here's the output:
[XY@localhost-live ~]$ sudo grub2-mkconfig
Generating grub configuration file ...
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
### BEGIN /etc/grub.d/00_header ###
set pager=1
if [ -f ${config_directory}/grubenv ]; then
load_env -f ${config_directory}/grubenv
elif [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"
fi
if [ x"${feature_menuentry_id}" = xy ]; then
menuentry_id_option="--id"
else
menuentry_id_option=""
fi
export menuentry_id_option
if [ "${prev_saved_entry}" ]; then
set saved_entry="${prev_saved_entry}"
save_env saved_entry
set prev_saved_entry=
save_env prev_saved_entry
set boot_once=true
fi
function savedefault {
if [ -z "${boot_once}" ]; then
saved_entry="${chosen}"
save_env saved_entry
fi
}
function load_video {
if [ x$feature_all_video_module = xy ]; then
insmod all_video
else
insmod efi_gop
insmod efi_uga
insmod ieee1275_fb
insmod vbe
insmod vga
insmod video_bochs
insmod video_cirrus
fi
}
terminal_output console
if [ x$feature_timeout_style = xy ] ; then
set timeout_style=menu
set timeout=5
# Fallback normal timeout code in case the timeout_style feature is
# unavailable.
else
set timeout=5
fi
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/01_users ###
if [ -f ${prefix}/user.cfg ]; then
source ${prefix}/user.cfg
if [ -n "${GRUB2_PASSWORD}" ]; then
set superusers="root"
export superusers
password_pbkdf2 root ${GRUB2_PASSWORD}
fi
fi
### END /etc/grub.d/01_users ###
### BEGIN /etc/grub.d/08_fallback_counting ###
insmod increment
# Check if boot_counter exists and boot_success=0 to activate this behaviour.
if [ -n "${boot_counter}" -a "${boot_success}" = "0" ]; then
# if countdown has ended, choose to boot rollback deployment,
# i.e. default=1 on OSTree-based systems.
if [ "${boot_counter}" = "0" -o "${boot_counter}" = "-1" ]; then
set default=1
set boot_counter=-1
# otherwise decrement boot_counter
else
decrement boot_counter
fi
save_env boot_counter
fi
### END /etc/grub.d/08_fallback_counting ###
### BEGIN /etc/grub.d/10_linux ###
insmod part_gpt
insmod ext2
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root 8641b910-c8db-4cc4-87db-e3654ddf33db
else
search --no-floppy --fs-uuid --set=root 8641b910-c8db-4cc4-87db-e3654ddf33db
fi
insmod part_gpt
insmod fat
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=boot 7A46-3A9A
else
search --no-floppy --fs-uuid --set=boot 7A46-3A9A
fi
# This section was generated by a script. Do not modify the generated file - all changes
# will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.
#
# The blscfg command parses the BootLoaderSpec files stored in /boot/loader/entries and
# populates the boot menu. Please refer to the Boot Loader Specification documentation
# for the files format: https://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/.
# The kernelopts variable should be defined in the grubenv file. But to ensure that menu
# entries populated from BootLoaderSpec files that use this variable work correctly even
# without a grubenv file, define a fallback kernelopts variable if this has not been set.
#
# The kernelopts variable in the grubenv file can be modified using the grubby tool or by
# executing the grub2-mkconfig tool. For the latter, the values of the GRUB_CMDLINE_LINUX
# and GRUB_CMDLINE_LINUX_DEFAULT options from /etc/default/grub file are used to set both
# the kernelopts variable in the grubenv file and the fallback kernelopts variable.
if [ -z "${kernelopts}" ]; then
set kernelopts="root=/dev/mapper/fedora_localhost--live-root ro rd.lvm.lv=fedora_localhost-live/root rhgb quiet "
fi
insmod blscfg
blscfg
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/10_reset_boot_success ###
# Hiding the menu is ok if last boot was ok or if this is a first boot attempt to boot the entry
if [ "${boot_success}" = "1" -o "${boot_indeterminate}" = "1" ]; then
set menu_hide_ok=1
else
set menu_hide_ok=0
fi
# Reset boot_indeterminate after a successful boot
if [ "${boot_success}" = "1" ] ; then
set boot_indeterminate=0
# Avoid boot_indeterminate causing the menu to be hidden more then once
elif [ "${boot_indeterminate}" = "1" ]; then
set boot_indeterminate=2
fi
# Reset boot_success for current boot
set boot_success=0
save_env boot_success boot_indeterminate
### END /etc/grub.d/10_reset_boot_success ###
### BEGIN /etc/grub.d/12_menu_auto_hide ###
if [ x$feature_timeout_style = xy ] ; then
if [ "${menu_show_once}" ]; then
unset menu_show_once
save_env menu_show_once
set timeout_style=menu
set timeout=60
elif [ "${menu_auto_hide}" -a "${menu_hide_ok}" = "1" ]; then
set orig_timeout_style=${timeout_style}
set orig_timeout=${timeout}
if [ "${fastboot}" = "1" ]; then
# timeout_style=menu + timeout=0 avoids the countdown code keypress check
set timeout_style=menu
set timeout=0
else
set timeout_style=hidden
set timeout=1
fi
fi
fi
### END /etc/grub.d/12_menu_auto_hide ###
### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###
### BEGIN /etc/grub.d/20_ppc_terminfo ###
### END /etc/grub.d/20_ppc_terminfo ###
### BEGIN /etc/grub.d/30_os-prober ###
Found Windows Boot Manager on /dev/mmcblk2p1@/EFI/Microsoft/Boot/bootmgfw.efi
menuentry 'Windows Boot Manager (on /dev/mmcblk2p1)' --class windows --class os $menuentry_id_option 'osprober-efi-7A46-3A9A' {
insmod part_gpt
insmod fat
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root 7A46-3A9A
else
search --no-floppy --fs-uuid --set=root 7A46-3A9A
fi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
# Other OS found, undo autohiding of menu unless menu_auto_hide=2
if [ "${orig_timeout_style}" -a "${menu_auto_hide}" != "2" ]; then
set timeout_style=${orig_timeout_style}
set timeout=${orig_timeout}
fi
### END /etc/grub.d/30_os-prober ###
### BEGIN /etc/grub.d/30_uefi-firmware ###
Adding boot menu entry for EFI firmware configuration
menuentry 'System setup' $menuentry_id_option 'uefi-firmware' {
fwsetup
}
### END /etc/grub.d/30_uefi-firmware ###
### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "bodhi Ver5.1.0-64-hwe Installer" {
set root=(hd2,5)
linux /casper/vmlinuz.efi boot=casper ignore_uuid
initrd /casper/initrd.lz
}
### END /etc/grub.d/40_custom ###
### BEGIN /etc/grub.d/41_custom ###
if [ -f ${config_directory}/custom.cfg ]; then
source ${config_directory}/custom.cfg
elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
done
[XY@localhost-live ~]$
At the end it just shows what I typed into the /etc/grub.d/40_custom file. I just checked if the mentioned "exec tail" line was still there since it wasn't shown in the output, but it's still there as it should be.
Is there an obvious error with that whole grub editing step? Help would be much appreciated, I'm pulling my hair out...
I didn't try regular Ubuntu yet (if a USB volume with Ubuntu would boot). I think that would also be too recource-hungry. Fedora consumes 1 GB of RAM on idle, the firefox tab with my mail web service (which I used to copy the terminal output over) crashed several times.