It starts fine up to udev-trigger but after that it quickly just stops every service. And the problem is that the first thing i can see being stoppd is elogind but I'm pretty sure it doesn't even mount the root filesystem since the logs are empty and I'm unable to scroll the console up with shift+pgup. So any idea on how to debug this?
dinit: Service early-keyboard.target command failed with exit code 1
[FAILED] early-keyboard.target
[FAILED] early-console.target
[FAILED] pre-local.target
[FAILED] ufw
[FAILED] local.target
dinit: Interrupting start of service fsck-root with pid 849 (with SIGINT).
[FAILED] elogind
[FAILED] logind
[FAILED] rclocal
[FAILED] network-pre
[FAILED] network
[FAILED] pre-network.target
[FAILED] NetworkManager
[FAILED] network.target
[FAILED] tor
[FAILED] sshd
[FAILED] system
[FAILED] login.target
[FAILED] boot
[STOPPD] many more...
dinit: Service random-seed stop command failed with exit code 20
...
dinit: Service hwclock stop command failed with exit code 1
...
All services have stopped with no shutdown issued; boot failure?
Choose: (r)ebooto, r(e)covery, re(s)tart boot sequence, (p)ower off?
This is what greeted me this morning :(
What can I do?
I had the same problem. You can rollback dinit-rc back to 0.4.2-1 if you have it in your pacman cache:
pacman -U file:///var/cache/pacman/pkg/dinit-rc-0.4.2-1-x86_64.pkg.tar.zst
And the second option which i had to do is get it from source (you can see individual commits with 'git log' to use with 'git checkout'):
git clone https://gitea.artixlinux.org/packages/dinit-rc
cd dinit-rc
git checkout 1157c883730f29323d2e770387b91649eb961f45
makepkg -si
I dit it with an Artix boot usb but i read that it's possible to do it from the dinit recovery console too by mounting root with rw rights with something like this (no clue how safe this is):
mount -o rw,remount /
@toepie Oh I'm screwed. I cleaned my pacman cache just yesterday...
Thank you for response! I did enter dinit recovery with rw rights but I can't clone git repo because I have no network (I'm using NetworkManger) so no internet for me.
fatal: unable to access 'https://gitea...': Could not resolve host: gitea.artixlinux.org
@omnigenous If you are using an ethernet cable maybe it's possible to get internet with dhclient?
@toepie I do use ethernet cable but I don't have dhclient installed :(
@omnigenous Shouldn't it be possible to just run NetworkManager in the terminal to start NetworkManager?
NetworkManager
# no output
NetworkManager -d # with debug flag
<info> blah blah
...
<error> [timestamp] bus-manager: cannot connect to D-Bus: Could not connect: No such file or directory
ls /var/run/ | grep dbus
ls /run/ | grep dbus # both has no output
Not sure how to solve this dbus issue always struggled with dbus stuff
@omnigenous I guess it's not possible since it excepts dbus to be on. Maybe by manually setting the ip with 'ip addr add <ip-here> dev eth0 (might be something else check with 'ip a')' or something like that?
How about running dhcpcd -B -M, it's more likely you have that?
@Hitman I don't have "dhcpcd" installed :(
@toepie Now I have "inet <IP>/32 scope global eth0\nvalid_lft forever preferred_lft forever" but still no internet access.
Thankfully I still can use "man", brb "man ip | less"
It's not very standard to connect to a dhcp server without a dhcp client, so rather set a static ip in the router.
(also offtopic but you can always artix-chroot from installer and fix/downgrade/upgrade from there)
@omnigenous I tried on my own machine and with this i almost got it working but DNS isn't working:
sudo ip addr add 192.168.1.104/24 broadcast 192.168.1.255 dev eth0
sudo ip link set eth0 up
echo '192.168.1.1' > /etc/resolv.conf
You seemed to have put the submask to /32 which isn't right.
And yes if possible just do it with the artix-chroot from an Artix usb bootable stick.
Okay, I fixed it.
Had to look for my usb stick.
cryptsetup open /dev/drive cryptlvm # decrypt drive
# btrfs stuff, mount needed volumes
export opts="defaults,noatime,compress=zstd,space_cache=v2"
mount -o ${opts},subvol=@ /dev/mapper/cryptlvm /mnt
mount -o ${opts},subvol=@home /dev/mapper/cryptlvm /mnt/home
mount -o ${opts},subvol=@var_log /dev/mapper/cryptlvm /mnt/var/log
artix-chroot /mnt bash
cat /var/log/pacman.log
# find dinit-rc, looked for snapper id before upgrading
# couldn't use "snapper list" because of yet another dbus error
snapper-rollback ID
exit
reboot
@toepie I tried building dinit-rc after cloning it in chroot but it complained that I'm running makepkg as root so I didn't want to make thing worse :D
Also had to "sudo rm /var/lib/pacman/db.lck"
I'm back to dinit-rc 0.4.2-1, I guess I will wait for next update for now.
I honestly don't know what triggered this.
What if you download dinit-rc-0.4.4 manually, extract it in
/tmp/dinit-rc, and run
sudo /bin/sh -x /tmp/dinit-rc/usr/lib/dinit/vconsole keyboard?
EDIT: Also, I'm pushing dinit-rc-0.4.5 (https://gitea.artixlinux.org/packages/dinit-rc/commit/a536bc2df9fce80827b83f60e3fc1499dcb25303) (here's the commit (https://gitea.artixlinux.org/artix/dinit-rc/commit/f9f248b61f0bd6f221d73a7114427e11fee32b07)) so that even if
early-keyboard.target and
early-console.target fails, the boot process isn't interrupted. Wait a bit since it's on the queue right now, otherwise just download the PKGBUILD, makepkg and test it. That way we can narrow down the cause.
Further edit:
@toepie and
@omnigenous, I'm merging your threads since it deals with the same problem.
Here's the output of that command with 0.4.4:
/bin/sh -x /tmp/vconsole keyboard
+ '[' -r /etc/vconsole.conf ']'
+ . /etc/vconsole.conf
+ '[' -r /proc/cmdline ']'
++ cat /proc/cmdline
+ for x in $(cat /proc/cmdline)
+ case "$x" in
+ for x in $(cat /proc/cmdline)
+ case "$x" in
+ for x in $(cat /proc/cmdline)
+ case "$x" in
+ for x in $(cat /proc/cmdline)
+ case "$x" in
+ for x in $(cat /proc/cmdline)
+ case "$x" in
+ case "$1" in
+ '[' -n '' ']'
And here's with 0.4.2:
/bin/sh -x /tmp/vconsole keyboard
+ '[' -r /etc/vconsole.conf ']'
+ . /etc/vconsole.conf
+ '[' -r /proc/cmdline ']'
++ cat /proc/cmdline
+ for x in $(cat /proc/cmdline)
+ case "$x" in
+ for x in $(cat /proc/cmdline)
+ case "$x" in
+ for x in $(cat /proc/cmdline)
+ case "$x" in
+ for x in $(cat /proc/cmdline)
+ case "$x" in
+ for x in $(cat /proc/cmdline)
+ case "$x" in
+ case "$2" in
And here's the diff between 0.4.2 and 0.4.4
diff -u dinit-rc-0.4.2/scripts/vconsole dinit-rc-0.4.4/scripts/vconsole
--- dinit-rc-0.4.2/scripts/vconsole 2024-06-10 17:11:45.000000000 +0300
+++ dinit-rc-0.4.4/scripts/vconsole 2024-06-11 16:49:11.000000000 +0300
@@ -5,15 +5,15 @@
if [ -r /proc/cmdline ]; then
for x in $(cat /proc/cmdline); do
case "$x" in
- vconsole.keymap=*) KEYMAP="${KEYMAP}" ;;
- vconsole.font=*) FONT="${FONT}" ;;
- vconsole.font_map=*) FONT_MAP="${FONT_MAP}" ;;
- vconsole.font_unimap=*) FONT_UNIMAP="${FONT_UNIMAP}" ;;
+ vconsole.keymap=*) KEYMAP="${x#*=}" ;;
+ vconsole.font=*) FONT="${x#*=}" ;;
+ vconsole.font_map=*) FONT_MAP="${x#*=}" ;;
+ vconsole.font_unimap=*) FONT_UNIMAP="${x#*=}" ;;
esac
done
fi
-case "$2" in
+case "$1" in
"keyboard") [ -n "$KEYMAP" ] && loadkeys -q -u "${KEYMAP}" ;;
"console")
TTYS=${TTYS:-6}
It seems that it just skipped the case statement in 0.4.2 because
$2 is always empty but in 0.4.3 it was changed to
$1 like it should be but there's something going wrong in the case statement?
From your 0.4.4 quote, since your
/etc/vconsole.conf KEYMAPS= is empty, it shouldn't even execute anything since in my case it'll look like this:
+ case "$1" in
+ '[' -n us ']'
+ loadkeys -q -u us
What about
dinit-rc-0.4.5? I've changed the type of deps of both of the keyboard and console services to soft depend so even if it fails it keeps booting.
EDIT: Actually, disregard everything above. I'm an idiot. Will push a definite fix.Further edit: Pushed a definite fix (https://gitea.artixlinux.org/artix/dinit-rc/commit/112a57e49716a608cba580d076d58ce3bb8ed227), it's really simple fix but can't believe I missed use cases.
dinit-rc-0.4.6 should fix it all. Apologies for the inconvenience.
@konimex Well that was quick! Anyway kinda hilarious that a bug in 0.4.2 was keeping that buggy line from being executed XD