I accidentally removed glibc

I accidentally removed glibc.

I was running Fatdog build process and I wanted to remove glibc from its chroot.

The correct command to do that was this:
ROOT=chroot removepkg glibc32 glibc

but I typed in the wrong way:
removepkg ROOT=chroot glibc32 glibc

This has the unintended effect of attempting to remove ROOT=chroot package
(which didn't exist), and then glibc32, and glibc. Of course the removal wasn't fully successful, but the dynamic linker /lib64/ld-linux-x64_64.so.2 was deleted and that's enough to stop almost anything.

In a normal distro this would probably require an immediate re-install.

In Puppy-like distro (including Fatdog) all you need to do is to boot pristine, disregarding any savefile/savefolder (pfix=ram for Puppies and savefile=none for Fatdog); and then clean up the mess you've created by the accidental deletion. This is usually done by deleting the whiteouts, so glibc can "show up" again in the layered filesystem.

But I was in the middle of something and I really didn't want to reboot and abandoned what I was doing. What to do? I still had a few terminals open, is there anything I could do to salvage the situation?

Fortunately, Fatdog has a failover mechanism for situation like this.

Fatdog has a static busybox located in /aufs/pup_init/bin/busybox. This busybox is linked with complete set of applets, with its shell (ash) compiled to prefer internal busybox applets instead of external commands.

By running its shell
/aufs/pup_init/bin/busybox ash

I am back in a working shell, and I can do "ls" and other things as needed because the busybox is fully static and doesn't need glibc.

Inside there, I then run Fatdog's whiteout clean up script
sh fatdog-clean-whiteout.sh

which run nicely because busybox has enough applets to support it. This removes the whiteout, in effect, undo-ing the deletion.

But trying to do "ls" on another terminal still indicate that glibc isn't installed yet. This is because aufs, the layered filesystem, isn't aware that we have "updated" its layer behind its back. All we need to do is to tell it to re-evaluate its layers.

This can be done by running (from the terminal that runs static busybox shell) this command
mount -i -t aufs -o remount,udba=reval aufs /

Once this is done, the system is back to live, and the project is saved.

Posted on 4 Dec 2017, 22:08 - Categories: Fatdog64 Linux
Edit - Delete

No comments posted yet.

Add Comment

Show Smilies
Security Code 5824108
Mascot of Fatdog64
Password (to protect your identity)