Pregunta general:
¿Podría alguien explicar qué hace el comando apt-get update
y 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 install
sin 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 update
comando en un momento diferente, el resultado sería diferente y, por lo tanto, mis imágenes serían diferentes.
Respuestas:
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 update
antes 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
.fuente
apt-get update
entonces? ¿Y se supone que Dockerfile no garantiza la imagen?apt-get update
solo 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 laapt-get upgrade
actualizació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.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.18
a5.7.19
pero no a6.x
.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.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
jessie
imá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.
Definitivamente, porque las versiones almacenadas en el índice son muy precisas como
5.7.19
(simplificación; son más similares a5.7.19-0ubuntu1
).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.18
en el subsiguienteapt-get install
; tan pronto comomysql-5.7.19
se publique en la distribución, se eliminará la anterior.Para ser justos con Docker, este no determinismo
apt-get update
es 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
fuente