Invelinux is a fully open-source, free and script-based general purpose operating system. One of its main intentions is to teach people intermediate linux knowledge with a goal of making it public for everyone.
Before installing anything, what key features does it have to make it stand out among other linux distributions and most importantly why should you use it?
Invelinux uses Toybox as its userspace, a BSD-licensed alternative to BusyBox. It was chosen to have the rootfs minimal as possible while having a functional and modern userspace toolset which doesn't require compiling unnecessary dependencies for a single command line utility.
For the C library, musl was chosen due to its cleaner codebase, more modern design and ease of being able to create static binaries without much trouble.
The base system runs entirely on RAM and accesses system data and applications from non-volatile storage like an external USB drive which makes for a faster system.
Due to its minimal nature, the OS can run on most low-end hardware. This could practically be really useful if you're looking to get a modern linux kernel to operate on an old device.
Perhaps this is already mentioned several times, but being able to compile Invelinux images using only shell scripts is a really fun way to educate yourself on how the compilation of the OS happens under the hood.
We might be against systemd in some ways but that doesn't mean the system processes will be easier to manage using a sysvinit like init system. So custom interactive shell and Lua scripts are made to make configuring system settings easier while also staying minimal thanks to the embeddability of the Lua programming language.
Invelinux has prebuilt images available, download the latest one here. But if you want to build it from source, read the instructions below to get started.
If you haven't checked the source code already, I actually endorse you to check it out to get familiar with the toolset.
The issues with the build system listed below are just some of the issues we have to patch, and we need your help finding them to fix them.
If you want to report a bug in the build system or the OS, type the exact issue with details in our Codeberg repository issues tab. Thank you!
As of now, our build scripts don't have protections in place to check the build progress, and some of the software that has to be downloaded and checksum verified come from old mirrors.
If one of those mirrors stop functioning at the exact same time you were downloading packages through the package scripts, it'll abort the process and you'll have to run the "cleanup.sh" script to delete the build progress and start over.
This could especially be very exhausting if you need to compile the image multiple times for debugging.
Enabling parallel mode by setting the MAKEFLAGS variable may cause errors during building. To mitigate this issue, you can use a slightly lower core count while specifying MAKEFLAGS instead of just setting MAKEFLAGS to the amount of cores you have.
If you want stable builds and have time, building in single thread mode is recommended. You can leave the MAKEFLAGS blank to build in single thread mode.
Before doing anything, make sure you have the correct packages installed in your host system. Otherwise the build process may be aborted with an error. Most dependencies are necessary for building the kernel, userspace and other packages.
Here are the installation commands for most distributions to install the list of build dependencies required for the host system.
sudo apt install build-essential bison bc libelf-dev flex gzip git m4 make mtools libssl-dev patch syslinux libncurses-dev wget qemu-system qemu-utils xz-utils limine pkg-config
sudo dnf install bison bc elfutils-devel flex gzip git m4 make mtools openssl-devel patch ncurses-devel wget qemu xz pkg-config
NOTE: Fedora doesn't seem to have a prebuilt packages for Limine and syslinux as of writing this, so you might need to resort to unofficial repositories to install the Limine and syslinux packages.
sudo pacman -S base-devel bc elfutils flex gzip git m4 mtools openssl patch syslinux wget qemu-desktop xz limine pkg-config
sudo xbps-install -S base-devel bison bc elfutils-devel flex gzip git m4 make mtools openssl-devel patch syslinux ncurses-devel wget qemu xz limine pkg-config
To download the source code using git, type
git clone --depth 1 https://codeberg.org/sumtas/invelinux.git
in the terminal.
The scripts which are located at the top directory, build the cross toolchain and kernel.
Packages are installed into the root file system with package scripts inside the packages folder.
These package scripts are executed one by one by the build.sh script to install the necessary packages into the root file system.
In the configs folder, setup-sys-config.sh script makes the necessary configurations and copies them into rootfs. The rootfs gets packed into a .cpio archive to act as an initramfs.
The kernel image and initramfs gets packed into a .img file then the syslinux bootloader gets installed into the .img file for BIOS systems, and Limine bootloader for UEFI systems.
To start the building process run the build.sh script in the terminal. Building process will take a while. After it's finished, the bootable image file will be present in the output directory.
Since you're going to run this command with sudo privileges, make sure that the drive you want to flash this image to isn't your primary drive, as the dd utility will wipe everything on that specified drive!
One of the recommended ways to flash the image to an USB flash drive is using the dd command line tool:
sudo dd if=/path/to/image.img.xz of=/dev/sdX bs=1M
NOTE: Replace if=/path/to/image.img.xz with your path to the image file and of=/dev/sdX with the drive name.
You can also use other image flashing tools like balenaEtcher or GNOME Disks.
This part is entirely optional if you just want to test this image on real hardware instead of a virtual machine. Booting up the image in QEMU is a good way to debug any errors present in any part of the operating system, so for most people using QEMU is highly recommended!
Before booting up the image, make sure that your image file isn't compressed with xz.
If it is, you can decompress it with this command:
xz -d IMAGE_FILE.img
Don't forget to replace IMAGE_FILE with your actual image file's name.
You must install the QEMU package your host distribution's package manager provides. To boot up your invelinux image, type
qemu-system-x86_64 -hda IMAGE_NAME.img -m MEMORY
NOTE: Replace IMAGE_NAME with your image file's name, and MEMORY with your RAM size. (e.g. -m 4G)
Also note that QEMU cannot recognize and access your external USB drive by default, you have to configure it like this
sudo qemu-system-x86_64 -hda invelinux.img -m 4G -device qemu-xhci,id=usb -device usb-host,vendorid=0x0951,productid=0x1666
By giving sudo privileges to QEMU and specifying the -device flag, it can access your external USB drive. But make sure to replace the vendorid and productid parameters with the ones that match your external USB drive.
The qemu-xhci is the USB controller QEMU emulates.
You can find the vendorid and productid of your external drive by typing lsusb in the terminal.
... Bus 004 Device 002: ID 0951:1666 Kingston Technology DataTraveler ...
In this example, the vendorid is 0951 and the productid is 1666. Pass them into QEMU as shown in the previous command.
Ventoy is a powerful tool that allows you to store multiple ISO, WIM, IMG, VHD, EFI files in one USB flash drive and boot them using a syslinux-like boot menu.
To flash Ventoy to your USB flash drive, download the latest release from their repository and run the Ventoy GUI application.
After you open the application, you will need to select your USB flash drive and then click Install.
After you have prepared your flash drive with Ventoy's GUI, make sure that the image file you downloaded isn't compressed with xz.
If it is, decompress the image file using this command:
xz -d IMAGE_FILE.img
Don't forget to replace IMAGE_FILE with your actual image file's name.
When it is decompressed, put the image file in the Ventoy partition, after that your Ventoy disk with Invelinux will be ready to boot.
When you boot up the image, AMPS will scan all of your USB drives and internal disks to find a drive with the INVEL_AMPS label. If it fails to find the drive, the OS will boot into an only-initramfs mode, make sure to label your drive with the correct name.
When you format your drive, it is generally recommended to use ext4 as your AMPS partition, due its journaling and recovery features. Using FAT32 or exFAT might be possible but then the partition might be more vulnerable to file corruption if the drive gets ejected without properly being unmounted.
After the AMPS partition is mounted, the AMPS framework will check if folders named /storage/AMPS/bin and /storage/AMPS/etc exist, if they don't exist they will be created. After the bootup sequence, you will be greeted with a login prompt.
To login as the root user, use the password pass.
To login as the guest user, use the password pass.
Congratulations! You have successfully booted up Invelinux, this means it's time for configuration.
It might look complicated at first glance, but it is actually pretty simple to understand:
AMPS has successfully mounted your partition, which means that it has already created default configurations on your drive.
The directory /storage/AMPS/etc is the directory where the configurations files (which will be loaded to the initramfs after the init) are stored.
You can edit these files to change your bash profile, add user accounts or change passwords, add or configure custom scripts which will run after init, etc.
These configuration files and soon to be downloaded applications on your drive are crucial, since the non-volatile storage part of the operating system lies here.
The recommended way of changing the configurations on your AMPS drive is using invel-utils, custom ncurses-based TUI configuration tools designed to make editing configurations on your AMPS drive easier without forcing the user to manually edit files inside /storage/AMPS/etc.
However, you must have root privileges to run these utilities, otherwise they will not function.
To change the hostname, we will use the invel-hostname.sh utility. Type this in the terminal:
invel-hostname.sh
It'll prompt you for a new hostname and ask for a reboot because to reload your configurations, the OS has to reboot.
In Invelinux, Wi-Fi connections are handled with iwd. It is essentially Intel's solution for managing wireless networks and its simplicity matches with our goals of being simple for our users.
Wi-Fi connections are stored in /storage/AMPS/usr/var/lib/iwd, and are named with network SSID's with the .psk file extension. Wi-Fi passwords are also stored in their files like this:
[Security] Passphrase=YOUR_PASSWORD
To launch the invel-wifi.sh utility, type this in the terminal:
invel-wifi.sh
In the utility, you can remove Wi-Fi connections by typing an SSID of a connection at the prompt. If you want to add a connection, you have to type your SSID and the password.
After you're done with your Wi-Fi configurations, you will need to reboot your system for the changes to apply.
You can change the default passwords of users using the invel-passwd.sh command.
invel-passwd.sh
The utility will ask for the username and the new password, after you enter them in. You will need to reboot the system for the changes to apply.
AMPS also acts like a package manager which can download scripts that can be executed by the interpreters that the OS supports.
To use this functionality, type this in the terminal:
amps.sh fetch PACKAGE_NAME
NOTE: Replace PACKAGE_NAME with your desired package name.
Any script that is available in the Invelinux core repository can be downloaded via the AMPS package manager.
To remove an application from your drive, type this in the terminal:
amps.sh purge PACKAGE_NAME
To get a list of packages in the repository, type this in the terminal:
amps.sh search SEARCH_TERM
AMPS can filter packages with search terms. For example if you type a package's name that is available in the repository, it'll appear in a list. If you type something similar or letters that are included in the name of that package, it'll also appear.
Linux(R) is the registered trademark of Linus Torvalds in the U.S. and other countries.