Specifikace režimu dvojitého balíčku
V režimu dvojitého balíčku zůstává původní balíček aplikace (zdrojový balíček deb) beze změny, přičemž je dodáván další datový balíček aplikace (datový balíček deb). Datový balíček deb obsahuje konfigurační soubory požadované systémem TOS 7.0 a oba jsou zabaleny do archivu tar.gz pro podání.
Pravidlo pojmenování datového balíčku: <appid>.deb (doporučeno odpovídat config.ini.id, vše malými písmeny)
Vnitřní struktura souborů datového balíčku:
<appid>.deb
├── DEBIAN/
│ ├── control
│ └── postinst
└── usr/
└── local/
└── <appid>/
├── config.ini
├── <appid>.lang
├── images/
│ └── icons/
│ └── <appid>.svg
├── webui.bz2 # Required for WebUI applications
└── nginx/ # Only needed for external open
└── <appid>.conf
DEBIAN/postinst datového balíčku:
#!/bin/bash
set -e
# Ensure correct configuration file permissions
chmod 644 /usr/local/<appid>/config.ini 2>/dev/null || true
chmod 644 /usr/local/<appid>/<appid>.lang 2>/dev/null || true
chmod 644 /usr/local/<appid>/images/icons/<appid>.svg 2>/dev/null || true
exit 0
Poznámky k config.ini datového balíčku:
- Cesta
iconje pevně nastavena na/images/icons/<appid>.svg(odpovídá názvu souboru ikony datového balíčku) idmusí přesně odpovídat poliidv config.iniversionmusí přesně odpovídat poliVersionv metadatech zdrojového balíčkuapplication_typemusí být nastaveno nadeb-TarGzpackagemusí odpovídat poliPackagev DEBIAN/control datového balíčku
Vnitřní struktura souborů zdrojového balíčku:
<package>.deb
├── DEBIAN/
│ ├── control
│ ├── preinst
│ ├── postinst
│ ├── prerm
│ └── postrm
└── usr/
└── local/
└── <appid>/
├── bin/
│ └── <binary_name>
├── depends/ # If dependencies exist
│ ├── bin/
│ ├── lib/
│ └── ...
└── init.d/
└── <system_id>.service
Struktura podávacího archivu:
<appid>_<platform>.tar.gz
├── <appid>.deb # Deb data package
└── <package>.deb # Deb source package
Struktura dat v úložišti GitHub (režim dvojitého balíčku):
<appid>_<platform>.tar.gz
├── <appid>.deb # Application data package
└── <package>.deb # Deb source package (original application package)
Povinná omezení režimu dvojitého balíčku:
| Omezení | Popis | Následek porušení |
|---|---|---|
| Pořadí instalace | Nejprve musí být nainstalován zdrojový balíček (<package>.deb), poté datový balíček (<appid>.deb). Datový balíček závisí na zdrojovém balíčku. | Selhání instalace |
| Přísná konzistence verzí | Version obou balíčků musí být přesně stejná. Jakákoli neshoda verzí spouští automatické zamítnutí. | Automatické zamítnutí |
| Žádné binární soubory v datovém balíčku | Datový balíček (<appid>.deb) nesmí obsahovat žádné spustitelné binární soubory, zkompilovaný kód ani knihovny specifické pro systém. Povoleny jsou pouze konfigurační soubory, ikony, jazykové soubory, konfigurace nginx a další statické prostředky. | Zachyceno ve fázi automatické validace před podáním, bez vstupu do ruční recenze. |
| Architektura datového balíčku | Architecture datového balíčku musí být all a nesmí být amd64 ani arm64. Konfigurační soubory jsou nezávislé na architektuře. | Automatické zamítnutí |
| Nezávislost zdrojového balíčku | Zdrojový balíček deb musí být samostatně instalovatelný na systému TOS 7.0 pomocí příkazu dpkg -i. | Selhání instalace |
| Deklarace závislostí | Pole Depends datového balíčku musí obsahovat název zdrojového balíčku a doporučuje se také zadat verzi. | Zamítnutí |
| Vlastnictví souboru služby systemd | Soubor služby systemd (.service) musí být ve zdrojovém balíčku; datový balíček jej nesmí obsahovat. Datový balíček odpovídá pouze za konfiguraci a zobrazení platformy TOS. | Zamítnutí |
| Pořadí odinstalace | Při odinstalaci nejprve odeberte datový balíček a poté zdrojový balíček. Odinstalace datového balíčku neovlivní běhová data zdrojového balíčku. | — |
Proces instalace a odinstalace:
# Installation order
sudo dpkg -i <package>.deb # 1. Install deb source package first
sudo dpkg -i <appid>.deb # 2. Then install deb data package
# Uninstallation order
sudo dpkg --remove <appid> # 1. Uninstall data package first
sudo dpkg --purge <package> # 2. Then uninstall source package (`<package>` is the `Package` field value declared in the source package's DEBIAN/control, which is usually different from the data package's `<appid>`)