Mostrando entradas con la etiqueta macosx. Mostrar todas las entradas
Mostrando entradas con la etiqueta macosx. Mostrar todas las entradas

domingo, febrero 03, 2019

Actualizar macOS desde la línea de comandos

macOS tiene una herramienta en línea de comandos para poder controlar las actualizaciones. Como muchas otras funciones del sistema operativo, normalmente accedemos a ella desde la interfaz gráfica, pero Apple siempre ha proporcianado una herramienta en línea de comandos que realiza la misma función. En el caso de las actualizaciones, la herramienta es softwareupdate. Con ella se pueden realizar toda la gestión de actualizaciones del sistema operativo. Las órdenes que se listan a continuación se tienen que ejecutar como superusuario (usando sudo)

Para comprobar las actualizaciones que tiene la máquina pendiente se puede hacer con la opción -l

bash-3.2$ sudo softwareupdate -l
Password:
Software Update Tool

Finding available software
No new software available.

Si se quiere instalar todas las actualizaciones que hay en el sistema se puede usar la opción -a. Por otra parte, se puede pasar en la línea de comandos aquellos paquetes que se quieran actualizar (obtenidos con -l). Si se quiere que el sistema se reinicie tras instalar los paquetes se puede usar -R: Ejemplo

bash-3.2$ sudo softwareupdate -i -a -R

Además se puede comprobar si las actualizaciones están automáticas están instaladas (--schedule) , bajarse las actualizaciones son instalarlas (-d / --download) o ignorar ciertos paquetes a actualizar (--ignore)

lunes, noviembre 05, 2018

Apple T2 Security Chip: ¿Se puede recuperar los datos de un SSD cifrado?

(Gracias Jaime) Me apunta Jaime que Apple ha dejado una puerta para poder recuperar los datos del SSD de un MMac en caso de que se estropee parte de la placa base. Como comentaba en Apple T2 Security Chip Overview, por defecto el chip T2 del Mac cifrará el contenido de la SSD aunque no se haya configurado FileVault. Bien, pues suponiendo que parte de la circuitería de la placa base funcione, especialmente la parte de Secure Enclave del T2 y el bus thunderbolt funcione, parece ser que Apple tiene un modo de funcionamiento que permitiría extraer los datos del SSD del ordenador.

Esto, sin embargo, presenta de nuevo un problema: Si te roban el portátil y no tienes activado FileVault, podrían extraer tus datos sin dificultad. En todo caso, el T2 lo que permitiría es evitar que alguien use la SSD en otro ordenador, atando esa SSD a un ordenador determinado.

El chip T2 está involucrado en el cifrado del disco (su motor de cifrado está en el bus que comunica la CPU/RAM con el SSD), lo que sería interesante ver es como la clave que se genera para cifrar el disco depende de las claves del T2 o es independiente.

martes, octubre 23, 2018

Darling: Capa de emulación de binarios de OS X en Linux

Darling es un software que provee una capa de emulación de Mac OS X sobre Linux. Su objetivo es permitir la ejecución de binarios de OS X sin modificar sobre Linux. En el estado actual del proyecto, no puede ejecutar aplicaciones qure usen el entorno gráfico de OS X, pero si puede ejecutar herramientas en línea de comando como toda las herramientas de compilación en línea que incluye el XCode. Adicionalmente el proyecto tiene un componente llamado darling dmg. Ambos proyectos están publicados con la licencia GPL3.

Si fuera capaz de correr algo similar al entorno de OS X 10.4 (Tiger) o 10.5 (Leopard), me encantaría. A pesar de los años que llevo usando OS X (actualmente usio High Sierra), esas dos versiones del sistema, sumado a la línea de comando,cubrían muchas de mis necesidades. Si eso le añadimos un API Carbon y el Cocoa, podía ser entretenido :)

Aunque todavía le queda mucho camino por recorrer, Wine empezó exactamente igual y a día de hoy es capaz de ejecutar un amplio catálogo de software.

miércoles, octubre 17, 2018

Macbook Pro 2018 y múltiples monitores: problemas de imagen

Durante estos últimos cinco años he estado usando un Macbook Pro de finales de 2013. Lo tenía conectado a dos monitores Dell modelos U2415 uno usando el puerto HDMI y otro con el Display Port. En estos años de uso intensivo no he tenido ningún tipo de problemas de imagen con los monitores.

Recientemente, me han cambiado el ordenador del trabajo a un Macbook Pro de última generación. Este ordenador utiliza puertos USB-C para conectarse con periféricos, incluido los monitores. Con dos cables USB-C a DisplayPort puedo conectar ambos monitores al Macbook y seguir trabajando como hacía con el ordenador viejo. Sólo que de serie, la calidad de imagen deja bastante que desear: halos en el renderizado de las letras, trazas azules en las mismas. Una calidad de imagen pésima.

Tras buscar un rato por Internet encontré este artículo donde explica el porqué del problema y cómo se soluciona.

Los monitores actuales pueden comunicarse con los dispositivos a los que están conectados. Esto se consigue transmitiendo la información definida en el Extended Display Identification Data a la tarjeta gráfica del ordenador por un bus. Por desgracia, los monitores no siempre transmiten esa información de manera correcta a los ordenadores, y pueden aparecer algunos artefactos como los que ocurren entre el Macbook Pro y esos monitores Dell. Concretamente, en el caso del U2415 está transmitiendo mal la manera de codificar el color, diciendo que soporta el espacio de color YCrCb cuando realmente debe ser RGB. El Mac prefiere usar el primer sistema - se supone que el monitor le ha dicho que soporta ambos - y la calidad de imagen se degrada.

¿Cómo puede solucionarse ese problema?. Bien, pues es necesario sobrescribir la información EDID que ha mandado el monitor con una configuración que desactive el espacio de color YCrCb para ese monitor. Es necesario leer la información que nos da el monitor, parchearla y posteriormente hacer que el Mac la utilice en vez de la que le está proporcionando el monitor. Para ello es necesario generar unos ficheros de configuración que se deben de instalar (al menos en High Sierra) en:

/System/Library/Displays/Contents/Resources/Overrides

Este directorio se encuentra protegido por el sistema, con lo cual será necesario arrancar en modo de recuperación (cmd - r), ejecutar un terminal y copiar la información a dicho directorio.

¿Cómo generamos los archivos de configuración necesarios?. Con ayuda de este script. Lo bajamos, lo ejecutamos en nuestro ordenador y nos generará unos directorios y ficheros con la información EDID de los monitores que tengamos conectados, parcheando la misma para que use sólo el espacio de color RGB. Por ejemplo, en el caso de mi ordenador me genera la siguiente estructura

DisplayVendorID-10ac
  DisplayProductID-a0b8
  DisplayProductID-a0bc

Arrancando el sistema en modo de recuperación y copiando ese directorio:

cp -r DisplayVendorID-10ac /System/Library/Displays/Contents/Resources/Overrides

Sólo debe de copiarse la configuración generada para aquellos monitores que tengamos problemas. Una vez copiada la configuración, reseteamos el ordenador para que tenga efecto.

jueves, mayo 17, 2018

Configurar la captura de pantalla en OS X

OS X tiene una combinación de teclas que permite hacer una captura de toda la pantalla o de una de las ventanas. Si se quiere captura la pantalla completa se utiliza la secuencia shift + cmd + 3, mientras que si se quiere capturar una ventana la combinación de teclas a usar es shift + cmd + 4. Por defecto las capturas de pantalla se almacenan en formato PNG en el escritorio.

La carpeta donde se guarda las capturas de pantalla puede cambiarse fácilmente. Por ejemplo si se quiere que se almacenen en ~/Desktop/capturas:

mkdir -p ~/Desktop/capturas
defaults write com.apple.screencapture location ~/Desktop/capturas
killall SystemUIServer

Se puede cambiar el formato en el que se almacenan las imágenes. Por ejemplo, para que capture en formato jpg:

defaults write com.apple.screencapture type jpg
killall SystemUIServer

El tipo de formato puede ser jpg, png - por defecto - , pdf, tiff o gif.

Se puede cambiar el nombre del fichero de pantalla, cambiando la propiedad name:

defaults write com.apple.screencapture name "captura"
killall SystemUIServer

Referencias

domingo, enero 22, 2017

Crear usuarios en OS X desde la línea de comandos

Para añadir desde la línea de comandos un usuario en MacOS X es necesario usar el comando dscl - Directory Service command line utility -, cuya misión es interaccionar con el servicio de directorios de la máquina local o de una máquina remota.

Por ejemplo, para listar todos los usuarios que hay en la máquina se puede usar la siguiente orden que generará la salida que se muestra en el segundo bloque.

dscl . -list /Users
...
_amavisd
_appleevents
_appowner
_appserver
...

Si se quiere ver todos los atributos de los registros de usuario se puede ejecutar con las siguientes opciones y puede verse parte de la salida en el siguiente bloque:

dscl . -readall /Users
GeneratedUID: FFFFEEEE-DDDD-CCCC-BBBB-AAAA00000053
NFSHomeDirectory: /var/virusmails
Password: *
PrimaryGroupID: 83
RealName:
AMaViS Daemon
RecordName: _amavisd amavisd
RecordType: dsRecTypeStandard:Users
UniqueID: 83
UserShell: /usr/bin/false

Para añadir un usuario nuevo, será necesario crear un nuevo registro bajo /Users y añadir una serie de atributos que configuren la cuenta. Para proceder a esta creación y modificación de atributos, será necesario ejecutar el comando dscl desde una cuenta que tenga los privilegios adecuados. Si se quiere crear un usuario mldonkey, cuyo directorio $HOME sea /Users/mldonkey, con contraseña password1234, los pasos necesarios son:

# Crear el nuevo registro
sudo dscl . -create /Users/mldonkey
# Añadir el atributo que define el shell
sudo dscl . -create /Users/mldonkey UserShell /bin/bash
# Crear el atributo donde se guarda el nombre
sudo dscl . -create /Users/mldonkey RealName "Usuario par ejecutar mldonkey"
# Añadir el directorio $HOME
sudo dscl . -create /Users/mldonkey NFSHomeDirectory /Users/mldonkey

Ahora, nos falta dos atributos importantes: El UniqueID, el número que define el uid del usuario y el PrimaryGroupID , el número que identifica el grupo primario del usuario. Normalmente, usamos el grupo llamado staff, pero será necesario ver cual es su GroupID. Para ello con el siguiente comando nos devolverá el valor que se necesita:

dscl . -read /Groups/staff|grep PrimaryGroupID
PrimaryGroupID: 20

El un sistema de tipo Unix, el uid es único. Normalmente, OS X asigna los uid de usuarios normales a partir de 500, y este debe ser único. ¿Cómo se puede generar el siguiente libre?. Pues con esta orden:

dscl . -readall /Users|grep UniqueID |awk -v max=0 '{if($2>max){v=$2; max=$2}} END{print v+1 }'

Una vez que se tienen esos dos números, se añaden al registro los atributos, se establece la password, se crea el directorio raíz del usuario y se le ponen los permisos adecuados. Por ejemplo, en mi sistema el siguiente uid libre es el 507 y el PrimaryGroupID de staff es 20

# Añadir el uid
sudo dscl . -create /Users/mldonkey UniqueID 507
# Añadir el atributo con el grupo primario
sudo dscl . -create /Users/mldonkey PrimaryGroupID 20
# Establecer la password. Ni se te ocurra usar una como la de ejemplo
sudo dscl . -passwd /Users/mldonkey password1234
# Crear el directorio $HOME
sudo mkdir /Users/mldonkey
# Establecer permisos de usuario en el $HOME
sudo chown mldonkey /Users/mldonkey
# Establecer el grupo en el $HOME
sudo chgrp staff /Users/mldonkey
# Establecer los permisos
sudo chmod 755 /Users/mldonkey

Por último, decir que mejor hacer un script que se encargue de todo :)

miércoles, diciembre 02, 2015

Mac OS X: Configurar paths y uso de path_helper

Estaba configurando algunos directorios en la ruta de búsqueda de ejecutables (PATH) de mi OS X y en principio recurrí a modificar mi $HOME/.profile - uso bash como shell - añadiendo las nuevass rutas a la variable PATH, si estas rutas no están añadidas con un código similar al siguiente:

DIRS=(/usr/local/java/maven/bin)
for d in ${DIRS[@]}; do
    if [[ !  ":$PATH:" == *":$d:"* ]]; then
       PATH=$PATH:$d
    fi
done
export PATH

Normalmente, si quería que ese PATH estuviera disponible en todo el sistema, solía modificar uno de los scripts en /etc que se ejecutan cuando el usuario hace login. Sin embargo, viendo el valor de la variable en mi OS X me di cuenta que había algunos directorios en el PATH que habían sido añadidos por alguno de los paquetes que he ido instalado en el sistema a lo largo del tiempo. He buscado qué mecanismo utiliza OS X para establecer esas ruta en la configuración, encontrando la respuesta en en esta entrada de StackOverflow: OS X utiliza un mecanismo llamado path_helper para configurar la variable PATH.

path_helper lee los directorios de búsqueda por defecto de ejecutables de /etc/paths y luego los ficheros que estén en /etc/paths.d y compondrá las rutas de búsquedas definidas en la variable PATH de acuerdo al contenido de los mismos.

Si se quiere añadir una ruta, por ejemplo /usr/local/java/maven/bin al sistema, basta con crear un fichero /etc/path.d/maven donde cada línea especifica una ruta donde se deben de buscar los ejecutables y path_helper se encargará del resto.

Este mecanismo también se usa para las rutas de las páginas de manual. Las rutas por defecto se definen en /etc/manpaths y se pueden añadir otras en el directorio /etc/manpaths.d

La ventaja de este tipo de mecanismos es que nos permite no tener que tocar scripts del sistema que pueden machacarse con posteriores actualizaciones.

viernes, septiembre 04, 2015

tmutil: Controlar Time Machine desde la línea de comandos (I)

Introducción

Time Machine es una funcionalidad de copias de seguridad incluida en MacOS X desde la versión 10.5 (Leopard). Permite realizar las copias de seguridad tanto a discos duros locales o a sistemas compartidos en red compatibles con el software. Normalmente se controla desde la interfaz gráfica, pero existe una utilidad de línea de comandos que permite su control.

En el caso de Time Machine, la herramienta de línea de comandos que se encarga del control de las copias de seguridad es tmutil. Normalmente, este comando necesita ejecutarse con permisos de superusuario para realizar su función.

La estructura del comando es la siguiente

tmutil comando [parametros]

Manejo de los discos donde se van a realizar las copias de seguridad

El primer paso que hay que dar para poder utilizar Time Machine es configurar los volúmenes donde se van a realizar las copias de seguridad. Si tenemos un que está montado en /Volumes/My Passport y lo queremos usar para copiar de seguridad, se añade al sistema con el comando setdestination -a path donde en nuestro ejemplo path es /Volumes/My Passport. Con ayuda del comando destinationinfo se pueden ver los volúmenes que están añadidos. El comando destinationinfo permite el uso del argumento -X que vuelca la información en formato XML plist.

root#tmutil  setdestination  -a "/Volumes/My Passport"
root#tmutil  destinationinfo
> ==================================================
Name          : Backups
Kind          : Local
Mount Point   : /Volumes/Backups
ID            : C54F9BEE-AE4F-4E7B-BD9E-6AA18CDD3F83
====================================================
Name          : My Passport
Kind          : Local
Mount Point   : /Volumes/My Passport
ID            : 1044185E-607C-45A6-A5C2-E96BD7C0D836

De la información que vuelca destinationinfo hay dos puntos importantes:

  • Cada volumen usado como copia de seguridad está identificado por un uuid único.
  • Se utiliza > para señalar cual ha sido el volumen donde se ha intentado realizar la última copia de seguridad del sistema en el caso de que haya varios volúmenes disponibles. En el ejemplo anterior puede verse que que el disco con ID C54F9BEE-AE4F-4E7B-BD9E-6AA18CDD3F83 es el último donde se ha realizado dicha copia.

Para quitar un volumen que se está usando para copia de seguridad se utiliza el comando removedestination id, siendo id el identificador que se obtiene. Por ejemplo, para eliminar el volumen /Volumes/My Passport

root#tmutil removedestination  1044185E-607C-45A6-A5C2-E96BD7C0D836
root#tmutil destinationinfo
====================================================
Name          : Backups
Kind          : Local
Mount Point   : /Volumes/Backups
ID            : C54F9BEE-AE4F-4E7B-BD9E-6AA18CDD3F83

Realizar una copia de seguridad

Realizar la copia de seguridad es muy sencillo. Basta con utilizar el comando startbackup.

root#tmutil startbackup

Una vez lanzada la orden anterior, tmutil contactará con el servidor de copias de seguridad y comenzará la operación de copia. La orden anterior lanza la copia en segundo plano, retornando si no ha habido ningún error. Una cosa curiosa que ocurre al lanzar una copia así es que en caso de error, este aparece en la interfaz gráfica.

Esta orden admite una serie de parámetros

startbackup [-a | --auto] [-b | --block] [-r | --rotation] [-d | --destination dest_id]

  • -a La copia de seguridad se realiza de manera similar a aquellas que el sistema programa.
  • -b tmutil espera a la finalización de la copia de seguridad para acabar la ejecución.
  • -r tmutil rotará las copias de seguridad de manera automática en el volumen donde se realice la misma.
  • -d Permite selecionar a través de su identificador el disco donde se quiere que se realice la copia de seguridad.

Por ejemplo, supongamos que se quiere realizar una copia de seguridad del sistema en el disco con id C54F9BEE-AE4F-4E7B-BD9E-6AA18CDD3F83 y esperar a que esta termine:

root#tmutil startbackup -b -d C54F9BEE-AE4F-4E7B-BD9E-6AA18CDD3F83

Restaurar copias de seguridad

El comando que permite la restauración de un fichero determinado es restore src dst. Su sintaxis es la misma que la utilidad cp. Los ficheros o directorios dentro de la copia de seguridad que se quiere restaurar especificado por src y el destino especificado por dst. Por ejemplo si quisiera restaurar dentro de una copia determinada el directorio /Users/terron al directorio /tmp

root#tmutil restore
/Volumes/Backups/Backups.backupdb/menzoberrazan/Latest/Users/terron /tmp

Terminología de Time Machine

Cuando se están realizando copias usando discos locales Time Machine crea en en el mismo la siguiente estructura de directorios

Backups.backupdb
    machine_name
        copia 1
        copia 2
           ⋮
        copia n
        Latest

La terminología que usa Apple para esta estructura es la siguiente

  • Al directorio Backups.backupdb se le llama backup store, que podría traducirse como almacén de copias de seguridad.
  • machine_name es un directorio que contiene todas las copias de seguridad de una máquina determinada. En el caso de estar usando un disco local para almacenar las copias de seguridad, cada directorio contiene las copias de seguridad de una máquina.
  • Dentro de cada máquina, se tiene cada una de las copias de seguridad que se han realizado y un enlace simbólico,Latest, que apunta a la última copia realizada.

A continuación se puede ver un ejemplo de esta estructura:

baldurgate:menzoberrazan terron$ls -al
total 8
drwxr-xr-x@ 4 terron  staff  136 28 ago 12:39 .
drwxr-xr-x+ 7 terron  staff  238  4 feb  2012 ..
drwxr-xr-x@ 7 terron  staff  238 20 may  2010 2010-05-20-225851
lrwxr-xr-x  1 terron  staff   17 28 ago 12:39 Latest -> 2010-05-20-225851
baldurgate:menzoberrazan terron$pwd
/Volumes/Backups/Backups.backupdb/menzoberrazan
baldurgate:menzoberrazan terron$

miércoles, agosto 19, 2015

Controlar el portapapeles de OS X desde la línea de comandos

Mac OS X tiene dos comandos , pbcopy y pbpaste ,que permiten copiar manejar el portapapeles desde la línea de comandos. pbcopy leerá la entrada estándar almacenando los datos en portapapeles, mientras que pbpaste volcará el contenido del portapapeles por la salida estándar.

Por ejemplo, para copiar al portapapeles la salida del comando ls:

baldurgate:Documents terron$ls | pbcopy

Si se quiere copiar el contenido del portapaples a un fichero:

baldurgate:Documents terron$pbpaste > fichero.txt

Por otra parte, tener en cuenta que pbcopy intenta averiguar si los datos que va a copiar al portapapeles utilizan el formato EPS o RTF. En dicho caso, los copia con esos formatos. pbpaste por otra parte comprueba también los datos del portapapeles antes de volcarlos a la salida estándar: comprobará que es texto plano, sino si es EPS y por último RTF. Si los datos no están en ninguno de estos formatos, no vuelca nada.

Hay que tener en cuenta que estos dos comandos utilizan la variable de entorno LANG para determinar la codificación que deben de usar tanto en la entrada y la saluda.

viernes, mayo 01, 2015

VMware Fusion: Redes

Esta es la segunda de una serie de entradas donde quiero describir la configuración de las redes que utiliza VMware Fusion

Fusion tienen tres mecanismos para virtualizar las redes.

  • Usar un puente que se conecta a una de las interfaces físicas de la máquina anfitriona. VMware se encargará de pasar las tramas desde las máquinas virtuales a la red física. La máquina virtual estará en el mismo dominio de difusión que la máquina anfitriona donde se ejecuta Fusion. El proceso donde está esta funcionalidad es vmnet-bridge y vmnet-netifup
  • Redes privadas. Este es el tipo de redes que se describen en el post anterior. Estas redes las controlan el proceso vmnet-dhcpd
  • Redes NATeadas. Son redes privadas donde existe un mecanismo de traducción de direcciones donde las direcciones IP pueden ser enrutadas al exterior al usar este mecanismo para cambiar las direcciones IP origen y destino según corresponda. Además de los procesos del punto anterior, usa el proceso vmnet-natd para realizar estos procesos de tradución.

Cuando se instala por primera vez, Fusion va a crear dos interfaces virtuales, vmnet1 y vmnet8. vmnet1 es la intefaz host only, es una red que no se ve fuera del entorno de virtualización. Varias máquinas conectadas a esta red se verán entre ellas y con la configuración por defecto, con el Mac. vmnet8 es la intefaz NAT que por defecto configura Fusion. Las máquinas conectadas a esta red, por defecto podrán conectarse a otras redes a través de los mecanismos del NAT.

¿Dónde están los diferentes ejecutables de los procesos que he mencionado anteriormente?. Bien, como muchos programas de MacOS X , son un Bundle, es decir un directorio que agrupa un conjunto de recursos, entre otros los ejecutables de los programas. Por defecto, Fusion se instala en el directorio /Applications/VMware Fusion.app. Dentro del mismo, en la ruta Contents/Library nos encontraremos los diversos ejecutables usados para implementar las diferentes funciones del producto. Para el funcionamiento de las interfaces de redes los ejecutables que nos interesan serán vmnet-cli y vmnet-cli.

En la versión 6.x Fusion almacena sus archivos de configuración en el directorio /Library/Preferences/VMware Fusion. De los ficheros que hay en el mismo nos interesará a la hora de configurar la red el fichero networking que es una plantilla a partir de la cual se generarán la información que se almacena en los directorios vmnet* con la configuración de las interfaces. Dentro de cada directorio, existirá un fichero de configuración de dhcp , dhcpd.conf que será utilizado para proveer las direcciones en cada una de las subredes virtuales que se creen. Si además existe NAT en la red, existirá un fichero nat.conf con la configuración de la misma. Estos ficheros de configuración son usados por los procesos de Fusion para poder dar servicio sobre las redes virtuales.

Las interefaces virtuales sólo están presentes en el sistema cuando está ejecutándose el proceso de Fusion. Esto puede comprobarse con la ayuda del programa ifconfig -a , donde veremos interfaces llamadas vmnet1, vmnet8 por defecto si está en funcionamiento.

Una de las primeras tareas de configuración que se pueden plantear en este entorno es cambiar el direccionamiento de las redes que utiliza por defecto Fusion para su intefaz vmnet1, aquella que sólo da conectividad entre las máquinas conectadas a él. Por ejemplo, en mi sistema, si arranco Fusion y en el mac utilizo el ifconfig para ver su configuración:

baldurgate:VMware Fusion root$ifconfig vmnet1
vmnet1: flags=8863 mtu 1500
    ether 00:50:56:c0:00:01 
    inet 192.168.159.1 netmask 0xffffff00 broadcast 192.168.159.255

La red utiliza el direccionamiento 192.168.159.0/24 para proveer direcciones. Supongamos que se quiere configurar usando el direccionamiento 192.168.100.0/24. La manera más sencilla es editar la plantilla /Library/Preferences/VMware Fusion/networking para que utilice dicho rango de direcciones y hacer que el propio Fusion reescriba los ficheros dentro del directorio vmnet1 con ayuda del programa vmnet-cli. Posteriormente reiniciamos usando este mismo programa los procesos encargados de dar soporte a la red virtual. Si se edita la plantilla la sección que nos interesa es esta:

answer VNET_1_DHCP yes
answer VNET_1_DHCP_CFG_HASH 5E190C04568D690AE581FDFE8FF0B201744BF181
answer VNET_1_HOSTONLY_NETMASK 255.255.255.0
answer VNET_1_HOSTONLY_SUBNET 192.168.159.0
answer VNET_1_VIRTUAL_ADAPTER yes

Cambiándose por

answer VNET_1_DHCP yes
answer VNET_1_DHCP_CFG_HASH 5E190C04568D690AE581FDFE8FF0B201744BF181
answer VNET_1_HOSTONLY_NETMASK 255.255.255.0
answer VNET_1_HOSTONLY_SUBNET 192.168.100.0
answer VNET_1_VIRTUAL_ADAPTER yes

Ahora como root nos vamos al directorio del bundle donde están los programas encargados de configurar la red y ejecutamos las siguientes órdenes:

baldurgate:Library root$pwd
/Applications/VMware Fusion.app/Contents/Library
baldurgate:Library root$./vmnet-cli --configure
Stopped DHCP service on vmnet1
Disabled hostonly virtual adapter on vmnet1
Stopped DHCP service on vmnet8
Stopped NAT service on vmnet8
Disabled hostonly virtual adapter on vmnet8
Stopped all configured services on all networks
Backed up existing network settings to backup file "/tmp/vmware.b74CtC"
Restored network settings
baldurgate:Library root$./vmnet-cli --stop
Stopped all configured services on all networks
baldurgate:Library root$./vmnet-cli --start
Enabled hostonly virtual adapter on vmnet1
Started DHCP service on vmnet1
Started NAT service on vmnet8
Enabled hostonly virtual adapter on vmnet8
Started DHCP service on vmnet8
Started all configured services on all networks

He añadido la orden pwd para que se vea el directorio del sistema desde donde se están ejecutando las órdenes. Ahora se puede comprobar con ifconfig que se ha cambiado correctamente la interfaz

baldurgate:VMware Fusion root$ifconfig vmnet1
vmnet1: flags=8863 mtu 1500
    ether 00:50:56:c0:00:01 
    inet 192.168.100.1 netmask 0xffffff00 broadcast 192.168.159.255

Es interesante ver el fichero de configuración para la interfaz vmnet1 que ha generado el sistema. El fichero dhcpd.conf es un fichero de configuración para el servidor de dhcp del ISC. Asigna el rango de direcciones de DHCP que van a recibir las máquinas que se conecten a dicha interfaz y deja configurada la primera direccion fija para que la use el Mac para conectarse con las máquinas virtuales que tengan interfaces en esa red.


Referencias

viernes, abril 17, 2015

VMware Fusion: Nat, redes e interfaces privadas (I)

VMware Fusion permite la creación de redes privadas para conectar las máquinas virtuales que se ejecutan en en el mismo. Estas redes pueden ser independientes, conectarse al ordenador anfritión que ejecuta bajo Fusion y además pueden natearse para conectarse a otras redes externas al ordenador. La creación de una red de este tipo se hace a través del menú de preferencias del programa. A la hora de configurar la red, se puede definir la subred que tenga asignada, si en dicha subred existirá un servidor de DHCP que entregue direcciones IP o si se permitirá la traslación de direcciones (NAT) para permitir que dicha red salga con la dirección IP de ordenador donde Fusion se ejecuta como anfitrión. La pantalla de configuración es la siguiente


VMWare Fusion Network

En esta captura de pantalla se pueden ver:

  1. La lista de redes personalizadas configuradas.
  2. Si la red seleccionada se le permite traducción de direcciones (NAT). En este caso los paquetes que no vayan a la red privada, saldrán con la direción
  3. Si el Mac, que hace de anfitrión se conectará a la red privada que se ha creado.
  4. Si VMWare ejecutará un servidor de DHCP en la red. En el cuadro de diálogo si se activa se introducirá el rango de direcciones IP que utilizará dicho servidor DHCP para asignar las mismas a aquellas máquinas que las soliciten a través del protocolo DHCP

Un detalle importante. Por defecto, en el rango de direcciones que se asigna en el paso 4, al Mac se le asigna la primera dirección de la red y la IP del router o pasarela por defecto la segunda . Por ejemplo si en esa red virtual se está usando la dirección 172.16.0.0/24, se configura la conexión del Mac a la red virtual, éste aparecerá con la dirección 172.16.0.1, mientras que la pasarela (router) por defecto será la 172.16.0.2.

Para añadir una red lo que se hace es usar el botón + que hay en la esquina inferior de la lista de interfaces creadas. Para eliminar una red se pulsa el botón -

jueves, enero 22, 2015

caffeinate: Evitar que el MacOS X entre en reposo de manera automática

Hasta la versión 10.7.x Lion de MacOS X era sencillo configurar el sistema para evitar que entrara en reposo cuando estaba conectado a la red eléctrica era sencillo. En las preferencias del sistema, en el panel Economizador había una opción que permitía controlar cuando el ordenador entraba en reposo. Como puede verse en la siguiente captura de pantalla, se configura el mismo para que cuando esté conectado, nunca entre en reposo.

Esta configuración es útil si estás bajando un archivo de Internet o si estás corriendo máquinas virtuales con un producto como VMware Fussión o VirtualBox.Sin embargo, llevaba un tiempo notando en el ordenador que tengo del trabajo, que tiene la versión 10.9 Mavericks del sistema, que éste entraba en reposo, sin más, parando máquinas virtuales que ejecuto bajo vmware fusion. El problema es que la opción que permitía en las antiguas versiones del sistema desconectar estar entrada en reposo había desaparecido

Existe un comando que evita que el sistema entre en reposo de manera automática. Se trata de caffeinate. Con esta orden se puede controlar cual va a ser el comportamiento de la gestión de energía del MacOX. Hay dos maneras de usarla:

  • Indicar al sistema que no entre en reposo durante un tiempo determinado. Por ejemplo, si tenemos el sistema conectado a corriente eléctrica y queremos que no entre en reposo durante 10 minutos
    baldurgate:Documents terron$caffeinate -s -t 10
  • Indicar al sistema que no entre en reposo hasta que no termine de ejecutarse la utilidad que se indica como parámetro en la línea de comandos de caffeinate. Por ejemplo, no quiero que el sistema, se apague hasta que no se ejecute el comando scp contra un servidor remoto.
    baldurgate:Documents terron$caffeinate -s scp large_file.tgz terron@10.10.10.10:.

Aprovechando este comando, lo que suelo hacer si no quiero que la máquina entre en estado de reposo es usar caffeinate con un ping cada minuto al router. Puesto que el comando ping nunca termina - en realidad nos vale cualquier comando que no termine -

baldurgate:Documents terron$caffeinate -s ping -i 60 192.168.1.1

Se puede crear distintos tipos de marcas que impidan en función del subsistema que queramos evitar que entre en reposo. En los ejemplos anteriores como uso la opción -s le indico que el sistema no entre en reposo sólo si está conectado a la corriente eléctrica. Con la opción -i se evita que el sistema entre en reposo con independencia de cual sea su fuente de alimentación, con -d se evita que el sistema ponga en reposo la pantalla y con -m se evita que el sistema ponga en reposo los discos. Por último existe la opción -u para indicar que el usuario está activo. En este caso, activa la patalla si estuviera en reposo y evita que por 5 segundos entre de nuevo en reposo, a menos que se especifique un timeout con -t

viernes, junio 27, 2014

MacOS X Mavericks y Wifi: Curioso problema de conectividad

Tendo desde hace bastantes años instalado un punto de acceso F5D7130 de la casa Belkin que he usado con sucesivas versiones de MacOS X desde la 10.4 Tiger sin ningún tipo de problema de conectividad. Está configurado para usar WPA con AES como algoritmo de cifrado

Hace un par de días, me traje el ordenador del trabajo que que utiliza MacOS X Mavericks. Este ordenador era incapaz de conectarse correctamente a Internet a través de la red WiFi que usaba dicho punto de acceso. Los síntomas eran curiosos:

  • El ordenador se conecta a la WiFi.
  • Configurado para usar DHCP, no obtiene respuesta desde el servidor DHCP del router.
  • Configurado una IP fija, tampoco es capaz de llegar al router.
  • Si levanto un tcpdump en la interfaz de red, se ve perfectamente tráfico de difusión con origen en otros ordenadores conectados a la Wi-Fi

Tras probar todo tipo de cosas, decidí cambiar en el punto de acceso el algortimo de cifrado de AES a TKIP. Automáticamente, el Mac se conectó a la red sin problemas. El inconveniente es que TKIP tiene problemas de seguridad que pueden comprometer la comunicación.

domingo, octubre 27, 2013

MacOS X Mavericks: Toma de contacto (I)

Esta semana he actualizado el ordenador con el que trabajo a la última versión del sistema operativo de Apple, OS X Mavericks. La actualización, sin problemas, en unos 45 minutos, incluyendo la actualización de las herramientas de desarrollo. Una vez reiniciado el sistema, otro bloque de actualizaciones a diversas aplicaciones de la suite iLife de Apple que tenía instaladas, así como soporte de impresoras y archivos de cámaras raw.

Hasta ahora, estas han sido los pequeños detalles que he tenido que solucionar:

  • Se ha cambiado en las herramientas de desarrollo el depurador gdb por el depurador del proyeco llvm, lldb. En mi caso, que estoy acostumbrado al primero, lo he compilado desde fuentes, desde la última versión estable disponible, la 7.6.1. Tras bajar las fuentes, verificar la firma electrónica de las mismas, las órdenes necesarias para compilarlo son las siguientes:
    env CC=clang  CFLAGS="-Wno-string-plus-int" \
    ./configure --prefix=/usr/local
    make
    make install  (como usuario root / administrador)
    

    Es necesario establecer la variable CC puesto que se ejecuta varios scripts configure anidados. Por otra parte, puesto que el gdb lo suelen probar con el gcc, no compila de manera limpia con el clang, teniendo que desactivar un warning con la opción que se pasa.
  • La versión del MacVim que usaba no arranca en Macvericks. Esto se debe a que está compilada contra la librería de Perl 5.10, el cual ha sido actualizado a una nueva versión en el sistema operativo. Es muy sencillo compilar desde las fuentes siguiendo las instrucciones de compilación del MacVim. Si se quiere compilar desde el git, los pasos a seguir son los siguientes:
    git clone git://github.com/b4winckler/macvim.git
    cd macvim
    env CC=clang ./configure --with-features=huge \
                  --enable-rubyinterp \
                  --enable-pythoninterp \
                  --enable-perlinterp \
                  --enable-cscope
    make
    #Comprobamos que ha compilado ok
    open src/MacVim/build/Release/MacVim.app
    #Abrimos la carpeta donde está
    #la aplicación y la copiamos a donde queramos
    open src/MacVim/build/Release/
    
  • Desactivar el llavero iCloud. Nunca me ha gustado mantener cierto tipo de información en servicios de terceros. No me interesa almacenar son contraseñas en servicios de terceros, mucho menos después de todo lo que vamos conociendo de la NSA - que probablemente sea la punta del iceberg de lo que están haciendo los Estados a la hora de espiar - . El servicio iCloud lo tengo desactivado en el iPhone y en el ordenador. Para ello, desde las Preferencias del Sistema, iCloud no tengo la cuenta logeada. También, desde el mismo menú se puede controlar los elementos que se quieren almacenar en los servidores de Apple
  • Según me comentaba algún amigo, Macports podía tener algún problema, que supongo solucionado a estas alturas de la semana.


miércoles, septiembre 18, 2013

Verificar firmas de binarios en MacOS X con codesign

Una sana costumbre cuando uno se baja de Internet cualquier programa es intentar verificar su autenticidad: que el creador sea el que dice ser y que el binario no ha sido alterado por terceros. La manera tradicional de hacer esto es usar algún tipo de función hash y técnicas de firmado digital que permitan comprobar que el binario es auténtico. El lado malo: normalmente tenemos complicado verificar la autenticidad de las claves públicas en las que se apoya estos procesos.

Algunos sistemas operativos han incluido en sus últimas versiones servicios que permiten comprobar la autenticidad e integridad de programas que se bajan de Internet, siempre que hagan uso de estas facilidades. En el caso del MacOS X esta infraestructura empezó a aparecer en la versión 10.5 (Leopard) del sistema operativo. A través del comando codesign se puede realizar operaciones de firma digital de los binarios que la incorporen.

La herramienta da la oportunidad de comprobar las firmas digitales tanto de un fichero en disco como de una aplicación que esté ejecutándose en ese momento. Por ejemplo:

codesign --verify --verbose /Applications/Twitter.app
/Applications/Twitter.app: valid on disk
/Applications/Twitter.app: satisfies its Designated Requirement

De igual manera, se puede verificar la integridad de un proceso que esté ejecutándose en el sistema. En este caso, en vez de un path se le pasa el PID del proceso. En este ejemplo verificaría la integridad del proceso cuyo PID es 1234

swordcoast:~ terron$ codesign --verify --verbose 1234

También se puede obtener información sobre la firma criptográfica de un binario con ayuda de la opción --display

codesign --display --verbose=4 /Applications/Twitter.app
Executable=/Applications/Twitter.app/Contents/MacOS/Twitter
Identifier=com.twitter.twitter-mac
Format=bundle with Mach-O universal (i386 x86_64)
CodeDirectory v=20100 size=14072 flags=0x200(kill) hashes=697+3 location=embedded
Hash type=sha1 size=20
CDHash=4db441b1c36dfaf0edb5d548c78587b0037698c1
Signature size=4169
Authority=Apple Mac OS Application Signing
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Info.plist entries=32
Sealed Resources rules=5 files=124
Internal requirements count=2 size=344

La última versión de MacOS X, Mountain Lion, y a partir de la versión 10.7.5 de Lion , se tiene una infraestructura llamada GateKeeper que permite la configurar el sistema para evitar la ejecución de aquellos programas que no cuenten con una firma digital válida.

Si el binario que nos bajamos no tiene firma digital, es aconsejable usar algún tipo de servicio, como VirusTotal para pasar el programa por una batería de antivirus.

Por supuesto, todo este proceso de verificación implica que nos fiamos de Apple y de la cadenas de criptografía que lleva el sistema operativo. No voy a ser iluso, si cualquier agencia estatal deseara que instalásemos un binario con un troyano, no creo que le cueste mucho convencer a Apple que le firme un binario "aliñado" que el sistema se lo tragase sin problemas.


Technorati Tags:

viernes, agosto 30, 2013

diskutil: Información de los discos en OS X en el CLI

Una de las cosas que más me gusta de MacOS X es la posibilidad de trabajar tanto con la interfaz gráfica como con la línea de comandos. De vez en cuando hay que realizar operaciones de mantenimiento de discos en las que queremos averiguar información sobre el mismo. La utilidad que se encarga de gestionar los discos es diskutil. Este comando admite varios verbos cada uno de los cuales invoca una función determinada. Aquí van algunos de los que permiten obtener información. Si se le añade a cualquiera de los dos el modificador -plist, se volcará la información en dicho formato.

diskutil list

Permite listar todos los discos que haya en el sistema - incluye los CDROM / DVD -, dando información sobre las particiones que tienen: tamaño, tipo, nombre de la partición y el nombre de dispositivo que aparecerá bajo el directorio /dev:

/dev/disk0
  #:                       TYPE NAME                    SIZE       IDENTIFIER
  0:      GUID_partition_scheme                        *121.3 GB   disk0
  1:                        EFI                         209.7 MB   disk0s1
  2:                  Apple_HFS Macintosh HD            120.5 GB   disk0s2
  3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
  #:                       TYPE NAME                    SIZE       IDENTIFIER
  0:      GUID_partition_scheme                        *80.0 GB    disk1
  1:                        EFI                         209.7 MB   disk1s1
  2:                        ZFS zfs                     39.9 GB    disk1s2
  3:                  Apple_HFS hfsformat               39.7 GB    disk1s3

diskutil info path_disco

Permite obtener información sobre un disco físico o partición. Ejecutando la orden anterior sobre el disco /dev/disk0:

   Device Identifier:        disk0
   Device Node:              /dev/disk0
   Part of Whole:            disk0
   Device / Media Name:      APPLE SSD SM128E Media

   Volume Name:              Not applicable (no file system)

   Mounted:                  Not applicable (no file system)

   File System:              None

   Content (IOContent):      GUID_partition_scheme
   OS Can Be Installed:      No
   Media Type:               Generic
   Protocol:                 SATA
   SMART Status:             Verified

   Total Size:               121.3 GB (121332826112 Bytes) (exactly 236978176 512-Byte-Blocks)
   Volume Free Space:        Not applicable (no file system)
   Device Block Size:        512 Bytes

   Read-Only Media:          No
   Read-Only Volume:         Not applicable (no file system)
   Ejectable:                No

   Whole:                    Yes
   Internal:                 Yes
   Solid State:              Yes
   OS 9 Drivers:             No
   Low Level Format:         Not supported

Technorati Tags:

martes, julio 09, 2013

Desactivar IPv6 en Mac OS X desde la línea de comandos

Una de las características de Mac OS X que siempre más me ha gustado es la posibilidad de usar tanto la interfaz gráfica del sistema como diferentes utilidades la línea de comandos para la configuración y administración del mismo. Una de esas joyas desconocidas que permiten el control total de la configuración de red desde la línea de comandos es networksetup.

En Mac OS X , un servicio de red (network service) no es más que un conjunto de configuraciones de un puerto de red determinado (ethernet, wifi). Por ejemplo, se pueden tener varios servicios para el puerto ethernet en función de la localización donde se esté: casa, oficina, etc. networksetup permite la configuración y gestión de los servicios de red.

Se puede obtener la lista de servicios de red que hay en el sistema con ayuda del parámetro -listallnetworkservices

baldurgate:~ terron$networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Bluetooth DUN
Ethernet
FireWire
Wi-Fi
Bluetooth PAN
baldurgate:~ terron$

Con ayuda de la opción -getinfo se puede obtener información sobre una servicio de red determinado. Por ejemplo, para el servicio de Wi-Fi:

baldurgate:~ terron$ networksetup -getinfo Wi-Fi
DHCP Configuration
IP address: 192.168.x.x
Subnet mask: 255.255.x.x
Router: 192.168.x.x
Client ID: 
IPv6: Automatic
IPv6 IP address: none
IPv6 Router: none
Wi-Fi ID:  XX:XX:XX:XX:XX:XX 

Puede verse como está activado el soporte de IPv6 en modo automático.

Para desactivar IPv6 en cualquier servicio, se usa el parámetro -setv6off seguido del nombre del mismo:

networksetup -setv6off Ethernet
networksetup -setv6off Wi-Fi

Para que el sistema pueda realizar cambios en las bases de datos que almacenan la configuración de red, se debe estar autentificado con un usuario que tenga privilegios de admin o root. En caso de que no sea así, el sistema nos presentará un cuadro de diálogo para que se introduzcan las credenciales de un usuario con dichos privilegios.


Technorati Tags:

viernes, junio 28, 2013

Notas rápidas de la instalación de Apache Cassandra en MacOS X

Cassandra es una base de datos NoSQL diseñada para trabajar de manera distribuida y manejar grandes cantidades de datos. Su diseño tolerante a fallos y la escalabilidad son dos de sus puntos fuertes.

Los requisitos necesarios para poder instalar este programa en MacOS X son los siguientes:

  • Una cuenta de usuario sobre la cual se va a ejecutar. En este caso,se va a suponer que existe una cuenta de usuario estándar, sin privilegios especiales llamada cassadmin
  • Tener instalada el Java Runtime Enviroment en MacOS X. Normalmente,se ha usado el que suministra Apple1 (al menos en Mac OS X Lion que es donde se han hecho las pruebas). Se puede comprobar que versión se tiene del JRE con la siguiente orden:
    swordcoast:~ terron$ java -version
    java version "1.6.0_51"
    Java(TM) SE Runtime Environment (build 1.6.0_51-b11-456-11M4508)
    Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-456, mixed mode)
    
  • Tener la posibilidad de bloquear en RAM la suficiente cantidad de memoria sin que su contenido sea paginado por el sistema. Los sistemas operativos actuales utilizan un espacio de direcciones virtuales, paginando a disco páginas cuando necesitan liberar RAM para otros procesos. Se le puede indicar al sistema que ciertas regiones de memoria no puedan paginarse y estén siempre en RAM. Sin embargo, para evitar abusos, esta cantidad suele estar limitada. Puede comprobarse su valor en la shell bash con la orden ulimit:
    swordcoast:~ terron$ ulimit -l
    unlimited
    
    En MacOS X esta cantidad no está limitada, sin embargo, en otros sistemas si. Por ejemplo, en Debian está limitado a 64 Kbytes. En este caso sería necesario añadir un fichero que modificara el comportamiento del usuario que utiliza Cassandra para ejecutarse para que pueda bloquear toda la memoria que quiera.
  • Tener instalado Java Native Access, una serie de clases Java, que permiten el acceso sencillo a librerías dinámicas del sistema sin necesidad de usar JNI. Estas clases Java pueden bajarse empaquetadas en un fichero jar desde jna, el repositorio
  • . En este caso se ha usado la versión 3.5.2, compuesta por los ficheros jna-3.5.2jar (sha1 f1bf9fe267e17c1a8f7d1aa2c985e7fe81a06da6 ) y platform-3.5.2.jar (sha1 beac07d13858ef3697ceeab43897d70aeb5113c9 )
  • La versión binaria de Cassandra, bajada de la página del proyecto. En este caso se ha usado el fichero apache-cassandra-1.2.6-bin.tar.gz (sha1 25b9c63eb33c3ce483390e6edab4a5d1bb95eb4c ). En este caso existe una firma GPG que se puede verificar (keyid 2B5C1B00)

Una vez que se ha descargado todo el software, se va al directorio raíz del usuario que va a ejecutar Cassandra (se va a suponer que es /Users/cassadmin) s para crear la estructura de directorios que utiliza se va a usar y descomprimir el software:

cd /Users/cassadmin
mkdir -p logs/cassandra
mkdir -p lib/cassandra/{data,commitlog,saved_caches}
tar zxvf apache-cassandra-1.2.6-bin.tar.gz
ln -s apache-cassandra-1.2.6 cassandra
cp jna-3.5.2.jar platform-3.5.2.jar cassandra/lib/

  • El directorio donde se va a guardar los ficheros de logs que genere la base de datos será /Users/cassadmin/logs/cassandra
  • El directorio donde se va a almacenar los datos y que utilizará para trabajar la base de datos será /Users/cassadmin/lib/cassandra. La sintaxis empleada funciona con la shell bash.
  • El enlace simbólico se crea para hacer más sencillo el uso de varias versiones del producto.
  • Se copian los ficheros de clases del JNA al directorio lib de cassandra para que el sistema pueda encontrarlos.

Configurar la base de datos para que utilice la estructura de directorios que se ha creado. Se edita el fichero /Users/cassadmin/cassandra/conf/cassandra.yaml y se cambian los siguientes parámetros para usar la estructura de directorios creada

data_file_directories:
- /Users/cassadmin/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog
data_file_directories:
- /Users/cassadmin/lib/cassandra/data
# commit log
commitlog_directory: /Users/cassadmin/lib/cassandra/commitlog
saved_caches_directory: /Users/cassadmin/lib/cassandra/saved_caches

Configurar el log4j para que almacene los registros en el directorios que interesa. Para ello se editar el fichero /Users/cassadmin/tmp/cassandra/conf/log4j-server.properties para modificar la propiedad que apunta al fichero de registro del sistema:

log4j.appender.R.File=/Users/cassadmin/log/cassandra/system.log

Por último se arranca el programa con la orden:

cassandra/bin/cassandra -f
Este último comando supone que estamos en el directorio $HOME del usuario cassadmin. El parámetro -f hace que el programa permanezca en primer plano para poder ver los errores que genere al escribir los mismos a la consola.

Notas

  1. Se puede bajar la versión que interese utilizar del Java Runtime Enviroment (JRE) desde Java.com. Ajustando las variables PATH y JAVA_HOME se puede seleccionar la versión del JRE a usar de las instaladas.

Technorati Tags: ,,

domingo, mayo 26, 2013

Airport Express, utilidad de configuración versión 5.6 y MacOS X Lion

Tengo un viejo punto de acceso de Apple, un Airport Express, de primera generación, que soporta redes wifi con los estándares b o g. El programa que por defecto viene incluido en MacOS X Lion, no soporta este tipo de estaciones base, es necesario bajarse e instalar la Airport Utility 5.6 para Lion. Todo parece sencillo, pero en realidad no lo es, el instalador que suministra Apple falla.

Lo primero que hay que ver en caso de error de instalación son los registros que el sistema deja en el fichero /var/log/install.log. Puede verse ejecutando la aplicación Terminal.app, yendo al directorio y usando cualquiera de las utilidades de la línea de comandos como puede ser more, o bien usar la aplicación Consola que está en dentro de la carpeta utilidades de la carpeta aplicaciones. En cualquiera de los dos casos es necesario un usuario con privilegios de administración del sistema para poder ver dicho fichero. En el mismo podía encontrar cada vez que intenta la instalación las siguientes líneas de registro:

May 24 00:20:08 swordcoast installd[62762]: ./preinstall: nothing found to unload
May 24 00:20:09: --- last message repeated 1 time ---
May 24 00:20:09 swordcoast _securityagent[62791]:Error stopAPD.sh: 256

Vaya, todo parecía indicar que había un error en uno de los scripts, stopAPD.sh que venían con la instalación del paquete.Lo primero que tenía que hacer era extraer los ficheros del paquete y ver el contenido del script para intentar averiguar la causa del fallo. Con la ayuda de la utilidad pkgutil se extraen los contenidos del fichero pkg de instalación a un directorio que nos interese. Una vez realizada la operación, localizar el script stopAPD.sh

pkgutil --expand /Volumes/AirPortUtility/AirPortUtility56.pkg  ~/tmp/airport
cd ~/tmp/airport/AirPortUtility56Lion.pkg/Scripts/preinstall_actions
Dentro de dicho directorio está el script que causa los problemas: Intenta parar a través de launchd el servicio que se especifica en el fichero com.apple.AirPortBaseStationAgent.plist, el cual no existe en mi máquina. La solución para que funcione la instalación es crear uno correcto - porque posteriormente el sistema lo reescribirá - , y para ello, dentro del directorio /System/Library/LaunchAgents/ cree un fichero llamado com.apple.AirPortBaseStationAgent.plist, simplemente copiando el contenido del fichero org.openbsd.ssh-agent.plist que se encuentra en dicho directorio. Lancé la instalación y finalizó sin problemas.


Technorati Tags: ,

domingo, diciembre 30, 2012

Streaming de contenidos a un Samsung SmartTV desde Mac

Las televisiones de Samsung que vienen con el sistema SmartTV permiten conectarse a redes de ordenadores y recibir contenidos en streaming desde otros dispositivos conectados a la red. Hace unos días, para enseñar unas fotos, intenté hacer streaming de las mismas desde un Mac. Lo primero que averigüe fue que la televisión soporta DLNA, un conjunto de especificaciones que permite compartir información entre dispositivos multimedia.

Mi primera opción fue instalar en MacOS X uShare, un programa que en principio no debería tener muchos problemas para compilar y ejecutar. Sin embargo, para poder compilarlo había que usar The Yasm Modular Assembler Project, ffmpeg , libupnp y libdlna, con diferencia este último el más complicado de compilar, puesto que es capaz de poner bien los flags de compilación.

A pesar de todo, tras un buen rato enredando con los configure, puede compilar toda la suite sin problemas. Lo malo, es que no funcionaba demasiado bien. Esto no me desanimó demasiado, así que decidí buscar otro software que me permitiera hacer esta labor.

Di con PS3 Media Server un software escrito en Java que tenía soporte para los protocolos necesarios para hacer el streaming. Tras ejecutarlo, parecía que la televisión no iba a ser capaz de recibir el streaming, pero el server DLNA apareció tras apagar y encender ésta. Al menos, las pruebas que hecho - sólo estaba interesado en el streaming de fotografías - ha funcionado bien.


Technorati Tags: macosx, smarttv