Сломался /lib64, можно? (Убунт /mint12)
В ошибочной попытке перекомпилировать ld
с символами отладки я получил /lib64, который не был связан с /lib (64-битные библиотеки Debian находятся в /lib/x84_64-linux-gnu). Я попытался переустановить libc6, используя apt
, который допустил ошибку с жалобой на вышесказанное.
Я (по ошибке) подумал, что я мог бы просто mv /lib64 /tmp && ln -s /lib /lib64
; первая команда сработала, оставив сломанную систему (/bin/ld not found
так далее.).
Есть ли способ исправить это на месте? (т.е. без запуска аварийного диска)
Если бы я мог опубликовать это анонимно, я бы... [вздох]
2 ответа
Не уверен, что это помогло бы с его частью, но если вы когда-нибудь обнаружите, что переместили компоновщик среды выполнения, чтобы такие вещи, как mv, cp, ln, rm больше не работали, вы все равно можете их запустить (и, надеюсь, спасти себя) явно указав компоновщик времени выполнения. Например
mv /lib64 /tmp ln -s /lib /lib64 # терпит неудачу, нет компоновщика во время выполнения /tmp/lib64/ld-2.13.so /bin/ln -s /lib /lib64 # должен быть успешным
Если кто-то еще имеет эту проблему; как только я использовал диск восстановления, чтобы вернуть файлы туда, где они были, следующий скрипт позволил мне переустановить libc:
#!/bin/bash
# Fix symlinks in a b0rked /lib64 (Debian).
# Libs in /lib64 should be symlinked to /lib/x86_64-linux-gnu;
# if a symlink is found in /lib64, try to redirect it to a
# file of the same name in /lib/x86_64-linux-gnu.
# Then remove the old symlink destination.
#
# The Problem:
# me@box # ls -l /lib64
# -rwxr-xr-x 1 root root 156683 2011-12-29 19:11 ld-2.13.so
# lrwxrwxrwx 1 root root 10 2011-12-29 19:11 ld-linux-x86-64.so.2 -> ld-2.13.so
#
# The Solution:
# lrwxrwxrwx 1 root root 10 2011-12-29 19:11 ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.13.so
#
set -e
libs=(/lib64/*)
bak=$HOME
for l in ${libs[@]}; do
src=$(ls -l $l |awk '{print $10}');
if [[ ! -z "$src" ]]; then
if [[ ! -f "/lib64/$src" ]] || [[ ! -f "/lib/x86_64-linux-gnu/$src" ]]; then
echo "error: $l src or dest not found:"
echo `ls -l "/lib64/$src"` > /dev/null
echo `ls -l "/lib/x86_64-linux-gnu/$src"` > /dev/null
continue
fi
ln -si "/lib/x86_64-linux-gnu/$src" "$l";
mv "/lib64/$src" $bak/;
fi
done