I'm trying to build a custom iso with an unsupported init system (nitro see https://aur.archlinux.org/packages/init-nitro).
I feel a bit lost following the wiki (https://wiki.artixlinux.org/Main/InstallationUsingBuildiso) as I seem to fail immediately,
At the step where it says to copy /etc/artools/artools-base.conf I find I don't have that file in /etc/artools/; do I need it?
Also where it says to copy /usr/share/artools/iso-profiles into ~/artools-workspace I think I should really be using the repository at
https://gitea.artixlinux.org/artix/iso-profiles/ as that contains a folder lqxt which /usr/share/artools/iso-profiles does not.
Finally I will obviously want to substitute the AUR package install instead of say runit. I have a local pkg server; will buildiso use that if I put it in the build host pacman.conf?
If that is ok what's the correct/easiest way to get the new init installed; should I use the advanced switch option?
EDIT: see a download here https://sourceforge.net/projects/artix-lxqt-nitro/files/ISOS/artix-lxqt-nitro-20250921-x86_64.iso/download
and below for how I get over the problems
Bottom line, buildiso only supports the officially supported init systems.
Unless you want to patch buildiso, you will only get a sort of half working iso with unsupported init.
I understand it may be hard to use an unsupported init, but you didn't answer any of my questions except perhaps the bits related to the init.
If I wanted to build lxqt-runit then do I need /etc/artools/artools-base.conf?
Should I substitute https://gitea.artixlinux.org/artix/iso-profiles/ for /usr/share/artools/iso-profiles?
If I can build an iso for lxqt-runit I will be much closer to my end goal as I can follow what buildiso does in a supported case.
FWIW I did manage to make base-runit and lxqt-runit isos. Both were able to boot, but the base one went into a service startup loop of some sort.
I did manage to boot the lxqt-runit iso into action in a vm. It looked very different from the artix download; I assume more customization has been done there.
I did have to fix links for local.d and pacman.conf in iso-profiles/lxqt/root-overlay/etc when using https://gitea.artixlinux.org/artix/iso-profiles.
I might proceed in a more mechanistic way using a downloaded iso.
OK I have managed to make artix-lxqt-nitro-20250921-x86_64.iso starting from the latest weekly
artix-lxqt-runit-20250915-x86_64.iso. My construction is approximately as follows
0) extract the livefs and rootfs from the weekly into live and root folders ($LIVE and $ROOT point there).
I'm not sure if I need to actually copy these out from the mounted squash mountpoints, but i thought it
might make things easier to do so,
1) perform the recommended buildiso -p lxqt -i runit -q to create ~/artools-workspace/
& cp -pr /etc/artools ~/.config/artools.
2) cd ~/artools-worspace && git clone https://gitea.artixlinux.org/artix/iso-profiles
the iso-profiles needs modifyingiso-profiles
ln -sf ../../../common/community/live-overlay/etc/pacman.conf iso-profiles/lxqt/root-overlay/etc/pacman.conf
cp -pr /etc/local.d iso-profiles/lxqt/root-overlay/etc/local.d
the last uses the local.d from a runit system.
3) start off the buildiso properly buildiso -p lxqt -i runit -x
this is the chroots only
4) Modify the buildiso chroots; remove most runit stuff and replace with nitro from the init-nitro AUR.
rootfs="/var/lib/artools/buildiso/lxqt/artix/rootfs"
livefs="/var/lib/artools/buildiso/lxqt/artix/livefs"
rsync -axHAX --delete "${LIVE}"/ "${livefs}"
rsync -axHAX --delete "${ROOT}"/ "${rootfs}"
pacman --sysroot="${rootfs}" --noconfirm -Rdd \
acpid-runit avahi-runit bluez-runit cronie-runit cryptsetup-runit cups-runit \
dbus-runit device-mapper-runit dhcpcd-runit elogind-runit haveged-runit lvm2-runit \
mdadm-runit metalog-runit networkmanager-runit nfs-utils-runit ntp-runit \
openssh-runit power-profiles-daemon-runit rpcbind-runit rsm rsync-runit \
runit runit-rc sddm-runit wpa_supplicant-runit
pacman --sysroot="${rootfs}" --noconfirm -U init-nitro-0.3.5-2-x86_64.pkg.tar.zst
rm -rf "${livefs}/etc/runit"
cp -pr "${rootfs}/etc/nitro" "${livefs}/etc/nitro"
rm -f "${livefs}/etc/nitro/levels/default/*"
rm -rf "${livefs}/etc/nitro/levels/sv/*"
cp -pr "${rootfs}/etc/nitro/sv/pacman-init" "${livefs}/etc/nitro/sv/pacman-init"
ln -sf "../../sv/pacman-init" "${livefs}/etc/nitro/levels/default/"
rm -f "${rootfs}/etc/nitro/services/alsabeep"
ln -sf "../../sv/sddm" "${rootfs}/etc/nitro/levels/default/"
5) Complete the buildiso construction with
buildiso -p lxqt -i nitro -sc
buildiso -p lxqt -i nitro -bc
buildiso -p lxqt -i nitro -zc
amazingly this all seemed to work and I have an iso. I have tested that it works in a virtmanager vm. The nitro init appeared
to be working in both the live system and after the install in the installed version.
I tried to upload it to github, but it's too large. I don't know where I can put such large files. Sorry Worm_Jim :(
I believed in you :)
I've seen a lot of distro builds on sourceforge.net. Right now I'm looking at a 2.3 GB build (https://sourceforge.net/projects/ctlos/files/v2.4.7/). You can also upload it to mega (https://mega.io/storage), where you get 20 GB after registering, but I don't know anything about the limitations!
I am trying scp into sourceforge; failed in the web upload I suppose that's reasonable as proxies/servers time out.
EDIT: It's been 20 years since I last used sf.net, but it has taken my upload better than github.
Worm_Jim here you are https://sourceforge.net/projects/artix-lxqt-nitro/files/ISOS/
The nsm tool (derivative of rsm) is included:
$ nsm -h
╔╗╔╔═╗╔╦╗ Nitro Service Manager for Artix Linux (0.1.0)
║║║╚═╗║║║ Source:
╝╚╝╚═╝╩ ╩ MIT License
[nsm] Manage and view nitro services
[nsm] Made specifically for Artix Linux
[nsm] Author: replabrobin
USAGE:
nsm [OPTIONS] [SUBCOMMAND] [<ARGS>]
nsm [-u] [-d <dir>] [-h] [-t] [SUBCOMMAND] [...]
OPTIONS:
-c <yes|no|auto> Enable/disable color output, defaults to auto
-d <dir> service directory, defaults to env SVDIR or /etc/nitro/services if unset
-h Print this message and exit
-l Show log processes, this is a shortcut for 'status -l'
-t<topts> Tree view, this is a shortcut for 'status -t with optional tree opts'
-u User mode, this is a shortcut for '-d ~/.config/nitro/'
-v Increase verbosity
-V Print the version number and exit
ENV:
SVDIR The service directory to use, passed to the 'sv' command, can
be overridden with '-d <dir>'
SUBCOMMANDS:
status [-lt] [filter] Default subcommand, show process status
'-t' enables tree mode (process tree)
'-l' enables log mode (show log processes)
'filter' is an optional string to match service names against
enable <svc> [...] install service(s) into the service directory and start
disable <svc> [...] stop and remove service(s) from the service directory
create-user <user> [...] create user(s) ie ln -s user@ /user@<user>
delete-user <user> [...] delete user(s) ie remove service links
destroy-user <user> [...] delete user(s) and remove ~<user>/.config/nitro
Any other subcommand gets passed directly to the 'nitroctl' command, see nitroctl(1) for the
full list of subcommands and information about what each does specifically.
Common subcommands:
start <service> Start the service
fast-start <service> Start the service without waiting
up <service> Start the service without waiting
stop <service> Stop the service
down <service> Stop using SIGTERM or first letter of ./down-signal
restart <service> Restart the service
reload <service> Reload the service (send SIGHUP)
runlevel <level> stop current and start a new runlevel
runlevels list runlevel dirs
logs <service> Outputs the service's logfilenames and their access & error logs from /var/log/<serice>/
alllogs <service> The same like logs <service>
errorlogs <service> Outputs the service's logfilenames and their errorlogs from /var/log/<serice>/
EXAMPLES:
nsm Show service status in /var/service
nsm status Same as above
nsm -t Show service status + pstree output
nsm status -t Same as above
nsm status tty Show service status for any service that matches tty*
nsm check uuidd Check the uuidd svc, wrapper for 'nitroctl check uuidd'
nsm restart sshd Restart sshd
nsm -u Show service status in ~/.config/nitro/
nsm -u restart ssh-agent Restart ssh-agent in ~/.config/nitro/ssh-agent
$ nsm
SERVICE STATE LIVE PID COMMAND TIME
✔ acpid UP-0 true 783 acpid 1 minute
✔ agetty@tty1 UP-0 true 789 agetty 1 minute
✔ agetty@tty2 UP-0 true 787 agetty 1 minute
✔ agetty@tty3 UP-0 true 798 agetty 1 minute
✔ agetty@tty4 UP-0 true 795 agetty 1 minute
✔ agetty@tty5 UP-0 true 801 agetty 1 minute
✔ agetty@tty6 UP-0 true 805 agetty 1 minute
✔ alsabeep UP-0 true 800 alsabeep-daemon 1 minute
✔ avahi-daemon UP-65280 true 844 avahi-daemon: run 1 minute
✔ bluetoothd UP-0 true 791 bluetoothd 1 minute
✔ cronie UP-0 true 792 crond 1 minute
✔ dbus UP-0 true 781 dbus-daemon 1 minute
✔ LOG UP-0 true 784 logger 1 minute
✔ metalog UP-0 true 796 metalog [MASTER] 1 minute
✔ NetworkManager UP-0 true 780 NetworkManager 1 minute
✔ sshd UP-0 true 785 sshd -D [listener 1 minute
✔ udevd UP-0 true 808 udevd 1 minute
Nice, edit the OP title to something more descriptive like "Artix nitro ISO" or something and include the SF download link in the body.
It works! Thank you replabrobin!
That's great Worm_Jim; hope you can say if it works well for you and any thoughts on how to improve etc etc.
1) The upstream is still moving; I made some changes eg I don't like using multiple folders in /etc and prefer to have everything under one folder. I haven't tested the use of the user@ controller greatly.
2) I removed the ability of nitro to create instances of parametrized instances out of thin air so all instances have t exist in the services folder.
3) The AUR includes the whole of runit-rc; I think I can just make that a dependency as It doesn't depend on runit.
4) The various service folders need splitting off.
At this point, I can say the system starts and runs. Services start, restart, stop, and so on, as per the command. I'm currently limited to a virtual machine, which isn't very convenient, as testing on real hardware reveals every error one by one. But to do this, I need to convert almost a dozen services to ensure everything is working correctly, which is difficult for me, and I'm pressed for time :(