Al parecer en un servidor de producción ha habido algún problema y alguien ha eliminado el contenido de la /var
carpeta.
Esto ha provocado varios errores que he ido solucionando con varios servicios como servidor web.
El problema que estoy teniendo con apt
, problema que no me permite actualizar, eliminar o instalar paquetes.
por ejemplo quiero reinstalar el servidor de base de datos mariadb-server
, pero me dice que el paquete no está instalado en el sistema (esto es falso, lo instalé personalmente):
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).
si lanzo el comando que me dice que resuelva las dependencias no satisfechas:
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)
Aquí hay una prueba de que mariadb-server está instalado (el error se debe a la eliminación de /var, por lo que quiero reinstalarlo):
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 puedes ver, ambos apt
me mariadb-server
arrojan errores con contenido faltante en el /var
directorio. Entonces entré en un bucle donde no sé cómo proceder para solucionar este problema.
Respuesta1
Voy a hacer referencia a lo siguienteartículoyPublicación de Debian Wikipor mi respuesta.
Primero, en un sistema Raspbian en funcionamiento, cree un debootstrap
entorno. Siguiendo las instrucciones delWiki Debiansolo necesitarías completar lo siguiente:
mkdir /debootstrap
debootstrap stable /debootstrap http://deb.debian.org/debian/
Ahora, está utilizando Raspbian, por lo que es posible que deba agregar la clave gpg correcta,como se señala aquíy haga referencia a Raspbian Deb Mirror. Algo como esto: http://archive.raspbian.org/raspbian
. voy a incluirun enlaceConsulte una guía de compilación multiplataforma si está haciendo esto en un sistema AMD64 en lugar de una Raspberry Pi.
NOTA IMPORTANTE: si se le solicita, ¡NO lo instale
grub
en el MBR! ¡Esto podría dañar tu instalación actual!
A continuación, en el sistema averiado, obtenga una lista de todos los programas instalados. Inicialmente sugerí usar dpkg --get-selections
, sin embargo, como señala el usuario AB, esto fallará. dpkg
hace referencia a varios /var
directorios para que funcionen y, si /var
falta, esto, por supuesto, fallará. El usuario AB señala que puede hacer referencia al contenido /usr/share/doc/
y a los enlaces simbólicos relacionados. Empezaría por ver qué hay disponible e intentaría crear uno installed.txt
con los resultados.
cd /usr/share/doc && for i in *; do echo $i install >> /home/user/installed.txt; done
Compare los resultados de esto installed.txt
con lo que espera. Otro lugar para comprobar sería /usr/share/man
. Este directorio tiene páginas de manual, pero solo será preciso para paquetes que instalen páginas de manual. Si tienes una Raspberry Pi que funciona y con la que comparar también,y está configurado igual que la Raspberry Pi rota, puedes construir installed.txt
con la salida de ese Raspberry Pi dpkg --get-selections
.
Copie installed.txt
del /var
host que falta al /var
host de reparación. scp
o rysnc
funcionará aquí, pero en este punto debe confirmar que tiene una ssh
configuración funcional entre el host averiado y el host que realiza la reparación. Sin una ssh
configuración que funcione entre estos dos hosts, no podrá copiar archivos /var
. Cualquier ssh
problema debe resolverse antes de continuar.
Ahora, mueva este archivo al /deboostrap
entorno y prepárese para instalar el mismo software dentro de este chroot.
cp installed.txt /debootstrap/
chroot /bootstrap/
mount -t proc none /proc
dpkg --set-selections < installed.txt
Si es necesario, asegúrese de que sources.list
coincida. debootstrap
por defecto solo incluye main
.
apt update
apt install dselect
dselect update
apt-get dselect-upgrade
Si no pudiste construir un bueninstalled.txt
Es posible que necesites simplemente instalar manualmente todos los paquetes necesarios en tu debootstrap
chroot. Aquí es donde resulta útil una buena documentación de configuración o infraestructura como código. Ejecute apt install package1 package2 package3 ... packageN
el chroot para construirlo /var
lo más parecido posible al original /var
. En lugar de instalar dselect
debes seguir estos pasos:
chroot /bootstrap/
mount -t proc none /proc
apt update
apt install package1 package2 package3 ... packageN
En este punto, su debootstrap
entorno debería coincidir con el de su host roto de destino. Aquí es donde debes usar rsync
para copiar /var
. rsync -A
debería ser suficiente. Como señalé en mienlace, es posible que deba permitir PermitRootLogin without-password
que su sshd_config
for rsync
funcione.
También citaré directamente los últimos pasos y consideraciones que tuvo que ejecutar Pete Donnell en Alephnull.uk:
...Tuve que reinstalar los
mariadb-server
paquetes en el servidor averiado usandoapt-get install --reinstall mariadb-server mariadb-server-10.1 mariadb-server-core-10.1
.El siguiente paso es restaurar sus datos de usuario. Esto será específico de la estructura que uses, por lo que no puedo ayudarte con instrucciones para eso. Una vez que haya hecho eso, verifique los permisos de los archivos dentro
/var/lib
y/var/log
contra un servidor que funcione (o tal vez su arranque) para verificar que sean correctos. Es muy probable que los ID de usuario de las cuentas del sistema sean diferentes entre el servidor y el entorno de arranque.Ahora deberías comprobar los distintos servicios que están instalados, utilizando
service --status-all
. No todos los servicios necesariamente deben estar habilitados; nuevamente recomiendo compararlos con un servidor que funcione. Intente reiniciar cualquier servicio que no esté ejecutándose actualmente pero que debería estarlo. Si todos los permisos son correctos y los datos de usuario relevantes (si los hay) se han restaurado, entonces el servicio debería iniciarse correctamente. Si no es así, verifique el estado de systemd con systemctl status <service-name>
, los registros de systemdjournalctl -xe
y los archivos de registro del servicio en/var/log
. Estos deberían brindarle suficiente información para localizar cualquier problema restante.
Le recomiendo encarecidamente que debootstrap
también dedique tiempo a comparar el entorno y su host roto si tiene la suerte de tener un segundo host en funcionamiento. Quiere confirmar que todos los permisos son correctos y que los servicios se ejecutan correctamente. Solo una vez que haya hecho esto, reiniciaría el host y confirmaría que todo volvió.
Lea detenidamente todos los enlaces que le proporcioné antes de probar cualquier comando. Si hay algún error, idea errónea o problema con mi publicación, hágamelo saber y trabajaré para corregirlo.
¡Toda la suerte!