Página 1 de 1

Crear tu propia imagen personalizada y optimizada de Raspbian.

Publicado: 06 May 2017, 06:52
por tatxen
Crear tu propia imagen personalizada y optimizada de Raspbian.

Vamos a crear una imagen personalizada de Raspbian, ya sea para hacer un media center, un escritorio o una maquina de juegos.
Recomiendo hacer todas estas operaciones desde Linux, un CD live de LinuxMint Mate por ejemplo nos puede servir perfectamente.

Para no complicar mucho las cosas vamos a partir de una imagen de Raspbian estandar, pero la mínima.
Nos descargamos Raspbian Jessie Little de aquí: https://downloads.raspberrypi.org/raspbian_lite_latest y la grabamos en la tarjeta SD de la forma habitual. Yo recomiendo hacerlo desde Linux y por lo tanto mediante el comando dd:
sudo dd if=/”ruta a la imagen descargada” |pv|dd of=/”ruta a la tarjeta SD” bs=1M (ejemplo: sudo dd if=/home/usuario/descargas/2016-11-25-raspbian-jessie-lite.img |pv|dd of=/dev/mmcblk0 bs=1M) pero también lo podemos hacer mediante la utilidad gráfica Disk incluida en linuxMint, solo hay que seleccionar el la parte izquierda la tarjeta SD, y en el menú superior seleccionar “restaurar imagen de disco” eligiendo a continuación la imagen que hemos descargado.
Imagen

Una vez grabada la tarjeta SD vamos con la primera optimización, que consiste en reducir en lo posible las escrituras en la tarjeta para preservar su vida útil al máximo, para eso vamos a hacer que los archivos temporales no se escriban en la tarjeta y que lo hagan en la memoria ram. Para eso tenemos que modificar el archivo etc/fstab.
Para eso necesitamos montar la tarjeta SD, para poder escribir en ella. Usando Disk, seleccionamos la tarjeta y clicamos en el pequeño símbolo de flecha de la partición root.
Imagen
Para poder escribir el archivo fstab tenemos que hacerlo como administrador, así que en un terminal escribimos “sudo pluma /dev/mmcblk0p2/etc/fstab” (si queréis usar otro editor de texto, sustituir “pluma” por el nombre del editor que vayáis a usar).
Una vez abierto fstab, su aspecto sera este:

Código: Seleccionar todo

proc            /proc           proc    defaults          0       0
/dev/mmcblk0p1  /boot           vfat    defaults          0       2
/dev/mmcblk0p2  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
ACTUALIZACIÓN
En las ultimas versiones de Raspbian de Abril del 2017 las particiones ya no se identifican como dispositivo y usan el UUID para definirlas, o sea que en vez de /dev/mmcblkop1 aparecerá algo como UUID=75608334-1 para la partición /boot o primera partición del disco, UUID=75608334-2 para la partición /root o segunda partición de disco y así con todas. Esto solo afecta si queréis hacer una partición swap en la tarjeta, que tendríais que identificarla con su UUID y un 3 al final (UUID=75608334-3) si no hacéis partición swap no afecta en nada.
En el archivo cmdline.conf también ha cambiado esta forma de identificar la partición /root, así que si queréis instalar el sistema en una unidad USB tendréis que acordaros de identificar la nueva partición /root con su UUID y no como /dev/sdaX como hasta ahora.


Para que los archivos temporales se escriban a directorios montados en la ram añadimos las siguientes lineas:

Código: Seleccionar todo

tmpfs   /tmp                    tmpfs   defaults,noatime,mode=1777              0       0
tmpfs   /var/tmp                tmpfs   defaults,noatime                        0       0
tmpfs   /var/log                tmpfs   defaults,noatime                        0       0
tmpfs   /var/log/apt            tmpfs   defaults,noatime                        0       0
tmpfs   /var/cache/apt/archives tmpfs   defaults,noexec,nosuid,nodev,mode=0755  0       0
De forma que el resultado final seria este:
Imagen

Le damos a guardar y ya podemos cerrar el editor.
También deberíamos aprovechar para mirar el archivo config.txt que está en la partición boot y ver si hay que configurar algo para nuestra pantalla y sistema de audio.
También es un buen momento para ver si tenemos que configurar el acceso a red, mediante los archivos /etc/network/interfaces y /etc/wpa_supplicant/wpa_supplicant.conf, como de esto hay muchos tutoriales no me enrollo mas.




Ya podemos introducir la SD en la Raspi y proceder con el primer arranque.

Al ser una imagen mínima no vamos a encontrarnos con un escritorio gráfico si no con la cli (la linea de comandos). Tras logearnos, arrancamos la utilidad raspi-config para configurar el idioma, zona horaria y tipo de teclado:

Código: Seleccionar todo

sudo raspi-config
Lo siguiente es asegurarnos de que tenemos todo bien actualizado, para lo que ejecutamos sucesivamente los comandos:

Código: Seleccionar todo

sudo apt-get update

Código: Seleccionar todo

sudo apt-get upgrade

Código: Seleccionar todo

sudo apt-dist upgrade

Código: Seleccionar todo

sudo apt-get install rpi-update

Código: Seleccionar todo

sudo rpi-update
Tras esto reiniciamos.

Por defecto Raspbian usa un archivo de paginacion, lo que provoca muchas escrituras en la tarjeta, para evitarlo vamos a recurrir a zram, un sistema que usa la ram para alojar un archivo comprimido que el sistema usa como swap, parece una incongruencia pero el sistema funciona mas rapido y no consume demasiada ram.
Creamos el archico zram.sh:

Código: Seleccionar todo

sudo vi /etc/init.d/zram.sh
Contenido del archivo:

Código: Seleccionar todo

#!/bin/bash
modprobe zram
echo 3 >/sys/devices/virtual/block/zram0/max_comp_streams
echo lz4 >/sys/devices/virtual/block/zram0/comp_algorithm
echo 268435456 >/sys/devices/virtual/block/zram0/mem_limit
echo 536870912 >/sys/devices/virtual/block/zram0/disksize
mkswap /dev/zram0
swapon -p 0 /dev/zram0
sysctl vm.swappiness=70
Guardamos y salimos con :q
Lo hacemos ejecutable:

Código: Seleccionar todo

sudo chmod +x /etc/init.d/zram.sh
Y ya solo queda ejecutar:

Código: Seleccionar todo

sudo update-rc.d zram.sh defaults
Ahora hay que eliminar el archivo de swap y el programa dphys

Código: Seleccionar todo

sudo swapoff -a

Código: Seleccionar todo

sudo rm /var/swap

Código: Seleccionar todo

sudo apt-get purge dphys-swapfile
Comenzamos la instalación. Lo primero seria instalar los módulos Preload y Prelink, que se encargan de agilizar la carga y funcionamiento del sistema. Para que esto no se convierta en una biblia no me enrollo describiendo lo que hacen jeje.

Código: Seleccionar todo

sudo apt-get install preload

Código: Seleccionar todo

sudo apt-get install prelink
Prelink necesita configurar algunas cosillas para poder olvidarnos de el y que se ejecute solo en las circunstancias adecuadas para actualizarse, para eso usaremos el editor de texto de la linea de comandos:

Código: Seleccionar todo

sudo vi /etc/default/prelink
Buscamos la linea que pone “PRELINKING” y cambiamos en “unknow” por “yes” y en el mismo archivo podemos cambiar la frecuencia con que se actualiza prelink, pero podemos dejar las opciones por defecto. Para guardar los cambios y salir de vi :q
Y ahora vamos a hacer que prelink se actualice ante cualquier cambio de software, para lo que recurrimos de nuevo a vi:

Código: Seleccionar todo

sudo vi /etc/apt/apt.conf
y añadimos lo siguiente:

Código: Seleccionar todo

DPkg::Post-Invoke {"echo Ejecutando prelink, espere...;/etc/cron.daily/prelink";}
De nuevo guardamos y salimos con :q

Para mantener el tamaño final de la imagen lo mas contenido posible, y si no vamos a usar mas de un idioma, podemos instalar localepurge que se encarga de eliminar los archivos de idiomas no usados en el sistema.
Para instalarlo:

Código: Seleccionar todo

sudo apt-get install localepurge
Durante la instalacion nos pedira que seleccionemos los idiomas que queremos mantener en el sistema, tambien nos preguntara si queremos mantener idiomas suplementarios para algunas aplicaciones, lo normal será contestar que no, y continuara la instalacion.
Una vez terminada lo ejecutamos por primera vez:

Código: Seleccionar todo

sudo localepurge
Después no sera necesario volver a ejecutarlo, se ejecuta solo al instalar cualquier programa.

ENTORNO GRAFICO

Ahora vamos a instalar el servidor gráfico y xinit que es el encargado de iniciar sesiones gráficas:

Código: Seleccionar todo

sudo apt-get install --no-install-recommends xserver-xorg

Código: Seleccionar todo

sudo apt-get install --no-install-recommends xinit
Y ahora llegaría el momento de instalar el escritorio o entorno gráfico que queramos, os pongo algunos ejemplos:

XFCE

Código: Seleccionar todo

sudo apt-get install xfce4 xfce4-terminal
LXDE

Código: Seleccionar todo

sudo apt-get install lxde-core lxappearance
PIXEL

Código: Seleccionar todo

sudo apt-get install raspberrypi-ui-mods
MATE

Código: Seleccionar todo

sudo apt-get install mate-desktop-environment
ICEWM

Código: Seleccionar todo

sudo apt-get install icewm
Tras la instalación básica de uno (o varios) escritorios seria aconsejable instalar un gestor (la ventana de login) aun que después configuremos el sistema para que se inicie directamente en el escritorio. El mas usado es Lightdm, que ademas es imprescindible para poder usar algunas funciones de raspi-config. Para instalarlo:

Código: Seleccionar todo

sudo apt-get install lightdm
Después de esto ya podemos reiniciar la Raspi (sudo reboot) y continuar en modo gráfico si queremos.

COMPLEMENTOS RECOMENDADOS

SYNAPTIC
Para instalar y quitar software desde el entorno gráfico es muy recomendable instalar Synaptic:

Código: Seleccionar todo

sudo apt-get install synaptic
Si instaláis Synaptic, los siguientes pasos podéis hacerlos desde el y no desde la cli, buscando el nombre de los programas.

GNOME_NETWORK_MANAGER
A mi me gusta usar para las configuraciones de red network-manager, si no cambiar habitualmente la forma de conectaros a red no es necesario, pero si cambiáis frecuentemente de red o queréis usar vpn de forma sencilla es muy recomendable.
Para cambiar a networ-manager y tenerlo de forma gráfica en la bandeja del sistema hay que seguir estos pasos:
Primero instalarlo:

Código: Seleccionar todo

sudo apt-get install network-manager-gnome
Después tendréis que editar el archivo /etc/network/interfaces y eliminar la configuración de redes dejando el archivo así:

Código: Seleccionar todo

# interfaces(5) file used by ifup(8) and ifdown(8)

# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'

# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback
Si os habéis conectado mediante wifi también tendréis que edita el archivo /etc/wpa_supplicant/wpa_supplicant.conf eliminando la configuración de vuestra red, que luego configurareis en modo gráfico desde el escritorio.

También hay que eliminar el programa dhcpcd5 que os impedirá asignar ip estática desde network manager:

Código: Seleccionar todo

sudo apt-get purge dhcpcd5
Tras esto ya podéis reiniciar y configurar la red desde el aplet de la bandeja de sistema.

BLUEMAN
De la misma forma, si usáis diversos cacharros bluetooth quizá os interesa instalar blueman como gestor:

Código: Seleccionar todo

sudo apt-get install blueman
RASPI_CONFIG GRÁFICO
Si queréis tener interface gráfica para raspi-config tenéis que instalarla:

Código: Seleccionar todo

sudo apt-get install rc-gui
NOTIFICACIONES
Las notificaciones en el escritorio son bastante horribles, yo prefiero cambiarlas por las de xfce, para lo cual:

Código: Seleccionar todo

sudo apt-get purge notification-daemon

Código: Seleccionar todo

sudo apt-get install xfce4-notifyd libnotify-bin
Después ya podéis lanzar la ventana de configuración para ponerlo a vuestro gusto:

Código: Seleccionar todo

sudo xfce4-notifyd-config
TRUCOS

Para eliminar la pantalla arco-iris que aparece al arrancar la raspi, editáis el archivo /boot/config.txt e introducir esta linea: disable_splash=1
------------------------------------------------------------------------------------------------------
Para eliminar las frambuesas en la parte superior de la pantalla que salen durante la carga del sistema, editáis el archivo /boot/cmdline.txt y al final de la primera linea añadís: logo.nologo
------------------------------------------------------------------------------------------------------
Para hacer una imagen de SD que se expanda sola en el primer inicio del sistema.
Tenéis que crear el archivo /etc/init.d/resize2fs_once y hacerlo ejecutable. A continuación lo editáis con lo siguiente:

Código: Seleccionar todo

#!/bin/sh
### BEGIN INIT INFO
# Provides:         resize2fs_once
# Required-Start:
# Required-Stop:
# Default-Start: 3
# Default-Stop:
# Short-Description: Redimensiona la particion root para llenar la tarjeta
# Description:
### END INIT INFO
. /lib/lsb/init-functions
case "$1" in
  start)
    log_daemon_msg "Starting resize2fs_once"
    ROOT_DEV=`grep -Eo 'root=[[:graph:]]+' /proc/cmdline | cut -d '=' -f 2-` &&
    resize2fs $ROOT_DEV &&
    update-rc.d resize2fs_once remove &&
    rm /etc/init.d/resize2fs_once &&
    log_end_msg $?
    ;;
  *)
    echo "Usage: $0 start" >&2
    exit 3
    ;;
Lo guardáis, y desde el terminal ejecutáis:

Código: Seleccionar todo

sudo chmod +x /etc/init.d/resize2fs_once

Código: Seleccionar todo

sudo update-rc.d resize2fs_once defaults
Y ya solo queda editar el archivo /boot/cmdline.txt y añadir al final de la primera linea : init=/usr/lib/raspi-config/init_resize.sh
Ahora ya podéis crear una imagen de la tarjeta que se redimensionará automáticamente en el primer inicio en cualquier Raspi, pero OJO, solo lo hace la primera vez, luego el script se borra.
-----------------------------------------------------------------------------------------------------
Para que la pantalla no entre en modo suspension (pantalla en negro).
Es un problemilla de Debian y derivadas, incluso con el salvapantallas desactivado (o desinstalado) la pantalla se pone en negro transcurrido un cierto tiempo. Para que esto no ocurra, hay que crear el archivo /etc/X11/xorg.conf con el siguiente contenido:

Código: Seleccionar todo

Section "ServerFlags"
Option "blank time" "0"
Option "standby time" "0"
Option "suspend time" "0"
Option "off time" "0"
EndSection 
Y creo que es todo por ahora, si se me ocurren mas cosas ya iré ampliando.

Saludos

Re: Crear tu propia imagen personalizada y optimizada de Raspbian.

Publicado: 22 May 2017, 10:58
por VVG92
Increíble tutorial y muy bien explicado, muchas gracias por el curro que te has pegado.

Re: Crear tu propia imagen personalizada y optimizada de Raspbian.

Publicado: 02 Jun 2017, 23:48
por tonihardcore
Lo estoy llevando a la practica, gracias de nuevo @tatxen nos poneis las cosas mas faciles a los que nos estamos iniciando en Linux. :mareado :guiño2

Re: Crear tu propia imagen personalizada y optimizada de Raspbian.

Publicado: 03 Jun 2017, 11:07
por tatxen
Espero que sirva, la verdad es que soy bastante nuevo en esto de hacer tutoriales y no se si me explico adecuadamente :)

Re: Crear tu propia imagen personalizada y optimizada de Raspbian.

Publicado: 03 Jun 2017, 18:29
por tatxen
Esa imagen y los mensajes durante la carga del sistema la muestra Plymouth, cuando termina la carga del sistema aparece la misma imagen pero en la ventana de login, esta ultima depende de que versión de las mías estés empleando la muestra Lightdm o Slim que son dos gestores de login.

Tendras que instalar los archivos necesarios:

Código: Seleccionar todo

sudo apt-get install pix-plym-splash
Y habilitar el splash-screen en raspi-config, inicias raspi-config (sudo raspi-config) vas a la tercera opción (boots options) y a la opción splash-screen.

Para hacerte tu propio tema de Plymouth para la Raspi lo mejor es que empieces con un tema ya existente y lo modifiques, por ejemplo el mio. Los temas los encuentras en la carpeta /usr/share/plymouth/themes. El mio (Raspcamper) es bastante sencillo, consta de tres archivos, la imagen de fondo y dos archivos de configuración. El primer archivo de configuración (raspcamper.plymouth) describe el nombre del tema, ubicación de las imágenes y los scripts, es bastante sencillo y fácil de entender y modificar. El segundo (raspcamper.script) es algo mas complicado de modificar y quizá lo mejor es usarlo tal cual está.
Para crear tu propio tema copia la carpeta "raspcamper", y cambiale el nombre por el que tu quieras, loiro85 por ejemplo. Luego abres la carpeta, y en el archivo raspcamper.plymouth cambia todo lo que ponga "raspcamper" por "loiro85" y deberia quedarte asi:

Código: Seleccionar todo

[Plymouth Theme]
Name=loiro85
Description=loiro85 Splash
ModuleName=script

[script]
ImageDir=/usr/share/plymouth/themes/loiro85
ScriptFile=/usr/share/plymouth/themes/loiro85/loiro85.script
A continuación cambias los nombres de los dos archivos de configuración (raspcamper.plymouth y raspcamper.script) por los tuyos (loiro85.plymouth y loiro85.script).
Y la imagen splash.png la cambias por la que tu quieras pero mantén el mismo nombre y tipo de archivo (png) pero si quieres cambiar el nombre de la imagen o el tipo de archivo tendrás que modificarlo en el archivo .script, en la linea 4 donde pone "theme_image = Image("splash.png");" cambias lo de splash.png por el de la imagen que vayas a usar, loiro85.jpg por ejemplo.

Con eso ya habrias creado tu propio tema de plymouth, para que Debian la cargue al inicio tienes que modificar el archivo /etc/plymouth/plymouth.conf y donde pone theme cambiarlo por el que quieras usar, loiro85 por ejemplo, y quedaria asi:

Código: Seleccionar todo

# Administrator customizations go in this file
#[Daemon]
#Theme=text
#ShowDelay=0
[Daemon]
Theme=loiro85
Ojo con las mayúsculas y las minúsculas, que Linux es muy quisquilloso con eso.
Si todo ha ido bien, al reiniciar deberías ver tu pantalla de arranque.

Para cambiar la pantalla de login debería saber que imagen mía estas usando, ya que si es la que tiene Lightdm es muy facil cambiar el tema, siempre incluyo un programa que permite hacerlo de forma gráfica desde el escritorio, mientras que si es una de las que usa Slim hay que crear un theme especifico y cambiar algunos archivos de configuración.

Suerte y saludos.