This commit is contained in:
Liam Waldron 2023-12-07 12:06:00 -05:00
parent 7a64527a1a
commit 1eda26a9c8
6 changed files with 298 additions and 83 deletions

View File

@ -70,6 +70,28 @@ html {
color: #ECEFF4;
}
.note {
background-color: #88C0D0;
border-left-style: solid;
border-left-color: #88C0D0;
border-width: 4px;
border-radius: 2px;
padding: 4px;
width: 50%;
color: #2E3440;
}
.caution {
background-color: #EBCB8B;
border-left-style: solid;
border-left-color: #EBCB8B;
border-width: 4px;
border-radius: 2px;
padding: 4px;
width: 50%;
color: #2E3440;
}
.warning {
background-color: #BF616A;
border-left-style: solid;
@ -107,6 +129,17 @@ th {
border-color: #ECEFF4;
}
notehead {
background-color: #88C0D0;
border-left-style: solid;
border-left-color: #88C0D0;
border-width: 4px;
border-radius: 2px;
padding: 6px;
width: 50%;
color: #2E3440;
}
fhead {
background-color: #2E3440;
border-left-style: solid;
@ -129,6 +162,17 @@ khead {
color: #B48EAD;
}
cautionhead {
background-color: #EBCB8B;
border-left-style: solid;
border-left-color: #EBCB8B;
border-width: 4px;
border-radius: 2px;
padding: 6px;
width: 50%;
color: #2E3440;
}
warnhead {
background-color: #BF616A;
border-left-style: solid;

View File

@ -55,6 +55,7 @@
<li><a href="dev-docs.html">Developer Documentation</a></li>
<li><a href="general-recommendations.html">General Recommendations</a></li>
<li><a href="intro-to-glacier.html">Introduction to Glacier</a></li>
<li><a href="meta-reading.html">Meta: Reading Guide</a></li>
<li><a href="musl-or-glibc.html">musl or glibc?</a></li>
</ul>
</div>

View File

@ -26,15 +26,15 @@
<button onclick="window.location.href='home.html';">
Back to home
</button>
<h2>Introduction</h2>
<h2>1 - Introduction</h2>
<p>Glacier is the package management system for Glacier. All users should be familiar with how it works.</p>
<h2>Terminology</h2>
<h2>2 - Terminology</h2>
<p>In this case, the word 'merge' and 'install' mean the same thing.</p>
<p>A package index is a list of all installed packages on any given Everest system.</p>
<p>The local index is managed by all users on the system, and is located in /usr/glacier/index.</p>
<p>The global index is managed by Git, and is located in /glacier/index.</p>
<p>A system profile describes your base system, including C library, architecture, SELinux support, multilib support, etc.</p>
<h2>Included programs</h2>
<h2>3 - Included programs</h2>
<p><strong>3.1 </strong>gpkg</p>
<p>'gpkg' is the program most users will be interacting with. It handles the downloading, installation, and logging of packages.</p>
<p><strong>3.2 </strong>syspkg</p>
@ -45,30 +45,30 @@
<p>'gquery' queries information on a package.</p>
<p><strong>3.5 </strong>glacier-mkprofile</p>
<p>'glacier-mkprofile' makes changes to the system-wide profile. Users should not interact with this unless needed.</p>
<h2>Frontends</h2>
<h2>4 - Frontends</h2>
<p>Frontends, or wrappers, may provide additional functionality to Glacier.</p>
<warnhead><strong>WARNING:</strong></warnhead>
<div class="warning">
<p>Third party frontends and wrapper scripts are not supported. Use them at your own risk.</p>
</div>
<h2>Merging packages</h2>
<p><strong>4.1 </strong>Using gpkg</p>
<h2>5 - Merging packages</h2>
<p><strong>5.1 </strong>Using gpkg</p>
<p>To merge a package from a repository:</p>
<code>(root)# gpkg -f repo/pkg</code>
<p>For instance, to install 'vim' in the 'world' repository:</p>
<code>(root)# gpkg -f world/vim</code>
<p><strong>4.2 </strong>Using syspkg</p>
<p><strong>5.2 </strong>Using syspkg</p>
<p>Using 'syspkg' is not recommended for end users because all changes to the global package index will be overwritten when pulling a new update.</p>
<p>If you understand these risks, and wish to use 'syspkg' anyways, you are acknowledging that things may break.</p>
<p>To merge a package from a repository:</p>
<code>(root)# syspkg -f repo/pkg</code>
<h2>Updating packages</h2>
<p><strong>5.1 </strong>Introduction</p>
<h2>6 - Updating packages</h2>
<p><strong>6.1 </strong>Introduction</p>
<p>When merging a package into any index, the package file is retained in said index. This provides most information needed to keep track of the package, however, when updating, an updated package file will need to be downloaded. Old package files will be retained as 'pkgname.old'.</p>
<p><strong>5.2 </strong>Using gpkg</p>
<p><strong>6.2 </strong>Using gpkg</p>
<p>To update a package:</p>
<code>(root)# gpkg -u repo/pkg</code>
<p><strong>5.3 </strong>Using syspkg</p>
<p><strong>6.3 </strong>Using syspkg</p>
<p>As mentioned above, 'syspkg' is intended for system development, and NOT for end users.</p>
<p>However, 'syspkg -u' has some use cases for end users. These include:</p>
<ul>
@ -77,24 +77,24 @@
</ul>
<p>To update a package:</p>
<code>(root)# syspkg -u repo/pkg</code>
<h2>Removing packages</h2>
<p><strong>6.1 </strong>Introduction</p>
<h2>7 - Removing packages</h2>
<p><strong>7.1 </strong>Introduction</p>
<p>When removing a package, the package info file is moved from the appropriate index to /tmp, and saved as 'pkgname.rm'. This means it will be wiped after the next reboot.</p>
<p><strong>6.2 </strong>Using gpkg</p>
<p><strong>7.2 </strong>Using gpkg</p>
<p>To remove a package:</p>
<code>(root)# gpkg -x pkg</code>
<p>Note that no repository name was provided. It is not required, as no files will be downloaded during the removal process.</p>
<p>If a package is a dependency for another, you will be shown the following error:</p>
<code>[x] Could not remove (package_name): is a dependency for (package_name)</code>
<p><strong>6.3 </strong>Using syspkg</p>
<p><strong>7.3 </strong>Using syspkg</p>
<warnhead><strong>WARNING:</strong></warnhead>
<div class="warning">
<p>Removing packages that shipped with the system images WILL cause catastrophic damage. You have been warned.</p>
</div>
<p>If you wish to proceed anyways, you can remove a package with:</p>
<code>(root)# syspkg -x pkg</code>
<h2>Advanced usage</h2>
<p><strong>7.1 </strong>Patching packages</p>
<h2>8 - Advanced usage</h2>
<p><strong>8.1 </strong>Patching packages</p>
<p>Patching packages is the act of editing a package file to change compile options, optimizations, etc. It is very useful if used correctly.</p>
<p>The officially tested and verified method for patching is as follows:</p>
<ul>
@ -102,7 +102,7 @@
<li>Edit the package file with a text editor of your choice</li>
<li>Install the locally modified package with 'gpkg -fl pkg'</li>
</ul>
<p><strong>7.2 </strong>Custom package repository</p>
<p><strong>8.2 </strong>Custom package repository</p>
<p>If Glacier's standard package repository is not sufficient, you can use a custom one.</p>
<warnhead><strong>WARNING:</strong></warnhead>
<div class="warning">
@ -116,21 +116,21 @@
<div class="file">
<p>export GREPO="https://some-repo.org</p>
</div>
<p><strong>7.3 </strong>Compile flags</p>
<p><strong>8.3 </strong>Compile flags</p>
<p>When an operation is performed on a package, 'gpkg' invokes the system's C compiler, which can take flags for compilation.</p>
<p>'MAKEFLAGS', 'CFLAGS', 'CXXFLAGS', and 'LDFLAGS' can be set in '/etc/make.conf'.</p>
<p>It is highly recommended to keep '-static' in 'CFLAGS' and 'LDFLAGS'.</p>
<p><strong>7.4 </strong>Using syspkg</p>
<p><strong>8.4 </strong>Using syspkg</p>
<p>'syspkg' is intended for development use and not for end users. That being said, 'syspkg' can be used for fixing security vulnerabilities without pulling in a new release from git.</p>
<p>Note that all changes to the global package index ('/glacier/index') will be overwritten during an update, where the user invokes 'git pull' on '/'.</p>
<p><strong>7.5 </strong>Whitelisting licenses</p>
<p><strong>8.5 </strong>Whitelisting licenses</p>
<p>Certain license types can be whitelisted or blacklisted. This is useful for controlling which software is installed on your system.</p>
<p>This setting is stored in /etc/glacier.conf, in a simple Bash array. By default, it should look something like this:</p>
<fhead><strong>FILE:</strong> /etc/glacier.conf</fhead>
<div class="file">
<p>export GLACIER_ALLOWED_LICENSES=("GPL v3" "GPL v2" "GPL" "MIT" "BSD" "APACHE")</p>
</div>
<p><strong>7.6 </strong>Services</p>
<p><strong>8.6 </strong>Services</p>
<p>Glacier services are small programs that can do certain tasks within Glacier, such as updating the local package database.</p>
<p>Services must be enabled in /etc/glacier.conf before they can be used.</p>
<fhead><strong>FILE: </strong>/etc/glacier.conf</fhead>
@ -151,25 +151,25 @@
<fhead><strong>FILE: </strong>/etc/glacier/end-srv</fhead>
<div class="file">
<p>#!/bin/bash</p>
<p>&nbsp</p>
<p>&nbsp;</p>
<p>GLACIER_SRV_DIR="/etc/glacier/services"</p>
<p>$GLACIER_SRV_DIR/update-pkgdb.hook</p>
</div>
<h2>Querying packages</h2>
<p><strong>8.1 </strong>Introduction</p>
<h2>9 - Querying packages</h2>
<p><strong>9.1 </strong>Introduction</p>
<p>Glacier packages, in ther simplest form, are text files, containing instructions on how the package is built, who made it, what it's called, and what files it includes.</p>
<p><strong>8.2 </strong>Querying files</p>
<p><strong>9.2 </strong>Querying files</p>
<p>All files belonging to a package can be listed with:</p>
<code>(user)$ gquery -f pkg</code>
<p><strong>8.3 </strong>Querying info</p>
<p><strong>9.3 </strong>Querying info</p>
<p>Package info can be listed with:</p>
<code>(user)$ gquery -i pkg</code>
<h2>Writing packages</h2>
<p><strong>9.1 </strong>Introduction</p>
<h2>10 - Writing packages</h2>
<p><strong>10.1 </strong>Introduction</p>
<p>As mentioned before, Glacier packages are simply text files. This makes them very easy to write and maintain.</p>
<p>If you have previous experience writing PKGBUILDs for the AUR, writing Glacier packages should feel very similar.</p>
<p>In this page, 'nano' will be used as an example.</p>
<p><strong>9.2 </strong>Metadata</p>
<p><strong>10.2 </strong>Metadata</p>
<p>Package files start with metadata, which tells Glacier who made the package, what its called, as well as other information.</p>
<p>Double check that all of this information is correct before submitting a package.</p>
<fhead><strong>FILE:</strong> $(pwd)/nano</fhead>
@ -184,7 +184,7 @@
</div>
<p>Hopefully, most of these options are self explanatory.</p>
<p>For INCLUDED_FILES, ensure you DON'T include documentation (manpages, etc).</p>
<p><strong>9.3 </strong>Integrity information</p>
<p><strong>10.3 </strong>Integrity information</p>
<fhead><strong>FILE:</strong> $(pwd)/nano</fhead>
<div class="file">
<p>SHA256SUMS="86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526"</p>
@ -192,7 +192,7 @@
<p>All packages must include their checksums. When merging a package, 'gpkg' will check the provided checksum against the actual checksum of the package, and if they don't match, the operation will be cancelled.</p>
<p>To get the checksum of a package:</p>
<code>(user)$ sha256sum package</code>
<p><strong>9.4 </strong>Dependency information</p>
<p><strong>10.4 </strong>Dependency information</p>
<fhead><strong>FILE:</strong> $(pwd)/nano</fhead>
<div class="file">
<p>DEPENDS=("")</p>
@ -200,7 +200,7 @@
</div>
<p>Dependency information is extremely important. It allows 'gpkg' to install any dependencies. It also warns the user when a package conflicts with another.</p>
<p>This should be fairly easy to figure out. Most projects will have this listed in their README. If you're the developer, you'll probably already know the dependencies your package requires.</p>
<p><strong>9.5 </strong>Source information</p>
<p><strong>10.5 </strong>Source information</p>
<fhead><strong>FILE:</strong> $(pwd)/nano</fhead>
<div class="file">
<p>PACKAGE_SRC="https://nano-editor.org/dist/v7/nano-7.2.tar.xz</p>

83
docs/meta-reading.html Normal file
View File

@ -0,0 +1,83 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Everest Linux - Docs</title>
<link type="text/css" rel="stylesheet" href="../css/nord.css"/>
</head>
<body>
<!-- Navbar -->
<div class="sidenav">
<img src="../img/everest-nord.svg" alt="everest-logo">
<a href="../index.html">Home</a>
<a href="../about.html">About</a>
<a href="../install.html">Install</a>
<a href="../packages.html">Packages</a>
<a href="../download.html">Downloads</a>
<a href="home.html">Docs</a>
<a href="../errata.html">Errata</a>
<a href="https://git.everestlinux.org">Git ↗</a>
</div>
<!-- Rest of page -->
<div class="main">
<button onclick="window.location.href='home.html';">
Back to home
</button>
<h2>1 - Introduction</h2>
<p>Documentation for Everest is formatted in a specific way. This page explains how a page is formatted, and what certain things mean, in as much detail as possible.</p>
<h2>2 - Cards</h2>
<p><strong>2.1 </strong>Introduction</p>
<p>Most Everest documentation pages will contain some type of a "card". Put simply, these are small sections that contain file contents, kernel configurations, warnings, notes, etc. There are 6 types of cards:</p>
<p><strong>2.2 </strong>Note</p>
<p>This card is the most simple. It contains a note on a certain section. They are usually not required to read, but contain important information.</p>
<notehead><strong>NOTE:</strong></notehead>
<div class="note">
<p>This is an example of a note card.</p>
</div>
<p><strong>2.3 </strong>Caution</p>
<p>This card is one step up from a note. It contains important information, and should be read. However, it usually isn't urgent, or if it is, it contains things that most would consider common knowledge.</p>
<cautionhead><strong>CAUTION:</strong></cautionhead>
<div class="caution">
<p>This is an example of a caution card.</p>
</div>
<p><strong>2.4 </strong>Warning</p>
<p>This card is one of the most important. It contains extremely important information that, if not understood, could lead to system breakage, data loss, etc.</p>
<warnhead><strong>WARNING:</strong></warnhead>
<div class="warning">
<p>This is an example of a warning card.</p>
</div>
<p><strong>2.5 </strong>File</p>
<p>This card contains the contents of a text file. It is usually used to show configuration files.</p>
<fhead><strong>FILE:</strong> example.txt</fhead>
<div class="file">
<p>This is an example of a file card.</p>
</div>
<p><strong>2.6 </strong>Kernel</p>
<p>This card contains a kernel configuration as seen in <cil>make menuconfig</cil>.</p>
<khead><strong>KERNEL:</strong> Enable module "example</khead>
<div class="kernel">
<p>This is an example of a kernel card.</p>
</div>
<p><strong>2.7 </strong>Bigcode</p>
<p>The <cil>code</cil> tag is typically used to denote commands the user should run. The <cil>bigcode</cil> card is meant for showing programs, usually Bash or Python scripts, or C programs.</p>
<bigcodehead><strong>CODE:</strong> example.c</bigcodehead>
<div class="bigcode">
<p>This is an example of a bigcode card.</p>
</div>
<p><strong>2.8 </strong>News</p>
<p>This card is meant for sharing news about the distribution. It is only found on the homepage.</p>
<newshead><strong>1/1/70 - Example</strong></newshead>
<div class="news">
<p>This is an example of a news card.</p>
</div>
</div>
<footer>
<p>Page last updated MM/DD/YY @ HH:MM</p>
<p>Page licensed under GNU Free Documentation License 1.3 or later</p>
<p>--------------------</p>
<p>Copyright (C) 2021-2023 Everest Linux</p>
<p>Linux (R) is a registered trademark of Linus Torvalds.</p>
<p>Everest Linux is provided AS IS, WITHOUT WARRANTY.</p>
</footer>

62
docs/recovery.html Normal file
View File

@ -0,0 +1,62 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Everest Linux - Docs</title>
<link type="text/css" rel="stylesheet" href="../css/nord.css"/>
</head>
<body>
<!-- Navbar -->
<div class="sidenav">
<img src="../img/everest-nord.svg" alt="everest-logo">
<a href="../index.html">Home</a>
<a href="../about.html">About</a>
<a href="../install.html">Install</a>
<a href="../packages.html">Packages</a>
<a href="../download.html">Downloads</a>
<a href="home.html">Docs</a>
<a href="../errata.html">Errata</a>
<a href="https://git.everestlinux.org">Git ↗</a>
</div>
<!-- Rest of page -->
<div class="main">
<button onclick="window.location.href='home.html';">
Back to home
</button>
<h2>Recovery</h2>
<p>System security is very important, however there are time that a system becomes so secure that the owner of the system becomes locked out of their own computer. There are a couple different methods for recovering a locked system.</p>
<h2>1 - Issues</h2>
<p><strong>1.1</strong> Issues resulting in a locked system</p>
<p>There are many things which may lock someone out of their system. The most notable ones are:</p>
<ul>
<li>Forgotten root password</li>
<li>Problematic PAM configuration</li>
</ul>
<p>There are two methods for recovering a system locked out by these issues, one of which should be set up by default.</p>
<h2>2 - Rescue Partition</h2>
<p><strong>2.1</strong> Introduction</p>
<p>Everest includes a small rescue partition in its system images, which contains only what is necessary to recover a system. Using this partition, system recovery is a relatively easy task.</p>
<p><strong>2.2</strong> Booting</p>
<p>While installing, either GRUB automatically created a boot entry for the rescue partition, or you did it yourself. If not, the rescue partition is unusable for recovery.</p>
<p>To boot into the rescue partition, power off your system, and select <cil>Everest Linux (rescue)</cil> in the GRUB boot menu.</p>
<h2>3 - Using BASH as init</h2>
<p><strong>3.1</strong> Introduction</p>
<p>The Linux kernel supports setting a custom init using kernel parameters. In this instance, we will use <cil>bash</cil> as our init to recover a locked system.</p>
<p><strong>3.2</strong> Booting</p>
<p>Power off your system. While booting, edit your boot entry's kernel parameters. On GRUB, this can be done with the <cil>e</cil> key.</p>
<p>Add the following to your kernel parameters:</p>
<khead><strong>KERNEL:</strong> Required kernel parameters to use BASH as init</khead>
<div class="kernel">
<p>init="/bin/bash"</p>
</div>
</div>
<footer>
<p>Page last updated MM/DD/YY @ HH:MM</p>
<p>Page licensed under GNU Free Documentation License 1.3 or later</p>
<p>--------------------</p>
<p>Copyright (C) 2021-2023 Everest Linux</p>
<p>Linux (R) is a registered trademark of Linus Torvalds.</p>
<p>Everest Linux is provided AS IS, WITHOUT WARRANTY.</p>
</footer>

View File

@ -30,24 +30,12 @@
<div class="main">
<h2>Installation Handbook</h2>
<p>This guide is the official installation handbook for Everest Linux.</p>
<warnhead><strong>WARNING:</strong></warnhead>
<warnhead><strong>PRELIMINARY WARNINGS:</strong></warnhead>
<div class="warning">
<p>Using unofficial guides is not recommended, as they may be outdated, or unreliable. The official guide is located at https://www.everestlinux.org/install.</p>
</div>
<p></p>
<warnhead><strong>WARNING:</strong></warnhead>
<div class="warning">
<p>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, and how to tailor it to your system, if necessary.</p>
</div>
<p></p>
<warnhead><strong>WARNING:</strong></warnhead>
<div class="warning">
<p>Everest is not for the faint of heart. If you have never touched Linux in your life, Everest is most certainly not for you. Linux Mint is a great distribution that works out of the box, and is a great entry point into Linux.</p>
</div>
<p></p>
<warnhead><strong>WARNING:</strong></warnhead>
<div class="warning">
<p>Everest at its current state is highly experimental. Install at your own risk.</p>
<p><strong>WARNING 1:</strong> Using unofficial guides is not recommended, as they may be outdated, or unreliable. The official guide is located at https://www.everestlinux.org/install.</p>
<p><strong>WARNING 2:</strong> Simply copy and pasting commands from this guide won't cut it, and you'll likely end up with a broken installation. Ensure you know what each command does, and how to tailor it to your system, if necessary.</p>
<p><strong>WARNING 3:</strong> Everest is not for the faint of heart. There is absolutely no hand holding provided, you are on your own. If you have never touched Linux in your life, Everest is most certainly not for you. There are many distributions which provide a much better user experience for those new to Linux, we personally recommend Linux Mint.</p>
<p><strong>WARNING 4:</strong> Everest in its current state is highly experimental. Install at your own risk.</p>
</div>
<p>If you need assistance, reach out to us on IRC (libera.chat, #everestlinux) or Discord.</p>
<h2>Prerequisites</h2>
@ -57,6 +45,7 @@
<li>Download a system image</li>
<li>Unpack the system image</li>
<li>Change root into the new system</li>
<li>Set up the Glacier system profile and package index</li>
<li>Install programs</li>
<li>Install the Linux kernel</li>
<li>Set up init scripts and services</li>
@ -68,8 +57,8 @@
<p>Run commands prefixed with <code>(root)#</code> as the root user.</p>
<p>Run commands prefixed with <code>(chroot)#</code> inside the chroot environment.</p>
<h2>Set up the environment</h2>
<p>Everest needs a proper environment set up in order to install correctly.</p>
<p>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.</p>
<p>On the host system being used to install Everest, a properly set up environment containing certain programs and directories must be set up to ensure the installation can take place. This section will go into detail on how to set up this environment.</p>
<p>A system mountpoint is where the new system's root (<cil>/</cil>) 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 <cil>/mnt/everest</cil>.</p>
<p>Create a system mountpoint:</p>
<code>(root)# mkdir -pv /mnt/everest</code>
<p>A variable pointing to the system mountpoint may be useful in the future, as it will save you a bit of typing.</p>
@ -86,12 +75,12 @@
<tr>
<td>/mnt/everest/boot</td>
<td>EFI system partition (esp)</td>
<td>No smaller than 256 MB, no larger than 1 GB</td>
<td>No smaller than 256 MB, no larger than 1 GB (minimum 1 GB if installing multiple kernels)</td>
</tr>
<tr>
<td>/mnt/everest/usr</td>
<td>/usr</td>
<td>No smaller than 25 GB</td>
<td>No smaller than 25 GB, recommended size varies.</td>
</tr>
<tr>
<td>/mnt/everest</td>
@ -104,11 +93,12 @@
<p>A valid filesystem is required on the drive.</p>
<p>Most filesystems should work, however ensure the system has the corresponding package for whatever filesystem you choose.</p>
<p>For example, if XFS is used, when installing the system:</p>
<code>(chroot)# gpkg -f world/xfsprogs</code>
<code>(chroot)# gpkg -f xfsprogs</code>
<p></p>
<warnhead><strong>WARNING:</strong></warnhead>
<div class="warning">
<cautionhead><strong>CAUTION:</strong></cautionhead>
<div class="caution">
<p>Zfs is not officially supported by Everest, and requires a lot of configuration to work properly. Use Zfs at your own risk.</p>
<p>This stance may change at a later date, however currently there is no official Everest documentation for setting up Zfs.</p>
</div>
<p>In this example, Ext4 will be used.</p>
<p>Create a filesystem:</p>
@ -131,7 +121,7 @@
<p>Create remaining directories on /usr with mkusrskel:</p>
<code>(root)# mkusrskel -d /mnt/everest/usr</code>
<h2>Downloading a system image</h2>
<p>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 arduous, time consuming, and requires rebuilding a lot of packages.</p>
<p>An Everest system image provides an incomplete root filesystem which users can build a system off of. This includes system programs, libraries, Glacier, among others. Users should be careful of which image they choose, as switching in the future is arduous, time consuming, and requires rebuilding a lot of packages.</p>
<p>It's a lot better to get it right the first time, rather than trying to get it right later.</p>
<p>Do some thorough planning to ensure you get the right system image. For instance, ask yourself a few questions, such as:</p>
<ol>
@ -141,9 +131,9 @@
<li>Do I want to set up NSA Security Enhanced Linux (SELinux)</li>
<li>Do I want an init system other than Busybox's built in init configured out of the box?</li>
</ol>
<warnhead><strong>WARNING:</strong></warnhead>
<div class="warning">
<p>Make sure you're happy with the system image you choose. While migrating in the future is possible, it requires rebuilding the majority of the system.</p>
<notehead><strong>NOTE:</strong></notehead>
<div class="note">
<p>Make sure you're happy with the system image you choose. While migrating in the future is possible, it requires rebuilding the majority of the system, takes a substantial amount of time, and may present other issues.</p>
</div>
<p>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.</p>
<p>Download a system image with wget:</p>
@ -151,30 +141,32 @@
<h2>Unpacking the system image</h2>
<p>Now that a system image has been downloaded, we can unpack it.</p>
<p>Ensure the system image is inside the system mountpoint, otherwise you may run into trouble.</p>
<p>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.</p>
<p>Since a Linux root filesystem is complex, and many different files need to be owned by certain users, or have certain permissions, simply running <cil>tar xf</cil> will result in a broken image, as the proper permissions are not carried over. A couple extra flags are needed to preserve these permissions in the unpacked image.</p>
<p>Unpack the system image:</p>
<code>(root)# tar -xpvf SYSTEM_IMAGE --xattrs-include='*.*' --numeric-owner</code>
<p>If this command was run correctly, you shouldn't need to edit any permissions manually.</p>
<p>In case permissions were changed, you can use the 'prep' command from everest-build-tools.</p>
<p>In case permissions were changed, you can use the <cil>prep</cil> command from <cil>everest-build-tools</cil>.</p>
<h2>Chrooting into the system mountpoint</h2>
<p>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.</p>
<p>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's build process without booting into it.</p>
<p>Chroot into the new system:</p>
<code>(root)# everest-chroot /mnt/everest</code>
<p>Change the shell prompt to differentiate the two environments:</p>
<code>(chroot)# echo "export PS1='(chroot) ${PS1}'" >> /etc/profile && source /etc/profile</code>
<code>(chroot)# echo "export PS1='(chroot) ${PS1}'" &gt;&gt; /etc/profile && source /etc/profile</code>
<h2>Install packages</h2>
<p>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.</p>
<p>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.</p>
<wikihead><strong>WIKI</strong>: <a href="https://git.everestlinux.org/EverestLinux/wiki/wiki/Introduction-to-Glacier">Introduction to Glacier</a></wikihead>
<p>Glacier may not function correctly if the package database has not been downloaded. If <cil>gpkg</cil> outputs the following error: <cil>[x] Local package database does not exist.</cil>, run:</p>
<p><code>(chroot)# glacier-update-pkgdb</code></p>
<h2>Install the Linux kernel</h2>
<p>The most important part of the system, the kernel, which allows hardware to communicate with software, is ready to be installed.</p>
<p>If needed, merge the linux-firmware package, which provides device firmware:</p>
<code>(chroot)# gpkg -f world/linux-firmware</code>
<code>(chroot)# gpkg -f linux-firmware</code>
<p>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.</p>
<p><strong>Option 1: Custom kernel</strong></p>
<p>Compiling a custom kernel is the recommended option for most users, as it allows the most control.</p>
<p>Compiling a custom kernel is the recommended option for most users, as it allows the most control over what exactly is installed on your system.</p>
<p>Download the kernel's source tree:</p>
<code>(chroot)# gpkg -f world/linux</code>
<code>(chroot)# gpkg -f linux</code>
<p>The source tree will be located under /usr/src/linux.</p>
<p>Inside /usr/src/linux, ensure the source tree is completely clean by running the following:</p>
<code>(chroot)# make mrproper</code>
@ -183,8 +175,8 @@
<khead><strong>KERNEL: </strong> Enbable support for IPv6</khead>
<div class="kernel">
<p>Networking support ---></p>
<p>&nbsp&nbsp&nbsp&nbsp&nbsp&nbspNetworking options ---></p>
<p>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp<*> The IPv6 protocol [CONFIG_IPV6]</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Networking options ---></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;*&gt; The IPv6 protocol [CONFIG_IPV6]</p>
</div>
<p> Recommended options are not provided - it is up to you to configure the kernel for your setup.</p>
<p>Configure the kernel:</p>
@ -222,9 +214,9 @@
<p>For example, on a system with a root, /usr, and boot partition, /etc/fstab will look like this:</p>
<fhead><strong>FILE:</strong> /etc/fstab</fhead>
<div class="file">
<p>/dev/sda1&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp/&nbsp&nbsp&nbsp&nbsp&nbsp&nbspext4&nbsp&nbsp&nbsp&nbsp&nbsp&nbspnoatime&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp0 1</p>
<p>/dev/sda2&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp/usr&nbsp&nbsp&nbsp&nbsp&nbsp&nbspext4&nbsp&nbsp&nbsp&nbsp&nbsp&nbspnoatime&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp0 1</p>
<p>/dev/sda3&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp/boot&nbsp&nbsp&nbsp&nbsp&nbsp&nbspvfat&nbsp&nbsp&nbsp&nbsp&nbsp&nbspdefaults,noatime&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp0 2</p>
<p>/dev/sda1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;noatime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 1</p>
<p>/dev/sda2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ext4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;noatime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 1</p>
<p>/dev/sda3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/boot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vfat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;defaults,noatime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 2</p>
</div>
<p>System services that some may find helpful, such as a cron daemon or logging daemon, should be set up now.</p>
<p>On systems using systemd:</p>
@ -241,8 +233,8 @@
<p>Or, on systemd:</p>
<code>(chroot)# hostnamectl hostname <i>hostname</i></code>
<p>A network connection is very important, and there are multiple ways to set one up.</p>
<warnhead><strong>WARNING:</strong></warnhead>
<div class="warning">
<cautionhead><strong>CAUTION:</strong></cautionhead>
<div class="caution">
<p>Ensure your network is fully set up before proceeding with any other steps. It's better to get it right the first time, rather than trying to fix it later.</p>
</div>
<p>First, ensure the desired network interface is not blocked by rfkill:</p>
@ -272,9 +264,9 @@
<p>The /etc/hosts file is used to resolve IP addresses not resolved by the DHCP server.</p>
<fhead><strong>FILE:</strong> /etc/hosts</fhead>
<div class="file">
<p>127.0.0.1&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplocalhost</p>
<p>::1&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplocalhost</p>
<p>127.0.1.1&nbsp&nbsp&nbsp&nbsp&nbsp&nbsplocaldomain <i>hostname</i></p>
<p>127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost</p>
<p>::1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localhost</p>
<p>127.0.1.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localdomain <i>hostname</i></p>
</div>
<p>The root password is extremely important, as it controls access to the root user, the most powerful user on the system.</p>
<p>Ensure your chosen root password is strong enough where it cannot be guessed easily.</p>
@ -295,12 +287,45 @@
<h2>Configure the bootloader</h2>
<p>Now that the system is correctly configured and the kernel is installed, the final step can proceed - installing the bootloader. Without a bootloader, the system will be unable to load the Linux kernel upon boot.</p>
<p>This guide only mentions GRUB, however note that other bootloaders are supported.</p>
<p>Merge GRUB for BIOS:</p>
<code>(chroot)# gpkg -f world/grub-bios</code>
<p>Merge GRUB for UEFI:</p>
<code>(chroot)# gpkg -f world/grub-efi</code>
<p>The GRUB package for certain system profiles compiles BIOS AND UEFI support. If you wish to remove UEFI support, you will have to manually patch the package file.</p>
<p>Unless you are using some obscure system profile, or simply want to make your system as small as possible, you definitely will not have to worry about this.</p>
<wikihead><strong>WIKI</strong>: <a href="https://git.everestlinux.org/EverestLinux/wiki/wiki/Introduction-to-Glacier">Introduction to Glacier</a></wikihead>
<p>Merge <cil>grub</cil>:</p>
<code>(chroot)# gpkg -f grub</code>
<p>Install GRUB for BIOS:</p>
<code>(chroot)# grub-install /dev/sda</code>
<p>If configuring GRUB to boot with UEFI, a few extra things need to be configured.</p>
<p>The following kernel options need to be configured in order to support UEFI:</p>
<khead><strong>KERNEL:</strong> Enable UEFI support</khead>
<div class="kernel">
<p>Processor type and features ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[*] EFI runtime service support</p>
<p></p>
<p>-*- Enable the block layer ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Partition Types ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ /*] Advanced partition selection</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[*] EFI GUID Partition support</p>
<p></p>
<p>Device Drivers ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Firmware Drivers ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[*] Mark VGA/VBE/EFI FB as generic system framebuffer</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Graphics Support ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;*&gt; Direct Rendering Manager (Xfree86 4.1.0 and higher DRI support) ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[*] Enable legacy fbdev support for your modsetting driver</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;*&gt; Simple framebuffer driver</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Frame buffer Devices ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;*&gt; Support for frame buffer devices ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console display driver support ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-*- Framebuffer Console support</p>
<p>File systems ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DOS/FAT/EXFAT/NT Filesystems ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;*/M&gt; VFAT (Windows-95) fs support</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Psuedo filesystems ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;*/M&gt; EFI Variable filesystem</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-*- Native language support ---&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;*/M&gt; Codepage 437 (United States, Canada)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;*/M&gt; NLS ISO 8859-1 (Latin 1; Western European Languages)</p>
</div>
<p>Install GRUB for UEFI:</p>
<code>(chroot)# grub-install --target=x86_64-efi --efi-directory=/boot</code>
<p>For GRUB to work correctly, a configuration file must be created. Create one now:</p>
@ -314,7 +339,7 @@
<code>(root)# umount -R /mnt/everest</code>
<p>Reboot the system:</p>
<code>(root)# reboot</code>
<p>Ensure the installation medium is removed, or else you will not boot into the new system, rather back into the installation medium.</p>
<p>Ensure the newly installed bootloader is first to boot, otherwise you will end up in your old system again. If you used a live USB to install Everest, make sure you remove it before rebooting.</p>
<h2>Conclusion</h2>
<p>If all went well, Everest should boot up with no problems.</p>
<p>Remove the system image from /:</p>