Persistencia en SteamOS

Hola chicos,

He estado trabajando en una herramienta para ganar persistencia en cada actualización de SteamOS. Podemos llamarlo semi-persistencia o falsa-persistencia, ... ya que en cada actualización habría que ejecutar la herramienta.

La idea de este programa/script es añadirlo al game mode y cuando se actualice SteamOs lanzarlo.

Comparto con vosotros el código fuente por si alguien quiere usarlo. Creo que tiene algunas cosas interesantesj.
Aquí la página del proyecto: SteamOS-persistence

SteamOS-persistence

Script para automatizar la persistencia de los cambios frente a las actualizacinoes oficiales de SteamOS 3. Script to automate persistence in SteamOS 3.

Todas estas utilidades han sido probadas, pero úsalas sin ningún tipo de garantía.

¿Qué es esto?

SteamOS en cada reinicio utiliza y sobreescribe un nuevo grupo de particiones A o B para rootfs y otras particiones. A esto, hay que añadirle que el sistema de ficheros es de sólo lectura. Esto hace que los cambios que hayamos hecho en esos sistemas, ya sea crear nuevos ficheros, carpetas, aplicaciones, ..., se pierdan tras la actualización. Este script no pretente romper con esa filosofía, si no que intenta automatizar los cambios que queramos hacer tras la actualización.

Si además, añadimos este script al Game Mode como si de un "Juego no de Steam" se tratase, tras la actualización, sólo tendremos que pulsar un botón y podremos hacer nuestras modificaciones automáticamente.
Instrucciones de uso

Recordamos del propósito del programa: ejecutar una serie de scripts independientes entre ellos (o no) para ganar persistencia hasta la próxima actualización de SteamOS.

Pues bien, el corazón del programaa se divide en dos elementos:

"SteamOS-persistence.sh" - Script principal. Se debe de colocar donde se quiera (recomiendo colocarlo en /home)
".SteamOS-persistence.d" - carpeta donde se encuentran dentro los scripts a lanzar además de varias utilidades. Por defecto, se debería de colocar en /home también.

Importante: recuerda que para guardarlo en "/home" necesitarás hacerlo con el usuario mediante "sudo". Recomiendo dejar los permisos del fichero ejecutable y de la carpeta (y subcarpetas y archivos) como propietario al usuario deck una vez copiado.

En la carpeta principal, colocar todos los scripts a ejectuar. Los que comienzan por:

S ... .sh - son los scripts usados para salvar la persistencia, son los que modifican el SO oficial de Valve.
K ... .sh - son los scripts usados para deshacer las tareas realizadas por los que comienzan por S. Esto sería recomendable hacerlo por cada script S.
C ... .sh - son los scripts que comprueban el estado de la persistencia, no deberían modificar nada. Esto sería recomendable hacerlo por cada script S.

Por lo tanto, el uso del programa sería dejar en la carpeta principal los scripts (ver ejemplos de uso) y lanzar el programa principal. Dependiendo de cómo se lance el programa puede ser desatendido o mediante asistente (ver parámetros de uso)

Ejemplos de uso (ya probados por mi)

En la carpeta examples existen varios scripts de ejemplo. Son los que uso yo actualmente.

Montar una partitión btrfs automáticamente a través de la modificación del archivo /etc/fstab.
Instalar paquetes a través de pacman.
Modificar scripts de SteamOS, como por ejemplo, el montaje de tarjetas SD en formato btrfs. Ver https://github.com/Trevo525/btrfdeck
Instalar glibc y los UTF8 (locale).
Instalar DOCKER en otra ubicación personalizada y desactivar los servicios hasta que sean necesarios.

Parámetros de uso
Uso desatendido/unattended:

SteamOS-persistence.sh -S|C|K [-d directorio] [-v]
Uso del asistente/With wizard:

SteamOS-persistence.sh [-d directorio]

Opciones/Options:

-h|--help Esta ayuda. This help.
-S|--savemode Ejecutar en modo Salvado.// It'll runing on Save Persistence Mode.
-C|--checkmode Ejecutar en modo Chequeo.// It'll runing on Check Persistence Mode.
-K|--killmode Ejecutar en modo Deshacer.// It'll runing on Undo Persistence Mode.
-d|--directory Se indica donde se encuentran esos scripts. Por defecto es /home/.SteamOS-persistence // Where are the scripts?
-v|--verbose Si se quiere mostrar en el modo desatendido los logs resultantes.

Imágenes del asistente
(Las imágenes no corresponden a un sistema Steam Deck si no a un portátil usado para pruebas)
Imagen

Imagen

Imagen

Imagen

Imagen


PD: la parte de BTRFS y fstab en el disco interno es interesante y daría para otro hilo. Espero vuestros comentarios.
Buenas.

Antes que nada! Muchas gracias por el currazo!

He advertido que haces populate de archlinux, pero no de holo..Es por algún motivo ?

sudo pacman-key --populate archlinux

Por otro lado, cuando desbloqueas el modo escritura, para btrfs no tendrías que incluir ;

sudo btrfs property set -ts / ro false

Muchas gracias!

PD: La compresión de btrfs es crema de la buena :) [beer]
Hola @cmhacks
No sabía que había populate para holo, siempre uso el de arch porque es el que he visto en el hilo. Me lo apuntaré para cambiarlo.
Sí que uso holo en docker para desarrollar y compilar en la deck (que también es crema).

Sobre
sudo btrfs property set -ts / ro false
Revisaré donde esté. Tengo claro que con sudo steamos-readonly ## es suficiente. Igual está en algún código obsoleto.

Gracias por tu revisión [beer]
@pakico A mí sin sudo btrfs property set -ts / ro false me daba error pacman aún con sudo steamos-readonly pero levo arrastrando el uso del comando desde que me llegó la deck, no volvía a probar a poblar las keys de pacman sin él.
Hola chicos,
He añadido al populate holo, quedando así:
sudo pacman-key --populate archlinux holo

Sí, queda más elegante aunque no use sus paquetes.

Por otro lado, estoy haciendo pruebas y viendo las diferencias entre
sudo steamos-readonly enable
y la intrucción
sudo btrfs property set -ts / ro false


sudo steamos-readonly ejecuta:
btrfs property set / ro false

es decir, que la diferencia es la opción ts. ts, según san google:
-t specifies the type of object to work on, s means subvolume. Other options are f (filesystem), i (inode), and d (device). If you don't specify, it'll show all applicable ones (for list) or try to guess for get/set.

Realmente, no os funciona con sudo steamos-readonly ? debería de funcionar... ¿Es posible que hayáis modificado el fichero steamos-readonly de la deck?

PD: todos los scripts del proyecto funcionan en mi deck con la instrucción de Valve (sin tener que hacer la instrucción explícita).
@pakico Tendría que mirar pero es posible que cambiasen algo en el sistema en alguna actualización, pero sí que me pasaba que daba error pacman al generar el keyring y leí en reddit que había que usar el segundo comando para que funcionase y a partir de ahí no me volvió a dar problemas.
Con
sudo steamos-readonly disable

Me funcionaba todo menos lo relacionado con pacman.
5 respuestas