jueves, 12 de diciembre de 2013

Cambiando el nombre de host de un ordenador MAC

Suele ser habitual que los ordenadores mac tengan como nombre de computador el nombre completo y real del primer usuario y algunas decenas más de caracteres carentes de información útil. Cuando el usuario o el administrador intentan cambiar este nombre se encuentra con que no cambia en todos los aspectos. Por eso estuve buscando como sería la forma más correcta de cambiar completamente y correctamente el nombre de un computador mac en red de forma que todos los aspectos se cubrieran: nombre dns, nombre en la red windows, nombre bonjour, que se refleje en el promt del terminal.. etc

Editando la variable y ejecutándolo bien en terminal directamente o bien como un comando unix en el Remote Desktop esta es la elección de variables más útiles hasta ahora.
Espero que también lo sea para vosotros.
NOMBREMAC=MAC32-joaquin

sudo scutil --set ComputerName "$NOMBREMAC"
sudo scutil --set HostName "$NOMBREMAC"
sudo scutil --set LocalHostName "$NOMBREMAC"
sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server NetBIOSName -string "$NOMBREMAC"

lunes, 2 de septiembre de 2013

Impresoras que después de quedarse en pausa en MAC no se pueden re-activar sin contraseña

Error muy común y propio de entornos donde los usuarios no son administradores. Es debido en mi opinión a un fallo de diseño en el sistema de permisos que afecta principalmente a Snow Leopard e inferiores 10.6.x. En mi caso se produce cuando una impresora en red deja de responder por alguna causa. El sistema de impresión del MAC coloca la impresora en pausa pero en un estado que requiere de usuario y contraseña de administrador para reactivarlo. La solución facil es reiniciar pero no la más apropiada. Para poder reiniciar el servicio de impresión de la impresora que se ha quedado en pausa el usuario debe estar en el grupo lpadmin. ¿Como podemos saber si el usuario está en el grupo administrador de impresoras lp_admin? Lazando a través de Remote Desktop estos comandos Unix:
CONSOLEUSER=`who | grep console | awk '{ print $1  }'`
echo El usuario actualmente logeado es $CONSOLEUSER
echo comprobando si $CONSOLEUSER pertenece a al grupo lpadmin
dseditgroup -checkmember -m $CONSOLEUSER -t  user _lpadmin

¿Como podemos darle al usuario actualmente logueado permisos para reactivar la impresora? Añadiéndole a este grupo con este comando unix.
CONSOLEUSER=`who | grep console | awk '{ print $1  }'`
echo El usuario actualmente logeado es $CONSOLEUSER
echo dando permiso a $CONSOLEUSER para ser miembro del grupo lpadmin
(echo mipassword) | dseditgroup -o edit -p -a $CONSOLEUSER -u usuarioadministrador -t user _lpadmin

sábado, 31 de agosto de 2013

Instalar impresoras remotamente en linea de comandos o terminal en MAC


Boton de Imprimir
Actualizado:
Una de las grandes satisfacciones administrando mi centro de trabajo no ha sido con un avance especialmente complejo. Y me llegó cuando deje de darme paseos para borrar, instalar y modificar las opciones de las impresoras.

¿Porque voy a necesitar instalar las impresoras si mac las detecta?
La respuesta es que no detecta nada cuando por ejemplo están detrás de un servidor de impresión que en entornos corporativos es lo habitual.
A continuación os presento los comandos  que uso para esta labor.

Ver impresoras configuradas 

cat /etc/cups/printers.conf | grep DeviceURI

Borrar una impresora

Donde el nombre entre comillas es exactamente el mismo nombre que nos aparece en la lista de impresoras en la configuración.

/usr/sbin/lpadmin -x "HP4650"

Instalar una nueva impresora

Este método solo me ha dado algún problema con las impresora con drivers UFS debido a que es necesario instalar los drivers apropiados, antes de enviar los comandos que realizan la instalación y a veces estas instalaciones atípicas requieren además de opciones que hay que considerar particularmente en cada caso.
Sin embargo para la impresoras con PPD que son la inmensa mayoría es un procedimiento excelente.
Los drivers de HP por ejemplo ya están el el sistema por defecto en Snow Leopard y a partir de Mountain Lion es necesario realizar al menos una vez una instalación local. Pero si enviamos como propongo la instalación vía comandos los drivers se descargarán automáticamente la primera vez que el usuario haga uso de la impresora. Sin embargo si el usuario no es administrador le pedirá contraseña. Es un detalle que tengo todavía pendiente de solucionar el cambiar los permisos para que al usuario no administrador se le descarguen los drivers automáticamente sin solicitar contraseña.

El uso del comando es:

/usr/sbin/lpadmin -p "Nombre de impresora" -E -v lpd://"ip o DNS del servidor de impresion"/"cola de impresión" -P "Ruta al archivo PPD" -D "Descripción"

#Instalar impresoras desde linea de comandos
#en mountain lion los driver se descargaran automaticamente si el user es admin
#Si no lo es la primera descarga del driver al intentar imprimr pedirá la contraseña de administardor
#EJEMPLO para una HP 2055DN
#/usr/sbin/lpadmin -p HP2055DN -E -v lpd://miservidordeimpresion.miempresa.es/HP2055DN -P /Library/Printers/PPDs/Contents/Resources/HP\ LaserJet\ P2055d.gz -D HP2055DN
/usr/sbin/lpadmin -p HP4525 -E -v lpd://impresoras.miempresa.es/HP4525 -P /Library/Printers/PPDs/Contents/Resources/HP\ Color\ LaserJet\ CP4020\ CP4520\ Series.gz -D HP4525

Ahora ya tenemos instalada la impresora pero nos falta que las opciones instaladas correspondan con las que tiene la impresora.
Aunque a veces he usado opciones mas elegantes como sustituir las cadenas de cada una de las opciones en el archivo de confirguración yo he optado finalmente por la mas sencilla que consiste en instalar en el computador propio la impresora en cuestión y después copiar el archivo que contiene las configuraciones de nuestro ordenador en /private/etc/cups/ppd/NOMBRE_DE_IMPRESORA.ppd  al computador APPLE destino en la misma ubicación.

jueves, 21 de marzo de 2013

Creada aplicación para permitir a los usuarios de apple configurar el servidor de actualizaciones de su mac, especialmente pensado para reposado


Icono de la aplicación SusConfig
Cuando cree mi primer post no pensé que sería yo mismo el que tendría que desarrollar una aplicación para mis usuarios.
Basado en el trabajo del departamento de informática de Iowa State University he creado esta aplicación para permitir a los usuarios cambiar el servidor de actualizaciones de de su computador mediante una sencilla aplicación. Aunque he tratado de ponerme en contacto con ellos para especificar la licencia del software no he recibido contestación por lo que supongo que lo consideran un trabajo demasiado pequeño como para preocuparse por el.
Esta detecta  el sistema operativo en el que se encuentra corriendo permitiendo especificar diferentes repositorios para aquellos que necesitan tener control sobre las actualizaciones concretas que se van aplicando a sus apple. Por defecto esta configurado para que tome las actualizaciones por defecto.
La aplicación llamada Apple Software Update Server Configurator  ,  SUSConfig  se puede descargar del repositorio en github que he creado para que quien quiera pueda realizar modificaciones.
Para ser mi primera incursión en Perl no esta mal aunque más que a la gente de Iowa hay que agradecérselo al estupendo interfaz gráfico Pashua que ha creado Carsten Blüm
Las mejoras con respecto a la inicial son bastantes:


  • Especialmente adaptada para funcionar con servidores de repositorios reposado
  • Añadidas variables para añadir repositorios específicos para cada versión de SO
  • Añadida detección de Sistema operativo
  • Añadido toda la programación necesaria para la facil personalización de la aplicación modificando unas pocas variables en la cabecera del script
  • Cambiado el código para la creación facil de nuevos catálogos de actualización para los nuevos sistemas operativos
  • Mejorada la detección del catalogo de actualización del Mac usando el dominio de la propia organización


SusConfig screenshot
La he programado  para que sea fácilmente modificable para las necesidades de cada organización modificando el archivo:
SUSConfig.app/Contents/MacOS/SUSConfig
Podemos cambiar facilmente los valores en la cabecera del mismo y adaptarlos a nuestras necesidades.

# Fill your Own data
my $ownserver = "miservidor.miempresa.es";
my $ownport = "80";
my $owncompany= "MiOrganizacion's";


 Los siguientes valores están correctos para cualquier servidor reposado pero pueden ser cambiados según las necesidades y son lo que serán enviados al computador según el sistema operativo detectado.

# Modify to your own reposado branches if necessary, they are ok by default for reposado server
my $tigerurl = "content/catalogs/index.sucatalog";
my $leopardurl = "content/catalogs/others/index-leopard.merged-1.sucatalog";
my $snowleopardurl = "content/catalogs/others/index-leopard-snowleopard.merged-1.sucatalog";
my $lionurl = "content/catalogs/others/index-lion-snowleopard-leopard.merged-1.sucatalog";
my $mountainlionurl = "content/catalogs/others/index-mountainlion-lion-snowleopard-leopard.merged-1.sucatalog";

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";