Broke / lib64, salvável? (ubuntu / mint12)

2

Em uma tentativa equivocada de recompilar ld com símbolos de depuração, acabei com um / lib64 que não foi vinculado a / lib (as bibliotecas Debian de 64 bits estão em / lib / x84_64-linux-gnu). Eu tentei reinstalar a libc6 usando apt , que errou ao reclamar sobre o que foi dito acima.

Eu (erroneamente) percebi que eu poderia apenas mv /lib64 /tmp && ln -s /lib /lib64 ; o primeiro comando funcionou, deixando um sistema quebrado ( /bin/ld not found etc.).

Existe alguma maneira de corrigir isso no local? (isto é, sem executar um disco de recuperação)

Se eu pudesse postar isso anonimamente, eu teria ... [suspiro]

    
por mikewaters 29.01.2012 / 22:11

2 respostas

2

Não tenho certeza se isso ajudaria com parte disso, mas se você alguma vez achar que moveu o vinculador de tempo de execução para que coisas como mv, cp, ln, rm não funcionem mais, você ainda pode executá-los (e esperançosamente se resgatar) especificando o vinculador de tempo de execução explicitamente. Por exemplo.

    mv /lib64 /tmp
    ln -s /lib /lib64   # fails, no runtime linker
    /tmp/lib64/ld-2.13.so /bin/ln -s /lib /lib64    # should succeed
    
por 14.03.2013 / 02:39
0

Se alguém mais tiver esse problema; uma vez que eu usei um disco de recuperação para colocar os arquivos de volta onde eles pertenciam, o seguinte script me permitiu reinstalar a 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
    
por 31.01.2012 / 01:07

Tags