Home About Install Packages Downloads Wiki Git

Installation Handbook

This guide is the official installation handbook for Everest Linux.

Using unofficial guides is not recommended, as they may be outdated, or unreliable. The official guide is located at https://www.everestlinux.org/install.

Simply copy and pasting commands from this guide won't cut it, and you'll most likely end up with a broken installation. Ensure you know what each command does.

If you need assistance, reach out to us on IRC (libera.chat, #everestlinux) or Discord.

Prerequisites

The following steps are required to complete an installation:

  1. Set up the build environment
  2. Download a system image
  3. Unpack the system image
  4. Change root into the new system
  5. Install programs
  6. Install the Linux kernel
  7. Set up init scripts and services
  8. Install the bootloader
  9. Reboot the system
Note that Everest is highly flexible. That being said, it is up to you to make modifications yourself.

Run commands prefixed with (user)$ as an unprivileged user.

Run commands prefixed with (root)# as the root user.

Run commands prefixed with (chroot)# inside the chroot environment.

Set up the environment

Everest needs a proper environment set up in order to install correctly.

A system mountpoint is where the new system's root (/) will be. Where you put this doesn't matter, as the host system used to build the system won't be included

in the final installation. In this example, we will use /mnt/everest.

Create a system mountpoint:

(root)# mkdir -pv /mnt/everest

A variable pointing to the system mountpoint may be useful in the future, as it will save you a bit of typing.

Create a variable for the system mountpoint:

(root)# SYS_MNT=/mnt/everest

Partitions must be created on the drive you wish to install Everest to. The typical partition layout on an Everest system may differ from othet distributions.

The typical layout is:

Mount point Type Suggested size
/mnt/everest/boot EFI system partition (esp) No smaller than 256 MB, no larger than 1 GB
/mnt/everest/usr /usr No smaller than 25 GB
/mnt/everest Root filesystem Remainder of the drive

Partition the target drive:

(root)# cfdisk /dev/sdX

A valid filesystem is required on the drive.

Most filesystems should work, however ensure the system has the corresponding package for whatever filesystem you choose.

For example, if XFS is used, when installing the system:

(chroot)# gpkg -f world/xfsprogs

In this example, Ext4 will be used.

Create a filesystem:

(root)# mkfs.ext4 /dev/root

(root)# mkfs.ext4 /dev/usr

The EFI system partition (esp) must be formatted as FAT32.

(root)# mkfs.vfat -F32 /dev/boot

Mount the root partition to the system mountpoint:

(root)# mount /dev/root /mnt/everest

Some additional directories may need to be created.

Create extra needed directories:

(root)# mkdir /mnt/everest/boot

(root)# mkdir /mnt/everest/usr

Mount the remaining partitions:

(root)# mount /dev/boot /mnt/everest/boot

(root)# mount /dev/usr /mnt/everest/usr

Create remaining directories on /usr with mkusrskel:

(root)# mkusrskel -d /mnt/everest/usr

Downloading a system image

An Everest system image provides an incomplete root filesystem which users can build a system off of. Users should be careful of which

image they choose, as switching in the future is trivial, time consuming, and requires rebuilding a lot of packages. It's a lot better

to get it right the first time, rather than trying to get it right later.

Do some thorough planning to ensure you get the right system image. For instance, ask yourself a few questions, such as:

  1. Do I need 32 bit libraries?
  2. Will I be using proprietary software that cannot be recompiled?
  3. Do I require a specific C library for my hardware setup?
  4. Do I want to set up NSA Security Enhanced Linux (SELinux)
  5. Do I want an init system other than Busybox's built in init configured out of the box?

Downloading a system image that is severely out of date is not recommended. Many programs, such as the kernel or SSL library will be vulnerable to attacks.

Download a system image with wget:

(user)$ wget https://git.everestlinux.org/EverestLinux/everest/raw/branch/main/releases/SYSTEM_IMAGE.tar.xz

Unpacking the system image

Now that a system image has been downloaded, we can unpack it.

Ensure the system image is inside the system mountpoint, otherwise you may run into trouble.

Since a Linux root filesystem is complex, and many different files need to be owned by certain users, or have certain permissions, simply running `tar xf` will

result in a broken image. A couple extra flags are needed to preserve these permissions in the unpacked image.

Unpack the system image:

(root)# tar -xpvf SYSTEM_IMAGE --xattrs-include='*.*' --numeric-owner

If this command was run correctly, you shouldn't need to edit any permissions manually.

Chrooting into the system mountpoint

Although we have a relatively complete root filesystem at this point, many essential programs are still missing. These include the kernel and bootloader. Without these,

the system is unable to boot. At this point, we must chroot into the new system. This will allow us to complete the system without booting.

Chroot into the new system:

(root)# everest-chroot /mnt/everest

Change the shell prompt to differentiate the two environments:

(chroot)# echo "export PS1='(chroot) ${PS1}'" >> /etc/profile && source /etc/profile

Install packages

Any programs you wish to install, such as display servers, login managers, and desktop environments, should be installed now. The kernel can take multiple

hours to compile on some hardware.

Glacier manages packages on the system, and it allows users to install, or 'merge' their own. It is recommended to get familiar with this system.

See: Introduction to Glacier

Install the Linux kernel

The most important part of the system, the kernel, which allows hardware to communicate with software, is ready to be installed.

If needed, merge the linux-firmware package, which provides device firmware:

(chroot)# gpkg -f world/linux-firmware

At this stage, you can decide which kernel you want to install. In Everest's package repository, many prebuilt kernels are available, as well as the

source code, should you wish to compile your own.

Option 1: Custom kernel

Compiling a custom kernel is the recommended option for most users, as it allows the most control.

Download the kernel's source tree:

(chroot)# gpkg -f world/linux

The source tree will be located under /usr/src/linux.

Inside /usr/src/linux, ensure the source tree is completely clean by running the following:

(chroot)# make mrproper

The kernel must be configured before it is compiled. Recommended options are not provided - it is up to you to configure the kernel for your setup.

Configure the kernel:

(chroot)# export EVEREST_ARCH="$(echo $MACHTYPE)"

(chroot)# ARCH=$EVEREST_ARCH make defconfig

(chroot)# ARCH=$EVEREST_ARCH make menuconfig

Once the kernel is configured, compile it:

(chroot)# make && make modules install

Option 2: Distribution kernel

For those who do not wish to configure a custom kernel, or likewise do not have the time or system resources to do so, a distribution kernel

provides a binary kernel. However, there are a couple of pitfalls to this option:

  1. Distribution kernels are not fine tuned to your system, they are generic and bloated
  2. Distribution kernels are managed by their respective development teams, who must be relied upon for fixes
  3. Distribution kernels deprive the user of the experience gained by configuring and compiling a custom kernel

Everest offers many distribution kernels, some notable ones include:

  1. linux-everest
  2. linux-zen
  3. linux-hardened

Install a distribution kernel:

(chroot)# gpkg -f world/linux-{everest,zen,hardened}

Build an initramfs

Depending on your system, an initramfs may be required. For example, users of distribution kernels will ALWAYS need to build an initramfs,

while those who configured and compiled their own will usually not need one.

To build an initramfs, you will need dracut. Install dracut:

(chroot)# gpkg -f world/dracut

Build an initramfs:

(chroot)# dracut

Configure the system

Now that the kernel is installed, various other parts of the system should be configured.

Create /etc/fstab, which provides the system with information about mounted filesystems.

For example, on a system with a root, /usr, and boot partition, /etc/fstab will look like this:

FILE: /etc/fstab

/dev/sda1 / ext4 noatime 0 1

/dev/sda2 /usr ext4 noatime 0 1

/dev/sda3 /boot vfat defaults,noatime 0 2

System services that some may find helpful, such as a cron daemon or logging daemon, should be set up now.

On systems using systemd:

(chroot)# systemctl enable cronie chronyd sysklogd

On systems without a service manager, all services under /etc/init.d will be initialied by rcS.

The system's timezone is read from /etc/localtime, which is a symlink.

In case timezone information is missing from /usr/share/zoneinfo, install it:

(chroot)# gpkg -f world/tzdata

Create /etc/localtime:

(chroot)# ln -sv /usr/share/zoneinfo/Region/City /etc/localtime