-
Notifications
You must be signed in to change notification settings - Fork 59
CondinAPT ru
CondinAPT — это универсальный инструмент для автоматизации установки пакетов в любой системе на базе Debian (Debian, Ubuntu и их производные). Его ключевая особенность — возможность задавать сложные условия и правила для установки каждого пакета в зависимости от произвольных конфигураций системы.
Области применения:
- Системы сборки дистрибутивов Linux
- Автоматизация настройки серверов и рабочих станций
- Развертывание различных системных конфигураций
- Управление пакетами в Docker-контейнерах
- CI/CD пайплайны для подготовки окружения
- Создание собственных установочных образов
Ключевые возможности:
- Условная установка: Установка пакетов на основе гибких фильтров (+, -).
- Внешняя конфигурация: Полное разделение логики (список пакетов) и данных (параметры системы).
- Очереди установки: Разделение процесса на последовательные этапы для разрешения зависимостей.
- Приоритетная очередь: Гарантированная установка критически важных пакетов в первую очередь.
-
Сложная логика: Поддержка операторов "И" (
&&), "ИЛИ" (||), а также групповых фильтров (+{a|b},-{a&b}). - Читаемость: Поддержка комментариев и пустых строк для структурирования списков.
- Обратная совместимость: Поддержка простых списков пакетов без условий.
CondinAPT работает с четырьмя ключевыми файлами:
-
Скрипт
condinapt: Ядро, содержащее всю логику обработки. -
Основной конфигурационный файл (
-c): Файл с bash-переменными, описывающими текущее окружение.Пример (
system.conf):DISTRIBUTION="bookworm" SYSTEM_TYPE="server" ENVIRONMENT="production" LOCALE="en_US" FEATURES="web,database"
-
Файл сопоставления фильтров (
-m): Связывает короткие префиксы (используемые в списке пакетов) с именами переменных из основного конфигурационного файла. Этот файл необязателен. Если фильтр отсутствует в файле сопоставления, он будет использоваться как имя переменной из основного конфигурационного файла. Если переменная не найдена, CondinAPT объявит её пустой.Пример (
filters.map):d=DISTRIBUTION st=SYSTEM_TYPE env=ENVIRONMENT arch=ARCHITECTURE feat=FEATURES -
Файл списка пакетов (
-l): Основной файл, описывающий, что устанавливать и при каких условиях.
Чтобы быстро познакомиться с CondinAPT, создайте простой пример:
1. Создайте конфигурационный файл config.conf:
<a id="basic-system-parameters"></a>
# Basic system parameters
DISTRIBUTION="bookworm"
SYSTEM_TYPE="server"
ENVIRONMENT="production"2. Создайте список пакетов packages.list:
<a id="base-packages---always-installed"></a>
# Base packages - always installed
vim
curl
<a id="packages-only-for-servers"></a>
# Packages only for servers
nginx +SYSTEM_TYPE=server
mysql-server +SYSTEM_TYPE=server
<a id="exclude-packages-for-production-environment"></a>
# Exclude packages for production environment
debug-tools -ENVIRONMENT=production
3. Запустите установку:
bash
./condinapt -l packages.list -c config.conf4. Или протестируйте в режиме симуляции:
bash
./condinapt -l packages.list -c config.conf -s./condinapt [OPTIONS]| Флаг | Длинный флаг | Аргумент | Описание |
|---|---|---|---|
-l |
--package-list |
PATH |
(Обязателен) Путь к файлу списка пакетов. |
-c |
--config |
PATH |
(Обязателен) Путь к основному конфигурационному файлу. |
-m |
--filter-mapping |
PATH |
(Необязательно) Путь к файлу сопоставления фильтров. |
-P |
--priority-list |
PATH |
(Необязательно) Путь к файлу приоритетных фильтров. Файл содержит шаблоны regex для поиска пакетов. Совпавшие пакеты перемещаются в приоритетную очередь (с сохранением фильтров). |
-s |
--simulation |
Режим симуляции. Пакеты не будут устанавливаться. | |
-C |
--check-only |
Только проверка установленных пакетов. Возвращает код выхода 1, если есть неустановленные пакеты. В конце выводит команду для установки отсутствующих пакетов. | |
-v / -vv
|
--verbose / --very-verbose
|
Подробный / очень подробный вывод. | |
-x |
--xtrace |
Включить трассировку команд set -x. |
|
-f |
--force |
Принудительно обновить списки пакетов перед установкой. По умолчанию обновление пропускается, если существует /var/cache/apt/pkgcache.bin. |
|
-h |
--help |
Показать справку. |
Это сердце CondinAPT. Вся логика описывается здесь.
Каждая строка в файле списка пакетов состоит из двух основных частей:
- Имя пакета с необязательным указанием версии и релиза
- Фильтры условий — определяют, при каких условиях пакет будет установлен
Основа для всех примеров ниже: Для всех последующих примеров предполагается, что используются файлы
system.confиfilters.mapиз раздела Как работает и основные компоненты.
DISTRIBUTION="bookworm"SYSTEM_TYPE="server"ENVIRONMENT="production"
Простое имя:
vim
Версия пакета:
-
package=version— нестрогое требование по версии. Если нужная версия недоступна, устанавливается доступная версия.git=2.25.1 -
package==version— строгое требование. Если версия не найдена, установка прерывается с ошибкой.curl==7.68.0
Указание релиза:
Релиз указывается с помощью символа @, что позволяет привязать установку к определённой ветке репозитория.
telegram@bookworm-backports
kernel-image-6.5.0@trixie-backports
- Имена пакетов: Каждый пакет или условие записывается с новой строки.
-
Комментарии: Строки, начинающиеся с
#, или текст после#в строке, полностью игнорируются. - Пустые строки: Игнорируются и служат для визуального разделения.
#=== Multimedia ===
vlc # Excellent media player
audacious # Another media player
#=== Graphics ===
gimpФильтры позволяют задать дополнительные условия для выбора пакетов. Они сравнивают значения системных переменных (архитектура, дистрибутив, рабочее окружение) с указанными в конфигурационном файле.
-
+(Положительный): Условие истинно, если значение переменной совпадает. Формат:+<префикс>=<значение>-
Строка:
nginx +st=server -
Анализ:
SYSTEM_TYPEравен"server". Условие истинно. -
Результат:
nginxбудет установлен.
-
Строка:
-
Несколько положительных фильтров с одним префиксом: Работают как условия ИЛИ. Формат:
+<префикс>=<значение1> +<префикс>=<значение2>-
Строка:
debug-tools +env=development +env=testing -
Анализ:
ENVIRONMENTравен"production", что не совпадает ни с"development", ни с"testing". Условие ложно. -
Результат:
debug-toolsне будет установлен.
-
Строка:
-
-(Отрицательный): Условие истинно, если значение переменной не совпадает. Формат:-<префикс>=<значение>-
Строка:
monitoring-tools -st=desktop -
Анализ:
SYSTEM_TYPEравен"server", что не равно"desktop". Условие истинно. -
Результат:
monitoring-toolsбудет установлен.
-
Строка:
-
Несколько отрицательных фильтров: Пакет исключается, если выполнено ЛЮБОЕ условие. Формат:
-<префикс>=<значение1> -<префикс>=<значение2>-
Строка:
realtek-driver -d=trixie -d=sid -
Анализ:
DISTRIBUTIONравен"bookworm", что не равно ни"trixie", ни"sid". Условия исключения не срабатывают. -
Результат:
realtek-driverбудет установлен.
-
Строка:
-
+{a|b}(ИЛИ для включения): Истинно, если хотя бы одно из условий в группе истинно.-
Строка:
web-server +{st=server|st=web-server} -
Анализ:
SYSTEM_TYPEравен"server". Первое условие истинно, этого достаточно. - Результат: Пакет будет установлен.
-
Строка:
-
+{a&b}(И для включения): Истинно только если все условия в группе истинны.-
Строка:
database-tools +{d=bookworm&st=server} -
Анализ:
DISTRIBUTIONравен"bookworm"(истинно) ИSYSTEM_TYPEравен"server"(истинно). - Результат: Пакет будет установлен.
-
Строка:
-
-{a|b}(ИЛИ для исключения): Пакет исключается, если хотя бы одно из условий истинно.-
Строка:
debug-tools -{env=production|st=minimal} -
Анализ:
ENVIRONMENTравен"production". Первое условие истинно, пакет исключается. - Результат: Пакет не будет установлен.
-
Строка:
-
-{a&b}(И для исключения): Пакет исключается только если все условия истинны.-
Строка:
development-tools -{env=production&st=minimal} -
Анализ:
ENVIRONMENTравен"production"(истинно), ноSYSTEM_TYPEне равен"minimal". Второе условие ложно. Группа не срабатывает на исключение. - Результат: Пакет будет установлен (если нет других фильтров).
-
Строка:
Для одной и той же функциональности можно предложить разные пакеты, которые будут устанавливаться в зависимости от условий. Альтернативные варианты разделяются оператором ||.
Важно: Каждая альтернатива должна содержать полное описание — имя пакета (с необязательной версией и релизом) и набор фильтров.
Пример:
postgresql +st=database-server || mysql-server +st=web-server
- Если
SYSTEM_TYPE—database-server, выбирается postgresql. - Если
SYSTEM_TYPE—web-server, устанавливается mysql-server.
-
||(ИЛИ / Fallback): Пытается установить левую часть. Если не удалось (пакет не найден или отфильтрован), пробует установить правую часть.-
Строка:
exfatprogs -d=bookworm || exfat-utils -
Анализ:
DISTRIBUTIONне равен"bookworm", левая часть отфильтрована. CondinAPT переходит к правой части. Уexfat-utilsнет фильтров, он будет установлен. -
Результат: Будет установлен
exfat-utils.
-
Строка:
-
&&(И / Конъюнкция): Все части должны успешно пройти проверки фильтров, чтобы быть добавленными в очередь.-
Строка:
nginx +st=web-server && php-fpm -
Анализ:
SYSTEM_TYPEравен"server", но условие требует"web-server". Левая часть не проходит. -
Результат: Пакеты не будут установлены.
-
Сложный пример:
monitoring-tools +env=production && prometheus +env=production && grafana +env=production -
Результат: Все три пакета будут установлены только если
ENVIRONMENT—production.
-
-
!(Обязательный пакет): Если пакет помечен как обязательный (!), но не найден в репозиториях, CondinAPT завершит выполнение с ошибкой.-
Строка:
!essential-package
-
Строка:
-
@(Указание релиза): Установить пакет из определённого релиза Debian/Ubuntu (например,bookworm-backports).-
Строка:
kernel-image-6.5.0 @trixie-backports
-
Строка:
CondinAPT позволяет точно контролировать версии устанавливаемых пакетов.
-
Синтаксис:
-
package=VERSION: Пытается установить указанную версию (VERSION). Если она недоступна в репозиториях, CondinAPT установит любую доступную версию этого пакета.- Пример:
my-app=1.2.3(пытается установить 1.2.3, если нет — например, 1.2.4)
- Пример:
-
package==VERSION: Строгая установка конкретной версии. Если такой версии нет в репозиториях, пакет не будет установлен. Если пакет также был помечен как обязательный (!), скрипт завершится с ошибкой.- Пример:
another-app==2.0.0(устанавливает только 2.0.0, иначе пропускает или ошибка, если обязательный)
- Пример:
-
-
Поведение:
- CondinAPT сначала проверяет, установлена ли нужная версия пакета в системе. Если да — пакет считается установленным и пропускается.
- Затем проверяет, доступна ли указанная версия в репозиториях (
apt-cache madison). -
При использовании
=(нестрогая версия):- Если нужная версия недоступна, CondinAPT выдаст предупреждение, что точная версия не найдена.
- Тем не менее, будет предпринята попытка установить любую доступную версию пакета из репозиториев.
-
При использовании
==(строгая версия):- Если нужная версия недоступна, CondinAPT не будет устанавливать пакет.
- Если пакет был обязательным (
!), скрипт завершится с ошибкой.
-
Заморозка версии (
apt-mark hold):- Если пакет был успешно установлен в точно указанной версии (т.е. если
package==VERSIONсработал, либоpackage=VERSIONнашёл именно эту версию и установил её), CondinAPT автоматически выполнит командуapt-mark holdдля этого пакета. - Это предотвращает автоматическое обновление пакета до новой версии при последующих операциях
apt upgrade.
- Если пакет был успешно установлен в точно указанной версии (т.е. если
Задача: Установить database-tools для дистрибутива bookworm, но только если тип системы — server или database-server, и не для окружения minimal.
packages.list:
database-tools +d=bookworm +{st=server|st=database-server} -env=minimalАнализ (с нашей конфигурацией):
-
+d=bookworm: Истинно. -
+{st=server|st=database-server}: Истинно, так какSYSTEM_TYPE="server". -
-env=minimal: Истинно, так какENVIRONMENT="production". Результат: Все условия истинны. Пакет будет установлен.
Задача: Для Debian trixie установить firefox-esr. Для bookworm — firefox. Во всех остальных случаях — w3m.
packages.list:
firefox-esr +d=trixie || firefox +d=bookworm || w3mАнализ:
-
firefox-esr +d=trixie: Левая часть.DISTRIBUTION="bookworm", условие ложно. -
firefox +d=bookworm: Средняя часть.DISTRIBUTION="bookworm", условие истинно. - Так как сработала вторая часть цепочки
||, третья (w3m) игнорируется. Результат: Будет установленfirefox.
Задача: dkms критически важен для сборки модулей, он должен быть установлен первым. В основном списке он отмечен как обязательный, но с условием.
-
priority.list:
^dkms$ ^build-essential$
* **`packages.list`:**
```text
!dkms +pv=standard # Mandatory, but with a condition
vim
Анализ:
-
CondinAPT читает приоритетные шаблоны
^dkms$и^build-essential$. -
Строка
!dkms +pv=standardсовпадает с шаблоном^dkms$и переносится в приоритетную очередь со всеми свойствами: флаг обязательности (!) и фильтр (+pv=standard). -
План выполнения:
-
Приоритетная очередь: Установить
!dkms +pv=standard(флаг обязательности и фильтр сохраняются). -
Обычная очередь:
vim.
-
Приоритетная очередь: Установить
Результат: dkms будет установлен первым, но фильтр +pv=standard всё равно будет проверяться. Если условие фильтра не выполнено, установка завершится с ошибкой из-за флага ! (обязательный).
Разделитель --- на отдельной строке делит список на группы (очереди). Пакеты из одной очереди устанавливаются вместе одним вызовом apt. Очереди выполняются строго последовательно.
Пример:
<a id="queue-1-base-system"></a>
# Queue 1: Base system
systemd
network-manager
---
<a id="queue-2-web-server"></a>
# Queue 2: Web server
nginx
php-fpm
---
<a id="queue-3-monitoring"></a>
# Queue 3: Monitoring
prometheus
Пакеты с @release автоматически группируются в отдельные очереди по релизу:
<a id="regular-packages"></a>
# Regular packages
vim
git
---
<a id="packages-from-backports-create-a-separate-queue"></a>
# Packages from backports (create a separate queue)
linux-image-amd64 @bookworm-backports
nvidia-driver @bookworm-backports
Этот механизм предназначен для приоритетной установки критически важных пакетов с сохранением их фильтров и условий.
-
Принцип: Файл, указанный через флаг
-P, содержит шаблоны regex (по одному на строку, без фильтров). CondinAPT сканирует все очереди, находит пакеты, совпадающие с этими шаблонами, и переносит их (со всеми фильтрами и условиями) в специальную "Приоритетную очередь", которая выполняется первой. -
Сопоставление шаблонов: Используется bash-оператор сопоставления с regex (
=~). Шаблоны могут быть как простыми именами пакетов, так и сложными регулярными выражениями. - Сохранение контекста: В отличие от простых приоритетных списков, этот механизм сохраняет все условия, фильтры и указания релиза из исходного списка пакетов.
-
Переопределение: Совпавшие пакеты автоматически удаляются из своих исходных очередей (как обычных, так и целевых с
@release) и переносятся в приоритетные очереди. Целевые релизы сохраняются в отдельных приоритетных целевых очередях.
Пример 1: Совпадение по имени пакета
-
packages.list:
git +st=full-server # Will only be installed for full servers gpg -st=minimal # Will be installed in all types except minimal curl # Always installed wget +d=trixie # Only for trixie vim +env=development # Only for development environment
* **`priority.list`:**
```text
^gpg$
^git$
-
Анализ:
-
CondinAPT читает
priority.listи понимает, что пакеты, совпадающие с шаблонами^gpg$и^git$, должны быть установлены первыми. -
Он сканирует
packages.listи находит строкуgit +st=full-server. Так какgitсовпадает с шаблоном, вся эта строка (с фильтром+st=full-server) переносится в приоритетную очередь. -
Аналогично,
gpg -st=minimalпереносится в приоритетную очередь с сохранением фильтра-st=minimal. -
Итоговый план:
-
Приоритетная очередь: Установить
git +st=full-serverиgpg -st=minimal(фильтры сохраняются и проверяются). -
Обычная очередь:
curl,wget +d=trixie,vim +env=development.
-
Приоритетная очередь: Установить
-
Пример 2: Совпадение по regex-шаблону
-
packages.list:
linux-image-6.1.0-amd64 +arch=amd64 linux-headers-6.1.0-amd64 +arch=amd64 firmware-linux build-essential nginx +st=server
* **`priority.list`:**
```text
^linux-.*
^firmware-.*
-
Анализ:
-
Шаблон
^linux-.*совпадает сlinux-image-6.1.0-amd64иlinux-headers-6.1.0-amd64. -
Шаблон
^firmware-.*совпадает сfirmware-linux. -
Итоговый план:
-
Приоритетная очередь:
linux-image-6.1.0-amd64 +arch=amd64,linux-headers-6.1.0-amd64 +arch=amd64,firmware-linux. -
Обычная очередь:
build-essential,nginx +st=server.
-
Приоритетная очередь:
-
Позволяет увидеть, какие пакеты будут установлены, без фактической установки:
./condinapt -l packages.list -c system.conf -sПример вывода:
I: Installation Queue #1:
I: Simulation mode ON. These packages would be installed: firefox-esr vlc htop
I: Simulation mode ON. No installation will be performed.
Примечание: В режиме симуляции скрипт завершает работу с кодом выхода 1.
Проверяет, какие пакеты из списка уже установлены в системе:
./condinapt -l packages.list -c system.conf -CПоведение:
- Показывает ошибки для неустановленных пакетов
- Возвращает код выхода 1, если есть неустановленные пакеты
- В конце выводит команду для установки отсутствующих пакетов
Подробный вывод (-v):
- Показывает подробную информацию о проверках фильтров
- Отображает результаты для каждого пакета
Очень подробный вывод (-vv):
- Максимальная детализация процесса
- Показывает все промежуточные этапы
Трассировка команд (-x):
- Включает
set -xдля отладки скрипта - Показывает выполнение каждой команды
Пример с отладкой:
./condinapt -l packages.list -c system.conf -vv -xПринудительно запускает apt update перед установкой CondinAPT:
./condinapt -l packages.list -c system.conf -fCondinAPT может работать с массивами переменных в конфигурационном файле:
system.conf:
SUPPORTED_ARCHITECTURES=("amd64" "i386" "arm64")
AVAILABLE_ENVIRONMENTS=("production" "staging" "development")filters.map:
arch=SUPPORTED_ARCHITECTURES
env=AVAILABLE_ENVIRONMENTS
packages.list:
<a id="install-for-any-supported-architecture"></a>
# Install for any supported architecture
multilib-support +arch=amd64
<a id="install-for-any-available-environment"></a>
# Install for any available environment
monitoring-tools +env=production
CondinAPT поддерживает особые пакеты, требующие специальной обработки:
Виртуальные пакеты:
-
qemu-kvm— обрабатывается как виртуальный пакет
Механизм обработки:
- CondinAPT проверяет, является ли пакет виртуальным с помощью команды
apt-cache show - Если пакет помечен как "чисто виртуальный", он считается доступным для установки
- Список специальных пакетов задаётся в массиве
SPECIAL_PACKAGESвнутри скрипта:SPECIAL_PACKAGES=("qemu-kvm")
Расширение списка: Чтобы добавить новые специальные пакеты, необходимо отредактировать массив SPECIAL_PACKAGES в коде CondinAPT.
Если пакет помечен как обязательный, но не найден в репозиториях, CondinAPT:
- Выводит сообщение об ошибке
- Прерывает выполнение (кроме режима симуляции)
- Возвращает код выхода 1
Пример:
!essential-package +pv=standard
Если essential-package не найден в репозиториях, выполнение будет прервано.
Гибкие версии (=):
- Если точная версия недоступна, устанавливается любая доступная версия
- Выдается предупреждение о недоступности запрошенной версии
Строгие версии (==):
- Если точная версия недоступна, пакет пропускается
- Если пакет обязательный (
!), выполнение прерывается
CondinAPT автоматически удерживает версии пакетов в следующих случаях:
- Когда была установлена именно запрошенная версия
- Для пакетов с
==VERSION, если версия найдена и установлена - Для пакетов с
=VERSION, если найдена и установлена именно эта версия
CondinAPT легко интегрируется в сборочные системы и автоматизированные скрипты. Подробнее о синтаксисе файла пакетов смотрите в разделе Синтаксис файла списка пакетов.
В автоматизированном скрипте (install.sh):
#!/bin/bash
set -e
<a id="define-base-paths"></a>
# Define base paths
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
CONFIG_DIR="${SCRIPT_DIR}/config"
<a id="install-packages-via-condinapt"></a>
# Install packages via CondinAPT
./condinapt \
-l "${SCRIPT_DIR}/packages.list" \
-c "${CONFIG_DIR}/system.conf" \
-m "${CONFIG_DIR}/filters.map"Пример файла сопоставления фильтров (filters.map):
<a id="basic-system-parameters-1"></a>
# Basic system parameters
d=DISTRIBUTION
arch=ARCHITECTURE
st=SYSTEM_TYPE
env=ENVIRONMENT
<a id="additional-features"></a>
# Additional features
feat=FEATURES
locale=LOCALE
version=VERSION
Пример конфигурации (system.conf):
<a id="basic-parameters"></a>
# Basic parameters
DISTRIBUTION="bookworm"
ARCHITECTURE="amd64"
SYSTEM_TYPE="server"
ENVIRONMENT="production"
<a id="system-capabilities"></a>
# System capabilities
FEATURES="web,database,monitoring"
LOCALE="en_US"
VERSION="1.0"packages.list:
<a id="basic-multimedia-codecs---always"></a>
# Basic multimedia codecs - always
gstreamer1.0-plugins-base
gstreamer1.0-plugins-good
<a id="additional-codecs---not-for-minimal-installation"></a>
# Additional codecs - not for minimal installation
gstreamer1.0-plugins-bad -st=minimal
gstreamer1.0-plugins-ugly -st=minimal
gstreamer1.0-libav -st=minimal
<a id="professional-tools---only-for-full-configuration"></a>
# Professional tools - only for full configuration
ffmpeg +st=media-server
vlc +st=media-server
---
<a id="distribution-specific-packages-from-backports-for-older-distributions"></a>
# Distribution-specific packages from backports for older distributions
ffmpeg @bookworm-backports +d=bookworm
packages.list:
<a id="basic-web-server-components"></a>
# Basic web server components
nginx
openssl
<a id="database---only-for-full-installations"></a>
# Database - only for full installations
mysql-server +st=full-server -{env=minimal}
postgresql +st=database-server
<a id="php---for-web-servers"></a>
# PHP - for web servers
php-fpm +feat=php
php-mysql +{feat=php&st=full-server}
<a id="monitoring---not-for-development-environment"></a>
# Monitoring - not for development environment
prometheus-node-exporter -env=development
htop +env=production
packages.list:
<a id="basic-containerization-tools"></a>
# Basic containerization tools
docker.io
containerd
<a id="kubernetes---only-for-cluster-installations"></a>
# Kubernetes - only for cluster installations
kubectl +st=k8s-node
kubelet +st=k8s-master
kubeadm +st=k8s-master
<a id="container-monitoring"></a>
# Container monitoring
docker-compose +env=development
portainer +feat=gui
<a id="network-tools---exclude-for-minimal-installations"></a>
# Network tools - exclude for minimal installations
bridge-utils -st=minimal
iptables-persistent -st=minimal
packages.list:
<a id="complex-conditions-for-databases"></a>
# Complex conditions for databases
postgresql +{st=database-server&env=production} +arch=amd64
mysql-server +{st=web-server|st=full-server} -env=minimal
<a id="monitoring-with-exclusions"></a>
# Monitoring with exclusions
prometheus +env=production -st=desktop
grafana +{env=production|env=staging} +feat=monitoring
<a id="alternatives-with-conditions"></a>
# Alternatives with conditions
nginx +st=web-server || apache2 +st=legacy-server || lighttpd -st=full-server
<a id="localization-for-different-environments"></a>
# Localization for different environments
language-pack-en +locale=en_US +env=production
language-pack-ru +locale=ru_RU -{env=minimal&st=embedded}
fonts-dejavu +{locale=ru_RU|locale=de_DE} +feat=gui
- Группировка по функциональности:
#=== System ===
systemd
dbus
#=== Network ===
network-manager
wireless-tools
#=== Multimedia ===
pulseaudio
alsa-utils
- Использование очередей для зависимостей:
<a id="base-system---first-queue"></a>
# Base system - first queue
build-essential
pkg-config
---
<a id="development-libraries---second-queue"></a>
# Development libraries - second queue
libgtk-3-dev
libqt5-dev
---
<a id="applications---third-queue"></a>
# Applications - third queue
gedit
qtcreator
- Оптимизация условий:
<a id="inefficient"></a>
# Inefficient
package1 +st=server +env=production
package2 +st=server +env=production
package3 +st=server +env=production
<a id="better-to-group"></a>
# Better to group
package1 +{st=server&env=production}
package2 +{st=server&env=production}
package3 +{st=server&env=production}
- Используйте приоритетные очереди для критически важных пакетов
- Минимизируйте количество очередей
- Группируйте связанные пакеты в одну очередь
- Используйте кеширование APT для крупных сборок
Проблема: Пакет не устанавливается, несмотря на корректные условия
Решение: Проверьте с флагом -vv для подробной информации о фильтрах
Проблема: CondinAPT завершает работу из-за обязательного пакета Решение: Проверьте наличие пакета в репозиториях или используйте резервный вариант. См. раздел Обработка ошибок и восстановление
Проблема: Неожиданное поведение с версиями пакетов
Решение: Используйте режим симуляции (-s) для проверки
<a id="check-a-specific-package"></a>
# Check a specific package
echo "package-name +condition" | ./condinapt -l /dev/stdin -c system.conf -s -vv
<a id="check-the-entire-list-in-simulation-mode"></a>
# Check the entire list in simulation mode
./condinapt -l packages.list -c system.conf -s -vv<a id="check-without-installation"></a>
# Check without installation
./condinapt -l packages.list -c system.conf -C
<a id="view-package-information"></a>
# View package information
apt-cache policy package-name
apt-cache madison package-name🌐 Languages
📋 About MiniOS
🚀 Installation
⚙️ Configuration
🛡️ Administration
🛠️ Development
📋 Über MiniOS
🚀 Installation
- Schnellstartanleitung
- Hardware-Kompatibilität
- MiniOS Installation
- MiniOS Installer
- USB-Erstellungstools
⚙️ Konfiguration
🛡️ Administration
🛠️ Entwicklung
📋 Acerca de MiniOS
🚀 Instalación
- Guía de Inicio Rápido
- Compatibilidad de Hardware
- Instalando MiniOS
- Instalador de MiniOS
- Herramientas para Crear USB
⚙️ Configuración
- Menús de Arranque
- Parámetros de Arranque
- Archivo de Configuración
- Parámetros de live-config
- Gestión de Sesiones
🛡️ Administración
- Lista de Paquetes
- Gestión del Kernel
- Endurecimiento de Seguridad
- Optimización de Rendimiento
- Virtualización
🛠️ Desarrollo
📋 À propos de MiniOS
🚀 Installation
- Guide de démarrage rapide
- Compatibilité matérielle
- Installation de MiniOS
- Programme d’installation MiniOS
- Outils de création USB
⚙️ Configuration
- Menus de démarrage
- Paramètres de démarrage
- Fichier de configuration
- Paramètres live-config
- Gestion de session
🛡️ Administration
- Liste des paquets
- Gestion du noyau
- Renforcement de la sécurité
- Optimisation des performances
- Virtualisation
🛠️ Développement
📋 Tentang MiniOS
🚀 Instalasi
- Panduan Mulai Cepat
- Kompatibilitas Perangkat Keras
- Menginstal MiniOS
- Installer MiniOS
- Alat Pembuatan USB
⚙️ Konfigurasi
🛡️ Administrasi
🛠️ Pengembangan
📋 Informazioni su MiniOS
🚀 Installazione
- Guida Rapida
- Compatibilità Hardware
- Installazione di MiniOS
- Installatore MiniOS
- Strumenti per Creare USB
⚙️ Configurazione
🛡️ Amministrazione
- Elenco Pacchetti
- Gestione Kernel
- Rafforzamento della Sicurezza
- Ottimizzazione Prestazioni
- Virtualizzazione
🛠️ Sviluppo
📋 Sobre o MiniOS
🚀 Instalação
- Guia de Início Rápido
- Compatibilidade de Hardware
- Instalando o MiniOS
- Instalador do MiniOS
- Ferramentas de Criação de USB
⚙️ Configuração
- Menus de Boot
- Parâmetros de Boot
- Arquivo de Configuração
- Parâmetros live-config
- Gerenciamento de Sessão
🛡️ Administração
- Lista de Pacotes
- Gerenciamento de Kernel
- Reforço de Segurança
- Otimização de Desempenho
- Virtualização
🛠️ Desenvolvimento
📋 О MiniOS
🚀 Установка
- Краткое руководство
- Совместимость с оборудованием
- Установка MiniOS
- Установщик MiniOS
- Инструменты для создания USB
⚙️ Конфигурация
🛡️ Администрирование
🛠️ Разработка