Articles - Logiciel & scripts

Peertube - Journal de bord maintenance

  |   1184  |   Poster commentaire  |  Logiciel & scripts
Horodatage Résumé Versions/Détails
30/10/2024 19h15MAJ PeertubePeertube 6.3.3
09/10/2024 18h15MAJ PeertubePeertube 6.3.2
29/09/2024 17h20MAJ PeertubePeertube 6.3.1
21/09/2024 21h30MAJ PeertubePeertube 6.3.0
02/08/2024 00h00MAJ PeertubePeertube 6.2.1
27/07/2024 10h50MAJ PeertubePeertube 6.2.0
30/04/2024 15h20MAJ PeertubePeertube 6.1.0
04/04/2024 19h00MAJ Peertube sécuritéPeertube 6.0.4
23/03/2024MigrationPassage du serveur dédié SoYouStart (2018) -> Serveur Dell auto-hébergé
31/01/2024 23h00 Génération des storyboards 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 18h00MAJ PeertubePeertube 6.0.3
07/01/2024 00h45MAJ Debian
  • Debian 12.4 (Kernel 6.1.69)
  • Node 18.19
13/12/2023 22h10MAJ PeertubePeertube 6.0.2
03/12/2023 de 16h15 à 16h45MAJ Debian & Peertube
  • Toutes les vidéos sont en HLS exclusivement.
  • Debian 12.2
  • Peertube 6.0.1
  • ffmpeg 5.1.4
16/11/2023 17h30MAJ PostgreSQLPostgres 15.4 -> 15.5 (CVE-2023-5869)
12/09/2023 de 20h00 à 22h00MAJ 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/2023MAJ PeertubePeertube 5.2.1
08/07/2023MAJ DebianDebian 10 -> 11.7
25/06/2023MAJ PeertubePeertube 5.2.0
19/06/2023MAJ PostgresPostgres 11.20 -> 15.3
10/06/2022 19h55MAJ PeertubePeertube 4.2.0
31/05/2022 (nuit)MAJ Debian
  • Node.js 16.15
  • Debian 10.12 + Noyau 4.19.235-1
  • Postgres 11.16
  • Reboot serveur
08/03/2022 11h25MAJ PeertubePeertube 4.1.1
23/02/2022 10h25MAJ Globale
  • Peertube 4.1.0
  • Node.js 16.14
  • Postgres 11.15
  • Noyau 4.19.208-1
  • Reboot serveur
15/12/2021 10h40MAJ Globale
  • Peertube 4.0.0
  • Node.js 16.13.1
  • Postgres 11.14
  • Debian 10.11
  • Reboot serveur
]
13/12/2021 19h50MAJ ffpmeg
  • 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 21h28MAJ PeertubePeertube 3.4.1
27/09/2021 22h19MAJ NodeNode.js 12.22.6
15/09/2021 9h55MAJ PeertubePeertube 3.4.0
19/08/2021 12h45MAJ PeertubePeertube 3.3.0
19/08/2021 12h24MAJ Debian
  • Node.js 12.22.5
  • Postgres 11.13
  • Debian 10.10 (Kernel 4.19.194-3)
  • Reboot serveur
11/06/2021 23h30MAJ PeertubePeertube 3.2.1
03/04/2021 18h05MAJ PeertubePeertube 3.1.0
02/04/2021 22h30MAJ Debian
  • Node.js 12.22.0
  • Postgres 11.11
  • Debian 10.9
  • Reboot serveur
07/02/2021 19h30MAJ PeertubePeertube 3.0.1
22/01/2021 00h30MAJ Debian
  • Node.js 12.20.1
  • Postgres 11.10
  • Debian 10.7
  • Reboot serveur
13/09/2020 22h48MAJ Debian
  • Node.js 10.22.0
  • Peertube 2.4.0
  • Postgres 11.9
  • Debian 10.5
  • Reboot serveur
23/06/2020 17h00Modification configé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.
13/09/2020 22h48MAJ Globale
  • Node.js 10.21.0
  • Peertube 2.2.0
  • Postgres 11.8
27/02/2020MAJ PeertubePeertube 2.1.0 en 2.1.1 - Relance furtive
26/02/2020MAJ Globale + HLS
  • Peertube 2.0.0 -> 2.1.0
  • Postgres 11.6 -> 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.