This is not a good tutorial (nor GNU/Linux distribution) as first approach to the console. On that case I highly recommend you to try the awesome Debian distribution first (actually that’s a better distro than this one, we use it because we like to learn to configure it all). You have been warned.

This tutorial is expected to work with Parabola OpenRC, Parabola systemd and Arch Linux. I’m assuming you’re connecting to a wireless network with WPA security or a Wired connection with dynamic IP.

Everything after a # is a comment.

Set keyboard layout

You can skip this step on Parabola with systemd, as your keyboard will be prompted, for every other system keep reading.

Find your (QUERTY) keymap by looking at /usr/share/kbd/keymaps/i386/qwerty/. If you want to look at them all you can list recursively with ls -R <path> | less.

The most common keymap layouts for english speakers are us and uk, while for spanish speakers are la-latin1, es and us-acentos.

Now that you’ve found your keymap ignore path and the file extension, you want the name. Execute:

loadkeys <layout> # such as 'us'

Connect to internet

You can skip this step if connected to a wired network with dynamic IP (that’s the common case).

You’ll need internet to download packages, I’ll just explain how to connect to WiFi.

Identify your wireless network card interface with:

iw dev

It should print something like ... Interface wlp2s0 .... A wireless card interface should start with w, like wlan0 or wlp3s0 if it does not appear means you don’t have the proper drivers. I’ll not explain how to install your - most likely privative :( - drivers, this is most likely to happen with Parabola than Arch, good luck if that’s your case! if not, keep reading.

Now that you’ve identified the interface to connect to, connect using WPA:

wpa_supplicant -B -i <interface> -c <(wpa_passphrase "Your Network" "your network's password")

Disk partition and mounting

This part depends a lot on how you want to configure your system. If you don’t know, then follow my recommendations.

parted # start parted, used to partition disk
print devices # Will show your disks
select /dev/sdX # Select device on which to install, usually the one with more GB
print free # lists current partitions and free space

IMPORTANT: You will most probably delete partitions now, if you want to conserve something on the disk don’t delete it until you’re sure it’s backed up or if you really know what you’re doing. If you will conserve partitions, but not resize them you’ll be OK, if you want to resize I would urge you to make a backup first, you have been warned.

If you want to create a GPT partition table and use the full disk (as most modern systems do by default).

mklabel gpt # create GPT table, not if you want to conserve something
mkpart primary fat32 1MiB 261MiB # create new ESP (will boot from here)
set 1 esp on # set esp flag (so it knows it boots from here)
name 1 "EFI system partition" # name it so you know what it is
mkpart primary ext4 261MiB 100% # system partition, use the full disk
name 2 "GNU/Linux" # name it :)
q # all done! quit
mkfs.fat /dev/sdX1 # format esp*
mkfs.ext4 /dev/sdX2 # format system partition
mount /dev/sdX2 /mnt
mkdir /mnt/boot && mount /dev/sdX1 /mnt/boot # Mount esp partition

* If unsure what’s the value of sdX run lsblk -l | grep part.

Full disk MBR

If you want to use an MBR scheme (usually for older computers) run:

mklabel msdos # create MBR table, not if you want to conserve something
mkpart primary ext4 1MiB 100% # use the full disk
set 1 boot on # boot from here
q # all done! quit parted
mkfs.ext4 /dev/sdX1 # format disk*
mount /dev/sdX1 /mnt

* If unsure what’s the value of sdX run lsblk -l | grep part.

Custom partitioning

If you want to conserve something. We use MiB or GiB as measure of size as it’s more precise, you can use % too check previous examples. This is just a kind help, I can’t handle all cases here, check previous for guidance.

unit MiB print free # shows current partition numbers and free space
rm <number> # delete partitions you don't need (don't delete esp if dual booting!)
resizepart <number> <end> # resize, notice <end> is not the new size, but the end block!
mkpart primary linux-swap <beginning-of-free-space> <plus-1.5-times-ram> # read note**
mkpart primary ext4 <beginning-of-free-space> <same-plus-your-partition-size> # new partition
name <number> "<descriptive-name>" # name of new partition
q # all done! quit
mkfs.fat /dev/sdXY # format esp*
mkfs.ext4 /dev/sdXY # format system partitions
mount /dev/sdXY /mnt # Mount root (/) partition
mkdir /mnt/boot && mount /dev/sdXY /mnt/boot # Mount boot or esp partition, if applies
mount /dev/sdXY /mnt/<other> # Mount any other partition

* If unsure what’s the values of sdXY run lsblk -l | grep part.

** Note on swap partition: You might want to add a linux swap for hiberation, if your disk is not SSD and want hibernation. It should be 1.5 times the amount of RAM you have, but can be a lot less, check this. Activate swap with: mkswap /dev/sda2 # format swapon /dev/sda2 # activate

Update keyring (Parabola, mandatory)

Only for Parabola GNU/Linux-libre, update the keyring.

pacman -Sy archlinux-keyring archlinux32-keyring archlinuxarm-keyring parabola-keyring
pacman-key --populate archlinux archlinux32 archlinuxarm parabola
pacman-key --refresh-keys

If some package fails to update, update the others and then the one that failed, don’t delete the package that failed. It’s tricky sometimes, but you will achieve if you keep trying.

Install the base system

# Position a server preferably from your country first on /etc/pacman.d/mirrorlist (optional)

# On the next line, for Parabola OpenRC use `openrc-base` instead of `base`
pacstrap /mnt base # Install the base system
genfstab -U /mnt >> /mnt/etc/fstab # Generate partitions table
arch-chroot /mnt # Position yourself inside your installation

Setting things up

ln -sf /usr/share/zoneinfo/<your-timezone> /etc/localtime # set your timezone
date MMDDhhmmYYYY.s # set time, replace letters with numbers, that's the format
hwclock --systohc # Sync hardware clock
# Uncomment your locale on /etc/locale.gen, just the UTF8 one, as 'en_CA.UTF-8 UTF-8'
echo "LANG=en_CA.UTF-8" > /etc/locale.conf # The same locale
echo "KEYMAP=us' > /etc/vconsole.conf # your keymap layout
echo "" > /etc/hostname # the "name of your machine"

passwd # your root (superuser) password
useradd <your_user> --create-home # create your user
passwd <your_user> # set your password
pacman -Sy sudo # So you can login as superuser on the wild
# Uncomment first line starting with %wheel on /etc/sudoers
usermod -a -G wheel <your_user>

Boot loader

bootctl --path=/boot install
mkdir -p /boot/loader/entries

echo "title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=/dev/sdXY rw" > /boot/loader/entries/arch.conf # sdXY = The root partition


pacman -S grub
grub-install --target=i368-pc /dev/sdX # install grub in MBR
grub-mkconfig -o /boot/grub/grub.cfg # generate config file

Notice that it must be installed on sdX, not sdXY. If unsure run lsblk -l | grep disk, must be the one where you installed it all.

Everything else (2nd recommendation)

Works with UEFI only, if you don’t know what’s UEFI, it’s probably what you’re looking for.

pacman -S grub efibootmgr
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB # For GPT
grub-mkconfig -o /boot/grub/grub.cfg # generate config file


pacman -S wpa_supplicant openssl # If connected through WiFi, to connect again
exit # All done! reboot :D

With love from me to you <3

Felix Freeman < sir arro-ba hacktivista pun-to com >

Released under CC0