selfhosted-apps-docker/arch_linux_host_install/readme.md

6.8 KiB

Arch Linux installation to serve as a docker host

guide-by-example

logo

Purpose

Linux that will run docker.

This is not a hand hodling 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.
Google for plenty of tutorials and youtube videos alongside arch wiki.

Files and directory structure

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

Make installation usb

wiki

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.

Installation

  • 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
  • choose geographicly close mirror, dd deletes entire line in vim
    vim /etc/pacman.d/mirrorlist
  • install the base system
    pacstrap /mnt base linux linux-firmware base-devel grub vim
  • gnerate 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
    passwd
  • remove the bootable media and restart the machine
    exit
    reboot

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=vim visudo
    %wheel ALL=(ALL) ALL

  • check the network interface name
    ip link

  • set static IP using systemd-networkd and resolv.conf

    vim /etc/systemd/network/20-wired.network

    [Match]
    Name=enp0s25
    
    [Network]
    Address=10.0.19.2/24
    Gateway=10.0.19.1
    

    vim /etc/resolv.conf

    nameserver 8.8.8.8
    nameserver 1.1.1.1
    

    systemctl enable --now systemd-networkd

    No troublesome systemd-resolved in this setup.

  • uncomment desidred locales in locale.gen
    vim /etc/locale.gen

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

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

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

  • setup a swap file
    fallocate -l 8G /swapfile
    chmod 600 /swapfile
    mkswap /swapfile
    vim /etc/fstab
    /swapfile none swap defaults 0 0

  • reboot
    reboot

SSH, Docker, ZSH, AUR

From now on its login as non-root user.

Setup SSH access

wiki

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

Setup docker

Wiki

  • 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

wiki

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

  • install zsh and curl packages
    sudo pacman -S zsh git curl
  • install zim, it changes users default shell to zsh
    curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh
  • change the default shell to zsh
    chsh -s /bin/zsh
Adding stuff to .zshrc

vim .zshrc

  • export EDITOR=vim

  • 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 https://aur.archlinux.org/yay-bin.git
    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

Some packages

Tools

  • sudo pacman -S fuse curl wget vim 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 keep of read times
    sudo vim /etc/fstab
    UUID=cdd..addb / ext4 rw,noatime 0 1
  • enable use of all cpu cores for makepkg jobs and disable compression
    sudo vim /etc/makepkg.conf
    MAKEFLAGS="-j$(nproc)"
    PKGEXT='.pkg.tar'
  • clean up old packages weekly, keep last 3
    sudo pacman -S pacman-contrib
    sudo systemctl enable --now paccache.timer
  • use reflector to get the fastes mirrors based on country -c <country code>
    sudo pacman -S reflector
    sudo reflector -l 200 -n 20 -c SK -c CZ -p http --sort rate --save /etc/pacman.d/mirrorlist

Comfort

  • enable colors in pacman.conf
    sudo vim /etc/pacman.conf
    Color

Notebook

  • control power events, lid close for example
    sudo vim /etc/systemd/logind.conf
    HandleLidSwitch=ignore