Skip to main content

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:

  1. 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
  2. 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
  3. 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émMožná příčinaŘešení
Služba se nespustíChybějící závislosti nebo nesprávná cestaZkontrolujte journalctl -u <appid>, ověřte cestu ExecStart
Konflikt portůJiná služba používá stejný portss -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 blokujeZkontrolujte, zda služba běží, ověřte vazbu portu (0.0.0.0 ne 127.0.0.1)
Kontejner okamžitě končíChyba aplikace uvnitř kontejnerudocker logs <appid>, zkontrolujte entrypoint/command
Data ztracena po restartuNení nakonfigurováno připojení svazkuPřidejte mapování svazků v docker-compose.yml
Aplikace rozbitá po aktualizaci TOSZměna ABI nebo konflikt služebZkontrolujte low_version, otestujte na nové verzi TOS
Konfigurace se nenačteNesprávná cesta konfigurace nebo oprávněníOvěřte WorkingDirectory a cestu konfiguračního souboru
Oprávnění konfigurace ztracena po upgraduchown/chmod není znovu aplikován v postinstPř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ěnPřed spuštěním služby přidejte rm -f /var/api/<appid>.sock
Selhání znovunačtení NginxNeplatná syntaxe konfigurace NginxPřed znovunačtením ověřte příkazem nginx -t
Nesprávná oprávnění svazku DockerNeshoda UID/GID mezi hostitelem a kontejneremPoužijte proměnné prostředí PUID/PGID odpovídající uživateli hostitele
Služba se spustí dříve, než je síť připravenaV jednotce systemd chybí After=network.targetPřidejte After=network.target a Wants=network.target
Deb se neinstaluje kvůli nesplněným závislostemChybí Depends v DEBIAN/controlChybě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