CondinAPT: Panduan Lengkap Instalasi Paket Bersyarat
CondinAPT adalah alat serbaguna untuk mengotomatisasi instalasi paket di sistem berbasis Debian (Debian, Ubuntu, dan turunannya). Fitur utamanya adalah kemampuan untuk mendefinisikan kondisi dan aturan kompleks untuk instalasi setiap paket berdasarkan konfigurasi sistem apa pun.
Area Penerapan:
- Sistem build distribusi Linux
- Otomatisasi setup server dan workstation
- Deploy berbagai konfigurasi sistem
- Manajemen paket di container Docker
- Pipeline CI/CD untuk setup environment
- Pembuatan image instalasi kustom
Daftar Isi
Dasar-dasar
Sintaks dan Kapabilitas
Mode Operasi
Penggunaan Lanjutan
Contoh Praktis
Fitur Utama:
- Instalasi Bersyarat: Instal paket berdasarkan filter yang fleksibel (+, -).
- Konfigurasi Eksternal: Pemisahan total antara logika (daftar paket) dan data (parameter sistem).
- Antrean Instalasi: Membagi proses menjadi beberapa tahap berurutan untuk menyelesaikan dependensi.
- Antrean Prioritas: Menjamin instalasi paket penting terlebih dahulu.
- Logika Kompleks: Mendukung operator "AND" (
&&), "OR" (||), serta filter grup (+{a|b},-{a&b}). - Keterbacaan: Mendukung komentar dan baris kosong untuk menata daftar.
- Kompatibilitas Mundur: Mendukung daftar paket sederhana tanpa syarat.
Cara Kerja dan Komponen Inti
CondinAPT beroperasi dengan empat berkas utama:
Script
condinapt: Inti utama, berisi seluruh logika pemrosesan.Berkas konfigurasi utama (
-c): Berkas yang berisi variabel bash yang mendeskripsikan lingkungan saat ini.Contoh (
system.conf):bashDISTRIBUTION="bookworm" SYSTEM_TYPE="server" ENVIRONMENT="production" LOCALE="en_US" FEATURES="web,database"Berkas pemetaan filter (
-m): Menghubungkan prefix pendek (yang digunakan dalam daftar paket) ke nama variabel dari berkas konfigurasi utama. Berkas ini opsional. Jika filter tidak ada di berkas pemetaan filter, maka akan digunakan sebagai nama variabel dari berkas konfigurasi utama. Jika variabel tidak ditemukan, CondinAPT akan mendeklarasikannya kosong.Contoh (
filters.map):textd=DISTRIBUTION st=SYSTEM_TYPE env=ENVIRONMENT arch=ARCHITECTURE feat=FEATURESBerkas daftar paket (
-l): Berkas utama yang mendeskripsikan apa saja yang akan diinstal dan dalam kondisi apa.
Mulai Cepat
Untuk mengenal CondinAPT dengan cepat, buat contoh sederhana berikut:
1. Buat berkas konfigurasi config.conf:
# Basic system parameters
DISTRIBUTION="bookworm"
SYSTEM_TYPE="server"
ENVIRONMENT="production"2. Buat daftar paket packages.list:
# Base packages - always installed
vim
curl
# Packages only for servers
nginx +SYSTEM_TYPE=server
mysql-server +SYSTEM_TYPE=server
# Exclude packages for production environment
debug-tools -ENVIRONMENT=production3. Jalankan instalasi:
bash
./condinapt -l packages.list -c config.conf4. Atau uji dengan mode simulasi:
bash
./condinapt -l packages.list -c config.conf -sPenggunaan
Baris Perintah
./condinapt [OPTIONS]| Flag | Long Flag | Argumen | Deskripsi |
|---|---|---|---|
-l | --package-list | PATH | (Wajib) Path ke berkas daftar paket. |
-c | --config | PATH | (Wajib) Path ke berkas konfigurasi utama. |
-m | --filter-mapping | PATH | (Opsional) Path ke berkas pemetaan filter. |
-P | --priority-list | PATH | (Opsional) Path ke berkas filter prioritas. Berkas berisi pola regex untuk mencocokkan paket. Paket yang cocok akan dipindahkan ke antrian prioritas (dengan filter tetap dipertahankan). |
-s | --simulation | Mode simulasi. Paket tidak akan diinstal. | |
-C | --check-only | Hanya memeriksa apakah paket sudah terinstal. Mengembalikan exit code 1 jika ada paket yang belum terinstal. Di akhir, menampilkan perintah untuk menginstal paket yang belum ada. | |
-v / -vv | --verbose / --very-verbose | Output verbose / sangat verbose. | |
-x | --xtrace | Aktifkan pelacakan perintah set -x. | |
-f | --force | Paksa pembaruan daftar paket sebelum instalasi. Secara default, update dilewati jika /var/cache/apt/pkgcache.bin ada. | |
-h | --help | Tampilkan bantuan. |
Sintaks Berkas Daftar Paket
Struktur Dasar
Ini adalah inti dari CondinAPT. Seluruh logika dideskripsikan di sini.
Setiap baris dalam berkas daftar paket terdiri dari dua bagian utama:
- Nama paket dengan spesifikasi versi dan rilis (opsional)
- Filter kondisi - mendefinisikan kondisi di mana paket akan diinstal
Dasar untuk semua contoh di bawah: Untuk semua contoh berikut, diasumsikan bahwa berkas
system.confdanfilters.mapdari bagian Cara Kerja dan Komponen Inti digunakan.
DISTRIBUTION="bookworm"SYSTEM_TYPE="server"ENVIRONMENT="production"
Struktur Nama Paket
Nama sederhana:
vimVersi paket:
package=version— syarat versi longgar. Jika versi yang diminta tidak tersedia, akan diinstal versi yang tersedia.git=2.25.1package==version— syarat ketat. Jika versi tidak ditemukan, instalasi dibatalkan dengan error.curl==7.68.0
Spesifikasi rilis: Rilis ditentukan menggunakan simbol @, yang memungkinkan mengaitkan instalasi ke branch repository tertentu.
telegram@bookworm-backports
kernel-image-6.5.0@trixie-backportsStruktur Berkas
- Nama paket: Setiap paket atau kondisi ditulis pada baris baru.
- Komentar: Baris yang diawali dengan
#, atau teks setelah#pada baris, sepenuhnya diabaikan. - Baris kosong: Diabaikan dan hanya untuk pemisah visual.
#=== Multimedia ===
vlc # Excellent media player
audacious # Another media player
#=== Graphics ===
gimpFilter dan Kondisi
Filter memungkinkan Anda menetapkan kondisi tambahan untuk pemilihan paket. Filter membandingkan nilai variabel sistem (arsitektur, distribusi, lingkungan kerja) dengan yang ditentukan dalam berkas konfigurasi.
Filter Tunggal
+(Positif): Kondisi bernilai benar jika nilai variabel sesuai. Format:+<prefix>=<value>- Baris:
nginx +st=server - Analisis:
SYSTEM_TYPEsama dengan"server". Kondisi benar. - Hasil:
nginxakan diinstal.
- Baris:
Beberapa filter positif dengan prefix sama: Bertindak sebagai kondisi OR. Format:
+<prefix>=<value1> +<prefix>=<value2>- Baris:
debug-tools +env=development +env=testing - Analisis:
ENVIRONMENTsama dengan"production", tidak sesuai dengan"development"maupun"testing". Kondisi salah. - Hasil:
debug-toolstidak akan diinstal.
- Baris:
-(Negatif): Kondisi bernilai benar jika nilai variabel tidak sesuai. Format:-<prefix>=<value>- Baris:
monitoring-tools -st=desktop - Analisis:
SYSTEM_TYPEsama dengan"server", tidak sama dengan"desktop". Kondisi benar. - Hasil:
monitoring-toolsakan diinstal.
- Baris:
Beberapa filter negatif: Paket dikecualikan jika ADA kondisi yang cocok. Format:
-<prefix>=<value1> -<prefix>=<value2>- Baris:
realtek-driver -d=trixie -d=sid - Analisis:
DISTRIBUTIONsama dengan"bookworm", tidak sama dengan"trixie"maupun"sid". Kondisi pengecualian tidak terpenuhi. - Hasil:
realtek-driverakan diinstal.
- Baris:
Filter Grup
+{a|b}(OR untuk inklusi): Bernilai benar jika setidaknya satu kondisi dalam grup bernilai benar.- Baris:
web-server +{st=server|st=web-server} - Analisis:
SYSTEM_TYPEsama dengan"server". Kondisi pertama benar, sudah cukup. - Hasil: Paket akan diinstal.
- Baris:
+{a&b}(AND untuk inklusi): Bernilai benar hanya jika semua kondisi dalam grup bernilai benar.- Baris:
database-tools +{d=bookworm&st=server} - Analisis:
DISTRIBUTIONsama dengan"bookworm"(benar) DANSYSTEM_TYPEsama dengan"server"(benar). - Hasil: Paket akan diinstal.
- Baris:
-{a|b}(OR untuk pengecualian): Paket dikecualikan jika setidaknya satu kondisi bernilai benar.- Baris:
debug-tools -{env=production|st=minimal} - Analisis:
ENVIRONMENTsama dengan"production". Kondisi pertama benar, jadi paket dikecualikan. - Hasil: Paket tidak akan diinstal.
- Baris:
-{a&b}(AND untuk pengecualian): Paket dikecualikan hanya jika semua kondisi bernilai benar.- Baris:
development-tools -{env=production&st=minimal} - Analisis:
ENVIRONMENTsama dengan"production"(benar), tapiSYSTEM_TYPEtidak sama dengan"minimal". Kondisi kedua salah. Grup tidak memicu pengecualian. - Hasil: Paket akan diinstal (jika tidak ada filter lain).
- Baris:
Alternatif
Paket berbeda dapat ditawarkan untuk fungsi yang sama dan diinstal tergantung pada kondisi. Opsi alternatif dipisahkan dengan operator ||.
Penting: Setiap alternatif harus memuat deskripsi lengkap — nama paket (dengan versi dan rilis opsional) dan sekumpulan filter.
Contoh:
postgresql +st=database-server || mysql-server +st=web-server- Jika
SYSTEM_TYPEadalahdatabase-server, postgresql dipilih. - Jika
SYSTEM_TYPEadalahweb-server, mysql-server diinstal.
Operator Logika untuk Paket
||(OR / Fallback): Coba instal bagian kiri. Jika gagal (paket tidak ditemukan atau terfilter), coba bagian kanan.- Baris:
exfatprogs -d=bookworm || exfat-utils - Analisis:
DISTRIBUTIONtidak sama dengan"bookworm", bagian kiri terfilter. CondinAPT lanjut ke bagian kanan.exfat-utilstidak punya filter, jadi akan diinstal. - Hasil:
exfat-utilsakan diinstal.
- Baris:
&&(AND / Konjungsi): Semua bagian harus lolos pengecekan filter untuk masuk ke antrian.Baris:
nginx +st=web-server && php-fpmAnalisis:
SYSTEM_TYPEsama dengan"server", tapi kondisi butuh"web-server". Bagian kiri gagal.Hasil: Tidak ada paket yang diinstal.
Contoh kompleks:
monitoring-tools +env=production && prometheus +env=production && grafana +env=productionHasil: Ketiga paket hanya akan diinstal jika
ENVIRONMENTadalahproduction.
Modifier Khusus
!(Paket Wajib): Jika paket ditandai dengan!, tapi tidak ditemukan di repository, CondinAPT akan membatalkan eksekusi dengan error.- Baris:
!essential-package
- Baris:
@(Spesifikasi Rilis): Instal paket dari rilis Debian/Ubuntu tertentu (misal,bookworm-backports).- Baris:
kernel-image-6.5.0 @trixie-backports
- Baris:
Spesifikasi Versi Paket
CondinAPT memungkinkan kontrol versi paket yang diinstal secara presisi.
Sintaks:
package=VERSION: Mencoba menginstal versi (VERSION) yang ditentukan. Jika tidak tersedia di repository, CondinAPT akan menginstal versi apa pun yang tersedia.- Contoh:
my-app=1.2.3(mencoba instal 1.2.3, jika tidak, misal, 1.2.4)
- Contoh:
package==VERSION: Instalasi ketat versi tertentu. Jika versi ini tidak tersedia di repository, paket tidak akan diinstal. Jika juga ditandai wajib (!), script akan keluar dengan error.- Contoh:
another-app==2.0.0(hanya instal 2.0.0, jika tidak, dilewati atau error jika wajib)
- Contoh:
Perilaku:
- CondinAPT pertama-tama memeriksa apakah versi paket yang diminta sudah terinstal di sistem. Jika ya, paket dianggap sudah terinstal dan dilewati.
- Lalu memeriksa apakah versi yang diminta tersedia di repository (
apt-cache madison). - Jika menggunakan
=(versi longgar):- Jika versi yang diminta tidak tersedia, CondinAPT akan memberi peringatan bahwa versi persis tidak ditemukan.
- Namun, akan tetap mencoba menginstal versi apa pun yang tersedia dari repository.
- Jika menggunakan
==(versi ketat):- Jika versi yang diminta tidak tersedia, CondinAPT tidak akan menginstal paket.
- Jika paket ditandai wajib (
!), script akan membatalkan eksekusi dengan error.
- Penahanan versi (
apt-mark hold):- Jika paket berhasil diinstal dengan versi yang persis diminta (misal, jika
package==VERSIONberhasil, ataupackage=VERSIONmenemukan versi yang sama persis dan menginstalnya), CondinAPT akan otomatis menjalankan perintahapt-mark holduntuk paket tersebut. - Ini mencegah update otomatis paket ke versi baru saat menjalankan
apt upgradeberikutnya.
- Jika paket berhasil diinstal dengan versi yang persis diminta (misal, jika
Contoh Filter Kompleks
Contoh 1: Filter kompleks untuk satu paket
Tugas: Instal database-tools untuk distribusi bookworm, tapi hanya jika tipe sistem adalah server atau database-server, dan bukan untuk environment minimal.
packages.list:
database-tools +d=bookworm +{st=server|st=database-server} -env=minimalAnalisis (dengan konfigurasi kita):
+d=bookworm: Benar.+{st=server|st=database-server}: Benar, karenaSYSTEM_TYPEadalah"server".-env=minimal: Benar, karenaENVIRONMENTadalah"production". Hasil: Semua kondisi benar. Paket akan diinstal.
Contoh 2: Rantai fallback dengan kondisi berbeda
Tugas: Untuk Debian trixie, instal firefox-esr. Untuk bookworm, instal firefox. Untuk kasus lain, instal w3m.
packages.list:
firefox-esr +d=trixie || firefox +d=bookworm || w3mAnalisis:
firefox-esr +d=trixie: Bagian kiri.DISTRIBUTIONadalah"bookworm", kondisi salah.firefox +d=bookworm: Bagian tengah.DISTRIBUTIONadalah"bookworm", kondisi benar.- Karena bagian kedua dari rantai
||berhasil, bagian ketiga (w3m) akan diabaikan. Hasil:firefoxakan diinstal.
Contoh 3: Interaksi antara antrian prioritas dan paket wajib
Tugas: dkms sangat penting untuk pembuatan modul; harus diinstal pertama. Di daftar utama, ditandai wajib, tapi dengan kondisi.
priority.list:text
^dkms$ ^build-essential$
* **`packages.list`:**
```text
!dkms +pv=standard # Mandatory, but with a condition
vimAnalisis:
CondinAPT membaca pola prioritas
^dkms$dan^build-essential$.Baris
!dkms +pv=standardcocok dengan pola^dkms$dan dipindahkan ke antrian prioritas dengan seluruh propertinya: flag wajib (!) dan filter (+pv=standard).Rencana Eksekusi:
- Antrian Prioritas: Instal
!dkms +pv=standard(flag wajib dan filter tetap dipertahankan). - Antrian Normal:
vim.
- Antrian Prioritas: Instal
Hasil: dkms akan diinstal lebih dulu, tetapi filter +pv=standard tetap dievaluasi. Jika kondisi filter tidak terpenuhi, instalasi gagal karena flag ! (wajib).
Antrian Instalasi
Pemisah --- pada baris terpisah membagi daftar menjadi grup (antrian). Paket dari satu antrian diinstal bersama dalam satu pemanggilan apt. Antrian dieksekusi secara berurutan.
Antrian Normal
Contoh:
# Queue 1: Base system
systemd
network-manager
---
# Queue 2: Web server
nginx
php-fpm
---
# Queue 3: Monitoring
prometheusAntrian Target (dengan spesifikasi rilis)
Paket dengan @release otomatis dikelompokkan ke antrian terpisah per rilis:
# Regular packages
vim
git
---
# Packages from backports (create a separate queue)
linux-image-amd64 @bookworm-backports
nvidia-driver @bookworm-backportsAntrian Prioritas
Mekanisme ini untuk instalasi prioritas paket-paket penting sambil mempertahankan filter dan kondisinya.
- Prinsip: Berkas yang ditentukan dengan flag
-Pberisi pola regex (satu pola per baris, tanpa filter). CondinAPT memindai semua antrian, menemukan paket yang cocok dengan pola ini, dan memindahkannya (dengan seluruh filter dan kondisinya) ke "Antrian Prioritas" khusus yang dijalankan pertama. - Pencocokan Pola: Menggunakan pencocokan regex bash (
=~operator). Pola bisa berupa nama paket sederhana atau ekspresi regex kompleks. - Menjaga Konteks: Berbeda dengan daftar prioritas sederhana, mekanisme ini menjaga seluruh kondisi paket, filter, dan spesifikasi rilis dari daftar paket asli.
- Override: Paket yang cocok otomatis dihapus dari antrian asalnya (baik antrian reguler maupun target dengan
@release) dan dipindahkan ke antrian prioritas. Target rilis tetap dipertahankan dalam antrian prioritas target terpisah.
Contoh 1: Pencocokan nama paket sederhana
packages.list:text
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$Analisis:
CondinAPT membaca
priority.listdan tahu bahwa paket yang cocok dengan pola^gpg$dan^git$harus diinstal lebih dulu.Ia memindai
packages.listdan menemukan barisgit +st=full-server. Karenagitcocok dengan pola, seluruh baris ini (dengan filter+st=full-server) dipindahkan ke antrian prioritas.Begitu juga,
gpg -st=minimaldipindahkan ke antrian prioritas dengan filter-st=minimaltetap dipertahankan.Rencana Akhir:
- Antrian Prioritas: Instal
git +st=full-serverdangpg -st=minimal(filter tetap dipertahankan dan dievaluasi). - Antrian Normal:
curl,wget +d=trixie,vim +env=development.
- Antrian Prioritas: Instal
Contoh 2: Pencocokan pola regex
packages.list:text
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-.*Analisis:
Pola
^linux-.*cocok denganlinux-image-6.1.0-amd64danlinux-headers-6.1.0-amd64.Pola
^firmware-.*cocok denganfirmware-linux.Rencana Akhir:
- Antrian Prioritas:
linux-image-6.1.0-amd64 +arch=amd64,linux-headers-6.1.0-amd64 +arch=amd64,firmware-linux. - Antrian Normal:
build-essential,nginx +st=server.
- Antrian Prioritas:
Mode Operasi dan Debugging
Mode Simulasi (-s)
Memungkinkan Anda melihat paket apa saja yang akan diinstal tanpa benar-benar menginstalnya:
./condinapt -l packages.list -c system.conf -sContoh Output:
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.Catatan: Pada mode simulasi, script keluar dengan exit code 1.
Mode Cek (-C)
Memeriksa paket mana dari daftar yang sudah terinstal di sistem:
./condinapt -l packages.list -c system.conf -CPerilaku:
- Menampilkan error untuk paket yang belum terinstal
- Mengembalikan exit code 1 jika ada paket yang belum terinstal
- Di akhir, menampilkan perintah untuk menginstal paket yang belum ada
Mode Debugging
Output Verbose (-v):
- Menampilkan informasi detail tentang pengecekan filter
- Menampilkan hasil untuk setiap paket
Output Sangat Verbose (-vv):
- Detail proses maksimum
- Menampilkan semua langkah antara
Pelacakan Perintah (-x):
- Mengaktifkan
set -xuntuk debugging script - Menampilkan setiap perintah yang dijalankan
Contoh dengan Debugging:
./condinapt -l packages.list -c system.conf -vv -xPaksa Update Cache (-f)
Memaksa CondinAPT menjalankan apt update sebelum instalasi:
./condinapt -l packages.list -c system.conf -fFitur Lanjutan
Dukungan Array pada Konfigurasi
CondinAPT dapat bekerja dengan variabel array di berkas konfigurasi:
system.conf:
SUPPORTED_ARCHITECTURES=("amd64" "i386" "arm64")
AVAILABLE_ENVIRONMENTS=("production" "staging" "development")filters.map:
arch=SUPPORTED_ARCHITECTURES
env=AVAILABLE_ENVIRONMENTSpackages.list:
# Install for any supported architecture
multilib-support +arch=amd64
# Install for any available environment
monitoring-tools +env=productionPaket Khusus
CondinAPT memiliki dukungan bawaan untuk paket-paket khusus yang membutuhkan penanganan spesial:
Paket Virtual:
qemu-kvm- diperlakukan sebagai paket virtual
Mekanisme Penanganan:
- CondinAPT memeriksa apakah paket virtual menggunakan perintah
apt-cache show - Jika paket ditandai sebagai "murni virtual", dianggap tersedia untuk instalasi
- Daftar paket khusus didefinisikan dalam array
SPECIAL_PACKAGESdi dalam script:bashSPECIAL_PACKAGES=("qemu-kvm")
Menambah Daftar: Untuk menambah paket khusus baru, Anda perlu mengedit array SPECIAL_PACKAGES di kode CondinAPT.
Penanganan Error dan Pemulihan
Paket Wajib (!)
Jika paket ditandai sebagai wajib tapi tidak ditemukan di repository, CondinAPT akan:
- Menampilkan pesan error
- Membatalkan eksekusi (kecuali pada mode simulasi)
- Mengembalikan exit code 1
Contoh:
!essential-package +pv=standardJika essential-package tidak ditemukan di repository, eksekusi akan dibatalkan.
Penanganan Versi Tidak Tersedia
Versi Longgar (=):
- Jika versi persis tidak tersedia, akan diinstal versi apa pun yang tersedia
- Peringatan akan muncul tentang ketidaktersediaan versi yang diminta
Versi Ketat (==):
- Jika versi persis tidak tersedia, paket dilewati
- Jika paket wajib (
!), eksekusi dibatalkan
Penahanan Versi (apt-mark hold)
CondinAPT otomatis menahan versi paket pada kasus berikut:
- Ketika versi yang diminta persis berhasil diinstal
- Untuk paket dengan
==VERSION, jika versi ditemukan dan diinstal - Untuk paket dengan
=VERSION, jika versi yang sama persis ditemukan dan diinstal
Integrasi dengan Sistem Build
Penggunaan dalam Script Otomasi
CondinAPT mudah diintegrasikan ke sistem build dan script otomasi. Untuk detail lebih lanjut tentang sintaks berkas paket, lihat bagian Sintaks Berkas Daftar Paket.
Contoh Integrasi Umum:
Dalam script otomasi (install.sh):
#!/bin/bash
set -e
# Define base paths
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
CONFIG_DIR="${SCRIPT_DIR}/config"
# Install packages via CondinAPT
./condinapt \
-l "${SCRIPT_DIR}/packages.list" \
-c "${CONFIG_DIR}/system.conf" \
-m "${CONFIG_DIR}/filters.map"Contoh Konfigurasi Universal
Contoh berkas pemetaan filter (filters.map):
# Basic system parameters
d=DISTRIBUTION
arch=ARCHITECTURE
st=SYSTEM_TYPE
env=ENVIRONMENT
# Additional features
feat=FEATURES
locale=LOCALE
version=VERSIONContoh konfigurasi (system.conf):
# Basic parameters
DISTRIBUTION="bookworm"
ARCHITECTURE="amd64"
SYSTEM_TYPE="server"
ENVIRONMENT="production"
# System capabilities
FEATURES="web,database,monitoring"
LOCALE="en_US"
VERSION="1.0"Contoh Skenario Dunia Nyata
Contoh 1: Server Multimedia
packages.list:
# Basic multimedia codecs - always
gstreamer1.0-plugins-base
gstreamer1.0-plugins-good
# Additional codecs - not for minimal installation
gstreamer1.0-plugins-bad -st=minimal
gstreamer1.0-plugins-ugly -st=minimal
gstreamer1.0-libav -st=minimal
# Professional tools - only for full configuration
ffmpeg +st=media-server
vlc +st=media-server
---
# Distribution-specific packages from backports for older distributions
ffmpeg @bookworm-backports +d=bookwormContoh 2: Web Server dengan Berbagai Konfigurasi
packages.list:
# Basic web server components
nginx
openssl
# Database - only for full installations
mysql-server +st=full-server -{env=minimal}
postgresql +st=database-server
# PHP - for web servers
php-fpm +feat=php
php-mysql +{feat=php&st=full-server}
# Monitoring - not for development environment
prometheus-node-exporter -env=development
htop +env=productionContoh 3: Platform Container
packages.list:
# Basic containerization tools
docker.io
containerd
# Kubernetes - only for cluster installations
kubectl +st=k8s-node
kubelet +st=k8s-master
kubeadm +st=k8s-master
# Container monitoring
docker-compose +env=development
portainer +feat=gui
# Network tools - exclude for minimal installations
bridge-utils -st=minimal
iptables-persistent -st=minimalContoh 4: Penggunaan Filter Lanjutan
packages.list:
# Complex conditions for databases
postgresql +{st=database-server&env=production} +arch=amd64
mysql-server +{st=web-server|st=full-server} -env=minimal
# Monitoring with exclusions
prometheus +env=production -st=desktop
grafana +{env=production|env=staging} +feat=monitoring
# Alternatives with conditions
nginx +st=web-server || apache2 +st=legacy-server || lighttpd -st=full-server
# 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=guiTips Optimasi
Mengatur Daftar Paket
- Mengelompokkan berdasarkan fungsionalitas:
#=== System ===
systemd
dbus
#=== Network ===
network-manager
wireless-tools
#=== Multimedia ===
pulseaudio
alsa-utils- Menggunakan antrean untuk dependensi:
# Base system - first queue
build-essential
pkg-config
---
# Development libraries - second queue
libgtk-3-dev
libqt5-dev
---
# Applications - third queue
gedit
qtcreator- Mengoptimalkan kondisi:
# Inefficient
package1 +st=server +env=production
package2 +st=server +env=production
package3 +st=server +env=production
# Better to group
package1 +{st=server&env=production}
package2 +{st=server&env=production}
package3 +{st=server&env=production}Performa
- Gunakan antrean prioritas untuk paket penting
- Minimalkan jumlah antrean
- Kelompokkan paket terkait dalam satu antrean
- Gunakan caching APT untuk build berukuran besar
Pemecahan Masalah
Masalah Umum
Masalah: Paket tidak terpasang meskipun kondisi sudah benar Solusi: Periksa dengan flag -vv untuk informasi filter yang lebih detail
Masalah: CondinAPT berhenti pada paket wajib Solusi: Periksa ketersediaan paket di repository atau gunakan fallback. Lihat bagian Penanganan Error dan Pemulihan
Masalah: Perilaku tidak terduga pada versi paket Solusi: Gunakan mode simulasi (-s) untuk verifikasi
Debugging Filter
# Check a specific package
echo "package-name +condition" | ./condinapt -l /dev/stdin -c system.conf -s -vv
# Check the entire list in simulation mode
./condinapt -l packages.list -c system.conf -s -vvMemeriksa Ketersediaan Paket
# Check without installation
./condinapt -l packages.list -c system.conf -C
# View package information
apt-cache policy package-name
apt-cache madison package-name