вторник, 28 июня 2011 г.

Скрипт для отчистки каталога бакулы и файловой системы

#!/bin/bash
# Удаляем файлы если том в пуле Scratch
# Удаляем тома из каталога если нет этих файлов
# Удаляем файлы если про них нет информации в каталоге
# СДЕЛАТЬ БЕКАП КАТАЛОГА! :) Чтобы потом не было мучительно больно.
DEVDIR=/bacula/devices # Тут лежат все "ленточки"
POOLS='Scratch Default fullbackup-pool diffbackup-pool incbackup-pool full-pool diff-pool inc-pool' #
MYSQL_CMD="mysql --skip-column-names -u bacula -plna bacula" #
BCONSOLE="/usr/bin/bconsole -s -c /etc/bacula/bconsole.conf" #


for POOL in $POOLS
do
    POOLID=`$MYSQL_CMD -e "select PoolId FROM Pool WHERE Name=\"$POOL\""`
    VOLLIST=`$MYSQL_CMD -e "select VolumeName FROM Media WHERE PoolId=\"$POOLID\";"`
    for VOL in $VOLLIST
    do
        # echo $POOLID " " $POOL " " $VOL
        # echo "Ищем $VOL"
        FILE=`find -P $DEVDIR -name "$VOL"`
        if [ "$FILE" = "" ]
        then
            echo "Файл $VOL не найден удаляем из каталога "
$BCONSOLE <<EOD_1
delete volume=$VOL yes
quit
EOD_1
        else
            if [ $POOL = "Scratch" ]
            then
                echo "Удаляем том $VOL пула $POOL"
                rm -fv `find -P $DEVDIR -name $VOL`
            else
                echo "Том $VOL в пуле $POOL"
            fi
        fi
    done
for FILE in $DEVDIR/*/*
do
    MEDIA=`echo "$FILE" | cut -d'/' -f5`
    VOL=`$MYSQL_CMD -e  "select VolumeName FROM Media WHERE VolumeName=\"$MEDIA\";"`
    if [ "$VOL" = "" ]
    then
        rm -fv  $FILE
        echo $FILE have no correspondig volume $VOL removed
#    else
#       echo $FILE have corresponfig volume $VOL in catalog
    fi
done

понедельник, 6 июня 2011 г.

IPSEC Linux Ubuntu 10.04 DFL-800 DFL-210

Все оказалось достаточно просто, но понадобилась одна хитрость :) 
192.168.7.0/24 - ДЦ (eth0)
y.y.y.y - ДЦ (eth1)
x.x.x.x - ЦО 

И так, всё делаем по мануалу:

/etc/ipsec-tools.conf
#!/usr/sbin/setkey -f
flush;
spdflush;
spdadd 192.168.7.0/24 192.168.1.0/24 any -P out ipsec esp/tunnel/y.y.y.y-x.x.x.x/require;
spdadd 192.168.1.0/24 192.168.7.0/24 any -P in ipsec esp/tunnel/x.x.x.x-y.y.y.y/require;

racoon.conf:
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
sainfo anonymous
{
        pfs_group 2;
        lifetime time 1 hour ;
        encryption_algorithm aes, 3des, blowfish 448, rijndael ;
        authentication_algorithm  hmac_md5, hmac_sha1 ;
        compression_algorithm deflate ;
}
include "/etc/racoon/x.x.x.x.conf";
include "/etc/racoon/z.z.z.z.conf";

x.x.x.x.conf:
remote x.x.x.x
{
        exchange_mode aggressive, main;
        my_identifier address;
        initial_contact on;
        proposal {
                encryption_algorithm aes;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

Ну а теперь хитрость :) 
пакеты с самого сервера в тунель не попадали, хотя тунель фунциклировал, и между хостами в сетях связь была.
С самого IPSEC сервера Пинг проходил только если явно указать интерфейс ping -I eth0. Иначе все отправлялось на маршрут по умолчанию
Если добавить маршрут
ip route add 192.168.1.0/24 via 192.168.7.1 src 192.168.7.1 - вообще все переставало работать
ip route add 192.168.1.0/24 dev eth0 - тотже эффект, в общем не буду перечислять все варианты, укажу сразу тот что заработал:
ip route add 192.168.1.0/24 dev eth1 src 192.168.7.1
Добавил строчку в rc.local

Казалось бы мелочь ... а времени отняло ...