SSH Remote Installation
Enable ssh service from the live iso installation media
passwd
ip addr
systemctl status sshd
systemctl start sshd
Create screen session
screen -S share-screen
SSH to remote host and screen session
ssh [email protected]
screen -x share-screen
Arch Linux - full disk encryption install
loadkeys <<EOF
keymaps 0-127
keycode 58 = Control
EOF
sudo rmmod pcspkr
Ensure your network interface is listed and enabled, for example with ip-link(8):
ip link
Connect to wi-fi
wifi-menu -o
iwctl device list
iwctl station <wlan0> scan
iwctl station <wlan0> get-networks
iwctl station <wlan0> connect <SSID>
Connect to ethernet
dhcpcd
Check network
ping 1.1.1.1 -c 4
Configure mirrorlist
curl -L 'https://archlinux.org/mirrorlist/?country=all&protocol=https&ip_version=4' >> /etc/pacman.d/mirrorlist
vim /etc/pacman.d/mirrorlist
Refresh pacman db and install reflector
pacman -Syyy
pacman -S reflector
reflector --protocol https --latest 32 --age 24 --sort rate --sort score --sort country --save /etc/pacman.d/mirrorlist
pacman -Sy terminus-font
setfont ter-v18b
List the efivars directory:
efivar --list
ls /sys/firmware/efi/efivars
Update the system clock
timedatectl set-ntp true
timedatectl status
- LVM on LUKS.
- https://wiki.archlinux.org/title/Dm-crypt/Encrypting_an_entire_system#Encrypted_boot_partition_(GRUB)
fdisk -l
The following partitions are required full disk encryption with encrypted boot partition.
Mount point | Partition | Partition type | Encryption | Size |
---|---|---|---|---|
/mnt/efi |
/dev/nvme0n1p1 |
EFI System | 2GB | |
/mnt/boot |
/dev/nvme0n1p2 |
Linux filesystem | luks1 | 2GB |
/mnt |
/dev/nvme0n1p3 |
Linux LVM | luks2 | 256GB |
fdisk /dev/nvme0n1
- Create new partition table
- g - create new GPT partition table
- Create
EFI
partition
- n - Add new partition
- 1 - Partition number
- Enter - For first sector
- +2G - For last sector
- t - Change partition type
- 1 - Partition type -
(1) EFI System
- Create
boot
partition
- n - Add new partition
- 2 - Partition number
- Enter - For first sector
- +2G - For last sector
- t - Change partition type
- 2 - Number of partition
- 20 - Partition type -
(20) Linux filesystem
- Create
LVM
partition
- n - Add new partition
- 3 - Partition number
- Enter - For first sector
- +256G | Enter - For last sector
- t - Change partition type
- 3 - Number of partition
- 44 - Partition type -
(44) Linux LVM
- Save changes
- p - print partition table
- w - write table to disk and exit
cryptsetup -y -v luksFormat --type luks1 /dev/nvme0n1p2
cryptsetup open --type luks1 /dev/nvme0n1p2 kboot
cryptsetup -y -v luksFormat /dev/nvme0n1p3
cryptsetup open --type luks /dev/nvme0n1p3 lvm
pvcreate --dataalignment 1m /dev/mapper/lvm
vgcreate vg /dev/mapper/lvm
lvcreate -L 16GB vg -n lv-swap
lvcreate -L 128GB vg -n lv-root
lvcreate -l 100%FREE -n lv-home vg
# load device mapper kernel module
lsmod | grep dm_mod
modprobe dm_mod
vgscan
vgchange -ay
mkswap /dev/vg/lv-swap
swapon /dev/vg/lv-swap
mkfs.ext4 /dev/vg/lv-root
mount /dev/vg/lv-root /mnt
mkdir /mnt/boot
mkfs.ext4 /dev/mapper/kboot
mount /dev/mapper/kboot /mnt/boot
mkdir /mnt/home
mkfs.ext4 /dev/vg/lv-home
mount /dev/vg/lv-home /mnt/home
# # -> will mount later
mkfs.vfat -F32 /dev/nvme0n1p1
pacstrap -i /mnt base base-devel vi vim
genfstab -U /mnt >> /mnt/etc/fstab
echo "kboot UUID=$(blkid --match-tag UUID --output value /dev/nvme0n1p2) none luks1" | tee -a /etc/crypttab
arch-chroot /mnt
pacman-key --init
pacman-key --populate archlinux
pacman -S grub efibootmgr os-prober linux linux-headers linux-firmware mkinitcpio lvm2 terminus-font ttf-dejavu
echo KEYMAP=us > /etc/vconsole.conf
echo FONT=ter-v18b >> /etc/vconsole.conf
vim /etc/mkinitcpio.conf
- Add to BINARIES ->
setfont
- Add to HOOKS ->
consolefont
beforeblock
- Add to HOOKS ->
encrypt lvm2
betweenblock
andfilesystems
File /etc/mkinitcpio.conf
should look like this:
# /etc/mkinitcpio.conf
BINARIES=(setfont)
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt lvm2 filesystems fsck)
Generate initial ramdisk environment for booting the Linux kernel based on the specified preset:
mkinitcpio -p linux
vim /etc/default/grub
- Uncomment
GRUB_ENABLE_CRYPTODISK=y
- Add to cmd line linux default ->
cryptdevice=/dev/nvme0n1p3:vg
- Add
GRUB_EARLY_INITRD_LINUX_STOCK=""
in order to not load microcode with GRUB, it will be handled later with by initramfs
GRUB_ENABLE_CRYPTODISK=y
GRUB_EARLY_INITRD_LINUX_STOCK=""
GRUB_CMDLINE_LINUX="cryptdevice=/dev/nvme0n1p3:vg"
mkdir /boot/EFI
mount /dev/nvme0n1p1 /boot/EFI
grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck
mkdir /boot/grub/locale
cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
grub-mkconfig -o /boot/grub/grub.cfg
pacman -S freetype2
grub-mkfont --output /boot/grub/fonts/ter.pf2 --size 20 /usr/share/fonts/misc/ter-x20b.pcf.gz
echo "GRUB_FONT=/boot/grub/fonts/ter.pf2" >> /etc/default/grub
grub-mkconfig --output /boot/grub/grub.cfg
passwd
ln -sf /usr/share/zoneinfo/Europe/Sofia /etc/localtime
hwclock --systohc
hwclock --systohc --utc
vim /etc/locale.gen
>> `en_US.UTF-8 UTF-8`
>> `en_GB.UTF-8 UTF-8`
>> `bg_BG.UTF-8 UTF-8`
locale-gen
echo LANG=en_US.UTF-8 > /etc/locale.conf
echo LC_TIME=en_GB.UTF-8 >> /etc/locale.conf
Configure network with iwd
or networkmanager
pacman -S iwd
echo arch > /etc/hostname
vim /etc/hosts
#/etc/hosts
::1 localhost
127.0.0.1 localhost
127.0.1.1 arch.local arch
vim /etc/resolv.conf
#/etc/resolv.conf
nameserver 1.1.1.1
nameserver 1.0.0.1
nameserver 8.8.8.8
nameserver 8.8.8.4
vim /etc/iwd/main.conf
#/etc/iwd/main.conf
[General]
EnableNetworkConfiguration=true
[Network]
NameResolvingService=systemd
Enable Network Services
systemctl enable iwd
systemctl enable systemd-networkd
systemctl enable systemd-resolved
exit
umount -R /mnt
reboot
pacman -Syu
- For
AMD
processors, install theamd-ucode
package. - For
Intel
processors, install theintel-ucode
package. - Add
microcode
hook in/etc/mkinitcpio.conf
- Delete
ALL_microcode=(/boot/*-ucode.img)
from/etc/mkinitcpio.d/linux.preset
- Arch wiki -> https://wiki.archlinux.org/index.php/Microcode
pacman -S amd-ucode | intel-ucode !
grub-mkconfig -o /boot/grub/grub.cfg
pacman -S pipewire
pacman -S pipewire-alsa
pacman -S pipewire-audio
pacman -S pipewire-jack
pacman -S pipewire-pulse
pacman -S wireplumber
sudo systemctl enable --now fstrim.timer
Basic Firewall
pacman -S ufw
ufw enable
ufw status verbose
systemctl enable ufw
DNS with DNSSEC validation
pacman -S unbound expat
systemctl --failed
journalctl -p 3 -xb
useradd -m -g users -G wheel <user>
passwd <user>
EDITOR=vim visudo
# # >> -> uncomment %wheel group
pacman -S sudo
Powertop
pacman -S powertop
powertop --auto-tune
Cronie
pacman -S cronie
crontab -e
crontab -l
Cron list
@reboot sleep 60 && powertop --auto-tune
@reboot sleep 10 && brightnessctl --device platform::micmute set 0
pacman -S git git-delta
pacman -S curl wget rsync
pacman -S procs htop bottom
pacman -S bat man tldr
pacman -S tree eza lsd zoxide
pacman -S duf dust
pacman -S fx tokei
pacman -S fd fzf skim ripgrep the_silver_searcher
pacman -S helix neovim neovide
pacman -S starship
pacman -S alacritty kitty
pacman -S llvm gcc clang cmake python rust nodejs npm typescript
pacman -S xorg-xdpyinfo xorg-xprop xorg-xrandr xorg-xwininfo
pacman -S fastfetch neofetch catimg chafa feh imagemagick jp2a libcaca nitrogen
pacman -S
terminus-font
gnu-free-fonts
cantarell-fonts
powerline-fonts
otf-font-awesome
noto-fonts-emoji
adobe-source-code-pro-fonts
pacman -S
ttf-ibm-plex
ttf-jetbrains-mono
ttf-ubuntu-font-family
AUR ttf-intel-one-mono
pacman -S
ttf-font-nerd
ttf-ubuntu-mono-nerd
ttf-ibmplex-mono-nerd
ttf-jetbrains-mono-nerd #alacritty fallback
ttf-nerd-fonts-symbols-mono # alacritty fallback
ttf-nerd-fonts-symbols-common # alacritty fallback
pacman -S sway swaybg swayimg swayidle swaylock swaync waybar nwg-bar
pacman -S hyprland hypridle hyprlock hyprcursor hyprutils hyprpaper hyprwayland-scanner
pacman -S wofi fuzzel cosmic-files
pacman -S waybar nwg-bar nwg-look swaync
pacman -S xdg-desktop-portal-gtk xdg-desktop-portal-hyprland
pacman -S brightnessctl power-profiles-daemon
pacman AUR -S hyprsysteminfo hyprlauncher
pacman -S ly
systemctl enable ly.service
systemctl disable [email protected]
pacman -S lemurs
systemctl disable display-manager.service
systemctl enable lemurs.service
pacman -Ss <keyword>
- search pacakgepacman -R <package-name>
- remove pkgpacman -Rs <package-name>
- remove pkg with dependenciespacman -Q
- list all install packagespacman -Qi <package-name>
- info and reason for installationpacman -Qm <package-name>
- look for foreign dependenciespacman -Qdt
- list all packages no longer required as dependenciespacman -Qet
- list all packages explicitly installed and not required as dependenciespacman -R $(pacman -Qdtq)
- remove all of these unnecessary packagespactree <package-name>
- view the dependency tree of a package
Options:
pacman
has acolor
option.->
Uncomment theColor
line in/etc/pacman.conf
pacman
has aParallelDownloads
option.->
Set theParallelDownloads
line in/etc/pacman.conf
A pacman
cache cleaning utility
paccache -d
- Perform a dry-run and show the number of candidate packages for deletionpaccache -r
- Remove all but the 3 most recent package versions from thepacman
cachepaccache -rk 3
- Set the number of package versions to keep
λ dd if=<file> of=<device> bs=4M; sync
λ dd if=arch-linux.iso of=/dev/sda1 bs=4M status=progress; sync
λ geteltorito.pl -o <image>.img <image>.iso
λ geteltorito.pl -o uefi_bios.img r10ur26w.iso
λ sudo dd if=uefi_bios.img of=/dev/sda bs=512K