From 3b26f78a2d6fc730fb15479e8d20616dcc0c4c32 Mon Sep 17 00:00:00 2001 From: lgromero Date: Mon, 14 Oct 2024 15:53:14 +0000 Subject: [PATCH] refs #943 creates a json with the info when install a new oglives, changes functions to consult the json to obtain info --- bin/oglivecli | 135 +++++++++++++++++++++++++++++++++++--------------- 1 file changed, 95 insertions(+), 40 deletions(-) diff --git a/bin/oglivecli b/bin/oglivecli index efe44ac..32e4d7a 100755 --- a/bin/oglivecli +++ b/bin/oglivecli @@ -291,8 +291,19 @@ function install() { esac OGLIVEDIR="$TFTPDIR/$DEFOGLIVE-${OGLIVEKRNL%%-*}-$OGLIVEARCH-$OGLIVEREV" OGLIVEDIR="${OGLIVEDIR/amd64-/}" - + #OGLIVEDIR="$TFTPDIR/$DEFOGLIVE-$OGLIVEDIST-$OGLIVEKRNL-$OGLIVEARCH-$OGLIVEREV" OGINITRD=$OGLIVEDIR/oginitrd.img + # Imprimir los valores de las variables + echo "OGLIVEFILE: $OGLIVEFILE" + echo "OGLIVEDIST: $OGLIVEDIST" + echo "OGLIVEKRNL: $OGLIVEKRNL" + echo "OGLIVEARCH: $OGLIVEARCH" + echo "OGLIVEREV: $OGLIVEREV" + echo "OGLIVEDIR: $OGLIVEDIR" + echo "OGINITRD: $OGINITRD" + + # Pausar la ejecución para que el usuario revise los valores + read -p "Presione cualquier tecla para continuar con la instalación..." [ ! -r $OGINITRD ] && OGINITRD=$TFTPDIR/$DEFOGLIVE/oginitrd.img if [ -r $OGINITRD ]; then echo "Tipo de compresión: $COMPRESS" @@ -302,7 +313,6 @@ function install() { sed -n '/^[ \t].*OPTIONS=/s/.*pass=\(\w*\).*/\1/p') echo "Contraseña de Samba extraída: $SAMBAPASS" fi - rm -fr ${OGLIVEDIR}.old 2>/dev/null mv -f $OGLIVEDIR ${OGLIVEDIR}.old 2>/dev/null # Changes to a generic TMPDIR name @@ -391,6 +401,25 @@ function install() { else OGLIVEID="N/A" # Si no existe el archivo, asignamos un valor por defecto fi + # Crear el archivo JSON con los datos del ogLive instalado + jq -n \ + --arg OGLIVEDIST "$OGLIVEDIST" \ + --arg OGLIVEKRNL "$OGLIVEKRNL" \ + --arg OGLIVEARCH "$OGLIVEARCH" \ + --arg OGLIVEREV "$OGLIVEREV" \ + --arg OGLIVEDIR "$OGLIVEDIR" \ + '{ + OGLIVEDIST: $OGLIVEDIST, + OGLIVEKRNL: $OGLIVEKRNL, + OGLIVEARCH: $OGLIVEARCH, + OGLIVEREV: $OGLIVEREV, + OGLIVEDIR: $OGLIVEDIR + }' > "$OGLIVEDIR/oglive_info.json" + + # Verificar que el archivo JSON fue creado + if [ ! -f "$OGLIVEDIR/oglive_info.json" ]; then + echo "{\"status\": \"error\", \"error\": \"oglive_info,json failed.\"}"; exit 1; + fi JSON_OUTPUT=$(jq -n \ --arg id "$OGLIVEID" \ --arg dist "$OGLIVEDIST" \ @@ -398,8 +427,7 @@ function install() { --arg arch "$OGLIVEARCH" \ --arg rev "$OGLIVEREV" \ --arg dir "$OGLIVEDIR" \ - --arg iso "$(basename "$OGLIVEFILE")" \ - '{status: "success", messages: [], result: {id: $id, distribution: $dist, kernel: $krnl, architecture: $arch, revision: $rev, directory: $dir, iso: $iso}}') + '{status: "success", message: {id: $id, distribution: $dist, kernel: $krnl, architecture: $arch, revision: $rev, directory: $dir}}') echo "$JSON_OUTPUT" } @@ -439,11 +467,10 @@ function uninstall() { # Devolver mensaje de éxito echo "{\"message\": \"ogLive client uninstalled successfully.\", \"details\": \"Removed directory: $DIR\"}" } - # Get information about the default ogLive client. function get_default() { local DEFAULT_LINK="$TFTPDIR/$DEFOGLIVE" - local DIR OGLIVEDIST OGLIVEKRNL OGLIVEARCH OGLIVEREV OGLIVEISO OGLIVEDIR + local DIR OGLIVEJSON OGLIVEDIST OGLIVEKRNL OGLIVEARCH OGLIVEREV OGLIVEDIR CHECKSUM_FILE CHECKSUM # Verificar que el enlace simbólico del ogLive por defecto existe. if [ ! -L "$DEFAULT_LINK" ]; then @@ -460,23 +487,37 @@ function get_default() { exit 1 fi - # Obtener la información del ogLive a partir del nombre del directorio. - OGLIVEDIR=$(basename "$DIR") - OGLIVEDIST="$(echo $OGLIVEDIR | cut -d- -f2)" - OGLIVEKRNL="$(echo $OGLIVEDIR | cut -d- -f3)" - OGLIVEARCH="amd64" # Suponiendo que siempre es amd64 - OGLIVEREV="$(echo $OGLIVEDIR | cut -d- -f4)" - OGLIVEISO="" # No tenemos la información del ISO aquí, podría necesitarse un ajuste si se requiere + # Verificar que el archivo oglive_info.json existe en el directorio. + OGLIVEJSON="$DIR/oglive_info.json" + if [ ! -f "$OGLIVEJSON" ]; then + echo "{\"error\": \"oglive_info.json not found in $DIR.\"}" + exit 1 + fi + + # Leer los datos del archivo JSON. + OGLIVEDIST=$(jq -r '.OGLIVEDIST' "$OGLIVEJSON") + OGLIVEKRNL=$(jq -r '.OGLIVEKRNL' "$OGLIVEJSON") + OGLIVEARCH=$(jq -r '.OGLIVEARCH' "$OGLIVEJSON") + OGLIVEREV=$(jq -r '.OGLIVEREV' "$OGLIVEJSON") + OGLIVEDIR=$(jq -r '.OGLIVEDIR' "$OGLIVEJSON") + + # Obtener el checksum del archivo ogclient.sqfs.sum + CHECKSUM_FILE="$DIR/ogclient.sqfs.sum" + if [ -f "$CHECKSUM_FILE" ]; then + CHECKSUM=$(cat "$CHECKSUM_FILE" | cut -d ' ' -f 1) + else + CHECKSUM="" + fi # Construir el JSON con la información. local INFO=$(cat << EOT { + "id": "$CHECKSUM", "distribution": "$OGLIVEDIST", "kernel": "$OGLIVEKRNL", "architecture": "$OGLIVEARCH", "revision": "$OGLIVEREV", - "directory": "$DIR", - "iso": "$OGLIVEISO" + "directory": "$OGLIVEDIR" } EOT ) @@ -485,6 +526,7 @@ EOT echo "$INFO" } + # Set default ogLive client by checksum. function set_default() { local CHECKSUM=$1 @@ -531,43 +573,50 @@ function list_installed_oglives() { local installed_ogLives=() for i in $INST; do - NF=$(echo $i | awk -F- '{print NF-1}') + local OGLIVEDIR="$TFTPDIR/$i" local OGLIVEDIST="" local OGLIVEKRNL="" local OGLIVEARCH="" local OGLIVEREV="" local CHECKSUM="" - local CHECKSUM_FILE="$TFTPDIR/$i/ogclient.sqfs.sum" + local OGLIVEJSON="$OGLIVEDIR/oglive_info.json" + local CHECKSUM_FILE="$OGLIVEDIR/ogclient.sqfs.sum" + # Verificar que el archivo oglive_info.json existe en el directorio. + if [ -f "$OGLIVEJSON" ]; then + OGLIVEDIST=$(jq -r '.OGLIVEDIST' "$OGLIVEJSON") + OGLIVEKRNL=$(jq -r '.OGLIVEKRNL' "$OGLIVEJSON") + OGLIVEARCH=$(jq -r '.OGLIVEARCH' "$OGLIVEJSON") + OGLIVEREV=$(jq -r '.OGLIVEREV' "$OGLIVEJSON") + else + echo "{\"error\": \"oglive_info.json not found in $OGLIVEDIR.\"}" + continue + fi + + # Obtener el checksum del archivo ogclient.sqfs.sum if [ -f "$CHECKSUM_FILE" ]; then CHECKSUM=$(cat "$CHECKSUM_FILE" | cut -d ' ' -f 1) fi - case $NF in - 1) OGLIVEDIST="" OGLIVEKRNL=$(echo $i|cut -f2 -d-) OGLIVEARCH="i386" OGLIVEREV="" ;; - 2) eval $(echo $i | awk -F- '{printf "OGLIVEDIST=\"\" OGLIVEKRNL=%s OGLIVEARCH=amd64 OGLIVEREV=%s OGLIVEDIR=%s",$2,$3,$0}') ;; - 3) eval $(echo $i | awk -F- '{if ($3=="i386") printf "OGLIVEDIST=\"\" OGLIVEKRNL=%s OGLIVEARCH=%s OGLIVEREV=%s OGLIVEDIR=%s",$2,$3,$4,$0; else printf "OGLIVEDIST=%s OGLIVEKRNL=%s OGLIVEARCH=i386 OGLIVEREV=%s OGLIVEDIR=%s",$2,$3,$4,$0}') ;; - 4) eval $(echo $i | awk -F- '{printf "OGLIVEDIST=%s OGLIVEKRNL=%s OGLIVEARCH=%s OGLIVEREV=%s OGLIVEDIR=%s",$2,$3,$4,$5,$0}') ;; - esac - + # Crear el JSON con los datos del ogLive local DATA=$(jq -n \ --arg id "$CHECKSUM" \ - --arg filename "$OGLIVEDIR" \ --arg dist "$OGLIVEDIST" \ --arg krnl "$OGLIVEKRNL" \ --arg arch "$OGLIVEARCH" \ --arg rev "$OGLIVEREV" \ - --arg dir "$TFTPDIR/$OGLIVEDIR" \ - --arg iso "" \ - '{id: $id, filename: $filename, distribution: $dist, kernel: $krnl, architecture: $arch, revision: $rev, directory: $dir, iso: $iso}') + --arg dir "$OGLIVEDIR" \ + '{id: $id, distribution: $dist, kernel: $krnl, architecture: $arch, revision: $rev, directory: $dir}') installed_ogLives+=("$DATA") + # Verificar si es el ogLive por defecto [ -n "$(stat -c "%N" $TFTPDIR/$DEFOGLIVE | awk '$3~/'$i'/ {print}')" ] && DEF="$i" done local default_oglive=$(basename $(readlink -f $TFTPDIR/$DEFOGLIVE)) + # Crear el JSON final con la lista de ogLives instalados y el ogLive por defecto jq -n \ --arg default_oglive "$default_oglive" \ --argjson installed_ogLives "$(printf '%s\n' "${installed_ogLives[@]}" | jq -s .)" \ @@ -580,7 +629,7 @@ function list_installed_oglives() { # Get information about an installed ogLive client. function get_info() { local CHECKSUM="$1" - local DIR OGLIVEDIST OGLIVEKRNL OGLIVEARCH OGLIVEREV OGLIVEISO OGLIVEDIR + local DIR OGLIVEDIST OGLIVEKRNL OGLIVEARCH OGLIVEREV OGLIVEDIR OGLIVEJSON # Verificar que se proporcionó un checksum. [ -z "$CHECKSUM" ] && { echo "{\"error\": \"usage: get_info {checksum}\"}"; exit 1; } @@ -597,23 +646,29 @@ function get_info() { exit 1 fi - # Obtener la información del ogLive a partir del nombre del directorio. - OGLIVEDIR=$(basename "$DIR") - OGLIVEDIST="$(echo $OGLIVEDIR | cut -d- -f2)" - OGLIVEKRNL="$(echo $OGLIVEDIR | cut -d- -f3)" - OGLIVEARCH="amd64" # Suponiendo que siempre es amd64 - OGLIVEREV="$(echo $OGLIVEDIR | cut -d- -f4)" - OGLIVEISO="" # No tenemos la información del ISO aquí, podría necesitarse un ajuste si se requiere + # Verificar que el archivo oglive_info.json existe en el directorio. + OGLIVEJSON="$DIR/oglive_info.json" + if [ ! -f "$OGLIVEJSON" ]; then + echo "{\"error\": \"oglive_info.json not found in $DIR.\"}" + exit 1 + fi - # Construir el JSON con la información. + # Leer los datos del archivo JSON. + OGLIVEDIST=$(jq -r '.OGLIVEDIST' "$OGLIVEJSON") + OGLIVEKRNL=$(jq -r '.OGLIVEKRNL' "$OGLIVEJSON") + OGLIVEARCH=$(jq -r '.OGLIVEARCH' "$OGLIVEJSON") + OGLIVEREV=$(jq -r '.OGLIVEREV' "$OGLIVEJSON") + OGLIVEDIR=$(jq -r '.OGLIVEDIR' "$OGLIVEJSON") + + # Construir el JSON con los datos del ogLive y el checksum (id). local INFO=$(cat << EOT { + "id": "$CHECKSUM", "distribution": "$OGLIVEDIST", "kernel": "$OGLIVEKRNL", "architecture": "$OGLIVEARCH", "revision": "$OGLIVEREV", - "directory": "$DIR", - "iso": "$OGLIVEISO" + "directory": "$OGLIVEDIR" } EOT ) @@ -624,7 +679,7 @@ EOT # Function to check the status of services function check_services_status() { - local SERVICES=("oglive_daemon.service" "tftpd-hpa.service" "nginx.service") + local SERVICES=("tftpd-hpa.service" "nginx.service") declare -A STATUS_MAP for service in "${SERVICES[@]}"; do