SYNOPSISInstall
CONTENTBecause Wyvertux can’t be run in a bare-metal yet (citing (planned) differences with KISS’ own base init), the installation method for Wyverkiss will be provided here instead.
If anything’s missing in this guide, you can report it to the Wyverkiss GitHub issue page.
Install Wyverkiss
Start by declaring two variables.
$ ver=2020.10
$ url=https://github.com/wyvertux/wyverkiss/releases/download/$ver
Partitions should be setup and fully mounted to /mnt.
Download the latest rootfs
$ wget "$url/wyverkiss-$ver-rootfs.tar.xz"
Verify the checksums (recommended)
This step verifies that the release matches the checksums generated upon its creation and also ensures that the download completed successfully.
$ wget "$url/wyverkiss-$ver-rootfs.tar.xz.sha256"
$ sha256sum -c < wyverkiss-$ver-rootfs.tar.xz.sha256
Verify the signature (recommended)
This step verifies that the release was signed properly by Muhammad Herdiansyah (the creator). If the live OS of your choice does not include minisign/GnuPG, this step can also be done on another machine (or you can install it on your live OS)
There are two methods of this, minisign is far simpler (you don’t have to import my public key), but GnuPG is used wider, so it’s still available.
Download the minisign or GnuPG signature
$ wget "$url/wyverkiss-$ver-rootfs.tar.xz.minisig" # minisign
$ wget "$url/wyverkiss-$ver-rootfs.tar.xz.asc" # GnuPG
Import my public key (only for GnuPG)
gpg --keyserver keys.gnupg.net --recv-key 9BDF29AC491433CE
Verify the signature
minisign -Vm wyverkiss-$ver-rootfs.tar.xz -P RWRX6BWR+kgO3kLVuWgBezKRR9IdFiXVabcicNlmEU+qKmYeP82ZtFMb
OR
gpg --verify "wyverkiss-$ver-rootfs.tar.xz.asc" "kiss-chroot-$ver.tar.xz"
Unpack the tarball
Since 2020.9, the rootfs tarball will not extract to wyverkiss-root/
, so you don’t need --strip-components 1
in your tar
command. However, you need to extract it to an empty directory. Preferably /mnt
, where your partition probably is mounted to.
# cd /mnt
# tar xvf "wyverkiss-$ver-rootfs.tar.xz"
Enter the rootfs
# mnt -o bind /dev /mnt/dev
# mnt -t sysfs sys /mnt/sys
# mnt -t proc proc /mnt/proc
# cp /etc/resolv.conf /mnt/etc/resolv.conf
# chroot /mnt /bin/sh
Setup repositories
The repository system is quite different to that of other distributions. The system is controlled via an environment variable called $KISS_PATH
. This variable is analogous to $PATH
, a colon-separated list of absolute paths.
A repository is merely a directory (repo) containing directories (packages) and can be located anywhere on the file-system. The full path to the directory is the value to KISS_PATH.
The chroot/installation tarball does not come with any repositories by default, nor does the package manager expect or /assume/ that any exist in a given location. This is entirely up to the user.
Setting KISS_PATH
The variable can be set system-wide, per-user, per-session, per-command, and even programmatically. This guide will cover setting it for the current user with an example repository layout.
The variable can be set system-wide, per-user, per-session, per-command, and even programmatically. This guide will cover setting it for the current user with an example repository layout.
Take this layout:
~/repos/
|
+- wyverkiss/
| - .git/
| - core/
| - extra/
| - xorg/
| - gnu/
| - kiss-repo/
|
+- community/
| - .git/
| - community/
|
+- personal/
| - games/
| - web/
- Repositories are stored in ~/repos/ which is a per-user configuration.
- There are two git repositories containing five KISS repositories.
- There is a third repository called personal, not tracked by git.
- The personal repository contains two KISS repositories.
This user’s KISS_PATH could look like this:
~/.profile
1 export KISS_PATH=''
2 KISS_PATH=$KISS_PATH:$HOME/repos/personal/games
3 KISS_PATH=$KISS_PATH:$HOME/repos/personal/web
4 KISS_PATH=$KISS_PATH:$HOME/repos/wyverkiss/core
5 KISS_PATH=$KISS_PATH:$HOME/repos/wyverkiss/extra
6 KISS_PATH=$KISS_PATH:$HOME/repos/wyverkiss/xorg
7 KISS_PATH=$KISS_PATH:$HOME/repos/wyverkiss/gnu
8 KISS_PATH=$KISS_PATH:$HOME/repos/community/community
- All repositories are enabled.
- This is a per-user configuration using ~/.profile
- The package manager will search this list in the order it is defined.
- If a package is not found in a repository, the next list item is checked.
Tip: Run . ~/.profile
for changes to immediately take effect.
Official repositories
The official repositories contain everything from the base system to a working web browser (Firefox) and media player (mpv). This includes Xorg, rust, nodejs and a lot of other useful software.
Clone the repository to the directory of your choosing.
$ git clone https://github.com/wyvertux/wyverkiss.git
This will be cloned to a directory called wyverkiss
. This directory contains multiple Wyverkiss repositories (core, extra, gnu, testing and xorg) and a submodule of KISS repo. Add core, extra, and gnu to your KISS_PATH in all cases. Add xorg if desirable. Do NOT add anything under kiss-repo, since almost all of the packages are symlinked to Wyverkiss’ repo anyway.
The community repository contains packages submitted and maintained by users of KISS Linux. It is twice the size of the official repositories and contains a lot of useful software. Some of them will work without modification, but others will need modifications (usually needs GNU make). A Wyverkiss repo for community might be added in the future. Clone the repository to the directory of your choosing.
$ git clone https://github.com/kisslinux/community.git
This will be cloned to a directory called ‘community’. This directory contains a single KISS repository bearing the same name.
Rebuild Wyverkiss
This step is entirely optional and can also be done post-installation.
Modify compiler options (optional)
These options have been tested and work with every package in the repositories. If you’d like to play it safe, use -O2
or -Os
instead of -O3
.
If your system has a low amount of memory, omit -pipe
. This option speeds up compilation but may use more memory.
If you intend to transfer packages between machines, omit -march=native
and change it to -march=x86-64
. This option tells the compiler to use optimizations unique to your processor’s architecture.
The -jX
option should match the number of CPU threads available. You can omit this, however builds will then be limited to a single thread.
CFLAGS/CXXFLAGS
Note: The 'O' in '-O3' is the letter O, not 0 (ZERO).
$ export CFLAGS="-O3 -pipe -march=native"
$ export CXXFLAGS="$CFLAGS"
MAKEFLAGS
Note: 4 should be changed to match the number of threads.
$ export MAKEFLAGS="-j4"
Update all base packages
This is how updates are performed on a Wyverkiss system. This command uses git to pull down changes from all enabled repositories and will then optionally handle the build/install process.
$ kiss update
Rebuild all packages
We simply cd to the installed packages database and use a glob to grab the name of every installed package. This glob is then passed to the package manager as a list of packages to build.
$ cd /var/db/kiss/installed && kiss build *
Each kiss action (build, install, etc) has a shorthand alias. From now on, kiss b
and kiss i
will be used in place of kiss build
and kiss install
. The software below is required unless stated otherwise.
Filesystems
NOTE: Open an issue for additional filesystem support.
ext2, ext3, ext4
$ kiss b e2fsprogs
$ kiss i e2fsprogs
FAT, VFAT
$ kiss b dosfstools
$ kiss i dosfstools
XFS
$ kiss b xfsprogs
$ kiss i xfsprogs
Device management
NOTE: If you choose to not install eudev, mdev will automatically be used in its place. Eudev is recommended as a lot of software requires it. See KISS Linux’s wiki page for more information.
Needed for blkid support in eudev (recommended but not required).
$ kiss b util-linux
$ kiss i util-linux
$ kiss b eudev
$ kiss i eudev
Wireless
$ kiss b wpa_supplicant
$ kiss i wpa_supplicant
Dynamic IP addressing
$ kiss b dhcpcd
$ kiss i dhcpcd
Hostname
Create the /etc/hostname file.
$ echo HOSTNAME > /etc/hostname
Update the /etc/hosts file.
127.0.0.1 HOSTNAME.localdomain HOSTNAME
::1 HOSTNAME.localdomain HOSTNAME ip6-localhost
Note: This step must be done everytime the hostname is changed.
Kernel
This step involves configuring and building your own Linux kernel. If you have not done this before, below are a few guides to get you started.
- https://wiki.gentoo.org/wiki/Kernel/Gentoo_Kernel_Configuration_Guide
- https://wiki.gentoo.org/wiki/Kernel/Configuration
- https://kernelnewbies.org/KernelBuild
The Linux kernel is not managed by the package manager. The kernel is managed manually by the user. (Rationale: @/faq#7.3)
KISS does not support booting using an initramfs (see @/faq#7.2). When configuring your kernel ensure that all required file-system, disk controller and USB drivers are built with [*] (=y) and not [m] (=m).
Install the required packages
GNU make
$ kiss b gmake
$ kiss i gmake
GNU as
$ kiss b gnu-as
$ kiss i gnu-as
libelf (required in most if not all cases)
$ kiss b libelf
$ kiss i libelf
netbsd-curses (required only for gmake menuconfig
)
$ kiss b netbsd-curses
$ kiss i netbsd-curses
perl (required in nearly all cases)
$ kiss b perl
$ kiss i perl
Tip: A patch can be applied to remove this requirement. See KISS Linux’s wiki page for details.
Download the kernel packages and required patches
Kernel releases:
A larger list of kernels can be found in ArchWiki.
Download the kernel sources
$ wget KERNEL_SOURCE
Extract the kernel sources
$ tar xvf KERNEL_SOURCE
$ cd linux-*
To compile the kernel, you need to use a patch so the kernel can be compiled using byacc instead of GNU bison.
https://lkml.org/lkml/diff/2020/1/30/410/1
$ wget -O byacc.patch https://lkml.org/lkml/diff/2020/1/30/410/1
$ patch -p1 < byacc.patch
Download firmware blobs
To be in line with KISS policy and keep the repositories entirely FOSS, the proprietary kernel firmware is omitted. This also makes sense as the kernel itself is manually managed by the user. This step is only required if your hardware make use of this firmware.
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
Download and extract the firmware
$ wget FIRMWARE_SOURCE.tar.gz
$ tar xvf linux-firmware-20191022.tar.gz
Copy the required drivers to ‘/usr/lib/firmware’.
$ mkdir -p /usr/lib/firmware
$ cp -R ./path/to/driver /usr/lib/firmware
Kernel configuration
You can determine which drivers you need by searching the web for your hardware and the Linux kernel.
If you require firmware blobs, the drivers you enable must be enabled as [m]
(modules). You can also optionally include the firmware in the kernel itself.
Generate a default config with most drivers built into the kernel.
$ gmake HOSTCC=cc YACC=yacc CC=cc defconfig
Open an interactive menu to edit the generated .config and enable anything extra you may need.
$ gmake HOSTCC=cc YACC=yacc CC=cc menuconfig
Store the generated config for reuse later.
$ cp .config /path/to/somewhere
Tip: The kernel can backup its own .config file. See KISS Linux wiki’s page for details.
Kernel building
This may take a while to complete. The compilation time depends on your hardware and kernel configuration. The nproc
command outputs the total number of threads which we pass to make for a multi-threaded build.
For Linux 5.7 or later (see commit)
$ gmake LLVM=1 YACC=byacc -j "$(nproc)"
For Linux 5.6 or earlier
$ gmake HOSTCC=clang CC=clang YACC=byacc -j "$(nproc)"
Kernel installation
Install the built modules (to /usr/lib).
# gmake INSTALL_MOD_STRIP=1 modules_install
Install the built kernel (to /boot). (Ignore the LILO error).
# gmake install
Rename the kernel/system.map (vmlinuz -> vmlinuz-VERSION).
$ mv /boot/vmlinuz /boot/vmlinuz-VERSION
$ mv /boot/System.map /boot/System.map-VERSION
Bootloader (UNDER CONSTRUCTION)
Since currently the only bootloader available for KISS is GNU GRUB, we cannot use it by default. Consider using EFISTUB instead.
See KISS Linux’s wiki for EFISTUB for details.
Install init scripts
The default init is busybox init (though nothing ties you to it). The below commands install the bootup and shutdown scripts as well as the default inittab config.
Source code: KISS GitHub
$ kiss b baseinit
$ kiss i baseinit
Add a normal user (recommended)
$ adduser USERNAME
The KISS community repository is maintained by users of KISS Linux and contains packages which aren’t in the main repositories. This repository is disabled by default. Note that for some packages, gmake
might be explicitly needed.
$ git clone https://github.com/kisslinux/community.git
Add the repository to the system-wide KISS_PATH
. The KISS_PATH
variable works exactly like PATH
. Each repository is split by :
and is checked in the order they’re written.
Add the full path of the repository cloned above to the existing KISS_PATH
Note: The subdirectory must also be added.
Install Xorg
To install Xorg, the input drivers and a basic default set of fonts, run the following commands. See KISS Linux’s wiki page for details.
$ kiss b xorg-server xinit xf86-input-libinput
Installing a base font is recommended as nothing will work without fonts.
$ kiss b liberation-fonts
$ kiss i liberation-fonts
User addition to the relevant groups
This groups based permissions model may not be suitable if KISS/Wyverkiss will be used as a multi-seat system. Further configuration can be done at your own discretion.
Replace ‘USERNAME’ with the name of the user created earlier.
$ addgroup USERNAME video
$ addgroup USERNAME audio
Aftermath
You should now be able to reboot into your Wyverkiss installation. Typical configuration should follow (creation of users, service configuration, installing a window manager, terminal etc).
The KISS Wiki is a good place to look for post-installation information.
If you encountered any issues, feel free to open an issue on Wyverkiss’ GitHub repository.
Legal notice
A lot of this page are copied directly from KISS Linux with modifications where appropriate, see COPYING for details.