"Cannot fetch information from import for URL" après une màj

Je viens de mettre à jour deux instances peertube. Sur l’une d’elle, je ne peux plus importer de vidéos via un lien youtube après la màj. Le problème est probablement du côté de youtube-dl.

J’ai une erreur dans l’interface peu importe le lien youtube utilisé :

### Erreur

Cannot fetch remote information of this URL.

Dans les logs, je vois :

info[29/06/2021 à 23:02:17] Cannot fetch information from import for URL https://www.youtube.com/watch?v=N9qdtO-g1M0.

{
  "err": {
"stack": "Error: Command failed with ENOENT: /var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl --dump-json -f bestvideo[vcodec^=avc1][height=1080]+bestaudio[ext=m4a]/bestvideo[vcodec!*=av01][vcodec!*=vp9.2][height=1080]+bestaudio/bestvideo[vcodec^=avc1][height<=1080]+bestaudio[ext=m4a]/bestvideo[vcodec!*=av01][vcodec!*=vp9.2]+bestaudio/best[vcodec!*=av01][vcodec!*=vp9.2]/best -j --flat-playlist http://www.youtube.com/watch?v=N9qdtO-g1M0\nspawn /var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl ENOENT\n    at Process.ChildProcess._handle.onexit (internal/child_process.js:268:19)\n    at onErrorNT (internal/child_process.js:470:16)\n    at processTicksAndRejections (internal/process/task_queues.js:84:21)",
"message": "Command failed with ENOENT: /var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl --dump-json -f bestvideo[vcodec^=avc1][height=1080]+bestaudio[ext=m4a]/bestvideo[vcodec!*=av01][vcodec!*=vp9.2][height=1080]+bestaudio/bestvideo[vcodec^=avc1][height<=1080]+bestaudio[ext=m4a]/bestvideo[vcodec!*=av01][vcodec!*=vp9.2]+bestaudio/best[vcodec!*=av01][vcodec!*=vp9.2]/best -j --flat-playlist http://www.youtube.com/watch?v=N9qdtO-g1M0\nspawn /var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl ENOENT",
"errno": "ENOENT",
"code": "ENOENT",
"syscall": "spawn /var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl",
"path": "/var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl",
"spawnargs": [
  "--dump-json",
  "-f",
  "bestvideo[vcodec^=avc1][height=1080]+bestaudio[ext=m4a]/bestvideo[vcodec!*=av01][vcodec!*=vp9.2][height=1080]+bestaudio/bestvideo[vcodec^=avc1][height<=1080]+bestaudio[ext=m4a]/bestvideo[vcodec!*=av01][vcodec!*=vp9.2]+bestaudio/best[vcodec!*=av01][vcodec!*=vp9.2]/best",
  "-j",
  "--flat-playlist",
  "http://www.youtube.com/watch?v=N9qdtO-g1M0"
],
"originalMessage": "spawn /var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl ENOENT",
"shortMessage": "Command failed with ENOENT: /var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl --dump-json -f bestvideo[vcodec^=avc1][height=1080]+bestaudio[ext=m4a]/bestvideo[vcodec!*=av01][vcodec!*=vp9.2][height=1080]+bestaudio/bestvideo[vcodec^=avc1][height<=1080]+bestaudio[ext=m4a]/bestvideo[vcodec!*=av01][vcodec!*=vp9.2]+bestaudio/best[vcodec!*=av01][vcodec!*=vp9.2]/best -j --flat-playlist http://www.youtube.com/watch?v=N9qdtO-g1M0\nspawn /var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl ENOENT",
"command": "/var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl --dump-json -f bestvideo[vcodec^=avc1][height=1080]+bestaudio[ext=m4a]/bestvideo[vcodec!*=av01][vcodec!*=vp9.2][height=1080]+bestaudio/bestvideo[vcodec^=avc1][height<=1080]+bestaudio[ext=m4a]/bestvideo[vcodec!*=av01][vcodec!*=vp9.2]+bestaudio/best[vcodec!*=av01][vcodec!*=vp9.2]/best -j --flat-playlist http://www.youtube.com/watch?v=N9qdtO-g1M0",
"stdout": "",
"stderr": "",
"failed": true,
"timedOut": false,
"isCanceled": false,
"killed": false
  }
}

J’ai mis à jour les deux instances de la même manière (càd en suivant la doc). La seule différence est que l’une passait de la 3.0.1 vers la 3.2.1 (celle où le bug est apparu) et l’autre de la 3.1 à la 3.2.1.

j’utilise bien nodejs 12 :

 $ nodejs -v
v12.22.1

Bonjour,

Tentez de réinstaller les node_modules (sudo -H -u peertube rm -rf node_modules client/node_modules && sudo -H -u peertube yarn install --pure-lockfile) car il semble que le binaire youtube-dl n’existe pas (/var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl)

Merci pour la réponse rapide.

Je viens d’essayer mais le problème persiste.

Il semble qu’il y ait un problème durant yarn install, ça bloque 2 min.

Voici une capture vidéo du résultat de la commande :

En effet c’est bizarre.

J’imagine que /var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin/youtube-dl n’est pas présent après le yarn install?

Vous avez peut-être un proxy qui bloque la requête vers https://youtube-dl-binary.vercel.app/ ou https://github.com/ytdl-org/youtube-dl/releases/download/2021.06.06/youtube-dl ?

La 3.2 ne supporte plus la configuration des proxys via des variables d’environnement (ce qui n’était pas officiellement supporté).

En effet, le dossier var/www/peertube/versions/peertube-v3.2.1/node_modules/youtube-dl/bin est vide.

Vous avez peut-être un proxy qui bloque la requête vers https://youtube-dl-binary.vercel.app/ ou https://github.com/ytdl-org/youtube-dl/releases/download/2021.06.06/youtube-dl ?

C’est sans doute cela. Je vais voir côté hébergement.

Y a-t-il des solutions de contournement faciles à mettre en place ? Est-ce envisageable de récupérer les dépendances sur une installation locale puis de les envoyer sur le serveur manuellement ?

Oui tout à fait. Mais peertube ne fonctionnera pas très bien derrière un proxy.

Peertube fonctionne très bien sur cette VM ce qui me pousse à chercher ailleurs (en attendant une réponse de l’hébergeur).

Est-ce normal tous ces warnings ?

$ sudo -H -u peertube rm -rf node_modules client/node_modules && sudo -H -u peertube yarn install --pure-lockfile
[sudo] Mot de passe de hpstube : 
yarn install v1.22.5
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
info fsevents@2.3.2: The platform "linux" is incompatible with this module.
info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation.
[4/5] Linking dependencies...
warning " > @typescript-eslint/eslint-plugin@4.22.1" has unmet peer dependency "@typescript-eslint/parser@^4.0.0".
warning "eslint-config-standard-with-typescript > eslint-config-standard@16.0.2" has incorrect peer dependency "eslint-plugin-promise@^4.2.1".
warning " > marked-man@0.7.0" has incorrect peer dependency "marked@^0.7.0".
warning "swagger-cli > @apidevtools/swagger-cli > @apidevtools/swagger-parser@10.0.2" has unmet peer dependency "openapi-types@>=7".
[5/5] Building fresh packages...
$ test -n "$NOCLIENT" || (cd client && yarn install --pure-lockfile)
yarn install v1.22.5
[1/4] Resolving packages...
[2/4] Fetching packages...
info fsevents@2.3.2: The platform "linux" is incompatible with this module.
info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation.
info fsevents@1.2.13: The platform "linux" is incompatible with this module.
info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning " > file-loader@6.2.0" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
warning " > raw-loader@4.0.2" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
warning " > sass-loader@10.1.1" has unmet peer dependency "webpack@^4.36.0 || ^5.0.0".
warning " > terser-webpack-plugin@4.2.3" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
warning " > @ngx-i18nsupport/tooling@8.0.3" has incorrect peer dependency "@angular/common@^8.0.0".
warning " > @ngx-i18nsupport/tooling@8.0.3" has incorrect peer dependency "@angular/core@^8.0.0".
warning " > @ngx-meta/core@9.0.0" has incorrect peer dependency "@angular/core@>=9.0.0 <10.0.0".
warning " > @ngx-meta/core@9.0.0" has incorrect peer dependency "@angular/platform-browser@>=9.0.0 <10.0.0".
warning " > @ngx-meta/core@9.0.0" has incorrect peer dependency "@angular/platform-browser-dynamic@>=9.0.0 <10.0.0".
warning " > @ngx-meta/core@9.0.0" has incorrect peer dependency "@angular/router@>=9.0.0 <10.0.0".
warning " > @ngx-meta/core@9.0.0" has incorrect peer dependency "tslib@^1.10.0".
warning " > angular2-hotkeys@2.2.0" has incorrect peer dependency "@angular/core@^5.2.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0".
warning " > angular2-hotkeys@2.2.0" has incorrect peer dependency "tslib@^1.10.0".
warning " > bootstrap@4.6.0" has unmet peer dependency "jquery@1.9.1 - 3".
warning " > bootstrap@4.6.0" has unmet peer dependency "popper.js@^1.16.1".
warning " > css-loader@5.2.1" has unmet peer dependency "webpack@^4.27.0 || ^5.0.0".
warning " > html-loader@1.3.2" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
warning " > html-webpack-plugin@4.5.2" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
warning " > linkifyjs@2.1.9" has unmet peer dependency "jquery@>= 1.11.0".
warning " > linkifyjs@2.1.9" has unmet peer dependency "react@>= 0.14.0".
warning " > linkifyjs@2.1.9" has unmet peer dependency "react-dom@>= 0.14.0".
warning " > mini-css-extract-plugin@1.4.1" has unmet peer dependency "webpack@^4.4.0 || ^5.0.0".
warning " > ts-loader@8.1.0" has unmet peer dependency "webpack@*".
warning "tslint-config-standard > tslint-eslint-rules@5.4.0" has incorrect peer dependency "tslint@^5.0.0".
warning "tslint-config-standard > tslint-eslint-rules@5.4.0" has incorrect peer dependency "typescript@^2.2.0 || ^3.0.0".
warning " > webpack-cli@4.6.0" has unmet peer dependency "webpack@4.x.x || 5.x.x".
warning "webpack-cli > @webpack-cli/configtest@1.0.2" has unmet peer dependency "webpack@4.x.x || 5.x.x".
[4/4] Building fresh packages...
Done in 22.66s.
Done in 135.37s.

Je suis tenté de lancer un sudo -u peertube npm install -f.

Est-ce une bonne idée ?

Je suis toujours bloqué par ce problème. Si quelqu’un a une piste…

Au passage : contrairement à ce que je disais dans mon premier message (je ne peux plus le modifier), les deux instances peertube sont touchées de la même manière.

J’ai essayé de mettre à jour yarn qui est actuellement :

$ yarn -v
1.22.5

Résultat :

$ sudo -u peertube npm install --global yarn
npm WARN checkPermissions Missing write access to /usr/lib/node_modules
npm ERR! code EACCES
npm ERR! syscall access
npm ERR! path /usr/lib/node_modules
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, access '/usr/lib/node_modules'
npm ERR!  [Error: EACCES: permission denied, access '/usr/lib/node_modules'] {
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/lib/node_modules'
npm ERR! }
npm ERR! 
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR! 
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /var/www/peertube/.npm/_logs/2021-07-12T09_35_26_737Z-debug.log

Permissions :

:/var/www/peertube/versions/peertube-v3.2.1$ ls -la
total 520
drwxr-xr-x   8 peertube peertube   4096 juil. 12 11:32 .
drwxr-xr-x   4 peertube peertube   4096 juin  14 16:49 ..
drwxr-xr-x   4 peertube peertube   4096 juil. 12 11:34 client
drwxr-xr-x   2 peertube peertube   4096 juin  14 17:07 config
-rw-r--r--   1 peertube peertube   8773 juin   1 11:08 CREDITS.md
drwxr-xr-x   5 peertube peertube   4096 juin   1 11:12 dist
-rw-r--r--   1 peertube peertube     38 mai   28 13:51 FAQ.md
-rw-r--r--   1 peertube peertube  34520 avril 10  2019 LICENSE
drwxr-xr-x 945 peertube peertube  36864 juil. 12 11:34 node_modules
-rw-r--r--   1 peertube peertube   7456 juin   1 11:03 package.json
-rw-r--r--   1 peertube peertube   9963 juin   1 11:08 README.md
drwxr-xr-x  10 peertube peertube   4096 juin   1 11:08 scripts
drwxr-xr-x  10 peertube peertube   4096 août  12  2020 support
-rw-r--r--   1 peertube peertube    813 août  12  2020 tsconfig.json
-rw-r--r--   1 peertube peertube 382201 mai   28 13:51 yarn.lock

Avec simplement sudo (j’hésite à rajouter --force) :

$ sudo npm install --global yarn

> yarn@1.22.10 preinstall /usr/lib/node_modules/yarn
> :; (node ./preinstall.js > /dev/null 2>&1 || true)

npm ERR! code EEXIST
npm ERR! syscall symlink
npm ERR! path ../lib/node_modules/yarn/bin/yarn.js
npm ERR! dest /usr/bin/yarn
npm ERR! errno -17
npm ERR! EEXIST: file already exists, symlink '../lib/node_modules/yarn/bin/yarn.js' -> '/usr/bin/yarn'
npm ERR! File exists: /usr/bin/yarn
npm ERR! Remove the existing file and try again, or run npm
npm ERR! with --force to overwrite files recklessly.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2021-07-12T09_39_04_613Z-debug.log

Est-ce normal tous ces warnings ?

Oui, ce n’est pas important.

Non, il faut rester sur les commandes du guide Production guide | PeerTube documentation

Une mise à jour ne yarn ne résoudra pas le soucis.

Ok. merci pour les infos.

Dernier info de mon côté : sur une des deux VM, le fichier :/var/www/peertube/peertube-latest/node_modules/youtube-dl/bin/youtube-dl (ainsi qu’un fichier « details ») est réapparu !

Il semble que ce fichier soit modifié (régénéré ?) tous les jours à 19:19 (hier il indiquait le 11 juillet).

:/var/www/peertube/peertube-latest/node_modules/youtube-dl/bin$ ls -la
total 1812
drwxr-xr-x 2 peertube peertube    4096 juil.  6 16:12 .
drwxr-xr-x 6 peertube peertube    4096 juil.  6 15:35 ..
-rw-r--r-- 1 peertube peertube     135 juil. 12 19:19 details
-rwxr-xr-x 1 peertube peertube 1840311 juil. 12 19:19 youtube-dl

Y a-t-il une explication du côté peertube ?

Pour l’autre VM sur laquelle j’ai pourtant passé les mêmes commandes, pas de fichier en question. Si je déplace manuellement un fichier récupéré en local, ça fonctionne mais j’imagine qu’il y a peut-être d’autres dépendances que ytdl qui manquent.

Dans les logs, j’ai :

info[12/07/2021 à 19:19:54] Updating youtubeDL binary.info[12/07/2021 à     19:19:54] Removing old videos views.

info[12/07/2021 à 19:19:54] Checking latest PeerTube version.

info[12/07/2021 à 19:19:54] Checking latest plugins version.

info[12/07/2021 à 19:19:54] Removing bad actor follows (scheduler).

info[12/07/2021 à 19:19:54] Removing old jobs in scheduler.

info[12/07/2021 à 19:19:55] youtube-dl updated to version 2021.06.06.

Il semble donc que peertube arrive à récupérer ytdl tout seul.

Par contre, je ne sais pas comment reproduire ce comportement sur l’autre instance.

oui, Peertube met à jour youtube-dl automatiquement toutes les 24h.