The stal/IX on-disk installation guide from a rootfs tarball
Boot the machine from a bootable media, such as an Ubuntu/Fedora/NixOS live CD, and launch a terminal:
sudo sh
Install the tools:
test -f /usr/bin/parted || yum install parted || apt-get install parted
test -f /usr/bin/wget || yum install wget2 || apt-get install wget
test -f /usr/bin/tar || yum install tar || apt-get install tar
test -f /usr/bin/xz || yum install xz || apt-get install xz-utils
The exact commands for installing parted
, wget
, tar
, and xz
will depend on the distribution that you use, but the above should work on Fedora, Red Hat Enterprise Linux, Debian, and their derivatives.
For general instructions on partitioning a disk, see
https://wiki.archlinux.org/title/installation_guide#Partition_the_disks.
Prepare EXT4 (or any other file system) on /dev/xxx using parted
(you can also use fdisk
or cfdisk
), mkfs.ext4
(or the equivalent command for your file system), and mount it:
mkdir /mnt/ix
mount /dev/xxx /mnt/ix
Download the latest stal/IX rootfs tarball from here (e.g. https://github.com/stal-ix/stalix/releases/download/20250620/stalix-x86_64-20250620.tar.xz) and extract it:
cd /mnt/ix
wget https://github.com/stal-ix/stalix/releases/download/20250620/stalix-x86_64-20250620.tar.xz
tar -xpJf stalix-*-*.tar.xz
Create a “tmp” directory in the root filesystem (required for configuring a Linux kernel):
mkdir tmp
And pivot_root
inside of the root filesystem (chroot
doesn’t work with unshare
used by IX):
mkdir old-root
pivot_root . old-root
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mount --rbind old-root/dev /dev
mount -t tmpfs -o mode=1777 tmpfs /dev/shm
cp old-root/etc/resolv.conf /var/run/resolvconf/
. /etc/env
Now prepare a bootable kernel for your hardware and install the GRUB bootloader. Reboot into GRUB and select the menu entry corresponding to your kernel. After a successful boot, switch to tty5, the root prompt will appear.
. /etc/profile
. /etc/env
Add a completely new user without sudo capability.
Try logging in from tty1.
What’s next:
Add uniqueness to the system, without it some packages refuse to install:
./ix mut system --seed="$(cat /dev/random | head -c 1000 | base64)"