Из архива раздела:

Programming

rsync — Automated backup script (with snapshots)

Написал(а): ZeroChaos| Когда: 16 января, 2012 г.

Решил немного упростить задачу резервного копирования при помощи rsync и написал для этого небольшой скрипт на bash. Да, знаю, уже есть несколько решений, упрощающих backup при помощи rsync, но для того, чтобы выполнить требуемую задачу, все равно пришлось бы писать для этого свою обвязку. Потому было принято решение написать что-то свое, максимально упрощающее задачу бэкапа и сопутствующих этому действий, таких как генерация ключа для авторизации по ssh, а так же его копирование на backup-сервер.

Следующий скрипт позволяет читать список копирумых каталогов из текстового файла, применять маску исключений, задаваемую в текстовом файле, а так же опционально делать snapshot’ы, содержащие измененные, либо удаленные файлы. Тем самым, появляется возможность откатиться на старые версии файлов, случайно удаленных, к примеру, либо ошибочно измененных. При этом сохраняется полная изначальная структура каталогов, что позволяет легко найти требуемый файл. Snapshot’ы хранятся в каталогах со следующей маской в имени: ‘год-месяц-день.XXчXXм’. Есть возможность авто-ротации snapshot’ов.

backup.sh:

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
113
114
115
116
117
118
#!/bin/sh

# --------------------------------------------
# Automated backup script
# Written by ZeroChaos
# Version 1.1, 2012-01-14
# Site: http://zerolab.net/
# --------------------------------------------
# NOTE: Exclude spaces in the variable FOLDER!
# --------------------------------------------
# set -e

# -------------------------------------------- begin of [Configurable settings]
# Use SSH for sync
export RSYNC_RSH="ssh -c arcfour -o Compression=no -x"

# Remote account
USER="zerochaos"
HOST="zerolab.net"
REMOTEHOST="${USER}@${HOST}"

# Enable or disable snapshot
SNAPSHOT="true"
# Auto-rotate (days)
SDAYS="15"

# Destination folder, snapshot directory
DEST_point="/home/zerochaos/www/"
SDIR="snapshot"
SNAPSHOT_dir="${DEST_point}${SDIR}/`date +'%Y-%m-%d.%Hh%Mm'`"

# Take the list from the same folder where the script is called
DIR=$(dirname "$0")
LISTFOLDERS=$DIR/backup.txt
LISTEXCLUDES=$DIR/exclude.txt
STRDEL="# begin of [do not delete this string]"
# -------------------------------------------- end of [Configurable settings]

# -------------------------------------------- begin of [Do not touch this section]
# If no arguments
if [ $# = 0 ]; then
    while read FOLDER; do
        if [ -n "$FOLDER" ] && [ "$FOLDER" != "$STRDEL" ]; then
            FOLDERNAME="`echo "$FOLDER" | awk -F/ '{ print $NF }'`"
            # Options for rsync
            if [ $SNAPSHOT = "true" ]; then
                OPTIONS="-Sazq --bwlimit=3840 --delete --exclude-from=$LISTEXCLUDES --backup --backup-dir=$SNAPSHOT_dir/$FOLDERNAME"
            else
                OPTIONS="-Sazq --bwlimit=3840 --delete --exclude-from=$LISTEXCLUDES"
            fi
            # Sync
            rsync $OPTIONS "${FOLDER}/" $REMOTEHOST:"${DEST_point}${FOLDERNAME}/"
        fi
    done < $LISTFOLDERS
    # Snapshot auto-rotate
    if [ $SNAPSHOT = "true" ]; then
        ssh $REMOTEHOST "find ${DEST_point}${SDIR}/ -type d -mtime +$SDAYS -exec rm -r {} \;" >/dev/null 2>&1
    fi
fi

# Generate public/private rsa key pair
ssh_keygen() {
    ssh-keygen -t rsa -b 4096
}

# Copy your public key on a remote machine
ssh_copy_id() {
    ID_FILE="${HOME}/.ssh/id_rsa.pub"

    if [ x$SSH_AUTH_SOCK != x ] && ssh-add -L >/dev/null 2>&1; then
      GET_ID="$GET_ID ssh-add -L"
    fi

    if [ -z "`eval $GET_ID`" ] && [ -r "${ID_FILE}" ]; then
      GET_ID="cat ${ID_FILE}"
    fi

    if [ -z "`eval $GET_ID`" ]; then
      echo "$0: ERROR: No identities found" >&2
      exit 1
    fi

    { eval "$GET_ID" ; } | ssh ${REMOTEHOST%:} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1
}

ME=$(basename "$0")
print_help() {
    echo
    echo "Usage: $ME [OPTION...]"
    echo
    echo "Options:"
    echo "         -g     Generate public/private rsa key pair:"
    echo "                ssh-keygen -t rsa -b 4096"
    echo "         -c     Copy your public key on a remote machine:"
    echo "                ssh-copy-id $REMOTEHOST"
    echo "         -h     Help."
    echo
    echo "Example: $ME -gc"
    echo "Use both options, generate & copy."
    echo
}

while getopts ":gch" opt;
do
    case $opt in
        g) ssh_keygen;
            ;;
        c) ssh_copy_id;
            ;;
        h) print_help;
            ;;
        *) echo "Wrong option";
            echo "For help, use: $ME -h";
            exit 1
            ;;
        esac
done
# -------------------------------------------- end of [Do not touch this section]

Сохраните содержимое в файл backup.sh и дайте права на выполнение:

1
chmod -x backup.sh

Положите файлы backup.txt и exclude.txt рядом со скриптом. Формат файлов представлен ниже.

backup.txt:

1
2
3
4
5
# begin of [do not delete this string]
/home/zerochaos/www/msilab.net
/home/zerochaos/www/ruslab.net
/home/zerochaos/www/zerolab.net
# end of [do not delete this string]

exclude.txt:

1
2
3
4
5
6
temp/summ/checks/*
temp/sess/*
temp/tmp/*
template_cache/*
cache/*
logs/*

Параметры, поддающиеся настройке в backup.sh, вынесены в отдельную секцию и снабжены соответствующими комментариями. Для связи с backup-сервером будем использовать протокол ssh, для авторизации воспользуемся беспарольным вариантом, т.е. авторизацией по ключу. Для этого сгенерируем пару public/private rsa key. Выполним скрипт с ключом -g:

1
backup.sh -g

Отвечаем на заданные вопросы и переходим к копированию открытого ключа на удаленный сервер. Для этого выполним скрипт с ключом -c:

1
backup.sh -c

Вводим пароль пользователя, под которым будет происходить дальнейшая авторизация по ключу во время резервного копирования. Две команды выше можно объединить в одну, тогда операции будут выполнены последовательно:

1
backup.sh -gc

Остается добавить скрипт в cron:

1
2
#minute hour    mday    month   wday    command
00      1       *       *       *       sh /scripts/backup.sh

Вот и все, настраивайте список копируемых каталогов, список исключений, конечную директорию и параметры создания снапшотов. Надеюсь этот скрипт окажется для многих полезным и сэкономит много времени и сил. Всегда делайте backup’ы.

{ Нет комментариев }

fb2toepub for Mac OS X – Drag&Drop converter

Написал(а): ZeroChaos| Когда: 14 марта, 2011 г.

fb2toepub

Графический интерфейс для экстремально быстрого консольного конвертера fb2toepub от Алексея Бобкова.

fb2lrf-dmg

Работает пакетное конвертирование, паразитные расширения отсекаются. Достаточно в окно конвертера перетянуть файл(ы) или папк(у,и) и получить в том же каталоге результат. Если перед началом конвертации электронную книгу подключить к компьютеру, то сконвертированные файлы будут сохранены на устройстве и расфасованы по тем папкам, в которых они находились при подаче на конвертер. Поддерживается любая степень вложенности, файлы будут сохранены по каталогам, без сохранения оной.

История изменений:

21.08.2011
- Поддержка OS X Lion

Настройки по умолчанию:

1
2
3
4
5
# begin of [Configurable settings]
Volume="READER"
BooksPATH="database/media/books"
LOGFILE="$HOMEDIR/Library/Logs/fb2toepub.log"
# end of [Configurable settings]

Настраивается в файле ‘fb2toepub.app/Contents/Resources/script’.

Настройку файла стилей нужно производить в папке ‘fb2toepub.app/Contents/Resources/css’, в эту же папку кладутся шрифты для встраивания в конечный ePub (примеры смотреть в архиве с исходниками консольной версии). По умолчанию включен ‘style.css’, настроенный для Sony Reader.

При необходимости, правим параметр ‘Volume’. Это метка тома вашей электронной книги, подключенной к компьютеру.
BooksPATH — путь, куда будут сохранены книги.
LOGFILE — файл, в который будут сохраняться сообщения об ошибках конвертации. При начале новой сессии конвертации, log-файл очищается.

Скачать (обновлено: 21.08.2011, ver. 1.0_4)

{ Комментариев - 41 }

fb2lrf for Mac OS X – Drag&Drop converter

Написал(а): ZeroChaos| Когда: 19 января, 2011 г.

fb2lrf

Я всерьез думал, что с основным форматом для чтения на электронных книжках наконец-то определился — PDF. Но время показало, как я был не прав. С покупкой пятидюймовой читалки Sony Reader PRS-350, отсутствие масштабирования стало критичным фактором, что и заставило меня вспомнить о родном формате Sony — LRF. Проблема заключается в том, что под Mac OS X нет вменяемого конвертера в этот формат. Calibre — монструозен и качеством выходного материала не блещет.

Все пользователи Windows прекрасно знакомы с однокнопочным конвертером от Михаила Шаронова, а так же его производной — консольным конвертером. И я подумал, почему бы не прикрутить к нему нативный для Mac OS X GUI, а под капотом пусть работает себе консольный конвертер через Wine.

Задача стояла следующая:

1. Должен получиться автономный bundle, без необходимости устанавливать весь пакет Wine, весящий без малого около 200 МБайт. Т.е. конечное приложение ничем не должно отличаться от родного для Mac OS X.
2. Собрать и урезать Wine настолько, насколько это возможно, оставив только необходимые для работы конвертера библиотеки.

Немного подумав, реализовал задуманное.

fb2lrf-dmg

В результате получился пакет размером всего лишь чуть более 5 МБайт. Работает пакетное конвертирование, паразитные расширения отсекаются. Достаточно в окно конвертера перетянуть файл(ы) или папк(у,и) и получить в том же каталоге результат. По-моему, очень удобно получилось.

Требования: Intel-based Mac, X11

Скачать (обновлено: 14.02.2011)

Первый запуск будет немного продолжительнее последующих, при первом запуске для Wine автоматически будут применены необходимые настройки. Файл стилей ‘default_styles.sini’ вы можете найти и отредактировать внутри bundle — ‘fb2lrf.app/Contents/Resources/lib’.

Особенности редактирования ‘default_styles.sini’: к путям необходимо вначале добавлять: ‘Z:’. Привожу пример того, как встроить пользовательский шрифт в конечный LRF файл:

1
2
3
4
5
6
7
...
FontName=Georgia
...
IsExternalFont=0
...
ExternalFontFile=Z:/Library/Fonts/Georgia.ttf|Georgia|Georgia
...

История изменений:

14.02.2011
- Добавлен вывод информации о том, какая книга в данный момент конвертируется

24.01.2011
- Нет привязки к каталогу ‘Applications’
- Добавлено: если перед началом конвертации Sony Reader подключить к компьютеру, то сконвертированные файлы будут сохранены на устройстве и расфасованы по тем папкам, в которых они находились при подаче на конвертер. Поддерживается любая степень вложенности, файлы будут сохранены по каталогам, без сохранения оной.

Настройки по умолчанию:

1
2
3
4
# begin of [Configurable settings]
Volume="READER"
BooksPATH="database/media/books"
# end of [Configurable settings]

Настраивается в файле ‘fb2lrf.app/Contents/Resources/script’.

Не уверен, что на всех моделях Sony Reader метка тома ‘READER’, поэтому, при необходимости, правим параметр ‘Volume’.
BooksPATH — путь, куда будут сохранены книги. Если у Вас установлен PRS+, то путь может отличаться от того, что стоит по умолчанию. Правим, при необходимости.

{ Комментариев - 16 }

fb2pdf for Windows — Drag&Drop converter

Написал(а): ZeroChaos| Когда: 13 октября, 2010 г.

По многочисленным просьбам написал GUI под Windows. Стоило это мне установки Windows в виртуальную машину под Mac OS X, инсталляции RAD Studio и пары дней на сам проект.

Интерфейс выполнен в Mac Style и пропитан духом этой операционной системы, копируя при этом выпущенный ранее GUI под Mac OS X. Программа работает по принципу Drag&Drop. Профиль заточен под Sony PRS 500, 505, 600, 650, 700 (& other 6″), кто хочет его поменять, найдет stylesheet.json в папке с программой.

Все необходимое для работы собрано в инсталлятор. Установите и пользуйтесь.

Перетягиваем файл или папку в окно программы и получаем результат.

Скачать (обновлено: 20.04.2011, ver. 20110306)

Стили отдельно, Modified Default Style и для Kindle DX:

Стили

Пользуйтесь на здоровье.

{ Комментариев - 20 }

fb2pdf for Mac OS X — Drag&Drop converter

Написал(а): ZeroChaos| Когда: 21 августа, 2010 г.


В ожидании доставки своего Kindle DX Graphite, решил прикрутить GUI к замечательной консольной утилите fb2pdf от viktorz.

Все это собрано в один bundle под операционную систему Mac OS X, работает по принципу Drag&Drop. Профиль заточен под Sony PRS 500, 505, 600, 650, 700, кто хочет его поменять, найдет stylesheet.json в ресурсах bundle.

Перетягиваем файл или папку в окно программы и получаем результат:

Профиль легко можно переделать под любую электронную книжку. Результат останется только закинуть на устройство и читать, читать, читать…

Скачать (обновлено: 20.04.2011, ver. 20110306)

Стили отдельно, Modified Default Style и для Kindle DX:

Стили

Пользуйтесь на здоровье.

{ Комментариев - 59 }