{"id":3780,"date":"2016-11-11T14:04:29","date_gmt":"2016-11-11T13:04:29","guid":{"rendered":"https:\/\/diocesanos.es\/blogs\/equipotic\/?p=3780"},"modified":"2016-11-11T14:04:30","modified_gmt":"2016-11-11T13:04:30","slug":"instalacion-y-actualizacion-de-apt-cacher","status":"publish","type":"post","link":"https:\/\/diocesanos.es\/blogs\/equipotic\/2016\/11\/11\/instalacion-y-actualizacion-de-apt-cacher\/","title":{"rendered":"Instalaci\u00f3n y actualizaci\u00f3n de apt-cacher"},"content":{"rendered":"<p align=\"justify\">Apt-cacher es un software que permite configurar un equipo de la red local como intermediario (proxy-cach\u00e9) para que las peticiones de instalaci\u00f3n\/actualizaci\u00f3n del resto de equipos puedan aprovechar una copia \u201clocal\u201d y no saturen la conexi\u00f3n de red a internet.<\/p>\n<p align=\"justify\"><a href=\"https:\/\/diocesanos.es\/blogs\/equipotic\/2016\/11\/11\/instalacion-y-actualizacion-de-apt-cacher\/apt-cacher-ng\/\" rel=\"attachment wp-att-3782\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-3782\" src=\"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-content\/uploads\/sites\/2\/2016\/11\/apt-cacher-ng-300x175.png\" alt=\"apt-cacher-ng\" width=\"300\" height=\"175\" srcset=\"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-content\/uploads\/sites\/2\/2016\/11\/apt-cacher-ng-300x175.png 300w, https:\/\/diocesanos.es\/blogs\/equipotic\/wp-content\/uploads\/sites\/2\/2016\/11\/apt-cacher-ng.png 584w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>Cuando un equipo cliente solicite una lista o paquete a cualquiera de los repositorios que tenga configurados (oficiales o no) delegar\u00e1 la descarga al servidor de \u201capt-cacher\u201d. Si existe una copia en el servidor se devolver\u00e1 al cliente. En caso contrario el servidor descargar\u00e1 la lista\/paquete, har\u00e1 copia para otras peticiones posteriores y la enviar\u00e1 al cliente.<\/p>\n<p><!--more--><\/p>\n<p align=\"justify\">Es posible configurar el servidor \u201capt-cacher\u201d para que optimice el espacio ocupado manteniendo s\u00f3lo copias de los archivos con la \u00faltima versi\u00f3n, copias para distintas distribuciones de Ubuntu (12, 14, \u2026) o arquitecturas (32 \/ 64 bits), as\u00ed como restringir el uso a equipos o subredes concretas.<\/p>\n<h1>Instalaci\u00f3n inicial<\/h1>\n<ol>\n<li>\n<p align=\"justify\">Localiza un equipo que pueda actuar como servidor, con IP fija, y espacio suficiente en la partici\u00f3n de usuarios del disco duro (+10Gb).<\/p>\n<\/li>\n<li>\n<p align=\"justify\">Instalar con \u201c<i>apt-get install apt-cacher apache2<\/i>\u201d<\/p>\n<\/li>\n<li>\n<p align=\"justify\">Configurar como \u201cdemonio\u201d para que inicie autom\u00e1ticamente. Si no preguntara durante la instalaci\u00f3n hay que modificar el archivo \u201c\/etc\/default\/apt-cacher\u201d y cambiar la l\u00ednea de \u201c<i><b>autostart<\/b><\/i>\u201d a \u201c1\u201d<\/p>\n<\/li>\n<li>\n<p align=\"justify\">Aseg\u00farate de que el servidor apt-cacher est\u00e1 parado con \u201c <i>service <\/i><i>apt-cacher<\/i><i> stop\u201d<\/i><\/p>\n<\/li>\n<\/ol>\n<h1>Ajustes a la configuraci\u00f3n por defecto del servidor<\/h1>\n<p align=\"justify\">En nuestro caso la partici\u00f3n del sistema que incluye el directorio \u201c\/var\/cache\u201d est\u00e1 limitada a 8-10Gb. Es en este directorio donde por defecto se guardar\u00e1n las copias de los paquetes de apt-cacher. Corremos el riesgo de quedarnos sin espacio en esa partici\u00f3n.<\/p>\n<p align=\"justify\">Vamos a crear en primer lugar un nuevo directorio en la partici\u00f3n de \u201c\/home\u201d que tiene mucho m\u00e1s espacio libre asignado. Se lo asociaremos al usuario del servidor apache:<\/p>\n<pre>mkdir \/home\/apt-cacher\r\nchown www-data:www-data \/home\/apt-cacher\r\nchmod 770 \/home\/apt-cacher<\/pre>\n<p>Edita el fichero \u201c\/etc\/apt-cacher\/apt-cacher.conf\u201dy realiza los siguientes cambios<\/p>\n<ol>\n<li>\n<p align=\"justify\">Descomenta y edita la l\u00ednea \u201c<b>cache_dir = \/var\/cache\/apt-cacher<\/b>\u201d y c\u00e1mbiala por \u201c<b>cache_dir = \/home\/apt-cacher<\/b>\u201d para que utilice el directorio que hemos creado previamente.<\/p>\n<\/li>\n<li>\n<p align=\"justify\">Opcionalmente descomenta y edita la l\u00ednea \u201c<b>admin_email = root@localhost<\/b>\u201d y cambia la direcci\u00f3n de correo por otra con m\u00e1s sentido.<\/p>\n<\/li>\n<li>\n<p align=\"justify\">Descomenta la l\u00ednea \u201c<b>daemon_addr = localhost<\/b>\u201d y modif\u00edcala para que refleje la IP del servidor (192.168.0.3 en mi caso) de la forma \u201c<b>daemon_addr = 192.168.0.3 <\/b>\u201d.<\/p>\n<\/li>\n<li>\n<p align=\"justify\">Si existen en la red varios tipos de distribuciones (Debian, Ubuntu) es posible separar los paquetes de cada una habilitando la opci\u00f3n \u201c<b>distinct_namespaces<\/b>\u201d. Descomenta la l\u00ednea correspondiente y c\u00e1mbiala a \u201c<b>distinct_namespaces = 1<\/b>\u201d.<\/p>\n<\/li>\n<li>\n<p align=\"justify\">Descomenta la l\u00ednea de \u201c<i><b>allowed_hosts = *<\/b><\/i>\u201d para que cualquier equipo de la red pueda acceder al servidor. En caso contrario observar\u00e1s mensajes del tipo \u201c<i>403 access to cache prohibited<\/i>\u201d o similar cuando traten de instalar\/actualizar paquetes los clientes.<\/p>\n<\/li>\n<li>\n<p align=\"justify\">Descomenta la l\u00ednea \u201c<b>generate_reports = 1<\/b>\u201d para que el servidor regenere el informe de uso cada 24 horas.<\/p>\n<\/li>\n<li>\n<p align=\"justify\">Descomenta la l\u00ednea \u201c<b>clean_cache = 1<\/b>\u201d para que el servidor se purge cada 24 horas y elimine las copias de paquetes de versiones no actualizadas y se quede con la \u00faltima.<\/p>\n<\/li>\n<\/ol>\n<p align=\"justify\">(Opcional) Modifica el fichero \u201c<i>\/etc\/services<\/i>\u201d para reflejar el uso del puerto \u201c3142\u201d por parte de \u201capt-cacher\u201d. A\u00f1ade al final del archivo las l\u00edneas:<\/p>\n<pre>apt-cacher 3142\/tcp \r\napt-cacher 3142\/udp<\/pre>\n<p align=\"justify\">Para terminar vamos a reconfigurar la forma en que el servidor instala\/actualiza sus propios paquetes. Ejecuta el siguiente comando para crear un nuevo fichero de ajuste de configuraci\u00f3n para \u201capt\u201d (suponiendo que la direcci\u00f3n IP 192.168.0.3 es la del servidor. C\u00e1mbiala por la tuya):<\/p>\n<pre style=\"font-size: 80%;\">echo \"Acquire::http::Proxy \\\"http:\/\/192.168.0.3:3142\\\";\" &gt; \/etc\/apt\/apt.conf.d\/01proxy<\/pre>\n<p align=\"justify\">Reinicia ahora el servicio con \u201cservice apache2 restart; service apt-cacher restart\u201d.<\/p>\n<h1>Verificaci\u00f3n del funcionamiento del servidor<\/h1>\n<ol>\n<li>\n<p align=\"justify\">Abre la p\u00e1gina \u201cdireccion_ip_servidor:3142\u201d en un navegador y comprueba que devuelve la p\u00e1gina con la configuraci\u00f3n activa.<\/p>\n<\/li>\n<li>\n<p align=\"justify\">Actualiza la lista de paquetes disponibles con \u201c<b>apt-get update<\/b>\u201d.<\/p>\n<\/li>\n<li>\n<p align=\"justify\">Actualiza el servidor con \u201c<b>apt-get dist-upgrade<\/b>\u201d. Reinicia si es necesario.<\/p>\n<\/li>\n<li>\n<p align=\"justify\">A continuaci\u00f3n puedes verificar que se han hecho copia de las listas y de los archivos a partir del directorio \u201c<i>\/home\/apt-cacher<\/i>\u201d.<\/p>\n<\/li>\n<\/ol>\n<h1 align=\"justify\">Configuraci\u00f3n de los clientes<\/h1>\n<p align=\"justify\">Ejecuta el siguiente comando para crear un nuevo fichero de ajuste de configuraci\u00f3n para \u201capt\u201d (suponiendo que la direcci\u00f3n IP 192.168.0.3 es la del servidor. C\u00e1mbiala por la tuya):<\/p>\n<pre>echo \"Acquire::http::Proxy \\\"http:\/\/192.168.0.3:3142\\\";\" &gt; \/etc\/apt\/apt.conf.d\/01proxy<\/pre>\n<p align=\"justify\">Una vez configurados los clientes SOLO instalar\u00edan\/actualizar\u00edan a trav\u00e9s del servidor-proxy. Si \u00e9ste no estuviera disponible se producir\u00eda un error de acceso y no completar\u00edan el proceso. Para evitarlo sugiero utilizar uno o varios de los siguientes medios:<\/p>\n<h2>Opci\u00f3n 1: Configuraci\u00f3n al iniciar el sistema<\/h2>\n<p align=\"justify\">Escribe el siguiente script dentro del fichero \u201c\/etc\/rc.local\u201d:<\/p>\n<pre style=\"font-size: 60%;\">. \/lib\/lsb\/init-functions\r\n\r\nSERVIDOR_APT=192.168.0.3\r\n\r\nlog_daemon_msg \"Configurando el servidor APT cache proxy (verificando acceso a $SERVIDOR_APT ...)\"\r\n\r\nping -c 1 $SERVIDOR_APT &amp;&gt; \/dev\/null\r\n\r\nif [ $? = \"0\" ]; then\r\n log_daemon_msg \"Encontrado. Configurando acceso...\"\r\n echo \"Acquire::http::Proxy \\\"http:\/\/$SERVIDOR_APT:3142\\\";\" &gt; \/etc\/apt\/apt.conf.d\/01proxy\r\nelse\r\n log_daemon_msg \"No encontrado. Retirando configuraci\u00f3n...\"\r\n rm \/etc\/apt\/apt.conf.d\/01proxy &amp;&gt; \/dev\/null\r\nfi\r\n\r\nlog_end_msg 0<\/pre>\n<p align=\"justify\"><i><b>Nota<\/b><\/i><i>: Modificar la primera l\u00ednea del archivo y sustituir \u201c#!\/bin\/sh -e\u201d por \u201c#!\/bin\/bash\u201d<\/i><\/p>\n<h2>Opci\u00f3n 2: Automatizar con \u201ccron\u201d<\/h2>\n<ol>\n<li>Crea un archivo llamado \u201ccheck-apt-cacher.sh\u201c en la carpeta de \u201c\/root\u201d.<\/li>\n<li>Escribe en su interior el script de control:<\/li>\n<\/ol>\n<pre style=\"font-size: 60%;\">#!\/bin\/bash\r\n\r\nSERVIDOR_APT=192.168.0.3\r\n\r\nping -c 1 $SERVIDOR_APT &amp;&gt; \/dev\/null\r\n\r\nif [ $? = \"0\" ]; then\r\n echo \"Acquire::http::Proxy \\\"http:\/\/$SERVIDOR_APT:3142\\\";\" &gt; \/etc\/apt\/apt.conf.d\/01proxy\r\nelse\r\n rm \/etc\/apt\/apt.conf.d\/01proxy &amp;&gt; \/dev\/null\r\nfi<\/pre>\n<ol start=\"3\">\n<li>Dale permisos de ejecuci\u00f3n con \u201c<b>chmod +x \/root\/ check-apt-cacher.<\/b><b>sh<\/b>\u201d<\/li>\n<li>Abre el editor de programaci\u00f3n del cron con \u201c<b>crontab -e<\/b>\u201d y a\u00f1ade la siguiente l\u00ednea:\n<pre>*\/5 * * * * \/bin\/bash \/root\/check-apt-cacher<\/pre>\n<\/li>\n<\/ol>\n<p>Sal del editor guardando los cambios. Con esto se ejecutar\u00e1 el ajuste cada 5 minutos.<\/p>\n<h2>Opci\u00f3n 3: Script para actualizar manualmente<\/h2>\n<pre style=\"font-size: 60%;\">#!\/bin\/bash\r\n\r\nSERVIDOR_APT=\"192.168.0.3\"\r\n\r\nINSTALACION=\"alumno\"\r\n\r\nverifica_ppa() {\r\n grep -h -q \"^deb.*$2\" \/etc\/apt\/sources.list \/etc\/apt\/sources.list.d\/* &gt; \/dev\/null 2&gt;&amp;1\r\n if [ $? -ne 0 ]; then\r\n   if [ $1 = \"add\" ]; then\r\n     add-apt-repository -y $2 &amp;&gt; \/dev\/null\r\n     return 0\r\n   fi\r\n fi\r\n if [ $1 = \"del\" ]; then\r\n   add-apt-repository -y -r $2 &amp;&gt; \/dev\/null\r\n fi\r\n }\r\n\r\nping -c 1 $SERVIDOR_APT &amp;&gt; \/dev\/null\r\n\r\nif [ $? = \"0\" ]; then\r\n  echo \"Acquire::http::Proxy \\\"http:\/\/$SERVIDOR_APT:3142\\\";\" &gt; \/etc\/apt\/apt.conf.d\/01proxy\r\n  HAY_SERVIDOR=1\r\nelse\r\n  rm \/etc\/apt\/apt.conf.d\/01proxy &amp;&gt; \/dev\/null\r\n  HAY_SERVIDOR=0\r\nfi\r\n\r\nif [ $HAY_SERVIDOR = \"1\" ]; then\r\n  wget -q http:\/\/$SERVIDOR_APT\/$INSTALACION\/ppa_eliminar.txt -O \/tmp\/ppa_eliminar.txt &amp;&gt; \/dev\/null\r\n  if [ $? = \"0\" ]; then\r\n    while read PPA\r\n    do\r\n       verifica_ppa del $PPA\r\n    done &lt; ppa_eliminar.txt\r\n  rm \/tmp\/ppa_eliminar.txt &amp;&gt; \/dev\/null\r\n  fi\r\n  wget -q http:\/\/$SERVIDOR_APT\/$INSTALACION\/ppa_instalar.txt -O \/tmp\/ppa_instalar.txt &amp;&gt; \/dev\/null\r\n  if [ $? = \"0\" ]; then\r\n    while read PPA\r\n    do\r\n      verifica_ppa add $PPA\r\n    done &lt; ppa_instalar.txt\r\n    rm \/tmp\/ppa_instalar.txt &amp;&gt; \/dev\/null\r\n  fi\r\nfi\r\n\r\napt-get -y update\r\n\r\nif [ $HAY_SERVIDOR = \"1\" ]; then\r\n  wget -q http:\/\/$SERVIDOR_APT\/$INSTALACION\/apt_eliminar.txt -O \/tmp\/apt_eliminar.txt &amp;&gt; \/dev\/null\r\n  if [ $? = \"0\" ]; then\r\n    apt-get -y --purge remove `cat \/tmp\/apt_eliminar.txt`\r\n    rm \/tmp\/apt_eliminar.txt &amp;&gt; \/dev\/null\r\n  fi\r\n  wget -q http:\/\/$SERVIDOR_APT\/$INSTALACION\/apt_instalar.txt -O \/tmp\/apt_instalar.txt &amp;&gt; \/dev\/null\r\n  if [ $? = \"0\" ]; then\r\n    apt-get -y install `cat \/tmp\/apt_instalar.txt`\r\n    rm \/tmp\/apt_instalar.txt &amp;&gt; \/dev\/null\r\n  fi\r\nfi\r\n\r\napt-get -y dist-upgrade<\/pre>\n<h2 align=\"justify\">NOTAS<\/h2>\n<ul>\n<li>\n<p align=\"justify\">Es posible que haya paquetes almacenados en el servidor de alguna actualizaci\u00f3n anterior (por ejemplo en \u201c<i>\/var\/cache\/apt\/archives<\/i>\u201d ) y queramos poner disponible para los clientes. Se puede hacer con este comando:<\/p>\n<\/li>\n<\/ul>\n<pre> \/usr\/share\/apt-cacher\/apt-cacher-import.pl -r \/var\/cache\/apt\/archives<\/pre>\n<ul>\n<li>\n<p align=\"justify\">Con respecto a los informes de uso, se pueden ver desde \u201c<strong>http:\/\/<\/strong><strong>direccion_ip_servidor<\/strong><strong>:3142\/report\u201d<\/strong> pero como seguro todav\u00eda no se gener\u00f3 ninguno puedes forzar que lo cree ejecutando este comando en el servidor:<\/p>\n<\/li>\n<\/ul>\n<pre>\/usr\/share\/apt-cacher\/apt-cacher-report.pl<\/pre>\n<h2>Actualizar a la \u00faltima versi\u00f3n:<\/h2>\n<p>En primer lugar debemos parar el servicio si es que tenemos ya una versi\u00f3n anterior instala y funcionando:<\/p>\n<pre>service apt-cacher stop<\/pre>\n<p>Luego podemos descargar la \u00faltima versi\u00f3n desde: <a href=\"http:\/\/www.hindley.org.uk\/~mark\/debian\/\">www.hindley.org.uk\/~mark\/debian\/<\/a><\/p>\n<p>Antes de aplicar asegurarse de tener instalados los paquetes de los que depende apt-cacher para procesar listas comprimidas:<\/p>\n<ul>\n<li>libcompress-raw-lzma-perl<\/li>\n<li>libcompress-raw-bzip2-perl<\/li>\n<li>libcompress-raw-zlib-perl<\/li>\n<li>libio-compress-perl<\/li>\n<li>libio-compress-lzma-perl<\/li>\n<\/ul>\n<pre style=\"font-size: 80%;\">apt-get install  libcompress-raw-lzma-perl libcompress-raw-bzip2-perl libcompress-raw-zlib-perl libio-compress-perl libio-compress-lzma-perl\r\n\r\ndpkg -i apt-cacher_1.7.13_all.deb<\/pre>\n<p>A la pregunta sobre si queremos instalar una nueva versi\u00f3n del fichero de configuraci\u00f3n o mantener el anterior respondemos instalar el del paquete.<\/p>\n<p>Editamos el fichero de configuraci\u00f3n y descomentamos\/modificamos las l\u00edneas en funci\u00f3n de muestras preferencias:<\/p>\n<pre style=\"font-size: 80%;\">cache_dir = \/data\/apt-cacher\r\ndaemon_addr = 192.168.0.3\r\ndistinct_namespaces = 1\r\nallowed_hosts = *\r\nsupported_archs = i386, amd64\r\ngenerate_reports = 1\r\nclean_cache = 1<\/pre>\n<p>Reiniciamos el servicio apache y apt-cacher. En los clientes no habr\u00eda que cambiar nada.<\/p>\n<pre>service apt-cacher startservice apache2 restart<\/pre>\n<h2>NOTAS:<\/h2>\n<p>Si al actualizar desde un cliente da problemas con alg\u00fan repositorio podemos indicarle en su fichero \u00ab01proxy\u00bb que evite al apt-cacher y se conecte directamente a\u00f1adiendo una l\u00ednea como:<\/p>\n<pre style=\"font-size: 80%;\">Acquire::http::proxy::direcci\u00f3n_del_repositorio_problem\u00e1tico \"DIRECT\";<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Apt-cacher es un software que permite configurar un equipo de la red local como intermediario (proxy-cach\u00e9) para que las peticiones de instalaci\u00f3n\/actualizaci\u00f3n del resto de equipos puedan aprovechar una copia \u201clocal\u201d y no saturen la conexi\u00f3n de red a internet. Cuando un equipo cliente solicite una lista o paquete a cualquiera de los repositorios que &hellip; <a href=\"https:\/\/diocesanos.es\/blogs\/equipotic\/2016\/11\/11\/instalacion-y-actualizacion-de-apt-cacher\/\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Instalaci\u00f3n y actualizaci\u00f3n de apt-cacher<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3780","post","type-post","status-publish","format-standard","hentry","category-sin-categoria"],"_links":{"self":[{"href":"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-json\/wp\/v2\/posts\/3780","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-json\/wp\/v2\/comments?post=3780"}],"version-history":[{"count":1,"href":"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-json\/wp\/v2\/posts\/3780\/revisions"}],"predecessor-version":[{"id":5074,"href":"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-json\/wp\/v2\/posts\/3780\/revisions\/5074"}],"wp:attachment":[{"href":"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-json\/wp\/v2\/media?parent=3780"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-json\/wp\/v2\/categories?post=3780"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/diocesanos.es\/blogs\/equipotic\/wp-json\/wp\/v2\/tags?post=3780"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}