Peertube - Journal de bord maintenance
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.