Видимо, на рабочем сервере возникла какая-то проблема, и кто-то удалил содержимое папки /var
.
Это вызвало несколько ошибок, которые я устранял с помощью различных сервисов, таких как веб-сервер.
Проблема, с которой я столкнулся apt
, заключается в том, что я не могу обновлять, удалять или устанавливать пакеты.
например, я хочу переустановить сервер базы данных mariadb-server
, но он сообщает мне, что пакет не установлен в системе (это ложь, я устанавливал его лично):
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).
если я запускаю команду, которая говорит мне разрешить неудовлетворенные зависимости:
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)
Вот доказательство того, что mariadb-server установлен (ошибка возникла из-за удаления /var, поэтому я хочу переустановить его):
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")
Как вы видите, оба apt
и mariadb-server
выдают мне ошибки с отсутствующим контентом в /var
каталоге. Так что я вошел в цикл, в котором не знаю, как продолжить решение этой проблемы.
решение1
Я буду ссылаться на следующеестатьяиСообщение в вики-сайте Debianза мой ответ.
Сначала на рабочей системе Raspbian создайте debootstrap
среду. Следуя инструкциям изВики DebianВам нужно будет выполнить только следующее:
mkdir /debootstrap
debootstrap stable /debootstrap http://deb.debian.org/debian/
Теперь, если вы используете Raspbian, вам может потребоваться добавить правильный gpg-ключ,как указано здесь, и ссылаться на Raspbian Deb Mirror. Что-то вроде этого: http://archive.raspbian.org/raspbian
. Я собираюсь включитьссылкак руководству по кроссплатформенной сборке на случай, если вы делаете это на системе amd64 вместо Raspberry Pi.
ВАЖНОЕ ПРИМЕЧАНИЕ: если вам будет предложено, НЕ устанавливайте
grub
в MBR! Это может нарушить вашу текущую установку!
Далее, на сломанной системе получите список всех установленных программ. Изначально я предлагал использовать dpkg --get-selections
, однако, как указывает пользователь AB, это не сработает. dpkg
ссылается на различные /var
каталоги для работы, и если вы /var
этого не сделаете, это, конечно, не сработает. Пользователь AB указывает, что вы можете ссылаться на содержимое /usr/share/doc/
и связанные с ним символические ссылки. Я бы начал с того, что посмотрел, что доступно, и попытался бы построить installed.txt
с вашими результатами.
cd /usr/share/doc && for i in *; do echo $i install >> /home/user/installed.txt; done
Сравните результаты installed.txt
с тем, что вы ожидаете. Другое место для проверки — /usr/share/man
. В этом каталоге есть man-страницы, но они будут точны только для пакетов, которые устанавливают man-страницы. Если у вас есть заведомо рабочий Raspberry Pi, с которым можно также сравнить,и он настроен так же, как сломанный Raspberry Pi, вы можете построить installed.txt
с помощью выходных данных Raspberry Pi dpkg --get-selections
.
Копировать installed.txt
с отсутствующего /var
хоста на чинящий /var
хост. scp
или rysnc
будет работать здесь, но на этом этапе вам нужно подтвердить, что у вас есть рабочая ssh
конфигурация между сломанным хостом и хостом, выполняющим чинку. Без рабочей ssh
конфигурации между этими двумя хостами вы не сможете скопировать /var
. Любые ssh
проблемы должны быть решены, прежде чем двигаться дальше.
Теперь переместите этот файл в /deboostrap
среду и подготовьтесь к установке всего того же программного обеспечения внутри этого chroot.
cp installed.txt /debootstrap/
chroot /bootstrap/
mount -t proc none /proc
dpkg --set-selections < installed.txt
При необходимости убедитесь, что ваши sources.list
совпадения. debootstrap
по умолчанию включают только main
.
apt update
apt install dselect
dselect update
apt-get dselect-upgrade
Если вы не смогли построить хорошийinstalled.txt
Вам может потребоваться просто вручную установить все необходимые пакеты в вашем debootstrap
chroot. Вот где пригодится хорошая документация по настройке или инфраструктура как код. Запустите apt install package1 package2 package3 ... packageN
в chroot, чтобы собрать ваш , /var
чтобы он максимально соответствовал оригиналу /var
. Вместо установки dselect
вам следует выполнить следующие шаги:
chroot /bootstrap/
mount -t proc none /proc
apt update
apt install package1 package2 package3 ... packageN
На этом этапе ваша debootstrap
среда должна соответствовать вашей целевой, сломанной хостовой среде. Вот где вам нужно использовать rsync
для копирования /var
.rsync -A
должно быть достаточно. Как указано в моемсвязь, вам может потребоваться разрешить PermitRootLogin without-password
в вашем sshd_config
for rsync
работать.
Я также просто процитирую последние шаги и соображения, которые пришлось выполнить Питу Доннеллу из Alephnull.uk:
...Мне пришлось переустановить
mariadb-server
пакеты на сломанном сервере с помощьюapt-get install --reinstall mariadb-server mariadb-server-10.1 mariadb-server-core-10.1
.Следующий шаг — восстановить данные пользователя. Это будет зависеть от структуры, которую вы используете, поэтому я не могу помочь с инструкциями для этого. После того, как вы это сделаете, проверьте разрешения файлов на
/var/lib
рабочем/var/log
сервере (или, возможно, в вашем bootstrap), чтобы убедиться, что они верны. Вполне вероятно, что идентификаторы пользователей системных учетных записей будут отличаться между сервером и средой bootstrap.Теперь вам следует проверить различные установленные службы, используя
service --status-all
. Не все службы обязательно должны быть включены, снова я рекомендую сравнить с работающим сервером. Попробуйте перезапустить все службы, которые в данный момент не запущены, но должны быть запущены. Если все разрешения верны и соответствующие пользовательские данные (если таковые имеются) были восстановлены, то служба должна успешно запуститься. Если этого не произошло, проверьте статус systemd с помощью systemctl status <service-name>
, журналы systemd с помощьюjournalctl -xe
и файлы журналов службы в/var/log
. Они должны дать вам достаточно информации, чтобы отследить любые оставшиеся проблемы.
Я настоятельно рекомендую вам потратить время на сравнение debootstrap
среды и вашего сломанного хоста, если вам повезло иметь второй рабочий хост. Вы хотите убедиться, что все разрешения верны и службы работают правильно. Только после того, как вы это сделаете, я бы перезагрузил хост и подтвердил, что все вернулось.
Пожалуйста, внимательно прочитайте каждую ссылку, которую я предоставил, прежде чем пробовать какие-либо команды. Если в моем посте есть какие-либо ошибки, заблуждения или проблемы, сообщите мне, и я постараюсь их исправить.
Удачи!