170 lines
5.2 KiB
Bash
Executable File
170 lines
5.2 KiB
Bash
Executable File
#!/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
|