Articles - Logiciel & scripts

Peertube - Journal de bord maintenance

  |   341  |   Poster commentaire  |  Logiciel & scripts

22/07/2020 (23h15 à 23h30) - Mises à jour


  • Peertube 2.2.0 en 2.3.0

23/06/2020 (17h00) - Modification config


Désactivation de la redondance (remote_redundancy > videos > accept_from : 'nobody'). Serveurs tiers non fiables, mauvaise expérience utilisateur. Relance furtive + retrait de toutes les redondances de vidéos.

03/06/2020 (23h00 à 23h20) - Mises à jour


  • Node.js 10.21.0
  • Peertube 2.2.0
  • Postgres 11.8

27/02/2020 - Mises à jour


  • Peertube 2.1.0 en 2.1.1 - Relance furtive

26/02/2020 - Mises à jour


  • Peertube 2.0.0 en 2.1.0
  • Postgres 11.6 en 11.7
  • Activation du mode HLS. Script de migration peertube-2.1.js ne parcourt aucune vidéo. Requête SQL ne renvoie aucune ligne. Certainement car le mode HLS n'était pas activé avant.
  • Essai manuel OK avec le script create-transcoding-job -- --generate-hls sur vidéo Panasonic SA-PMX70.

15/02/2020 - Passage de Postgres 9.6 en 11.6


La chose ne s'est pas faite sans mal. Pour ma part j'avais deux instances Postgres, une en 9.6 (en production) et l'autre en 11.6 (en attente) créée lors du passage de Debian 9 vers 10. Le but étant de migrer les données de l'une à l'autre. Comme on saute 2 versions majeures on ne peut pas juste copier les fichiers plats. Une des méthodes pour réaliser cela est donc de faire un export et puis un import avec les utilitaires pg_dump et pg_restore. La base étant relativement petite cela prend peu de temps. La base cible et les rôles ont été créés de prime-abord.
Code BASH :
pg_dump --host "localhost" --port "5432" --username "postgres" --dbname "peertube_prod" -c -Fc -f "/tmp/sauvegarde_migration.backup"
pg_restore --clean --host "localhost" --port "5433" --username "peertube" --role "postgres" --dbname "peertube_prod" --verbose "/tmp/sauvegarde_migration.backup"

Bref la procédure n'a rien de sorcier mais j'ai eu une erreur lors de l'importation.
Code TEXT :
pg_restore: création de INDEX « public.tag_name »
pg_restore: [programme d'archivage (db)] Erreur à partir de l'entrée TOC 2527 ; 1259 16649 INDEX tag_name peertube
pg_restore: [programme d'archivage (db)] could not execute query: ERREUR:  n'a pas pu créer l'index unique « tag_name »
DÉTAIL : La clé (name)=(santanavevo) est dupliquée.
    La commande était : CREATE UNIQUE INDEX tag_name ON public.tag USING btree (name);
 

Bizarre que des valeurs soient dupliquées pour un index unique. Je ne m'explique pas comment, mais bon.
Peertube détectant l'index manquant il re-tente de le créer au lancement de l'instance et tombe sur la même erreur. Oh étonnant !
Code TEXT :
févr. 15 01:18:59 peertube systemd[1]: Started PeerTube daemon.
févr. 15 01:18:59 peertube peertube[15777]: > peertube@2.0.0 start /var/www/peertube/versions/peertube-v2.0.0
févr. 15 01:18:59 peertube peertube[15777]: > node dist/server
févr. 15 01:19:01 peertube systemd[1]: Stopping PeerTube daemon...
févr. 15 01:19:01 peertube systemd[1]: peertube.service: Main process exited, code=killed, status=15/TERM
févr. 15 01:19:01 peertube systemd[1]: peertube.service: Succeeded.
févr. 15 01:19:01 peertube systemd[1]: Stopped PeerTube daemon.
févr. 15 01:20:45 peertube systemd[1]: Started PeerTube daemon.
févr. 15 01:20:46 peertube peertube[16021]: > peertube@2.0.0 start /var/www/peertube/versions/peertube-v2.0.0
févr. 15 01:20:46 peertube peertube[16021]: > node dist/server
févr. 15 01:20:48 peertube peertube[16021]: [video.latavernedejohnjohn.fr:443] 2020-02-15 01:20:48.289 info: Database peertube_prod is ready.
févr. 15 01:20:48 peertube peertube[16021]: [video.latavernedejohnjohn.fr:443] 2020-02-15 01:20:48.370 error: Cannot install application. {
févr. 15 01:20:48 peertube peertube[16021]:   "err": {
févr. 15 01:20:48 peertube peertube[16021]:     "stack": "SequelizeUniqueConstraintError: n'a pas pu créer l'index unique « tag_name »\n    at Query.formatError (/var/www/peertube/versions/peertube-v
févr. 15 01:20:48 peertube peertube[16021]:     "message": "n'a pas pu créer l'index unique « tag_name »",
févr. 15 01:20:48 peertube peertube[16021]:     "name": "SequelizeUniqueConstraintError",
févr. 15 01:20:48 peertube peertube[16021]:     "errors": {},
févr. 15 01:20:48 peertube peertube[16021]:     "parent": {
févr. 15 01:20:48 peertube peertube[16021]:       "stack": "error: n'a pas pu créer l'index unique « tag_name »\n    at Connection.parseE (/var/www/peertube/versions/peertube-v2.0.0/node_modules/pg/l
févr. 15 01:20:48 peertube peertube[16021]:       "message": "n'a pas pu créer l'index unique « tag_name »",
févr. 15 01:20:48 peertube peertube[16021]:       "name": "error",
févr. 15 01:20:48 peertube peertube[16021]:       "length": 188,
févr. 15 01:20:48 peertube peertube[16021]:       "severity": "ERREUR",
févr. 15 01:20:48 peertube peertube[16021]:       "code": "23505",
févr. 15 01:20:48 peertube peertube[16021]:       "detail": "La clé (name)=(santanavevo) est dupliquée.",
févr. 15 01:20:48 peertube peertube[16021]:       "schema": "public",
févr. 15 01:20:48 peertube peertube[16021]:       "table": "tag",
févr. 15 01:20:48 peertube peertube[16021]:       "constraint": "tag_name",
févr. 15 01:20:48 peertube peertube[16021]:       "file": "tuplesort.c",
févr. 15 01:20:48 peertube peertube[16021]:       "line": "4056",
févr. 15 01:20:48 peertube peertube[16021]:       "routine": "comparetup_index_btree",
févr. 15 01:20:48 peertube peertube[16021]:       "sql": "CREATE UNIQUE INDEX \"tag_name\" ON \"tag\" (\"name\")"
févr. 15 01:20:48 peertube peertube[16021]:     },
févr. 15 01:20:48 peertube peertube[16021]:     "sql": "CREATE UNIQUE INDEX \"tag_name\" ON \"tag\" (\"name\")"
févr. 15 01:20:48 peertube peertube[16021]:   }
févr. 15 01:20:48 peertube peertube[16021]: }
févr. 15 01:20:48 peertube peertube[16021]: npm ERR! code ELIFECYCLE
févr. 15 01:20:48 peertube peertube[16021]: npm ERR! errno 255
févr. 15 01:20:48 peertube peertube[16021]: npm ERR! peertube@2.0.0 start: `node dist/server`
févr. 15 01:20:48 peertube peertube[16021]: npm ERR! Exit status 255
févr. 15 01:20:48 peertube peertube[16021]: npm ERR!
févr. 15 01:20:48 peertube peertube[16021]: npm ERR! Failed at the peertube@2.0.0 start script.
févr. 15 01:20:48 peertube peertube[16021]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
févr. 15 01:20:48 peertube peertube[16021]: npm ERR! A complete log of this run can be found in:
févr. 15 01:20:48 peertube peertube[16021]: npm ERR!     /var/www/peertube/.npm/_logs/2020-02-15T00_20_48_386Z-debug.log

Allez il faut faire un tour en base, et pourtant rien de bizarre de prime abord :
Code TEXT :
psql (11.6 (Debian 11.6-1.pgdg100+1), serveur 9.6.16)
Connexion SSL (protocole : TLSv1.3, chiffrement : TLS_AES_256_GCM_SHA384, bits : 256, compression : désactivé)
Saisissez « help » pour l'aide.
peertube_prod=> \x
Affichage étendu activé.
peertube_prod=> select * from tag where name='santanavevo';
-[ RECORD 1 ]-----
id   | 10311
name | santanavevo


Et pourtant il y a bien anguille sous roche quand on essaye avec like :

Code TEXT :
peertube_prod=> select * from tag where name like '%santanavevo%';
-[ RECORD 1 ]-----
id   | 2092
name | santanavevo
-[ RECORD 2 ]-----
id   | 10311
name | santanavevo
peertube_prod=> select id,name::bytea from tag where name like '%santanavevo%';
-[ RECORD 1 ]------------------
id   | 2092
name | \x73616e74616e617665766f
-[ RECORD 2 ]------------------
id   | 10311
name | \x73616e74616e617665766f


Deux tuples ressortent cette fois. Caractère parasite ? Reste à déterminer lequel est réellement utilisé :

Code TEXT :
peertube_prod=> select * from video where video.id in (select "videoId" from "videoTag" where "tagId"=2092);
(0 ligne)
peertube_prod=> select * from video where video.id in (select "videoId" from "videoTag" where "tagId"=10311);
-[ RECORD 1 ]---------+-------------------------------------------------------------------------------
id                    | 12916
uuid                  | 6c28dd73-2570-417f-8a8a-03c46dd07ef5
name                  | Santana - Corazon Espinado ft. Mana (Official Video)
category              | 1
licence               | 1
language              | es
privacy               | 1
nsfw                  | f
description           | Source : https://www.youtube.com/watch?v=t6omUxqhG78\r                        +
                      | \r                                                                            +
                      | Check out Santana's official music video for 'Corazon Espinado' ft. Mana.\r   +
                      | \r                                                                            +
                      | Click to listen to Santana on Spotify: http://smarturl.it/SanSpot?IQid=SanCE\r+
                      | \r                                                                            +
                      | As featured on Ultimate Santana. C...
support               |
duration              | 275
views                 | 1
likes                 | 0
dislikes              | 0
remote                | t
url                   | https://video.ploud.fr/videos/watch/6c28dd73-2570-417f-8a8a-03c46dd07ef5
commentsEnabled       | t
waitTranscoding       | t
state                 | 1
publishedAt           | 2019-08-02 02:16:11.913+02
channelId             | 343
createdAt             | 2019-08-02 02:16:11.913+02
updatedAt             | 2020-02-15 01:40:17.043+01
downloadEnabled       | t
originallyPublishedAt | 2013-10-02 00:00:00+02


Cette vidéo n'utilise pas le tag 2092, donc on peut le supprimer sans crainte.

Code TEXT :
peertube_prod=> select * from "videoTag" where "videoId"=12916;
-[ RECORD 1 ]-------------------------
videoId   | 12916
tagId     | 2094
createdAt | 2020-01-28 03:41:28.985+01
updatedAt | 2020-01-28 03:41:28.985+01
-[ RECORD 2 ]-------------------------
videoId   | 12916
tagId     | 10312
createdAt | 2020-01-28 03:41:28.985+01
updatedAt | 2020-01-28 03:41:28.985+01
-[ RECORD 3 ]-------------------------
videoId   | 12916
tagId     | 10311
createdAt | 2020-01-28 03:41:28.985+01
updatedAt | 2020-01-28 03:41:28.985+01
-[ RECORD 4 ]-------------------------
videoId   | 12916
tagId     | 2091
createdAt | 2020-01-28 03:41:28.985+01
updatedAt | 2020-01-28 03:41:28.985+01
-[ RECORD 5 ]-------------------------
videoId   | 12916
tagId     | 2090
createdAt | 2020-01-28 03:41:28.985+01
updatedAt | 2020-01-28 03:41:28.985+01
peertube_prod=> delete from tag where id=2092;
DELETE 1


Je croyais qu'il n'y en avait qu'un seul. Donc au bout d'un moment, on compte les doublons, 27 au total.

Code XML :
peertube_prod=> SELECT name, COUNT(*) occurrences FROM tag GROUP BY name HAVING COUNT(*) > 1;
      name      | occurrences
----------------+-------------
 Keep           |           2
 open source    |           2
 Musique        |           2
 #Musique       |           2
 open-source    |           2
 thinkerview    |           2
 петр великий   |           2
 ke$ha vevo     |           2
 cotton eye joe |           2
 cottoneyejoe   |           2
 hip hop        |           2
 hip-hop        |           2
 Don't          |           2
 #FreeCAD       |           2
 острова        |           2
 паломничество  |           2
 FreeCAD        |           2
 Dont           |           2
 lofi           |           2
 neg'marron     |           2
 music          |           2
 #music         |           2
 let's play     |           2
 thinker view   |           2
 anime          |           2
 hiphop         |           2
 negmarron      |           2
(27 lignes)
 


On commence par supprimer tous les tags qui ne sont utilisés par aucune vidéo. Ce qui en élimine 1444.

Code TEXT :
peertube_prod=> begin;
BEGIN
peertube_prod=> delete from tag where id IN (select id from tag where id not in (select distinct "tagId" from "videoTag"));
DELETE 1444
peertube_prod=> commit;
COMMIT


Ce qui fait redescendre le nombre de doublons à 7.

Code TEXT :
peertube_prod=> SELECT name, COUNT(*) occurrences FROM tag GROUP BY id, name HAVING COUNT(*) > 1;
     name      | occurrences
---------------+-------------
 thinkerview   |           2
 hip-hop       |           2
 паломничество |           2
 FreeCAD       |           2
 music         |           2
 anime         |           2
 hiphop        |           2
(7 lignes)

Après quelques updates manuels pour résorber ces 7 derniers doublons, l'import se fait sans souci.

Reste à passer à la version 2.1.0 de Peertube la semaine prochaine.