6.8 KiB
Arch Linux installation to serve as a docker host
guide-by-example
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
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
- 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
- have
docker
anddocker-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 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