til/install-archlinux.md

327 lines
6.2 KiB
Markdown

# Install Arch Linux
Install Arch Linux is thing I always want to do for my laptop/PC since I had my laptop in ninth grade.
This is not a guide for everyone, this is just save for myself in a future and for anyone who want to walk in my shoes.
## [Installation guide](https://wiki.archlinux.org/index.php/Installation_guide)
### Pre-installation
Check disks carefully:
```sh
lsblk
```
[USB flash installation medium](https://wiki.archlinux.org/index.php/USB_flash_installation_medium)
#### Verify the boot mode
Check UEFI mode:
```sh
ls /sys/firmware/efi/efivars
```
#### Connect to the internet
For wifi, use [iwd](https://wiki.archlinux.org/index.php/Iwd).
#### Partition the disks
[GPT fdisk](https://wiki.archlinux.org/index.php/GPT_fdisk):
```sh
cgdisk /dev/sdx
```
[Partition scheme](https://wiki.archlinux.org/index.php/Partitioning#Partition_scheme)
UEFI/GPT layout:
| Mount point | Partition | Partition type | Suggested size |
| ----------- | ------------------------------------- | ------------------------------ | -------------- |
| `/mnt/efi` | `/dev/efi_system_partition` | EFI System Partition | 512 MiB |
| `/mnt/boot` | `/dev/extended_boot_loader_partition` | Extended Boot Loader Partition | 1 GiB |
| `/mnt` | `/dev/root_partition` | Root Partition | |
BIOS/GPT layout:
| Mount point | Partition | Partition type | Suggested size |
| ----------- | --------------------- | ------------------- | -------------- |
| | | BIOS boot partition | 1 MiB |
| `/mnt` | `/dev/root_partition` | Root Partition | |
LVM:
```sh
# Create physical volumes
pvcreate /dev/sdaX
# Create volume groups
vgcreate RootGroup /dev/sdaX /dev/sdaY
# Create logical volumes
lvcreate -l +100%FREE RootGroup -n rootvol
```
Format:
```sh
# efi
mkfs.fat -F32 /dev/efi_system_partition
# boot
mkfs.fat -F32 /dev/extended_boot_loader_partition
# root
mkfs.ext4 -L ROOT /dev/root_partition
# root with btrfs
mkfs.btrfs -L ROOT /dev/root_partition
# root on lvm
mkfs.ext4 /dev/RootGroup/rootvol
```
Mount:
```sh
# root
mount /dev/root_partition /mnt
# root with btrfs
mount -o compress=zstd /dev/root_partition /mnt
# root on lvm
mount /dev/RootGroup/rootvol /mnt
# efi
mount --mkdir /dev/efi_system_partition /mnt/efi
# boot
mount --mkdir /dev/extended_boot_loader_partition /mnt/boot
```
### Installation
```sh
pacstrap -K /mnt base linux linux-firmware
# AMD
pacstrap -K /mnt amd-ucode
# Intel
pacstrap -K /mnt intel-ucode
# Btrfs
pacstrap -K /mnt btrfs-progs
# LVM
pacstrap -K /mnt lvm2
# Text editor
pacstrap -K /mnt neovim
```
### Configure
#### [fstab](https://wiki.archlinux.org/index.php/Fstab)
```sh
genfstab -U /mnt >> /mnt/etc/fstab
```
#### Chroot
```sh
arch-chroot /mnt
```
#### Time zone
```sh
ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
hwclock --systohc
```
#### Localization:
Edit `/etc/locale.gen`:
```txt
# Uncomment en_US.UTF-8 UTF-8
```
Generate locales:
```sh
locale-gen
```
Edit `/etc/locale.conf`:
```txt
LANG=en_US.UTF-8
```
#### Network configuration
Edit `/etc/hostname`:
```txt
myhostname
```
#### Initramfs
Edit `/etc/mkinitcpio.conf`:
```txt
# LVM
# https://wiki.archlinux.org/title/Install_Arch_Linux_on_LVM#Adding_mkinitcpio_hooks
HOOKS=(base udev ... block lvm2 filesystems)
# https://wiki.archlinux.org/title/mkinitcpio#Common_hooks
# Replace udev with systemd
```
```sh
mkinitcpio -P
```
#### Root password
```sh
passwd
```
#### Addition
```sh
# NetworkManager
pacman -Syu networkmanager
systemctl enable NetworkManager.service
# Bluetooth
pacman -Syu bluez
systemctl enable bluetooth.service
# Clock
timedatectl set-ntp true
```
#### Boot loader
[systemd-boot](Applications/System/systemd-boot.md)
[GRUB](https://wiki.archlinux.org/index.php/GRUB)
## [General recommendations](https://wiki.archlinux.org/index.php/General_recommendations)
Always remember to check **dependencies** when install packages.
### System administration
[Sudo](https://wiki.archlinux.org/index.php/sudo):
```sh
pacman -Syu sudo
EDITOR=nvim visudo
# Uncomment group wheel
# Add user if don't want to use systemd-homed
useradd -m -G wheel -c "The Joker" joker
# Or using zsh
useradd -m -G wheel -s /usr/bin/zsh -c "The Joker" joker
# Set password
passwd joker
```
[systemd-homed (WIP)](https://wiki.archlinux.org/index.php/Systemd-homed):
```sh
systemctl enable systemd-homed.service
homectl create joker --real-name="The Joker" --member-of=wheel
# Using zsh
homectl update joker --shell=/usr/bin/zsh
```
**Note**:
Can not run `homectl` when install Arch Linux.
Should run on the first boot.
### Desktop Environment
Install [Xorg](https://wiki.archlinux.org/index.php/Xorg):
```sh
pacman -Syu xorg-server
```
#### [GNOME](https://wiki.archlinux.org/index.php/GNOME)
```sh
pacman -Syu gnome-shell \
gnome-control-center gnome-system-monitor \
gnome-tweaks gnome-backgrounds gnome-screenshot gnome-keyring gnome-logs \
gnome-console gnome-text-editor \
nautilus xdg-user-dirs-gtk file-roller evince eog
# Login manager
pacman -Syu gdm
systemctl enable gdm.service
```
#### [KDE (WIP)](https://wiki.archlinux.org/title/KDE)
```sh
pacman -Syu plasma-meta \
kde-system-meta
# Login manager
pacman -Syu sddm
systemctl enable sddm.service
```
## [List of applications](https://wiki.archlinux.org/index.php/List_of_applications)
### [pacman](https://wiki.archlinux.org/index.php/pacman)
Uncomment in `/etc/pacman.conf`:
```txt
# Misc options
Color
ParallelDownloads
```
## [Improving performance](https://wiki.archlinux.org/index.php/improving_performance)
https://wiki.archlinux.org/index.php/swap#Swap_file
https://wiki.archlinux.org/index.php/swap#Swappiness
https://wiki.archlinux.org/index.php/Systemd/Journal#Journal_size_limit
https://wiki.archlinux.org/index.php/Core_dump#Disabling_automatic_core_dumps
https://wiki.archlinux.org/index.php/Solid_state_drive#Periodic_TRIM
https://wiki.archlinux.org/index.php/Silent_boot
https://wiki.archlinux.org/title/Improving_performance#Watchdogs
https://wiki.archlinux.org/title/PRIME
## In the end
This guide is updated regularly I promise.