Agregar webOS OSE a NOOBS

2018/03/31

Agregar webOS OSE a NOOBS

Instrucciones para agregar SO a noobs: https://github.com/raspberrypi/noobs#how-to-create-a-custom-os-version

Generación de tarballs

Crear directorios de trabajo:

$ mkdir -p ~/noobs-webos/mnt

Descargar imagen de webOS OSE (se utiliza la disponible en https://github.com/webosose/build-webos/issues/1):

$ wget -P ~/noobs-webos "https://www.rvdboorn.nl/webos-image-raspberrypi3.rootfs.rpi-sdimg"

Crear loop devices para las particiones dentro de la imagen:

$ sudo losetup --partscan --read-only --find --show ~/noobs-webos/webos-image-raspberrypi3.rootfs.rpi-sdimg
/dev/loop0

La salida del comando anterior indica que se estará utilizando el dispositivo /dev/loop0.

Generar el tarball correspondiente a la partición boot (montar la partición boot, generar tarball con su contenido y desmontar la partición):

$ sudo mount -o ro /dev/loop0p1 ~/noobs-webos/mnt
$ cd ~/noobs-webos/mnt
$ sudo tar --sort=name --numeric-owner --one-file-system -cpf ~/noobs-webos/boot.tar .
$ xz -9 -e ~/noobs-webos/boot.tar
$ cd; sudo umount ~/noobs-webos/mnt

Generar el tarball correspondiente a la partición root (siguiendo los pasos utilizados para generar el tarball de boot):

$ sudo mount -o ro /dev/loop0p2 ~/noobs-webos/mnt
$ cd ~/noobs-webos/mnt
$ sudo tar --sort=name --numeric-owner --one-file-system -cpf ~/noobs-webos/root.tar .
$ xz -9 -e ~/noobs-webos/root.tar
$ cd; sudo umount ~/noobs-webos/mnt

Realizar el detach del loop device utilizado:

$ sudo losetup -d /dev/loop0

En este punto se tienen los tarballs correspondientes a la partición boot y a la root: boot.tar.xz y root.tar.xz.

Creación de archivos para el custom OS de NOOBS

Se descarga imagen de NOOBS (actualmente es la versión 2.7.0) y se descomprime:

$ wget -P ~/noobs-webos "https://downloads.raspberrypi.org/NOOBS/images/NOOBS-2018-03-14/NOOBS_v2_7_0.zip"
$ unzip -d ~/noobs-webos/noobs ~/noobs-webos/NOOBS_v2_7_0.zip

Se crea el directorio en el que irán los archivos que definen el OS webOS OSE:

$ mkdir ~/noobs-webos/noobs/os/webos-ose/

Aquí conviene ver los archivos os.json, partitions.json y partition_setup.sh del directorio Raspbian para hacerse una idea del formato general.

Se crea el archivo os.json con el siguiente contenido:

{
    "name": "webOS OSE",
    "description": "webOS Open Source Edition",
    "url": "http://webosose.org/",
    "username": "root",
    "password": "",
    "version": "1.0"
}

Este archivo es creado utilizando como base el archivo os.json de Raspbian. Los valores de username y password utilizados son obtenidos de http://webosose.org/discover/setting/setting-up-networking/:

The default account information is as follows. (ID: root, password: none)

Se crea el archivo partitions.json con el siguiente contenido:

{
    "partitions": [
        {
            "filesystem_type": "FAT",
            "label": "boot",
            "mkfs_options": "-F 32",
            "partition_size_nominal": 69,
            "uncompressed_tarball_size": 22,
            "want_maximised": false
        },
        {
            "filesystem_type": "ext4",
            "label": "root",
            "mkfs_options": "-O ^huge_file",
            "partition_size_nominal": 4470,
            "uncompressed_tarball_size": 436,
            "want_maximised": true
        }
    ]
}

Este archivo es creado utilizando como base el archivo partitions.json de Raspbian y reemplazando los valores de uncompressed_tarball_size con los obtenidos mediante el comando xz -l:

$ xz -l ~/noobs-webos/noobs/os/webos-ose/*.tar.xz
Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
    1       1  6,269.2 KiB     21.4 MiB  0.286  CRC64   /home/xxx/noobs-webos/noobs/os/webos-ose/boot.tar.xz
    1       1    128.6 MiB    435.3 MiB  0.295  CRC64   /home/xxx/noobs-webos/noobs/os/webos-ose/root.tar.xz
-------------------------------------------------------------------------------
    2       2    134.7 MiB    456.8 MiB  0.295  CRC64   2 files

Se copian los archivos Raspbian.png y partition_setup.sh del directorio Raspbian:

$ cp ~/noobs-webos/noobs/os/{Raspbian,webos-ose}/partition_setup.sh
$ cp ~/noobs-webos/noobs/os/Raspbian/Raspbian.png ~/noobs-webos/noobs/os/webos-ose/webos-ose.png

Por último se mueven los tarballs creados previamente:

$ mv ~/noobs-webos/{boot.tar.xz,root.tar.xz} ~/noobs-webos/noobs/os/webos-ose/

Por último se siguen los pasos detallados en https://github.com/raspberrypi/noobs#setup para instalar la versión customizada de NOOBS en una sdcard.