{"id":403,"date":"2008-11-19T14:39:54","date_gmt":"2008-11-19T19:39:54","guid":{"rendered":"http:\/\/alexceli.org\/blog\/2008\/11\/19\/repositorio-interno-de-actualizaciones-totalmente-transparente-para-centos.php"},"modified":"2008-11-19T14:39:54","modified_gmt":"2008-11-19T19:39:54","slug":"repositorio-interno-de-actualizaciones-totalmente-transparente-para-centos","status":"publish","type":"post","link":"https:\/\/alexceli.org\/blog\/2008\/11\/19\/repositorio-interno-de-actualizaciones-totalmente-transparente-para-centos-403.php","title":{"rendered":"Repositorio interno de actualizaciones totalmente transparente para CentOS"},"content":{"rendered":"<p>Hace mas o menos una a\u00f1o y medio tuve <a href=\"http:\/\/alexceli.org\/blog\/2007\/05\/23\/al-final-tuve-que-crear-cipherrepo-como-repositorio-interno-de-centos.php\">problemas de actualizaciones simult\u00e1neas de las versiones de CentOS<\/a> en donde mi l\u00ednea dedicada se fue &#8220;al techo&#8221; porque todos mis servidores y estaciones de trabajo se pusieron a actualizar. La soluci\u00f3n en ese entonces fue crear mi propio repositorio de actualizaciones y meterle mano a los archivos del yum para actualizarlo.<\/p>\n<p>De aqui salian algunos problemas:<\/p>\n<ul>\n<li>Cuando instalabas una m\u00e1quinas nueva o un servidor nuevo, siempre tenias que instalarle los archivos del yum con tu configuraci\u00f3n para actualizarlo. Si la m\u00e1quina habia que llevarla a alg\u00fan cliente, tenias que regresar a los archivos originales<\/li>\n<li>La ociosidad de estar cambiando los archivos arriba mencionados<\/li>\n<li>Muchas veces tenias una maquina recien instalada y se iba a actualizarse a los repositorios default, por lo que igual te consumia ancho de banda asi tu no quisieras si es que te olvidabas de este peque\u00f1o detalle de los archivos del Yum<\/li>\n<li>Manejo de una configuraci\u00f3n total de tu red, en donde todos los procesos se hagan totalmente transparentes<\/li>\n<\/ul>\n<p>Bueno pues, la soluci\u00f3n fue de hacer un <strong>Repositorio interno de actualizaciones totalmente transparente para CentOS<\/strong>, al comienzo di\u00f3 bastante trabajo pero al funal fu\u00e9 algo sencillo, que paso a detallarlo.<\/p>\n<p><strong>Requerimientos<\/strong><\/p>\n<p>&#8211; Servidor DNS con bind.<br \/>\n&#8211; Servidor DHCP<br \/>\n&#8211; Servidor de archivos con Apache y PHP instalado, con por lo menos unos 30GB disponibles en donde vas a guardar el repositorio.<\/p>\n<p><strong>Configuraci\u00f3n<\/strong><\/p>\n<p><strong>DHCP<\/strong><\/p>\n<p>Este es el primer paso, tu red debe ser por DHCP y asignando los IPs en forma autom\u00e1tica, obviamente apuntando como unico servidor DNS a tu DNS propio como lo detallo a continuaci\u00f3n<\/p>\n<p><code>option domain-name-servers 192.168.1.1;<\/code><\/p>\n<p><strong>DNS<\/strong><\/p>\n<p>Esta es la parte mas importante del truco. Como todas tus maquinas apuntan a tu DNS como \u00fanico DNS de consultas, todo lo que tu le pongas a tu DNS, va a hacer que tus servidores le hagan caso.<\/p>\n<p>Entonces en el archivo named.rfc1912.zones<\/p>\n<p><code>\/\/ Dominio mirrorlist.centos.org<br \/>\nzone \"mirrorlist.centos.org\"{<br \/>\n        type master;<br \/>\n        file \"db.mirrorlist.centos.org\";<br \/>\n};<br \/>\n<\/code><\/p>\n<p>y en el directorio \/var\/named crean el archivo db.mirrorlist.centos.org con el siguiente contenido<\/p>\n<p><code><br \/>\n; localhost.<br \/>\n$TTL 3600<br \/>\n@               in      soa     localhost. hostmaster.localhost. (<br \/>\n                                2008021300      ;serial<br \/>\n                                3600            ;refresh<br \/>\n                                1800            ;retry<br \/>\n                                604800          ;expiration<br \/>\n                                3600 )          ;minimum<br \/>\n@                                       in      ns      localhost.<br \/>\nmirrorlist.centos.org.                  in      ns      localhost.<br \/>\nmirrorlist.centos.org.                  IN      A       192.168.1.20<br \/>\n<\/code><\/p>\n<p>en donde estamos haciendo que el dominio mirrorlist.centos.org apunte y resuelva al IP 192.168.1.20 que es donde vamos a tener el Apache + PHP y el contenido del respositorio.<\/p>\n<p><strong>APACHE Y PHP<\/strong><\/p>\n<p>En el servidor de Apache con PHP, en el httpd.conf le configuramos un par de dominios virtuales<\/p>\n<p><virtualhost 192.168.1.20:80\\><code><br \/>\n    ServerAdmin alex@linux.org.pe<br \/>\n    DocumentRoot \/home\/repositorio<br \/>\n    ServerName centos.cipher.com.pe<br \/>\n    Options Indexes FollowSymLinks MultiViews<br \/>\n    ErrorLog logs\/centos.cipher.com.pe-error.log<br \/>\n    CustomLog logs\/centos.cipher.com.pe-access.log common<\/code><br \/>\n<\/virtualhost><br \/>\n<virtualhost 192.168.1.20:80><code><br \/>\n    ServerAdmin alex@linux.org.pe<br \/>\n    DocumentRoot \/home\/repositorio\/mirrorlist.centos.org<br \/>\n    ServerName mirrorlist.centos.org<br \/>\n    ErrorLog logs\/mirrorlist.centos.org-error.log<br \/>\n    CustomLog logs\/mirrorlist.centos.org-access.log common<br \/>\n<\/code><\/virtualhost><\/p>\n<p>En donde quedaron listos 2 dominios virtuales, el mirrorlist.centos.org y el centos.cipher.com.pe<\/p>\n<p>Como le estamos haciendo creer a CentOS que ese es el mirrorlist general, aqui debemos ponerle un archivo que de el mismo output. Creamos los directorios<\/p>\n<p><code>\/home\/repositorio<br \/>\n\/home\/repositorio\/mirrorlist.centos.org<\/code><\/p>\n<p>Y en el \/home\/repositorio\/mirrorlist.centos.org ponemos el siguiente archivo index.php<\/p>\n<blockquote><p>\n< ?php\nif ($_GET['release'] == 5) { $wrelease = \"5.2\";  }\n$wruta =\"\";\n$valor =\"\/\".$wrelease.\"\/\".$_GET['repo'].\"\/\".$_GET['arch'].$wruta;\nheader (\"Content-Type: text\/plain\");\necho \"http:\/\/centos.cipher.com.pe\/centos\".$valor;\n?>\n<\/p><\/blockquote>\n<p>En donde con esto le estamos indicando que a cualquier petici\u00f3n que se haga, siempre apunte a directorios internos de tu repositorio, es mas, centos.cipher.com.pe lo tengo publicado como dominio interno, no resuelve desde la calle, y con eso me aseguro que nadie de afuera encuentre mi repositorio privado. Con esto nunca va a volver a salir cualquier CentOS de mi red a buscar algun repositorio externo.<\/p>\n<p><strong>Repositorio<\/strong><\/p>\n<p>Bueno, hasta aqui todo bien , pero nos olvidamos de ponerle contenido al repositorio. Siguiendo con esto, aqui les pongo mi script que hace que sincronice toda las noches con los repositorios oficiales. Puse una lista de repositorios por si es que alguno se pone lento, pero mi preferido es el de rsync.gtlib.gatech.edu que es el que mas velocidad de descarga me da.<\/p>\n<p>En \/etc\/crontab ponen<\/p>\n<p><code>1 23 * * * root \/bin\/sh \/usr\/local\/bin\/actualiza.sh<\/code><\/p>\n<p>Y el archivo actualizar \/usr\/local\/bin\/actualiza.sh es lo siguiente<\/p>\n<blockquote><p>\n#!\/bin\/sh<\/p>\n<p>REPOSITORIO=rsync.gtlib.gatech.edu<br \/>\n# REPOSITORIO=mirrors.kernel.org<br \/>\n# REPOSITORIO=rsync.arcticnetwork.ca<br \/>\n# REPOSITORIO=mirror.astate.edu<br \/>\n# REPOSITORIO=mirror.stanford.edu\/mirrors<br \/>\n# REPOSITORIO=mirrors.usc.edu::pub<br \/>\n# REPOSITORIO=mirror.anl.gov<br \/>\n# REPOSITORIO=pubmirrors.reflected.net<br \/>\n# REPOSITORIO=mirrors.rit.edu<br \/>\n# REPOSITORIO=mirrors.cat.pdx.edu<br \/>\n# REPOSITORIO=mirror.chpc.utah.edu\/pub<\/p>\n<p>\/usr\/bin\/rsync -av &#8211;exclude debug  rsync:\/\/$REPOSITORIO\/centos\/5.2\/updates\/i386\/RPMS\/* \/home\/repositorio\/centos\/5.2\/updates\/i386\/RPMS\/<br \/>\n\/usr\/bin\/createrepo \/home\/repositorio\/centos\/5.2\/updates\/i386\/<\/p>\n<p>\/usr\/bin\/rsync -av &#8211;exclude debug  rsync:\/\/$REPOSITORIO\/centos\/5.2\/updates\/x86_64\/RPMS\/* \/home\/repositorio\/centos\/5.2\/updates\/x86_64\/RPMS\/<br \/>\n\/usr\/bin\/createrepo \/home\/repositorio\/centos\/5.2\/updates\/x86_64\/<\/p>\n<p>\/usr\/bin\/rsync -av &#8211;exclude debug  rsync:\/\/$REPOSITORIO\/centos\/5.2\/os\/i386\/CentOS\/* \/home\/repositorio\/centos\/5.2\/os\/i386\/CentOS\/<br \/>\n\/usr\/bin\/createrepo \/home\/repositorio\/centos\/5.2\/os\/i386\/<\/p>\n<p>\/usr\/bin\/rsync -av &#8211;exclude debug  rsync:\/\/$REPOSITORIO\/centos\/5.2\/os\/x86_64\/CentOS\/* \/home\/repositorio\/centos\/5.2\/os\/x86_64\/CentOS\/<br \/>\n\/usr\/bin\/createrepo \/home\/repositorio\/centos\/5.2\/os\/x86_64\/<\/p>\n<p>\/usr\/bin\/rsync -av &#8211;exclude debug  rsync:\/\/$REPOSITORIO\/centos\/5.2\/addons\/i386\/RPMS\/* \/home\/repositorio\/centos\/5.2\/addons\/i386\/RPMS\/<br \/>\n\/usr\/bin\/createrepo \/home\/repositorio\/centos\/5.2\/addons\/i386\/<\/p>\n<p>\/usr\/bin\/rsync -av &#8211;exclude debug  rsync:\/\/$REPOSITORIO\/centos\/5.2\/addons\/x86_64\/RPMS\/* \/home\/repositorio\/centos\/5.2\/addons\/x86_64\/RPMS\/<br \/>\n\/usr\/bin\/createrepo \/home\/repositorio\/centos\/5.2\/addons\/x86_64\/<\/p>\n<p>\/usr\/bin\/rsync -av &#8211;exclude debug  rsync:\/\/$REPOSITORIO\/centos\/5.2\/extras\/i386\/RPMS\/* \/home\/repositorio\/centos\/5.2\/extras\/i386\/RPMS\/<br \/>\n\/usr\/bin\/createrepo \/home\/repositorio\/centos\/5.2\/extras\/i386\/<\/p>\n<p>\/usr\/bin\/rsync -av &#8211;exclude debug  rsync:\/\/$REPOSITORIO\/centos\/5.2\/extras\/x86_64\/RPMS\/* \/home\/repositorio\/centos\/5.2\/extras\/x86_64\/RPMS\/<br \/>\n\/usr\/bin\/createrepo \/home\/repositorio\/centos\/5.2\/extras\/x86_64\/\n<\/p><\/blockquote>\n<p>Y listo, con esto van a tener un repositorio privado de CentOS en su LAN, totalmente transparente, us\u00e1ndose los mismos archivos default del Yum que vienen con el CentOS y sin tener problemas de l\u00ednea dedicada y de actualizaciones m\u00faltiples. Yo solo lo dejo para las \u00faltimas versiones, pero si es que desean pueden conservar todas las versiones que quieran, solamente deben cambiar la info en el archivo PHP.<\/p>\n<p>Espero algun comentario si es que lo prueban y si es que les funcion\u00f3 tan bien como a mi.<\/p>\n<p>Alex Celi<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hace mas o menos una a\u00f1o y medio tuve problemas de actualizaciones simult\u00e1neas de las versiones de CentOS en donde mi l\u00ednea dedicada se fue &#8220;al techo&#8221; porque todos mis servidores y estaciones de trabajo se pusieron a actualizar. La soluci\u00f3n en ese entonces fue crear mi propio repositorio de actualizaciones y meterle mano a [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,17,3],"tags":[],"class_list":["post-403","post","type-post","status-publish","format-standard","hentry","category-cipher","category-hacking","category-linux"],"_links":{"self":[{"href":"https:\/\/alexceli.org\/blog\/wp-json\/wp\/v2\/posts\/403","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alexceli.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alexceli.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alexceli.org\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/alexceli.org\/blog\/wp-json\/wp\/v2\/comments?post=403"}],"version-history":[{"count":0,"href":"https:\/\/alexceli.org\/blog\/wp-json\/wp\/v2\/posts\/403\/revisions"}],"wp:attachment":[{"href":"https:\/\/alexceli.org\/blog\/wp-json\/wp\/v2\/media?parent=403"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alexceli.org\/blog\/wp-json\/wp\/v2\/categories?post=403"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alexceli.org\/blog\/wp-json\/wp\/v2\/tags?post=403"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}