oggit/gitlib
Vadim vtroshchinskiy 8396b25ebd Add Windows BCD decoding tool 2024-10-29 12:21:44 +01:00
..
README.md Update list of package requirements in oglive 2024-09-19 19:47:21 +02:00
TESTING.md Add testing instructions 2024-09-12 19:03:42 +02:00
bcd.py Add Windows BCD decoding tool 2024-10-29 12:21:44 +01:00
gitlib-tests.py Add Gitlib 2024-09-12 08:48:38 +02:00
gitlib.py Fix and refactor slightly EFI implementation 2024-10-29 12:21:44 +01:00
requirements.txt Add Gitlib 2024-09-12 08:48:38 +02:00

README.md

GitLib

La gitlib.py es una librería de Python también usable como programa de línea de comandos para pruebas.

Contiene las funciones de gestión de git, y la parte de línea de comandos permite ejecutarlas sin necesitar escribir un programa que use la librería.

Instalación de dependencias para python

La conversion del código a Python 3 requiere actualmente los paquetes especificados en requirements.txt

Para instalar dependencias de python se usa el modulo venv (https://docs.python.org/3/library/venv.html) que instala todas las dependencias en un entorno independiente del sistema.

Uso

Distribuciones antiguas (18.04)

sudo apt install -y python3.8 python3.8-venv python3.8-dev python3-venv libarchive-dev libblkid-dev pkg-config libacl1-dev
python3.8 -m venv venvog
. venvog/bin/activate
python3.8 -m pip install --upgrade pip
pip3 install -r requirements.txt

Ejecutar con:

./gitlib.py

En modo de linea de comando, hay ayuda que se puede ver con:

./gitlib.py --help

Los comandos que comienzan por --test existen para hacer pruebas internas, y existen temporalmente para probar partes especificas del código. Es posible que necesiten condiciones especificas para funcionar, y van a eliminarse al completarse el desarrollo.

Uso

Nota: Preferiblemente ejecutar como root, ya que sudo borra los cambios a las variables de entorno realizadas por venv. El resultado probable es un error de falta de módulos de Python, o un fallo del programa por usar dependencias demasiado antiguas.

# . venv/bin/activate
# ./opengnsys_git_installer.py

Inicializar un repositorio:

./gitlib.py --init-repo-from /dev/sda2 --repo linux

Esto inicializa el repositorio 'linux' con el contenido /mnt/sda2.

--repo especifica el nombre de uno de los repositorios fijados durante la instalación de git (ver git installer).

El repositorio de sube al ogrepository, que se obtiene del parámetro de arranque pasado al kernel.

Clonar un repositorio:

./gitlib.py --clone-repo-to /dev/sda2 --boot-device /dev/sda --repo linux

Esto clona un repositorio del ogrepository. El destino es un dispositivo físico que se va a formatear con el sistema de archivos necesario.

--boot-device especifica el dispositivo de arranque donde se va a instalar el bootloader (GRUB o similar)

--repo es el nombre de repositorio contenido en ogrepository.

Documentación

Se puede generar documentación de Python con una utilidad como pdoc3 (hay multiples alternativas posibles):

# Instalar pdoc3
pip install --user pdoc3

# Generar documentación
pdoc3 --force --html opengnsys_git_installer.py

Funcionamiento

Requisitos

La gitlib esta diseñada para funcionar dentro de un entorno opengnsys existente. Invoca algunos de los comandos de opengnsys internamente, y lee los parámetros pasados al kernel en el oglive.

Metadatos

Git no es capaz de almacenar datos de atributos extendidos, sockets y otros tipos de archivos especiales. El gitlib los almacena en .opengnsys-metadata en el raíz del repositorio.

Los datos se guardan en archivos de tipo jsonl, una estructura de JSON por linea. Esto es para facilitar aplicaciones parciales solo aplicando el efecto de las lineas necesarias.

Existen estos archivos:

  • acls.jsonl: ACLs
  • empty_directories.jsonl: Directorios vacíos, ya que Git no es capaz de guardarlos
  • filesystems.json: Información sobre sistemas de archivos: tipos, tamaños, UUIDs
  • gitignores.jsonl: Lista de archivos .gitignore (los renombramos para que no interfieran con git)
  • metadata.json: Metadatos generales acerca del repositorio
  • special_files.jsonl: Archivos especiales como sockets
  • xattrs.jsonl: Atributos extendidos