meta data for this page
  •  

Különbségek

A kiválasztott változat és az aktuális verzió közötti különbségek a következők.

Összehasonlító nézet linkje

Előző változat mindkét oldalonElőző változat
Következő változat
Előző változat
shell:oravm:ovm_cpu_pin_map [2020/06/25 14:16] adminshell:oravm:ovm_cpu_pin_map [2021/05/07 10:04] (aktuális) admin
Sor 4: Sor 4:
 #!/bin/bash #!/bin/bash
 ##################################################### #####################################################
-# OVM CPU PIN MAP v1.3+# OVM CPU PIN MAP v1.6
 # Keszitette: Agoston Peter # Keszitette: Agoston Peter
 ##################################################### #####################################################
Sor 11: Sor 11:
 OVM_ADMIN_PASSWD=PAssword123 OVM_ADMIN_PASSWD=PAssword123
 OVMC="/opt/ovm_utils/ovm_vmcontrol" OVMC="/opt/ovm_utils/ovm_vmcontrol"
 +OVS_SSH_KEY="/root/.ssh/id_ecdsa_ovs"
 SSHC="ssh -n -p 10000 admin@localhost" SSHC="ssh -n -p 10000 admin@localhost"
 +WORKDIR=$(dirname $(readlink -f $0))
 +FULL_BACKUP_FILE="${WORKDIR}/all_cpu_pins.bkp.last"
 +LOGFILE="${WORKDIR}/ovm_cpu_pin_map.log"
 if [[ -z "$OVM_ADMIN_PASSWD" ]]; then if [[ -z "$OVM_ADMIN_PASSWD" ]]; then
-        read -s -p "Add meg az oracle VM Manager admin jelszavat: " OVM_ADMIN_PASSWD+ read -s -p "Add meg az oracle VM Manager admin jelszavat: " OVM_ADMIN_PASSWD
 fi fi
 +cd $WORKDIR
 +# A terminálba SSH-n bejelentkezett user
 +if egrep -q "SigIgn:\s.{15}[13579bdf]" /proc/$$/status ; then # nohup esetén
 +    ACT_TTY=$(ps -ef | awk "/$$/{if ("'$2'"=$$"') print $6}' | head -n1 | awk -F'/' '{print $2}')
 +else
 +    ACT_TTY=$(tty|grep -oP '(?<=/dev/pts/).*')
 +fi
 +SSH_USER=$(w | awk '/pts\/'${ACT_TTY}'\s/{print $1}')
  
 red=$'\e[1;31m' red=$'\e[1;31m'
Sor 55: Sor 67:
 } }
  
-echo Kulcs ellenorzese a CLI-hez...+function show_parameters { 
 +    echo "Parancssori paraméterek:" 
 +    echo -e "Használat: $0 -d ADATBÁZIS_NÉV -r RETENTION -h" 
 +    echo -e "    -b|--backup-all    : Mentést készít minden VM-ről egyetlen fájlba [opcionális]" 
 +    echo -e "    -c|--check PARAM   : Leellenőrzi, hogy van-e eltérés a legutolsó teljes mentéshez képest a CPU pinekben és emailt küld a PARAM címre, ha van [opcionális]" 
 +    echo -e "    -h|--help          : Paraméter lista kiítása [opcionális]" 
 +    echo -e "Pl: $0 -c rgzd@aegon.hu${end}" 
 +
 + 
 +[[ ! $@ =~ -(c|-check) ]] && echo Kulcs ellenorzese a CLI-hez...
 if [[ $(ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5 admin@localhost -p 10000 list manager |grep -c Success) -eq 0 ]]; then if [[ $(ssh -o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5 admin@localhost -p 10000 list manager |grep -c Success) -eq 0 ]]; then
         echo "Nincs SSH kulcs a CLI-hez, legeneralom:"         echo "Nincs SSH kulcs a CLI-hez, legeneralom:"
Sor 74: Sor 95:
         fi         fi
 fi fi
 +#
 +<< 'komment'
 +echo Kulcs ellenorzese az OVS-ekhez...
 +if [[ -z $SSH_AUTH_SOCK ]]; then
 + printf "ssh-agent (újra)indítása... "
 + eval `ssh-agent -s`
 + echo "Ha jelszó védett az ($OVS_SSH_KEY) kulcsod, akkor azt most add meg: "
 + ssh-add $OVS_SSH_KEY
 +else
 + if [[ $(ssh-add -l 2>&1) == "Could not open a connection to your authentication agent." ]]; then
 + killall ssh-agent
 + eval `ssh-agent -s`
 + fi
 + if [[ $(ssh-add -l | grep -c "$OVS_SSH_KEY") -eq 0 ]]; then
 + printf "Ha jelszó védett az ($OVS_SSH_KEY) kulcsod, akkor azt most add meg: "
 +     ssh-add $OVS_SSH_KEY
 + fi
 +fi
 +set +x
 +komment
  
 CURR_DIR=$(pwd) CURR_DIR=$(pwd)
Sor 81: Sor 122:
         exit 1         exit 1
 fi fi
-SCRIPT_VER=$(grep -oP '(?<=# OVM CPU PIN MAP )[^)]*$' $CURR_DIR/$0) +SCRIPT_VER=$(grep -oP '(?<=# OVM CPU PIN MAP )[^)]*$' $WORKDIR/${0##*/}
 + 
 function pin_map { function pin_map {
 printf "Melyik OVS(ek) pin terkepet mutassam (szokozokkel elvalasztva)? " printf "Melyik OVS(ek) pin terkepet mutassam (szokozokkel elvalasztva)? "
-read -e -i "${SERVERS## }" SOME_SERVERS +read -e SOME_SERVERS 
-for OVS in $SOME_SERVERS; do+for OVS in ${SOME_SERVERS:=$SERVERS}; do
     [[ $($SSHC show server name="$OVS" | grep -c 'Status: Success') -eq 0 ]] && continue;     [[ $($SSHC show server name="$OVS" | grep -c 'Status: Success') -eq 0 ]] && continue;
     unset CPU_PIN_SUM     unset CPU_PIN_SUM
Sor 97: Sor 138:
         continue         continue
     fi     fi
 + 
     # CPU PIN MAP     # CPU PIN MAP
 + # VCPU sorszámok
     for CPU in $(seq 0 $(($CPU_NUM-1))); do     for CPU in $(seq 0 $(($CPU_NUM-1))); do
-        printf "|${yel}%02d${end}" $CPU+    [[ $(($CPU % ${CORES_PER_SOCKETS[$OVS]})) -eq 0 ]] && separator="$(env printf '\u2551')" || separator="$(env printf '\u2503')" 
 +        printf "${separator}${yel}%02d${end}" $CPU
     done     done
-    echo "vCPU" +    echo "$(env printf '\u2551'vCPU" 
-    for I in $(seq 0 $(($MAX_CPU_NUM-1))); do printf "+--"done + # Elválasztó vonal 
-    echo "++    for I in $(seq 0 $(($MAX_CPU_NUM-1))); do 
-        while read VM; do+        [[ $(($I % ${CORES_PER_SOCKETS[$OVS]})) -eq 0 ]] && printf "$(env printf '\u256b')--" ||printf "$(env printf '\u2542')--" 
 +    done 
 +    echo "$(env printf '\u256b')
 + while read VM; do
         VM_NAME=$(echo $VM | grep -oP '(?<=\[).*(?=\])')         VM_NAME=$(echo $VM | grep -oP '(?<=\[).*(?=\])')
         VM_ID=$(echo $VM | awk '{print $5}')         VM_ID=$(echo $VM | awk '{print $5}')
Sor 119: Sor 165:
             PINS=$(echo $PINS | sed 's/,/ /g')             PINS=$(echo $PINS | sed 's/,/ /g')
         fi         fi
 +
         for CPU in $(seq 0 $(($CPU_NUM-1))); do         for CPU in $(seq 0 $(($CPU_NUM-1))); do
 +     [[ $(($CPU % ${CORES_PER_SOCKETS[$OVS]})) -eq 0 ]] && separator=$(env printf '\u2551') || separator=$(env printf '\u2503')
             if [[ $(echo $PINS | grep -Pc "\b$CPU\b") -eq 1 ]]; then             if [[ $(echo $PINS | grep -Pc "\b$CPU\b") -eq 1 ]]; then
-                printf "|${whi}##${end}"+                printf "${separator}${whi}##${end}"
                 CPU_PIN_SUM[$CPU]=$((${CPU_PIN_SUM[$CPU]}+1))                 CPU_PIN_SUM[$CPU]=$((${CPU_PIN_SUM[$CPU]}+1))
             else             else
-                printf " "+                printf "${separator}${end}  "
             fi             fi
         done         done
 +
         if [[ -z $PINS ]]; then         if [[ -z $PINS ]]; then
-                echo -e "${red}$VM_NAME [${PINS:-Nincs pinelve}]${end}"+                echo -e "$(env printf '\u2551'${red}$VM_NAME [${PINS:-Nincs pinelve}]${end}"
         else         else
-                echo -e "${whi}$VM_NAME [${PINS:-Nincs pinelve}]${end}"+                echo -e "$(env printf '\u2551'${whi}$VM_NAME [${PINS:-Nincs pinelve}]${end}"
         fi         fi
-        done <<< "`$SSHC "show server name=$OVS" | grep '^.*Vm .*\[.*\]' | sort`"+ done <<< "`$SSHC "show server name=$OVS" | grep '^.*Vm .*\[.*\]' | sort`"
     # CPU pin szumma / cpu     # CPU pin szumma / cpu
-    for I in $(seq 0 $(($MAX_CPU_NUM-1))); do printf "+--"done +    for I in $(seq 0 $(($MAX_CPU_NUM-1))); do 
-    echo "+"+  [[ $(($I % ${CORES_PER_SOCKETS[$OVS]})) -eq 0 ]] && printf "$(env printf '\u256b')--" ||printf "$(env printf '\u2542')--" 
 + done 
 +    echo "$(env printf '\u256b')"
     for CPU in $(seq 0 $(($CPU_NUM-1))); do     for CPU in $(seq 0 $(($CPU_NUM-1))); do
 +  [[ $(($CPU % ${CORES_PER_SOCKETS[$OVS]})) -eq 0 ]] && separator="$(env printf '\u2551')" || separator="$(env printf '\u2503')"
         if [[ ${CPU_PIN_SUM[$CPU]} -ge $CPU_SUM_CRIT ]]; then         if [[ ${CPU_PIN_SUM[$CPU]} -ge $CPU_SUM_CRIT ]]; then
-            printf "|${red}%02d${end}" ${CPU_PIN_SUM[$CPU]}+            printf "${separator}${red}%02d${end}" ${CPU_PIN_SUM[$CPU]}
         elif [[ ${CPU_PIN_SUM[$CPU]} -ge $CPU_SUM_WARN ]]; then         elif [[ ${CPU_PIN_SUM[$CPU]} -ge $CPU_SUM_WARN ]]; then
-            printf "|${yel}%02d${end}" ${CPU_PIN_SUM[$CPU]}+            printf "${separator}${yel}%02d${end}" ${CPU_PIN_SUM[$CPU]}
         elif [[ ${CPU_PIN_SUM[$CPU]} -gt 0 ]]; then         elif [[ ${CPU_PIN_SUM[$CPU]} -gt 0 ]]; then
-            printf "|${grn}%02d${end}" ${CPU_PIN_SUM[$CPU]}+            printf "${separator}${grn}%02d${end}" ${CPU_PIN_SUM[$CPU]}
         else         else
-            printf " "+            printf "${separator}${end}  "
         fi         fi
     done     done
-    echo "Pins / vCPU"+    echo "$(env printf '\u2551'Pins / vCPU"
 done done
 echo echo
 } }
 + 
 function vm_pin { function vm_pin {
     printf "Mi a VM neve, amit pinelni szeretnel? "     printf "Mi a VM neve, amit pinelni szeretnel? "
Sor 167: Sor 219:
     read INPUT_VCPU_LIST     read INPUT_VCPU_LIST
     if [[ $INPUT_VCPU_LIST == "" ]]; then     if [[ $INPUT_VCPU_LIST == "" ]]; then
-        $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$INPUT_VM" -c rmvcpu+        $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$INPUT_VM" -c rmvcpu | sed "s/^/$(date '+%Y.%m.%d %H.%M.%d | ')${SSH_USER}: /" | tee -a $LOGFILE 
     else     else
-        $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$INPUT_VM" -c setvcpu -s "$INPUT_VCPU_LIST"+        $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$INPUT_VM" -c setvcpu -s "$INPUT_VCPU_LIST" | sed "s/^/$(date '+%Y.%m.%d %H.%M.%d | ')${SSH_USER}: /" | tee -a $LOGFILE
     fi     fi
 + echo | tee -a $LOGFILE
 + echo "${red}Ha végeztél minden módosítással, ne felejts el teljes mentést csinálni a pin térképről!${end}"
 } }
  
Sor 183: Sor 237:
     fi     fi
     $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$INPUT_VM" -c getvcpu     $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$INPUT_VM" -c getvcpu
-}+
  
 function backup { function backup {
-    printf "Melyik OVS pin-jeit mentsuk (${SERVERS## })? "+    printf "Melyik OVS pin-jeit mentsuk (${SERVERS## })? A teljes mentéshez ($FULL_BACKUP_FILE fájlba) nyomj ENTER-t! "
     read OVSEK     read OVSEK
 + if [[ -n "$OVSEK" ]]; then
   for OVS in $OVSEK; do   for OVS in $OVSEK; do
     [[ $OVS == "" ]] && continue;     [[ $OVS == "" ]] && continue;
Sor 204: Sor 259:
         echo "Nyomj ENTER-t a visszatereshez."; read         echo "Nyomj ENTER-t a visszatereshez."; read
         continue;         continue;
-    else+    else 
         echo "A $FILENAME fajl irhato."         echo "A $FILENAME fajl irhato."
     fi     fi
Sor 223: Sor 278:
     done <<< "`$SSHC "show server name=$OVS" | grep '^.*Vm .*\[.*\]' | sort`"     done <<< "`$SSHC "show server name=$OVS" | grep '^.*Vm .*\[.*\]' | sort`"
   done   done
 + echo -e "Mentés késztítése: $FILENAME" | sed -u "s/^/$(date '+%Y.%m.%d %H.%M.%d | ')${SSH_USER}: /" | sed 's/$/\n/' >> $LOGFILE
 + else
 + backup_all
 + fi
 +}
 + 
 +function backup_all {
 + >$FULL_BACKUP_FILE
 + while read OVS; do
 + while read VM; do
 +         VM_NAME=$(echo $VM | grep -oP '(?<=\[).*(?=\])')
 +         PINS=$($OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v $VM_NAME -c getvcpu | awk -F':' '/Current pinned CPU/{print $2}')
 +         if [[ $PINS =~ - ]]; then
 +             PIN_TOL=$(echo $PINS | awk -F'-' '{print $1}')
 +             PIN_IG=$(echo $PINS | awk -F'-' '{print $2}')
 +             PINS=""
 +             for I in $(seq $PIN_TOL $PIN_IG); do
 +                 PINS="${PINS# },$I"
 +             done
 +         fi
 +     PINS=$(echo $PINS | sed 's/^,//')
 +        echo "$OVS;$VM_NAME;$PINS" | tee -a "$FULL_BACKUP_FILE"
 + done <<< "`$SSHC "show server name=$OVS" | grep '^.*Vm .*\[.*\]' | sort`"
 + done <<< "`$SSHC "list server" | awk -F':' '/id:/{print $NF}' | sort -k1.15`"
 + echo -e "Teljes mentés készítése." | sed -u "s/^/$(date '+%Y.%m.%d %H.%M.%d | ')${SSH_USER}: /" | sed 's/$/\n/' >> $LOGFILE
 +}
 + 
 +function check_pins {
 +    [[ ! -f "$FULL_BACKUP_FILE" ]] && { echo 'A "$FULL_BACKUP_FILE" fájl nem található. Készíts egy teljes mentést a CPU pin térképről.'; exit 1; }
 +    while read OVS; do
 +        while read VM; do
 +            VM_NAME=$(echo $VM | grep -oP '(?<=\[).*(?=\])')
 +            PINS=$($OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v $VM_NAME -c getvcpu | awk -F':' '/Current pinned CPU/{print $2}')
 +            if [[ $PINS =~ - ]]; then
 +                PIN_TOL=$(echo $PINS | awk -F'-' '{print $1}')
 +                PIN_IG=$(echo $PINS | awk -F'-' '{print $2}')
 +                PINS=""
 +                for I in $(seq $PIN_TOL $PIN_IG); do
 +                    PINS="${PINS# },$I"
 +                done
 +            fi
 +            PINS=$(echo $PINS | sed 's/^,//')
 +        [[ $(grep -c ";$VM_NAME;$PINS" "$FULL_BACKUP_FILE") -eq 1 ]] || HIBAS_VMS="${HIBAS_VMS#,},$VM_NAME"
 +        done <<< "`$SSHC "show server name=$OVS" | grep '^.*Vm .*\[.*\]' | sort`"
 +    done <<< "`$SSHC "list server" | awk -F':' '/id:/{print $NF}' | sort -k1.15`"
 + if [[ -n "$HIBAS_VMS" ]]; then
 + echo "Az alábbi VM-ek CPU pin-je eltér a legutolsó mentésben lévőtől: ${HIBAS_VMS#,}" | tee | mail -s "CRITICAL - $(hostname) CPU PIN check" $ALERT_EMAIL
 + else
 + echo "OK - $(hostname) CPU PIN check"
 + fi
 } }
- 
  
 function restore { function restore {
     echo -e "A script konyvtaraban ($CURR_DIR/\*.bkp) az alabbi mentesek talalhatok:${grn}"     echo -e "A script konyvtaraban ($CURR_DIR/\*.bkp) az alabbi mentesek talalhatok:${grn}"
     grep "^#ovm_cpu_pin_map" $CURR_DIR/*bkp | sed 's/:.*$//'     grep "^#ovm_cpu_pin_map" $CURR_DIR/*bkp | sed 's/:.*$//'
 + [[ -e "$FULL_BACKUP_FILE" ]] && echo "$FULL_BACKUP_FILE"
     echo -e ${end}     echo -e ${end}
     echo "Melyiket toltsem vissza (copy & paste)? "     echo "Melyiket toltsem vissza (copy & paste)? "
Sor 247: Sor 352:
     read -e -p "Mehet a VM-ek pinelesenek beallitasa a mentesbol? [I/N] " VALASZ     read -e -p "Mehet a VM-ek pinelesenek beallitasa a mentesbol? [I/N] " VALASZ
     [[ "${VALASZ^^}" == "I" ]] || continue;     [[ "${VALASZ^^}" == "I" ]] || continue;
-    echo -e ${whi+ echo "${end}$(date '+%Y.%m.%d %H.%M.%d | ')${SSH_USER}: Visszatöltés: $RESTORE_FILENAME" >> $LOGFILE 
-    echo -e "VM nev;VCPU-k;Statusz" | awk -F';' '{printf "%-30s %-30s %-60s",$1,$2,$3}' +    echo -e "VM nev;VCPU-k;Statusz" | awk -F';' '{printf "%-30s %-30s %-60s",$1,$2,$3}' | sed -u "s/^/${end}$(date '+%Y.%m.%d %H.%M.%d | ')${SSH_USER}: ${whi}/" | tee -a $LOGFILE 
-    echo -${end}+    echo | tee -a $LOGFILE
     grep -v '^#' $RESTORE_FILENAME | while read SOR; do     grep -v '^#' $RESTORE_FILENAME | while read SOR; do
         OVS=$(echo $SOR |awk -F';' '{print $1}')         OVS=$(echo $SOR |awk -F';' '{print $1}')
Sor 261: Sor 366:
             $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$VM_NAME" -c setvcpu -s "$VCPU_LIST" >/dev/null             $OVMC -u admin -p $OVM_ADMIN_PASSWD -h localhost -v "$VM_NAME" -c setvcpu -s "$VCPU_LIST" >/dev/null
         fi         fi
-        [[ $? -eq 0 ]] && echo -e "${grn}OK${end}" +        [[ $? -eq 0 ]] && echo -e "${grn}OK${end}"  
-        printf ${end} +    done 2>&1 | sed -u "s/^/${end}$(date '+%Y.%m.%d %H.%M.%d | ')${SSH_USER}: /" | tee -a $LOGFILE 
-    continue + sed -i "s,\x1B\[[0-9;]*[a-zA-Z],,g" $LOGFILE # színkódok törlése a logból 
-    done+ echo >> $LOGFILE
 } }
 +
 +#Parancssori paraméterek feldolgozása
 +while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in
 +    -b|--backup-all )
 + backup_all
 + exit
 + ;;
 +    -c|--check )
 + shift; ALERT_EMAIL="$1"
 + check_pins;
 + exit
 +        ;;
 +    -h|--help )
 +        show_parameters;
 + exit
 +        ;;
 +esac; shift; done
 +if [[ "$1" == "--" ]]; then shift; fi
 +
 #################################################### Vezerlo ciklus #################################################### #################################################### Vezerlo ciklus ####################################################
 FUNKCIO="-" FUNKCIO="-"
 while [[ $FUNKCIO =~ [^qQ] ]]; do ############ while [[ $FUNKCIO =~ [^qQ] ]]; do ############
 FUNKCIO="-" FUNKCIO="-"
 + 
 clear clear
 TERMINAL_COLS=$(/usr/bin/tput cols) TERMINAL_COLS=$(/usr/bin/tput cols)
 vastag_fejlec "Oracle VM CPU pin map $SCRIPT_VER by Agoston Peter" $(($TERMINAL_COLS-5)) '#' vastag_fejlec "Oracle VM CPU pin map $SCRIPT_VER by Agoston Peter" $(($TERMINAL_COLS-5)) '#'
 +
 echo echo
 echo -e "${yel}Szerverek beolvasasa...${end}" echo -e "${yel}Szerverek beolvasasa...${end}"
 MAX_CPU_NUM=0 MAX_CPU_NUM=0
 SERVERS="" SERVERS=""
 +declare -A CORES_PER_SOCKETS
 while read SERVER; do while read SERVER; do
-    SERVERS="${SERVERS# } ${SERVER##*:}" +    SERVERS="${SERVERS# } ${SERVER}" 
-    CPU_NUM=$($SSHC show server name="${SERVER##*:}" | grep -c '^.*Cpu.*Processor ')+    CPU_NUM=$($SSHC show server name="${SERVER}" | grep -c '^.*Cpu.*Processor ')
     if [[ $MAX_CPU_NUM -lt $CPU_NUM ]]; then MAX_CPU_NUM=$CPU_NUM; fi     if [[ $MAX_CPU_NUM -lt $CPU_NUM ]]; then MAX_CPU_NUM=$CPU_NUM; fi
-    VM_NUM=$($SSHC show server name="${SERVER##*:}" | grep -c '^.*Vm .*\[.*\]'+    VM_NUM=$($SSHC show server name="${SERVER}" | grep -c '^.*Vm .*\[.*\]') 
-    echo -e "${whi}${SERVER##*:}${end} ${whi}$CPU_NUM${end} ${whi}$VM_NUM${end}" | awk '{printf "%-30s:     %5s vcpu, %5s VM\n",$1,$2,$3}' +    CORES_PER_SOCKETS[${SERVER}]=$($SSHC show server name="${SERVER}" | awk -F'=' '/Cores per Processor Socket/{print $2}' | sed 's/ //g') 
-done <<< "`$SSHC "list server"grep 'id:' | sort`"+    echo -e "${whi}${SERVER}${end} ${whi}$CPU_NUM${end} ${whi}$VM_NUM${end}" | awk '{printf "%-30s:     %5s vcpu, %5s VM\n",$1,$2,$3}' 
 +done <<< "`$SSHC "list server"awk -F':' '/id:/{print $NF}' | sort -k1.15`" 
 echo echo
 echo -e "${yel}Valassz funkciot:${end}" echo -e "${yel}Valassz funkciot:${end}"
Sor 320: Sor 448:
 done ############## done ##############
 cd $CURR_DIR cd $CURR_DIR
 +echo "${red}Ha módosításokat végeztél, ugye nem felejtettél el teljes mentést csinálni a pin térképről a végén?${end}"
 </file> </file>