Author: Oriol Rius

Raspberry PI and OpenWRT flash partition proposal and rescue boot support for embedded systems

Reading time: 8 – 14 minutes

Introduction

Main target of this post is describe how to organize flash partitions and how to modify default OpenWRT boot sequence to support a flexible and powerful rescue mode for Raspberry PI based projects. Just to clarify the explaination. When OpenWRT is build on a flash card for Raspberry, there are only two partitions.

The first one is vFat partition with kernel, firmware and other configuration files; the second one is a ext4 partition with root filesystem. Boot sequence loads the kernel and then mount root partition and run the init script. If ext4 filesystem is corrupted or could not be mounted boot sequence is stoped and there is no solution without extracting the flash card.

Features

In this blog entry I’m going to describe a partition table and boot sequence strategy to avoid this kind of problems. Of course, there are other solutions to get similar results but I think this one is simple and powerful at the same time.

Summarizing features of this solution:

  • reduce risk when using intensive writing app
  • reduce damage risk on flash memories
  • fail-safe mode pressing a button
  • support application upgrades using opkg packages
  • support operative system upgrades using opkg packages

This solution proposal assume:

  • wear leveling protection solved by flash card
  • button connected to GPIO pins

The idea

Raspberry PI requires a vfat partition as its first flash partition where there are several required files for booting process, this is a bootloader substitution. For example, in that partition there are files like: start*.elf and bootcode.bin which are the GPU firmware and bootloaders. Another key file is kernel.img; this is the kernel used for booting. Bootloader parameters for kernel booting are in a file called cmdline.txt and firmware parameters are set in config.txt.

At this point the most important think to take into account is kernel.img file and cmdline parameters. Because kernel is loaded and executed by default with cmdline parameters set. When kernel boot process finishes root filesystem and init process sequence will be figured out from cmdline parameters.

At this point take a look on proposed partition table could be useful: (spaces are just as a reference, use what you need)

p1 - vfat (~50MB)
p2 - ext4 - operative system base (read-only) (~150MB)
p3 - ext4 - operative system (read-write) (~250MB)
p4 - logical partition
  p4.1 - ext4 - your_application files (usually read-only)
  p4.2 - ext4 - your_application data (usually read-write)

Fail-safe boot process key is partition p2 where a minimal OpenWRT installation with a modified init sequence is found. Main idea here is detect if a GPIO shortcut is done, usually this is done just pressing a physical button and you can interact with the user emitting some beep, for example, you can tell the user when you are waiting for button press using a beep and then emit two beeps when button press is detected or nothing if no button is pressed in 3 seconds. Finally the idea is detect if you need a regular boot or a fail-safe boot.

My suggestion for minimal OpenWRT is a small footprint installation of OpenWRT without kernel modules, just the monolitic kernel loaded. Then reduce init sequence to the minimum and add fail-safe logic (GPIO button capture); if button is pressed stop boot sequence and give a shell to the user. Regular way will be invoke init file of the rootfs (p3 in the partition table).

I think the idea is simple and the complexity is reduced in two parts both of them are the init file. To be more precise the p2 partition table has its own init file and p3 the other one. p2 init file load the minimum hardware to control button and give rescue environment when it’s needed. And p3 init file mounts read-write partition and the regular filesystem with regular boot processes and all kind of stuff that you need.

Final notes

I know this is not a very practical post, but my intention is only share some ideas that I have in mind. I spend most of my time designing architectures and I think this is a very powerful architecture of a boot sequence for some professional projects based on Raspberry PI and OpenWRT.

The best way to do what I describe in this post is putting p2 in a initrd file which is referenced in kernel parameters. Because then all read-only system is a RAM partition and rootfs init file has the PID 1 dropping dual-init file complexity. But I decided to modify this part because in the past I had some problems creating initrd files specially when required space for that partition is bigger than RAM. Anyway it’s important to take in account that initrd files has the same purpose as the proposed p2 partition.

Useful links

Small recap of web shell applications

Reading time: 2 – 2 minutes

Lately I found some useful web applications that publish a terminal application. This is very useful when you are traveling or you have a remote server which you want to maintain or access from anywhere. Also another interesting use of this kind of applications is as a terminal for embedded devices.

I tried to use them as my default applications but all of them have the same problem: keyboard shortcuts conflict with the browser. I’m very used to use a lot of shortcuts to manage my terminal application and remote shell and this is a problem because most of the shortcuts are redefined by your browser. May be it’s possible to disable browser shortcuts when you are using this kind of web applications but I didn’t find how.

I hope this small list is as much useful for you as it is for me:

  • Wetty = Web + tty (the best one IMHO)

wetty

ajaxterm

anyterm

gateone

Entrevista en el “Ara”, la película “The Shift” y meditación contemplativa (budismo Kadampa)

Reading time: 6 – 9 minutes

Un "Geek" de pura raça

En realidad esta entrada será un poco un cajón desastre de cositas que creo que son interesantes para compartir. Lo escribo en castellano porqué quiero clasificarlo en la sección de crecimiento personal y ahí en general escribo en esta lengua.


Para empezar quería compartir una entrevista que me hicieron en el periódoco “Ara” y que salió publicada por “La Diada”. Aquí tengo que agradecer a Josep María que me recomendara para ser entrevistado en el especial “La Catalunya que empeny”.  La verdad es que estas cosas no tienen ninguna, o muy poca, trascendencía pero hacen ilusión. Es como un reconocimiento al trabajo hecho y eso es de agradecer. Tanto al periódico como a Josep María. Si a alguien le interesa hay que decir que esta en catalán y aquí teneis un enlace en PDF.

También comentar que hace un tiempo me hicieron otra entrevista en este mismo periódoco. En este caso la entrevista era relativa a un tema de mi trabajo. Como en su momento no compartí este artículo con vosotros aprovecho esta ocasión para hacerlo. Para leerlo mejor os recomiendo clicar encima de la imagen.

Internet de les coses un futur a la punta dels dits

Seguidamente quiero compartir con vosotros una película llamada “El Cambio” (The Shift, en inglés [IMDB]). Creo que es una gran película para reflexionar y hacer un examen de conciencia. A menudo nuestra vida es una carrera sin sentido. Digo esto porqué nos descubrimos habiendo renunciado a muchas de nuestras ilusiones y ni tan sólo nos hemos dado cuenta. Creo que el día a día se convierte en nuestro enemigo y esto es justo lo que personalmente hace unos 5 años que estoy trabajando muy profundamente. En mi próxima entrada os explicaré como lo hago para mantener el foco hacia mis objetivos, seguir mejornado cada día como persona y proyectarme hacia el futuro tal y como me gustaría ser. Evidentemente para leer mis articulos no hace falta hacer ningún tipo de tarea previa pero haber visto esta película creo que puede ayudar y mucho.

En la película el doctor Wayne Dyer se dedica a narrar cuales son las lecciones de vida que ha ido adquiriendo al hacerse mayor. Famoso por ser un escritor de “best sellers” relacionados con el desarrollo personal; el doctor nos recuerda lecciones tan importantes como el cambio de valores que sufrimos al hacernos mayores. Creo que es una gran película para plantearse el proposito de nuestra vida. Bajo mi punto de vista esta es una de esas películas que debería ver todo el mundo. Para que la película sea más comprensible y menos densa la narrativa se mezcla con diferentes historías que comparten un escenario común pero que no llegan a mezclarse. Creo que las historias son ideales para amenizar las 2h de película y entender de forma más profunda lo que nos esta explicando el doctor.

Finalmente para cerrar esta entrada quería comentaros que este mismo Viernes fui a una clase de meditación que se celebró en Vilafranca. Hace mucho tiempo que estoy alerta de este tipo de eventos porqué me gustaría ampliar mis horizontes en este tema. Hace ya unos tres años que practico a diario la meditación pero me gustaría compartir esto con más personas cercanas. Pues bien, quería explicaros que la meditación realizada fue de tipo contemplativa. No es la primera vez que practico meditación de este tipo aunque la que practico más a menudo es el Mindfulness. Lo que si que es la primera vez que me pasa es que es recibir doctrinas budistas durante la clase. Concretamente de budismo Kadampa rama que tiene como guía espiritual el Geshe Kelsang Gyatso.

La verdad es que no me sentí del todo cómodo con el tipo de enseñanzas que se trasmiten. Primeramente el profesor tenía una forma de compartir el contenido muy caótica y a pesar de verse claramente que era una persona muy comprometida y profundamente agradable; tenía la mala costumbre de mirar sólo a una de las personas de la clase. Tanto es así que había momentos en que se refería sólo a ella obviamento el resto de alumnos. Además nos hablaba con una serie de prejuicios sobre nuestros comportamientos asumiendo ciertos hechos que llegaban a ser molestos.  Creo que es bueno preguntar cuando tienes un grupo muy reducido para saber cual es el nivel de los presentes para así poder adaptar el mensaje al público. Estoy convencido que todos llevábamos tiempo experimentando con la meditación pero él asumía una y otra vez que nadie había hecho absolutamente nada antes y que no sabiamos nada del budismo ni de meditación.

kmc-bcn-meditacion

Entrando en los contenidos del budismo Kadampa, por lo menos como yo los recibí el Viernes, tengo que decir que no fueron muy integradores. Es decir, siempre se me ha presentado el budismo como algo muy diferente a las religiones occidentales, de hecho, a menudo los profesores que he tenido me han dicho que es una filosofía y no una religión. Como tal hasta ahora se me habían presentado areas y espacios de meditación que siempre eran integradoras y abiertas para adaptarse de forma amable. Dicho de otra forma nunca había tenido profesores que me transmitieran que el budismo prohibía hacer, escuchar, decir, … ciertas cosas. Me ahorraré los detalles porqué no quiero abrir ningún debate y obviamente tengo la capacidad de respetar todos los puntos de vista. Otra cosa es que esto me anime a seguir escuchando puntos de vista que no les importa escuchar el de los demás.

Quiero dejar claro que no fue una experiencia negativa. Disfruté de la meditación y salí en un estado de relajación y aceptación que me permitieron conectar con mi paz interior. Pero no me sentí con ánimos de volver otro día. Seguramente le de otra oportunidad a esta rama del budismo pero intetaré ver otro punta de vista; quizá el de algún profesor más experimentado o con una oratoria que me haga sentir más cómodo.

Cursos de Management 3.0 y Workout

Reading time: 3 – 5 minutes

Management 3.0

Esta semana he disfrutado de dos curso que os quería recomendar. Basados en los libros de Jurgen Appelo el curso Management 3.0 y el Workout. Los cursos son mucho más que un resumen de los libros. He tenido la suerte de tener tres profesores Angel Medinilla, Angel Diaz-Maroto y Gabriel Prat; los tres con una amplia experiencia en el mundo del management y especialmente el mundo ágil. Su forma de dar el curso es muy dinámica y participativa, llena de historias y ejemplos. Esto ayuda a convertir el curso en una experiencia que como seguro sabeis es la mejor forma de aprender. Se nota en muchísimos casos un amplio background en técnicas innovadoras como coaching y programación neurolingüística. El curso me ha encatado especialmente porqué no sólo la forma lo lleva al mejor nivel de otros muchos cursos que he hecho; también el contenido en este caso encaja perfectamente a los retos a los que me enfrento día a día. Además los compañeros tienían muchísimos escenarios afines a los mios y esto ayuda a tener intereses alineados.

Es espectacular ver como la dirección de equipos tiene que ver cada vez más con la auto-gestión acompañada de un buen liderazgo. Aparcando el autoritarismo y las soluciones simplistas a un lado. Usando los procesos en su justa medida, es decir como una herramienta no como un fin. Además de hacer un modelado que por fin tiene en cuenta la realidad, me refiero a entender a los equipos como sistemas complejos. Sistemas que no se pueden solucionar con simples formulas de causa-efecto o pretender conseguir cosas complejas con incentivos simples, la típica paradoja de la zanaoria. Es realmente fantástico descubrir que hay otra dimensión, tal y como se comentaba en el curso los equipos tienen tres dimensiones y su compleijidad es infinita por lo tanto sólo desde la complejidad seremos capaces de alinear objetivos con la empresa.

Pretender hacer un resumen del curso en esta pequeña recomendación creo que es una tontería así que me conformo con recomendar a todos los gestores de equipos, técnicos y no técnicos que se permitan explorar este fantástico mundo del Management 3.0 para ser capaces de descubrir que se puede crecer más allá de la era de los procesos y las certificaciones. Estamos viviendo la revolución del conocimiento los métodos usados para dirigir las anteriores revoluciones no funcionan en esta era. Hay que saber encontrar un punto de equilibrio que es mucho más complejo de alcanzar que los que se habían planteado anteriormente, ahora se trata de que los equipos de personas rindan y para esto no es suficiente con guiarnos únicamente con lo que dicen los indicadores. No olvidemos que hay que ir muy en cuidado al medir porqué podríamos encontrar lo que queremos. Esta es una de las muchas lecciones que no entiendes hasta que eres víctima de ella o tienes la suerte de que la integres gracias a un curso como este.

Para cerrar quiero añadir que el coste del curso ha sido una inversión buenísima, la experiencia y empatía que son capaces de transmitir estos tres profesores es increible. Así pues recomiendo a todo el mundo que tenga la necesidad de gestionar a un grupo de personas que inverta su energía en aprender estas técnicas, sinceramente se hace difícil pensar en innovación sin haber conocido este mundo antes y hacerlo a través de personas con una experiencia tan dilatada; creo que ha sido una suerte.

Secure download URLs with expiration time

Reading time: 23 – 38 minutes

Requirements

Imagine a HTTP server with those restrictions:

  • only specific files can be downloaded
  • with a limited time (expiration date)
  • an ID allows to trace who download files
  • with minimal maintenance and dependencies (no databases, or things like that)

the base of the solution that I designed is the URL format:

http://URL_HOST/<signature>/<customer_id>/<expire_date>/<path_n_file>
  • signature: is calculated with the next formula, given a “seed”
    • seed = “This is just a random text.”
    • str = customer_id + expire_date + path_n_file
    • signature = encode_base64( hmac_sha1( seed, str))
  • customer_id: just an arbitrary identifier when you want to distinguish who use the URL
  • expire_date: when the generated URL stops working
  • path_n_file: relative path in your private repository and the file to share

Understanding the ideas explained before I think it’s enough to understand what is the goal of the solution. I developed the solution using NGINX and LUA. But the NGINX version used is not the default version is a very patched version called Openresty. This version is specially famous because some important Chinese webs works with that, for instance, Taobao.com

Expiration URL solution Architecture schema

In the above schema there is a master who wants to share a file which is in the internal private repository, but the file has a time restriction and the URL is only for that customer. Then using the command line admin creates a unique URL with desired constrains (expiration date, customer to share and file to share). Next step is send the URL to the customer’s user. When the URL is requested NGINX server evaluates the URL and returns desired file only if the user has a valid URL. It means the URL is not expired, the file already exists, the customer identification is valid and the signature is not modified.

NGINX Configuration

server {
 server_name downloads.local;

 location ~ ^/(?<signature>[^/]+)/(?<customer_id>[^/]+)/(?<expire_date>[^/]+)/(?<path_n_file>.*)$ {
 content_by_lua_file "lua/get_file.lua";
 }

 location / {
 return 403;
 }
}

This is the server part of the NGINX configuration file, the rest of the file can as you want. Understanding this file is really simple, because the “server_name” works as always. Then only locations command are relevant. First “location” is just a regular expression which identifies the relevant variables of the URL and passes them to the LUA script. All other URLs that doesn’t match with the URI pattern fall in path “/” and the response is always “Forbiden” (HTTP 403 code). Then magics happen all in LUA code.

LUA scripts

There are some LUA files required:

  • create_secure_link.lua: creates secure URLs
  • get_file.lua: evaluates URLs and serves content of the required file
  • lib.lua: module developed to reuse code between other lua files
  • sha1.lua: SHA-1 secure hash computation, and HMAC-SHA1 signature computation in Lua (get from https://github.com/kikito/sha.lua)

It’s required to configure “lib.lua” file, at the beginning of the file are three variables to set up:

lib.secret = "This is just a long string to set a seed"
lib.base_url = "http://downloads.local/"
lib.base_dir = "/tmp/downloads/"

Create secure URLs is really simple, take look of the command parameters:

$ ./create_secure_link.lua 

 ./create_secure_link.lua <customer_id> <expiration_date> <relative_path/filename>

Create URLs with expiration date.

 customer_id: any string identifying the customer who wants the URL
 expiration_date: when URL has to expire, format: YYYY-MM-DDTHH:MM
 relative_path/filename: relative path to file to transfer, base path is: /tmp/downloads/

Run example:

$ mkdir -p /tmp/downloads/dir1
$ echo hello > /tmp/downloads/dir1/example1.txt
$ ./create_secure_link.lua acme 2015-08-15T20:30 dir1/example1.txt
http://downloads.local/YjZhNDAzZDY0/acme/2015-08-15T20:30/dir1/example1.txt
$ date
Wed Aug 12 20:27:14 CEST 2015
$ curl http://downloads.local:55080/YjZhNDAzZDY0/acme/2015-08-15T20:30/dir1/example1.txt
hello
$ date
Wed Aug 12 20:31:40 CEST 2015
$ curl http://downloads.local:55080/YjZhNDAzZDY0/acme/2015-08-15T20:30/dir1/example1.txt
Link expired

Little video demostration

Resources

Disclaimer and gratefulness

15 anys amb el blog online

Reading time: 1 – 2 minutes

Avui dia 31 de juliol fa 15 anys que vaig decidir-me a escriure el meu primer article al blog. Com passa el temps! cada cop que penso que el dia que vaig començar no sabia ni el que era un blog i que l’anomenava “digital diary”. Sovint escric tot dient que tinc l’agenda plena i que no sé d’on treure temps per escriure. Doncs bé, després d’un periode molt i molt llarg de temps on el meu vincle en diversos projectes m’impedia dedicar temps al blog puc dir que tot i tenir una llista de desitjos quasi infinita. Ja no tinc obligacions fortes en projectes fora dels horaris convencionals. Així doncs, en pocs mesos disposaré de temps per gestionar en els meus interessos personals cosa que fins ara no tenia.

15th-anniversary

De moment el meu proposit serà anar publicant alguns dels molts articles que tinc a mig fer i pendents de fer publics. Desitjo que aquest proper any la freqüència de publicacions al blog canviï dràsticament. Creuem els dits perquè pugui mantenir el desig.

Gràcies a tots els fidels seguidors que teniu la paciència d’anar-me seguint.

Conferència Summer Camp Garrotxa 2015: SmartHome usant Arduino, Raspberry PI i més

Reading time: 1 – 2 minutes

Aquest cap de setmana vaig tornar a donar la meva conferència sobre “SmartHome” en aquesta ocasió vaig introduïr la novetat del sistema de feedback basat en “Tasker + Auto-notification”, a més de l’execusió de tasques basades en “crontab”. També he inclòs un petit avanç sobre el nou projecte en el que estic treballant per tal d’integrar les dades del descalcificador dins del OpenHAB usant una webcam i OpenCV per processar les imatges optingudes.

Agraïr al Xavi, Gerardo i la Laura per haver-me donat aquesta oportunitat. Tant el SCG15 com el SAX2015 són events molt familiars a més l’entorn és espectacular. Tot un descobriment del que malgrat tenir referències no havia pogut disfrutar en primera persona.

scg2015

Reflexions d’aniversari: avui 38

Reading time: 4 – 6 minutes

google-congratulations

En dies com avui sempre aprofito per fer les meves reflexions. Aquests quasi 15 anys que porto escribint el blog alguns cops les he compartit amb vosaltres, doncs avui em ve de gust tornar-ho a fer. Si algo he après després de 38 primaveres és que les coses bones ho són encara més si les pots compartir. A tots ens agrada compartir els moments d’alegria però es fa més difícil obrir-se quan es tracta de mostrar el dolor; malgrat tot en més d’una ocasió he decidit també compartir els moments durs que m’ha tocat viure.

Culturalment els aniversaris sempre se m’han presentat com una alegria, malgrat algunes persones s’esforcen en amagar anys i en entristir-se de l’edat que van acumulant. En general tothom parla de celebracions i actes festius per compartir amb alegria l’efemèride. L’any passat com la majoria sabeu el dia va estar marcat per una sombra molt trista, la història del Pol, i obviament això marca molt. És a dir, que fa pocs dies va fer un any i aquest tipus de coses deixen una petjada molt fonda.

Amb tot plegat el que vull dir és el que recordava fa un parell de dies quan agraïa la nova oportunitat que m’havia donat la vida després de l’accident que vaig patir fa 12 anys (Fa 12 anys que vaig tornar a neixer). La vida és un regal fantàstic plena de lliçons constants, algunes són tan espectaculars que ens fan dividir la vida en un abans i un després dels fets. Estic convensut que cadascú de nosaltres en té unes quantes d’aquestes lliçons. Això ho dic perquè quan miro enrera i hem poso a repassar aquests punts d’inflexió veig que me n’ha tocat viure uns quants i alguns de ben grossos. És a dir, que han marcat canvis molt importants.

Quan jo tenia 9 anys el meu pare ens va deixar en un accident de feina, des d’aquell moment vaig tenir clara una cosa; la definició de “normal” ja no m’aplicava. Al sentir les típiques frases que et deien a l’escola “digueu als pares…” o, “que vinguin a veurem els pares…” cada cop que sentia això jo em sentia molt diferent. Amb la perspectiva que hem dona el temps ara veig que això em va marcar molt el caràcter.

Una de les coses que vaig aprendre és a acceptar el que hem tocava viure i a agafar consciència de quines eren les avantatges i inconvenients que tenia a l’abast en cada moment. Això em va convertir en algú molt perseverant i fins hi tot alguns dieren que un lluitador. Cosa que després d’acabar la carrera em va permetre tenir un perfil professional molt diferencial amb la majoria de persones que tenia al voltant.  Tan és així que trets negatius com la sopèrbia i el despotisme s’havia incorporat en la meva forma d’actuar.

Però la vida sempre té una nova lliçó apunt per fer-te tornar a tocar de peus a terra, en aquest cas va ser l’accident de cotxe al que feia referència abans. Obviament un cop tan fort et fa reflexionar i un nou procés de transformació es va iniciar dins meu. Gràcies a persones excepcionals a més de tècniques com la PNL i el coaching vaig iniciar un treball personal d’autoconeixment i de modelat de mi mateix que de ben segur no acabarà fins el dia que m’acomiadi d’aquest món.

Sort que gràcies a les dosis d’humilitat que he anat revent fa molts anys que he agafat consciència de que no sóc ningú i que la meva existència esta condicionada a unes energies tan poderoses que escapen del meu control, sense oblidar que sóc jo com decideixo viure aquests fets. Perquè de nou “La història del Pol” em va arribar en un moment de plenitut després d’haver iniciat un procés fantàstic amb l’Estefania i un projecte professional molt motivador. Així que ara mateix no tinc la perspectiva suficient com per entendre al 100% el missatge que em vol donar la vida amb aquesta lliçó però com repeteixo dia rera dia: gràcies per permetrem seguir endavant i poder compartir el millor de mi mateix.

A tots els que d’una forma o d’una altre heu compartit i/o compartiu el camí de la meva vida, només ús puc donar les gràcies. No oblideu que d’una forma o d’una altre sou mestres que m’heu ajudat a creixer i a evolucionar fins a convertir-me en el que sóc.

“” El que tinc m’ho han donat els meus èxits,
però el que sóc és fruit dels meus errors. “”

— Oriol Rius

Free dynamic DNS service

Reading time: < 1 minute A long time ago there were several free dynamic DNS services but nowadays it's difficult to find one of them. And when you find the service usually you have some important restrictions like: number of updates per day or only few subdomains per account. But in the end I found a good free service of that, it's part of the project guifi.net and is called: Qui; you only need a guifi.net account to use the service and it’s really simple and clear. From my part the compatibility with “ddclient” and the “mikrotik” script are really useful and I want tu highlight this functionality.

Fa 12 anys que vaig tornar a neixer

Reading time: < 1 minute De tant en tant em ve al cap aquella expressió que diu: "Hi ha coses a la vida que la divideixen en dos, es marca un abans i un després de...". Doncs bé, avui es compleixen 12 anys d'un dels fets que ha dividit la meva vida. Tal dia com avui hem dirigia a una reunió a València i vaig patir un accident de cotxe espectacular com podeu apreciar a la fotografia. Sort que no hem vaig fer ni una rascada. accident bmw

Dies com aquest serveixen per recordar-te la teva fragilitat i fins a quin punt hem d’estar agraïts de poder disfrutar d’aquesta aventura tan apassionant que és la vida. Així doncs acabo aquest article tradicional en el blog acabant com sempre amb un GRÀCIES.

Scroll to Top