120 lines
3.2 KiB
Markdown
120 lines
3.2 KiB
Markdown
# Arch UEFI Installation
|
|
|
|
## Contents
|
|
|
|
- [Overview](#overview)
|
|
- [Process](#process)
|
|
|
|
|
|
## Overview
|
|
|
|
A concise example of how to use a UEFI system with GPT disk partitioning with [Arch](https://www.archlinux.org); the intent is to demonstrate how the EFI partition works, how it's mounted, and how [GRUB](http://www.gnu.org/software/grub/) is configured.
|
|
|
|
This example was designed using a [Virtualbox](https://www.virtualbox.org/) host with the guest VM in EFI mode `VM -> Settings -> System -> Enable EFI`, then booting the standard [Arch ISO](https://www.archlinux.org/download/) and using UEFI mode install.
|
|
|
|
|
|
## Process
|
|
|
|
First, partition your device in GPT format (`gdisk` or `parted`) like so:
|
|
|
|
> Note that gdisk and parted display the UEFI (`/dev/sda1` below) in different ways -- gdisk shows it as an ESP (EFI System Partition), parted likes to show it instead with flags "boot,esp" -- this is all the same, it's type ef00 under the hood on a GPT disk.
|
|
|
|
```
|
|
/dev/sda1 size:200M type:ef00 "EFI System Partition" or "boot,esp"
|
|
/dev/sda2 size:500M type:8300 "Linux Filesystem" or "Linux"
|
|
/dev/sda3 size:rest type:8e00 "Linux LVM"
|
|
```
|
|
|
|
Now create `/dev/sda3` as LVM:
|
|
|
|
```
|
|
pvcreate /dev/sda3
|
|
vgcreate vglocal00 /dev/sda3
|
|
lvcreate -L 1G -n swap00 vglocal00
|
|
lvcreate -l 100%FREE -n root00 vglocal00
|
|
```
|
|
|
|
Make your swap, ext4 and vfat for EFI:
|
|
|
|
```
|
|
mkswap /dev/vglocal00/swap00
|
|
mkfs.vfat /dev/sda1
|
|
mkfs.ext4 /dev/sda2
|
|
mkfs.ext4 /dev/vglocal00/root00
|
|
```
|
|
|
|
Mount everything - notice how `/dev/sda1` is a /boot/efi VFAT (aka FAT32) partition type:
|
|
|
|
```
|
|
swapon /dev/vglocal00/swap00
|
|
mount /dev/vglocal00/root00 /mnt
|
|
mkdir /mnt/boot
|
|
mount /dev/sda2 /mnt/boot
|
|
mkdir /mnt/boot/efi
|
|
mount /dev/sda1 /mnt/boot/efi
|
|
```
|
|
|
|
Pacstrap the core packages and chroot into the mount:
|
|
|
|
```
|
|
pacstrap /mnt base
|
|
genfstab -p /mnt >> /mnt/etc/fstab
|
|
arch-chroot /mnt
|
|
```
|
|
|
|
Prep the system with all the usual things - adjust to your locale as desired:
|
|
|
|
```
|
|
export LANG="en_US.UTF-8"
|
|
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
|
|
locale-gen
|
|
|
|
cat << EOF > /etc/locale.conf
|
|
LANG="en_US.UTF-8"
|
|
LC_COLLATE="C"
|
|
EOF
|
|
|
|
cat << EOF > /etc/vconsole.conf
|
|
KEYMAP="us"
|
|
FONT="eurlatgr"
|
|
EOF
|
|
|
|
ln -s /usr/share/zoneinfo/America/Chicago /etc/localtime
|
|
hwclock --systohc --utc
|
|
echo "toolbox" > /etc/hostname
|
|
hostname "toolbox"
|
|
```
|
|
|
|
Install grub, kernel headers, os-prober (so grub can see Windows, etc.) and the UEFI tools:
|
|
|
|
```
|
|
pacman -Sy --noconfirm
|
|
pacman -S --noconfirm grub linux-headers os-prober intel-ucode dosfstools efibootmgr
|
|
```
|
|
|
|
Add the mkinitcpio hook for LVM:
|
|
|
|
```
|
|
sed -i.bak -r 's/^HOOKS=(.*)block(.*)/HOOKS=\1block lvm2\2/g' /etc/mkinitcpio.conf
|
|
mkinitcpio -p linux
|
|
```
|
|
|
|
Install grub2 in UEFI mode and add the hack for some BIOSes which expect the boot bits in a specific place:
|
|
|
|
```
|
|
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch_grub --recheck --debug
|
|
grub-mkconfig -o /boot/grub/grub.cfg
|
|
mkdir /boot/efi/EFI/boot
|
|
cp /boot/efi/EFI/arch_grub/grubx64.efi /boot/efi/EFI/boot/bootx64.efi
|
|
```
|
|
|
|
Finally, set the password for root, back your way out and reboot:
|
|
|
|
```
|
|
passwd root
|
|
exit
|
|
umount -R /mnt
|
|
reboot
|
|
```
|
|
|
|
The guest VM is now a UEFI + GPT based Linux system; from here the process can be expanded to work with real live devices and systems, custom partitions and so forth.
|