diff --git a/ccomp/README.md b/ccomp/README.md new file mode 100644 index 0000000..b984ffa --- /dev/null +++ b/ccomp/README.md @@ -0,0 +1,72 @@ +# Calista components manager + +Менеджер системных компонентов для операционной системы Calista. +Занимается установкой разных компонентов в систему без гемороя, является преведением +кодовой базы Calista в целостность. Позволяет пользователю установить нужный компонент +из командной строки, указав всего лишь его идентификатор. + +Компоненты будут распространяться в виде локальных файлов в формате архивов +виртуальной файловой системы quantumfs. В будущем будет сделана графическая обертка +данного менеджера для удобной пользователю установки компонентов. + +В данном репозитории распространяется версия для разработчиков. +Отличие данной версии в том, что кроме установки пакетов из локальных архивов +версия для разработчиков позволяет устанавливать пакеты из внешних репозиториев +(в частности gitlab репозиторий svsp technologies). Для возможности установки из +внешних репозиториев используется программка gproxy, которая требует установленного git. +Отдельная программа существует для разделения лицензий, так как git распространяется под GPL, +и эта программка разделяет закрытый код операционной системы от GPL компонентов, не заражая +систему лицензией GPL. Авторизация производится на уровне гит, все внешние пакеты устанавливаются +через ssh. То есть в gitlab должен быть установлен публичный ключ разработчика, который +устанавливает компоненты из этого gitlab. + +# Команда help программы ccomp (calista components manager) + +``` +Calista Component Manager +========================= +Команды: +install [version] [source] - Установить компонент (source: git или local, по умолчанию git) +list - Показать установленные компоненты +info - Информация об установленном компоненте +remove - Удалить компонент (заглушка) +update - Обновить список компонентов из репозитория +versions - Показать доступные версии компонента +help - Показать эту справку + +Примеры: +ccomp install cpm v1.0.0 git +ccomp install calista-graphics-legacy latest +ccomp list +ccomp info cpm +ccomp remove cpm + +Для работы с репозиторием компонентов сначала настройте gproxy: +gproxy set-repo <ваш-git-репозиторий> +ccomp update +``` + +# Команда help программы gproxy (git proxy for calista components manager) + +``` +Calista Component Proxy +======================= +Команды: +set-repo - Установить ссылку на репозиторий компонентов +update - Обновить список компонентов +list - Показать список доступных компонентов +get [version] - Получить компонент (version может быть тегом или 'latest') +clean - Очистить кэш склонированных репозиториев +set-cache - Установить путь к хранилищу +help - Показать эту справку + +Примеры: +gproxy set-repo git@github.com:user/components.git +gproxy update +gproxy get cpm v1.0.0 +gproxy get calista-graphics-legacy latest +``` + +Ссылка на внутренний репозиторий компонентов - git@gitlab.svsptech.ru:svsptech/calista-components.git + + diff --git a/ccomp/build b/ccomp/build new file mode 100755 index 0000000..7a29160 --- /dev/null +++ b/ccomp/build @@ -0,0 +1,27 @@ +#!/bin/sh + +REPO_CONF_DIR="${PWD}" +REPO_CONF_NAME="pkg.conf" + +# Проверка и установка git в FreeBSD +if ! command -v git >/dev/null 2>&1; then + cat > pkg.conf << EOF + xserver_dep_repo: { + url: "file://${PWD}/packages", + enabled: yes, + priority: 100 + } +EOF + + pkg -o REPOS_DIR="$REPO_CONF_DIR" -o repositories_conf="$REPO_CONF_NAME" install -y git || { echo "Ошибка установки git"; exit 1; } +fi + +cp ./ccomp /usr/local/bin/ccomp +cp ./gproxy /usr/local/bin/gproxy + +mkdir /calista/config/ccomp +mkdir /calista/cache/gproxy +mkdir /calista/config/gproxy + +pkg register -M ccomp.pkg +pkg register -M gproxy.pkg diff --git a/ccomp/ccomp b/ccomp/ccomp new file mode 100755 index 0000000..1faff76 --- /dev/null +++ b/ccomp/ccomp @@ -0,0 +1,530 @@ +#!/bin/sh +# calista-manager - Менеджер компонентов Calista OS + +# Конфигурация +SYSTEM_DIR="/calista" +REGISTRY_FILE="$SYSTEM_DIR/registry.db" +GPROXY_SCRIPT="/usr/local/bin/gproxy" # Путь к gproxy скрипту +GPROXY_CACHE=/calista/cache/gproxy/ + +# Цвета +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Логирование +log() { + echo -e "${GREEN}[+]${NC} $1" +} + +error() { + echo -e "${RED}[!]${NC} $1" >&2 +} + +warn() { + echo -e "${YELLOW}[*]${NC} $1" +} + +info() { + echo -e "${BLUE}[i]${NC} $1" +} + +# Запись в лог реестра +log_to_registry() { + TYPE="$1" + USER="${SUDO_USER:-$USER}" + DETAILS="$2" + + sqlite3 "$REGISTRY_FILE" "INSERT INTO calista_log (type, user, details) VALUES ('$TYPE', '$USER', '$DETAILS');" 2>/dev/null +} + +# Проверка инициализации реестра +check_init() { + if [ ! -f "$REGISTRY_FILE" ]; then + error "Реестр не найден: $REGISTRY_FILE" + error "Сначала инициализируйте реестр Calista" + exit 1 + fi + + if [ ! -x "$GPROXY_SCRIPT" ]; then + error "Не найден gproxy скрипт: $GPROXY_SCRIPT" + error "Поместите calista-proxy.sh в текущий каталог" + exit 1 + fi +} + +# Проверка наличия компонента в реестре +is_installed() { + COMP_ID="$1" + RESULT=$(sqlite3 "$REGISTRY_FILE" "SELECT COUNT(*) FROM components WHERE name = '$COMP_ID';" 2>/dev/null) + [ "$RESULT" -gt 0 ] 2>/dev/null +} + +# Добавление компонента в реестр +add_to_registry() { + COMP_ID="$1" + VERSION="$2" + SOURCE="$3" + DESCRIPTION="$4" + INSTALLED_AT=$(date '+%Y-%m-%d %H:%M:%S') + + # Проверяем, существует ли уже компонент + EXISTS=$(sqlite3 "$REGISTRY_FILE" "SELECT COUNT(*) FROM components WHERE name = '$COMP_ID';" 2>/dev/null) + + if [ "$EXISTS" -gt 0 ] 2>/dev/null; then + # Обновляем существующий компонент + sqlite3 "$REGISTRY_FILE" "UPDATE components SET + version = '$VERSION', + source = '$SOURCE', + description = '$DESCRIPTION', + installed_at = '$INSTALLED_AT' + WHERE name = '$COMP_ID';" 2>/dev/null + + log_to_registry "info" "Компонент $COMP_ID обновлен до версии $VERSION" + info "Компонент '$COMP_ID' обновлен в реестре" + else + # Добавляем новый компонент + sqlite3 "$REGISTRY_FILE" "INSERT INTO components (name, version, source, description, installed_at) + VALUES ('$COMP_ID', '$VERSION', '$SOURCE', '$DESCRIPTION', '$INSTALLED_AT');" 2>/dev/null + + log_to_registry "info" "Компонент $COMP_ID версии $VERSION установлен" + info "Компонент '$COMP_ID' добавлен в реестр" + fi +} + +# Удаление компонента из реестра +remove_from_registry() { + COMP_ID="$1" + + sqlite3 "$REGISTRY_FILE" "DELETE FROM components WHERE name = '$COMP_ID';" 2>/dev/null + log_to_registry "info" "Компонент $COMP_ID удален из реестра" +} + +# Получение информации о компоненте из gproxy +get_component_info() { + COMP_ID="$1" + VERSION="$2" + + # Получаем компонент через gproxy + if [ "$VERSION" = "latest" ]; then + "$GPROXY_SCRIPT" get "$COMP_ID" + else + "$GPROXY_SCRIPT" get "$COMP_ID" "$VERSION" + fi +} + +# Установка из Git +install_from_git() { + COMP_ID="$1" + VERSION="$2" + + log "Установка компонента '$COMP_ID' версии '$VERSION' из Git" + + # Проверяем не установлен ли уже + if is_installed "$COMP_ID"; then + warn "Компонент '$COMP_ID' уже установлен" + # Получаем текущую версию + CURRENT_VERSION=$(sqlite3 "$REGISTRY_FILE" "SELECT version FROM components WHERE name = '$COMP_ID';" 2>/dev/null) + info "Текущая версия: $CURRENT_VERSION" + echo "Переустановить? (y/N): " + read -r answer + if [ "$answer" != "y" ] && [ "$answer" != "Y" ]; then + echo "Установка отменена" + return 1 + fi + fi + + # Получаем компонент через gproxy + info "Загрузка компонента через gproxy..." + gproxy set-repo ssh://git@gitlab.svsptech.ru:5598/svsptech/calista-components.git + OUTPUT=$(get_component_info "$COMP_ID" "$VERSION") + + if echo "$OUTPUT" | grep -q "склонирован в:"; then + # Извлекаем путь из вывода gproxy + REPO_PATH="$GPROXY_CACHE$COMP_ID" + + if [ -d "$REPO_PATH" ]; then + log "Компонент загружен в: $REPO_PATH" + + # Ищем файл build + if [ -x "$REPO_PATH/build" ]; then + info "Запуск скрипта сборки..." + cd "$REPO_PATH" + if ./build; then + log "Сборка завершена успешно" + + # Получаем описание компонента + DESC="Компонент $COMP_ID" + if [ -f "README.md" ]; then + DESC=$(head -1 "README.md" 2>/dev/null | cut -c -100) + elif [ -f "description.txt" ]; then + DESC=$(head -1 "description.txt" 2>/dev/null | cut -c -100) + fi + + # Экранируем кавычки для SQL + DESC=$(echo "$DESC" | sed "s/'/''/g") + + # Добавляем в реестр + add_to_registry "$COMP_ID" "$VERSION" "git" "$DESC" + + # Очищаем кэш gproxy + info "Очистка кэша gproxy..." + "$GPROXY_SCRIPT" clean + + log "Компонент '$COMP_ID' успешно установлен" + else + error "Ошибка сборки компонента" + log_to_registry "error" "Ошибка сборки компонента $COMP_ID" + cd - >/dev/null + return 1 + fi + cd - >/dev/null + else + warn "Файл build не найден или не исполняемый" + info "Попытка найти альтернативные скрипты..." + + # Проверяем другие возможные скрипты + INSTALLED=false + for script in install.sh setup.sh configure.sh; do + if [ -x "$REPO_PATH/$script" ]; then + info "Найден скрипт: $script" + cd "$REPO_PATH" + if ./"$script"; then + log "Установка завершена успешно" + + # Получаем описание + DESC="Компонент $COMP_ID" + if [ -f "README.md" ]; then + DESC=$(head -1 "README.md" 2>/dev/null | cut -c -100) + fi + + # Экранируем кавычки для SQL + DESC=$(echo "$DESC" | sed "s/'/''/g") + + add_to_registry "$COMP_ID" "$VERSION" "git" "$DESC" + "$GPROXY_SCRIPT" clean + log "Компонент '$COMP_ID' успешно установлен" + INSTALLED=true + cd - >/dev/null + break + fi + cd - >/dev/null + fi + done + + if [ "$INSTALLED" = false ]; then + error "Не найден скрипт установки" + return 1 + fi + fi + else + error "Не удалось определить путь к загруженному компоненту" + log_to_registry "error" "Не удалось определить путь к компоненту $COMP_ID" + return 1 + fi + else + error "Не удалось загрузить компонент через gproxy" + echo "Вывод gproxy: $OUTPUT" + log_to_registry "error" "Не удалось загрузить компонент $COMP_ID через gproxy" + return 1 + fi +} + +# Установка локального компонента (заглушка) +install_local() { + COMP_ID="$1" + VERSION="$2" + + warn "Локальная установка компонентов пока не реализована" + echo "Идентификатор: $COMP_ID" + echo "Версия: $VERSION" + echo "Функционал в разработке..." + return 1 +} + +# Команда установки +cmd_install() { + if [ -z "$1" ]; then + echo "Использование: $0 install [version] [source]" >&2 + echo " source: git (по умолчанию) или local" >&2 + echo " version: номер версии или 'latest' (по умолчанию)" >&2 + exit 1 + fi + + check_init + + COMP_ID="$1" + VERSION="${2:-latest}" + SOURCE="${3:-git}" + + case "$SOURCE" in + git) + install_from_git "$COMP_ID" "$VERSION" + ;; + local) + install_local "$COMP_ID" "$VERSION" + ;; + *) + error "Неизвестный источник: $SOURCE" + echo "Допустимые значения: git, local" >&2 + exit 1 + ;; + esac +} + +# Команда списка установленных компонентов +cmd_list() { + check_init + + # Проверяем количество компонентов + COUNT=$(sqlite3 "$REGISTRY_FILE" "SELECT COUNT(*) FROM components;" 2>/dev/null) + + if [ "$COUNT" -eq 0 ] 2>/dev/null; then + echo "Нет установленных компонентов" + return 0 + fi + + echo "Установленные компоненты:" + echo "=========================" + echo "" + + # Получаем и выводим список компонентов + sqlite3 "$REGISTRY_FILE" "SELECT name, version, source, description, installed_at FROM components ORDER BY name;" 2>/dev/null | while IFS='|' read -r id version source desc installed; do + if [ -n "$id" ]; then + echo "Компонент: $id" + echo " Версия: ${version:-не указана}" + echo " Описание: ${desc:-нет описания}" + echo " Источник: ${source:-не указан}" + echo " Установлен: ${installed:-неизвестно}" + echo "" + fi + done + + echo "Всего компонентов: $COUNT" +} + +# Команда информации о компоненте +cmd_info() { + if [ -z "$1" ]; then + echo "Использование: $0 info " >&2 + exit 1 + fi + + check_init + COMP_ID="$1" + + if is_installed "$COMP_ID"; then + echo "Информация о компоненте: $COMP_ID" + echo "================================" + + # Получаем информацию из реестра + sqlite3 "$REGISTRY_FILE" "SELECT name, version, source, description, installed_at FROM components WHERE name = '$COMP_ID';" 2>/dev/null | while IFS='|' read -r id version source desc installed; do + echo "Идентификатор: $id" + echo "Версия: ${version:-не указана}" + echo "Описание: ${desc:-нет описания}" + echo "Источник: ${source:-не указан}" + echo "Дата установки: ${installed:-неизвестно}" + done + else + echo "Компонент '$COMP_ID' не установлен" + + # Предлагаем установить + echo "" + info "Для установки компонента используйте:" + echo " $0 install $COMP_ID" + fi +} + +# Команда обновления списка компонентов +cmd_update() { + check_init + log "Обновление списка компонентов через gproxy..." + "$GPROXY_SCRIPT" update + log_to_registry "info" "Список компонентов обновлен через gproxy" +} + +# Команда показа версий компонента из репозитория +cmd_versions() { + if [ -z "$1" ]; then + echo "Использование: $0 versions " >&2 + exit 1 + fi + + check_init + COMP_ID="$1" + + # Проверяем, установлен ли компонент + if is_installed "$COMP_ID"; then + CURRENT_VERSION=$(sqlite3 "$REGISTRY_FILE" "SELECT version FROM components WHERE name = '$COMP_ID';" 2>/dev/null) + info "Текущая установленная версия: $CURRENT_VERSION" + fi + + echo "" + warn "Получение доступных версий для $COMP_ID..." + info "Для просмотра доступных версий используйте gproxy напрямую:" + echo " $GPROXY_SCRIPT list" + echo "" + info "Или установите последнюю версию:" + echo " $0 install $COMP_ID latest" +} + +# Команда удаления компонента +cmd_remove() { + if [ -z "$1" ]; then + echo "Использование: $0 remove " >&2 + exit 1 + fi + + check_init + COMP_ID="$1" + + if is_installed "$COMP_ID"; then + # Получаем информацию о компоненте + info "Информация о компоненте:" + cmd_info "$COMP_ID" + echo "" + + warn "Вы уверены, что хотите удалить компонент '$COMP_ID'?" + echo "Это действие удалит запись из реестра (файлы компонента останутся)" + echo "Продолжить? (y/N): " + read -r answer + + if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then + remove_from_registry "$COMP_ID" + log "Компонент '$COMP_ID' удален из реестра" + warn "Файлы компонента не были удалены" + else + echo "Удаление отменено" + fi + else + echo "Компонент '$COMP_ID' не установлен" + fi +} + +# Команда очистки логов +cmd_clean_logs() { + check_init + + DAYS="${1:-30}" + info "Очистка логов старше $DAYS дней..." + + sqlite3 "$REGISTRY_FILE" "DELETE FROM calista_log WHERE timestamp < datetime('now', '-$DAYS days');" 2>/dev/null + + DELETED=$(sqlite3 "$REGISTRY_FILE" "SELECT changes();" 2>/dev/null) + log "Удалено $DELETED записей из лога" + log_to_registry "info" "Очищены логи старше $DAYS дней" +} + +# Команда просмотра логов +cmd_logs() { + check_init + + LIMIT="${1:-20}" + + echo "Последние $LIMIT записей лога:" + echo "===============================" + echo "" + + sqlite3 "$REGISTRY_FILE" "SELECT timestamp, type, user, details FROM calista_log ORDER BY timestamp DESC LIMIT $LIMIT;" 2>/dev/null | while IFS='|' read -r timestamp type user details; do + case "$type" in + "error") + echo -e "${RED}[$timestamp]${NC} [$type] $user: $details" + ;; + "info") + echo -e "${GREEN}[$timestamp]${NC} [$type] $user: $details" + ;; + *) + echo "[$timestamp] [$type] $user: $details" + ;; + esac + done +} + +# Команда помощи +cmd_help() { + echo "Calista Component Manager" + echo "=========================" + echo "Команды:" + echo " install [version] [source] - Установить компонент" + echo " (source: git или local, по умолчанию git)" + echo " list - Показать установленные компоненты" + echo " info - Информация об установленном компоненте" + echo " remove - Удалить компонент из реестра" + echo " update - Обновить список компонентов из репозитория" + echo " versions - Показать доступные версии компонента" + echo " logs [limit] - Показать последние записи лога (по умолчанию 20)" + echo " clean-logs [days] - Очистить старые логи (по умолчанию старше 30 дней)" + echo " help - Показать эту справку" + echo "" + echo "Примеры:" + echo " $0 install cpm v1.0.0 git" + echo " $0 install calista-graphics-legacy latest" + echo " $0 list" + echo " $0 info cpm" + echo " $0 remove cpm" + echo " $0 logs 50" + echo " $0 clean-logs 60" + echo "" + echo "Путь к реестру: $REGISTRY_FILE" + echo "" + echo "Для работы с репозиторием компонентов сначала настройте gproxy:" + echo " $GPROXY_SCRIPT set-repo <ваш-git-репозиторий>" + echo " $0 update" +} + +# Главная функция +main() { + case "$1" in + install) + cmd_install "$2" "$3" "$4" + ;; + list) + cmd_list + ;; + info) + cmd_info "$2" + ;; + remove) + cmd_remove "$2" + ;; + update) + cmd_update + ;; + versions) + cmd_versions "$2" + ;; + logs) + cmd_logs "$2" + ;; + clean-logs) + cmd_clean_logs "$2" + ;; + help|--help|-h) + cmd_help + ;; + *) + if [ -z "$1" ]; then + cmd_help + else + error "Неизвестная команда: $1" + echo "Используйте: $0 help" >&2 + exit 1 + fi + ;; + esac +} + +# Проверка root прав для установки +if [ "$(id -u)" -ne 0 ] && [ "$1" = "install" ]; then + warn "Для установки компонентов рекомендуется запускать от root" + echo "Продолжить? (y/N): " + read -r answer + if [ "$answer" != "y" ] && [ "$answer" != "Y" ]; then + exit 1 + fi +fi + +# Запуск +main "$@" diff --git a/ccomp/ccomp.pkg b/ccomp/ccomp.pkg new file mode 100644 index 0000000..ea69e0c --- /dev/null +++ b/ccomp/ccomp.pkg @@ -0,0 +1,12 @@ +name: ccomp +version: 1.0.0 +origin: calista/ccomp +comment: Calista components manager +desc: Calista components manager +arch: freebsd:$(uname -m) +maintainer: svsp@svsptech.ru +www: svsptech.ru +prefix: /usr/local + +#files: +# /usr/local/bin/ccomp: "886c659d5b6d606bafb6b08b593f8a39f7b39635031376f0355f406634815b99" diff --git a/ccomp/gproxy b/ccomp/gproxy new file mode 100755 index 0000000..c9a6f64 --- /dev/null +++ b/ccomp/gproxy @@ -0,0 +1,275 @@ +#!/bin/sh +# calista-proxy - Calista Component Proxy +# Лицензия: GPLv2+ (т.к. вызывает git) + +CONFIG_DIR="/calista/config/gproxy" +CONFIG_FILE="$CONFIG_DIR/config" +CACHE_DIR="/calista/cache/gproxy" +COMPONENTS_CACHE="$CACHE_DIR/components.json" + +# Проверяем наличие git +check_git() { + if ! command -v git >/dev/null 2>&1; then + echo "Ошибка: git не установлен" >&2 + exit 1 + fi +} + +# Инициализация каталогов +init_dirs() { + mkdir -p "$CONFIG_DIR" "$CACHE_DIR" +} + +# Загрузка конфига +load_config() { + if [ -f "$CONFIG_FILE" ]; then + . "$CONFIG_FILE" + else + echo "Конфиг не найден. Сначала установите ссылку: $0 set-repo " >&2 + exit 1 + fi +} + +# Команда: установка ссылки на репозиторий компонентов +cmd_set_repo() { + if [ -z "$1" ]; then + echo "Использование: $0 set-repo " >&2 + exit 1 + fi + + init_dirs + echo "REPO_URL=\"$1\"" > "$CONFIG_FILE" + echo "CACHE_DIR=\"$CACHE_DIR\"" >> "$CONFIG_FILE" + echo "Ссылка сохранена: $1" + + # Обновляем кэш + cmd_update +} + +# Команда: обновление списка компонентов +cmd_update() { + check_git + load_config + + echo "Обновление списка компонентов из $REPO_URL" + + # Создаем временный каталог для клонирования + TMP_DIR="$CACHE_DIR/tmp_repo" + rm -rf "$TMP_DIR" + + # Клонируем репозиторий + if git clone --depth 1 "$REPO_URL" "$TMP_DIR" 2>/dev/null; then + # Ищем components.json + if [ -f "$TMP_DIR/components.json" ]; then + cp "$TMP_DIR/components.json" "$COMPONENTS_CACHE" + echo "Список компонентов обновлен" + elif [ -f "$TMP_DIR/component-list.json" ]; then + cp "$TMP_DIR/component-list.json" "$COMPONENTS_CACHE" + echo "Список компонентов обновлен" + else + echo "Ошибка: Не найден файл components.json в репозитории" >&2 + fi + rm -rf "$TMP_DIR" + else + echo "Ошибка клонирования. Проверьте SSH ключи и доступ к $REPO_URL" >&2 + exit 1 + fi +} + +# Поиск компонента в списке +find_component() { + COMP_ID="$1" + + if [ ! -f "$COMPONENTS_CACHE" ]; then + echo "Список компонентов не найден. Сначала выполните обновление: $0 update" >&2 + exit 1 + fi + + # Используем grep для простого парсинга JSON + if grep -q "\"id\": \"$COMP_ID\"" "$COMPONENTS_CACHE"; then + # Извлекаем репозиторий + REPO=$(grep -A 10 "\"id\": \"$COMP_ID\"" "$COMPONENTS_CACHE" | \ + grep "\"repo\":" | head -1 | cut -d'"' -f4) + echo "$REPO" + return 0 + else + echo "" + return 1 + fi +} + +# Команда: получение компонента +cmd_get() { + if [ -z "$1" ]; then + echo "Использование: $0 get [version]" >&2 + echo " version может быть: конкретный тег или 'latest'" >&2 + exit 1 + fi + + check_git + load_config + + COMP_ID="$1" + VERSION="${2:-latest}" + + echo "Поиск компонента: $COMP_ID версия: $VERSION" + + # Ищем компонент + REPO_URL=$(find_component "$COMP_ID") + if [ -z "$REPO_URL" ]; then + echo "Компонент '$COMP_ID' не найден" >&2 + exit 1 + fi + + # Определяем цель клонирования + TARGET_DIR="$CACHE_DIR/$COMP_ID" + if [ -n "$2" ] && [ "$2" != "latest" ]; then + TARGET_DIR="$CACHE_DIR/${COMP_ID}_$2" + fi + + # Удаляем старую копию если существует + if [ -d "$TARGET_DIR" ]; then + echo "Удаление старой версии..." + rm -rf "$TARGET_DIR" + fi + + # Клонируем компонент + echo "Клонирование: $REPO_URL" + if [ "$VERSION" = "latest" ]; then + if git clone "$REPO_URL" "$TARGET_DIR"; then + echo "Компонент '$COMP_ID' склонирован в: $TARGET_DIR" + else + echo "Ошибка клонирования. Проверьте SSH ключи и доступ" >&2 + exit 1 + fi + else + # Клонируем с конкретным тегом + if git clone --branch "$VERSION" "$REPO_URL" "$TARGET_DIR"; then + echo "Компонент '$COMP_ID' версии $VERSION склонирован в: $TARGET_DIR" + else + echo "Ошибка: Не удалось клонировать версию $VERSION" >&2 + echo "Возможно тег не существует или проблемы с доступом" >&2 + exit 1 + fi + fi +} + +# Команда: список доступных компонентов +cmd_list() { + if [ ! -f "$COMPONENTS_CACHE" ]; then + echo "Список компонентов не найден. Сначала выполните: $0 update" >&2 + exit 1 + fi + + echo "Доступные компоненты:" + echo "=====================" + + # Простой парсинг для вывода списка + grep '"id":' "$COMPONENTS_CACHE" | cut -d'"' -f4 | while read -r id; do + name=$(grep -A 2 "\"id\": \"$id\"" "$COMPONENTS_CACHE" | \ + grep '"name":' | head -1 | cut -d'"' -f4) + echo " $id - $name" + done +} + +# Команда: очистка кэша +cmd_clean() { + load_config + + echo "Очистка кэша в $CACHE_DIR" + + # Удаляем все кроме конфига и самого файла components.json + find "$CACHE_DIR" -mindepth 1 -maxdepth 1 -type d -exec rm -rf {} + 2>/dev/null + rm -f "$COMPONENTS_CACHE" + + echo "Кэш очищен" +} + +# Команда: установка пути к хранилищу +cmd_set_cache() { + if [ -z "$1" ]; then + echo "Использование: $0 set-cache <путь>" >&2 + exit 1 + fi + + NEW_CACHE="$1" + if [ ! -d "$NEW_CACHE" ]; then + mkdir -p "$NEW_CACHE" || { + echo "Не удалось создать каталог: $NEW_CACHE" >&2 + exit 1 + } + fi + + # Обновляем конфиг + if [ -f "$CONFIG_FILE" ]; then + grep -v "^CACHE_DIR=" "$CONFIG_FILE" > "$CONFIG_FILE.tmp" + echo "CACHE_DIR=\"$NEW_CACHE\"" >> "$CONFIG_FILE.tmp" + mv "$CONFIG_FILE.tmp" "$CONFIG_FILE" + else + echo "CACHE_DIR=\"$NEW_CACHE\"" > "$CONFIG_FILE" + fi + + CACHE_DIR="$NEW_CACHE" + COMPONENTS_CACHE="$CACHE_DIR/components.json" + + echo "Путь к хранилищу установлен: $NEW_CACHE" +} + +# Команда: помощь +cmd_help() { + echo "Calista Component Proxy" + echo "=======================" + echo "Команды:" + echo " set-repo - Установить ссылку на репозиторий компонентов" + echo " update - Обновить список компонентов" + echo " list - Показать список доступных компонентов" + echo " get [version] - Получить компонент (version может быть тегом или 'latest')" + echo " clean - Очистить кэш склонированных репозиториев" + echo " set-cache - Установить путь к хранилищу" + echo " help - Показать эту справку" + echo "" + echo "Примеры:" + echo " $0 set-repo git@github.com:user/components.git" + echo " $0 update" + echo " $0 get cpm v1.0.0" + echo " $0 get calista-graphics-legacy latest" +} + +# Главная функция +main() { + case "$1" in + set-repo) + cmd_set_repo "$2" + ;; + update) + cmd_update + ;; + get) + cmd_get "$2" "$3" + ;; + list) + cmd_list + ;; + clean) + cmd_clean + ;; + set-cache) + cmd_set_cache "$2" + ;; + help|--help|-h) + cmd_help + ;; + *) + if [ -z "$1" ]; then + cmd_help + else + echo "Неизвестная команда: $1" >&2 + echo "Используйте: $0 help" >&2 + exit 1 + fi + ;; + esac +} + +# Запуск +main "$@" diff --git a/ccomp/gproxy.pkg b/ccomp/gproxy.pkg new file mode 100644 index 0000000..a244d1a --- /dev/null +++ b/ccomp/gproxy.pkg @@ -0,0 +1,13 @@ +name: gproxy +version: 1.0.0 +origin: calista/gproxy +comment: Git proxy for Calista components manager +desc: Git proxy for Calista components manager +arch: freebsd:$(uname -m) +maintainer: svsp@svsptech.ru +www: svsptech.ru +prefix: /usr/local + +#files: +# /usr/local/bin/gproxy: '780b36deaddfd4e63008022d2a78e7334c8d1c3f93993b8797100b631134c875' + diff --git a/ccomp/packages/All/All/Hashed/brotli-1.2.0,1~9ad5bbca4f.pkg b/ccomp/packages/All/All/Hashed/brotli-1.2.0,1~9ad5bbca4f.pkg new file mode 100644 index 0000000..9aa04b5 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/brotli-1.2.0,1~9ad5bbca4f.pkg differ diff --git a/ccomp/packages/All/All/Hashed/curl-8.17.0~517a2452ea.pkg b/ccomp/packages/All/All/Hashed/curl-8.17.0~517a2452ea.pkg new file mode 100644 index 0000000..7a98f12 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/curl-8.17.0~517a2452ea.pkg differ diff --git a/ccomp/packages/All/All/Hashed/expat-2.7.3~8012c4078c.pkg b/ccomp/packages/All/All/Hashed/expat-2.7.3~8012c4078c.pkg new file mode 100644 index 0000000..2881cfa Binary files /dev/null and b/ccomp/packages/All/All/Hashed/expat-2.7.3~8012c4078c.pkg differ diff --git a/ccomp/packages/All/All/Hashed/gettext-runtime-0.26~32e2042732.pkg b/ccomp/packages/All/All/Hashed/gettext-runtime-0.26~32e2042732.pkg new file mode 100644 index 0000000..e0cb3ef Binary files /dev/null and b/ccomp/packages/All/All/Hashed/gettext-runtime-0.26~32e2042732.pkg differ diff --git a/ccomp/packages/All/All/Hashed/git-2.52.0~fd8baf935e.pkg b/ccomp/packages/All/All/Hashed/git-2.52.0~fd8baf935e.pkg new file mode 100644 index 0000000..a9248d9 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/git-2.52.0~fd8baf935e.pkg differ diff --git a/ccomp/packages/All/All/Hashed/indexinfo-0.3.1_1~2c29163daf.pkg b/ccomp/packages/All/All/Hashed/indexinfo-0.3.1_1~2c29163daf.pkg new file mode 100644 index 0000000..58519af Binary files /dev/null and b/ccomp/packages/All/All/Hashed/indexinfo-0.3.1_1~2c29163daf.pkg differ diff --git a/ccomp/packages/All/All/Hashed/libffi-3.5.1~cf2254cd5a.pkg b/ccomp/packages/All/All/Hashed/libffi-3.5.1~cf2254cd5a.pkg new file mode 100644 index 0000000..4ee5aff Binary files /dev/null and b/ccomp/packages/All/All/Hashed/libffi-3.5.1~cf2254cd5a.pkg differ diff --git a/ccomp/packages/All/All/Hashed/libidn2-2.3.8~5b078f8ed4.pkg b/ccomp/packages/All/All/Hashed/libidn2-2.3.8~5b078f8ed4.pkg new file mode 100644 index 0000000..33d0acb Binary files /dev/null and b/ccomp/packages/All/All/Hashed/libidn2-2.3.8~5b078f8ed4.pkg differ diff --git a/ccomp/packages/All/All/Hashed/libnghttp2-1.68.0~bda8ada07c.pkg b/ccomp/packages/All/All/Hashed/libnghttp2-1.68.0~bda8ada07c.pkg new file mode 100644 index 0000000..77afa31 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/libnghttp2-1.68.0~bda8ada07c.pkg differ diff --git a/ccomp/packages/All/All/Hashed/libpsl-0.21.5_2~0d376a2f76.pkg b/ccomp/packages/All/All/Hashed/libpsl-0.21.5_2~0d376a2f76.pkg new file mode 100644 index 0000000..0852056 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/libpsl-0.21.5_2~0d376a2f76.pkg differ diff --git a/ccomp/packages/All/All/Hashed/libssh2-1.11.1,3~d68facc45f.pkg b/ccomp/packages/All/All/Hashed/libssh2-1.11.1,3~d68facc45f.pkg new file mode 100644 index 0000000..a6577dd Binary files /dev/null and b/ccomp/packages/All/All/Hashed/libssh2-1.11.1,3~d68facc45f.pkg differ diff --git a/ccomp/packages/All/All/Hashed/libunistring-1.4.1~738cb65219.pkg b/ccomp/packages/All/All/Hashed/libunistring-1.4.1~738cb65219.pkg new file mode 100644 index 0000000..daed682 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/libunistring-1.4.1~738cb65219.pkg differ diff --git a/ccomp/packages/All/All/Hashed/mpdecimal-4.0.1~f774e949d8.pkg b/ccomp/packages/All/All/Hashed/mpdecimal-4.0.1~f774e949d8.pkg new file mode 100644 index 0000000..9a82dcb Binary files /dev/null and b/ccomp/packages/All/All/Hashed/mpdecimal-4.0.1~f774e949d8.pkg differ diff --git a/ccomp/packages/All/All/Hashed/p5-Authen-SASL-2.1900~f3b69725b3.pkg b/ccomp/packages/All/All/Hashed/p5-Authen-SASL-2.1900~f3b69725b3.pkg new file mode 100644 index 0000000..daf5ca7 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/p5-Authen-SASL-2.1900~f3b69725b3.pkg differ diff --git a/ccomp/packages/All/All/Hashed/p5-Crypt-URandom-0.54~07303b5fd4.pkg b/ccomp/packages/All/All/Hashed/p5-Crypt-URandom-0.54~07303b5fd4.pkg new file mode 100644 index 0000000..ff52c27 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/p5-Crypt-URandom-0.54~07303b5fd4.pkg differ diff --git a/ccomp/packages/All/All/Hashed/p5-Digest-HMAC-1.05~60d3cf3195.pkg b/ccomp/packages/All/All/Hashed/p5-Digest-HMAC-1.05~60d3cf3195.pkg new file mode 100644 index 0000000..fa315f5 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/p5-Digest-HMAC-1.05~60d3cf3195.pkg differ diff --git a/ccomp/packages/All/All/Hashed/p5-Error-0.17030~291facff41.pkg b/ccomp/packages/All/All/Hashed/p5-Error-0.17030~291facff41.pkg new file mode 100644 index 0000000..f4e0d19 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/p5-Error-0.17030~291facff41.pkg differ diff --git a/ccomp/packages/All/All/Hashed/p5-IO-Socket-SSL-2.095~ce51569946.pkg b/ccomp/packages/All/All/Hashed/p5-IO-Socket-SSL-2.095~ce51569946.pkg new file mode 100644 index 0000000..020b5cb Binary files /dev/null and b/ccomp/packages/All/All/Hashed/p5-IO-Socket-SSL-2.095~ce51569946.pkg differ diff --git a/ccomp/packages/All/All/Hashed/p5-MIME-Base32-1.303~eec0ba1f9d.pkg b/ccomp/packages/All/All/Hashed/p5-MIME-Base32-1.303~eec0ba1f9d.pkg new file mode 100644 index 0000000..9d06e61 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/p5-MIME-Base32-1.303~eec0ba1f9d.pkg differ diff --git a/ccomp/packages/All/All/Hashed/p5-MIME-Base64-3.16~dda8d6e8b4.pkg b/ccomp/packages/All/All/Hashed/p5-MIME-Base64-3.16~dda8d6e8b4.pkg new file mode 100644 index 0000000..e3f98ef Binary files /dev/null and b/ccomp/packages/All/All/Hashed/p5-MIME-Base64-3.16~dda8d6e8b4.pkg differ diff --git a/ccomp/packages/All/All/Hashed/p5-Mozilla-CA-20250602~922f1a766d.pkg b/ccomp/packages/All/All/Hashed/p5-Mozilla-CA-20250602~922f1a766d.pkg new file mode 100644 index 0000000..011132e Binary files /dev/null and b/ccomp/packages/All/All/Hashed/p5-Mozilla-CA-20250602~922f1a766d.pkg differ diff --git a/ccomp/packages/All/All/Hashed/p5-Net-SSLeay-1.94~825538c087.pkg b/ccomp/packages/All/All/Hashed/p5-Net-SSLeay-1.94~825538c087.pkg new file mode 100644 index 0000000..bad8765 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/p5-Net-SSLeay-1.94~825538c087.pkg differ diff --git a/ccomp/packages/All/All/Hashed/p5-URI-5.34~2dde06330f.pkg b/ccomp/packages/All/All/Hashed/p5-URI-5.34~2dde06330f.pkg new file mode 100644 index 0000000..523fe82 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/p5-URI-5.34~2dde06330f.pkg differ diff --git a/ccomp/packages/All/All/Hashed/pcre2-10.47_1~272aa65125.pkg b/ccomp/packages/All/All/Hashed/pcre2-10.47_1~272aa65125.pkg new file mode 100644 index 0000000..0432c28 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/pcre2-10.47_1~272aa65125.pkg differ diff --git a/ccomp/packages/All/All/Hashed/perl5-5.42.0_1~f3be220b12.pkg b/ccomp/packages/All/All/Hashed/perl5-5.42.0_1~f3be220b12.pkg new file mode 100644 index 0000000..9778019 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/perl5-5.42.0_1~f3be220b12.pkg differ diff --git a/ccomp/packages/All/All/Hashed/python311-3.11.14_1~ae2d531880.pkg b/ccomp/packages/All/All/Hashed/python311-3.11.14_1~ae2d531880.pkg new file mode 100644 index 0000000..31a01c0 Binary files /dev/null and b/ccomp/packages/All/All/Hashed/python311-3.11.14_1~ae2d531880.pkg differ diff --git a/ccomp/packages/All/All/Hashed/readline-8.3.3~b497baa5cc.pkg b/ccomp/packages/All/All/Hashed/readline-8.3.3~b497baa5cc.pkg new file mode 100644 index 0000000..f7452fb Binary files /dev/null and b/ccomp/packages/All/All/Hashed/readline-8.3.3~b497baa5cc.pkg differ diff --git a/ccomp/packages/All/All/Hashed/zstd-1.5.7_1~6e1adfa4b5.pkg b/ccomp/packages/All/All/Hashed/zstd-1.5.7_1~6e1adfa4b5.pkg new file mode 100644 index 0000000..0ac3e1e Binary files /dev/null and b/ccomp/packages/All/All/Hashed/zstd-1.5.7_1~6e1adfa4b5.pkg differ diff --git a/ccomp/packages/data.pkg b/ccomp/packages/data.pkg new file mode 100644 index 0000000..244c490 Binary files /dev/null and b/ccomp/packages/data.pkg differ diff --git a/ccomp/packages/meta b/ccomp/packages/meta new file mode 100644 index 0000000..56b6c53 --- /dev/null +++ b/ccomp/packages/meta @@ -0,0 +1,7 @@ +version = 2; +packing_format = "tzst"; +manifests = "packagesite.yaml"; +data = "data"; +filesite = "filesite.yaml"; +manifests_archive = "packagesite"; +filesite_archive = "filesite"; diff --git a/ccomp/packages/meta.conf b/ccomp/packages/meta.conf new file mode 100644 index 0000000..56b6c53 --- /dev/null +++ b/ccomp/packages/meta.conf @@ -0,0 +1,7 @@ +version = 2; +packing_format = "tzst"; +manifests = "packagesite.yaml"; +data = "data"; +filesite = "filesite.yaml"; +manifests_archive = "packagesite"; +filesite_archive = "filesite"; diff --git a/ccomp/packages/packagesite.pkg b/ccomp/packages/packagesite.pkg new file mode 100644 index 0000000..0263174 Binary files /dev/null and b/ccomp/packages/packagesite.pkg differ diff --git a/init_calista b/init_calista index 292f2fa..6289036 100755 --- a/init_calista +++ b/init_calista @@ -3,16 +3,15 @@ mkdir /calista/config mkdir /calista/cache -unzip ccomp.zip - -./calista-component-manager/build +./ccomp/build ./reginit ./init_device_demon ccomp install ccomp ccomp install cgl -rm -rf ./calista-component-manager -rm ./reginit -rm ./init_device_demon +#rm -rf ./ccomp +#rm ./reginit +#rm ./init_device_demon +