summaryrefslogtreecommitdiffstats
path: root/repoman/bin/deleteimage
blob: d30ec785af3525216746e9cc15409cdacd6f6d84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/bin/bash
#         deleteimage [ -b | -r ] [ dir_ogunit ] str_image
#@file    deleteimage
#@brief   Borra del repositorio los ficheros de una imagen.
#@param   -b           Elimina también la copia de seguridad de la imagen (opcional).
#@param   -r           Recupera la copia de seguridad de la imagen (opcional).
#@param   str_dir_ogunit  Nombre del subdirectorio de la unidad organizativa (opcional).
#@param   str_image    Nombre canónico de la imagen, sin extensión.
#@exception 1 Error de formato
#@exception 2 Solo ejecutable por root
#@exception 3 No existe subdirectorio de la unidad organizativa
#@version 1.0 - Versión inicial.
#@date    2012-10-14
#@author  Ramón Gómez, ETSII Univ. Sevilla
#@version 1.0.5 - Eliminar imagen incremental.
#@date    2013-07-17
#@author  Alberto García, Univ. Málaga
#@version 1.0.6 - Detección automática del tipo de imagen.
#@date    2014-10-29
#@author  Ramón Gómez, ETSII Univ. Sevilla
#@version 1.1 - Separación subdirectorios unidades organizativas.
#@date    2016-01-03
#@author  Irina Gómez, ETSII Univ. Sevilla


PROG=$(basename $0)
OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"}
OGIMG=$OPENGNSYS/images
IMGEXT="img"
BAKEXT="ant"
DIFFEXT="diff"

# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
    cat << EOT
$PROG: Borra los ficheros de una imagen del repositorio.
Formato: $PROG [ -b | -r ] [ str_dir_ogunit ] str_image
         -b  Elimina también la copia de seguridad de la imagen.
         -r  Recupera la copia de seguridad de la imagen.
         dir_ogunit subdirectorio unidad organizativa

Ejemplo: $PROG imagen1
         $PROG -r dir_ogunit2 imagen2
EOT
    exit 0
fi
# Procesar parámetros
while getopts br OPTION; do
    case $OPTION in
        b) DELETEBACKUP=1 ;;
        r) RECOVERBACKUP=1 ;;
        *) ERR=1 ;;
    esac
    shift $((OPTIND-1))
done
[ -n "$DELETEBACKUP" ] && [ -n "$RECOVERBACKUP" ] && ERR=1
if [ $# -lt 1 -o -n "$ERR" ]; then
    echo "$PROG Error: Formato: $PROG [ -b | -r ] [ str_dir_ogunit ] str_image" 
    exit 1
fi

if [ "$USER" != "root" ]; then
    echo "$PROG: Error: solo ejecutable por root" >&2
    exit 2
fi

if [ "$2" ]; then
    if [ -d "$OGIMG/$1"  ]; then
        OGIMG="$OGIMG/$1"
    else
        echo "$PROG Error: No existe el subdirectorio de la unidad organizativa $OGIMG/$1"
        exit 3
    fi
    shift
fi    

# Eliminar ficheros de imagen monolítica o sincronizada básica.
IMGPATH="$OGIMG/$1.$IMGEXT"
if [ -f $IMGPATH ]; then
    echo "Borrando fichero $IMGPATH"
    rm -f $IMGPATH && rm -f $IMGPATH.{sum,full.sum,torrent}
else
    # Eliminar ficheros de imagen sincronizada diferencial. 
    IMGPATH="$OGIMG/$1.$IMGEXT.$DIFFEXT"
    if [ -f $IMGPATH ]; then
        echo "Borrando fichero $IMGPATH"
        rm -f $IMGPATH && rm -f $IMGPATH.{sum,full.sum,torrent}
    else
        # Eliminar directorio de imagen sincronizada. 
        IMGPATH="$OGIMG/$1"
        if [ -d $IMGPATH ]; then
            echo "Borrando directorio $IMGPATH"
            rm -fr $IMGPATH
        fi
    fi
fi

# Recuperar copia de seguridad de la imagen.
if [ -n "$RECOVERBACKUP" ]; then
    [ -e $IMGPATH.$BAKEXT ] && echo "Recuperando copia $IMGPATH.$BAKEXT"
    mv -f $IMGPATH.$BAKEXT $IMGPATH && \
            (mv -f $IMGPATH.sum.$BAKEXT $IMGPATH.sum 2>/dev/null
	     mv -f $IMGPATH.full.sum.$BAKEXT $IMGPATH.full.sum 2>/dev/null
             mv -f $IMGPATH.torrent.$BAKEXT $IMGPATH.torrent 2>/dev/null)
fi

# Borrar copia de seguridad de la imagen.
if [ -n "$DELETEBACKUP" ]; then
    [ -e $IMGPATH.$BAKEXT ] && echo "Eliminando copia $IMGPATH.$BAKEXT"
    rm -f $IMGPATH.$BAKEXT && rm -f $IMGPATH.{sum,full.sum,torrent}.$BAKEXT
fi