:B~ Personalización del comportamiento en tiempo de ejecución.

1~customizing-run-time-behaviours Personalización del comportamiento en
tiempo de ejecución.

Toda la configuración que se hace en tiempo de ejecución es realizada por
live-config. Éstas son algunas de las opciones más comunes de live-config en
las que los usuarios están más interesados. Se puede encontrar una lista
completa de todas las posibilidades en la página de manual de live-config.

2~ Personalización del usuario por defecto del sistema en vivo

Una consideración importante es que el usuario por defecto del sistema en
vivo es creado por live-boot en el arranque y no live-build durante la
creación de la imagen. Ésto no sólo influye dónde se introducen los
materiales relacionados con este usuario durante la creación de la imagen
tal y como se explica en {Includes locales en
Live/chroot}#live-chroot-local-includes sino también a cualquier grupo y a
los permisos asociados con el usuario por defecto del sistema en vivo.

Se pueden especificar grupos adicionales a los que pertenecerá el usuario
por defecto del sistema en vivo mediante el uso de cualquiera de las
posibilidades de configuración de live-config. Por ejemplo, para agregar el
usuario al grupo #{fuse}#, se puede agregar el fichero siguiente a
#{config/includes.chroot/etc/live/config/user-setup.conf}#:

code{

 LIVE_USER_DEFAULT_GROUPS="audio cdrom dip floppy video plugdev netdev powerdev scanner bluetooth fuse"

}code

o utilizar
#{live-config.user-default-groups=audio,cdrom,dip,floppy,video,plugdev,netdev,powerdev,scanner,bluetooth,fuse}#
como parámetro de arranque.

Además, es posible cambiar el usuario por defecto "user" y la contraseña por
defecto "live". Si se desea cambiarlos por cualquier motivo, se puede
conseguir de forma sencilla tal y como se explica a continuación:

Cambiar el nombre del usuario por defecto es tan sencillo como especificarlo
en la configuración:

code{

 $ lb config --bootappend-live "boot=live components username=live-user"

}code

Una posible forma de cambiar la contraseña por defecto es usando un script
gancho (hook) tal y como se describe en {Scripts gancho en tiempo de
arranque}#boot-time-hooks. Para conseguirlo se puede usar el script gancho
«passwd» de #{/usr/share/doc/live-config/examples/hooks}#, ponerle un
prefijo adecuado (p.ej. 2000-passwd) y añadirlo a
#{config/includes.chroot/lib/live/config/}#

2~customizing-locale-and-language Personalización de las variantes locales e
idioma

Cuando el sistema en vivo arranca, el idioma está implicado en dos pasos:

_* Generar las variantes locales

_* Establecer la distribución del teclado

La variante local predeterminada en la creación de un sistema en vivo es
#{locales=en_US.UTF-8}#. Para definir la variante local que se debe generar,
se puede utilizar el parámetro #{locales}# en la opción
#{--bootappend-live}# de #{lb config}#, p.ej.

code{

 $ lb config --bootappend-live "boot=live components locales=de_CH.UTF-8"

}code

Se pueden especificar diversas variantes locales separándolas con comas.

Este parámetro se puede utilizar en la línea de comandos del kernel, al
igual que los parámetros de configuración del teclado indicados a
continuación. Es posibe configurar una variante local con #{idioma_país}#
(en cuyo caso se utiliza el tipo de codificación por omisión) o también con
la expresión completa #{idioma_país.codificación}#. La lista de todas las
variantes locales está en #{/usr/share/i18n/SUPPORTED}#.

#{live-config}# se encarga de la configuración del teclado de la consola y
del entorno gráfico X utilizando el paquete #{console-setup}#. Para
configurarlos se puede utilizar los parámetros de arranque
#{keyboard-layouts}#, #{keyboard-variants}#, #{keyboard-options}# y
#{keyboard-model}# a través de la opción #{--bootappend-live}#. Se puede
encontrar una lista de opciones válidas para estos parámetros en
#{/usr/share/X11/xkb/rules/base.lst}#. Para hallar la distribución del
teclado y la variante que corresponde a un idioma se puede buscar el nombre
en inglés de la nación donde se habla el idioma, por ejemplo:

code{

$ egrep -i '(^!|german.*switzerland)' /usr/share/X11/xkb/rules/base.lst
 ! model
 ! layout
   ch              German (Switzerland)
 ! variant
   legacy          ch: German (Switzerland, legacy)
   de_nodeadkeys   ch: German (Switzerland, eliminate dead keys)
   de_sundeadkeys  ch: German (Switzerland, Sun dead keys)
   de_mac          ch: German (Switzerland, Macintosh)
 ! option

}code

Cada variante muestra una descripción de la disposición que aplica.

Normalmente, sólo es necesario configurar la disposición del teclado. Por
ejemplo, para obtener los ficheros de la variante local de la disposición
del teclado alemán y suizo-alemán en X utilizar:

code{

 $ lb config --bootappend-live "boot=live components locales=de_CH.UTF-8 keyboard-layouts=ch"

}code

Sin enbargo, para casos de uso muy específicos, se puede incluir otros
parámetros. Por ejemplo, para configurar un sistema Francés con una
disposición French-Dvorak (también llamado Bepo) en un teclado USB
TypeMatrix EZ-Reach 2030, utilizar:

code{

 $ lb config --bootappend-live \
     "boot=live components locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-variants=bepo keyboard-model=tm2030usb"

}code

Para cada una de las variables de configuración del teclado #{keyboard-*}#
se puede especificar varios valores separados por comas. A excepción de
#{keyboard-model}#, que sólo acepta un valor. En la página de manual
#{keyboard(5)}# se explican los detalles y algunos ejemplos de cómo utilizar
las variables #{XKBMODEL}#, #{XKBLAYOUT}#, #{XKBVARIANT}# y
#{XKBOPTIONS}#. Si se especifican diferentes valores en
#{keyboard-variants}# estos se corresponderan uno a uno con los valores
#{keyboard-layouts}# (ver #{setxkbmap(1)}# opción #{-variant}#). Se admiten
valores vacíos; por ejemplo para definir dos distribuciones de teclado, la
que se usa por omisión US QWERTY y otra US Dvorak, utilizar:

code{

 $ lb config --bootappend-live \
     "boot=live components keyboard-layouts=us,us keyboard-variants=,dvorak"

}code

2~persistence  Persistencia

Un paradigma de un cd en vivo («live cd» N. del T.) es ser un sistema
pre-instalado que funciona desde medios de almacenamiento de sólo lectura,
como un CD-ROM, donde los cambios y las modificaciones no se guardan tras
reiniciar el sistema en que se ejecuta.

Un sistema en vivo es una generalización de este paradigma pero que es
compatible con otros medios de almacenamiento, no sólo en CDs. Aún así, en
su comportamiento predeterminado, se debe considerar un sistema de sólo
lectura y todos los cambios en tiempo de ejecución del sistema se pierden al
apagar el equipo.

La «persistencia» es un nombre común que se da a los diferentes tipos de
soluciones para guardar algunos o todos los cambios realizados durante la
ejecución tras reiniciar el sistema. Para entender cómo funciona es útil
saber que incluso si el sistema se inicia y se ejecuta desde los medios de
almacenamiento de sólo lectura, las modificaciones de los ficheros y
directorios se escriben en medios de escritura, por lo general en la memoria
ram (tmpfs) y los datos guardados en la ram se pierden al reiniciar.

Los datos almacenados en esta memoria ram se pueden guardar en un soporte
grabable, como un medio de almacenamiento local, un recurso compartido en
red o incluso en una sesión de un CD/DVD regrabable en multisesión. Todos
estos medios son compatibles de diferentes maneras y todos, menos el último,
requieren un parámetro de arranque especial que se especificará en el
momento del arranque: #{persistence}#.

Si se usa el parámetro de arranque #{persistence}# (y no se usa la opción
#{nopersistence}#), se busca en los medios de almacenamiento locales
(p.ej. discos duros, llaves USB) volúmenes con persistencia durante el
arranque. Es posible restringir qué tipos de volúmenes persistentes se
pueden usar especificando ciertos parámetros de arranque descritos en la
página del manual de live-boot(7). Un volumen persistente es cualquiera de
los siguientes: 

_* una partición, identificada por su nombre GPT.

_* Un sistema de ficheros, identificado por su etiqueta de sistema de
ficheros.

_* una fichero imagen situado en la raíz de cualquier sistema de ficheros
que pueda ser leido (incluso una partición NTFS de otro sistema operativo),
identificado por su nombre de fichero.

La etiqueta del volumen para las overlays debe ser #{persistence}# pero será
ignorado a menos que contenga en su raíz un fichero llamado
#{persistence.conf}# que se utiliza para personalizar la persistencia del
volumen, esto es, especificar los directorios que se desea guardar en un
volumen de persistencia después de reiniciar. Ver {El fichero
persistence.conf}#persistence-conf para más detalles.

He aquí algunos ejemplos de cómo preparar un volumen para ser usado para la
persistencia. Puede ser, por ejemplo, una partición en un disco duro o en
una llave usb creada con, p.ej.

code{

 # mkfs.ext4 -L persistence /dev/sdb1

}code

Ver {Usar el espacio libre en el dispositivo USB}#using-usb-extra-space.

Si ya existe una partición en el dispositivo, sólo se tiene que cambiar la
etiqueta con uno de los siguientes:

code{

 # tune2fs -L persistence /dev/sdb1 # for ext2,3,4 filesystems

}code

Un ejemplo de cómo crear un fichero imagen basado en ext4 para ser usado
para la persistencia:

code{

 $ dd if=/dev/null of=persistence bs=1 count=0 seek=1G # for a 1GB sized image file
 $ /sbin/mkfs.ext4 -F persistence

}code

Después de crear el fichero imagen, a modo de ejemplo, para hacer #{/usr}#
persistente pero únicamente guardando los cambios que se realizan en ese
directorio en lugar de todos los contenidos de #{/usr}#, se puede utilizar
la opción "union". Si el fichero imagen se encuentra en el directorio home,
copiarlo a la raíz del sistema de ficheros del disco duro y montarlo en
#{/mnt}# como se explica a continuación:

code{

 # cp persistence /
 # mount -t ext4 /persistence /mnt

}code

Después, crear el fichero #{persistence.conf}# añadiendo contenido y
desmontar el fichero imagen.

code{

 # echo "/usr union" >> /mnt/persistence.conf
 # umount /mnt

}code

Ahora, reiniciar y arrancar el medio en vivo con el parámetro de arranque
"persistence".

3~persistence-conf El fichero persistence.conf

Un volumen con la etiqueta #{persistence}# debe ser configurado a través de
un fichero #{persistence.conf}# para crear directorios arbitrarios
persistentes. Ese fichero, situado en el sistema de ficheros raíz del
volumen, controla que directorios hace persistentes y también de que manera.

En la página de manual de persistence.conf(5) se explica en detalle cómo se
configura el montaje de las overlays, pero un sencillo ejemplo es suficiente
para la mayoría de los casos. Supongamos que queremos crear nuestro
directorio home y APT cache persistentes en un sistema de ficheros ext4 en
la partición /dev/sdb1:

code{

 # mkfs.ext4 -L persistence /dev/sdb1
 # mount -t ext4 /dev/sdb1 /mnt
 # echo "/home" >> /mnt/persistence.conf
 # echo "/var/cache/apt" >> /mnt/persistence.conf
 # umount /mnt

}code

Entonces reiniciamos. Durante el primer arranque los contenidos de #{/home}#
y #{/var/cache/apt}# se copiarán en el volumen persistente y a partir de ese
momento todos los cambios en esos directorios se guardarán allí. Tener en
cuenta que las rutas listadas en el fichero #{persistence.conf}# no pueden
contener espacios en blanco ni los componentes especiales #{.}# y
#{..}#. Además, ni #{/lib}#, #{/lib/live}# (o ninguno de sus
sub-directorios) ni #{/}# pueden hacerse persistentes montándolos de forma
personalizada. Una posible alternativa a esta limitación es añadir #{/
union}# al fichero #{persistence.conf}# para conseguir una persistencia
completa.

3~ Utilizar varios medios persistentes

Existen diferentes métodos para utilizar múltiples volúmenes de persistencia
para diferentes casos de uso. Por ejemplo, utilizar varios volúmenes al
mismo tiempo o seleccionar sólo uno, entre varios, para fines muy
específicos.

Se puede usar diferentes volúmenes de overlays al mismo tiempo (con sus
propios ficheros #{persistence.conf}#) pero si varios volúmenes hacen que un
mismo directorio sea persistente, sólo uno de ellos será usado. Si dos
unidades montadas están "anidadas" (es decir, una es un sub-directorio de la
otra) el directorio superior será montado antes que el inferior de este modo
no quedará uno escondido por el otro. La personalización de los montajes
anidadados es problemática si están listados en el mismo fichero
#{persistence.conf}#. Consultar la página de manual de persistence.conf(5)
para ver como manejar ese caso si realmente es necesario. (aclaración:
normalmente no lo es).

Un posible caso de uso: Si se desea guardar los datos del usuario, es decir
#{/home}# y los datos del superusuario, es decir #{/root}# en particiones
diferentes, crear dos particiones con la etiqueta #{persistence}# y añadir
un fichero #{persistence.conf}# en cada una de este modo, #{# echo "/home" >
persistence.conf}# para la primera partición que guardará los ficheros del
usuario y #{# echo "/root" > persistence.conf}# para la segunda partición
que almacenará los ficheros del superusuario. Finalmente, utilizar el
parámetro de arranque #{persistence}#.

Si un usuario necesita un almacenamiento persistente múltiple del mismo tipo
para diferentes lugares o pruebas, tales como #{private}# y #{work}#, el
parámetro de arranque #{persistence-label}# usado junto con el parámetro de
arranque #{persistence}# permitirá medios de almacenamiento persistentes
múltiples pero únicos. Un ejemplo sería, si un usuario desea utilizar una
partición persistente etiquetada #{private}# para datos de uso personal como
los marcadores de un navegador o similares utilizaría los parámetros de
arranque: #{persistence}# #{persistence-label=private}#. Y para almacenar
datos relacionados con el trabajo, como documentos, proyectos de
investigación o de otro tipo, utilizaría los parámetros de arranque:
#{persistence}# #{persistence-label=work}#.

Es importante recordar que cada uno de estos volúmenes, #{private}# y
#{work}#, necesita también un fichero #{persistence.conf}# en su raíz. La
página de manual de live-boot contiene más información acerca de cómo
utilizar estas etiquetas con los antiguos nombres que se utilizaban en
anteriores versiones.

3~ Utilizar persistencia con cifrado

Utilizar la persistencia significa que algunos datos sensibles pueden estar
expuestos a riesgo. Especialmente si los datos persistentes se almacenan en
un dispositivo portable, como una memoria USB o un disco duro externo. Es
entonces cuando el cifrado cobra sentido. Incluso aunque todo el
procedimiento puede parecer complicado debido a la cantidad de pasos que hay
que hacer, es muy fácil manejar particiones cifradas con live-boot. Para
utilizar *{luks}*, que es el tipo de cifrado soportado, se necesita instalar
/{cryptsetup}/ tanto en la máquina que va a crear la partición cifrada como
en el sistema en vivo con que se va a utilizar la partición persistente
cifrada.

Para instalar /{cryptsetup}/ en nuestra máquina:

code{

 # apt-get install cryptsetup

}code

Para instalar /{cryptsetup}/ en nuestro sistema en vivo, lo añadimos a una
package-lists:

code{

 $ lb config
 $ echo "cryptsetup" > config/package-lists/encryption.list.chroot

}code

Una vez se tiene el sistema en vivo con /{cryptsetup}/, básicamente, sólo se
necesita crear una nueva partición, cifrarla y arrancar con los parámetros
#{persistence}# y #{persistence-encryption=luks}#. Podríamos habernos
anticipado a este paso y haber añadido esos parámetros de arranque siguiendo
el procedimiento habitual:

code{

 $ lb config --bootappend-live "boot=live components persistence persistence-encryption=luks"

}code

Vamos a entrar en detalles para quien que no esté familiarizado con el
cifrado. En el siguiente ejemplo vamos a utilizar una partición en un
dispositivo usb que corresponde a #{/dev/sdc2}#. Tener en cuenta que es
necesario determinar qué partición es la que se va a utilizar en cada caso
específico.

El primer paso es conectar la memoria usb y determinar de qué dispositivo se
trata. El método recomendado para los dispositivos en live-manual es
utilizando #{ls -l /dev/disk/by-id}#. Después de eso, crear una nueva
partición y, a continuación, cifrarla con una frase de contraseña de la
siguiente manera:

code{

 # cryptsetup --verify-passphrase luksFormat /dev/sdc2

}code

A continuación, abrir la partición luks en el mapeador de dispositivos
virtuales. Se puede utilizar cualquier nombre que se desee. Aquí utilizamos
*{live}* como ejemplo:

code{

 # cryptsetup luksOpen /dev/sdc2 live

}code

El siguiente paso es llenar el dispositivo con ceros antes de crear el
sistema de ficheros:

code{

 # dd if=/dev/zero of=/dev/mapper/live

}code

Ahora, estamos listos para crear el sistema de ficheros. Nótese que estamos
añadiendo la etiqueta #{persistence}# para que el dispositivo se monte como
almacén de persistencia durante el arranque.

code{

 # mkfs.ext4 -L persistence /dev/mapper/live

}code

Para continuar con nuestra configuración, necesitamos montar el dispositivo,
por ejemplo, en #{/mnt}#.

code{

 # mount /dev/mapper/live /mnt

}code

Y crear el fichero #{persistence.conf}# en la raíz de la partición. Esto es,
como se ha explicado antes, estrictamente necesario. Ver {El fichero
persistence.conf}#persistence-conf.

code{

 # echo "/ union" > /mnt/persistence.conf

}code

Entonces, desmontar el punto de montaje:

code{

 # umount /mnt

}code

Y opcionalmente, aunque puede ser una buena manera de salvaguardar los datos
que acabamos de agregar a la partición, podemos cerrar el dispositivo:

code{

 # cryptsetup luksClose live

}code

Vamos a resumir el proceso. Hasta ahora, hemos creado un sistema vivo capaz
de utilizar el cifrado, que se puede copiar en una memoria usb como se
explica en {Copiar una imagen ISO híbrida en un dispositivo
USB}#copying-iso-hybrid-to-usb. También hemos creado una partición cifrada,
que se puede crear en la misma memoria usb para llevarla a todas partes y
hemos configurado la partición cifrada para ser utilizada como almacén de
persistencia. Así que ahora, sólo tenemos que arrancar el sistema en
vivo. En el momento del arranque, live-boot nos preguntará la frase de
contraseña y montará la partición cifrada para ser utilizada para la
persistencia.
