simbiOS 25.0

Puppy Linux ¿Cómo carga y por qué es tan especial?

Puppy Linux

¿Cómo carga y por qué es tan especial?



simbiOS 25.0

simbiOS 25.0


El corazón de Puppy Linux es el init, el script de inicio del sistema operativo.
Esto no se debe a que este archivo implemente muchas cosas de Puppy, sino a que aquí es donde comienza Puppy.
Cuando se inicia el init, Puppy, en toda regla, sigue siendo solo una puñado de archivos en un dispositivo de almacenamiento.
El trabajo del init es precisamente usar esos archivos para construir un Puppy en la RAM y luego entregarle el control.

Algunos archivos importantes en el mundo del init:

vmlinuz:

Esta es la parte Linux de Puppy Linux, generalmente denominada kernel de Linux.
El proceso de arranque ya lo cargó en la RAM y comenzó a ejecutarlo antes de que se inicie el init.

initrd.gz:

Contiene los archivos de Puppy que forman el sistema de archivos en la RAM y están disponibles cuando se ejecuta el init.
El script de inicio es uno de estos archivos.

Los archivos sfs de puppy: puppy...sfs, zdrv...sfs, fdrv...sfs, ydrv...sfs, adrv...sfs:
(Donde ... es el nombre y la versión de un Puppy en particular, por ejemplo, zdrv_simbiOS_20.0.sfs)

puppy...sfs:

Este es el archivo principal de Puppy y contiene la mayor parte, si no todo, el software que se encuentra en el Puppy que se está levantando.
Este es el único archivo sfs obligatorio; si el script de inicio no puede cargarlo por algún motivo, se abandona el arranque.

zdrv...sfs:

Contiene módulos del kernel (controladores de dispositivos) y archivos de firmware que coinciden con el kernel en vmlinuz.
Sin este archivo, Puppy normalmente seguirá arrancando, pero algunos dispositivos no funcionarán o no funcionarán correctamente.

fdrv...sfs:

Contiene archivos de firmware. Se puede utilizar para anular el contenido de zdrv...sfs.
Generalmente se añade posterior a la creacción de un Puppy con el objetivo de añadir y/o sobreescribir archivos sin tener que armar el Puppy desde 0.
Este archivo está presente sólo en algunos puppys.

bdrv...sfs:

Contiene una instalación básica o esqueleto de la distro compatible.
Con este archivo, es probable que funcionen más paquetes binarios de los repositorios de la distribución compatible.
Generalmente no está presente.

ydrv...sfs:

En teoría, es un parche. Se puede utilizar para anular el contenido de Puppy Linux.
Generalmente se añade posterior a la creacción de un Puppy con el objetivo de añadir y/o sobreescribir archivos sin tener que armar el Puppy desde 0.
Generalmente no está presente.

adrv...sfs:

Teóricamente un archivo de aplicación. Anula el contenido de todos los demás archivos sfs.
Se utiliza para cargar software que quizás el usuario final no esté dispuesto a usar. Basta borrarlo del directorio de instalación.
Generalmente no está presente.

<b>Puppy</b> files

Sistema de archivos de Puppy Linux una vez instalados

Descripción general de cómo funciona:

1-Una instalación frugal típica de Puppy es un directorio que contiene los archivos mencionados anteriormente.
2-Entonces init comienza estableciendo la ubicación de este directorio, buscando el archivo puppy...sfs.
3-A falta de indicación sobre su ubicación, el búsquedas a lo largo de las particiones del sistema hasta encontrarlo.
4-Si no puede localizar el archivo puppy...sfs, abandona el arranque saliendo a una consola con varios mensajes de error en la pantalla.
5-Habiendo localizado el puppy...sfs, procede a crear en el directorio un sistema de archivos por capas, extrayendo el contenido de los archivos sfs.
(Un sistema de archivos por capas consta de una pila de directorios, la mayoría de estas capas pueden ser de solo lectura. Pero la capa superior siempre es de lectura/escritura.
(El directorio que contiene la pila contiene todos los archivos de cada capa.
Pero si un archivo existe en más de una capa, el que se encuentra en la capa superior es el que se ve. Entonces, el orden de las capas es significativo)
6-El init crea una pila que contiene un solo directorio en un tmpfs en la RAM como capa de lectura y escritura.
7-Luego agrega el puppy...sfs a esta pila.
8-Luego procesa los otros archivos sfs, si existen.
8.1-Agrega el fdrv...sfs.
8.2-Agrega el archivo zdrv...sfs.
8.3-Inserta el ydrv...sfs inmediatamente debajo de la capa de lectura-escritura.
8.4-nserta el adrv...sfs inmediatamente debajo de la capa de lectura-escritura.
(Si todos los archivos están presentes terminamos con una pila que se ve así:

tmpfs lectura-escritura
adrv...sfs de solo lectura
ydrv...sfs de solo lectura
puppy...sfs de solo lectura
fdrv...sfs de sólo lectura
zdrv...sfs de sólo lectura)

9-Si se trata del primer arranque, la pila está lista para incorporarse al sistema en ejecución.
(Pero esta primera pila de arranque no contiene almacenamiento persistente y si el usuario cambia algún archivo en el sistema en ejecución, se escribe en la capa de lectura-escritura que solo existe en la RAM)
10-La primera vez que reinicias o apagas, Puppy te pregunta si quieres guardar la sesión.
10.1-Si guardas la sesión, se te guiará a través de un proceso para crear una capa para guardar a la cual Puppy luego copiará los archivos modificados.
11-Pero si no se trata del primer arranque, el init tiene que configurar cualquier capa guardada e insertarla en la pila.
12-El init intenta determinar qué tipo de mecanismo de capa de guardado se está utilizando y ponerlo a disposición como un directorio.
(Si este intento falla en algún momento, no se hará nada adicional y el inicio continuará con la primera pila de inicio)
13-Si se considera que el arranque es desde un dispositivo "flash", el directorio que contiene la capa de guardado se inserta como una capa de solo lectura inmediatamente debajo de la capa de lectura/escritura. De lo contrario, la capa de lectura/escritura tmpfs se reemplaza con el directorio que contiene la capa de guardado como capa de lectura/escritura.
13.1-Luego, la pila se convierte en el sistema en ejecución, y el init termina.
(Si el init detecta errores no críticos, generalmente los escribe en un archivo llamado bootinit.log.
bootinit.log también almacena mensajes de depuración que quizás quieras leer. Se puede acceder a este archivo en un Puppy en ejecución como /initrd/tmp/bootinit.log

Arhivos que inyectan información al init y cambian su comportamiento:

DISTRO_ESPECS:

-Este es un archivo que está en initrd.gz y es creado por el constructor del Puppy. Contiene definiciones de información diversa sobre un Puppy en particular:
-DISTRO_FILE_PREFIX define el nombre que aparece con frecuencia en los archivos del Puppy. p.ej. 'simbiOS'.
-DISTRO_VERSION define el número de versión. p.ej. '25.0'
-Muy importantes para init son DISTRO_PUPPYSFS, DISTRO_ZDRVSFS, DISTRO_FDRVSFS, DISTRO_YDRVSFS,
DISTRO_ADRVSFS, que define los nombres de archivo predeterminados para cada uno de los archivos sfs de un Puppy determinado.

Parámetros de arranque:

pmedia=<atahd|ataflash|usbhd|usbflash|cd>
Indica el tipo de dispositivo de arranque:

-Si es "cd", entonces se buscan en todas las particiones archivos Puppy y un archivo de capa guardada.
-Si los primeros 3 caracteres son "usb", cualquier búsqueda estará restringida únicamente a dispositivos USB.
-Si los últimos 5 caracteres son "flash", la capa superior de la pila sigue siendo tmpfs en la RAM; de lo contrario, cualquier capa guardada encontrada se convierte en la capa superior de la pila.
-Este parámetro de arranque siempre debe proporcionarse.

psubdir=</ruta/al/directorio de/instalación>

Si los archivos de Puppy no están en la raíz de una partición, sino en un subdirectorio, la ruta de este directorio, relativa a la raíz de la partición, debe especificarse con este parámetro.
-p.ej. Si la partición sdb2 está montada como /mnt/sdb2 y los archivos Puppy están en /mnt/sdb2/simbiOS, entonces se debe especificar "psubdir=simbiOS" o "psubdir=/simbiOS".
-Este parámetro puede especificar subdirectorios en más de un nivel, p. "psubdir=Puppy/simbiOS" o "psubdir=/Puppy/simbiOS".
-Si no se proporciona un "/" inicial, el init lo agregará.
-Esta es la ruta predeterminada para localizar cualquier archivo Puppy y cualquier partición.

punionfs=<aufs|superposición>

Cambia forzosamente la elección del sistema de superposición de capas.

-El valor predeterminado es aufs, si el kernel está construido con soporte para aufs.
-Úselo con cuidado, ya que aufs y overlay son incompatibles entre sí.
-Para cambiar de aufs a superposición o viceversa, comience con una nueva capa guardada (pfix=RAM).

Archivos de Puppy

pupsfs=<partición> Especifica la partición de Puppy Linux
zdrv=<partición> Especifica la partición zdrv...sfs
fdrv=<partición> Especifica la partición fdrv...sfs
adrv=<partición> Especifica la partición adrv...sfs
ydrv=<partición> Especifica la partición ydrv...sfs
psave=<partición> Especifica la partición de la capa para guardar

Donde <partición> puede ser el nombre, por ejemplo, sdb2, o una etiqueta, por ejemplo. Trabajo, o un uuid, p.ej. 0db94719-cdf1-44b7-9766-23db62fb85a5

Especificar psave=<partición> puede ser bastante útil para dirigir todas las capas guardadas a una partición diferente.

p.ej. Si tus puppys residen en una partición ntfs, luego puede obtener una carpeta guardada creando una partición de Linux en una memoria USB o en un disco duro.
y luego especificando un parámetro de arranque psave=<el uuid de la partición de Linux>.
Si olvida conectar el dispositivo apropiado, Puppy simplemente realizará un primer arranque,
No hay ningún daño, simplemente inserte el dispositivo USB apropiado y reinicie.

ej: adrv=sda4
ej: psave=Trabajo
ejemplo: pupsfs=0db94719-cdf1-44b7-9766-23db62fb85a5

pupsfs=<partición>:<ruta>/<nombre de archivo> Especifica el archivo puppy...sfs.
zdrv=<partición>:<ruta>/<nombre de archivo> Especifica el archivo zdrv...sfs.
fdrv=<partición>:<ruta>/<nombre de archivo> Especifica el archivo fdrv...sfs.
adrv=<partición>:<ruta>/<nombre de archivo> Especifica el archivo adrv...sfs.
ydrv=<partición>:<ruta>/<nombre de archivo> Especifica el archivo ydrv...sfs.
psave=<partición>:<ruta>/<nombre de archivo> Especifica el archivo de capa guardado.

Donde <partición> puede ser el nombre, por ejemplo, sdb2, o una etiqueta, por ejemplo. Trabajo, o un uuid, p.ej. 0db94719-cdf1-44b7-9766-23db62fb85a5
Cuando se utiliza una etiqueta o un uuid, solo se requiere el comienzo, suficiente para que sea único en su sistema, por ejemplo, "pupsfs=0db94719-cdf1"

Donde <ruta> es el subdirectorio dentro de la partición. p.ej. "pupsfs=sdb2:/ruta/a/" o "psave=:/ruta/a/"
Cualquier <ruta> especificada es relativa a la raíz de la partición, lo mismo que "psubdir=".
Si <ruta> no comienza con "/", se le antepone automáticamente"/".
Si no se especifica ninguna <ruta>, se utiliza el directorio definido por "psubdir=".

Donde <nombre de archivo> es solo un nombre de archivo. p.ej. "pupsfs=sdb2:/ruta/a/mi-Puppy-mejorado.sfs" o "psave=sdc2:mi-carpeta-de-guardado-mejorada"
Si no se especifica ningún <nombre de archivo>, se utiliza el nombre de archivo predeterminado, según lo determinado por el archivo DISTRO_SPECS.

A los efectos de la especificación "psave=", una carpeta guardada se considera como un archivo.
La especificación <ruta> define el directorio que contiene la carpeta de guardado (pupsave), y la especificación <filename> define su nombre.
Entonces, "psave=sdb4:/lxpupsc/mysave" dice que la carpeta guardada está en la partición sdb4 en el directorio "/lxpupsc", llamado "mysave".
Mientras que "psave=sdb4:/lxpupsc/mysave/" dice que la carpeta guardada está en la partición sdb4 en el directorio "/lxpupsc/mysave", con el nombre de carpeta de guardado predeterminado para el Puppy (según DISTRO_SPECS).

No es necesario especificar todos los elementos, pero si no hay ":" se supone que es una especificación <partición>.
-p.ej. "pupsfs=sdb2", especifica que el archivo Puppy Linux está en sdb2 en la ruta predeterminada con el nombre de archivo predeterminado.
-"fdrv=:alternate-firmware.sfs", especifica que es un archivo llamado Alternative-firmware.sfs en la partición predeterminada en el directorio predeterminado, es decir, donde se encuentra el Puppy Linux.
Se recomienda que siempre se especifique pupsfs=<partición>. Esto permite que el init vaya directamente a esa partición para encontrar los archivos de Puppy en lugar de buscar en todas las particiones hasta encontrar el puppys...sfs.

ej: psave=sdc1:/ruta/a/simbiOSsave.4fs
ej: psave=sdc1:simbiOSsave.4fs
ej: zdrv=sdc1:/zz/myzz.sfs
ej: adrv=sdd6:/Puppy/drvs/custom/adrv.sfs
ej: pupsfs=sdb2:/Puppy/simbiOS/simbiOS_25.0.sfs

pkeys=<especificación de distribución del teclado> p.ej. ES. Se utiliza para configurar la distribución del teclado que utilizará Puppy durante el arranque.

plang=<especificación de idioma> p.e. es_ES.UTF-8. Especifica el idioma que utilizará Puppy, incluidos los mensajes mostrados por el init. Si no se proporciona ningún parámetro pkeys, las primeras 2 letras de esta especificación se utilizan para configurar la distribución del teclado.

pimod=<lista separada por comas con los nombres de módulos del kernel>

En algunas computadoras, el teclado requiere que se cargue un módulo del kernel antes de que funcionen.

La carga normal de los módulos del kernel no ocurre hasta que finaliza el init.
Pero a veces el init necesita solicitar entrada del usuario a través del teclado.
Especificar módulos del kernel en este parámetro hará que init los cargue antes de cualquier posible interacción con el teclado.

pfix=<ram, nox, nocopy, fsck, fsckp, rdsh, <número>>

El parámetro pfix es una lista separada por ',' de uno o más de los subparámetros anteriores.

-ram: se ejecuta solo en RAM (no carga el ${DISTRO_FILE_PREFIX}save) (pupsave).
-nox: modo línea de comandos, no inicies X.
-copy: copiar archivos .sfs en la RAM
-nocopy: no copie archivos .sfs en la RAM (el valor predeterminado es copiar si la RAM > 1024 MB, mientras que el espacio libre en el disco RAM es <= 64 MB).
-fsck: haga fsck del archivo ${DISTRO_FILE_PREFIX}save.?fs.
-fsckp: realice fsck antes del primer montaje de particiones soportadas.
-rdsh: sale al shell en el disco RAM inicial.
<número>: lista negra de las últimas carpetas <número> (multisesión). p.ej. pfix=3

Archivos de parámetros:

Si existen en el directorio de instalación frugal, su contenido se utiliza para configurar algunas variables que de otro modo podrían configurarse mediante parámetros de arranque.

SAVEMARK

Proporciona un medio para especificar que el archivo de la capa guardada esté en una partición diferente en el mismo dispositivo. Contiene un solo número. Si el Puppy Linux está ubicado en sdb2 y SAVEMARK contiene 4, se espera que un archivo de capa guardada esté en sdb4.

initmodules.txt

Contiene una lista de módulos del kernel que se cargan antes de cualquier interacción con el teclado. Por lo general, estos son módulos necesarios para que funcione el teclado.

BOOT_SPECS

Este es un archivo que establece variables, como DISTRO_SPECS. Pero está destinado a que el usuario anule las variables normalmente establecidas por los parámetros de arranque.
También se puede utilizar para configurar otras variables en el init, p. ej. "TZ='XXX-10'" establece la zona horaria en el init en Queensland, Australia.
La idea es que haya una copia de este archivo en el espacio del usuario, el usuario edite este archivo y luego almacene una copia en initrd.gz.
Este archivo también podría usarse en lugar de archivos de parámetros específicos como initmodules.txt e incluso SAVEMARK.
Parte de este concepto es quitarle complicaciones al init y dárselas al sistema en ejecución.

MÁS NOTAS TÉCNICAS

¿Cómo el init determina qué pupsave usar?

Si no ha especificado psave=<partición>:<nombre de archivo> entonces el init busca un archivo con este nombre base: /DISTRO_SPECS -< DISTRO_FILE_PREFIX='...'

dónde:

${DISTRO_FILE_PREFIX}save: es el nombre base fijo para todas las carpetas pupsave (p. ej. simbiOS)
${DISTRO_FILE_PREFIX}save.?fs: es el nombre base fijo para todos los archivos pupsave (p. ej. simbiOS)

RESUMEN

Gracias a estás características del init de Puppy linux, al sistema de apilado por capas que va conformando el sistema y a su característica principal de correr directamente desde la RAM, tenemos que Puppy Linux es una "distro" muy especial ya que combina caracteríaticas que rara vez se encuentran en un mismo sistema, a saber, es un sistema live que corre completamente desde la RAM pero incluye un sistema de guardado de sessión que le permite al usuario usar Puppy Linux de forma similar a cualquier otro sistema operativo. Si a esto añadimos que, dado el modo de construcción e instalación de Puppy Linux, sus archivos sfs son practicamente irrompibles, salvo el pupsave que puede corromperse, pero que es muy fácil de reparar, estamos ante un Sistema Operativo muy atractivo, que lo mismo puede servir para recuperar un viejo PC Pentium III, que para usar el más modero equipo con mucha más eficiencia que cualquier otra distro tradicional.

PARA DUDAS y ACLARACIONES