User:Sporadiccrash

From ArchWiki
Revision as of 15:44, 8 August 2019 by Sporadiccrash (talk | contribs) (→‎Deviations from Arch Linux Installation: - added detailed information how to create a simple GRUB configuration for Arch Linux to boot in a dual-boot system.)
Jump to navigation Jump to search

Computer

Had installed Arch Linux once in 2008 on an Athlon XP 2800+ machine. Now using Lubuntu but preparing the laptop for multi-boot for Arch Linux and Lubuntu.

Configuration
item value
computer Dell Latitude E7440
CPU i7-4600U
RAM 8 GB DDR3L
harddisk 256 GB Samsung PM851
UEFI options
item value comment
SecureBoot disabled Arch Linux installation does not support it (see article)
Virtualization enabled not used yet
TPM enabled not used yet
Bluetooth disabled probably won't use

Multi-Boot of Arch Linux with Lubuntu

General

  • Lubuntu was installed first (version 19.04). Arch Linux was installed afterwards (version 2019.08.01). ESP on /dev/sda1 has mountpoint /boot/efi.
  • Lubuntu was installed on /dev/sda5.
  • Arch Linux was installed on /dev/sda6. Lubuntu partition (/dev/sda5 ) and ESP (/dev/sda1) are not mounted in Arch.
  • /boot of Arch Linux is on /dev/sda6. /boot of Lubuntu is on /dev/sda5. Since Lubuntu is not mounted in / on Arch, /boot directories of Lubuntu and Arch cannot conflict.
  • Custom GRUB menu entries were created in /etc/grub.d/ on /dev/sda5 (Lubuntu) so that GRUB installed by Lubuntu can find Arch setups.
Partition Table
Partition filesystem usage
/dev/sda1 FAT32 GRUB EFI boot loader /boot/efi/EFI/ubuntu/shimx64.efi, mountpoint /boot/efi in Lubuntu
/dev/sda2 swap swap for all operating systems
/dev/sda3 unused 8 GB spare for swap or future RAM upgrade to 16 GB
/dev/sda4 ext4 user data directory, disk label=USER_DATA, mentioned in Grub menuentry below
/dev/sda5 btrfs Lubuntu 19.04, /dev/sda1 is mounted in mountpoint /boot/efi
/dev/sda6 btrfs Arch Linux

Deviations from Arch Linux Installation

1.2 Boot the live environment

You don't need to burn ISO on a USB stick. GRUB can boot an ISO image on any partition. In this example, ISO was downloaded in Lubuntu environment. A GRUB menuentry was created in Lubuntu, which can be seen below. ISO was downloaded into /dev/sda4, which corresponds to set root=(hd0,4) in GRUB menuentry.

/etc/grub.d/25_archiso
#!/bin/sh
exec tail -n +3 $0

# https://wiki.archlinux.org/index.php/Multiboot_USB_drive#Manual_configuration
# use device label instead of UUID
set imgdevpath=/dev/disk/by-label/USER_DATA

# https://wiki.archlinux.org/index.php/Multiboot_USB_drive#Arch_Linux_monthly_release
# root to be set to the partition where the ISO is (/dev/sda4 == (hd0,4)), so that GRUB can pass all relative paths correctly

menuentry 'ARCH ISO' --class arch {
  set root=(hd0,4)
  set isofile=/distros/archlinux-2019.08.01-x86_64.iso
  loopback loop $isofile
  linux (loop)/arch/boot/x86_64/vmlinuz img_dev=$imgdevpath img_loop=$isofile earlymodules=loop
  initrd (loop)/arch/boot/intel_ucode.img (loop)/arch/boot/amd_ucode.img (loop)/arch/boot/x86_64/archiso.img
}

According to your needs, you can change the ISO filename to your current one and the partition where your ISO is.

1.7 Partition the disks

Arch is installed after Lubuntu. Lubuntu already uses swap mount, so it can be shared among both operating systems. Just run the command

swapon <swap partition> 

For multi-boot, don't run mkswap otherwise it will change the UUID of the swap partition, which could increase the boot time of Lubuntu.

In order that GRUB can boot the Arch ISO or the installed Arch, you don't need to mount ESP (/dev/sda1) during Arch installation.

2.2 Install the base packages

pacstrap /mnt base does not install Grub, CPU microcode, wireless utilities. Run following command instead:

pacstrap /mnt base base-devel intel-ucode dialog wpa_supplicant wireless-tools iw grub networkmanager dhclient

Systemd-networkd with WPA_supplicant would be sufficient to set up wireless connection. The other wireless packages are installed just in case, they can be uninstalled later on.

3.8 Boot loader

Don't run grub-install, because there is already a GRUB which was installed by Lubuntu on /dev/sda1 and /dev/sda5. Instead, run grub-mkconfig /boot/grub.cfg.

Note: Actually, for a dual-boot computer, in which Arch Linux can be booted from the GRUB installed by the other operating system, you don't need GRUB at all. You can create a simple Grub file by yourself. For the setup above, create the following file /boot/grub.cfg in /dev/sda6 (hd0,gpt6). The <UUID> is the UUID of /dev/sda6. Even the --id option is not needed:
/boot/grub.cfg
menuentry 'Arch Linux' --class arch --class gnu-linux --class gnu --class os --id 'gnulinux-simple-<UUID>' {
        insmod btrfs
        set root='hd0,gpt6'
        echo    'Loading Linux linux ...'
        linux   /boot/vmlinuz-linux root=UUID=<UUID> rw  loglevel=3 quiet
        echo    'Loading initial ramdisk ...'
        initrd  /boot/intel-ucode.img /boot/initramfs-linux.img
}
submenu 'Advanced options for Arch Linux' --id 'gnulinux-advanced-<UUID>' {
        menuentry 'Arch Linux, with Linux linux' --class arch --class gnu-linux --class gnu --class os --id 'gnulinux-linux-advanced-<UUID>' {
                set root='hd0,gpt6'
                echo    'Loading Linux linux ...'
                linux   /boot/vmlinuz-linux root=UUID=<UUID> rw  loglevel=3 quiet
                echo    'Loading initial ramdisk ...'
                initrd  /boot/intel-ucode.img /boot/initramfs-linux.img
        }
        menuentry 'Arch Linux, with Linux linux (fallback initramfs)' --class arch --class gnu-linux --class gnu --class os --id 'gnulinux-linux-fallback-<UUID>' 
{
                set root='hd0,gpt6'
                echo    'Loading Linux linux ...'
                linux   /boot/vmlinuz-linux root=UUID=<UUID> rw  loglevel=3 quiet
                echo    'Loading initial ramdisk ...'                                                          
                initrd  /boot/initramfs-linux-fallback.img                                                     
        }                                                                                                      
}

The GRUB file which is manually created like the above is safer, because the GRUB configuration file created automatically by the GRUB of Arch might not be parsed correctly by the GRUB of other operating system. In the setup which is described here, Lubuntu 19.04 had GRUB 2.02 (which reads the /boot/grub.cfg file of Arch Linux), whereas Arch Linux had GRUB 2.04 (this GRUB generates by its grub-mkconfig script this file). GRUB config file which is manually created is so simply that it must be able to work without any problem in any release of GRUB.

The generated GRUB configuration file above (located in /dev/sda6 - /boot/cfg) is called by the GRUB configuration file installed by the Lubuntu environment (located in /dev/sda5 /boot/grub/grub.cfg). Go back to Lubuntu and create following file:

/etc/grub.d/26_archdisk
#!/bin/sh
exec tail -n +3 $0

menuentry 'Arch Linux' --class arch {
  set root=(hd0,6)
  configfile /boot/grub.cfg
}

Run in Lubuntu sudo update-grub. /boot/grub/grub.cfg will be updated. Now reboot. GRUB will be started, which was installed by Lubuntu. In GRUB menu you will see Arch Linux.