Configurando um ambiente de trabalho Linux multi-distro
A saída do lsblk:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 1 116.5G 0 disk
├─sda1 8:1 1 200M 0 part
├─sda2 8:2 1 1G 0 part /boot
├─sda3 8:3 1 79G 0 part /
└─sda4 8:4 1 36.3G 0 part /home
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 256M 0 part /mnt/esp
├─nvme0n1p2 259:2 0 500M 0 part
├─nvme0n1p3 259:3 0 50G 0 part
├─nvme0n1p4 259:4 0 500M 0 part /mnt/boot
├─nvme0n1p5 259:5 0 50G 0 part /mnt
├─nvme0n1p6 259:6 0 500M 0 part
├─nvme0n1p7 259:7 0 50G 0 part
├─nvme0n1p8 259:8 0 100M 0 part
├─nvme0n1p9 259:9 0 16M 0 part
├─nvme0n1p10 259:10 0 86G 0 part
└─nvme0n1p11 259:11 0 652M 0 part
sda é o cartão sd que contém o sistema atual.
nvme0n1 é o ssd nvme, que contém o sistema antigo, e onde o novo sistema será instalado.
Cartão SD
O fstab:
PARTUUID=593e40f1-9627-4bae-baff-d3058948655f / btrfs defaults,subvol=artix 0 1
PARTUUID=e377d242-54ca-4bda-a74e-b16e556c9a7f /boot vfat defaults 0 2
PARTUUID=7f3a0c5d-d8dc-4f96-bbc6-2eed83a27df0 /home btrfs defaults 0 2
tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0
sda1 é a ESP.
sdcard$ ls /mnt/esp/
EFI limine.conf
sda2 é a partição que contém o kernel e o initramfs.
sdcard$ ls -l /mnt/boot/
total 121236
-rwxr-xr-x 1 root root 34167593 Oct 31 17:45 booster-linux-universal.img
-rwxr-xr-x 1 root root 4311362 Oct 31 17:45 booster-linux.img
drwxr-xr-x 6 root root 4096 Jul 30 17:09 grub
-rwxr-xr-x 1 root root 52040586 Oct 31 17:45 initramfs-linux-fallback.img
-rwxr-xr-x 1 root root 17092179 Oct 31 17:45 initramfs-linux.img
-rwxr-xr-x 1 root root 16519359 Oct 31 17:45 vmlinuz-linux
sda3 é a partição que contém os arquivos do sistema (binários, configuração). É um sistema btrfs que eu criei para poder ter várias distros instaladas na mesma partição, com um subvolume para cada distro instalada.
sdcard$ sudo btrfs subvolume list /
ID 257 gen 938 top level 5 path artix
Quando o sistema é montado, é necessario especificar o subvolume (artix). É isso que acontece na primeira linha do fstab.
PARTUUID=593e40f1-9627-4bae-baff-d3058948655f / btrfs defaults,subvol=artix 0 1
sda4 é a partição que contém os arquivos de usuário (apenas eu)
Antigo sistema
O antigo sistema está na partição /dev/nvme0n1p5, com kernel em /dev/nvme0n1p4.
sdcard$ ls -lha /mnt
total 37K
drwxr-xr-x 1 root root 138 Oct 31 17:44 .
drwxr-xr-x 1 root root 128 Nov 8 13:39 ..
lrwxrwxrwx 1 root root 7 Oct 14 11:48 bin -> usr/bin
drwxr-xr-x 3 root root 4.0K Dec 31 1969 boot
drwxr-xr-x 1 root root 8 Jul 30 16:17 dev
drwxr-xr-x 3 root root 512 Dec 31 1969 esp
drwxr-xr-x 1 root root 2.9K Nov 20 13:38 etc
drwxr-xr-x 1 root root 12 Jul 30 16:40 home
lrwxrwxrwx 1 root root 7 Oct 14 11:48 lib -> usr/lib
lrwxrwxrwx 1 root root 7 Oct 14 11:48 lib64 -> usr/lib
drwxr-xr-x 1 root root 28 Aug 1 06:54 media
drwxr-xr-x 1 root root 0 Nov 8 10:37 mnt
drwxr-xr-x 1 root root 36 Aug 13 15:21 opt
dr-xr-xr-x 1 root root 0 Jul 30 16:17 proc
drwxr-x--- 1 root root 266 Nov 16 21:06 root
drwxr-xr-x 1 root root 78 Jul 30 17:18 run
lrwxrwxrwx 1 root root 7 Oct 14 11:48 sbin -> usr/bin
drwxr-xr-x 1 root root 14 Jul 30 16:17 srv
dr-xr-xr-x 1 root root 0 Jul 30 16:17 sys
drwxrwxrwt 1 root root 0 Jul 30 17:05 tmp
drwxr-xr-x 1 root root 80 Oct 31 17:44 usr
drwxr-xr-x 1 root root 110 Nov 8 10:28 var
sdcard$ ls -lha /mnt/boot
total 119M
drwxr-xr-x 3 root root 4.0K Dec 31 1969 .
drwxr-xr-x 1 root root 138 Oct 31 17:44 ..
-rwxr-xr-x 1 root root 33M Oct 31 17:45 booster-linux-universal.img
-rwxr-xr-x 1 root root 4.2M Oct 31 17:45 booster-linux.img
drwxr-xr-x 6 root root 4.0K Jul 30 17:09 grub
-rwxr-xr-x 1 root root 50M Oct 31 17:45 initramfs-linux-fallback.img
-rwxr-xr-x 1 root root 17M Oct 31 17:45 initramfs-linux.img
-rwxr-xr-x 1 root root 16M Oct 31 17:45 vmlinuz-linux
sdcard$ ls -lha /mnt/esp/
total 18K
drwxr-xr-x 3 root root 512 Dec 31 1969 .
drwxr-xr-x 1 root root 138 Oct 31 17:44 ..
drwxr-xr-x 5 root root 512 Jul 30 16:50 EFI
-rwxr-xr-x 1 root root 250 Jul 30 12:31 limine.conf
-rwxr-xr-x 1 root root 232 May 28 23:29 partitions.txt
Migração
Criei uma cópia do das configurações do antigo sistema.
As configurações de usuário foram simplismente copiadas para o cartão sd. Para as configurações de sistema, eu criei um arquivo tar.
mkdir backup
cd backup
cp -r /mnt/home/mateus/.config /home/mateus/
sudo tar -cvf "system config (etc).tar" /mnt/etc/
O caminho /usr/share também contém algumas coisas importantes, como fontes, mas eu tenho apenas duas coisas a copiar:
cp /mnt/usr/local/share/wayland-sessions/scroll.desktop ./
cp /mnt/usr/share/xdg-desktop-portal/scroll-portals.conf ./
Esses dois arquivos são arquivos de configuração do meu compositor wayland (scroll).
Novo esquema
Com os backups feitos, já é possível refatorar o particionamento com o gptfdisk.
sudo pacman -S gptfdisk
sudo gdisk /dev/nvme0n1
Então criar uma nova tabela de partições com a seguinte estrutura:
Number Start (sector) End (sector) Size Code Name
1 2048 526335 256.0 MiB EF00 EFI system partition
2 526336 2164735 800.0 MiB 8300 Linux filesystem
3 2164736 3393535 600.0 MiB 8300 Linux filesystem
4 3393536 4720639 648.0 MiB 8300 Linux filesystem
5 4720640 382207999 180.0 GiB 8300 Linux filesystem
6 382208000 500117503 56.2 GiB 8300 Linux filesystem
E formatar as partições.
A partição 1 será a ESP, e simplesmente conterá o bootloader. Daí o tamanho pequeno.
As partições 2, 3 e 4 conterão os kernels dos sistemas nas partições 5 e 6.
A partição 5 terá o sistema principal, e eventuais outros sistemas.
A partição 6 terá um sistema de recuperação, para caso algum erro ocorra na partição 5. Ou ele pode servir para outra coisa, não sei, só acho melhor manter esse espaço livre.
sudo pacman -Ss dosfstools
sudo mkfs.fat -F 32 /dev/nvme0n1p1
sudo mkfs.fat -F 32 /dev/nvme0n1p2
sudo mkfs.fat -F 32 /dev/nvme0n1p3
sudo mkfs.fat -F 32 /dev/nvme0n1p4
sudo mkfs.btrfs --checksum xxhash /dev/nvme0n1p5
sudo mkfs.btrfs --checksum xxhash /dev/nvme0n1p6
Subvolumes
sudo mount /dev/nvme0n1p5 /mnt
cd /mnt
sudo btrfs subvolume create users
sudo btrfs subvolume create artix
Agora há um subvolume para o sistema e um subvolume para os dados dos usuários.
Criar o ponto de montagem da home dentro do subvolume do sistema e remontar os subvolumes de forma aninhada.
sudo umount /mnt
sudo mount /dev/nvme0n1p5 -o subvol=artix /mnt
Bootstrap (artix-bootstrap)
Instalar os pacotes essenciais do novo sistema a partir do sistema já existente no cartão sd, com o artix bootstrap
git clone https://github.com/gripped/artix-bootstrap.git
cd artix-bootstrap
sudo ./artix-bootstrap.sh -i dinit -r "https://mirrors.dotsrc.org/artix-linux/repos/$repo" /mnt
Preparando para chroot
Montar o sistema para:
Instalar o Kernel.
Instalar o bootloader
Instalar o wpa_supplicant e o dhcpcd para ter conexão com a internet.
Configurar o wifi (wpa_spplicant)
Compilar e instalar o scroll (ambiente gráfico)
Ativar serviços importantes (wpa_supplicant e dhcpcd)
Criar o ponto de montagem para a ESP.
sudo mkdir /mnt/esp
Revisando, os pontos de montagem (incluindo a raiz que já está montada) são:
sudo mount /dev/nvme0n1p5 -o subvol=artix /mnt
sudo mount /dev/nvme0n1p5 -o subvol=users /mnt/home
sudo mount /dev/nvme0n1p2 /mnt/boot
sudo mount /dev/nvme0n1p1 /mnt/esp
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /run /mnt/run
sudo mount -t sysfs none /mnt/sys
sudo mount -t proc none /mnt/proc
Copiar o arquivo /etc/resolv.conf para o novo sistema.
sudo cp /etc/resolv.conf /mnt/etc/
Fstab
Arquivo que mapeia partições para pontos de montagem.
Usar GUIDs (PARTUUIDs) ao invés de nome de dispositivo para identificar as partições. Os GUIDs podem ser obtidos com o comando blkid.
sdcard$ sudo blkid /dev/nvme0n1p2
/dev/nvme0n1p2: UUID="F17F-2FCC" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="Linux filesystem" PARTUUID="d81c4403-2ffb-4d1a-9f9e-c1a7b349e0d0"
/dev/nvme0n1p5: UUID="321fb076-a4c7-4498-a411-9e5210065214" UUID_SUB="9f91cdb9-9d31-468b-ae32-50354279c1f8" BLOCK_SIZE="4096" TYPE="btrfs" PARTLABEL="Linux filesystem" PARTUUID="978e36da-b161-4d4f-b2f9-c911008f9c9e"
Escrever o fstab.
sdcard$ cat /mnt/etc/fstab
# <file system> <dir> <type> <options> <dump> <pass>
PARTUUID=978e36da-b161-4d4f-b2f9-c911008f9c9e / btrfs defaults,subvol=artix 0 1
PARTUUID=978e36da-b161-4d4f-b2f9-c911008f9c9e /home btrfs defaults,subvol=users 0 2
PARTUUID=d81c4403-2ffb-4d1a-9f9e-c1a7b349e0d0 /boot vfat defaults 0 2
tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0
Dentro do chroot
Entrar no novo sistema com chroot e executar o bash.
sudo chroot /mnt /bin/bash
Popular as chaves do pacman (necessário fazer apenas uma vez).
pacman-key --init
pacman-key --populate
Realizar as primeiras instalações. Começando com o kernel.
pacman -S linux
Daí já teremos kernel e initramfs gerados em /boot
[sdcard /]# ls -lha /boot/
total 51M
drwxr-xr-x 2 root root 4.0K Jan 1 1970 .
drwxr-xr-x 1 root root 128 Nov 25 21:15 ..
-rwxr-xr-x 1 root root 31M Nov 26 16:48 booster-linux-universal.img
-rwxr-xr-x 1 root root 4.3M Nov 26 16:48 booster-linux.img
-rwxr-xr-x 1 root root 16M Nov 26 16:48 vmlinuz-linux
Escolher o booster como gerador de initramfs.
[sdcard /]# pacman -S linux
resolving dependencies...
:: There are 3 providers available for initramfs:
:: Repository system
1) mkinitcpio
:: Repository world
2) booster 3) dracut
Enter a number (default=1): 2
Instalar módulos. O pacote mais genérico é o linux-firmware, que inclui:
Packages (12) linux-firmware-amdgpu-20251111-1 linux-firmware-atheros-20251111-1 linux-firmware-broadcom-20251111-1
linux-firmware-cirrus-20251111-1 linux-firmware-intel-20251111-1 linux-firmware-mediatek-20251111-1
linux-firmware-nvidia-20251111-1 linux-firmware-other-20251111-1 linux-firmware-radeon-20251111-1
linux-firmware-realtek-20251111-1 linux-firmware-whence-20251111-1 linux-firmware-20251111-1
Nem sempre todos são necessários.
pacman -S linux-firmware-realtek linux-firmware-intel linux-firmware-whence linux-firmware-other linux-firmware-cirrus
Instalar um editor de texto
pacman -S nano
Instalar o bootloader e copiar para a ESP.
pacman -S limine
mkdir -p /esp/EFI/BOOT
cp /usr/share/limine/BOOTX64.EFI /esp/EFI/BOOT/
Configurar o bootloader. Dica: usar o fstab como cola para copiar e colar os GUIDs.
[sdcard /]# cat /esp/limine.conf
timeout: 5
/Artix
protocol: linux
path: guid(d81c4403-2ffb-4d1a-9f9e-c1a7b349e0d0):/vmlinuz-linux
cmdline: root=PARTUUID=978e36da-b161-4d4f-b2f9-c911008f9c9e rw rootdelay=5 rootflags=subvol=artix
module_path: guid(d81c4403-2ffb-4d1a-9f9e-c1a7b349e0d0):/booster-linux.img
Isso já é suficiente para fazer o sistema ser bootável.
Criar um usuário.
useradd -m -G wheel mateus
Definiar as senhas dos usuários
passwd root
passwd mateus
Mudar o hostname
[sdcard /]# cat /etc/hostname
lenovo
Instalar um banco de manual (mandoc).
[sdcard /]# pacman -S man
:: There are 2 providers available for man:
:: Repository system
1) man-db
:: Repository world
2) mandoc
Enter a number (default=1): 2
Instalar o doas ao invés do sudo.
pacman -S doas
echo "permit persist :wheel" > /etc/doas.conf
Instalar programas para conexão de rede e wifi.
pacman -S dhcpcd dhcpcd-dinit wpa_supplicant wpa_supplicant-dinit
dinitctl --offline enable dhcpcd
dinitctl --offline enable wpa_supplicant
O seatd está sendo usado ao invés do elogind. Ao ser instalado, um grupo é criado.
pacman -S seatd
Creating group 'seat' with GID 977.
Colocar usuário nesse grupo para terem acesso ao seatd.
usermod -a -G seat mateus
Instalar os serviços do seatd. O seatd entra em conflito com o elogind. Desinstalar o elogind.
[sdcard /]# pacman -S seatd-dinit
resolving dependencies...
looking for conflicting packages...
:: seatd-dinit-20230412-3 and elogind-dinit-20240527-1 are in conflict (init-logind). Remove elogind-dinit? [y/N] y
Habilitar o seatd com dinitctl (usar --offline pois estamos em um chroot)
dinitctl --offline enable seatd
Habilitar o dbus (já vem instalado)
dinitctl --offline enable dbus
Instalar o pipewire.
pacman -S pipewire pipewire-pulse
O comando instala também o wireplumber.
Instalar o sound open firmware (nem sempre necessário).
pacman -S sof-firmware
Instalar a mesa.
pacman -S mesa vulkan-mesa-layers
Instalar drivers intel.
pacman -S intel-media-driver vulkan-intel
Instalar utilitários de compilação e o git.
pacman -S clang pkgconf make cmake meson ninja autoconf automake bison diffutils fakeroot flex groff m4 patch which xxhash git
Instalar o yay (excelente para momentos de pressa)
su -l mateus
cd /tmp
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
Instalar o wpa_cute.
yay wpa-cute
Instalar o scroll:
curl -Lo scroll-1.12.tar.gz "https://github.com/dawsers/scroll/archive/refs/tags/1.12.tar.gz"
gunzip scroll-1.12.tar.gz
tar -xvf scroll-1.12.tar
cd scroll-1.12
meson setup build/
ninja -C build/
sudo ninja -C build/ install
Instalar os portais xdg.
pacman -S xdg-desktop-portal xdg-desktop-portal-wlr xdg-desktop-portal-gtk
Instalar outros utilitários
pacman -S foot fuzzel
Últimas preparações (fora do chroot)
sudo cp /etc/wpa_supplicant/* /mnt/etc/wpa_supplicant/
sudo cp /usr/local/share/xdg-desktop-portal/scroll-portals.conf /mnt/usr/local/share/xdg-desktop-portal/
sudo cp /usr/local/share/wayland-sessions/scroll.desktop /mnt/usr/local/share/wayland-sessions/
cp -r /home/.config/* /mnt/home/.config/
sdcard$ cat /usr/share/wayland-sessions/scroll.desktop
[Desktop Entry]
Name=Scroll
Comment=An i3-compatible Wayland compositor
Exec=scroll
Type=Application
DesktopNames=scroll;wlroots
sdcard$ cat /usr/share/xdg-desktop-portal/scroll-portals.conf
[preferred]
default=gtk
org.freedesktop.impl.portal.ScreenCast=wlr
org.freedesktop.impl.portal.Screenshot=wlr.
org.freedesktop.impl.portal.Inhibit=none