sábado, 9 de febrero de 2013

Creando servidor repositorio de actualizaciones de apple para tus MAC con Linux y Reposado

¿Tu caudal de Internet está saturado por los macs que se están actualizando todo el día? ¿Quieres tener más control sobre las actualizaciones de tus Mac? Entonces este artículo es para tí. 

Aunque forma más "correcta" es tener un Mac OSX Server última versión, a veces ya sea por que no tienes esa máquina que soporta la última versión de apple o porque necesitas más flexibilidad tienes que tirar de otras opciones.
La más recomendada es reposado. Un software de código abierto creado por los administradores apple de Walt Disney  para tener todos sus equipos actualizados sin necesidad de consumir ancho de banda y poder decidir que actualizaciones de apple deben ser aplicadas y cuales no.

Reposado solo necesita: una máquina unix con Python 2.5 a 2.7,  el ejecutable curl , un servidor web y espacio para los updates de apple.  (Actualmente 130 GB necesitados,  200 GB sería un espacio recomendable con vistas a futuro)

Aunque tambien podemos instalarlo en un MacOSX aunque no sea server usando el web server integrado, o MAMP e instalando Python  y curl con meta-distribuciones  como  FINK o MACPORTS ,llegados a este punto parece más sencillo y económico usar una distribución de linux a la que no tendremos que hacerle ninguna instalación adicional ya que estas herramientas vienen de serie en distribuciones como OpenSuSe o Ubuntu.

Una vez realizada la instalación solo tendremos que configurar los clientes para que cojan los paquetes de actualización solo o preferentemente de nuestro servidor. En el departamento de IT de la IOWA STATE UNIVERSITY encontraréis como pasar en comandos una configuración y un programa gráfico para alterar el repositorio que seguramente os será muy facil de modificar para vuestras necesidades. ¡Actualización! en la siguiente entrada de este blog facilito uno modificado por mi especialmente válido para reposado.

Borrar los catálogos de actualización

sudo defaults delete /Library/Preferences/com.apple.SoftwareUpdate CatalogURL

Activar vuestro propio catálogo de actualización en un computador

sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate CatalogURL \
 http://reposado.tudominio.es/index.sucatalog

En mi caso la planta de computadores apple es muy rebelde y móvil, estando muchos de ellos no administrados. Por eso necesitaré interceptar todas la peticiones de actualización que se produzcan en mi red para evitar que consuman caudal innecesario y acelerar las instalaciones. Otra solución sería tener en mi red un proxy transparente que cacheara estas y todas las demás peticiones web, pero esta opción en mi caso no es posible.

Por eso implantaré un servidor de actualizaciones de APPLE con  reposado y cambiaré en mis dns  corporativas la dirección de los servidores de actualizaciones de apple (swscan.apple.com) para que apunten directamente a mi nuevo servidor, de forma que todas las actualizaciones cuando los mac estén en mi red las tomarán de este servidor

Como usamos preferentemente máquinas virtuales, instalaré una pequeña open suse 11 en un disco virtual de 10GB y montaré en un directorio del linux uno de los servidores de ficheros, en mi caso usando samba. Eso hará mucho más sencilla la backup y resturación de la máquina y ahorra espació innecesario en el servidor de máquinas virtuales ya que siempre usamos discos virtuales de asignación de espacio fija.

Para la isntalación del linux yo hare una instalación lo más reducida posible de OpenSuSe y eligiré estos paquetes adicionales después de la instalación usando la herramienta Yast.
  • apache2 : El servidor web y las dependencias que nuestra distribución nos exija.
  • w3m : un sencillo navegador web en modo texto que suele instalar Suse por defecto
  • mc : Un gestor de archivos en modo terminal muy intuitivo y con un sencillo editor de texto
  • Python : Simplemente me aseguro de que ya esta instalado

Montando una recurso compartido windows en Linux

Crearé el punto de montaje deseado con:

mkdir /mnt/data

E intentaré un montaje de prueba para ver que todo va bien

mount -t cifs //miserver.es/recurso -o username=jorgev,password=mipass  /mnt/data

Es importante tener un user y password que sean permanentes  Si no cuando caduque nuestra contraseña el servicio dejará de funcionar.

Si todo ha ido bien podemos añadir esta linea en el último fichero por ejecutar al arranque de nuestra distribución o  añadir al /etc/fstab de nuestro linux esta linea.

//mifilesserver.es/recurso /mnt/data cifs rw,user,username=jorgev,password=xxxxxx 0 0

Instalando el sistema de actualizaciones apple con reposado

Una vez que se ha montado sin errores creamos los directorios que contendrán los repositorios

mkdir /mnt/data/reposado
mkdir /mnt/data/reposado/html
mkdir /mnt/data/reposado/metadata

Nos colocamos en el directorio en el que va a estar reposado  y nos bajamos el código del mismo
El directorio no tiene porque ser este , puede estar en cualquier ubicación y yo personalmente he usado el sistema de repositorios git en vez de bajarmelo en un zip que resulta más sencillo para actualizar reposado. Pero entender e instalar este sistema de repositorios es posible que sea sobrepasar el propósito de este manual. Por eso en este ejemplo nos descargaremos de su web en github simplemente el comprimido en formato zip

cd /opt/
wget https://github.com/wdas/reposado/archive/master.zip
unzip master

Y borramos el archivo descargado

rm master master.zip 

Cambiamos al directorio configurado y configuramos reposado con los directorios que ya hemos preparado.

cd /opt/reposado-master/code/
./repoutil --configure 

En el caso de ejemplo que nos ocupa

reposado:/opt/reposado-master/code # ./repoutil --configure
Path to store replicated catalogs and updates [None]: /mnt/data/reposado/html
Path to store Reposado metadata [None]: /mnt/data/reposado/metadata
Base URL for your local Software Update Service
(Example: http://su.your.org -- leave empty if you are not replicating updates) [None]: http://reposado.midominio.es

Ahora tendremos que sincronizar nuestro repositorio con el de Apple. La primera vez tardará unas cuantas horas en bajarse los 100 GBs   en el momento de escribir estas lineas.

reposado:/opt/reposado-master/code # ./repo_sync
repo_sync run started
Downloading 1124385 bytes from http://swscan.apple.com/content/catalogs/index.sucatalog...
300 products found in http://swscan.apple.com/content/catalogs/index.sucatalog
Downloading 901120 bytes from http://swcdn.apple.com/content/downloads/46/57/022-3271/rmqY4rJMxLgmYp8fMxJCfB22drKT5CMvxC/AppleHDVCodec.tar...
Downloading 1361920 bytes from http://swcdn.apple.com/content/downloads/46/57/022-3271/rmqY4rJMxLgmYp8fMxJCfB22drKT5CMvxC/PluginManager.tar...
Downloading 849920 bytes from http://swcdn.apple.com/content/downloads/46/57/022-3271/rmqY4rJMxLgmYp8fMxJCfB22drKT5CMvxC/DVCPROHDCodec.tar..
Downloading 706560 bytes from http://swcdn.apple.com/content/downloads/46
...

Configurando el servidor web

Ha llegado el momento de configurar nuestro servidor de actualizaciones, Si no manejais mucho el vi os recomiendo instalar el mc y desde consola tendréis accesible una de sus mejores utilidades el intuitivo y facil editor mcedit.

mcedit /etc/apache2/default-server.conf

Y con el cambiaremos las dos lineas donde aparece el directorio al que debe apuntar nuestro servidor web

DocumentRoot "/srv/www/htdocs"
<Directory "/srv/www/htdocs">

por

DocumentRoot "/mnt/data/reposado/html"
<Directory "/mnt/data/reposado/html">

Ya podemos iniciar/reiniciar el servidor web y hacer algunas pruebas en el caso de OpenSuse la forma más recomendad es con:

service apache2 restart

testeamos si esta correcto por ejemplo solicitando el catalogo de snow leopard como nos indican en la documentacion de reposado, con el navegador web integrado w3m

w3m http://localhost/content/catalogs/others/index-leopard-snowleopard.merged-1.sucatalog

Automatizándolo todo

Si vemos algo parecido a un plist, todo esta correcto y  podemos automatizar la actualización de paquetes por ejemplo de esta forma, haciendo un enlace simbólico a los directorios de tareas programadas de OpenSuse.

ln -s  /opt/reposado-master/code/repo_sync  /etc/cron.hourly/repo_sync

Si hacemos el enlace a este directorio ejecutará la tarea de sincronización cada hora y ya solo nos queda abrir el firewall de nuestra opensuse para que deje pasar las peticiones web y automatizar el arranque del servidor web , para ello usamos la utilidad:

yast -> sistema -> servicios del sistema

Y activamos el apache en el arranque que por defecto probablemente suele estar desactivado

Por último abrimos el cortafuegos del servidor apache, ya que probablemente lo tenemos cerrado
yast -> Seguridad y usuarios -> Cortafuegos  -> Allowed services
y añadimos el http server

Ahora solo tenemos que cambiar nuestros DNS locales para que swscan.apple.com apunte a la dirección ip de nuestro nuevo servidor.
En unix usaría http://www.aspl.es/ext-dns/ y si usamos cisco en este enlace encontraréis información muy útil.  http://packetsneverlie.blogspot.com.es/2010/08/dns-rewrite.html
Caso contrario tendremos que configurar nuestros mac engañado  en su archivo /etc/hosts  sobre la dirección de swscan.apple.com o tendremos que orientar a cada máquina con este comando de donde debe actualizar para que su nuevo servidor de actualizaciones sea nuestro computador.:

sudo defaults write /Library/Preferences/com.apple.SoftwareUpdate CatalogURL http://reposado.tudominio.es/content/catalogs/index.sucatalog
Tenemos que recordar que cada versión de OSX con Reposado usa un directorio de catalogo distinto. 
tiger = "content/catalogs/index.sucatalog";
leopard = "content/catalogs/others/index-leopard.merged-1.sucatalog";
snowleopard = "content/catalogs/others/index-leopard-snowleopard.merged-1.sucatalog";
lion = "content/catalogs/others/index-lion-snowleopard-leopard.merged-1.sucatalog";
mountainlion = "content/catalogs/others/index-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog";



No hay comentarios:

Publicar un comentario