"Después del juego es antes del juego"
Sepp Herberger

lunes, 22 de junio de 2015

Importar claves GPG de un repositorio desde dentro de la Red Educativa


Estaba con un repositorio nuevo para instalar unas cosillas y al hacer apt-get update me salía el típico error NO_PUBKEY de que no tengo la clave del repositorio, que en este caso era E1F958385BFE2B6E

Primero he probado a añadir la clave a mano de la forma recomendada siempre, con:

# apt-key adv --recv-keys --keyserver keys.gnupg.net E1F958385BFE2B6E

Pero había olvidado que dentro de la red educativa esto no funciona ya que usa el puerto 11371 y dicho puerto está bloqueado por el firewall. El truco para que funcione es:

# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80  E1F958385BFE2B6E

Que hace la petición a través del puerto 80 (que evidentemente está abierto) al servidor de claves de Ubuntu, que si escucha por dicho puerto. De esta manera añadimos la clave a los ficheros /etc/apt/trustdb.gpg y /etc/apt/trusted.gpg y ya podremos actualizar desde ese repositorio sin problemas.

lunes, 15 de junio de 2015

Funny SIM y las APN Perdidas.

No, el título de esta entrada es el nombre de un grupo de tontipop de los 90. Bueno, no se que hago que siempre acabo en líos como gato en un ovillo de lana. Mi ultima aventurilla: como todavía no he entrado en el mundo de los móviles octacore (usados preferentemente para whatsapp) sigo con un LG Optimus Hub E510 que me funciona bien para lo que lo quiero (que consuma su p**a madre). Hace varios días petó el Android Gingerbread que lo movía, así que me puse a reinstalar el sistema con ayuda de los foros de htcmania y esta lista de ROMs.

Una vez puesto el CWM Recovery me dispuse a flashear una de esas ROM basadas en Cyanogenmod, arranqué y todo parecía ir bien: cámara, sonido, wifi, ... carajo: no hay conexión de datos. Me voy a la configuración de APNs y, vaya por Cthulhu, esta vacia. Bueno, intento añadir la APN de mi operador (Vodafone) a mano... sin resultado: relleno todos los campos y cuando le doy a guardar la APN no se guarda. Probando todas las ROMs de esa página pasaba eso, excepto en ésta basada en la ROM Stock (vamos, la ROM oficial de LG) con algún tuneo.

Para mas desconcierto me encuentro con que si pongo una SIM de Pepephone las APN aparecen bien con cualquier ROM y se dejan añadir y modificar.

Intentando averiguar la causa de esto, pues las ROMs probadas eran mucho mas ligeras y limpias que la Stock ROM, me meto en un lío en el que aprendo un montón de cosas nuevas que voy a dejar aquí como referencia.

Muchos android traen una lista con la configuración completa de posibles APNs ubicadas en el fichero /system/etc/apns-conf.xml. La finalidad de esta lista es configurar automáticamente el APN en función del país y operador. Para acceder a dicho fichero lo mas sencillo es activar la depuración USB del móvil, instalar las adb-tools y conectar el android a nuestro PC con su cable usb.

# apt-get install android-tools-adb
# adb devices

...mostrara el móvil....

# adb pull /system/etc/apns-conf.xml

Con esto tenemos el fichero apns-conf.xml en el directorio actual. Podemos husmear en el para ver que aparecen las definiciones de APN de un montón de operadores mundiales, de tal forma que el usuario del teléfono no tenga que teclear los datos de la APN. Entre ellas están las de Vodafone en España, que son:


  <apn carrier="Vodafone ES"
       mcc="214"
       mnc="01"
       apn="airtelwap.es"
       user="wap@wap"
       password="wap125"
       server=""
       mmsc="null"
       type="default"
  />

por lo que en teoría el móvil debería reconocerla y configurarse automáticamente, pero no lo hacia.

Por otro lado, las APN definidas a mano por el usuario se guardan en

/data/data/com.android.providers.telephony/databases/telephony.db
/data/data/com.android.providers.telephony/shared_prefs/preferred-apn.xml 

Las podemos obtener con:

# adb pull /data/data/com.android.providers.telephony/databases/telephony.db

El fichero telephony.db es una base de datos sqlite3, que examinaremos con esa herramienta:

# apt-get install sqlite3
# sqlite3 telephoy.db
sqlite> select * from carriers;
.....listado de APN de operadores................
.....listado de APN de operadores................
.....listado de APN de operadores................

Veo que dentro está la lista de APN que he intentado meter a mano y que parecían perderse al dar a Save. Resulta que si se guardan, pero luego no se muestran. En cuanto al otro fichero:

# adb pull /data/data/com.android.providers.telephony/shared_prefs/preferred-apn.xml 
# cat preferred-apn.xml 
<? Xml version="1.0" encoding="utf-8" standalone="yes" ?>
<Map>
    <Long name="apn_id" value="218"/>
</Map>

El APN de telephony.db usado por defecto por nuestro Android para realizar la conexión de datos sería el apn_id que definimos en preferred-apn.xml.

¿Por qué no se muestran los APN definidos a mano?, aún mas misterioro: ¿cómo averigua android el APN correcto para nuestra tarjeta?. Investigando en Internet descubro que el método que tiene el móvil para saber que APN es el correcto es con los campos MCC (código de pais) y MNC (código de operadora): 214/01 para el caso de Vodafone España. ¿De dónde se obtiene estos números?: de la tarjeta SIM del móvil.

Buscando en foros vi que recomendaban una aplicación para leer dicha información: Network Info II que en la pestaña Device nos da el MCC+MNC de la SIM. Bueno, pues aqui la primera pista: con las ROMs cocinadas aparece el mensaje "SIM locked" y no muestra ese dato, mientras que con la Stock ROM si que se muestra un 214/01. Es decir, que la ROM cocinada es incapaz de leer el campo MCC+MNC de la SIM y como consecuencia:

1) No puede identificar automaticamente un APN en /system/etc/apns-conf.xml
2) Cualquier APN que metamos a mano se guarda en /data/data/com.android.providers.telephony/databases/telephony.db, pero al no coincidir su MCC+MNC con el de la tarjeta SIM (que no pueden ser leídos) son filtradas y como consecuencia no aparecen en la lista de APN y no pueden ser seleccionados.
3) Por tanto, al no encontrar APN válido según la SIM que tenemos, nuestro móvil no tiene conexión de datos.

Buscando ahora mejor informado el problema con los datos que tengo veo que la causa de todo es un problema con la SIM, llamado jocosamente en el foro xda-developers "problema de la Funny SIM" (yo no le veo el funny por anywhere). La historia está en que en determinadas SIM de 128Kb las ROMs cocinadas de Cyanogen no pueden acceder al MCC+MNC, mientras que con la SIM es de 64Kb "si se puede". Información detallada aquí.

En determinados sitios se hablan de soluciones, como aquí, donde se consigue arreglar usando una aplicación del Google Play llamada GetRIL. Esta aplicación se ejecuta con la Stock ROM y hace una copia de los datos del RIL (Radio Interface Layer), copia que luego se restaura con la ROM cocinada. Esto hace que mágicamente el APN pueda activarse. Por desgracia, la aplicación GetRIL funciona en varios modelos de LG y Samsung, pero no en mi Optimus Hub E510.

¿Y cual es la solución que queda?, pues como dicen aquí: hacer que tu operador te cambie la SIM de 128Kb por una de 64Kb. Pregunté en Vodafone y me dijeron que de eso ya tenían ellos, que son muy "in" y sus SIMs tienen mucha memoria para el 4G y para que el Estado y las Corporaciones puedan espiarte mediante el NFC.

Bueno, como está claro que el mundo se mueve y yo me quedo rezagado (*) así que he decidido entrar en 2013 y comprarme un Xiaomi Hongmi 1S de segunda mano por cuatro duros. Fin de la cita.

(*)Espero no llegar al nivel de aquel alcalde de la PPSOE que ante la presencia de los de Graba tu Pleno en su Ayuntamiento con sus equipos de grabación exclamaba: "apaguen los magnetófonos y los tomavistas o llamo a la Guardia Civil".

Este país me hacer llorar de risa y reir de llanto. Por cierto, Je suis Zapata.

Creación masiva de usuarios locales en Windows mediante WPKG.


Crear usuarios locales simultáneamente en muchas maquinas con Linux está tirado con puppet y su recurso "user". En Windows hacer eso no es tan sencillo, ya que o tenemos un Windows Server o usamos WPKG para evitar ir PC por PC creando el usuario.

Vamos a ver como hacerlo usando WPKG. Crearemos un usuario llamado oposicion perteneciente al grupo de administradores sobre todas las máquinas que pertenezcan a un perfil.

Lo primero es el package usuarios.xml, que guardaremos en el directorio de packages:


<?xml version="1.0" encoding="UTF-8"?>
<packages>

<package id="usuario_oposicion"
   name="Creacion usuario oposicion"
   revision="1"
   reboot="false"
   priority="1"
   execute="once">

   <install cmd="%comspec% /C net user /add oposicion passwordoposicion" />
   <remove  cmd="%comspec% /C net user /del oposicion" />

</package>

<package id="usuario_oposicion_admin"
   name="Inclusiónn usuario oposicion en administradores maquiina"
   revision="1"
   reboot="false"
   priority="1"
   execute="once">

   <depends package-id="usuario_oposicion" />
   <install cmd="%comspec% /C net localgroup Administradores oposicion /add" />

</package>


</packages>

Como se puede ver, hacemos uso de los comandos "net user" y "net localgroup" de Windows, una herencia de MS-DOS que permite manejar usuarios y grupos desde el cmd.exe. El depends es importante ya que establece precedencia en la ejecución de los paquetes.

Nótese que no hace falta regla remove en el paquete usuario_oposicion_admin ya que borrar el usuario de la máquina supone borrarlo en cascada de los localgroup a los que pertenece.

Ahora asociamos los paquetes al perfil nuevo, añadiendo en profiles.xml el nuevo perfil usuario_oposicion:


<profile id="usuario_oposicion">
   <variable name="SOFTWARE" value="\\wpkgserver\wpkg\files"/>
   <package package-id="usuario_oposicion" />
   <package package-id="usuario_oposicion_admin" />
</profile>

Por último, definimos en hosts.xml que máquinas están asociadas al perfil creado en el paso anterior:


<host name="a23-.+" profile-id="default">
   <profile id="prevencion" />
   <profile id="usuario_oposicion"/>
</host>

En este caso se aplica a todos los hosts cuyo nombre de máquina empiece por "a23-". Y con esto ya está, con que enciendan las máquinas y esperen unos minutos el usuario en cuestión estará creado mientras que nosotros hacemos cosas mas interesantes que crear usuarios uno a uno. Recordemos que el Eclesiastés dice eres mejor sysadmin cuanto mas tiempo dedicas a hacer cosas para no trabajar.

viernes, 5 de junio de 2015

Descomprimir, modificar y comprimir un paquete sencillo en Debian

Mi compañero Esteban Navas publicó hace poco un post para instalar plank en Debian Wheezy. Hacia tiempo que quería instalar un dock de ese tipo que fuera ligero y poco intrusivo para tener accesibles los enlaces mas comunes de los usuarios, ya que lo normal es que con el tiempo acaben borrados o escondidos entre  otros iconos del escritorio.

Junto con el paquete plank, Esteban ha construido un paquete plank-config con una configuración básica del dock, para colocar en el /etc/skel y copiar al home de todos los usuarios. Ambos paquetes pueden descargarse desde aquí.

Me interesaba coger el paquete plank-config y adaptarlo con los accesos directos que yo necesito, para luego volver a empaquetarlo. Hay varias herramientas para desempaquetar y reempaquetar un paquete .deb, la mas sencilla es dpkg-deb (otra mas potente y complicada es dpkg-buildpackage, que veremos en otro post mas adelante). Una vez descargado el paquete en cuestión plank-config_0.2_all.deb vamos a descomprimirlo en el directorio plank-config:
# apt-get install dpkg-deb
# dpkg-deb -R  plank-config_0.2_all.deb plank-config
# cd plank-config/

# ls -l
drwxr-xr-x 2 root root 4096 dic 16 17:18 DEBIAN
drwxr-xr-x 5 root root 4096 dic 16 17:18 etc
drwxr-xr-x 3 root root 4096 dic 16 17:18 usr

# tree
|-- DEBIAN
|   `-- control
|-- etc
|   |-- skel
|   |-- skel-alumno
|   `-- skel-profesor
`-- usr
    `-- share
        `-- doc
            `-- plank-config
                `-- changelog.gz

Para ver los ficheros ocultos (omito la salida ya que es enorme):
# tree -a 
....
....
....
En DEBIAN/control podemos cambiar el nombre del paquete en la instalación y la version. En los otros directorios podemos cambiar los ficheros que nos apetezca hasta adaptar el contenido de plank-config a nuestro gusto.
# cat DEBIAN/control 
Package: plank-config
Version: 0.2
Installed-Size: 1436
Section: gnome
Maintainer: Esteban M. Navas Martín <algodelinux@gmail.com>
Priority: optional
Architecture: all
Description: Configuración de Plank para IES
 Configuración de Plank con los accesos directos más comunes para el IES
La gente de orden lo que hacemos es editar el fichero control antes de nada para añadir comentarios de los cambios e incrementar la "Version". La sintaxis completa está en https://www.debian.org/doc/manuals/maint-guide/dreq.es.html#control

Una vez hechos los cambios, por ejemplo añadir un nuevo dockitem a etc/skel/.config/plank/dock1/launchers y en /.config/plank/dock1/settings, recomprimimos el paquete:
# dpkg-deb -b plank-config/ plank-config_0.3_all.deb
Este comando coge la información de DEBIAN/control y con eso y todo el contenido del directorio plank-config/* crea un paquete llamado plank-config_0.3_all.deb incluyendo los ficheros que hemos añadido/modificado/quitado.

A diferencia de otras herramientas dpkg-deb no necesita mas ficheros de metadatos que DEBIAN/control, por lo que si queremos crear un paquete desde cero simplemente tenemos que crear el fichero DEBIAN/control mínimo y añadir el resto de directorios y ficheros a instalar en ellos, comprimiendo finalmente todo con dpkg-deb -b.

Hasta pronto.....