Aparentemente ocorreu algum problema em um servidor de produção e alguém excluiu o conteúdo da /var
pasta.
Isso tem causado vários erros que venho resolvendo com diversos serviços como servidor web.
O problema que estou tendo apt
é um problema que não me permite atualizar, remover ou instalar pacotes.
por exemplo quero reinstalar o servidor de banco de dados mariadb-server
, mas ele me diz que o pacote não está instalado no sistema (isso é falso, instalei pessoalmente):
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).
se eu iniciar o comando que me diz para resolver dependências não atendidas:
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)
Aqui está a prova de que o mariadb-server está instalado (o erro é devido à remoção de /var, então quero reinstalá-lo):
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")
Como você pode ver, ambos apt
geram mariadb-server
erros com conteúdo ausente no /var
diretório. Então entrei em um loop onde não sei como proceder para resolver esse problema.
Responder1
Estarei referenciando o seguinteartigoePostagem Wiki do Debianpela minha resposta.
Primeiro, em um sistema Raspbian funcional, crie um debootstrap
ambiente. Seguindo as instruções doWiki do Debianvocê só precisaria completar o seguinte:
mkdir /debootstrap
debootstrap stable /debootstrap http://deb.debian.org/debian/
Agora, você está usando o Raspbian, então pode ser necessário adicionar a chave gpg correta,como apontado aquie faça referência ao Raspbian Deb Mirror. Algo assim: http://archive.raspbian.org/raspbian
. vou incluirum linkpara um guia de construção multiplataforma, caso você esteja fazendo isso em um sistema AMD64 em vez de um Raspberry Pi.
NOTA IMPORTANTE: se for solicitado, NÃO instale
grub
no MBR! Isso pode interromper sua instalação existente!
A seguir, no sistema quebrado, obtenha uma lista de todos os programas instalados. Inicialmente sugeri usar dpkg --get-selections
, porém, como o usuário AB aponta, isso falhará. dpkg
faz referência a vários /var
diretórios para funcionar e, com a sua /var
falta, é claro que isso falhará. O usuário AB ressalta que você pode fazer referência ao conteúdo /usr/share/doc/
e aos links simbólicos relacionados. Eu começaria vendo o que está disponível e tentaria construir um installed.txt
com seus resultados.
cd /usr/share/doc && for i in *; do echo $i install >> /home/user/installed.txt; done
Compare os resultados disso installed.txt
com o que você espera. Outro lugar para verificar seria /usr/share/man
. Este diretório possui páginas de manual, mas só será preciso para pacotes que instalam páginas de manual. Se você tiver um Raspberry Pi em funcionamento conhecido para comparar,e está configurado da mesma forma que o Raspberry Pi quebrado, você pode construir installed.txt
com a saída desse Raspberry Pi dpkg --get-selections
.
Copie installed.txt
do /var
host ausente para o /var
host de correção. scp
ou rysnc
funcionará aqui, mas neste ponto você precisa confirmar se possui uma ssh
configuração funcional entre o host quebrado e o host que está fazendo a correção. Sem uma ssh
configuração funcional entre esses dois hosts, você não poderá copiar arquivos /var
. Quaisquer ssh
problemas precisam ser resolvidos antes de prosseguir.
Agora, mova este arquivo para o /deboostrap
ambiente e prepare-se para instalar todo o mesmo software dentro deste chroot.
cp installed.txt /debootstrap/
chroot /bootstrap/
mount -t proc none /proc
dpkg --set-selections < installed.txt
Se necessário, certifique-se de sources.list
que corresponda. debootstrap
por padrão inclui apenas main
.
apt update
apt install dselect
dselect update
apt-get dselect-upgrade
Se você não conseguiu construir um bominstalled.txt
Pode ser necessário simplesmente instalar manualmente todos os pacotes necessários em seu debootstrap
chroot. É aqui que uma boa documentação de configuração ou infraestrutura como código se torna útil. Execute apt install package1 package2 package3 ... packageN
no chroot para construir o seu /var
arquivo o mais próximo possível do original /var
. Em vez de instalar dselect
você deve seguir estes passos:
chroot /bootstrap/
mount -t proc none /proc
apt update
apt install package1 package2 package3 ... packageN
Neste ponto, seu debootstrap
ambiente deve corresponder ao do host de destino quebrado. É aqui que você precisa usar rsync
para copiar /var
. rsync -A
deve ser suficiente. Como apontado em meulink, pode ser necessário permitir PermitRootLogin without-password
que seu sshd_config
for rsync
funcione.
Também citarei diretamente as últimas etapas e considerações que Pete Donnell, do Alephnull.uk, teve que executar:
...Tive que reinstalar os
mariadb-server
pacotes no servidor quebrado usandoapt-get install --reinstall mariadb-server mariadb-server-10.1 mariadb-server-core-10.1
.A próxima etapa é restaurar seus dados de usuário. Isso será específico para a estrutura que você usa, por isso não posso ajudar com instruções para isso. Depois de fazer isso, verifique as permissões dos arquivos em
/var/lib
e/var/log
em um servidor em funcionamento (ou talvez no seu bootstrap) para verificar se estão corretas. É bastante provável que os IDs de usuário das contas do sistema sejam diferentes entre o servidor e o ambiente de inicialização.Agora você deve verificar os diversos serviços que estão instalados, usando
service --status-all
. Nem todos os serviços devem necessariamente estar habilitados, mais uma vez recomendo comparar com um servidor em funcionamento. Tente reiniciar todos os serviços que não estão em execução, mas deveriam estar. Se todas as permissões estiverem corretas e os dados relevantes do usuário (se houver) tiverem sido restaurados, o serviço deverá iniciar com êxito. Caso contrário, verifique o status do systemd com systemctl status <service-name>
, o systemd faz loginjournalctl -xe
e os arquivos de log do serviço em/var/log
. Eles devem fornecer informações suficientes para rastrear quaisquer problemas restantes.
Eu recomendo fortemente que você gaste algum tempo comparando o debootstrap
ambiente e seu host quebrado também se tiver a sorte de ter um segundo host funcionando. Você deseja confirmar se todas as permissões estão corretas e se os serviços estão funcionando corretamente. Somente depois de fazer isso, eu reiniciaria o host e confirmaria se tudo voltou.
Leia atentamente todos os links que forneci antes de tentar qualquer comando. Se houver algum erro, equívoco ou problema com minha postagem, avise-me e trabalharei para corrigi-lo.
Boa sorte!