Obecně bych se přikláněl k reinstalaci (ze záloh, které byste bezpodmínečně měli mít). Ale cítím se hackeře, takže je tu jiný způsob (za předpokladu, že váš systém je připojen pod /target
):
-
Získejte seznam všech nainstalovaných balíčků, které mají soubory v
/bin
:grep ^/bin/ /target/var/lib/dpkg/info/*.list | sed 's%^.*/\([^/\.]*\).list%\1%' >/tmp/pkglist
(Na mém systému Debian Squeeze je to celkem 34 balíčků, z nichž téměř všechny jsou základní)
-
Stáhněte si každý z těchto balíčků (nemohl jsem se obtěžovat napsat tento bit, takže stačí kliknout na packages.ubuntu.com a stáhnout je někam pod
/target
). Pokud budete mít štěstí, některé balíčky se mohou stále pohybovat v/target/var/cache/apt/archives
. -
Pro každý balíček spusťte
/target/usr/bin/dpkg -x <package> /target
. Jsem si docela jistýdpkg
je v dnešní době vše soběstačné a nemělo by v/bin
na nic volat sám.
Jakmile postavíte systém zpět na nohy, měli byste se ujistit a spustit apt-get --reinstall install <all the packages from step 1>
, protože (protože spouštíte předběžnou verzi, o které Sysadmin Cat říká, že v produkčních systémech je ne-ne), verze balíčků, které jste právě extrahovali, se pravděpodobně budou lišit od těch, které byly v systému dříve, a vy Chci se ujistit, že systém přesně ví, co je co.
I když vaše strategie může fungovat (existuje dobrá šance, spíše pokud po zkopírování zpět adresáře bin provedete apt-get reinstalaci všech balíčků ve vašem systému), může to způsobit problémy v budoucnu, protože můžete získat nestabilní server.
Pokud by se mi to stalo, přeinstaloval bych a obnovil bych z denní zálohy. Máte denní zálohu – plán obnovy po havárii – ne?
V případě, že jste neměli plán obnovy po havárii, navrhoval bych zálohovat všechny konfigurační soubory a data, která chcete zachovat, a pokračovat v přeinstalaci. Budete tak mít jistotu, že opět skončíte se stabilním serverem.
Zkusil bych vytvořit virtuální počítač a poté zkopírovat obsah /bin
k vašemu poškozenému stroji. To by vás mělo nastartovat. Poté spusťte
dpkg --get-selections | awk '{print $1}' | xargs -l1 aptitude reinstall
který by měl přeinstalovat všechny balíčky, které byly ve vašem systému.