Lokální testování a ladění
Před podáním aplikace musíte důkladně otestovat celý životní cyklus na zařízení TNAS.
Rychlé nastavení vývojového prostředí TOS7:
-
Možnost A: Virtuální stroj s Ubuntu 22.04 (doporučeno)
- Stáhněte si VirtualBox nebo VMware
- Importujte oficiální vývojářský VM TOS7 z TOS Developer Platform
- VM obsahuje předkonfigurované nástroje TOS7 a simulované služby
-
Možnost B: Vývojový kontejner založený na Dockeru
docker run -it --name tos7-dev -v $(pwd):/workspace ubuntu:22.04 /bin/bash
apt-get update && apt-get install -y dpkg-dev lintian systemd -
Možnost C: Fyzické zařízení TNAS (pro konečné testování)
- Konečné ověření musí být provedeno na skutečném zařízení před podáním
- Musí běžet TOS 7.0 nebo novější
- Povolte přístup SSH pro ladění
Testování aplikací Deb
# 1. Install the deb package
sudo dpkg -i <appid>_<version>_amd64.deb
# 2. Check if the service is running
sudo systemctl status <appid>
# 3. View service logs (real-time)
sudo journalctl -u <appid> -f
# 4. View recent logs
sudo journalctl -u <appid> --since "1 hour ago"
# 5. Check if the Web UI is accessible (Web apps)
curl http://localhost:<port>
# 6. Test start/stop
sudo systemctl stop <appid>
sudo systemctl start <appid>
sudo systemctl restart <appid>
# 7. Test uninstallation
sudo dpkg --remove <appid> # Keep configuration
sudo dpkg --purge <appid> # Complete removal
# 8. Verify cleanup (no residual files/services)
systemctl list-unit-files | grep <appid>
# Check runtime data directory
ls /Volume*/@apps/<appid> 2>/dev/null
# Check persistent data (shared folder)
ls /Volume*/<appid> 2>/dev/null
# Check system user
id <appid> 2>/dev/null
# 9. Test upgrade path
sudo dpkg -i <appid>_0.9.0_amd64.deb # Install old version
# ... Add some data to /Volume*/<appid>/ ...
sudo dpkg -i <appid>_1.0.0_amd64.deb # Upgrade to new version
# Verify data is preserved and migrated
Poznámka:
*v/Volume*/představuje číslo svazku (např. Volume1, Volume2) zvolené uživatelem při instalaci.
/Volume*/@apps/<appid>/— Běhová data aplikace (protokoly, mezipaměť, dočasné soubory)/Volume*/<appid>/— Perzistentní uživatelská data (sdílená složka, vytvořená aplikací)
Testování aplikací Docker
# 1. Ensure DockerEngine is installed and running
# Docker Engine is available in the TOS App Center — users will be prompted to install it if not already present.
sudo systemctl status docker
# 2. Start the application
docker-compose -f docker-compose.yml up -d
# 3. Check container status
docker ps | grep <appid>
# 4. View container logs (real-time)
docker logs -f <appid>
# 5. Check resource usage
docker stats <appid>
# 6. Check if the Web UI is accessible
curl http://localhost:<port>
# 7. Test stop/restart
docker-compose -f docker-compose.yml down
docker-compose -f docker-compose.yml up -d
# 8. Test data persistence
docker-compose -f docker-compose.yml down
docker-compose -f docker-compose.yml up -d
# Verify data still exists in /Volume*/DockerAppData/<appid>/ and /Volume*/<appid>/
# 9. Test health check
docker inspect --format='{{.State.Health.Status}}' <appid>
# 10. Cleanup
docker-compose -f docker-compose.yml down -v
Sada nástrojů pro ladění vývojáře
Skript pro ladění jedním kliknutím:
Uložte jako debug.sh a spusťte pro validaci své aplikace:
#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 <appid>"
exit 1
fi
APPID="$1"
echo "=== TOS7 App Debug: $APPID ==="
echo "--- Service Status ---"
systemctl status "$APPID" 2>/dev/null || echo "Service not found"
echo "--- Processes ---"
pgrep -a -f "/Volume*/@apps/$APPID/" 2>/dev/null || echo "No related processes found"
echo "--- Ports ---"
ss -tlnp | grep "$APPID"
echo "--- Runtime Data Directory ---"
ls -laR "/Volume*/@apps/$APPID/" 2>/dev/null
echo "--- Persistent Data (Shared Folder) ---"
ls -laR "/Volume*/$APPID/" 2>/dev/null
echo "--- Recent Errors ---"
journalctl -u "$APPID" -p err --since "10 minutes ago" --no-pager
echo "--- Disk Usage ---"
du -sh "/Volume*/@apps/$APPID/" "/Volume*/$APPID/" 2>/dev/null
echo "=== Debug Complete ==="
Ladění služeb
# Verify service file validity
systemd-analyze verify /etc/systemd/system/<appid>.service
# Check service dependencies
systemd-analyze dump | grep -A5 <appid>
# Check port listening
ss -tlnp | grep <port>
# Check process details
ps aux | grep <appid>
# Check runtime data directory
ls -laR /Volume*/@apps/<appid>/
# Check persistent data (shared folder)
ls -laR /Volume*/<appid>/
# View systemd error logs
journalctl -u <appid> -p err
# View system logs
grep <appid> /var/log/syslog
Ladění Dockeru
# Enter a running container
docker exec -it <appid> /bin/sh
# Inspect container details
docker inspect <appid>
# Check resource limits
docker stats --no-stream <appid>
# Check network
docker network ls
docker network inspect <network_name>
# View container filesystem changes
docker diff <appid>
# View image layers
docker history <image>
Rychlý vývojový cyklus
Rychlá iterace během vývoje:
# Deb application: quick reinstall
sudo dpkg --purge <appid> && sudo dpkg -i <appid>_<version>_amd64.deb
# Docker application: quick rebuild
docker-compose down && docker-compose up -d --build
# Tail logs while testing
journalctl -u <appid> -f & # Deb
docker logs -f <appid> & # Docker
Běžné problémy a řešení
| Problém | Možná příčina | Řešení |
|---|---|---|
| Služba se nespustí | Chybějící závislosti nebo nesprávná cesta | Zkontrolujte journalctl -u <appid>, ověřte cestu ExecStart |
| Konflikt portů | Jiná služba používá stejný port | ss -tlnp | grep <port>, přepněte na dostupný port |
| Odepřeno oprávnění | Nesprávné vlastnictví souboru nebo oprávnění | Ověřte User/Group v souboru služby, zkontrolujte vlastnictví souboru |
| Web UI nedostupné | Služba nenaslouchá nebo firewall blokuje | Zkontrolujte, zda služba běží, ověřte vazbu portu (0.0.0.0 ne 127.0.0.1) |
| Kontejner okamžitě končí | Chyba aplikace uvnitř kontejneru | docker logs <appid>, zkontrolujte entrypoint/command |
| Data ztracena po restartu | Není nakonfigurováno připojení svazku | Přidejte mapování svazků v docker-compose.yml |
| Aplikace rozbitá po aktualizaci TOS | Změna ABI nebo konflikt služeb | Zkontrolujte low_version, otestujte na nové verzi TOS |
| Konfigurace se nenačte | Nesprávná cesta konfigurace nebo oprávnění | Ověřte WorkingDirectory a cestu konfiguračního souboru |
| Oprávnění konfigurace ztracena po upgradu | chown/chmod není znovu aplikován v postinst | Přidejte chown -R <appid>:<appid> do skriptu postinst |
| Zbytkový soubor socketu způsobí selhání spuštění | Socket z předchozího běhu není vyčištěn | Před spuštěním služby přidejte rm -f /var/api/<appid>.sock |
| Selhání znovunačtení Nginx | Neplatná syntaxe konfigurace Nginx | Před znovunačtením ověřte příkazem nginx -t |
| Nesprávná oprávnění svazku Docker | Neshoda UID/GID mezi hostitelem a kontejnerem | Použijte proměnné prostředí PUID/PGID odpovídající uživateli hostitele |
| Služba se spustí dříve, než je síť připravena | V jednotce systemd chybí After=network.target | Přidejte After=network.target a Wants=network.target |
| Deb se neinstaluje kvůli nesplněným závislostem | Chybí Depends v DEBIAN/control | Chybějící systémová knihovna → přidejte odpovídající název balíčku do Depends (DEBIAN/control); chybějící závislost na jiné aplikaci → přidejte do pole depend v config.ini |