¿Cuándo y por qué debo usar apt-get update?


15

Pregunta general:

¿Podría alguien explicar qué hace el comando apt-get updatey cuándo realmente debería usarlo?


Observaciones

Por favor dé una respuesta detallada . No solo una copia de la página de manual, a menos que su versión sea realmente detallada (pongo una definición de la página de manual a continuación).

Actualización de apt-get : se utiliza para volver a sincronizar los archivos de índice del paquete desde sus fuentes. Los índices de los paquetes disponibles se obtienen de las ubicaciones especificadas en /etc/apt/sources.list(5). Siempre se debe realizar una actualización antes de una actualización o dist-upgrade.


Sub-preguntas:

  • ¿Dónde se almacena el índice del paquete? En una base de datos? En un archivo?
  • ¿Qué sucede si lo hago apt-get installsin actualizar el caché? ¿Existe la posibilidad de que el paquete remoto ya no exista y que el enlace se rompa?
  • ¿Existe alguna política acordada sobre los repositorios de Deb? Por ejemplo, ¿debería un repositorio solo contener la última versión de un paquete o, por el contrario, debería contener todas las versiones disponibles para un lanzamiento de distribución específico?

Contexto

Hago mi pregunta porque estoy estudiando el marco Docker . Una de sus características es el Dockerfile , que le permite construir una especie de imagen del sistema operativo mediante la ejecución de algunas instrucciones de este archivo. Una propiedad de esta imagen es que siempre debe ser la misma, sea cual sea el contexto (tiempo de construcción, etc.).

Me temo que si ejecuto el apt-get updatecomando en un momento diferente, el resultado sería diferente y, por lo tanto, mis imágenes serían diferentes.


Creo que esta publicación podría servir como un artículo wiki sobre cómo hacer una pregunta de alto nivel. Muy útil.
Zerodf

Respuestas:


12

apt-get update descarga la lista de paquetes disponibles.

La lista de paquetes puede cambiar con el tiempo. Se agregan paquetes nuevos y se eliminan los paquetes viejos. Por lo tanto, si tiene una memoria caché realmente antigua e intenta hacer una apt-get install, puede intentar descargar un paquete que ya no existe.
El tiempo que se mantiene un paquete antiguo en un repositorio depende del responsable del repositorio (su distribución). Como tal, si está utilizando algo como Docker, donde el caché puede estar muy desactualizado, siempre debe ejecutarlo apt-get updateantes de instalar cualquier paquete.

La razón para eliminar y agregar paquetes es principalmente correcciones de errores y actualizaciones de seguridad. Aunque si está utilizando repositorios de terceros como PPA, todo vale.

Al usar algo como Docker para la contenedorización en un entorno corporativo, debe construir el contenedor una vez y luego moverlo a través de sus diversos entornos de lanzamiento (desarrollo, preparación, producción) y no reconstruir el contenedor cada vez. Esto asegurará que no obtenga un contenedor diferente que no haya sido probado.

Para responder a su pregunta de donde viven los archivos de caché, /var/lib/apt/lists.


¡Gran respuesta! ¡Gracias! Quiero reaccionar ante el párrafo "(...) no reconstruir el contenedor cada vez. Esto asegurará que no obtenga un contenedor diferente que no haya sido probado". He leído que una mejor práctica es nunca usar apt-get upgrade. Una de las razones sería: "También produce imágenes inconsistentes porque ya no tienes una fuente de verdad sobre cómo debería ejecutarse tu aplicación y qué versiones de dependencias están incluidas en la imagen". ¿No es el mismo problema con apt-get updateentonces? ¿Y se supone que Dockerfile no garantiza la imagen?
Pierre-Jean

2
Un poco apt-get updatesolo afectará a los paquetes recién instalados. Los paquetes existentes solo se actualizarán si los paquetes nuevos los necesitan (esto debería ser mínimo). Con la apt-get upgradeactualización de todos los paquetes, incluidos los existentes, se obtiene una imagen muy diferente. Si bien esto puede dar como resultado un resultado diferente cada vez que crea desde el dockerfile, personalmente no creo que este sea un problema grave si pasa por una versión de múltiples entornos. Creo que esto es más un problema si distribuye el dockerfile a otras personas y les pide que lo creen.
Patrick

0

¿Podrían algunos explicar qué hace el comando apt-get update y cuándo realmente debería usarlo?

apt-get update descarga índices actualizados de los repositorios de paquetes de la distribución, enumerando todos los paquetes disponibles y sus versiones precisas.

Las distribuciones comunes como Ubuntu y Debian suelen ser conservadoras y compatibles con versiones anteriores en sus ofertas de paquetes, por lo que las versiones no cambiarán mucho con el tiempo; cambiarán debido a actualizaciones de seguridad o correcciones de errores. Por ejemplo, mysql podría actualizarse de 5.7.18a 5.7.19pero no a 6.x.

¿Dónde se almacena el índice del paquete? En una base de datos? En un archivo?

Por lo general, se almacena en uno o más archivos dentro /var/lib/apt. En el contexto de Docker, estos archivos están dentro de la imagen. Al compilar el Dockerfile, se almacenan en las nuevas capas del sistema de archivos que se crean y persisten como la imagen recién creada.

¿Qué sucede si hago apt-get install sin actualizar el caché?

Puede intentar descargar versiones de paquetes que ya no existen. Esto es bastante común en las máquinas virtuales, pero también es posible dentro de los contenedores si los repositorios de distribución han lanzado nuevos paquetes después de la creación de la imagen base. Puede que no haya coordinación entre los mantenedores de distribución y los mantenedores de Dockerfile, que están aguas abajo de la distribución y pueden ser más grandes en número. Solo hay un repositorio de Debian, pero miles de jessieimágenes de contenedor basadas en Dockerfile.

Además, algunas imágenes ascendentes como la de Ubuntu eliminan el índice descargado para hacer que la imagen sea más pequeña y evitar archivos obsoletos allí. Por lo tanto, se espera que se descargue un índice actualizado cuando se construye encima de una imagen base, no para cada versión de una imagen base que se envíe con el último índice.

¿Existe la posibilidad de que el paquete remoto ya no exista y que el enlace se rompa?

Definitivamente, porque las versiones almacenadas en el índice son muy precisas como 5.7.19(simplificación; son más similares a 5.7.19-0ubuntu1).

¿Existe alguna política acordada sobre los repositorios de Deb? Por ejemplo, ¿debería un repositorio solo contener la última versión de un paquete o, por el contrario, debería contener todas las versiones disponibles para un lanzamiento de distribución específico?

Es común que las versiones menores anteriores se eliminen rápidamente una vez que hay una actualización disponible; Supongo que esto es para ahorrar espacio en los servidores, ya que los archivos binarios pueden pesar varias decenas de megabytes, multiplicados por todas las versiones y arquitecturas compatibles. Por lo tanto, generalmente es imposible fijar, por ejemplo, mysql-5.7.18en el subsiguiente apt-get install; tan pronto como mysql-5.7.19se publique en la distribución, se eliminará la anterior.

Para ser justos con Docker, este no determinismo apt-get updatees un problema que se plantea como parte de la gestión de paquetes de cada distribución. Tendría el mismo problema al intentar construir repetidamente una máquina virtual EC2 o Vagrant.

Algunos administradores de sistemas utilizan servicios como Aptly para reflejar los repositorios originales y poder fijar una versión en particular, pero corre el riesgo de perderse las actualizaciones de seguridad a menos que tenga un proceso separado que se ejecute con frecuencia para probar las actualizaciones y cambiar lo que están clavados

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.