Installation Handbook
This is the official installation guide for Everest Linux.
Using unofficial guides is not recommended as they may be
out of date.
Simply following this guide blindly is a great way to end up
with a broken installation. Ensure you have a rough idea of
what each command does.
If you need assistance, reach out on IRC (#everestlinux) or Discord.
Prerequisites
The following steps will be used to complete the installation:
- Set up the environment
- Download the Everest Linux system image
- Unpack the system image
- Chroot into the new system
- Install desired programs
- Install the Linux kernel
- Set up init scripts/services
- Reboot the system
Note: Everest is highly flexible. If you are changing anything in this guide, it is assumed you know exactly what to do.Run (user)$
commands as an unprivileged user.
Run (root)#
commands as the root user.
Run (chroot)#
commands inside the chroot environment.
Set up the environment
Our environment needs to be set up correctly for the installation.
Create the system mountpoint:
(root)# mkdir -pv /mnt/everest
Although it may not be used, assign the system mountpoint a variable:
(root)# export SYS_MNT=/mnt/everest
Partition your drive:
(root)# cfdisk /dev/sdX
Mount the root partition to the system mountpoint:
(root)# mount /dev/sdX /mnt/everest
If needed, create the boot directory:
(root)# mkdir -pv /mnt/everest/boot
Mount the boot partition:
(root)# mount /dev/sdX /mnt/everest/boot
Downloading the Everest system image
An Everest system image is an incomplete root filesystem, which
provides a strong base to build off of
Not all system images are the same. Some differences are:
- The init system
- The standard C library
- The architecture
- SELinux support
- Multilib support
Ensure you download the image you want. Migrating in the future
is not officially supported or even recommended.
Download an image with wget
:
(user)$ wget SYSTEM_IMAGE_LINK
Unpacking the system image
The system image can now be unpacked.
Ensure the system image is located under the system mountpoint.
Note that a simple tar -xvf
will cause errors with
permissions. Therefore, a few extra flags are needed.
Unpack the system image:
(root)# tar -xpvf SYSTEM_IMAGE --xattrs-include='*.*' --numeric-owner
This will ensure all file ownership is compliant.
Chrooting into the new installation
The system is in a partially working state.
If we were to call it a day and reboot now, it wouldn't be possible.
Many critical parts of the system are missing, including the
bootloader and kernel. Chrooting allows us to make modifications
to the target system, without actually booting into it.
Before chrooting, additional filesystems must be mounted.
Mount these filesystems:
(root)# mount --types proc /proc /mnt/everest/proc
(root)# mount --rbind /sys /mnt/everest/sys
(root)# mount --make-rslave /mnt/everest/sys
(root)# mount --rbind /dev/ /mnt/everest/dev
(root)# mount --make-rslave /mnt/everest/dev
(root)# mount --bind /run /mnt/everest/run
(root)# mount --make-slave /mnt/everest/run
Chroot into the system:
(root)# chroot --userspec=0:0 /mnt/everest /bin/sh
Change the shell prompt to avoid confusion:
(chroot)# export PS1="(chroot) ${PS1}" && source /etc/profile
Install programs
Any programs you wish to install should be installed now.
This is because the Linux kernel takes multiple hours to compile.
See General Recommendations for ideas. Note that some
programs assume the system is installed, so use caution.
Install the Linux kernel
The most important part of the system, the kernel, is ready to be installed.
Install the linux-firmware package, which provides device firmware:
(chroot)# glacier -f linux-firmware
Download the kernel's source tree:
(chroot)# glacier -f linux
Change directory to the kernel's source tree:
(chroot)# cd /usr/src/linux
Ensure the kernel source tree is clean:
(chroot)# make mrproper
Configure the kernel:
(chroot)# ARCH="your-arch-here" make defconfig && make menuconfig
Compile the kernel:
(chroot)# make && make modules_install
Install the kernel:
(chroot)# make install
On some systems, an initial RAM filesystem (initramfs)
may be needed to ensure proper booting.
If you want an initramfs, install dracut:
(chroot)# glacier -f dracut
Build an initramfs:
(chroot)# dracut
Configure the system
Some components of the system mus be configured.
Create /etc/fstab
.
Enable system services, such as a cron daemon, logger, etc:
(chroot)# /etc/init.d/{cronie,chronyd,sysklogd} start
(chroot)# systemctl enable --now cronie chronyd sysklogd
Set the timezone:
(chroot)# ln -svf /usr/share/zoneinfo/Region/City /etc/localtime
Configure the locale:
(chroot)# echo "LANG=en_US.UTF-8" > /etc/locale.conf
Set the system hostname:
(chroot)# echo "my_hostname" > /etc/hostname
Other things you might want to configure are:
- /etc/doas.conf or /etc/sudoers
- /etc/inittab
Configure the bootloader
One more critical component is needed: the bootloader
While any bootloader can be installed, this guide recommends
systemd-boot
and grub
.
For systemd-boot/gummiboot:
Install the standalone package for systemd-boot if systemd is not installed:
(chroot)# glacier -f gummiboot
Install the bootloader:
(chroot)# bootctl install
Edit /boot/loader/loader.conf
to your liking.
Create a boot entry at /boot/loader/entries/everest.conf
.
For GRUB:
Install the GRUB package that corresponds to your system:
(chroot)# glacier -f grub-bios
(chroot)# glacier -f grub-uefi
Install GRUB:
(chroot)# grub-install /dev/sdX # for BIOS
(chroot)# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub # for UEFI
Create a GRUB configuration file:
(chroot)# grub-mkconfibg -o /boot/grub/grub.cfg
Finishing the installation
Every component of the system has been configured, and we can now
boot into it.
Exit the chroot environment:
(chroot)# exit
Unmount all partitions from the system mountpoint:
(root)# umount -R /mnt/everest
Power off the system:
(root)# poweroff
Ensure you remove the installation media or you
will not boot into the new system.
Post installation
A base Everest system is very minimal.
Most users will want to configure extra components, such as a window
manager, or sound. See: General Recommendations for more info.