4.9 KiB
Microsoft Surface Pro 3 with Arch Linux and i3
!!! documentation unfinished !!!
(Dual) Booting Arch Linux (and Windows) with UEFI and Secure Boot
-
Save all your files, will will format the whole file system.
-
Download Arch Linux ISO [archlinux-yyyy.mm.dd-dual.iso] [arch] via HTTP Direct Downloads (choose a Mirror) or BitTorrent Download [arch]: https://www.archlinux.org/download/ "Arch Linux Downloads"
-
Create UEFI bootable USB device (with [Rufus] [rufus] and default settings) [rufus]: https://rufus.akeo.ie/ "Rufus"
-
Disable Secure Boot Source: Windows [win:sb]
- Shut down your Surface.
- Press and hold the volume-up button on your Surface and at the same time, press and release the power button.
- When you see the Surface logo, release the volume-up button. The UEFI menu will display within a few seconds.
- Disable Secure Boot Control [win:sb]: https://www.microsoft.com/surface/en-us/support/warranty-service-and-recovery/how-to-use-the-bios-uefi?os=windows-10&=undefined "Windows"
-
(Optionally: Disable Windows Fast Boot — to switch between operating systems)
Installing the Linux distro
Insert the live USB and boot by holding volume down, then the power button.
Optionally set the keyboard layout (default is US)
$ loadkeys de-latin1
Set or in this case increase the font size
$ setfont latarcyrheb-sun32
Connect to the Internet
$ iw dev # list wireless devices
$ iw dev wlp1s0 link # Print information about the current link
$ wifi-menu -o wlp1s0 # -o hides the password
Update the system clock
$ timedatectl set-ntp true
$ timedatectl status
$ timedatectl set-timezone Europe/Berlin
Partitioning
Note: Using parted with mkpart defines partitions via a from and a to
argument.
$ lsblk # list devices /dev/sda?
$ parted /dev/sdx # could be /dev/sda
(parted) mklabel gpt # for UEFI
(parted) mkpart ESP fat32 1MiB 513MiB # EFI System Partition
(parted) set 1 boot on
(parted) mkpart primary linux-swap 513MiB 9GiB # for 8GB DRAM
(parted) mkpart primary ext4 9GiB 40% # Linux partition
(parted) mkpart primary ntfs 40% 60% # Shared partition
(parted) quit
That last entry is for a shared NTFS filesystem that both operating systems (Linux and Windows) can use, e. g. for a cloud service like Dropbox, email, downloads, etc. The Windows section is left unallocated, it will be formatted by the windows installer.
Formatting
$ mkfs.fat -F32 /dev/sdx1 # UEFI boot must be fat32
$ mkswap /dev/sdx2
$ swapon /dev/sdx2
$ mkfs.ext4 /dev/sdx3 # Linux root
$ mkfs.ntfs -f /dev/sdx4
Mount
Mount the root partition on /mnt and for the boot partition first create
directory and then mount it also.
$ mount /dev/sdx3 /mnt
$ mkdir -p /mnt/boot
$ /dev/sbx1 /mnt/boot
Install the base packages and configure the system
Edit /etc/pacman.d/mirrorlist and select a download mirror (uncommenting the
specific line). see also Arch Linux Wiki: Mirrors [arch:mirrors]
[arch:mirrors]: https://wiki.archlinux.org/index.php/Mirrors "Arch Linux Mirrors"
Install the base packages or more
$ pacstrap /mnt base
# or
$ pacstrap -i /mnt base base-devel btrfs-progs
Generate an fstab file, so the filesystem knows how to mount the disk
partitions. see also Arch Linux Wiki: fstab [arch:fstab]
[arch:fstab]: https://wiki.archlinux.org/index.php/Fstab "Arch Linux fstab"
$ genfstab -U /mnt >> /mnt/etc/fstab
Change root into the new system
$ arch-chroot /mnt /bin/bash # bash shell instead of the default sh
For localizations uncomment en_US.UTF-8 UTF-8 and other needed localizations
in /etc/locale.gen, e. g. de_DE.UTF-8 UTF-8. Finally generate the locale
files:
$ locale-gen
Set the LANG variable in /etc/locale.conf accordingly
LANG=en_US.UTF-8
Optionally set the keyboard layout and set the font in /etc/vconsole.conf
KEYMAP=de-latin1
FONT=latarcyrheb-sun32
Set the time zone, e. g. for Germany as Europe/Berlin. Three ways possible: see also Arch Linux Wiki: Time zone [arch:tz] [arch:tz]: https://wiki.archlinux.org/index.php/Fstab "Arch Linux Time zone"
-
interactively with
tzselect(e. g. 7) Europe, 16) Germany, 2) Germany, 1) yes), -
via
timedatectl$ timedatectl # check the current zone $ timedatectl list-timezones # list available zones $ timedatectl set-timezone Europe/Berlin # change your time zone -
or create the symlink manually
$ ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
Set the Hardware Clock from the System Clock, and update the timestamps in
/etc/adjtime via:
hwclock --systohc --utc
...