feat: format manpage
This commit is contained in:
		@@ -1,16 +1,11 @@
 | 
				
			|||||||
=============
 | 
					:Title: boring-backup
 | 
				
			||||||
boring-backup
 | 
					:Title upper: BORING-BACKUP
 | 
				
			||||||
=============
 | 
					:Subtitle: backup files and databases
 | 
				
			||||||
 | 
					 | 
				
			||||||
---------------------------
 | 
					 | 
				
			||||||
backup files and databases.
 | 
					 | 
				
			||||||
---------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
:Author: ge
 | 
					:Author: ge
 | 
				
			||||||
:Copyright: \(C) 2022, ge <https://nixhacks.net/>, GPLv3+
 | 
					:Copyright: \(C) 2022, ge <https://nixhacks.net/>, GPLv3+
 | 
				
			||||||
:Date: 2022 May 15
 | 
					:Date: 2022 May 15
 | 
				
			||||||
:Manual section: 1
 | 
					:Manual section: 1
 | 
				
			||||||
:Version: baf 0.0.1
 | 
					:Version: boring-backup 0.1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Синопсис
 | 
					Синопсис
 | 
				
			||||||
--------
 | 
					--------
 | 
				
			||||||
@@ -20,7 +15,8 @@ backup files and databases.
 | 
				
			|||||||
Описание
 | 
					Описание
 | 
				
			||||||
--------
 | 
					--------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
boring-backup - это расширяемая утилита для резервного копирования на основе сценариев Bash.
 | 
					boring-backup - это расширяемая утилита для резервного копирования на основе
 | 
				
			||||||
 | 
					сценариев Bash.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Опции
 | 
					Опции
 | 
				
			||||||
-----
 | 
					-----
 | 
				
			||||||
@@ -35,20 +31,36 @@ boring-backup - это расширяемая утилита для резерв
 | 
				
			|||||||
Быстрый старт
 | 
					Быстрый старт
 | 
				
			||||||
-------------
 | 
					-------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
boring-backup можно рассматривать как фреймворк или библиотеку для создания сценариев резервного копирования. Сценарии должны содержать валидный код на Bash. Сценарий импортируется в основной скрипт с помощью команды ``source`` (см. ``bash``\(1) п. SHELL BUILTIN COMMANDS).
 | 
					boring-backup можно рассматривать как фреймворк или библиотеку для создания
 | 
				
			||||||
 | 
					сценариев резервного копирования. Сценарии должны содержать валидный код на
 | 
				
			||||||
 | 
					Bash. Сценарий импортируется в основной скрипт с помощью команды ``source``
 | 
				
			||||||
 | 
					(см. ``bash``\(1) п. SHELL BUILTIN COMMANDS).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Простейший сценарий резервного копирования выглядит следующим образом::
 | 
					Простейший сценарий резервного копирования выглядит следующим образом::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sources=('file:/home/user')
 | 
					    sources=(file:/home/user)
 | 
				
			||||||
    targets=('file:/var/backup')
 | 
					    targets=(file:/var/backup)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Здесь массивы `sources` и `targets` определяют точки, они же поинты (`points`) резервного копирования: источники (`sources`) и назначения (`targets`). Это основные сущности, с которыми работает boring-backup. Вот некоторые особенности поинтов:
 | 
					Здесь массивы `sources` и `targets` определяют точки, они же поинты (`points`)
 | 
				
			||||||
 | 
					резервного копирования: источники (`sources`) и назначения (`targets`). Это
 | 
				
			||||||
 | 
					основные сущности, с которыми работает boring-backup. Вот некоторые особенности
 | 
				
			||||||
 | 
					поинтов:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Все поинты указываются в формате URI.
 | 
					- Все поинты указываются в формате URI.
 | 
				
			||||||
- Поинты могут указывать как на локальные (размещённые на текущей машине), так и на удалённые (размещённые на удалённой машине) ресурсы.
 | 
					- Поинты могут указывать как на локальные (размещённые на текущей машине), так
 | 
				
			||||||
 | 
					  и на удалённые (размещённые на удалённой машине) ресурсы.
 | 
				
			||||||
- Можно указать как несколько источников, так и несколько назначений.
 | 
					- Можно указать как несколько источников, так и несколько назначений.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Для выполнения бэкапа директорий или отдельных файлов применяется схема URI `file`. В схеме `file` нельзя указать директорию, размещённую на удалённом хранилище (за исключением случая, когда удалённое хранилище примонтировано как файловая система), для этого используйте другие схемы. В примере выше будет выполнена резервная копия локальной директории /home/user в другую локальную директорию /var/backup. Поскольку в сценарии из примера нет ничего, кроме указания точек `sources` и `targets`, бэкап будет выполнен с параметрами по умолчанию: директория /home/user будет заархивирована с помощью утилиты ``tar``\(1) и помещён в директорию /var/backup. Имя архива будет сложено из строки::
 | 
					Для выполнения бэкапа директорий или отдельных файлов применяется схема URI
 | 
				
			||||||
 | 
					`file`. В схеме `file` нельзя указать директорию, размещённую на удалённом
 | 
				
			||||||
 | 
					хранилище (за исключением случая, когда удалённое хранилище примонтировано как
 | 
				
			||||||
 | 
					файловая система), для этого используйте другие схемы. В примере выше будет
 | 
				
			||||||
 | 
					выполнена резервная копия локальной директории /home/user в другую локальную
 | 
				
			||||||
 | 
					директорию /var/backup. Поскольку в сценарии из примера нет ничего, кроме
 | 
				
			||||||
 | 
					указания точек `sources` и `targets`, бэкап будет выполнен с параметрами по
 | 
				
			||||||
 | 
					умолчанию: директория /home/user будет заархивирована с помощью утилиты
 | 
				
			||||||
 | 
					``tar``\(1) и помещён в директорию /var/backup. Имя архива будет сложено по
 | 
				
			||||||
 | 
					шаблону::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ${name_prefix}${name}${name_date_fmt}${name_suffix}${name_ext}
 | 
					    ${name_prefix}${name}${name_date_fmt}${name_suffix}${name_ext}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -59,11 +71,20 @@ boring-backup можно рассматривать как фреймворк и
 | 
				
			|||||||
Обзор URI
 | 
					Обзор URI
 | 
				
			||||||
---------
 | 
					---------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Источники (`sources`) и назначения (`targets`) должны быть указаны в виде URI. Это позовляет наглядно в одной сроке видеть весь набор данных. Парсер реализует поддержку следующего синтаксиса URI::
 | 
					Источники (`sources`) и назначения (`targets`) должны быть указаны в виде
 | 
				
			||||||
 | 
					URI. Это позовляет наглядно в одной сроке видеть весь набор данных. Парсер
 | 
				
			||||||
 | 
					реализует поддержку следующего синтаксиса URI::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    scheme:[//[username[:password]@]hostname[:port]]/[path]?[query]#[fragment]
 | 
					    scheme:[//[username[:password]@]hostname[:port]]/[path]?[query]#[fragment]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Парсер URI соответствует RFC 3986 не полностью - разбиение на составные части URI происходит верно, но интерпретация в отдельных ситуациях может отличаться. См. примеры URI и реузультаты их интерпретации парсером в файле `tests/parse_uri.bats`. На практике рекомендую придерживаться примеров, которые приведены ниже и в файле `tests/parse_uri.bats`. В случае, если изменение логики парсера необходимо, вы можете прислать правки в pull-реквесте или завести feature-реквест в репозитории проекта. На текущий момент компоненты `query` и `fragment` не используются.
 | 
					Парсер URI соответствует RFC 3986 не полностью - разбиение на составные части
 | 
				
			||||||
 | 
					URI происходит верно, но интерпретация в отдельных ситуациях может отличаться.
 | 
				
			||||||
 | 
					См. примеры URI и реузультаты их интерпретации парсером в файле
 | 
				
			||||||
 | 
					`tests/parse_uri.bats`. На практике рекомендую придерживаться примеров, которые
 | 
				
			||||||
 | 
					приведены ниже и в файле `tests/parse_uri.bats`. В случае, если изменение
 | 
				
			||||||
 | 
					логики парсера необходимо, вы можете прислать правки в pull-реквесте или
 | 
				
			||||||
 | 
					завести feature-реквест в репозитории проекта. На текущий момент компоненты
 | 
				
			||||||
 | 
					`query` и `fragment` не используются.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Примеры URI для массива `sources`::
 | 
					Примеры URI для массива `sources`::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -79,19 +100,23 @@ boring-backup можно рассматривать как фреймворк и
 | 
				
			|||||||
    rsync://backup_user@192.168.3.12:2022/backups
 | 
					    rsync://backup_user@192.168.3.12:2022/backups
 | 
				
			||||||
    s3://my_bucket
 | 
					    s3://my_bucket
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Пароли содержащие специальные символы недопустимые в URI (включая пробелы) необходимо закодировать в percent code. См. примеры кодирования строки на разных языках программирования ниже.
 | 
					Пароли содержащие специальные символы недопустимые в URI (включая пробелы)
 | 
				
			||||||
 | 
					необходимо закодировать в percent code. См. примеры кодирования строки на
 | 
				
			||||||
 | 
					разных языках программирования ниже.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Python 2::
 | 
					Python 2::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    python2 -c "import urllib, sys; print urllib.quote(sys.argv[1], safe='')" 'PA$$WORD'
 | 
					    python2 -c "import urllib, sys; \
 | 
				
			||||||
 | 
					        print urllib.quote(sys.argv[1], safe='')" 'p@$$w0rd'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Python 3::
 | 
					Python 3::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    python3 -c "import urllib.parse, sys; print(urllib.parse.quote(sys.argv[1], safe=''))" 'PA$$WORD'
 | 
					    python3 -c "import urllib.parse, sys; \
 | 
				
			||||||
 | 
					        print(urllib.parse.quote(sys.argv[1], safe=''))" 'p@$$w0rd'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Perl 5::
 | 
					Perl 5::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    echo 'PA$$WORD' | perl -MURI::Escape -wlne 'print uri_escape $_'
 | 
					    echo 'p@$$w0rd' | perl -MURI::Escape -wlne 'print uri_escape $_'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Поддерживаемые протоколы и схемы URI
 | 
					Поддерживаемые протоколы и схемы URI
 | 
				
			||||||
------------------------------------
 | 
					------------------------------------
 | 
				
			||||||
@@ -99,13 +124,17 @@ Perl 5::
 | 
				
			|||||||
``````````````````````````````````````````````````
 | 
					``````````````````````````````````````````````````
 | 
				
			||||||
 | 
					
 | 
				
			||||||
file
 | 
					file
 | 
				
			||||||
    Может содержать путь к локальному файлу или директории. Файлы архивируются при помощи ``tar`` и по умолчанию не сжимаются. Cжатие архива может быть включено через переменную `compression`. Примеры::
 | 
					    Может содержать путь к локальному файлу или директории. Файлы
 | 
				
			||||||
 | 
					    архивируются при помощи ``tar`` и по умолчанию не сжимаются. Cжатие
 | 
				
			||||||
 | 
					    архива может быть включено через переменную `compression`. Примеры::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /var/www/www-root/data
 | 
					        /var/www/www-root/data
 | 
				
			||||||
        file:/var/www/html
 | 
					        file:/var/www/html
 | 
				
			||||||
        file:///home/jhon/cool_stuff.txt
 | 
					        file:///home/jhon/cool_stuff.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Не используйте двойной слэш для этой схемы, используйте один или три слэша. Двойной слэш означает наличие компонента Authority, это приводит к неверной интерпретации адреса. 
 | 
					    Не используйте двойной слэш для этой схемы, используйте один или три
 | 
				
			||||||
 | 
					    слэша. Двойной слэш означает наличие компонента Authority, это приводит
 | 
				
			||||||
 | 
					    к неверной интерпретации адреса. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    См. также ``handler::tar``
 | 
					    См. также ``handler::tar``
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -114,17 +143,22 @@ mysql
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        mysql://[username[:password]@]hostname[:port]/database
 | 
					        mysql://[username[:password]@]hostname[:port]/database
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    С помощью утилиты ``mysqldump``\(1) формируется дамп в формате SQL. Файл по умолчанию не сжимается, но сжатие может быть включено через переменную `compression`.
 | 
					    С помощью утилиты ``mysqldump``\(1) формируется дамп в формате SQL. Файл
 | 
				
			||||||
 | 
					    по умолчанию не сжимается, но сжатие может быть включено через переменную
 | 
				
			||||||
 | 
					    `compression`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    См. также ``handler::mysqldump``
 | 
					    См. также ``handler::mysqldump``
 | 
				
			||||||
 | 
					
 | 
				
			||||||
postgres
 | 
					postgres
 | 
				
			||||||
    Аналогично `mysql`, но для PostgreSQL. Для создания дампа используется ``pg_dump``\(1) с расширением .psql. Файл по умолчанию не сжимается, но сжатие может быть включено через переменную `compression`.
 | 
					    Аналогично `mysql`, но для PostgreSQL. Для создания дампа используется
 | 
				
			||||||
 | 
					    ``pg_dump``\(1) с расширением .psql. Файл по умолчанию не сжимается, но
 | 
				
			||||||
 | 
					    сжатие может быть включено через переменную `compression`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    См. также ``handler::pg_dump``
 | 
					    См. также ``handler::pg_dump``
 | 
				
			||||||
 | 
					
 | 
				
			||||||
sqlite
 | 
					sqlite
 | 
				
			||||||
    Схема для баз данных SQLite. Мало отличается от `file`, добавлена для наглядного обозначения, что источником является БД SQLite, а не иной файл.
 | 
					    Схема для баз данных SQLite. Мало отличается от `file`, добавлена для
 | 
				
			||||||
 | 
					    наглядного обозначения, что источником является БД SQLite, а не иной файл.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    См. также ``handler::sqlite``
 | 
					    См. также ``handler::sqlite``
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -132,9 +166,21 @@ sqlite
 | 
				
			|||||||
``````````````````````````````````````````````````
 | 
					``````````````````````````````````````````````````
 | 
				
			||||||
 | 
					
 | 
				
			||||||
file
 | 
					file
 | 
				
			||||||
    В контексте `targets` указывает директорию для сохранения бэкапов. В массиве `targets` обязательно должен быть хотя бы один поинт со схемой `file`. Этот поинт будет использован как основной и сохранён в переменные ``__main_target`` (содержит URI) и ``__main_target_path`` (содержит компонент URI path). Если в массиве присутствует несколько поинтов со схемой `file`, то в качестве основного будет выбран первый по порядку поинт. Все бэкапы первоначально будут сохраняться в директорию ``__main_target_path`` и затем копироваться в другой таргет с помощью соответствующего обработчика. В случае копировани из одной директории в другую используется утилита ``cp``\(1).
 | 
					    В контексте `targets` указывает директорию для сохранения бэкапов. В
 | 
				
			||||||
 | 
					    массиве `targets` обязательно должен быть хотя бы один поинт со схемой
 | 
				
			||||||
 | 
					    `file`. Этот поинт будет использован как основной и сохранён в переменные
 | 
				
			||||||
 | 
					    ``__main_target`` (содержит URI) и ``__main_target_path`` (содержит
 | 
				
			||||||
 | 
					    компонент URI path). Если в массиве присутствует несколько поинтов со
 | 
				
			||||||
 | 
					    схемой `file`, то в качестве основного будет выбран первый по порядку
 | 
				
			||||||
 | 
					    поинт. Все бэкапы первоначально будут сохраняться в директорию
 | 
				
			||||||
 | 
					    ``__main_target_path`` и затем копироваться в другой таргет с помощью
 | 
				
			||||||
 | 
					    соответствующего обработчика. В случае копировани из одной директории в
 | 
				
			||||||
 | 
					    другую используется утилита ``cp``\(1).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Избегайте указания в одном сценарии таргетов, которые ведут одновременно на примонтированный к локальной машине сетевой диск и другое удалённое хранилище. В таком случае архивы будут создаваться на сетевом диске и далее снова копироваться по сети, что будет очень медленно.
 | 
					    Избегайте указания в одном сценарии таргетов, которые ведут одновременно на
 | 
				
			||||||
 | 
					    примонтированный к локальной машине сетевой диск и другое удалённое
 | 
				
			||||||
 | 
					    хранилище. В таком случае архивы будут создаваться на сетевом диске и далее
 | 
				
			||||||
 | 
					    снова копироваться по сети, что будет очень медленно.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    См. также ``handler::cp``
 | 
					    См. также ``handler::cp``
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -162,24 +208,48 @@ dav, davs
 | 
				
			|||||||
Создание резервных копий
 | 
					Создание резервных копий
 | 
				
			||||||
------------------------
 | 
					------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
boring-backup предполагает, что для всех резервных копий необходимо создавать архивы. Поэтому вам нужно следить за тем, чтобы в локальном хранилище всегда хватало дискового пространства для создания новых архивов. boring-backup также не удаляет старые архивы и вам также надо позаботиться об удалении устаревших резервных копий. Изменить это поведение можно с помощью пользовательских функций в сценариях. В этом разделе речь пойдёт о поведении, которое установлено по умолчанию. См. функции ``builtin_backup``, ``process_sources``, ``process_targets``.
 | 
					boring-backup предполагает, что для всех резервных копий необходимо создавать
 | 
				
			||||||
 | 
					архивы. Поэтому вам нужно следить за тем, чтобы в локальном хранилище всегда
 | 
				
			||||||
 | 
					хватало дискового пространства для создания новых архивов. boring-backup также
 | 
				
			||||||
 | 
					не удаляет старые архивы и вам также надо позаботиться об удалении устаревших
 | 
				
			||||||
 | 
					резервных копий. Изменить это поведение можно с помощью пользовательских
 | 
				
			||||||
 | 
					функций в сценариях. В этом разделе речь пойдёт о поведении, которое
 | 
				
			||||||
 | 
					установлено по умолчанию. См. функции ``builtin_backup``, ``process_sources``,
 | 
				
			||||||
 | 
					``process_targets``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Базовая концепция строится на том, что существует несколько источников и несколько точек назначения. Создаётся резервная копия источника и копируется в точку назначения.
 | 
					Базовая концепция строится на том, что существует несколько источников и
 | 
				
			||||||
 | 
					несколько точек назначения. Создаётся резервная копия источника и копируется в
 | 
				
			||||||
 | 
					точку назначения.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Для всех источников в сценарии выполняется локальная резервная копия. После этого локальная копия переносится в удалённые точки назначения, если они заданы. Копирование локального бэкапа будет осуществлёно столько раз, сколько точек назначения задано. В каждом сценарии обязательно должен быть задан хотя бы один источник и одна точка назначения. При этом в списке точек назначения обязательно должна присутствовать точка со схемой `file`. Именно в неё будут сохранены архивы.
 | 
					Для всех источников в сценарии выполняется локальная резервная копия. После
 | 
				
			||||||
 | 
					этого локальная копия переносится в удалённые точки назначения, если они
 | 
				
			||||||
 | 
					заданы. Копирование локального бэкапа будет осуществлёно столько раз, сколько
 | 
				
			||||||
 | 
					точек назначения задано. В каждом сценарии обязательно должен быть задан хотя
 | 
				
			||||||
 | 
					бы один источник и одна точка назначения. При этом в списке точек назначения
 | 
				
			||||||
 | 
					обязательно должна присутствовать точка со схемой `file`. Именно в неё будут
 | 
				
			||||||
 | 
					сохранены архивы.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Например, имеется следующий сценарий::
 | 
					Например, имеется следующий сценарий::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    sources=(
 | 
					    sources=(
 | 
				
			||||||
        'mysql://wordpress:1jobrRRjtLYs@localhost/wordpress'
 | 
					        mysql://wordpress:1jobrRRjtLYs@localhost/wordpress
 | 
				
			||||||
        'file:///var/www/wordpress'
 | 
					        file:///var/www/wordpress
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    targets=(
 | 
					    targets=(
 | 
				
			||||||
        'file:///var/backup'
 | 
					        file:///var/backup
 | 
				
			||||||
        'ftp://jhon:%24t%D0%AFo%7C%5C%7C6@[fe80::5054:ff:fe24:382]:2021/backups/'
 | 
					        ftp://jhon:%24t%D0%AFo%7C%5C%7C6@[fe80::5054:ff:fe24:382]:2021/backups/
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Здесь будут созданы архивы файлов и базы данных и сохранены в локальную директорию /var/backup. Затем эти файлы будут переданы по протоколу FTP на сервер fe80::5054:ff:fe24:382 в директорию /backups. Файлы из директории /var/backup не будут удалены или перемещены. Если добавить дополнительную точку назначения, то файлы из /var/backup будут скопированы и туда. Обратите внимание, что boring-backup не выполняет повторного создания архивов для каждой точки назначения — архивы создаются один раз и далее распространяются по всем указанным назначениям. Если в массиве `targets` имеется несколько точек назначения со схемой `file`, то архивы будут сохранены в первую по порядку точку, а затем скопированы оттуда в остальные.
 | 
					Здесь будут созданы архивы файлов и базы данных и сохранены в локальную
 | 
				
			||||||
 | 
					директорию /var/backup. Затем эти файлы будут переданы по протоколу FTP на
 | 
				
			||||||
 | 
					сервер fe80::5054:ff:fe24:382 в директорию /backups. Файлы из директории
 | 
				
			||||||
 | 
					/var/backup не будут удалены или перемещены. Если добавить дополнительную точку
 | 
				
			||||||
 | 
					назначения, то файлы из /var/backup будут скопированы и туда. Обратите
 | 
				
			||||||
 | 
					внимание, что boring-backup не выполняет повторного создания архивов для каждой
 | 
				
			||||||
 | 
					точки назначения — архивы создаются один раз и далее распространяются по всем
 | 
				
			||||||
 | 
					указанным назначениям. Если в массиве `targets` имеется несколько точек
 | 
				
			||||||
 | 
					назначения со схемой `file`, то архивы будут сохранены в первую по порядку
 | 
				
			||||||
 | 
					точку, а затем скопированы оттуда в остальные.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Резервное копирование на удалённое хранилище
 | 
					Резервное копирование на удалённое хранилище
 | 
				
			||||||
--------------------------------------------
 | 
					--------------------------------------------
 | 
				
			||||||
@@ -204,12 +274,21 @@ WebDAV
 | 
				
			|||||||
Переменные
 | 
					Переменные
 | 
				
			||||||
----------
 | 
					----------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``boring-backup`` условно разделяет переменные на "внутренние" ("защищённые") и "обычные". К "защищённым" переменным относятся все перемеменные, имена которых начинаются с двух знаков подчёркивания, например: ``__main_target``. Все остальные переменные считаются "обычными".
 | 
					``boring-backup`` условно разделяет переменные на "внутренние" ("защищённые") и
 | 
				
			||||||
 | 
					"обычные". К "защищённым" переменным относятся все перемеменные, имена которых
 | 
				
			||||||
 | 
					начинаются с двух знаков подчёркивания, например: ``__main_target``. Все
 | 
				
			||||||
 | 
					остальные переменные считаются "обычными".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Обычные переменные могут быть перезаписаны в пользовательском скрипте. Защищённые переменные технически ничем от них не отличаются, однако не нужно переопределять такие переменные в пользовательском скрипте, так как это может привести к неожиданным ошибкам во время выполнения скрипта. Точно также очень внимательно нужно относится к перезаписи обычных переменных — в обоих случаях есть риск что-то поломать.
 | 
					Обычные переменные могут быть перезаписаны в пользовательском скрипте.
 | 
				
			||||||
 | 
					Защищённые переменные технически ничем от них не отличаются, однако не нужно
 | 
				
			||||||
 | 
					переопределять такие переменные в пользовательском скрипте, так как это может
 | 
				
			||||||
 | 
					привести к неожиданным ошибкам во время выполнения скрипта. Точно также очень
 | 
				
			||||||
 | 
					внимательно нужно относится к перезаписи обычных переменных — в обоих случаях
 | 
				
			||||||
 | 
					есть риск что-то поломать.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``backups``
 | 
					``backups``
 | 
				
			||||||
    Массив со списком созданных бэкапов. Содержит абсолютные пути к файлам. Заполняется функциями-обработчиками `sources`.
 | 
					    Массив со списком созданных бэкапов. Содержит абсолютные пути к файлам. 
 | 
				
			||||||
 | 
					    Заполняется функциями-обработчиками `sources`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    | Тип: массив
 | 
					    | Тип: массив
 | 
				
			||||||
    | Умолчание: ()
 | 
					    | Умолчание: ()
 | 
				
			||||||
@@ -233,7 +312,8 @@ WebDAV
 | 
				
			|||||||
    | Умолчание: имя_скрипта\_
 | 
					    | Умолчание: имя_скрипта\_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``name``
 | 
					``name``
 | 
				
			||||||
    Соответствует имени архивируемой директории/файла полученного из `path` с помощью утилиты ``basename``\(1).
 | 
					    Соответствует имени архивируемой директории/файла полученного из `path` с
 | 
				
			||||||
 | 
					    помощью утилиты ``basename``\(1).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    | Тип: строка
 | 
					    | Тип: строка
 | 
				
			||||||
    | Умолчание: нет
 | 
					    | Умолчание: нет
 | 
				
			||||||
@@ -245,8 +325,9 @@ WebDAV
 | 
				
			|||||||
    | Умолчание: _%Y%m%d
 | 
					    | Умолчание: _%Y%m%d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``name_suffix``
 | 
					``name_suffix``
 | 
				
			||||||
    Суффикс, добавляемый к имени файла перед расширением. Строка интерпретируется утилитой ``date``.
 | 
					    Суффикс, добавляемый к имени файла перед расширением. Строка
 | 
				
			||||||
    
 | 
					    интерпретируется утилитой ``date``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    | Тип: строка
 | 
					    | Тип: строка
 | 
				
			||||||
    | Умолчание: -%H%M
 | 
					    | Умолчание: -%H%M
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -269,8 +350,12 @@ WebDAV
 | 
				
			|||||||
    | Умолчание: нет
 | 
					    | Умолчание: нет
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``compression``
 | 
					``compression``
 | 
				
			||||||
    В контексте ``tar`` работа этой фичи базируется на опции ``tar`` ``--auto-compress``. Переменная может принимать значения, в соответствии с табилцей ниже. Если переменная имеет значение, отличное от перечисленныых, то будет использован ``gzip``. Если переменная пуста или не задана, то сжатие будет отключено.
 | 
					    В контексте ``tar`` работа этой фичи базируется на опции ``tar``
 | 
				
			||||||
    
 | 
					    ``--auto-compress``. Переменная может принимать значения, в соответствии с
 | 
				
			||||||
 | 
					    табилцей ниже. Если переменная имеет значение, отличное от перечисленныых,
 | 
				
			||||||
 | 
					    то будет использован ``gzip``. Если переменная пуста или не задана, то
 | 
				
			||||||
 | 
					    сжатие будет отключено.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    | Тип: строка
 | 
					    | Тип: строка
 | 
				
			||||||
    | Умолчание: нет
 | 
					    | Умолчание: нет
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -299,26 +384,35 @@ WebDAV
 | 
				
			|||||||
-------
 | 
					-------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``backup``
 | 
					``backup``
 | 
				
			||||||
    Пользовательская функция резервного копирования. Если она задана в скрипте, то вызывается вместо ``builtin_backup``.
 | 
					    Пользовательская функция резервного копирования. Если она задана в скрипте,
 | 
				
			||||||
 | 
					    то вызывается вместо ``builtin_backup``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``builtin_backup``
 | 
					``builtin_backup``
 | 
				
			||||||
    Встроенная функция, запускает резервное копирвоание. Вызывает функции ``process_source`` и ``process_target``.
 | 
					    Встроенная функция, запускает резервное копирвоание. Вызывает функции
 | 
				
			||||||
 | 
					    ``process_source`` и ``process_target``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``err [-eao] MESSAGE``
 | 
					``err [-eao] MESSAGE``
 | 
				
			||||||
    Печатает сообщение об ошибке MESSAGE на экран и в лог и выполняет обработку ошибок.
 | 
					    Печатает сообщение об ошибке MESSAGE на экран и в лог и выполняет обработку
 | 
				
			||||||
 | 
					    ошибок.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    -e  Выйти из скрипта с кодом выхода 1.
 | 
					    -e  Выйти из скрипта с кодом выхода 1.
 | 
				
			||||||
    -a  Добавить сообщение MESSAGE в массив ``errors``.
 | 
					    -a  Добавить сообщение MESSAGE в массив ``errors``.
 | 
				
			||||||
    -o  Вызвать функцию ``on_error``.
 | 
					    -o  Вызвать функцию ``on_error``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``finalise``
 | 
					``finalise``
 | 
				
			||||||
    Пользовательская функция. Если задана, то запускается после функции ``backup`` или ``builtin_backup()``.
 | 
					    Пользовательская функция. Если задана, то запускается после функции
 | 
				
			||||||
 | 
					    ``backup`` или ``builtin_backup()``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``gen_backup_name FILE_EXT``
 | 
					``gen_backup_name FILE_EXT``
 | 
				
			||||||
    Печатает полученное имя файла в STDOUT. Имя является выводом команды ``date`` и строки ``${prefix}${name}${date_fmt}${name_ext}``. См. переменные ``name_prefix``, ``name``, ``name_date_fmt``, ``name_ext``.
 | 
					    Печатает полученное имя файла в STDOUT. Имя является выводом команды
 | 
				
			||||||
 | 
					    ``date`` и строки ``${prefix}${name}${date_fmt}${name_ext}``.
 | 
				
			||||||
 | 
					    См. переменные ``name_prefix``, ``name``, ``name_date_fmt``, ``name_ext``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``try COMMAND``
 | 
					``try COMMAND``
 | 
				
			||||||
    Функция выполняет команду COMMAND и в случае ненулевого кода выхода вызывает ``err()`` с ключами ``-eao``. Ошибка при выполнении COMMAND приведёт к вызову функции ``on_error``. Рекомендуется для использования в качестве обёртки для команд правильное выполнение которых критично.
 | 
					    Функция выполняет команду COMMAND и в случае ненулевого кода выхода
 | 
				
			||||||
 | 
					    вызывает ``err()`` с ключами ``-eao``. Ошибка при выполнении COMMAND
 | 
				
			||||||
 | 
					    приведёт к вызову функции ``on_error``. Рекомендуется для использования в
 | 
				
			||||||
 | 
					    качестве обёртки для команд правильное выполнение которых критично.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``handler::tar URI``
 | 
					``handler::tar URI``
 | 
				
			||||||
    Архивация файлов с помощью ``tar``.
 | 
					    Архивация файлов с помощью ``tar``.
 | 
				
			||||||
@@ -366,16 +460,22 @@ WebDAV
 | 
				
			|||||||
    Проверяет задана ли функция FUNCTION.
 | 
					    Проверяет задана ли функция FUNCTION.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``log [-p] MESSAGE``
 | 
					``log [-p] MESSAGE``
 | 
				
			||||||
    Печатает лог в файл ``__log_file`` (лог задаётся опцией --log-file) и на экран, если указана опция ``-p``. Формат даты в логе можно изменить с помощью переменной ``log_date_fmt``.
 | 
					    Печатает лог в файл ``__log_file`` (лог задаётся опцией --log-file) и на
 | 
				
			||||||
 | 
					    экран, если указана опция ``-p``. Формат даты в логе можно изменить с
 | 
				
			||||||
 | 
					    помощью переменной ``log_date_fmt``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``on_error``
 | 
					``on_error``
 | 
				
			||||||
    Пользовательская функция для обработки ошибок. Если задана, то запускается при обработке ошибки в функции ``err`` с опцией ``-o``.
 | 
					    Пользовательская функция для обработки ошибок. Если задана, то запускается
 | 
				
			||||||
 | 
					    при обработке ошибки в функции ``err`` с опцией ``-o``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``parse_uri URI``
 | 
					``parse_uri URI``
 | 
				
			||||||
    Парсер URI. Задаёт переменные ``scheme``, ``username``, ``password``, ``hostname``, ``port``, ``path``, ``query``, ``fragment`` и выполняет декодинг пароля, если он закодирован в percent code.
 | 
					    Парсер URI. Задаёт переменные ``scheme``, ``username``, ``password``,
 | 
				
			||||||
 | 
					    ``hostname``, ``port``, ``path``, ``query``, ``fragment`` и выполняет
 | 
				
			||||||
 | 
					    декодинг пароля, если он закодирован в percent code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``prepare``
 | 
					``prepare``
 | 
				
			||||||
    Пользовательская функция. Если задана, то запускается до функции ``backup`` или ``builtin_backup``.
 | 
					    Пользовательская функция. Если задана, то запускается до функции ``backup``
 | 
				
			||||||
 | 
					    или ``builtin_backup``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``process_source URI``
 | 
					``process_source URI``
 | 
				
			||||||
    На основе схемы запускает соответсвующую функцию-обработчик.
 | 
					    На основе схемы запускает соответсвующую функцию-обработчик.
 | 
				
			||||||
@@ -384,7 +484,11 @@ WebDAV
 | 
				
			|||||||
    На основе схемы запускает соответсвующую функцию-обработчик.
 | 
					    На основе схемы запускает соответсвующую функцию-обработчик.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``source_script FILE``
 | 
					``source_script FILE``
 | 
				
			||||||
    Выполняет ``source`` пользовательского скрипта и проверяет его корректность. Проверяется синтаксис Bash, наличие непустых массивов `sources` и `targets`, наличие поинта `file` в `targets`. Во вспомогательной функции ``validate_targets`` задаются значения переменных ``__main_target`` и ``__main_target_path``.
 | 
					    Выполняет ``source`` пользовательского скрипта и проверяет его
 | 
				
			||||||
 | 
					    корректность. Проверяется синтаксис Bash, наличие непустых массивов
 | 
				
			||||||
 | 
					    `sources` и `targets`, наличие поинта `file` в `targets`. Во
 | 
				
			||||||
 | 
					    вспомогательной функции ``validate_targets`` задаются значения переменных
 | 
				
			||||||
 | 
					    ``__main_target`` и ``__main_target_path``.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Использование функций в сценариях
 | 
					Использование функций в сценариях
 | 
				
			||||||
---------------------------------
 | 
					---------------------------------
 | 
				
			||||||
@@ -399,6 +503,7 @@ WebDAV
 | 
				
			|||||||
См. также
 | 
					См. также
 | 
				
			||||||
---------
 | 
					---------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
``bash``\(1), ``tar``\(1), ``cp``\(1), ``date``\(1), ``mysqldump``\(1), ``pg_dump``\(1)
 | 
					``bash``\(1), ``tar``\(1), ``cp``\(1), ``date``\(1), ``mysqldump``\(1),
 | 
				
			||||||
 | 
					``pg_dump``\(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RFC 3986 https://datatracker.ietf.org/doc/html/rfc3986
 | 
					RFC 3986 https://datatracker.ietf.org/doc/html/rfc3986
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user