summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xcheckrepo206
1 files changed, 0 insertions, 206 deletions
diff --git a/checkrepo b/checkrepo
deleted file mode 100755
index 0c7c9589..00000000
--- a/checkrepo
+++ /dev/null
@@ -1,206 +0,0 @@
-#!/bin/bash
-
-#/**
-#@file checkrepo
-#@brief Maintain repository information in a JSON file.
-#@usage checkrepo
-#@warning This script uses "jq" command.
-#@version 1.1.0 - Initial version.
-#@author Ramón M. Gómez - ETSII Univ. Sevilla
-#@date 2017-09-27
-#*/ ##
-
-
-# Global constants definition.
-PROG=$(basename "$(realpath "$0")")
-OPENGNSYS=/opt/opengnsys
-IMAGESDIR=$OPENGNSYS/images
-INFOFILE=$OPENGNSYS/etc/repoinfo.json
-
-
-# Functions.
-source $OPENGNSYS/lib/ogfunctions.sh
-
-# Create/edit JSON file about installed ogLive clients.
-function addToJson() {
- # Parameters and variables.
- local IMAGENAME="$1" IMAGETYPE="$2" DATA="$3" JSON i j n m OUNAME OUIND IMGIND
- local CLONATOR COMPRESSOR FSTYPE DATASIZE CLIENT
- IFS=":" read -r CLONATOR COMPRESSOR FSTYPE DATASIZE CLIENT <<<"$DATA"
- # Check if image is restricted to an OU (subdir).
- if [[ $IMAGENAME =~ / ]]; then
- OUNAME="${IMAGENAME%/*}"
- IMAGENAME="${IMAGENAME##*/}"
- fi
- # Data size must be numeric (in KB).
- [[ $DATASIZE =~ ^[0-9]*$ ]] || DATASIZE=0
- # JSON-formatted new entry.
- JSON=$(cat << EOT | jq .
-{
- "name":"$IMAGENAME",
- "type":"${IMAGETYPE,,}",
- "clientname":"$CLIENT",
- "clonator":"${CLONATOR,,}",
- "compressor":"${COMPRESSOR,,}",
- "filesystem":"${FSTYPE^^}",
- "datasize":$[ DATASIZE * 1024]
-}
-EOT
- )
- # Check JSON file consistency.
- if [ "$(jq -c keys $INFOFILE 2>/dev/null)" == '["directory","images","ous"]' ]; then
- # Common image.
- if [ -z "$OUNAME" ]; then
- # Check if the image is defined into JSON file.
- n=$(jq ".images | length" $INFOFILE)
- for ((i=0; i<n; i++)); do
- [ "$(jq ".check=$JSON | .check.name==.images[$i].name" $INFOFILE)" == "true" ] && IMGIND=$i
- done
- # Check if it needs to update or insert data.
- if [ -n "$IMGIND" ]; then
- # Update if image data changes and info file exists.
- [ -n "$3" -a "$(jq ".check=$JSON | .check==.images[$IMGIND]" $INFOFILE)" == "false" ] && jq ".images[$IMGIND]=$JSON" $INFOFILE | sponge $INFOFILE
- else
- # Append a new entry.
- jq ".images |= (. + [$JSON])" $INFOFILE | sponge $INFOFILE
- fi
- else # OU image.
- # Append a new OU entry if it does not exist.
- if [ -z "$(jq -r ".ous[].subdir" $INFOFILE | grep "^$OUNAME$")" ]; then
- JSON=$(cat << EOT | jq .
-{
- "subdir": "$OUNAME",
- "images": [ $JSON ]
-}
-EOT
- )
- jq ".ous |= (. + [$JSON])" $INFOFILE | sponge $INFOFILE
- else
- # Check if the image is defined in some OU.
- m=$(jq ".ous | length" $INFOFILE)
- for ((j=0; j<m; j++)); do
- n=$(jq ".ous[$j].images | length" $INFOFILE)
- for ((i=0; i<n; i++)); do
- [ "$(jq ".check=$JSON | .check.name==.ous[$j].images[$i].name" $INFOFILE)" == "true" ] && OUIND=$j && IMGIND=$i
- done
- done
- # Check if it needs to update or insert data.
- if [ -n "$IMGIND" ]; then
- # Update if image data changes and info file exists.
- [ $# -gt 2 -a "$(jq ".check=$JSON | .check==.ous[$OUIND].images[$IMGIND]" $INFOFILE)" == "false" ] && jq ".ous[$OUIND].images[$IMGIND]=$JSON" $INFOFILE | sponge $INFOFILE
- else
- # Obtener el índice de la UO donde añadir la nueva entrada. Por acodoner
- m=$(jq ".ous | length" $INFOFILE)
- for ((j=0; j<m; j++)); do
- [ $(jq ".ous[$j].subdir" $INFOFILE | sed s/\"//g) == $OUNAME ] && OUIND=$j
- done
- # Append a new entry.
- jq ".ous[$OUIND].images |= (. + [$JSON])" $INFOFILE | sponge $INFOFILE
- fi
- fi
- fi
- else
- # Create new JSON file.
- if [ -z "$OUNAME" ]; then
- cat << EOT | jq . > $INFOFILE
-{"directory":"$IMAGESDIR","images":[${IMAGENAME:+$JSON}],"ous":[]}
-EOT
- else
- cat << EOT | jq . > $INFOFILE
-{"directory":"$IMAGESDIR","images":[],"ous":[{"subdir":"$OUNAME","images":[$JSON]}]}
-EOT
- fi
- fi
-}
-
-# Check for file-based images to update the repository configuration file.
-function checkfiles() {
- local IMAGES IMG INFO DATA
- # File-stored images.
- IMAGES=$(find $IMAGESDIR -maxdepth 2 -type f \( -name "*.img" -o -name "*.dsk" \) -print)
- for IMG in $IMAGES; do
- # Skip locked images.
- [ -e "$IMG.lock" ] && continue
- # Retrieve image creation data and delete temporary file.
- INFO="$IMG.info"
- [ ! -e "$INFO" ] && continue # Si no existe fichero .info, no hacer nada y pasar al siguiente. Por acodoner
- [ "$INFO" -ot "$IMG" ] && rm -f "$INFO" && echo "Warning: Deleted outdated file $INFO" && continue # Si el fichero .info es obsoleto, borralo, no hacer nada y pasar al siguiente. Por acodoner
- DATA=""
- [ -r "$INFO" ] && DATA=$(cat "$INFO")
- # Add data to configuration file (name, type and data) and remove image info file.
- IMG=${IMG#$IMAGESDIR/}
- addToJson "${IMG%.*}" "${IMG##*.}" "$DATA" && rm -f "$INFO"
- done
-}
-
-
-# Check for directory-based images to update the repository configuration file.
-function checkdirs() {
- local IMAGES IMG INFO DATA
-
- # Directory-based images.
- IMAGES=$(find $IMAGESDIR -maxdepth 3 -type f -name ogimg.info -print)
- for INFO in $IMAGES; do
- IMG="$(dirname "${INFO#$IMAGESDIR/}")"
- # Skip repository root directory and locked images.
- [ "$IMG" == "$IMAGESDIR" -o -e "$IMG.lock" ] && continue
- DATA=$(awk -F= '$1=="# fstype" {fs=$2} $1=="# sizedata" {sz=$2} END {printf "rsync::%s:%s:",fs,sz}' "$INFO")
- # Add data to configuration file (name, type and data).
- addToJson "$IMG" "dir" "$DATA"
- done
-}
-
-# Check if images are removed to update the repository configuration file.
-function checkremoved() {
- local IMG TYPE OU i j n m
- [ ! -w "$INFOFILE" ] && raiseError access "$INFOFILE"
-
- # Check if global images are defined into JSON file.
- n=$(jq ".images | length" $INFOFILE)
- for ((i=0; i<n; i++)); do
- # Image name and type.
- IMG="$(jq -r ".images[$i].name" $INFOFILE)"
- TYPE="$(jq -r ".images[$i].type" $INFOFILE)"
- [ "$TYPE" != "dir" ] && IMG="$IMG.$TYPE"
- # Delete entry if image does not exist and it's not locked.
- [ ! -e "$IMAGESDIR/$IMG" -a ! -e "$IMAGESDIR/$IMG.lock" ] && jq "del(.images[$i])" $INFOFILE | sponge $INFOFILE
- done
- # Check if OU images are defined into JSON file.
- m=$(jq ".ous | length" $INFOFILE)
- for ((j=0; j<m; j++)); do
- # OU subdir.
- OU="$(jq -r ".ous[$j].subdir" $INFOFILE)"
- # Delete OU's entries if its subdir does not exist.
- if [ ! -e "$IMAGESDIR/$OU" ]; then
- jq "del(.ous[$j])" $INFOFILE | sponge $INFOFILE
- else
- #n=$(jq ".images | length" $INFOFILE)
- n=$(jq ".ous[$j].images | length" $INFOFILE) #corregido por acodoner
- for ((i=0; i<n; i++)); do
- # Image name and type.
- IMG="$(jq -r ".ous[$j].images[$i].name" $INFOFILE)"
- TYPE="$(jq -r ".ous[$j].images[$i].type" $INFOFILE)"
- [ "$TYPE" != "dir" ] && IMG="$IMG.$TYPE"
- # Delete entry if image does not exist and it's not locked.
- [ ! -e "$IMAGESDIR/$OU/$IMG" -a ! -e "$IMAGESDIR/$OU/$IMG.lock" ] && jq "del(.ous[$j].images[$i])" $INFOFILE | sponge $INFOFILE
- done
- fi
- done
-}
-
-
-# Main program.
-
-# Comprobar si el proceso ya está en ejecución.
-[ "$(pgrep "$PROG")" != "$$" ] && exit
-
-# Check dependencies.
-[ -w "$(dirname "$INFOFILE")" ] || raiseError access "$INFOFILE"
-[ -e "$INFOFILE" ] || addToJson
-which sponge &>/dev/null || raiseError notfound "Need to install \"moreutils\"."
-
-checkfiles
-checkdirs
-checkremoved
-
-