Add linux-artix-install-and-system-config doc, update obsidian-nvim
This commit is contained in:
@@ -0,0 +1,242 @@
|
||||
# Artix Linux - Install and System Config
|
||||
|
||||
**Attribution:**
|
||||
Most or much of this was generated by or derived from Grok, or else from Artix docs, Arch docs/wiki, or else the docs for the particular programs or packages used. I'm not claiming any of this is mine, just putting it here in one file for future convenience/reference.
|
||||
|
||||
I used this approach in December of 2025 to install Artix Linux on a Framework 13in laptop from 2023 q4.
|
||||
|
||||
- OS and distro: Artix Linux
|
||||
- init system: dinit
|
||||
- partitioning, GUID Partition Table:
|
||||
- unencrypted boot partition (size: 512M), UEFI
|
||||
- LUKS-encrypted LVM:
|
||||
- swap partition (size: amount of memory + 4G)
|
||||
- root/default partition (size: remaining space)
|
||||
|
||||
For reference, doc page from Artix for installation:
|
||||
https://wiki.artixlinux.org/Main/Installation
|
||||
|
||||
---
|
||||
|
||||
## install steps
|
||||
|
||||
- [ ] if not already done, download artix ISO (dinit version) and dd it onto a usb drive
|
||||
|
||||
- [ ] boot the live usb and select the install option (whatever it may look like)
|
||||
|
||||
- [ ] connect to the internet
|
||||
|
||||
```bash
|
||||
connmanctl
|
||||
//// within connmanctl
|
||||
enable wifi
|
||||
scan wifi
|
||||
agent on
|
||||
services
|
||||
connect <wifi_XXXXXXXXXXXXXXXX_managed_psk>
|
||||
quit
|
||||
```
|
||||
|
||||
- [ ] verify connection using `ping`
|
||||
|
||||
- [ ] update live system keys/mirrors
|
||||
|
||||
```bash
|
||||
pacman -Sy artix-keyring
|
||||
```
|
||||
|
||||
- [ ] run lsblk and identify the storage drive on which to install
|
||||
- note: when i ran this in 2025 dec on my framework laptop, it was `/dev/nvme0n1`
|
||||
|
||||
- [ ] partition the drive
|
||||
|
||||
```bash
|
||||
cfdisk <target storage drive>
|
||||
# use GPT (guid partition table)
|
||||
# new partition, size 512M, type 'EFI System'
|
||||
# new partition, size (remaining), type 'Linux LVM'
|
||||
# write changes
|
||||
# quit cfdisk
|
||||
```
|
||||
|
||||
- [ ] set up LVM volumes
|
||||
|
||||
```bash
|
||||
cryptsetup luksFormat --type luks2 /dev/<LVM partition>
|
||||
cryptsetup open /dev/<LVM partition> artixlvm
|
||||
|
||||
pvcreate /dev/mapper/artixlvm
|
||||
vgcreate artixvg /dev/mapper/artixlvm
|
||||
|
||||
lvcreate -L <size of memory + 4G, e.g. 36G> artixvg -n swap
|
||||
lvcreate -l 100%FREE artixvg -n root
|
||||
```
|
||||
|
||||
- [ ] set filesystems for partitions/volumes
|
||||
|
||||
```bash
|
||||
mkfs.vfat -F32 /dev/<boot partition>
|
||||
mkfs.ext4 /dev/artixvg/root
|
||||
mkswap /dev/artixvg/swap
|
||||
```
|
||||
|
||||
- [ ] mount the partitions/volumes
|
||||
|
||||
```bash
|
||||
mount /dev/artixvg/root /mnt
|
||||
mkdir /mnt/boot
|
||||
mount /dev/<boot partition> /mnt/boot
|
||||
swapon /dev/artixvg/swap
|
||||
```
|
||||
|
||||
- [ ] install base system and needed packages
|
||||
|
||||
```bash
|
||||
basestrap /mnt base base-devel linux \
|
||||
linux-firmware \
|
||||
dinit elogind-dinit \
|
||||
lvm2 cryptsetup grub efibootmgr mkinitcpio \
|
||||
connman connman-dinit wpa_supplicant \
|
||||
git less neovim zsh
|
||||
```
|
||||
|
||||
- [ ] generate fstab
|
||||
```bash
|
||||
fstabgen -U /mnt >> /mnt/etc/fstab
|
||||
|
||||
# verify (add noatime to ext4 line if desired)
|
||||
vi /mnt/etc/fstab
|
||||
```
|
||||
|
||||
- [ ] chroot into installed system
|
||||
```bash
|
||||
artix-chroot /mnt
|
||||
```
|
||||
|
||||
- [ ] set timezone, hardware clock, locale
|
||||
|
||||
```bash
|
||||
ln -sf /usr/share/zoneinfo/<path to target zone> /etc/localtime
|
||||
hwclock --systohc
|
||||
|
||||
nvim /etc/locale.gen
|
||||
# uncomment en_US.UTF-8 UTF-8; add others if desired
|
||||
|
||||
locale-gen
|
||||
echo "LANG=en_US.UTF-8" > /etc/locale.conf
|
||||
```
|
||||
|
||||
- [ ] set hostname and /etc/hosts
|
||||
|
||||
```bash
|
||||
echo "<computer name>" > /etc/hostname
|
||||
|
||||
nvim /etc/hosts
|
||||
# ensure /etc/hosts includes the following:
|
||||
127.0.0.1 localhost
|
||||
::1 localhost
|
||||
127.0.1.1 <computer name>.localdomain <computer name>"
|
||||
```
|
||||
|
||||
- [ ] mkinitcpio with hooks
|
||||
|
||||
```bash
|
||||
nvim /etc/mkinitcpio.conf
|
||||
# go to HOOKS and set it thus:
|
||||
HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt lvm2 resume filesystems fsck)
|
||||
|
||||
mkinitcpio -P
|
||||
```
|
||||
|
||||
- [ ] grub config and install
|
||||
|
||||
```bash
|
||||
blkid
|
||||
# note the UUID of the LVM/LUKS partition
|
||||
|
||||
nvim /etc/default/grub
|
||||
# ensure the following is set:
|
||||
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<UUID from blkid above>:artixlvm root=/dev/mapper/artixvg-root resume=/dev/mapper/artixvg-swap quiet rw"
|
||||
|
||||
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Artix
|
||||
grub-mkconfig -o /boot/grub/grub.cfg
|
||||
```
|
||||
|
||||
- [ ] set up connman for installed system
|
||||
|
||||
```bash
|
||||
mkdir -p /etc/dinit.d/boot.d
|
||||
ln -s ../connmand /etc/dinit.d/boot.d/connmand
|
||||
```
|
||||
|
||||
- [ ] set root password, set up user
|
||||
|
||||
```bash
|
||||
passwd
|
||||
|
||||
useradd -m -G wheel,audio,video,optical,storage <username>
|
||||
passwd <username>
|
||||
pacman -S sudo
|
||||
EDITOR=nvim visudo
|
||||
# uncomment the line in /etc/sudoers which looks something like the below:
|
||||
echo "%wheel ALL=(ALL) ALL"
|
||||
```
|
||||
|
||||
- [ ] close stuff out and reboot
|
||||
|
||||
```bash
|
||||
exit
|
||||
umount -R /mnt
|
||||
swapoff -a
|
||||
cryptsetup close cryptlvm # may not work, just ignore and reboot
|
||||
reboot
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## system config (post install)
|
||||
|
||||
_NOTE: don't put anything here which should be in my dotfiles-and-setup scripts instead_
|
||||
|
||||
- [ ] set up chrony (for syncing system time with ntp servers)
|
||||
- _NOTE: edit defaults in `/etc/chrony/chrony.conf` if desired_
|
||||
|
||||
```bash
|
||||
sudo pacman -S chrony chrony-dinit
|
||||
|
||||
# Fallback if dinitctl enable fails (symlink method)
|
||||
sudo mkdir -p /etc/dinit.d/boot.d
|
||||
sudo ln -s ../chronyd /etc/dinit.d/boot.d/chronyd
|
||||
# alt: sudo dinitctl enable chronyd
|
||||
|
||||
/etc/dinit.d/chronyd start
|
||||
# alt: sudo dinitctl start chronyd
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## troubleshooting
|
||||
|
||||
if i need to try something again and reopen the LVM, the below should work:
|
||||
|
||||
```bash
|
||||
cryptsetup open /dev/<target device> artixlvm
|
||||
# enter existing password
|
||||
|
||||
vgchange -ay artixvg
|
||||
# or, if only one VG exists:
|
||||
vgchange -ay
|
||||
```
|
||||
|
||||
if date/time get messed up (such as due to battery running out), fix with:
|
||||
|
||||
```bash
|
||||
# can manually adjust to local time; grok said "date is UTC if hardware is set that way"
|
||||
sudo date -s "2025-12-17 12:47:00"
|
||||
# or, if chrony, ntp, or similar is set up, can trigger sync
|
||||
chronyd -q
|
||||
# can check after with `date` or `chronyc tracking`
|
||||
|
||||
sudo hwclock -w --utc
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user