# Booting the installation medium

<p class="callout warning"><strong>ATTENTION:</strong> The Arch Linux installation medium does <strong>not</strong> support Secure Boot. You will have to disable it to start the installation.</p>

Point your system's current boot device to the USB flash drive plugged into one of the USB ports on your computer. This usually involves pressing a key during POST; F8, F12, TAB, etc. Refer to on screen instructions after turning on your computer or its manual for the exact key to press.

Once the GRUB boot manager comes up select the Arch installer medium option to be presented with the installation environment. You'll be logged in as `root` at a Zsh prompt.

## Setting the correct keyboard layout

The default keyboard layout is US. To list all available keyboard layouts:

<p class="callout info"><strong>NOTE:</strong> You can filter the output by "piping" it to <code>grep</code>, i.e. <code>localectl list-keymaps | grep <em>your search string</em></code>.</p>

~~~bash
localectl list-keymaps
~~~

To change the keyboard layout pass its name to `loadkeys`. For example to set a German keyboard layout:

~~~bash
loadkeys de-latin1
~~~

## Verify boot mode

To verify the current boot mode, check the bitness of the UEFI in sysfs:

~~~bash
cat /sys/firmware/efi/fw_platform_size
~~~

Ideally, this should return `64`, indicating UEFI 64-bit mode. If it returns `32` the system was booted in UEFI 32-bit mode; while this shouldn't be an issue, it limits the choice of compatible boot loaders later on. However, if the file does not exist, this indicates the system was **not** booted in UEFI mode, but in BIOS or CSM mode (**C**ompatibility **S**upport **M**odule, UEFI emulating an old BIOS).

The preferred mode of operation is 64-bit UEFI. Consult your PC's or mainboard's manual on how to disable CSM if BIOS compatibility is not a requirement.

<p class="callout info"> <strong>NOTE:</strong> UEFI has seen mainstream adoption since the introduction of Windows 8 in 2012 and is a base requirement for certification from Microsoft, so PCs sold after that date are sure to support 64-bit UEFI.</p>

## Establish a network connection

To verify network devices are actually available list them with `ip`:

~~~bash
ip link
~~~

It should produce a list of network interfaces with IDs like `enp39s0`, `eth0`, `wlan0`, etc.

### Ethernet

To connect to a network simply connect the LAN cable for a wired network connection.

### Wi-Fi

<p class="callout info"><strong>NOTE:</strong> <code>wlan0</code> is used as the example device in this section. If your device is named differently, adjust accordingly.</p>

For Wi-Fi connections use `iwctl`.
| Command                                           | Description                                                          |
|---------------------------------------------------|----------------------------------------------------------------------|
| `iwctl device list`                               | List available Wi-Fi devices                                         |
| `iwctl station wlan0 scan`                        | Use device `wlan0` to scan for nearby Wi-Fi networks                 |
| `iwctl station wlan0 get-networks`                | Use device `wlan0` to list available Wi-Fi networks                  |
| `iwctl station wlan0 connect HomeWiFiNetworkName` | Use device `wlan0` to connect to Wi-Fi network `HomeWiFiNetworkName` |

### Mobile broadband

See [Arch Wiki](https://wiki.archlinux.org/title/Mobile_broadband_modem#ModemManager) for how to set up `ModemManager`.

## Testing connection

To verify you're online `ping` a server on the internet of your choice, e.g.:

~~~bash
ping archlinux.org
~~~

## Update the system clock

On current Arch ISO live environments, time synchronization with NTP and the system clock should already be enabled. To verify this is the case, call `timedatectl` without any paramenters. 

~~~
               Local time: Sun 2025-01-19 15:51:04 UTC
           Universal time: Sun 2025-01-19 15:51:04 UTC
                 RTC time: Sun 2025-01-19 15:51:04
                Time zone: UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
~~~

If it says `NTP service: active`, you're good. Otherwise, enable the NTP service with:

~~~bash
timedatectl set-ntp true
~~~

By default, the time zone is set to UTC. You should change that to the region you reside in for correct timestamps. Set the appropriate time zone (autocomplete with `Tab` key), e.g. for Germany:

~~~bash
timedatectl set-timezone Europe/Berlin
~~~

Your system's local time offset should now be set. Check again with `timedatectl`:

~~~
               Local time: Sun 2025-01-19 16:54:57 CET
           Universal time: Sun 2025-01-19 15:54:57 UTC
                 RTC time: Sun 2025-01-19 15:54:56
                Time zone: Europe/Berlin (CET, +0100)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
~~~