User Tools

Site Tools


oclug-live-distro

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Last revisionBoth sides next revision
oclug-live-distro [2017/04/04 17:47] – [EFI Booting] jcnashoclug-live-distro [2017/04/04 17:47] jcnash
Line 15: Line 15:
  
   * [[livedistro:SMurphy170321|livedistro:SMurphy170321]]   * [[livedistro:SMurphy170321|livedistro:SMurphy170321]]
- 
-===== Investigation of EFI boot (S Murphy) ===== 
- 
-==== Arch Installation Notes ==== 
- 
-Scott Murphy <scott.murphy@arrow-eye.com> 
-  * version: 1.0 
-  * keywords: VMWare, Arch Linux, macOS, UEFI 
-  * 2017-03-21 
- 
-==== Getting started ==== 
- 
-First, the Arch documentation is very good. You can get all of this directly 
-from it, however it makes a few assumptions that might trip you up if you are 
-new to arch, UEFI and running under VMWare. 
- 
-I'm using VMWare for my Arch install, so this is specific to installing under 
-VMWare Fusion 8 on macOS. This probably translates pretty much directly to other 
-installs if you leave out the VMWare items. The other thing is that my install 
-is the 64-bit install. I don't have a 32-bit system and was not interested in 
-trying it out in VMWare at this time. Maybe in a update. 
- 
-==== Get a copy of Arch ==== 
- 
-You can find the Arch distro links on the [https://www.archlinux.org|Arch Linux 
-website], in the https://www.archlinux.org/download/[Download] section. Select a 
-mirror or bittorrent link and get started. I selected the 
-https://mirror.csclub.uwaterloo.ca/archlinux/iso/2017.03.01/[CS Club mirror] at 
-the university of Waterloo. I picked the 
-https://mirror.csclub.uwaterloo.ca/archlinux/iso/2017.03.01/archlinux-2017.03.01-dual.iso[2017-03-01] 
-image. Once it is downloaded, You can use the iso in whatever way you want. I'm 
-using it as is, in a virtual DVD drive. 
- 
-You can burn it to a DVD if you have something sufficiently old, however if your 
-device supports booting for USB, I'd go that route. 
- 
-NOTE: Add a link to the create a USB version instructions 
- 
-==== Create your VMWare VMX file ==== 
- 
-Create a new VMWare machine by selecting `New -> Create a custom virtual 
-machine` in the VMWare Library. Go through the full creation up to the point 
-where you start the VM to get the install going. My VM has  
- 
-   * A 20GB disk 
-   * 1024MB RAM 
-   * A single processor 
- 
-==== Forcing UEFI Boot ==== 
- 
-In order to use UEFI, you need to edit the VMX file. Assuming you called the 
-machine `New Arch VM`, you would find the vmx file in the `~/Documents/Virtual 
-Machines.localized/New Arch WM.vmwarevm` directory. In this case, the file will 
-be called `New Arch VM.vmx`.  If there is an additional file with the same name 
-and a .lck extansion, the library has the file open. Make sure you have the 
-startup window closed. If there is no `.lck` file, then all you need to do is 
-edit the file and add the following line to it. 
- 
-<code> 
-// Interesting, when I reformat a long line to 80 columns, vi crashes on my mac 
-// I've noticed it before, but it seems to be an issue with lines that wrap 
-// longer than four lines. 
-</code> 
- 
-    firmware = "efi" 
- 
- 
-That was pretty straightforward. This will tell VMWare to use UEFI as the boot 
-method instead of legacy BIOS. 
- 
-==== The actual installation ==== 
- 
-This will go more like a series of steps. There will only be extra info where it 
-gets somewhat odd. 
- 
-Now that you have the blank VM created and the VMX file modified, it is time to 
-get started. 
- 
-   * Mount the DVD image and connect it to the VM 
-   * Power on the VM. It should autoboot into a root shell 
-   * Verify that you are in UEFI mode 
- 
-    ls /sys/firmware/efi/efivars 
- 
-   * Make sure you can see the internet (The system should have dhcp'd an address) 
- 
-   ping archlinux.org 
- 
- 
-   * Enable network time protocol 
- 
-   timedatectl set-ntp true 
-   timedatectl status 
- 
- 
-   * Partition your disk. In this instance, you need to create at least three partitions: 
-       * Boot (512M, fat32) 
-       * Swap (I usually use 256M and hope I never start swapping) 
-      * / (The bulk of the disk) 
- 
-   * you can use `sgdisk` to create your partitions with the following commands, assuming your disk is /dev/sda: 
- 
-   sgdisk -p /dev/sda 
-   sgdisk --new=0:0:+512M /dev/sda 
-   sgdisk --new=0:0:+256M /dev/sda 
-   sgdisk --new=0:0:0 /dev/sda 
-   sgdisk --typecode=1:EF00 /dev/sda 
-   sgdisk --typecode=2:8200 /dev/sda 
-   sgdisk --change-name=1:"EFI System" /dev/sda 
-   sgdisk --change-name=2:"Linux swap" /dev/sda 
-   sgdisk --change-name=3:"Linux filesystem" /dev/sda 
-   sgdisk -p /dev/sda 
- 
- 
-That should first show you a disk with no partition table, and then the disk with all 
-three partitions, something like this: 
- 
-   Disk /dev/sda: 41943040 sectors, 20.0 GiB 
-   Logical sector size: 512 bytes 
-   Disk identifier (GUID): 9E17A0DA-9DED-4E62-BAE7-076E1522C21B 
-   Partition table holds up to 128 entries 
-   First usable sector is 34, last usable sector is 41943006 
-   Partitions will be aligned on 2048-sector boundaries 
-   Total free space is 4061 sectors (2.0 MiB) 
- 
-   Number  Start (sector)    End (sector)  Size       Code  Name 
-      1            2048         1048576   511.0 MiB   EF00  EFI System 
-      2         1050624         1574911   256.0 MiB   8200  Linux swap 
-      3         1574912        41943006   19.2 GiB    8300  Linux filesystem 
- 
- 
-Now that the disk is properly partitioned, you will format the partitions: 
- 
-   mkfs.fat -F32 /dev/sda1 
-   mkswap -L swap /dev/sda2 
-   mkfs.ext4 /dev/sda3 
- 
- 
-NOTE: UEFI partitions are FAT32 formatted and the UEFI BIOS can read FAT32 partitions to locate 
-the correct `.efi` file to boot. This also makes it easy to mount that partition 
-to make fixes. 
- 
-What are we going todo? 
- 
-   . Mount the root partition on /mnt 
-   . Create a new directory to mount the boot partition on and mount it there 
-   . Use the pacstrap program to install the base operating system 
-   . Create a new fstab that reflects the mounted disks 
-   . Chroot to the newly installed OS so initial changes could be made  
-   . Set the timezone 
-   . Set the hardware clock to the running OS 
-   . Enable the en_US locakle and set the system language to en_US UTF8 
-   . Give the system a hostname 
-   . Let the system refer to itself in a zeroconf (bonjour) way 
- 
-In order to acomplish this, enter the following commands: 
- 
-   mount /dev/sda3 /mnt 
-   mkdir /mnt/boot 
-   mount /dev/sda1 /mnt/boot 
-   pacstrap /mnt/base 
-   genfstab -U /mnt >> /mnt/etc/fstab 
-   arch-chroot /mnt 
-   ln -sf /usr/share/zoneinfo/America/Toronto /etc/localtime 
-   hwclock --systohc 
-   sed -i 's/#en_US/en_US/' /etc/locale.gen 
-   locale-gen 
-   echo "LANG=en_US.UTF-8" > /etc/locale.conf 
-   echo "myhostname" > /etc/hostname 
-   echo "127.0.0.1     myhostname.localdomain myhostname" >> /etc/hosts 
- 
- 
-==== Intel based System==== 
- 
-If this is an Intel based system, you will need to add the ability to perform 
-cpu microcode updates. I don't know if this even works under VMWare, but if I 
-have to install on a physical system, then I want to remember this part. 
- 
-You enable the updates that by adding the intel microcode package: 
- 
-   pacman -S intel-ucode 
- 
- 
-NOTE: Need to check this out on a test system. I'm not sure you need to perform 
-this step if you are not using grub. I'm not, so this might be useless. I 
-happen to like having grub in place, so this is not wasted documentation, just 
-potentially unused. 
- 
-In order to fix the bootloader to use the intel microcode upadtes, we need to 
-install the grub utilities and update the configuration: 
- 
-   pacman -S grub 
-   grub-mkconfig -o /boot/grub/grub.cfg 
- 
- 
-or you might need to do it inside the EFI setup. That will ne noted in the /boot 
-secting below. 
- 
-Now you should set the root password:  
- 
-   passwd 
- 
- 
-Congratulations, the system has been installed. Unfortunately, it will not boot 
-just yet. 
- 
-==== The /boot Partition ==== 
- 
-This is where it tends to get a little harder to follow. At this point, you can 
-unmount the disks and reboot - you will not have a bootable system, but you will 
-have a fully functional system if it could only boot. If you mess 
-around enough, it will boot, but you may not know what you did or why it works. 
-I like to compare this to the first time you use grub or PXE boot a system. You 
-are not sure what is happening under the hood, even though you edited those 
-files. 
- 
-If you rebooted, you will need to boot from your install media again. Don't 
-bother with the selection 'Boot from Installed System' or whatever version it 
-offers, it will not boot. 
- 
-If you reboot, you need to mount the disks again and chroot again. Once that has 
-happened, you can continue on and make a bootable system. 
- 
-You are going to need some more tools installed, so fire up `pacman` 
- 
-   pacman -S efibootmgr efitools 
- 
-You can check to see if the system is effectively ready for this by running the 
-`efivar` command and seeing the output 
- 
-   efivar -l 
- 
-This should give you a list of "things" that look like a bunch of GUIDs followed 
-by a readable word. If so, everything you need is in place. 
- 
-This is the secret sauce for making the system bootable: 
- 
-   efibootmgr -d /dev/sda -p 1 -c -L "Arch Linux" -l '\vmlinuz-linux' -u "root=/dev/sda3 rw initrd=/initramfs-linux.img" 
- 
- 
-NOTE: Intel microcode updates may require the previous line to include two 
-`initrd=` sections, so the previous line would have `-u "root=/dev/sda3 rw initrd=/intel-ucode.img initrd=/initramfs-linux.img"` 
- 
-==== Enabling the network ==== 
- 
-This is for a wired connection, however the procedure is similar for wireless. 
-Look at this first and then check out the wireless section of the networking 
-reference below. 
- 
-The legacy `net-utils` have been fully deprecated in the current version of Arch, 
-so you will be using the `ip` command 
- 
-Get the name of the wired interface. It will not be eth0. 
- 
-   ip link 
- 
- 
-The output will be like: 
- 
-   1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 
-    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
-   2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 
-    link/ether 00:0c:29:dc:56:64 brd ff:ff:ff:ff:ff:ff 
- 
-The wired interface is **ens33**. 
- 
-Assuming you will be using dhcp for your networking, this is how you get it 
-working. Enter the following commands: 
- 
-<code> 
-cd /etc/systemd/network 
-echo > local.network<<EOF 
-[Match] 
-Name=ens33 
- 
-[Network] 
-DHCP=ipv4 
-EOF 
-systemctl enable systemd-networkd.service 
-ip a 
-</code> 
- 
-If this is a system you rebooted before you configured the network, you can 
-enable the networking using the command: 
- 
-    systemctl start systemd-networkd.service 
- 
- 
-The final command, `ip a`, should show that you now have an address on your 
-local network. This should come up after a reboot. 
- 
-==== Final Steps ==== 
- 
-At this point, you should be golden. exit from the chrooted system by typing 
-`exit` and then unmount the disk partitions using the command `umount -R /mnt` 
-and then enter `reboot` 
- 
-==== TODO ==== 
- 
-  * X11 Setup 
-  * Window Manager installation 
-  * TBD 
- 
-==== References ==== 
- 
-The following pages (mostly from the Arch Wiki) were used to make these notes. 
- 
-  * [[https://wiki.archlinux.org/index.php/Installation_guide|Installation guide - ArchWiki]] 
-  * [[https://wiki.archlinux.org/index.php/Unified_Extensible_Firmware_Interface|Unified Extensible Firmware Interface - ArchWiki]] 
-  * [[https://wiki.archlinux.org/index.php/EFI_System_Partition | EFI System Partition - ArchWiki]] 
-  * [[https://wiki.archlinux.org/index.php/Talk:EFISTUB#ESP_mount_points | Talk:EFISTUB - ArchWiki]] 
-  * [[https://wiki.archlinux.org/index.php/EFISTUB | EFISTUB - ArchWiki]] 
-  * [[https://wiki.archlinux.org/index.php/Network_configuration#Check_the_connection | Network configuration - ArchWiki]] 
-  * [[https://wiki.archlinux.org/index.php/Microcode#Enabling_Intel_microcode_updates | Microcode - ArchWiki]] 
-  * [[https://wiki.archlinux.org/index.php/Systemd-networkd#Basic_DHCP_network | systemd-networkd - ArchWiki]] 
-  * [[https://wiki.archlinux.org/index.php/VMware/Installing_Arch_as_a_guest#VMware_Tools_versus_Open-VM-Tools | VMware/Installing Arch as a guest - ArchWiki]] 
-  * [[https://wiki.archlinux.org/index.php/Arch_User_Repository | Arch User Repository - ArchWiki]] 
- 
-Also looked at: 
- 
-  * [[https://blog.uncooperative.org/blog/2014/02/06/the-efi-system-partition/ | The EFI System Partition and the Default Boot Behavior - The Uncoöperative Organization]] 
-  * [[https://github.com/rasa/vmware-tools-patches | rasa/vmware-tools-patches: Patch and build VMware tools automatically]] 
-  * [[http://planetvm.net/blog/?p=2730 | Boot via EFI firmware - PlanetVM]] 
- 
-For creating that USB stick, you can use the traditional `dd` method or try out 
-[[https://etcher.io/ | Etcher]] if you are command line weary. 
- 
-==== Extra Information ==== 
- 
-Of course if you would prefer to do the install, including the GUI desktop and 
-software selection the easy way, there are two projects of note that can help you out. 
- 
-They are: 
- 
-  * [[https://arch-anywhere.org | ArchAnywhere]] 
-  * [[https://sourceforge.net/projects/revenge-installer | Revenge Installer]] 
- 
  
  
oclug-live-distro.txt · Last modified: 2024/03/31 15:34 by scott5