Skip to content

Instantly share code, notes, and snippets.

@lynx570
Forked from xtrymind/archinstall.md
Last active January 3, 2021 08:39
Show Gist options
  • Save lynx570/0bc42b07ced27bf79a58350435dd1fd0 to your computer and use it in GitHub Desktop.
Save lynx570/0bc42b07ced27bf79a58350435dd1fd0 to your computer and use it in GitHub Desktop.
Windows 10 and Arch Linux dual boot with UEFI

Arch Linux installation (Windows 10 dual boot)

Before

  1. Disable Windows Fast-Startup
  2. Disable Secure Boot

Partitioning

Windows 10 Efi partitioning

Partition Location Size File system
Recovery sda1 500 MB ntfs
ESP sda2 100 MB vfat
Reserved sda3 16 MB ?
Windows 10 sda4 80 GB ntfs

Connect to the internet (Wi-Fi)

# wifi-menu
# ping  -c 3 www.google.com

Format and mount disks

# mkfs.ext4 /dev/sdb1
# mkfs.ext4 /dev/sdb2
# mount /dev/sdb2 /mnt
# mkdir /mnt/boot
# mkdir /mnt/home
# mount /dev/sdb1 /mnt/boot
# mount /dev/sdb3 /mnt/home

Install

# pacstrap /mnt base base-devel

Generate fstab

# genfstab -U /mnt >> /mnt/etc/fstab

Chroot and configure base system

# arch-chroot /mnt

Timezone

# ln -sf /usr/share/zoneinfo/Asia/Jakarta /etc/localtime

Hardware clock

# hwclock --systohc

Locale

# nano /etc/locale.gen

uncomment en_US.UTF-8

# locale-gen
# echo LANG=en_US.UTF-8 > /etc/locale.conf
# export LANG=en_US.UTF-8

Hostname

# echo arch >> /etc/hostname
# nano /etc/hosts

/etc/hosts should look like:

127.0.0.1   localhost.localdomain   localhost 
::1         localhost.localdomain   localhost
127.0.1.1   arch.localdomain        arch 

Root password

# passwd

Initial ramdisk environment

$ mkinitcpio -p linux

Systemd-Boot

# bootctl --path=/boot install

Then add following content to /boot/loader/entries/arch.conf

tittle    Arch
linux     /vmlinuz-linux
initrd    /initramfs-linux.img
initrd    /intel-ucode.img
options   root=/dev/sda6 rw

and following content to /boot/loader/loader.conf

timeout 5
default arch

GRUB

$ pacman -S dosfstools grub efibootmgr intel-ucode
$ mkdir /boot/efi
$ mount /dev/sda1 /boot/efi

Edit /etc/default/grub, set DEFAULT_TIMEOUT=30.

$ grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck
$ pacman -S os-prober
$ os-prober
$ grub-mkconfig -o boot/grub/grub.cfg

Now, let's add Windows to the GRUB menu. Edit /boot/grub/grub.cfg and add the following menuentry after the Arch Linux menuentries:

menuentry "Windows 10" --class windows --class os {
    insmod part_gpt
    insmod fat
    insmod search_fs_uuid
    insmod chain
    search --fs-uuid --set=root $hints_string $fs_uuid
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

Now change:

  • $hints_string by the output of $ grub-probe --target=fs_uuid /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi

  • $fs_uuid by the output of $ grub-probe --target=hints_string /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi

Network configuration (Wi-Fi)

# pacman -S iw wpa_supplicant dialog networkmanager

Other

# pacman -S zsh reflector ntfs-3g

Unmount and reboot

$ exit      # If still on arch-chroot mode
$ umount -R /mnt
$ reboot

References

Installation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment