BlueInGreen68 / pkgsync

Простой скрипт для синхронизации установленных пакетов между машинами на базе Arch Linux.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Форк pkgsync. Описание работы скрипта в данном README.md является субъективным и не относится к оригинальному проекту.

pkgsync

Простой скрипт для синхронизации установленных пакетов между машинами на базе Arch Linux.

Настройка

Конфигурационный файл

Конфигурационный файл, по задумке, содержит только пути до основных файлов в виде bash-переменных EXCLUSION_LIST=/путь/до/EXLUSION_LIST, основные переменные это:

В целом, даже если конфигурационного файла и не будет существовать, все переменные путей до основных файлов в скрипте pkgsync будут установлены по умолчанию:

EXCLUSION_LIST="${EXCLUSION_LIST:-/etc/pkgsync/pkg_exclude.list}"
BLACKLIST_LIST="${BLACKLIST_LIST:-/etc/pkgsync/pkg_blacklist.list}"
REMOVE_LIST="${REMOVE_LIST:-/etc/pkgsync/pkg_remove.list}"
INSTALL_LIST="${INSTALL_LIST:-/etc/pkgsync/pkg_install.list}"
PRESTART_SCRIPT="${PRESTART_SCRIPT:-/etc/pkgsync/pkg_prestart.sh}"
FINISH_SCRIPT="${FINISH_SCRIPT:-/etc/pkgsync/pkg_finish.sh}"
TMP_DIR="${TMP_DIR:-/tmp}"

По умолчанию конфигурационный файл должен находиться в /etc/default/pkgsync, но путь можно поменять путём изменения 5 строчки кода файла pkgsync:

#!/bin/bash

set -e

[[ -e /ваш/путь/до_конфигурационного_файла ]] && . /ваш/путь/до_конфигурационного_файла

Пример оригинального конфигурационного файла.

Все списки содержащие пакеты могут иметь комментарии начинающиеся с #, а также могут быть не сортированы

EXCLUSION LIST

Данный файл содержит список пакетов текущей системы, которые нужно исключить из общего списка INSTALL.

Например:

# /etc/pkgsync/pkg_exclude.list

## Данные пакеты нужны только текущей машине, например пакеты ниже, в большинстве случаев, нужны на ноутбуках, а на стационарном компьютере нет 
blueman
bluez
bluez-utils

Данный список будет на разных машинах соответственно разным, учитывайте это.

BLACKLIST LIST

Данный файл содержит список пакетов, которые нельзя ни удалять ни устанавливать на текущей системе, именно этим он отличается от списка EXCLUDE.

Это означает, что даже если, например, пакет neovim будет находиться в списке на установку или удаление, он по итогу не установится или не удалится (если будет находиться на текущей системе).

REMOVE LIST

Данный файл содержит список пакетов, которые будут удалены из текущей системы. Данный список должен обновляться постоянно из сессии к сессии, он не должен хранить постоянный список пакетов на удаление, как например INSTALL, а также он не должен иметь с ним совпадений, потому что в таком случае пакет не установится и не удалится (для подобного поведения существует BLACKLIST).

INSTALL LIST

Данный файл содержит общий список пакетов, которые должны быть установлены на всех машинах. Список должен постоянно обновляться из сессии к сессии, список можно расширить через pkgsync, но не сократить, а также Вы должны позаботиться о синхронизации этого списка между всеми Вашими машинами.

PRESTART SCRIPT

Ваш cкрипт, который запускается перед обновлением, удалением пакетов. Скрипт должен быть исполняемым chmod +x prestart.sh и выполнятся без ошибок.

FINISH SCRIPT

Ваш скрипт, который запускается после обновления, удаления пакетов. Скрипт должен быть исполняемым chmod +x finish.sh и выполнятся без ошибок.

TMP DIR

Переменная, которая содержит путь до директории временных файлов скрипта pkgsync, временные файлы после выполнения скрипта удаляются.

Как работает Ключевой момент работы скрипта основан на команде comm. Поочерёдно сравниваются разные списки с наименованием пакетов и от их вывода будет зависить итоговый результат. Подробнее о аргументах команды comm использованных в скрипте pkgsync. ## Алгоритм работы Пройдёмся по основым 6 командам, где происходит всё.

Получение списка пакетов текущей системы без пакетов из списка exclude

pacman -Qq | sort | comm -23 - "$TMP_DIR/pkg_exclude.list" > "$TMP_DIR/mypkgs_with_exclusions.txt"

На выходе получаем mypkgs_with_exclusions.txt.

Используется далее для:

Получение списка пакетов текущей системы без пакетов из списка exclude и remove

comm -23 "$TMP_DIR/mypkgs_with_exclusions.txt" "$TMP_DIR/pkg_remove.list" > "$TMP_DIR/mypkgs_with_exclusions_without_remove.txt"

На выходе получаем mypkgs_with_exlusions_without_remove.txt.

Используется далее для:

Получение списка пакетов текущей системы на удаление

comm -12 "$TMP_DIR/mypkgs_with_exclusions.txt" "$TMP_DIR/pkg_remove.list" | comm -23 - "$TMP_DIR/pkg_blacklist.list" > "$TMP_DIR/pkg_toremove.list"

На выходе получаем pkg_toremove.list. Данный файл содержит список пакетов, которые будут удалены с текущей системы.

Получение списка пакетов установленных на текущей системе

sort -u "$TMP_DIR/mypkgs_with_exclusions_without_remove.txt" "$TMP_DIR/pkg_install.list" | comm -23 - "$TMP_DIR/pkg_remove.list" > "$TMP_DIR/pkg_installed.list"

На выходе получаем pkg_installed.list. Данный файл содержит список пакетов, которые будут установлены, а также уже действительно установленных пакетов текущей системы.

Используется далее для:

Получение списка пакетов которые будут установлены на текущей системе

comm -13 "$TMP_DIR/mypkgs_with_exclusions_without_remove.txt" "$TMP_DIR/pkg_installed.list" | comm -23 - "$TMP_DIR/pkg_blacklist.list" > "$TMP_DIR/pkg_toinstall.list"

На выходе получаем pkg_toinstall.list. Данный файл содержит список пакетов, которые будут установлены на текущую систему.

Получение списка новых пакетов, которые будут добавлены в общий список pkg_install.txt

comm -23 "$TMP_DIR/pkg_installed.list" "$TMP_DIR/pkg_install.list" > "$TMP_DIR/pkg_ourinstall.list"

На выходе получаем pkg_ourinstall.list. Данный файл содержит список пакетов, которые будут добавлены в общий лист pkg_install.txt.

Дополнительно

Важно! Если машин больше 2, то перед внесением изменений в общий установочный список или список пакетов на удаление нужно на всех машинах синхронизировать текущее состояние репозитория и применить изменения, только затем отправлять новые.

Зависимости

Этот скрипт предназначен только для тех дистрибутивов Linux, которые используют pacman для управления пакетами. Все зависимости включены в базовую группу Arch Linux, но приведены здесь для общей информации:

Исполняемый Arch пакет
bash bash
xargs findutils
pacman pacman
comm coreutils
sort coreutils

Ссылки

AUR Пакет: https://aur.archlinux.org/packages/pkgsync

About

Простой скрипт для синхронизации установленных пакетов между машинами на базе Arch Linux.

License:GNU General Public License v3.0


Languages

Language:Shell 100.0%