You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DoTheEvo e8982b0dd1 update 1 year ago
.. update 1 year ago

Arch Linux installation to serve as a docker host




Since 2022 I am using the archinstall script that comes with arch iso
After the install I use my ansible playbooks to setup the arch the way I like it


Linux that will run docker.

This is not a hand holding explaining guide how to install arch.
It's more of a checklist on what to do if you already done it and know what you are doing.

Files and directory structure

└── bastard/
    └── docker/
        ├── container-setup #1
        ├── container-setup #2
        ├── ...

Make installation usb


sudo dd bs=4M if=archlinux-2020.05.01-x86_64.iso of=/dev/sdX status=progress oflag=direct

The above command will fuck your machine up if you dunno what you are doing.

Boot from the usb

This is BIOS/MBR setup as I am running on an old thinkpad with a busted screen, plus I like the simplicity of it.
So if theres boot menu option choose non-uefi.


  • create a single partition and mark it bootable
    cfdisk -z /dev/sda
  • build ext4 filesystem on it
    mkfs.ext4 /dev/sda1
  • mount the new partition
    mount /dev/sda1 /mnt
  • install the base system
    pacstrap /mnt base linux linux-firmware base-devel grub micro
  • generate fstab
    genfstab -U /mnt > /mnt/etc/fstab
  • chroot in to the new system
    arch-chroot /mnt
  • install grub
    grub-install /dev/sda
    grub-mkconfig -o /boot/grub/grub.cfg
  • set password for root
  • remove the bootable media and restart the machine

Basic configuration after the first boot

  • login as root

  • set hostname
    echo docker-host > /etc/hostname

  • add new user and set their password
    useradd -m -G wheel bastard
    passwd bastard

  • edit sudoers to allow users of the group wheel to sudo
    EDITOR=micro visudo
    %wheel ALL=(ALL) ALL

  • check the network interface name
    ip link

  • setup networking using systemd-networkd and systemd-resolved
    create file either in static or dhcp configuration

    micro /etc/systemd/network/


    for DNS resolution and hostname exposure using mDNS and LLMNR
    systemd-resolved will be used in stub mode
    by replacing /etc/resolv.conf with a link to stub-resolv.conf

    ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

    enable the services

    • systemctl enable --now systemd-resolved
    • systemctl enable --now systemd-networkd
  • uncomment desired locales in locale.gen
    micro /etc/locale.gen

  • generate new locales and set one system wide
    localectl set-locale LANG=en_US.UTF-8

  • select timezone and set it permanent
    timedatectl set-timezone 'Europe/Bratislava'

  • set hardware clock and sync using ntp
    hwclock --systohc --utc
    timedatectl set-ntp true

  • setup a swap file
    dd if=/dev/zero of=/swapfile bs=1M count=8192 status=progress
    chmod 600 /swapfile
    mkswap /swapfile
    micro /etc/fstab
    /swapfile none swap defaults 0 0

  • reboot

SSH, Docker, ZSH, AUR

From now on its login as non-root user.

Setup SSH access


  • install openssh package
    sudo pacman -S openssh
  • edit sshd_config
    sudo micro /etc/ssh/sshd_config
    PasswordAuthentication yes
  • enable sshd service
    sudo systemctl enable --now sshd

Setup docker


  • have docker and docker-compose packages installed
    sudo pacman -S docker docker-compose
  • enable docker service
    sudo systemctl enable --now docker
  • add non-root user to the docker group
    sudo gpasswd -a bastard docker

ZSH shell


I like Zim, it's the fastest zsh framework and set up nicely out of the box

  • install zsh and curl packages
    sudo pacman -S zsh git curl
  • install zim
    curl -fsSL | zsh
  • change the default shell to zsh
    chsh -s /bin/zsh
  • I prefer steeef theme echo 'zmodule steeef' >> ~/.zimrc && zimfw install
Adding stuff to .zshrc

micro .zshrc

  • export EDITOR=micro
    export VISUAL=micro

  • for ctrl+f prepending sudo

    add_sudo (){
        BUFFER="sudo $BUFFER"
        zle -w end-of-line
    zle -N add_sudo
    bindkey "^f" add_sudo
ZSH docker autocomplete

Here. For zim it's "Without oh-my-zsh shell" section.

Access to AUR

Using Yay.

  • install git package
    sudo pacman -S git
  • install yay
    git clone
    cd yay-bin && makepkg -si
    cd .. && rm -rf yay-bin

ctop-bin and inxi are good AUR packages.

Extra stuff

wiki - general general recommendations
wiki - improving performance

CPU microcode

  • sudo pacman -S intel-ucode
  • sudo grub-mkconfig -o /boot/grub/grub.cfg

Some packages


  • sudo pacman -S fuse curl wget micro nnn bind-tools borg python-llfuse

Monitoring and testing

  • sudo pacman -S htop lm_sensors iotop nload powertop iproute2

Performance and maintenance

  • install cron and enable the service
    sudo pacman -S cronie
    sudo systemctl enable --now cronie

  • if ssd, enable periodic trim
    sudo pacman -S util-linux
    sudo systemctl enable --now fstrim.timer

  • set noatime in fstab to prevent unnecessary tracking of read times
    sudo micro /etc/fstab
    UUID=cdd..addb / ext4 rw,noatime 0 1

  • enable use of all cpu cores for makepkg jobs and disable compression
    sudo micro /etc/makepkg.conf

  • clean up old packages weekly, keep last 3
    sudo pacman -S pacman-contrib
    sudo systemctl enable --now paccache.timer

  • use reflector to get the fastest mirrors based on country -c <country code>
    sudo pacman -S reflector
    sudo reflector -c SK,CZ,UA -p http --score 20 --sort rate --save /etc/pacman.d/mirrorlist

    automatic mirror update with reflector


    --save /etc/pacman.d/mirrorlist
    --protocol http
    --country SK,CZ,UA
    --score 20
    --sort rate

    enable it, it will run weekly

    sudo systemctl enable --now reflector.timer


  • enable colors in pacman.conf
    sudo micro /etc/pacman.conf


Lid closed should not make the machine go to sleep.

  • Set lid handle switch to ignore in systemd logind.conf
    sudo micro /etc/systemd/logind.conf

But this alone leaves the screen running nonstop.

Tried to find solution, and while sudo vbetool dpms off works, turning it back on does not sudo vbetool dpms on and it timesout without any message or error.

Might be specific for the hardware, currently its latitude E5570