# 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