Добавление встроенного ccomp

This commit is contained in:
svsptech 2026-04-19 20:09:46 +05:00
parent 23c5cfeb3d
commit b6948ef69c
39 changed files with 948 additions and 6 deletions

72
ccomp/README.md Normal file
View File

@ -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 <id> [version] [source] - Установить компонент (source: git или local, по умолчанию git)
list - Показать установленные компоненты
info <id> - Информация об установленном компоненте
remove <id> - Удалить компонент (заглушка)
update - Обновить список компонентов из репозитория
versions <id> - Показать доступные версии компонента
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 <git-url> - Установить ссылку на репозиторий компонентов
update - Обновить список компонентов
list - Показать список доступных компонентов
get <id> [version] - Получить компонент (version может быть тегом или 'latest')
clean - Очистить кэш склонированных репозиториев
set-cache <path> - Установить путь к хранилищу
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

27
ccomp/build Executable file
View File

@ -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

530
ccomp/ccomp Executable file
View File

@ -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 <component-id> [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 <component-id>" >&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 <component-id>" >&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 <component-id>" >&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 <id> [version] [source] - Установить компонент"
echo " (source: git или local, по умолчанию git)"
echo " list - Показать установленные компоненты"
echo " info <id> - Информация об установленном компоненте"
echo " remove <id> - Удалить компонент из реестра"
echo " update - Обновить список компонентов из репозитория"
echo " versions <id> - Показать доступные версии компонента"
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 "$@"

12
ccomp/ccomp.pkg Normal file
View File

@ -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"

275
ccomp/gproxy Executable file
View File

@ -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 <git-url>" >&2
exit 1
fi
}
# Команда: установка ссылки на репозиторий компонентов
cmd_set_repo() {
if [ -z "$1" ]; then
echo "Использование: $0 set-repo <git-url>" >&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 <component-id> [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 <git-url> - Установить ссылку на репозиторий компонентов"
echo " update - Обновить список компонентов"
echo " list - Показать список доступных компонентов"
echo " get <id> [version] - Получить компонент (version может быть тегом или 'latest')"
echo " clean - Очистить кэш склонированных репозиториев"
echo " set-cache <path> - Установить путь к хранилищу"
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 "$@"

13
ccomp/gproxy.pkg Normal file
View File

@ -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'

BIN
ccomp/packages/data.pkg Normal file

Binary file not shown.

7
ccomp/packages/meta Normal file
View File

@ -0,0 +1,7 @@
version = 2;
packing_format = "tzst";
manifests = "packagesite.yaml";
data = "data";
filesite = "filesite.yaml";
manifests_archive = "packagesite";
filesite_archive = "filesite";

7
ccomp/packages/meta.conf Normal file
View File

@ -0,0 +1,7 @@
version = 2;
packing_format = "tzst";
manifests = "packagesite.yaml";
data = "data";
filesite = "filesite.yaml";
manifests_archive = "packagesite";
filesite_archive = "filesite";

Binary file not shown.

View File

@ -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