Articles - Logiciel & scripts

Peertube - Journal de bord maintenance

  |   1119  |   Poster commentaire  |  Logiciel & scripts

31/01/2024 23h00 - Génération des storyboards (miniatures dans la barre de recherche du player)


  • Génération de tous les storyboards (pour toutes les vidéos existantes) --> https://docs.joinpeertube.org/maintain/tools#generate-storyboard
    Code BASH :
    USER@peertube:/var/www/peertube/peertube-latest$ sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run create-generate-storyboard-job -- --all-videos
    > peertube@6.0.3 create-generate-storyboard-job
    > node ./dist/scripts/create-generate-storyboard-job.js --all-videos
    Created generate-storyboard job for Compaq Prolinea 4/100 - Réparation kinder surprise.
    Created generate-storyboard job for Nettoyer les têtes de son magnétoscope VHS.
    Created generate-storyboard job for Réparation micro-chaîne Grundig MF 2050.
    ...



24/01/2024 18h00 - MAJ Peertube


  • Peertube 6.0.3

07/01/2024 à 00h45 - MAJ Debian


  • Debian 12.4 (Kernel 6.1.69)
  • Node 18.19

13/12/2023 22h10 - MAJ Peertube


  • Peertube 6.0.2

03/12/2023 de 16h15 à 16h45 - MAJ Debian & Peertube


  • Toutes les vidéos sont en HLS exclusivement.
  • Debian 12.2
  • Peertube 6.0.1
  • ffmpeg 5.1.4

16/11/2023 17h30 - MAJ PostgreSQL


  • Postgres 15.4 -> 15.5 (CVE-2023-5869)

12/09/2023 de 20h00 à 22h00 - MAJ Debian


  • Debian 11.7 -> 12.1
    • noyau 6.1.52
    • ffmpeg 5.1.3
    • nginx 1.22.1
    • redis 7.0.11
  • Node 16 -> 18.17.1 LTS
  • Postgres 15.3 -> 15.4

09/09/2023 - MAJ Peertube


  • Peertube 5.2.1

08/07/2023 - MAJ Debian


  • Debian 10 -> 11.7

25/06/2023 - MAJ Peertube


  • Peertube 5.2.0

19/06/2023 - MAJ Postgres


  • Postgres 11.20 -> 15.3

...
...
...

10/06/2022 19h55 - Mises à jour


  • Peertube 4.2.0

31/05/2022 (nuit) - Mises à jour


  • Node.js 16.15
  • Debian 10.12 + Noyau 4.19.235-1
  • Postgres 11.16
  • Reboot serveur

08/03/2022 (11h25) - Mises à jour


  • Peertube 4.1.1

23/02/2022 (10h25) - Mises à jour


  • Peertube 4.1.0
  • Node.js 16.14
  • Postgres 11.15
  • Noyau 4.19.208-1
  • Reboot serveur

15/12/2021 (10h40) - Mises à jour


  • Peertube 4.0.0
  • Node.js 16.13.1
  • Postgres 11.14
  • Debian 10.11
  • Reboot serveur

13/12/2021 (19h50) - Mises à jour


  • ffmpeg 4.2 --> 4.4.1 (compilation manuelle avec options --enable-gpl --enable-libaom --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree)

16/10/2021 (21h28) - Mises à jour


  • Peertube 3.4.1

27/09/2021 (22h19) - Mises à jour


  • Node.js 12.22.6

15/09/2021 (9h55) - Mises à jour


  • Peertube 3.4.0

19/08/2021 (12h45) - Mises à jour


  • Peertube 3.3.0

19/08/2021 (12h22 à 12h24) - Mises à jour


  • Node.js 12.22.5
  • Postgres 11.13
  • Debian 10.10 (Kernel 4.19.194-3)
  • Reboot serveur

11/06/2021 (23h27 à 23h30) - Mises à jour


  • Peertube 3.2.1

03/04/2021 (18h00 à 18h05) - Mises à jour


  • Peertube 3.1.0

02/04/2021 (22h25 à 22h30) - Mises à jour


  • Node.js 12.22.0
  • Postgres 11.11
  • Debian 10.9
  • Reboot serveur

07/02/2021 (19h25 à 19h30) - Mises à jour


  • Peertube 3.0.1

22/01/2021 (00h20 à 00h30) - Mises à jour


  • Node.js 12.20.1
  • Postgres 11.10
  • Debian 10.7
  • Reboot serveur

13/09/2020 (22h30 à 22h48) - Mises à jour


  • Node.js 10.22.0
  • Peertube 2.4.0
  • Postgres 11.9
  • Debian 10.5
  • Reboot serveur

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


  • Peertube 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 (ou sinon avec pg_upgrade). Une autre méthode simple 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 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.