void-desktop/void-desktop-install.md

660 lines
No EOL
14 KiB
Markdown

# A Void Linux install (Unfinished)
This install is based on the [EFI boot stub](https://mth.st/blog/void-efistub/) blog entry of [Matthias Totschnig](https://mth.st/), the [Void Handbook](https://docs.voidlinux.org/about/index.html) and the Void Linux man pages. This guide focuses on a Void Linux x86_64 glibc/musl install on uefi. In this install gummiboot is used as bootloader and the root partition will be encrypted.
## Provisioning
First off the drive should be partitioned, possibly with fdisk. It should have atleast two partitions with one `EFI System` Partition and one `Linux filesystem` partition.
It should look something like this:
| Number of partition | Size | Type |
|:-----:|:-----:|:-----: |
| 1 | 1 to 2 GB or more | EFI System |
| 2 | Rest of the drive | Linux filesystem |
Then to create the filesystem of the efi partition.
```
# mkfs.fat -F 32 -n efi /dev/<disk1>
```
And the encrypted filesystem of the root partition.
```
# cryptsetup luksFormat /dev/<disk2> --type luks2 --label luks
# cryptsetup open --type luks /dev/<disk2> root
# mkfs.ext4 -L root /dev/mapper/root
```
Other filesystems can also be used but `ext4` is the standard for most linux distobutions.
## Installation
To install the Void Linux distribution on the system, the encrypted partition and the efi partition have to be mounted to the main system.
```
# mount /dev/mapper/root /mnt
# mkdir /mnt/boot
# mount /dev/<disk1> /mnt/boot
# for dir in dev proc sys run; do
> mkdir /mnt/$dir
> mount --rbind --make-rslave /$dir /mnt/$dir
> done
```
The "base-system" needs to be installed to the mounted drive. For this installation there is also other packages which are needed like NetworkManager, gummiboot and cryptsetup.
* For glibc:
```
# xbps-install -Sy -R https://repo-default.voidlinux.org/current -r /mnt base-system cryptsetup gummiboot vim apparmor NetworkManager git
```
* For musl:
```
# xbps-install -Sy -R https://repo-default.voidlinux.org/current/musl -r /mnt base-system cryptsetup gummiboot vim apparmor NetworkManager git
```
To get internet inside the chroot whilst installing the system, copy over the `resolv.conf`.
```
# cp /etc/resolv.conf /mnt/etc/resolv.conf
```
Entering the chroot and configuring the system.
```
# chroot /mnt
# chown root:root /
# chmod 755 /
# passwd root
# echo <hostname> > /etc/hostname
```
Adding the `uuid` of the root partition to `crypttab`, by first creating `/etc/crypttab`:
```
# touch /etc/crypttab
```
Then the `uuid` can be obtained by:
```
# lsblk -f |grep luks >> /etc/crypttab
```
Now edit `/etc/crypttab` and insert:
```
root /dev/disk/by-uuid/<uuid> none:
```
We can configure the `fstab` by editing `/etc/fstab` and inserting:
```
tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0
efivarfs /sys/firmware/efi/efivars efivarfs defaults 0 0
/dev/disk/by-label/root / ext4 defaults,noatime 0 1
/dev/disk/by-label/efi /boot vfat defaults 0 2
```
Create `/etc/dracut.conf.d/30.conf` to configure dracut.
```
hostonly="yes"
use_fstab="yes"
install_items+=" /etc/crypttab "
add_drivers+=" vfat nls_cp437 nls_iso8859_1 "
```
Create a symbolic link from `/etc/fstab.sys` to `/etc/fstab` to indicate that dracut should mount all the file systems listed.
```
# ln -s /etc/fstab /etc/fstab.sys
```
Then, to omit mounting them again in runit stage 1, disable the corresponding core service.
```
# mv /etc/runit/core-services/03-filesystems.sh{,.bak}
```
Edit `/etc/xbps.d/xbps.conf` to prevent the service from being added back by an update to runit-void.
```
noextract=/etc/runit/core-services/03-filesystems.sh
```
Now mount `efivarfs` to `/sys/firmware/efi/efivars`.
```
# mount -t efivarfs efivarfs /sys/firmware/efi/efivars
```
And install gummiboot.
```
# gummiboot install
```
Create `/boot/loader/void-options.conf` to configure gummiboot.
```
# touch /boot/loader/void-options.conf
```
The `uuid` is needed again and can be obtained by:
```
# lsblk -f |grep luks >> /boot/loader/void-options.conf
```
Now edit `/boot/loader/void-options.conf` and insert:
```
rw rd.luks.name=<uuid>=root root=/dev/mapper/root quiet splash apparmor=1 security=apparmor loglevel=1
```
To obtain a boot menu. A timeout may be added to `/boot/loader/loader.conf`.
```
timeout 4
```
If running `glibc` the locales have to be configured, to configure the locales edit `/etc/default/libc-locales` and uncomment.
```
en_US.UTF-8 UTF-8
```
And reconfigure the locales.
```
# xbps-reconfigure -f glibc-locales
```
To obtain better security, `apparmor` will be set to enforce. By editing `/etc/default/apparmor` and inserting:
```
APPARMOR=enforce
```
To set the internal network edit `/etc/hosts` and insert.
```
127.0.1.1 <hostname>
```
Finally reconfigure Linux.
```
# xbps-reconfigure -f linux<version>
```
Exit the chroot.
```
# exit
```
Do not forget to umount. (I always do).
```
# umount -r /mnt
```
And reboot.
```
# shutdown -r now
```
## Post install
In the post install section the installation and configuration of certain applications are elaborated. With the use of the config-files in this repository.
To obtain these config-files the void-desktop repository may be cloned with the `git` command.
```
$ git clone https://git.bijl.us/luc/void-desktop.git
```
### Network
NetworkManager will be used as Network daemon due to its versatility. The package was already installed with the installation, thereby it only needs to be symlinked to `/var/service` to function.
```
# ln -s /etc/sv/NetworkManager /var/service
```
NetworkManager needs the `dbus` daemon to function, in general most other applications that will be discussed in the Post install section need `dbus`. To symlink `dbus` to `/var/service`:
```
# ln -s /etc/sv/dbus /var/service
```
Then, NetworkManager may be configured to enhance the security of the system. This is especially useful for laptops etc. To do this edit `/etc/NetworkManager/NetworkManager.conf`.
```
[device-mac-randomization]
wifi.scan-rand-mac-address=yes
[connection-mac-randomization]
ethernet.cloned-mac-address=random
wifi.cloned-mac-address=random
```
### Users
A user should be added to improve security of the system.
```
# useradd <user>
```
The user may be added to certain groups, to give it some rights.
```
# usermod -aG wheel,audio,video,kvm,tty,input,storage(,bluetooth,_seatd) <user>
```
The package `sudo` that is present in the `base-system` package will be removed. Since, it is bloatware. To persist this. That is sudo will not be installed ever again on the system. Edit `/etc/xbps.d/xbps.conf` and insert:
```
ignorepkg=sudo
```
Then remove `sudo`.
```
# xbps-remove -y sudo
```
The `sudo` package will be replaced by `opendoas`. To install it:
```
# xbps-install -Sy opendoas
```
Symlink it to `/bin/sudo` so that applications which require root can still be granted by the user.
```
# ln -s /bin/doas /bin/sudo
```
And edit `/etc/doas.conf` to give users in the `wheel` group access to the `doas` command.
```
permit persist :wheel as root
```
To finalize this section, the `.bashrc` and `.bash_profile` configuration files will be copied to the home space of the user.
```
$ cp void-desktop/config-files/bash/.bashrc .bashrc
$ cp void-desktop/config-files/bash/.bash_profile .bash_profile
```
### Linux-lts
It might be desirable to install an LTS kernel for better stability. This can be done by:
```
# xbps-install -Sy linux-lts linux-lts-headers
```
To uninstall the non-lts kernel, ignore the package through `/etc/xbps.d/xbps.conf` by adding:
```
ignorepkg=linux
```
And then removing the `linux` meta package and its dependecies:
```
# xbps-remove -Ry linux
```
### Localtime
A "Network Time Protocol Daemon" (nptd for short) can sync the system clock with internet standard time servers. The `chrony` daemon is used as ntpd. Install it by:
```
# xbps-install -Sy chrony
```
Then to active its service:
```
ln -s /etc/sv/chronyd /var/service
```
To configure the timezone to your own edit the `/etc/rc.conf` file and set these lines:
```
HARDWARECLOCK="localtime"
TIMEZONE=("Europe/Amsterdam")
```
### Using Swap
Swap can be utilised by the system to free up space in RAM. For most use cases it is recommend to create a swapfile that is one and a half times the size of your RAM.
To create a swapfile of 8 GB use:
```
# dd if=/dev/zero of=/swapfile bs=8M count=1024 status=progress
```
To create a different size of swapfile, change the `count=` amount to a desirable size.
Then to actually add the swap space to your system issue these commands:
```
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile
```
To mount the swap to the system at boot, add the swapfile to your `/etc/fstab`:
```
/swapfile none swap defaults 0 0
```
And do not forget to reconfigure the kernel after updating`/etc/fstab`:
```
# xbps-reconfigure -f linux<version>
```
### Network filesystems
Network filesystems may be used for enhanced workflow between multiple devices and persistance of storage.
#### Samba
Samba is such a Network filesystem protocol that may be used between different platforms. To use it install.
```
# xbps-install -Sy cifs-utils
```
Next, a credentials file will be created that is, `$HOME/.smbpasswd`. Edit the file and insert:
```
username=<username>
password=<password>
domain=<domain>
```
Concerning security considerations, the permissions may be enhanced.
```
# chmod 600 $HOME/.smbpasswd
```
Then edit `/etc/fstab` and insert:
```
//<domain>/<homefolder> $HOME/<smbfolder> cifs credentials=$HOME/.smbpasswd,_netdev,uid=<uid> 0 0
```
Finally mount the network filesystem.
```
# mount -a
```
### Logging
Logging may be benificial to spot certain misbehaviours or errors in the system. The `socklog-void` package will be used as logging daemon.
```
# xbps-install -Sy socklog-void
# ln -s /etc/sv/socklog-unix /var/service/
# ln -s /etc/sv/nanoklogd /var/service/
```
To read the logs use:
```
# svlogtail
```
Or go to `/var/log/socklog`.
### Repositories
To install the official Void Linux 32-bit and nonfree repositories simply install their respective packages:
* For glibc
```
# xbps-install -Sy void-repo-multilib void-repo-nonfree void-repo-multilib-nonfree
```
* For musl
```
# xbps-install -Sy void-repo-nonfree
```
And update the repositories:
```
# xbps-install -S
```
There is also our unnofficial extra repository for some additional packages and some packages which are needed for the graphical installation. To use those add them to `/etc/xbps.d/00-repository-ample.conf`,
* For glibc:
```
repository=https://git.bijl.us/lnco/xbps-ample/raw/branch/main/current
repository=https://git.bijl.us/lnco/xbps-ample/raw/branch/main/current/nonfree
```
* For musl
```
repository=https://git.bijl.us/lnco/xbps-ample/raw/branch/main/current/musl
```
And refresh the repositories:
```
# xbps-install -S
```
### Firmware and drivers
#### GPU drivers
It is necessary for a graphical enviroment to install GPU drivers. To install the drivers for your GPU use one of the following commands:
* For Intel
```
# xbps-install -Sy linux-firmware-intel mesa mesa-dri vulkan-loader mesa-vulkan-intel intel-video-accel
```
* For AMD
```
# xbps-install -Sy linux-firmware-amd vulkan-loader mesa-vulkan-radeon amdvlk xf86-video-amdgpu mesa-vaapi mesa-vdpau mesa-dri
```
* For Nvidia (*glibc only*)
```
# xbps-install -Sy nvidia nvidia-opencl
```
##### 32-bit drivers
(Only applicable to glibc as Void Linux musl only supports 64-bit)
To run 32-bit applications like some videogames it will also be necessary to install the 32-bit drivers:
* For Intel
```
# xbps-install -Sy mesa-32bit mesa-dri-32bit mesa-vulkan-intel-32bit vulkan-loader-32bit
```
* For AMD
```
# xbps-install -Sy vulkan-loader-32bit amdvlk-32bit mesa-32bit mesa-dri-32bit
```
* For Nvidia
```
# xbps-install -Sy nvidia-libs-32bit
```
#### CPU firmware
To keep the firmware of your CPU up to date it is necessary to install the correct microcode:
* For Intel
(The Intel microcode requires that you are using the nonfree repository)
```
# xbps-install -Sy intel-ucode
```
And regenerate the initramfs:
```
# xbps-reconfigure -f linux<version>
```
* For AMD
```
# xbps-install -Sy linux-firmware-amd
```
### Secure-boot
#### Linux Windows dual boot
```
# xbps-install -Sy sbctl
# sbctl create-keys
# sbctl enroll-keys --microsoft
# sbctl sign -s /boot/EFI/Boot/BOOTX64.EFI
# sbctl sign -s /boot/EFI/gummiboot/gummibootx64.efi
# sbctl sign -s /boot/vmlinuz-<version>
# sbctl verify
```
### Laptop-management
```
# xbps-install -Sy tlp tlpui
```
```
# ln -s /etc/sv/tlp /var/service
# ln -s /etc/sv/acpid /var/service
```
Edit `/etc/tlp.d/00-template.conf`
```
CPU_ENERGY_PERF_POLICY_ON_AC=performance
CPU_ENERGY_PERF_POLICY_ON_BAT=power
```
## Graphical session
### Session manager
To use a graphical enviroment it is necessary to start a seat and session manager. For a minimal install it is recommended to use `seatd`, `dumb_runtime_dir` and `polkit`. To install those run:
```
# xbps-install -Sy seatd dumb_runtime_dir polkit
```
Then to enable them:
```
# ln -s /etc/sv/seatd /var/service
# ln -s /etc/sv/polkitd /var/service
```
And for `dumb_runtime_dir` to function, configure `/etc/pam.d/system-login` by uncommenting:
```
session optional pam_dumb_runtime_dir.so
```
For some sane polkit rules add these lines to `/etc/polkit-1/rules.d/00-polkit.rules`:
```
polkit.addRule(function(action, subject)
{
if (action.id == "org.freedesktop.policykit.exec" && action.lookup("program") == "/bin/shutdown" && subject.isInGroup("wheel"))
return polkit.Result.YES;
});
polkit.addRule(function(action, subject)
{
if (action.id == "org.freedesktop.policykit.exec" && action.lookup("program") == "/bin/zzz" && subject.isInGroup("wheel"))
return polkit.Result.YES;
});
polkit.addRule(function(action, subject)
{
if (action.id.startsWith("org.freedesktop.udisks2.") && subject.isInGroup("storage"))
return polkit.Result.YES;
});
```
Or for the more lazy under us copy `void-desktop/config-files/polkit/00-polkit.rules` to `/etc/polkit-1/rules.d/`.
```
# cp -r void-desktop/config-files/polkit/00-polkit.rules /etc/polkit-1/rules.d/
```
### Login manager
To make it easier to log into the system, set up a login manager. For a minimal and wayland-compatible login manager use `greetd` with `gtkgreet`. Install them with:
```
# xbps-install -Sy greetd gtkgreet
```
### Window manager
There are many different window managers and desktop enviroments which can provide a decent experience. Wayfire is a functional, relativily lightweight and good looking wayland window manager and will be used for this install.
### Audio
### Essential applications
### Auto-mounting
### Printing
### Bluetooth
## Misc
### Virt-manager
### Wine
### Steam