Ok, Debian Lenny op amd64:
# ls -ld /lib /lib64
drwxr-xr-x 10 root root 4096 Sep 14 17:22 /lib/
lrwxrwxrwx 1 root root 3 Sep 14 17:37 /lib64 -> lib/
# rm /lib64
# ls
zsh: command not found: ls
Nee. De LD_* environment variabelen worden geinterpreteerd door ld-linux, de Linux dynamic linker. Die staat (in dit geval) in /lib64/ld-linux-x86-64.so.2. Als /lib64 weg is kan de dynamic linker niet geladen worden en kan er dus ook niks met LD_* gedaan worden:
# LD_LIBRARY_PATH=/lib64 ls
zsh: command not found: ls
Maar dat bracht me wel op een idee; je kunt de dynamic linker handmatig aanroepen!
# /lib/ld-linux-x86-64.so.2 /bin/mv /lib /lib64
Hierna werkt de dynamic loader weer, maar hij kan sommige libs in /lib (uiteraard) niet vinden:
# ls
ls: error while loading shared libraries: librt.so.1: cannot open shared object file: No such file or directory
Daarvoor is alsnog het LD_LIBRARY_PATH truukje nodig:
# LD_LIBRARY_PATH=/lib64 ln -s /lib64 /lib
En daarna werkt alles weer:
# ls -ld /lib /lib64
lrwxrwxrwx 1 root root 6 Sep 14 17:51 /lib -> /lib64/
drwxr-xr-x 10 root root 4096 Sep 14 17:22 /lib64/
De benodigde commando's bij elkaar:
# rm /lib64
# /lib/ld-linux-x86-64.so.2 /bin/mv /lib /lib64
# LD_LIBRARY_PATH=/lib64 ln -s /lib64 /lib
Edit: Hardlinks maken is nog mooier. Jammer dat "ln" geen -r optie heeft.
Hmm, waarom is dat mooier? Ik vind symlinks vaak juist veel netter, omdat die een stuk overzichtelijker zijn.
Nee hoor, het is gewoon een designkeuze om dat niet toe te staan.
ik ben van mening dat mount --bind een mooi alternatief is voor symlinks naar directories voor dit soort "belangrijke" dirs.
Waarom? Wat voegt een bind mount toe boven een symlink?
Bind mounts moeten ook nog eens aangemaakt worden tijdens het booten, dat is lekker fragiel.