Archivo de la Categoría 'Informática, internet y tecnología'

Liberar, activar y hacer jailbreak a un iPhone Edge con firmware 3.1.3

Por motivos de trabajo ha caído en mis manos un iPhone de primera generación (algunos lo llaman iPhone Edge) con el que, en primera instancia, intenté hacer las cosas “a la Apple”. Para ello, restauré el teléfono con iTunes, deshaciéndome del jailbreak que tenía instalado e instalando el firmware más moderno para esta versión, el 3.1.3.

Lamentablemente, al ser un iPhone traído allende los mares, está atado al operador AT&T, y además necesita ser activado, por lo que al final tuvimos que volver al jailbreak (ah, ironía, cómo te gusta repartir patadas en el culo :D ), ya que la activación y liberación sin hacer un jailbreak previo es, como poco, no trivial.

Hacerlo no es nada difícil una vez conoces los pasos, pero al ser un modelo antiguo, me costó bastantes prueba y error hasta dar con la fórmula. Básicamente hay que hacer tres cosas:

  1. Obtener el software redsn0w (en mi caso usé la versión 0.92, el resto de instrucciones son para esta versión).
  2. Obtener el firware 3.1.2 para iPhone Edge.
  3. Usar redsn0w con el firmware 3.1.2 (iPhone1,1_3.1.2_7D11_Restore.ipsw).

La clave es no usar el firmware que tienes instalado, el 3.1.3 (iPhone1,1_3.1.3_7E18_Restore.ipsw), pues si lo haces obtienes un bonito mensaje: Unable to recognize specified IPWS. Una vez sabes esto, hacer el jailbreak, y liberar el iPhone es coser y cantar.

SyntaxError: invalid syntax usando equery en Gentoo

Usando Gentoo, me encontré con el siguiente error al lanzar el mandato equery:

$ sudo equery belongs somefile
  File "/usr/bin/equery", line 271
    print pp.path(" /" + c[0])
           ^
SyntaxError: invalid syntax

Tras darle unas vueltas y no encontrar gran cosa en Internet Google :D , acabé pensando que podía tener que ver con el intérprete de python instalado. No estoy seguro de cómo llegué a esa conclusión, pero supongo que ayudaron el hecho de ver que equery está escrito en python, que mi sistema tenía instalados varios intérpretes (concretamente los más actuales de la versión 2 y 3 del mismo), y que otra máquina con Gentoo usaba otro intérprete y no sufría el problema.

Para resolverlo, lo primero es buscar pistas. Al trabajar con varias versiones, lo normal es que el ejecutable sea un enlace a la versión elegida. Así que fue cuestión de ver a dónde apuntaba dicho enlace y buscar el paquete involucrado.

$ ls -l /usr/bin/python
lrwxrwxrwx 1 root root 14 jul 14 12:21 /usr/bin/python -> python-wrapper
$ equery belongs /usr/bin/python-wrapper
[ Searching for file(s) /usr/bin/python-wrapper in *... ]
app-admin/eselect-python-20100321 (/usr/bin/python-wrapper)
$ equery files app-admin/eselect-python
[ Searching for packages matching app-admin/eselect-python... ]
* Contents of app-admin/eselect-python-20100321:
/etc/env.d/python/.keep_app-admin_eselect-python-0
/usr/bin/python-wrapper
/usr/share/eselect/modules/python.eselect

Parece que eselect es la herramienta que usa portage para decidir qué versión se usa cuando un paquete tiene varias instaladas. Por lo que se ve arriba, cada paquete instala sus propios módulos para informar a eselect de qué versiones hay disponibles, etc. A partir de aquí, jugando un poco con el mandato eselect, encontrar la forma de cambiar la versión no es difícil:

$ eselect
Usage: eselect   
...
$ eselect python
Usage: eselect python  
...
$ eselect python list
Available Python interpreters:
  [1]   python2.6
  [2]   python3.1 *
$ sudo eselect python set python2.6

Y, efectivamente, eso resuelve el problema y equery vuelve a funcionar :) .

Mandato PS con salida “personalizada”

Una opción del mandato ps de los sistemas operativos tipo Unix que no suele estar muy bien documentada y que en mi opinión es tremendamente útil es la que permite personalizar la salida del mandato para que muestre la información que te interesa de cada proceso.

La opción es -o, y acepta como argumentos una gran cantidad de posibilidades, que normalmente se encuentran descritas en la página del manual como standard format specifiers (o directamente no se encuentran :D ).

Un ejemplo de cómo lucen normalmente las órdenes de tipo ps que suelo lanzar en mis terminales:

$ ps fax -o user,uid,pid,ppid,pgrp,%cpu,%mem,rss,vsize,size,tname,etime,start_time,args
USER       UID   PID  PPID  PGRP %CPU %MEM   RSS    VSZ    SZ TTY          ELAPSED START COMMAND
root         0  3434     1  3434  0.0  0.1   552   5404   464 ?        12-22:14:08 Feb23 /usr/sbin/sshd
root         0 14466  3434 14466  0.0  0.5  2572   8124   512 ?              36:04 12:13  \_ sshd: deigote [priv]
deigote   1000 14469 14466 14466  0.0  0.2  1440   8280   668 ?              36:01 12:13      \_ sshd: deigote@pts/2
deigote   1000 14470 14469 14470  0.0  0.6  3344   6548  2172 pts/2          36:01 12:13          \_ -bash
root         0 16310 14470 16310  0.1  0.2  1196   4292   472 pts/2          00:06 12:49              \_ su -
root         0 16311 16310 16311  0.0  0.3  1688   4740   364 pts/2          00:03 12:49                  \_ -su
root         0 16315 16311 16315  0.0  0.2   992   4148   580 pts/2          00:00 12:50                      \_ ps fax -o user,uid,pid,ppid,pgrp,%cpu,%mem,rss,vsize,size,tname,etime,start_time,args

Y, de hecho, un par de alias que suelo tener siempre definidos, entre otros, son:

alias ps='ps fax -o user,uid,pid,ppid,pgrp,%cpu,%mem,rss,vsize,size,tname,etime,start_time,args'
alias psg='ps | head -n 1 && ps | grep'

Idioma por defecto en Liferay

Un detalle que se me olvidó en la pequeña guía para instalar Liferay que escribí el otro día es la selección del idioma por defecto, que aunque a simple vista no parece gran cosa, como dirían los americanos, es un poco tricky (Wordreference lo traduce como que tiene sus bemoles, genial :lol: ).

Igual que Liferay incluye un fichero con todas las propiedades relacionadas con funcionalidad, existe otro fichero, llamado system-ext.properties, que tiene las propiedades relacionadas con el sistema (codificación de los ficheros, zona horaria, lenguaje por defecto, etcétera). Este fichero puede extenderse creando el fichero system-ext.properties.

Visto esto, para poner el portal en lenguaje español por defecto, debería bastar con anotar en ese fichero las propiedades relativas al lenguaje que queremos (las rutas corresponden a las mostradas en la guía antes mencionada):

$ echo "# Liferay default language
user.country=ES
user.language=es" >> /opt/websites/liferay.deigote.com/tomcat-6.0.18/webapps/ROOT/WEB-INF/classes/portal-ext.properties

¿Fácil, verdad? Pues no funciona :D . Para ser más exactos, no funciona para las compañías que ya tengamos creadas en la base de datos que estemos usando, ya que al crearlas, Liferay lee estas propiedades y las asocia a la compañía directamente en la base de datos.

Si ya tenéis el portal creado y no queréis empezar de cero, no es un problema grave, ya que estos datos pueden modificarse. Para ello, arrancad el portal accediendo a la compañía que queráis (en la mayoría de instalaciones se suele usar sólo una, ya que la feature de compañías no está muy bien documentada), y navegad por el menú superior escogiendo las opciones Panel de control – Portal – Configuración – Preferencias de presentación para seleccionar el idioma y país que por defecto.