Probleme mit apt in Raspbian, wenn der /var-Inhalt entfernt oder beschädigt wurde

Probleme mit apt in Raspbian, wenn der /var-Inhalt entfernt oder beschädigt wurde

Offenbar gab es auf einem Produktionsserver ein Problem und jemand hat den Inhalt des /varOrdners gelöscht.

Dies hat mehrere Fehler verursacht, die ich mit verschiedenen Diensten als Webserver behoben habe.

Das Problem, das ich habe apt, ist, dass ich Pakete nicht aktualisieren, entfernen oder installieren kann.

Ich möchte beispielsweise den Datenbankserver neu installieren mariadb-server, bekomme aber die Meldung, dass das Paket nicht im System installiert ist (das ist falsch, ich habe es selbst installiert):

root# apt remove mariadb-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package 'mariadb-server' is not installed, so not removed
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 chkconfig : Depends: perl but it is not going to be installed
             Recommends: insserv but it is not going to be installed
 libboost-chrono1.50.0 : Depends: libgcc1 (>= 1:4.4.0) but it is not going to be installed
                         Depends: libstdc++6 (>= 4.4.0) but it is not going to be installed
 libboost-system1.50.0 : Depends: libgcc1 (>= 1:4.4.0) but it is not going to be installed
                         Depends: libstdc++6 (>= 4.4.0) but it is not going to be installed
 libboost-thread1.50.0 : Depends: libgcc1 (>= 1:4.4.0) but it is not going to be installed
                         Depends: libstdc++6 (>= 4.6) but it is not going to be installed
 libc6 : Depends: libgcc1 but it is not going to be installed
 libprotobuf-lite7 : Depends: libgcc1 (>= 1:4.4.0) but it is not going to be installed
                     Depends: libstdc++6 (>= 4.4.0) but it is not going to be installed
                     Depends: zlib1g (>= 1:1.1.4) but it is not going to be installed
 oracle-java8-jdk : Depends: libasound2 (>= 1.0.16)
                    Depends: libgcc1 (>= 1:4.4.0) but it is not going to be installed
                    Depends: libx11-6 but it is not going to be installed
                    Depends: libxext6 but it is not going to be installed
                    Depends: libxi6 but it is not going to be installed
                    Depends: libxrender1 but it is not going to be installed
                    Depends: libxtst6 but it is not going to be installed
                    Recommends: netbase but it is not going to be installed
 redis-server : Depends: init-system-helpers (>= 1.18~) but it is not going to be installed
                Depends: libjemalloc1 (>= 2.1.1) but it is not going to be installed
                Depends: adduser but it is not going to be installed
 redis-tools : Depends: libjemalloc1 (>= 2.1.1) but it is not going to be installed
 watchdog : Depends: debconf (>= 0.5) but it is not going to be installed or
                     debconf-2.0
            Depends: init-system-helpers (>= 1.18~) but it is not going to be installed
            Depends: makedev (>= 2.3.1-24) but it is not going to be installed or
                     udev but it is not going to be installed
            Depends: lsb-base (>= 3.2-14) but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

wenn ich den Befehl starte, der mich auffordert, nicht erfüllte Abhängigkeiten aufzulösen:

root# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
  adduser apt apt-utils base-passwd ca-certificates coreutils debconf debconf-i18n debianutils dpkg e2fslibs e2fsprogs gnupg gnupg-curl gpgv ifupdown init-system-helpers initscripts insserv iproute2 isc-dhcp-client isc-dhcp-common
  krb5-locales libacl1 libalgorithm-c3-perl libapt-inst1.5 libapt-pkg4.12 libarchive-extract-perl libasound2 libasound2-data libatm1 libattr1 libaudit-common libaudit1 libblkid1 libbz2-1.0 libcgi-fast-perl libcgi-pm-perl
  libclass-c3-perl libclass-c3-xs-perl libcomerr2 libcpan-meta-perl libcurl3-gnutls libdata-optlist-perl libdata-section-perl libdb5.3 libdebconfclient0 libdns-export100 libfcgi-perl libffi6 libgcc1 libgcrypt20 libgdbm3 libgmp10
  libgnutls-deb0-28 libgpg-error0 libgpm2 libgssapi-krb5-2 libhogweed2 libidn11 libirs-export91 libisc-export95 libisccfg-export90 libjemalloc1 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libldap-2.4-2 liblocale-gettext-perl
  liblog-message-perl liblog-message-simple-perl liblzma5 libmodule-build-perl libmodule-pluggable-perl libmodule-signature-perl libmount1 libmro-compat-perl libncurses5 libnettle4 libp11-kit0 libpackage-constants-perl libpam-modules
  libpam-modules-bin libpam0g libparams-util-perl libpcre3 libpng12-0 libpod-latex-perl libpod-readme-perl libreadline6 libregexp-common-perl librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db libselinux1 libsemanage-common
  libsemanage1 libsepol1 libslang2 libsmartcols1 libsoftware-license-perl libss2 libssh2-1 libssl1.0.0 libstdc++6 libsub-exporter-perl libsub-install-perl libsystemd0 libtasn1-6 libterm-ui-perl libtext-charwidth-perl libtext-iconv-perl
  libtext-soundex-perl libtext-template-perl libtext-wrapi18n-perl libtinfo5 libusb-0.1-4 libustr-1.0-1 libuuid1 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxi6 libxrender1 libxtables10 libxtst6 lsb-base makedev netbase
  openssl passwd perl perl-base perl-modules psmisc raspbian-archive-keyring readline-common redis-server redis-tools rename sensible-utils startpar sysv-rc sysvinit-utils tar tzdata util-linux uuid-runtime x11-common zlib1g
Suggested packages:
  aptitude synaptic wajig dpkg-dev apt-doc python-apt debconf-doc debconf-utils whiptail dialog gnome-utils libterm-readline-gnu-perl libgtk2-perl libnet-ldap-perl libqtgui4-perl libqtcore4-perl gpart parted fuse2fs e2fsck-static
  gnupg-doc libpcsclite1 parcimonie xloadimage imagemagick eog ppp rdnssd net-tools bootchart2 iproute2-doc resolvconf avahi-autoipd libasound2-plugins alsa-utils rng-tools gnutls-bin gpm krb5-doc krb5-user libpam-doc
  libsasl2-modules-otp libsasl2-modules-ldap libsasl2-modules-sql libsasl2-modules-gssapi-mit libsasl2-modules-gssapi-heimdal perl-doc make libb-lint-perl libcpanplus-dist-build-perl libcpanplus-perl libfile-checktree-perl
  libobject-accessor-perl readline-doc bum bootlogd sash bzip2 ncompress xz-utils tar-scripts dosfstools kbd console-tools util-linux-locales
Recommended packages:
  libarchive-tar-perl
The following NEW packages will be installed:
  adduser apt apt-utils base-passwd ca-certificates coreutils debconf debconf-i18n debianutils dpkg e2fslibs e2fsprogs gnupg gnupg-curl gpgv ifupdown init-system-helpers initscripts insserv iproute2 isc-dhcp-client isc-dhcp-common
  krb5-locales libacl1 libalgorithm-c3-perl libapt-inst1.5 libapt-pkg4.12 libarchive-extract-perl libasound2 libasound2-data libatm1 libattr1 libaudit-common libaudit1 libblkid1 libbz2-1.0 libcgi-fast-perl libcgi-pm-perl
  libclass-c3-perl libclass-c3-xs-perl libcomerr2 libcpan-meta-perl libcurl3-gnutls libdata-optlist-perl libdata-section-perl libdb5.3 libdebconfclient0 libdns-export100 libfcgi-perl libffi6 libgcc1 libgcrypt20 libgdbm3 libgmp10
  libgnutls-deb0-28 libgpg-error0 libgpm2 libgssapi-krb5-2 libhogweed2 libidn11 libirs-export91 libisc-export95 libisccfg-export90 libjemalloc1 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 libldap-2.4-2 liblocale-gettext-perl
  liblog-message-perl liblog-message-simple-perl liblzma5 libmodule-build-perl libmodule-pluggable-perl libmodule-signature-perl libmount1 libmro-compat-perl libncurses5 libnettle4 libp11-kit0 libpackage-constants-perl libpam-modules
  libpam-modules-bin libpam0g libparams-util-perl libpcre3 libpng12-0 libpod-latex-perl libpod-readme-perl libreadline6 libregexp-common-perl librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db libselinux1 libsemanage-common
  libsemanage1 libsepol1 libslang2 libsmartcols1 libsoftware-license-perl libss2 libssh2-1 libssl1.0.0 libstdc++6 libsub-exporter-perl libsub-install-perl libsystemd0 libtasn1-6 libterm-ui-perl libtext-charwidth-perl libtext-iconv-perl
  libtext-soundex-perl libtext-template-perl libtext-wrapi18n-perl libtinfo5 libusb-0.1-4 libustr-1.0-1 libuuid1 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxi6 libxrender1 libxtables10 libxtst6 lsb-base makedev netbase
  openssl passwd perl perl-base perl-modules psmisc raspbian-archive-keyring readline-common rename sensible-utils startpar sysv-rc sysvinit-utils tar tzdata util-linux uuid-runtime x11-common zlib1g
The following packages will be upgraded:
  redis-server redis-tools
2 upgraded, 153 newly installed, 0 to remove and 3 not upgraded.
11 not fully installed or removed.
Need to get 37.1 MB of archives.
After this operation, 120 MB of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 http://archive.raspberrypi.org/debian/ jessie/main libasound2-data all 1.0.28-1+rpi3 [65.3 kB]
Get:2 http://archive.raspberrypi.org/debian/ jessie/main libasound2 armhf 1.0.28-1+rpi3 [320 kB]
Get:3 http://mirrordirector.raspbian.org/raspbian/ jessie/main libgcc1 armhf 1:4.9.2-10+deb8u2 [39.5 kB]
Get:4 http://archive.raspberrypi.org/debian/ jessie/main x11-common all 1:7.7+16 [251 kB]
[...]
Get:152 http://mirrordirector.raspbian.org/raspbian/ jessie/main libterm-ui-perl all 0.42-1 [19.1 kB]
Get:153 http://mirrordirector.raspbian.org/raspbian/ jessie/main libtext-soundex-perl armhf 3.4-1+b2 [13.3 kB]
Get:154 http://mirrordirector.raspbian.org/raspbian/ jessie/main psmisc armhf 22.21-2 [117 kB]
Get:155 http://mirrordirector.raspbian.org/raspbian/ jessie/main rename all 0.20-3 [12.4 kB]
Fetched 37.1 MB in 2min 29s (249 kB/s)
Reading changelogs... Done
E: Cannot get debconf version. Is debconf installed?
debconf: apt-extracttemplates failed: No such file or directory
Extracting templates from packages: 19%E: Cannot get debconf version. Is debconf installed?
debconf: apt-extracttemplates failed: No such file or directory
Extracting templates from packages: 38%E: Cannot get debconf version. Is debconf installed?
debconf: apt-extracttemplates failed: No such file or directory
Extracting templates from packages: 58%E: Cannot get debconf version. Is debconf installed?
debconf: apt-extracttemplates failed: No such file or directory
Extracting templates from packages: 77%E: Cannot get debconf version. Is debconf installed?
debconf: apt-extracttemplates failed: No such file or directory
Extracting templates from packages: 96%E: Cannot get debconf version. Is debconf installed?
debconf: apt-extracttemplates failed: No such file or directory
Extracting templates from packages: 100%
dpkg: regarding .../libgcc1_1%3a4.9.2-10+deb8u2_armhf.deb containing libgcc1:armhf, pre-dependency problem:
 libgcc1 pre-depends on multiarch-support
  multiarch-support is unpacked, but has never been configured.

dpkg: error processing archive /var/cache/apt/archives/libgcc1_1%3a4.9.2-10+deb8u2_armhf.deb (--unpack):
 pre-dependency problem - not installing libgcc1:armhf
Errors were encountered while processing:
 /var/cache/apt/archives/libgcc1_1%3a4.9.2-10+deb8u2_armhf.deb

E: Sub-process /usr/bin/dpkg returned an error code (1)

Hier ist der Beweis, dass MariaDB-Server installiert ist (der Fehler liegt an der Entfernung von /var, deshalb möchte ich es neu installieren):

root# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111 "Connection refused")

Wie Sie sehen, geben beide aptFehler mariadb-serveraus, weil im /varVerzeichnis Inhalt fehlt. Ich bin also in eine Schleife geraten, in der ich nicht weiß, wie ich weitermachen soll, um dieses Problem zu lösen.

Antwort1

Ich werde mich auf Folgendes beziehenArtikelUndDebian-Wiki-Beitragfür meine Antwort.

Erstellen Sie zunächst auf einem funktionierenden Raspbian-System eine debootstrapUmgebung. Befolgen Sie die Anweisungen aus demDebian WikiSie müssen lediglich Folgendes ausfüllen:

mkdir /debootstrap
debootstrap stable /debootstrap http://deb.debian.org/debian/

Da Sie nun Raspbian verwenden, müssen Sie möglicherweise den richtigen GPG-Schlüssel hinzufügen.wie hier ausgeführtund verweisen Sie auf den Raspbian Deb Mirror. So etwas wie das hier: http://archive.raspbian.org/raspbian. Ich werde Folgendes hinzufügeneine Verbindungzu einer plattformübergreifenden Build-Anleitung, falls Sie dies auf einem amd64-System statt einem Raspberry Pi tun.

WICHTIGER HINWEIS: Wenn Sie dazu aufgefordert werden, installieren Sie NICHT grubin den MBR! Dies könnte Ihre vorhandene Installation beschädigen!

Als nächstes holen Sie sich auf dem defekten System eine Liste aller installierten Programme. Anfangs habe ich vorgeschlagen, zu verwenden dpkg --get-selections, aber wie Benutzer AB anmerkt, wird dies fehlschlagen. dpkgverweist auf verschiedene /varVerzeichnisse, um zu funktionieren, und wenn Ihr /varfehlt, wird dies natürlich fehlschlagen. Benutzer AB weist darauf hin, dass Sie auf den Inhalt von /usr/share/doc/und die zugehörigen symbolischen Links verweisen können. Ich würde zunächst nachsehen, was verfügbar ist, und versuchen, installed.txtmit Ihren Ergebnissen ein zu erstellen.

cd /usr/share/doc && for i in *; do echo $i install >> /home/user/installed.txt; done

Vergleichen Sie die Ergebnisse installed.txtmit dem, was Sie erwarten. Ein weiterer Ort zum Überprüfen wäre /usr/share/man. Dieses Verzeichnis enthält Manpages, ist aber nur für Pakete korrekt, die Manpages installieren. Wenn Sie einen funktionierenden Raspberry Pi haben, mit dem Sie auch vergleichen können,und es ist genauso konfiguriert wie das defekte Raspberry Piinstalled.txt, Sie können mit der Ausgabe dieses Raspberry Pi erstellen dpkg --get-selections.

Kopieren Sie installed.txtvom fehlenden /varHost auf den zu reparierenden /varHost. scpoder rysncfunktioniert hier, aber an dieser Stelle müssen Sie bestätigen, dass Sie eine funktionierende sshKonfiguration zwischen dem defekten Host und dem Host haben, der die Reparatur durchführt. Ohne eine funktionierende sshKonfiguration zwischen diesen beiden Hosts können Sie nicht kopieren /var. Alle sshProbleme müssen gelöst werden, bevor Sie fortfahren.

Verschieben Sie diese Datei nun in die /deboostrapUmgebung und bereiten Sie die Installation der gesamten Software in diesem Chroot vor.

cp installed.txt /debootstrap/
chroot /bootstrap/
mount -t proc none /proc
dpkg --set-selections < installed.txt

Stellen Sie ggf. sicher, dass Ihre sources.listÜbereinstimmungen vorhanden sind. debootstrapStandardmäßig ist nur Folgendes enthalten main.

apt update
apt install dselect
dselect update
apt-get dselect-upgrade

Wenn Sie nicht in der Lage waren, eine guteinstalled.txt

Möglicherweise müssen Sie alle erforderlichen Pakete einfach manuell in Ihrem debootstrapChroot installieren. Hier ist eine gute Installationsdokumentation oder Infrastruktur als Code hilfreich. Führen Sie es apt install package1 package2 package3 ... packageNim Chroot aus, um Ihr /varPaket so zu erstellen, dass es dem Original so nahe wie möglich kommt /var. Anstatt es zu installieren, dselectsollten Sie diese Schritte befolgen:

chroot /bootstrap/
mount -t proc none /proc
apt update
apt install package1 package2 package3 ... packageN

An diesem Punkt debootstrapsollte Ihre Umgebung mit der Ihres Ziel-Hosts übereinstimmen. Hier müssen Sie rsynczum Kopieren verwenden /var. rsync -Asollte ausreichen. Wie in meinemVerknüpfungPermitRootLogin without-password, müssen Sie möglicherweise in Ihrem sshd_configfor zulassen, rsyncdamit es funktioniert.

Ich werde auch einfach direkt die letzten Schritte und Überlegungen zitieren, die Pete Donnell bei Alephnull.uk durchführen musste:

...Ich musste die mariadb-serverPakete auf dem defekten Server neu installieren apt-get install --reinstall mariadb-server mariadb-server-10.1 mariadb-server-core-10.1.

Der nächste Schritt besteht darin, Ihre Benutzerdaten wiederherzustellen. Dies ist spezifisch für die von Ihnen verwendete Struktur, daher kann ich Ihnen diesbezüglich keine Anweisungen geben. Überprüfen Sie anschließend die Berechtigungen der Dateien in /var/libund /var/loggegenüber einem funktionierenden Server (oder möglicherweise Ihrem Bootstrap), um sicherzustellen, dass sie korrekt sind. Es ist sehr wahrscheinlich, dass die Benutzer-IDs der Systemkonten zwischen dem Server und der Bootstrap-Umgebung unterschiedlich sind.

Jetzt sollten Sie die verschiedenen installierten Dienste mit überprüfen service --status-all. Nicht alle Dienste müssen unbedingt aktiviert sein, ich empfehle auch hier einen Vergleich mit einem funktionierenden Server. Versuchen Sie, alle Dienste neu zu starten, die derzeit nicht ausgeführt werden, aber ausgeführt werden sollten. Wenn alle Berechtigungen korrekt sind und die relevanten Benutzerdaten (falls vorhanden) wiederhergestellt wurden, sollte der Dienst erfolgreich gestartet werden. Wenn dies nicht der Fall ist, überprüfen Sie den Systemd-Status mit s ystemctl status <service-name>, die Systemd-Protokolle mit journalctl -xeund die Protokolldateien des Dienstes in /var/log. Diese sollten Ihnen genügend Informationen geben, um alle verbleibenden Probleme aufzuspüren.

Ich empfehle Ihnen dringend, Zeit damit zu verbringen, die debootstrapUmgebung und Ihren defekten Host zu vergleichen, wenn Sie das Glück haben, einen zweiten funktionierenden Host zu haben. Sie möchten bestätigen, dass alle Berechtigungen richtig sind und die Dienste ordnungsgemäß ausgeführt werden. Erst wenn Sie dies getan haben, würde ich den Host neu starten und bestätigen, dass alles wiederhergestellt wurde.

Bitte lesen Sie alle von mir bereitgestellten Links gründlich durch, bevor Sie Befehle ausprobieren. Wenn mein Beitrag Fehler, Missverständnisse oder Probleme enthält, lassen Sie es mich bitte wissen und ich werde daran arbeiten, sie zu korrigieren.

Viel Glück!

verwandte Informationen