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.

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.

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
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

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
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
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
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
Lo hacemos ejecutable:
Código: Seleccionar todo
sudo chmod +x /etc/init.d/zram.sh
Código: Seleccionar todo
sudo update-rc.d zram.sh defaults
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
Código: Seleccionar todo
sudo apt-get install preload
Código: Seleccionar todo
sudo apt-get install prelink
Código: Seleccionar todo
sudo vi /etc/default/prelink
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
Código: Seleccionar todo
DPkg::Post-Invoke {"echo Ejecutando prelink, espere...;/etc/cron.daily/prelink";}
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
Una vez terminada lo ejecutamos por primera vez:
Código: Seleccionar todo
sudo localepurge
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
XFCE
Código: Seleccionar todo
sudo apt-get install xfce4 xfce4-terminal
Código: Seleccionar todo
sudo apt-get install lxde-core lxappearance
Código: Seleccionar todo
sudo apt-get install raspberrypi-ui-mods
Código: Seleccionar todo
sudo apt-get install mate-desktop-environment
Código: Seleccionar todo
sudo apt-get install icewm
Código: Seleccionar todo
sudo apt-get install lightdm
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
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
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
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
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
Si queréis tener interface gráfica para raspi-config tenéis que instalarla:
Código: Seleccionar todo
sudo apt-get install rc-gui
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
Código: Seleccionar todo
sudo xfce4-notifyd-config
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
;;
Código: Seleccionar todo
sudo chmod +x /etc/init.d/resize2fs_once
Código: Seleccionar todo
sudo update-rc.d resize2fs_once defaults
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
Saludos