#!/bin/sh # CPM - Calista Package Manager # Версия: 1.2 # Проверяем, установлен ли pkg if ! command -v pkg >/dev/null 2>&1; then echo "Ошибка: pkg не установлен или не найден в PATH" >&2 exit 1 fi # Функция для фильтрации стандартных пакетов FreeBSD filter_freebsd_packages() { #pkg info | grep -v '^FreeBSD-' pkg query -a "%n\t%v\t%c\t%L" | grep -v '^FreeBSD-' | column -t -s $'\t' } # Функция для получения списка пользовательских пакетов (корневых) get_custom_packages() { filter_freebsd_packages | awk '{print $1}' } # Функция для получения имен всех установленных пакетов get_all_packages() { pkg info | awk '{print $1}' } # Обработка команд case "$1" in "info") if [ "$2" = "-v" ]; then # Подробная информация о каждом пользовательском пакете get_custom_packages | while read -r package; do echo "=== Информация о пакете: $package ===" pkg info "$package" echo "" done elif [ "$2" = "-dtree" ]; then echo "Вывод всего дерева зависимостей является ресурсозатратной операцией" printf "Вы уверены? [y/N] " read REPLY if echo "$REPLY" | grep -iq "^y"; then get_custom_packages | while read -r package; do deptree -s "$package" echo "" done else echo "Пока" exit 1 fi else # Простой список пользовательских пакетов filter_freebsd_packages fi ;; "sreset") echo "==== Удаление всех пользовательских пакетов ====" pkg unlock -ay get_custom_packages | while read -r package; do if [ "$package" = "pkg" ] || [ "$package" = "pkg-*" ]; then continue fi echo "Удаление $package" pkg delete -y "$package" >/dev/null 2>&1 done pkg autoremove -y ;; "deptree") deptree -s "$2" ;; "install") if [ -z "$2" ]; then echo "Использование: cpm install <имя_пакета>" >&2 exit 1 fi shift pkg install "$@" ;; "delete"|"remove") if [ -z "$2" ]; then echo "Использование: cpm $1 <имя_пакета>" >&2 exit 1 fi shift pkg delete "$@" ;; "autoremove") pkg autoremove ;; "upgrade") pkg upgrade ;; "update") pkg update ;; "search") if [ -z "$2" ]; then echo "Использование: cpm search <запрос>" >&2 exit 1 fi shift pkg search "$@" ;; "clean") pkg clean ;; "version"|"-v"|"--version") echo "CPM - Calista Package Manager v1.0.0" echo "Использует PKG: $(pkg -v)" ;; "help"|"-h"|"--help") cat << EOF CPM - Calista Package Manager Использование: cpm <команда> [опции] Команды: info Список установленных пакетов (без стандартных FreeBSD) info -v Подробная информация о всех пользовательских пакетах info -dtree Дерево зависимостей пользовательских пакетов deptree <пакет> Полное дерево зависимостей для конкретного пакета install <пакет> Установить пакет delete <пакет> Удалить пакет autoremove Удалить неиспользуемые зависимости upgrade Обновить все пакеты update Обновить репозиторий пакетов search <запрос> Поиск пакетов clean Очистить кэш пакетов sreset Удалить все пользовательские пакеты, за исключением pkg version Показать версию help Показать эту справку Примеры: cpm info cpm info -v cpm info -dtree cpm deptree nano cpm install nano cpm delete nano cpm search python EOF ;; *) if [ -z "$1" ]; then echo "Использование: cpm <команда>" >&2 echo "Для справки: cpm help" >&2 exit 1 else echo "Неизвестная команда: $1" >&2 echo "Для справки: cpm help" >&2 exit 1 fi ;; esac exit 0