feat: add deb, pkgbuild, completion, code improvements

This commit is contained in:
ge 2022-10-09 03:29:35 +03:00
parent 8999940443
commit ce07669a6e
11 changed files with 167 additions and 13 deletions

3
.gitignore vendored
View File

@ -1,5 +1,4 @@
*.txt *.txt
dist/ dist/
src/backups/ debian/
src/clean
NOTE.todo NOTE.todo

View File

@ -1,3 +1,5 @@
boring_backup (0.1.0) testing; urgency=medium
CHANGELOG CHANGELOG
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
@ -6,3 +8,5 @@ CHANGELOG
0.1.0 0.1.0
Initial release. Initial release.
-- ge Sun, 09 Oct 2022 02:17:10 +0300

View File

@ -5,7 +5,7 @@ BUILD_DIR := ./dist
.PHONY: help tests manpages install uninstall fixpath .PHONY: help tests manpages install uninstall fixpath
all: manpages all: help
help: help:
@echo 'Usage: make TARGET' @echo 'Usage: make TARGET'
@ -55,7 +55,7 @@ html: manpages
> $(BUILD_DIR)/share/doc/boring_backup/boring_backup.1.html 2>/dev/null > $(BUILD_DIR)/share/doc/boring_backup/boring_backup.1.html 2>/dev/null
rm -v grohtml-*.png rm -v grohtml-*.png
install: manpages install: html
@echo prefix: $$prefix @echo prefix: $$prefix
install -Dm755 $(SRC_DIR)/boring_backup $$prefix/bin/boring_backup install -Dm755 $(SRC_DIR)/boring_backup $$prefix/bin/boring_backup
install -Dm644 $(SRC_DIR)/lib/lib.sh $$prefix/share/boring_backup/lib.sh install -Dm644 $(SRC_DIR)/lib/lib.sh $$prefix/share/boring_backup/lib.sh
@ -71,7 +71,11 @@ install: manpages
sed -e "s%LIBRARY=\"\$${LIBRARY:-.\/lib}\"%LIBRARY=\"\$${LIBRARY:-$$prefix\/share\/boring_backup}\"%" \ sed -e "s%LIBRARY=\"\$${LIBRARY:-.\/lib}\"%LIBRARY=\"\$${LIBRARY:-$$prefix\/share\/boring_backup}\"%" \
-i $$prefix/share/boring_backup/lib.sh \ -i $$prefix/share/boring_backup/lib.sh \
-i $$prefix/bin/boring_backup -i $$prefix/bin/boring_backup
sed -e "s%log_file=\"\$${log_file:-.\/log.txt}\"%log_file=\"\$${log_file:-\/var\/log\/boring_backup.log}\"%g" \
-i $$prefix/bin/boring_backup
install -Dm664 $(SRC_DIR)/completion $$prefix/share/bash-completion/completions/boring_backup
install -Dm664 $(BUILD_DIR)/share/man/ru/man1/boring_backup.1.gz $$prefix/share/man/ru/man1/boring_backup.1.gz install -Dm664 $(BUILD_DIR)/share/man/ru/man1/boring_backup.1.gz $$prefix/share/man/ru/man1/boring_backup.1.gz
install -Dm644 $(BUILD_DIR)/share/doc/boring_backup/boring_backup.1.html $$prefix/share/doc/boring_backup/boring_backup.1.html
uninstall: uninstall:
@echo prefix: $$prefix @echo prefix: $$prefix
@ -88,11 +92,24 @@ uninstall:
rm $$prefix/share/boring_backup/handlers/targets/s3cmd.sh rm $$prefix/share/boring_backup/handlers/targets/s3cmd.sh
rm -rv $$prefix/share/boring_backup rm -rv $$prefix/share/boring_backup
rm $$prefix/share/man/ru/man1/boring_backup.1.gz rm $$prefix/share/man/ru/man1/boring_backup.1.gz
rm $$prefix/share/doc/boring_backup/boring_backup.1.html
rm $$prefix/share/bash-completion/completions/boring_backup
fixpath: fixpath:
# Set boring_backup library path # Set boring_backup library path
@echo prefix: $$prefix @echo prefix: $$prefix
@echo path: $$path @echo path: $$path
sed -e "s%LIBRARY=\"\$${LIBRARY:-.\/lib}\"%LIBRARY=\"\$${LIBRARY:-$$path}\"%" \ sed -e "s%LIBRARY=\"\$${LIBRARY:-$$prefix\/share\/boring_backup}\"%LIBRARY=\"\$${LIBRARY:-$$path}\"%" \
-i $$prefix/share/boring_backup/lib.sh \ -i $$prefix/share/boring_backup/lib.sh \
-i $$prefix/bin/boring_backup -i $$prefix/bin/boring_backup
deb:
test -d $(BUILD_DIR) && rm -rf $(BUILD_DIR) || true
make prefix=$(BUILD_DIR)/usr install
make prefix=$(BUILD_DIR)/usr path=/usr/share/boring_backup fixpath
install -Dm644 control $(BUILD_DIR)/DEBIAN/control
install -Dm644 copyright $(BUILD_DIR)/DEBIAN/copyright
install -Dm644 CHANGELOG $(BUILD_DIR)/DEBIAN/changelog
rm -rfv $(BUILD_DIR)/share
mkdir -p debian
version=$$(src/boring_backup -V) && dpkg-deb --build $(BUILD_DIR) debian/boring-backup_$$version.deb

25
PKGBUILD Normal file
View File

@ -0,0 +1,25 @@
pkgname=boring-backup
pkgver=0.1.0
pkgrel=1
pkgdesc="Files and databases backup"
arch=(any)
url=https://git.nxhs.cloud/ge/boring_backup
license=(GPL3)
depends=(bash coreutils)
makedepends=(git make )
provides=('boring_backup')
conflicts=('boring_backup')
source=('git+https://git.nxhs.cloud/ge/boring_backup')
sha256sums=(SKIP)
build() {
cd "$srcdir/$pkgname"
make prefix=dist/usr install
make prefix=dist/usr path=/usr/share/boring_backup fixpath
}
package() {
install -Dm755 dist/usr/bin/boring_backup $pkgdir/usr/bin/boring_backup
install -Dm644 dist/usr/share/man/ru/man1/boring_backup.1.gz $pkgdir/usr/share/man/ru/man1/boring_backup.1.gz
install -Dm644 dist/usr/share/bash-completion/completions/boring_backup $pkgdir/usr/share/bash-completion/completions/boring_backup
install -Dm644 dist/usr/share/doc/boring_backup/boring_backup.1.html $pkgdir/usr/share/doc/boring_backup/boring_backup.1.html
install -Dm644 dist/usr/share/boring_backup/* $pkgdir/usr/share/boring_backup
}

9
control Normal file
View File

@ -0,0 +1,9 @@
Package: boring-backup
Version: 0.1.0
Section: admin
Priority: optional
Maintainer: ge
Homepage: https://nixhacks.net/boring_backup/
Architecture: all
Depends: bash, coreutils
Description: Backup files and databases.

38
copyright Normal file
View File

@ -0,0 +1,38 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: boring-backup
Upstream-Contact: https://nixhacks.net/boring_backup
Source: https://nixhacks.net/boring_backup
Files: *
Copyright: 2022 ge
License: GPL-3.0+
Files: debian/*
Copyright: 2022 ge
License: GPL-3.0+
License: GPL-3.0+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
.
On Debian systems, the complete text of the GNU General
Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.
# Please avoid picking licenses with terms that are more restrictive than the
# packaged work, as it may make Debian's contributions unacceptable upstream.
#
# If you need, there are some extra license texts available in two places:
# /usr/share/debhelper/dh_make/licenses/
# /usr/share/common-licenses/

View File

@ -131,11 +131,11 @@ postgres
См. также ``src_pg_dump`` См. также ``src_pg_dump``
sqlite [НЕ РЕАЛИЗОВАН] sqlite
Схема для баз данных SQLite. Мало отличается от `file`, добавлена для Схема для баз данных SQLite. То же самое что и `file`, добавлена для
наглядного обозначения, что ресурсом является БД SQLite, а не иной файл. наглядного обозначения, что ресурсом является БД SQLite, а не иной файл.
См. также ``src_sqlite`` См. также ``src_tar``
s3 s3
Схема Simple Storage Service (S3). Пример использования:: Схема Simple Storage Service (S3). Пример использования::
@ -247,12 +247,25 @@ s3
tzst zstd .zst .tzst tzst zstd .zst .tzst
==================== ========== =================== ===================== ==================== ========== =================== =====================
``log_file``
| Тип: строка
| Умолчание: /var/log/boring_backup.log
Лог файл.
``log_date_format`` ``log_date_format``
| Тип: строка | Тип: строка
| Умолчание: %d/%b/%Y:%H:%M:%S %z | Умолчание: %d/%b/%Y:%H:%M:%S %z
Формат даты в логе. См. ``date``. См. **КОНФИГУРИРОВАНИЕ**. Формат даты в логе. См. ``date``. См. **КОНФИГУРИРОВАНИЕ**.
``make_target_dir``
| Тип: булев
| Умолчение: нет
Эта переменная используется как флаг разрешающий создание директорий из
`targets` с помощью **mkdir -p**.
``name`` ``name``
| Тип: строка | Тип: строка
| Умолчание: нет | Умолчание: нет
@ -419,7 +432,7 @@ s3
Функция записывает сообщения в лог-файл. Лог-файл может быть задан через Функция записывает сообщения в лог-файл. Лог-файл может быть задан через
опцию **--log-file**, имя этого файла будет сохранено в переменную опцию **--log-file**, имя этого файла будет сохранено в переменную
$__log_file. **log** перед записью в файл удаляет из текста $log_file. **log** перед записью в файл удаляет из текста
escape-последовательности ANSI. escape-последовательности ANSI.
Формат лога '[%s] %s\\n', где первое вхождение %s заменяется на дату, а Формат лога '[%s] %s\\n', где первое вхождение %s заменяется на дату, а
@ -574,7 +587,6 @@ s3
удалением локальных бэкапов после загрузки:: удалением локальных бэкапов после загрузки::
compression=xz compression=xz
s3cmd_config=~/.s3cfg
sources=( sources=(
/var/www/www-data/example.com /var/www/www-data/example.com
mysql://example_user:Smk3mVH2@localhost/example_db mysql://example_user:Smk3mVH2@localhost/example_db
@ -586,7 +598,7 @@ s3
finalise() { finalise() {
log -p "\tClean up local backups" log -p "\tClean up local backups"
log -p "\tFiles to delete: ${backups[@]}" log -p "\tFiles to delete: ${backups[@]}"
rm -- "${backups[@]}" rm -rfv -- "${backups[@]}"
log -p "\tLocal backups deleted" log -p "\tLocal backups deleted"
} }

11
src/completely.yaml Normal file
View File

@ -0,0 +1,11 @@
# See https://github.com/DannyBen/completely
boring_backup:
- --help
- --version
- --verbose
- --config
- --log-file
- --pid-file
- --use-syslog
- <file>

39
src/completion Normal file
View File

@ -0,0 +1,39 @@
# boring_backup completion -*- shell-script -*-
# This bash completions script was generated by
# completely (https://github.com/dannyben/completely)
# Modifying it manually is not recommended
_boring_backup_completions_filter() {
local words="$1"
local cur=${COMP_WORDS[COMP_CWORD]}
local result=()
if [[ "${cur:0:1}" == "-" ]]; then
echo "$words"
else
for word in $words; do
[[ "${word:0:1}" != "-" ]] && result+=("$word")
done
echo "${result[*]}"
fi
}
_boring_backup_completions() {
local cur=${COMP_WORDS[COMP_CWORD]}
local compwords=("${COMP_WORDS[@]:1:$COMP_CWORD-1}")
local compline="${compwords[*]}"
case "$compline" in
*)
while read -r; do COMPREPLY+=( "$REPLY" ); done < <( compgen -A file -W "$(_boring_backup_completions_filter "--help --version --verbose --config --log-file --pid-file --use-syslog")" -- "$cur" )
;;
esac
} &&
complete -F _boring_backup_completions boring_backup
# ex: filetype=sh

View File

@ -35,7 +35,7 @@ process_source() {
# ^^^ hide password from output ^^^ # ^^^ hide password from output ^^^
case "$scheme" in case "$scheme" in
file) handler='src_tar';; file|sqlite) handler='src_tar';;
mysql|mariadb) handler='src_mysqldump';; mysql|mariadb) handler='src_mysqldump';;
postgres) handler='src_pg_dump';; postgres) handler='src_pg_dump';;
sqlite) handler='src_sqlite';; sqlite) handler='src_sqlite';;

View File

@ -36,7 +36,7 @@ src_tar() {
parse_uri "$uri" parse_uri "$uri"
# shellcheck disable=SC2154 # shellcheck disable=SC2154
if [[ "$scheme" != 'file' ]]; then if [[ ! "$scheme" =~ ^(file|sqlite)$ ]]; then
log -p "Error: Wrong URI scheme: $scheme" >&2; exit 1 log -p "Error: Wrong URI scheme: $scheme" >&2; exit 1
fi fi