Le déploiement bloque¶
Une fiche par symptôme d'installation, dans l'ordre des Points de contrôle du guide d'installation. Pour le téléchargement, le High-ID, le stockage et la récupération après panne, voir Diagnostics avancés.
Où lancer ces commandes
Depuis votre dossier de travail, celui qui contient compose.yml. Les chemins sont donc
relatifs : .env, crawler.yml, data/. Les mêmes commandes servent les deux variantes,
directe et VPN.
Docker introuvable, ou installé mais sans réponse¶
- Symptôme.
docker compose versionrépondcommand not found, ou affiche une version1.xdu vieil outildocker-compose(avec un tiret). Ou bien il répond correctement, mais une commande qui interroge le moteur (docker ps,docker compose up -d) échoue surCannot connect to the Docker daemon, sous Windowserror during connect .... - Cause. Dans le premier cas Docker n'est pas installé, ou votre distribution ne fournit que
l'ancien
docker-composev1. Dans le second, le moteur n'est pas démarré :docker compose versionest une commande côté client, elle répond même moteur éteint. - Solution. Installez Docker depuis la documentation officielle, jamais depuis un tutoriel
tiers : https://docs.docker.com/get-started/get-docker/. Puis lancez Docker Desktop et attendez
qu'il s'annonce prêt (Windows, macOS), ou démarrez le service (
sudo systemctl start dockersous Linux).docker psdoit alors répondre par un tableau, même vide.
Une variable obligatoire manque¶
- Symptôme.
docker compose up -drefuse de démarrer quoi que ce soit : Idem pourPGID,AMULE_EC_PASSWORDetAMULE_API_PASSWORD, et pour une variable déclarée mais vide. - Cause. Les quatre variables sont strictement obligatoires :
PUIDetPGIDsont l'identité sous laquelle tourne le crawler et à laquelleed2kdonne ses dossiers, et les deux mots de passe sont écrits dans la configuration d'aMule au démarrage d'ed2k, celui d'amuleapi servant aussi au crawler. Compose refuse avant de démarrer quoi que ce soit. - Solution. Renseignez les quatre dans
.env(copiez.env.examplesi ce n'est pas déjà fait), puisdocker compose up -d. Le détail de chacune est au tableau de l'étape 3. - Variante :
ed2kredémarre en boucle sur une seule ligne de journal, sans traceback Python, qui nomme une variable :PUID must be a numeric id, got 'moi',AMULE_API_PASSWORD must not contain a control character, ou une valeur de port-sync refusée. Le démarrage d'ed2kvérifie ces valeurs avant de lancer amuled, et sort sur la première qui ne convient pas. Corrigez-la dans.env, puisdocker compose up -d.
Cas voisin : un change-me oublié
Si AMULE_EC_PASSWORD ou AMULE_API_PASSWORD est resté à sa valeur d'exemple, votre nœud
démarre avec un mot de passe public. Vérifiez-le ainsi : la commande ne doit rien afficher :
Le change-me restant sur WIREGUARD_PRIVATE_KEY est normal, il ne sert qu'au VPN.
Changer l'un des deux sur un nœud déjà lancé demande un redémarrage du nœud, pas seulement
une édition : voir
« J'ai perdu AMULE_EC_PASSWORD ».
Un conteneur redémarre en boucle¶
- Symptôme.
docker compose psmontre le service enRestartingouExited. Juste après une montée d'image, le crawler peut aussi resterUpplusieurs minutes entre deux échecs (voir la migration qui échoue, ci-dessous). - Diagnostic.
docker compose psdit lequel :p2pwatch(le crawler),ed2k(le client eMule) ou, sous la variante VPN,ed2k-gluetun. Lisez ensuite son journal seul, par exempledocker compose logs p2pwatch. Docker relance le crawler après chacune de ses sorties, donc une erreur au démarrage se voit comme une boucle. Dansed2k, en revanche, s6 relance amuled sur place et le conteneur resteUp; amuleapi, démarré par amuled, écrit dansed2k/amule/amuleapi.log. - Causes fréquentes.
- Configuration invalide (
p2pwatch). Le journal finit parInvalid config, refusing to start: .... Corrigezcrawler.yml,targets.ymloumatcher.yml, puisdocker compose up -d. Vous pouvez valider les trois sans rien démarrer, voir « Valider la configuration ». unable to open database file(p2pwatch) :data/n'appartient pas à votrePUID, voir « Un conteneur ne peut pas écrire dans ses dossiers ».- Journal d'une ligne, sans Python (
ed2k) : voir « Une variable obligatoire manque ». - Une migration qui échoue (
p2pwatch), juste après une montée d'image : le journal contientMigrationError: ..., voir les entrées ci-dessous. Chaque relance compare d'abord la base à sa copie d'avant migration (le journal ditpre-migration copy of ...: comparing with ...) : sur un gros catalogue, cela prend plusieurs minutes et charge le disque, et le service resteUpentre deux échecs.docker compose stop p2pwatcharrête la boucle le temps de décider.
- Configuration invalide (
database or disk is full, juste après une montée d'image
Le journal du crawler contient MigrationError: migration N failed: database or disk is full.
Un disque s'est rempli pendant la migration : celui de Docker, qui reçoit ses fichiers
temporaires (voir Limites connues), ou celui de data/, où le catalogue grandit le
temps d'être réécrit. La migration a été annulée : le catalogue est intact. Vérifiez la place
libre sur les deux, celui de Docker mesuré depuis un conteneur :
Sous Docker Desktop, ce second chiffre est celui de l'image disque de sa machine virtuelle, qui ne grandit que tant que le disque de l'hôte qui la porte a de la place : vérifiez aussi ce disque-là. Son emplacement est affiché dans Settings, Resources, Advanced.
Remède : libérez de la place sur le disque plein (docker image prune retire les images
inutilisées), puis docker compose up -d. La migration repart de zéro et, une fois passée, ne
se rejoue plus.
pre-migration copy of ...: ... bytes needed, juste après une montée d'image
Le journal du crawler contient par exemple MigrationError: pre-migration copy of
/data/catalog.db: 15100000000 bytes needed in /data, 9000000000 free. Une migration en attente
réécrit des lignes : le crawler garde d'abord une
copie d'avant migration de la base, et la place libre de
data/ ne couvre pas cette copie plus la migration. Il a refusé avant d'écrire quoi que ce
soit : la base est intacte.
Remède : libérez sur le disque de data/ au moins la différence entre les deux nombres, en
octets (df -B1 data). Les copies d'avant migration d'une mise à jour déjà aboutie peuvent
partir, pas celle qu'une mise à jour inachevée
demande de garder. Puis docker compose up -d.
file_observation_ranges holds rows, juste après une montée d'image
Le journal du crawler contient MigrationError: migration 6 failed: file_observation_ranges
holds rows: a compacted day cannot become observations. Votre catalogue a été compacté par
l'ancien outil python -m mulewatch.compact, qui n'existe plus. Une journée compactée ne garde
ni le mot-clé, ni la durée, ni les métadonnées brutes : elle ne peut pas devenir des
observations, et la migration refuse plutôt que d'inventer ce qui manque. Elle a été annulée :
le catalogue est intact. Docker relance le crawler, et chaque relance compare d'abord le
catalogue à sa copie d'avant migration, plusieurs minutes durant lesquelles le disque travaille :
docker compose stop p2pwatch arrête la boucle.
Remède : revenez à votre ancienne image (ghcr.io/mission-titar/mulewatch:4.1.0) par le
retour arrière de la migration. Ouvrez ensuite un ticket sur
https://github.com/mission-titar/p2pwatch/issues avec cette ligne de journal et le résultat
de SELECT COUNT(*) FROM file_observation_ranges dans la console SQL : la conversion s'écrira
sur vos données.
Le port est déjà pris¶
- Symptôme.
docker compose up -ds'arrête surbind: address already in use. Le numéro dans le message dit lequel :8080(le catalogue, danscompose.yml),4711(l'interface d'aMule), ou4662et4672(les ports eMule, publiés par la variante directe seulement). Ces trois-là sont dans le fichier de la variante, soused2k/. - Cause. Un autre programme occupe déjà ce port sur votre machine.
- Solution. Les ports ne sont pas des variables, ils sont écrits en clair dans le
ports:de votre pile. Donnez au port concerné une valeur libre du côté gauche, par exemple"8090:8080", puisdocker compose up -d, et pensez à ouvrir la nouvelle adresse. La marche à suivre est détaillée dans Régler le nœud, § Changer un port.
amuled ne se connecte à rien¶
- Symptôme. Le crawler tourne (lignes
verdict(s) changed) mais signale au bout de 5 minutesamuled ed2k: off its network for 5 min(oukad), avec des avertissements d'injoignabilité.
D'abord, patientez : au premier démarrage, c'est attendu
amuled amorce seul sa liste de serveurs eD2k et de nœuds Kad par DNS et HTTPS sortant, ce qui
prend 1 à 3 minutes, sous le délai de 5 minutes avant l'alerte. Une alerte qui tombe quand même
se résorbe toute seule (back on its network) ; vous n'avez aucun serveur à ajouter.
Un message Low-ID n'est pas non plus une panne : c'est l'état normal par défaut, recherche, catalogage et téléchargement fonctionnent, seule la joignabilité est sous-optimale. Voir Devenir High-ID.
- Si cela dure. Vérifiez la sortie Internet de la machine (amuled a besoin du 443 sortant). Si
vous avez ajouté un VPN, c'est presque toujours le tunnel
ed2k-gluetunqui n'est pas monté : le conteneured2kpartage son réseau, donc tant que le tunnel est down, amuled n'a aucune sortie. Un tunnel sain affiche[gluetun] [vpn] connectedet une IP publique qui n'est pas la vôtre. Sinon, corrigez la clé WireGuard et les autres variables VPN dans.env, puis recréez les deux services d'aMule (ed2kvit dans le namespace réseau d'ed2k-gluetun) : Plus de détails dans la fiche opérateur.
La webui reste vide¶
- La page se charge, mais le tableau est vide. C'est normal les premières heures : le catalogue
se remplit au fil des recherches, et les cibles rares peuvent mettre des jours à réapparaître.
Vérifiez plutôt que le nœud vit :
docker compose logs p2pwatchdoit montrer une ligneverdict(s) changedpar recherche terminée. S'il signaleoff its network, voir « amuled ne se connecte à rien ». - La page ne se charge pas du tout. La webui est servie en intra-processus par le crawler, il
n'y a pas de service
webuiséparé : c'est le conteneurp2pwatchqu'il faut regarder, pased2k, dont lehealthyne parle que d'amuled.p2pwatchpasUp→ « Un conteneur redémarre en boucle ».Upmais page inaccessible → confirmez l'adresse (le port est peut-être remappé, voir « Le port est déjà pris ») et quecompose.ymlpublie bien le 8080 dans lesports:dep2pwatch.