# [nginx | php] mettre à dispo des listes de vidéothèque

## pti-rem

Bonjour,

J'ai des bibliothèques de médias dont je souhaite mettre à disposition les listes avec nginx en mode texte simple, comme pour l'affichage d'une d'une arborescence comme avec autoindex à on

Je souhaite que ce ne soit que des listes (même à 0 octet) et pas des liens donnant sur les éléments de mes bibliothèques.

Je ne peux pas tout simplement interdire avec nginx la production des liens pour les fichiers ?

Le module autoindex ne le permet pas. http://nginx.org/en/docs/http/ngx_http_autoindex_module.html

Je me demande quel est le plus court chemin, sachant que les bibliothèques s'élaborent et s'organisent constamment.

Faut-il vraiment que j'ordonnance un script pour reproduire régulièrement les bibliothèques avec touch ? Ça c'est vraiment trop le bazar, il s'agit de mises à jour.

Ou alors il me faut plutôt un peu de php pour traduire les arborescences de fichiers en simple affichage ? Il doit bien déjà exister celui-là

Merci pour vos conseilsLast edited by pti-rem on Sat Nov 05, 2016 1:49 pm; edited 1 time in total

----------

## El_Goretto

A vue de  nez:

find pour générer une liste de paths dans un fichier texte (éventuellement dans un job cron).

nginx pour mettre à disposition ce fichier texte.

Tu vas perdre plus de temps à trouver une usine à gaz (en php? au secours!  :Wink: ) qui fera peut être ce truc trivial pour toi qu'à implémenter une solution simple (et sûre) par toi  même  :Smile: 

----------

## pti-rem

Oui, je vais faire ce que tu me propose pour constituer des fichiers de chemins par bibliothèque.

Je vais également ordonnancer un find pour les répertoires et les fichiers des bibliothèques pour produire une racine d'un vhost avec l'arborescence et les noms de fichiers avec la commande touch

cette racine sera vidée et reproduite. c'est le plus simple.

J'ai besoin de fournir la possibilité d'une navigation légère pour un accès satellite avec un forfait limité.

Je vois d'ici que rien que le fichier de chemins de Films pèse lourd. Et c'est celui va varier le plus.

----------

## pti-rem

Bonjour,

J'ai créé un script qui fabrique une autre arborescence des répertoires des bibliothèques que je veux publier , avec conservation de la date de création.

Mon script crée dans cette arborescence des fichiers du même nom que ceux qui sont trouvés dans les bibliothèque à publier ;

avec les extensions avi mkv mp4 ts flv wmv mpg (j'en ai pas d'autres en tête)

J'ajoute .html à chaque fichier. La date de création originale est conservée. J'ai dû utiliser sed pour ajouter des sauts de ligne HTML <br /> à chaque fin de ligne des fichiers .html

Les fichiers ne sont pas vides ; j'utilise du et ffprobe pour les constituer avec quelques informations ;

```
1,6G   Docus-TS/La Corse, beauté sauvage/La Corse, beauté sauvage : L'île verticale #1 (2012).ts<br />

Modif. : 2016-05-03 08:02:57.229183271 +0200<br />

ffprobe -hide_banner "Docus-TS/La Corse, beaut\xc3\xa9 sauvage/La Corse, beaut\xc3\xa9 sauvage : L'\xc3\xaele verticale #1 (2012).ts"<br />

Input #0, mpegts, from 'Docus-TS/La Corse, beauté sauvage/La Corse, beauté sauvage : L'île verticale #1 (2012).ts':<br />

  Duration: 00:42:56.99, start: 1.400000, bitrate: 5237 kb/s<br />

    Stream #0:0[0x100]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p(tv, bt709), 1440x1080 [SAR 4:3 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc<br />

    Stream #0:1[0x101](fra): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 128 kb/s<br />

    Stream #0:2[0x102](qad): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 96 kb/s<br />

    Stream #0:3[0x103](qaa): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 128 kb/s<br />

    Stream #0:4[0x104](deu): Audio: eac3 ([6][0][0][0] / 0x0006), 48000 Hz, stereo, fltp, 96 kb/s<br />

    Stream #0:5[0x105](fra): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006) (hearing impaired)<br />

    Stream #0:6[0x106](fra): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)<br />

    Stream #0:7[0x107](deu): Subtitle: dvb_subtitle ([6][0][0][0] / 0x0006)<br />
```

L'idée est bonne ; quand mon arborescence est créée dans ./plex-touch, je la déplace dans une racine nginx ./plex-web dédiée que je vide auparavant.

Les deux arborescences étant dans le même filesystem, le déplacement est instantané.

J'ai des lignes ffprobe -hide_banner qui ne sont pas présentes dans tous les fichiers .html ; c'est assez curieux.

Je ne me suis pas encore attaché à faire des fichiers de chemins par bibliothèque. Ce n'est pas difficile et la navigation est prioritaire.

Je peux ordonnancer mon script facilement. Mais avec un grand nombre d'entrées, je préfère le lancer à la demande après un grand remaniement de mes bibliothèques.

Je vais devoir trouver une manière de faire une simple mise à jour pour un ou plusieurs ajouts, retraits ou déplacements.

Le souci, c'est que avec nginx et autoindex à on, la largeur d'affichage de la colonne des noms de fichiers est bien trop étroite.

Il y a beaucoup de noms longs et ils sont vraiment tronqués.

J'ai eu beau chercher, je ne sais pas agrandir cette colonne de nom de fichiers ; Et le mieux ce serait qu'elle soit la seule colonne affichée.

.htaccess ne fonctionne pas avec nginx d'après ce que j'ai lu.

http://unix.stackexchange.com/questions/145587/nginx-long-filenames-in-directory-listing#comment244035_149651

 *ssh2ksh Aug 11 '14 at 11:12 wrote:*   

> According to ngx_http_autoindex_module documentation, configuration of column width for autoindexed pages is not available. Compiling from the source would be the only way to make this change.
> 
> One alternative could be to use a scripting language (e.g. php, ruby, or python) to perform the directory listing for you.
> 
> Benefits include:
> ...

 

 *evachristine Aug 13 '14 at 15:14 wrote:*   

> compiling did the trick

 

 *evachristine Jul 20 '14 at 17:17 wrote:*   

> http://forum.nginx.org/read.php?2,124400,167420#msg-167420
> 
>  *fagtron January 18, 2011 08:36PM wrote:*   I looked all over the net and wasn't able to find this answer anyway, so I looked into the nginx source files and it's very easy.
> 
> Simply modify the file located at src/http/modules/ngx_http_autoindex_module.c and then compile.
> ...

 

J'ai essayé de faire la modification. J'ai désinstallé le paquet www-servers/nginx et j'ai cloné le Git https://github.com/nginx/nginx et j'ai juste précisé un --prefix=/opt/nginx pour compiler.

édition du 10 août 2106 13:40 : je peux tout à fait avoir www-servers/nginx d'installé et un autre /etc/init.d/nginx-source (avec des modifications mineures) sans encombre. Il y a deux ensembles de configuration distincts à établir.

Pour la largeur, c'est efficace ; j'ai triplé le 50 à 150 : https://lut.im/VK9JUqT39j/qfBALtRf6VPBbiTJ.png (capture avec un zoom de 100 %)

C'est bien pour mon 16/9 mais je crois que je peux diminuer un peu ; tous n'ont pas du 1920x1080

Après pour tout ce qui peut se rattacher à Nginx - les fonctions qu'apportent les drapeaux du paquet www-servers/nginx, je verrai bien.

édition (lun. août  8 18:55:12 CEST 2016) :

J'ai placé la valeur à 250, ce qui m'élimine du visuel les colonnes pour la date et la taille. Mon visuel n'est composé que des noms sous forme de liens et j'ai un ascenseur horizontal qui est dans le bas de l'onglet de mon navigateur.

C'est le meilleur visuel que j'ai. Avec la largeur de 150 il était impossible de faire la relation entre un nom et la taille ou la date associée. C'est plus clair comme ça.

Je modifie le script pour rajouter l'information de date dans les fichiers .html

Avec mon filesystem ext4 et stat je n'ai pas la date de création des fichiers. J'utilise alors la date de modification ; ce qui est aussi bien dans mon cas.Last edited by pti-rem on Mon Aug 08, 2016 5:02 pm; edited 1 time in total

----------

## pti-rem

Je vous donne en lecture le script que je travaille depuis de nombreux jours ; je n'ai que peu de savoir dans ce domaine.

J'avais une version séquentielle qui mettait 2 heures pour traiter 9222 entrées ; j'ai réussi à paralléliser les traitements par ffprobe et le délai est maintenant de 17 minutes pour 9261 entrées valides et 59 vidéos repérées comme incorrectes.

Il manque l'indentation. navré.

Donc chaque jour mon site web de liste de mes bibliothèques est mis à jour avec des fichiers en .html comportant des informations sur le fichier vidéo comme je l'indique au dessus pour «La Corse, beauté sauvage : L'île verticale #1 (2012).ts.html»

Je vais dire à Nginx de se passer de l'extension .html pour interpréter du HTML ; Ce sera plus clair comme affichage.

```
     1   #!/bin/bash

       

     2   # /home/rem/Vidéos/simple-plex-touch-n73sm-pour-cron4-numéroté.sh

     3   # VERSION ZÉRO NUMÉROTÉE POUR IDENTIFIER LES CORRECTIONS À FAIRE

       

     4   # VERSION SANS SORTIE STANDARD POUR ÊTRE PLANIFIÉE EN TÂCHE CRON

     5   # PLANIFIÉE À 4 h CHAQUE NUIT

       

     6   #  0   4   *   *   *     nice --adjustment=15 rm -f /media/racine-n40l/plex/captures/000_LIENS/* && \

     7   #  nice --adjustment=15 ln -f /media/racine-n40l/plex/captures/*/*/*/*.ts /media/racine-n40l/plex/captures/000_LIENS/ && \

     8   #  nice --adjustment=15 "/home/rem/Vidéos/simple-plex-touch-n73sm-pour-cron4.sh" && \

     9   #  IFS=$'\n' && nice --adjustment=15 touch "/home/rem/plex-web-déployé-le "`date` && IFS=$' \t\n' &> /dev/null 

       

    10   # EXÉCUTÉE SUR UN Asus n73sm-tz124v avec 12 GB de RAM

       

    11   # Architecture :        x86_64

    12   # Mode(s) opératoire(s) des processeurs : 32-bit, 64-bit

    13   # Boutisme :            Little Endian

    14   # Processeur(s) :       8

    15   # Liste de processeur(s) en ligne : 0-7

    16   # Thread(s) par cœur : 2

    17   # Cœur(s) par socket : 4

    18   # Socket(s) :           1

    19   # Nœud(s) NUMA :       1

    20   # Identifiant constructeur : GenuineIntel

    21   # Famille de processeur : 6

    22   # Modèle :             42

    23   # Nom de modèle :      Intel(R) Core(TM) i7-2670QM CPU @ 2.20GHz

    24   # Révision :           7

    25   # Vitesse du processeur en MHz : 2200.000

    26   # Vitesse maximale du processeur en MHz : 2201,0000

    27   # Vitesse minimale du processeur en MHz : 800,0000

    28   # BogoMIPS :            4390.17

    29   # Virtualisation :      VT-x

    30   # Cache L1d :           32K

    31   # Cache L1i :           32K

    32   # Cache L2 :            256K

    33   # Cache L3 :            6144K

    34   # Nœud NUMA 0 de processeur(s) : 0-7

       

    35   # Le chemin CHBIB doit exister et comporter des sous-répertoires de bibliothèques

    36   # qui sont définis dans MESBIB

    37   # Les chemins CHWEB et CHTOU devraient se trouver sur le même système de fichiers

    38   # pour un déploiement quasi-instantané (mv) sur le site Web en CHWEB

       

    39   # Chemin de du répertoire de destination du serveur web

    40   CHWEB="/media/racine-n40l/plex-web"

       

    41   # Chemin racine des répertoires des bibliothèques de vidéos

    42   CHBIB="/media/racine-n40l/plex"

       

    43   # Chemin tmpfs racine intermédiaire pour la production de l'arborescence

    44   CHTOU="/media/racine-n40l/plex-web-tmpfs"

       

    45   # df -ah | grep plex-web-tmpfs

    46   # tmpfs 700M 0 700M 0% /plex-web-tmpfs

       

    47   # Chemin tmpfs pour accélerer la production des .tmp et des .html suivants

    48   CHTMP="/tmp/cache_ram/plex"

       

    49   # /tmp/cache_ram sert à mon profil et à mon cache de navigation pour Firefox

       

    50   # df -ah | grep cache_ram

    51   # tmpfs 1000M 74M 927M 8% /tmp/cache_ram

       

    52   # LES MODIFICATIONS IFS NE SONT PAS OPTIMISÉES ; IL Y A SURTOUT DES SURCHARGES

    53   # LES nice --adjustment= SONT RÉPÉTÉS

       

    54   # TODO

    55   # VERIFICATION EXISTENCE DES CHEMINS À FAIRE

    56   # VERIFICATION DES BINAIRES UTILISÉS À FAIRE AVEC which

    57   # MESSAGE ERREUR AVEC EXIT 1 SI UN MANQUE

    58   # MISE EN VARIABLES DES BINAIRES TROUVÉS À FAIRE

       

    59   ## Production des arborescences

       

    60   IFS=$' \t\n'

       

    61   nice --adjustment=15 rm -rf $CHTOU"/"* &> /dev/null

    62   nice --adjustment=15 rm -rf $CHTMP"/"* &> /dev/null

       

    63   MESBIB="Courts Pluzz TOMS TVFilms TVFilms-TS Films Films-TS Docus Docus-TS Séries captures AIDE"

    64   MESEXT="avi mp4 mkv ts flv wmv mpg"

       

    65   cd $CHBIB

       

    66   IFS=$' \t\n'

       

    67   for bib in $MESBIB

    68   do

    69   IFS=$'\n'

       

    70   # deux commandes pour un -exec ?

    71   # find $bib -depth -type d -exec mkdir -p $CHTMP"/"{} «&&»  mkdir -p $CHTOU"/"{} \;

       

    72   nice --adjustment=15 find $bib -depth -type d -exec mkdir -p $CHTMP"/"{} \;

    73   nice --adjustment=15 find $bib -depth -type d -exec mkdir -p $CHTOU"/"{} \;

       

    74   done

       

    75   IFS=$' \t\n'

       

    76   ## /Production des arborescences

       

    77   ## Prodction de la liste des fichiers des bibliothèques à traiter

       

    78   cd $CHBIB

       

    79   IFS=$' \t\n'

       

    80   nice --adjustment=15 rm -f fichiers-a-traiter &> /dev/null

       

    81   nice --adjustment=15 touch fichiers-a-traiter

       

    82   IFS=$' \t\n'

       

    83   for bib in $MESBIB

    84   do

    85   IFS=$' \t\n'

       

    86   for ext in $MESEXT

    87   do

    88   IFS=$'\n'

    89   nice --adjustment=15 find $bib -depth -maxdepth 100 -type f -iname '*.'$ext  >> fichiers-a-traiter

    90   done

       

    91   done

       

    92   ## /Production de fichiers-a-traiter

       

    93   ## Production des fichier .html dans l'arborescence CHTOU intermédiaire

       

    94   COUNT=1

       

    95   for file1 in `cat fichiers-a-traiter`

    96   do

       

    97   IFS=$'\n'

       

    98   REPORT=$CHTMP"/ffreport-"$COUNT".log"

    99   FILETMP=$CHTMP"/"$file1".tmp"

   100   FILEHTML=$CHTOU"/"$file1".html"

   101   FILEBIB=$CHBIB"/"$file1

       

   102   FFREPORT=file=$REPORT:level=32 nice --adjustment=19 ffprobe -hide_banner $file1 &> /dev/null && \

   103   nice --adjustment=15 du -h $file1 >> $FILETMP && \

   104   nice --adjustment=15 stat $file1 | grep Modif >> $FILETMP && \

   105   nice --adjustment=15 cat $REPORT | grep -e 'bitrate' -e '#' >> $FILETMP && \

   106   nice --adjustment=15 sed 's/$/\<br \/\>/' $FILETMP > $FILEHTML && \

   107   nice --adjustment=15 touch -r $FILEBIB $FILEHTML && \

   108   nice --adjustment=15 rm -f $FILETMP && \

   109   nice --adjustment=15 touch $REPORT".done" &

       

   110   ((COUNT++))

       

   111   # NOTE : la condition «-lt» semble ne pas être reconnue (par un «if» de mémoire) ; «-le» est un remplacement

   112   # IMPORTANT : Adapter la valeur «8» ci-dessous aux aptidudes de votre système ;

   113   # Pour mon cas cette valeur me semble être un maximum ;

   114   # Cette valeur provoque un élèvement important de la température des cœurs ;

   115   # Prenez soin de mettre une valeur inférieure en cas de chaleurs et / ou d'empoussiérage

   116   # La disspation est importante. Vous êtes prévenus.

       

   117   # Exemple avec l'air en entrée à 23,6°

       

   118   # rem@n73sm ~ $ sensors

   119   # acpitz-virtual-0

   120   # Adapter: Virtual device

   121   # temp1:        +74.0°C  (crit = +103.0°C)

       

   122   # asus-isa-0000

   123   # Adapter: ISA adapter

   124   # temp1:        +74.0°C

       

   125   # coretemp-isa-0000

   126   # Adapter: ISA adapter

   127   # Physical id 0:  +75.0°C  (high = +86.0°C, crit = +100.0°C)

   128   # Core 0:         +72.0°C  (high = +86.0°C, crit = +100.0°C)

   129   # Core 1:         +75.0°C  (high = +86.0°C, crit = +100.0°C)

   130   # Core 2:         +72.0°C  (high = +86.0°C, crit = +100.0°C)

   131   # Core 3:         +71.0°C  (high = +86.0°C, crit = +100.0°C)

       

   132   while [ `ps aux | grep ffprobe | wc -l` -gt 8 ] # Le 8 est ici

   133   do

   134   ((NULLCOUNT++))

   135   done

       

   136   done

       

   137   while [ `ps aux | grep ffprobe | wc -l` -gt 1 ]

   138   do

   139   ((NULLCOUNT++))

   140   done

       

   141   # Ce sync est indispensable pour finaliser l'écriture des derniers .tmp et .html

   142   sync && ((NULLCOUNT++))

       

   143   ## /Production des fichier .html dans l'arborescence CHTOU intermédiaire

       

   144   ## Déploiement sur le répertoire du site

       

   145   nice --adjustment=15 rm -rf $CHWEB"/"* &> /dev/null

       

   146   cd $CHTOU

       

   147   IFS=$' \t\n'

       

   148   nice --adjustment=15 mv $MESBIB $CHWEB

       

   149   cd $CHBIB

       

   150   IFS=$' \t\n'

   151   for bib in $MESBIB

   152   do

   153   IFS=$'\n'

   154   # Mise à la date d'origine des répertoires

   155   nice --adjustment=15 find $bib -depth -type d -exec touch -r $CHBIB"/"{} $CHWEB"/"{} \;

   156   done

   157   IFS=$' \t\n'

       

   158   IFS=$'\n'

   159   nice --adjustment=15 cp -fxa "/plex/AIDE/SVP - Cliquez cette petite aide.html" $CHWEB"/AIDE"

       

   160   ## / Déploiement

       

   161   ## répertorie les vidéos invalides au ffprobe

       

   162   cd $CHTMP

       

   163   nice --adjustment=15 mkdir "log-done-compare" &> /dev/null

   164   nice --adjustment=15 mkdir "log-alone-wrong-movie" &> /dev/null

       

   165   for file in [ ls -1 *.log ]

   166   do

   167   if [ -e $file.done ]

   168   then

   169   nice --adjustment=15 mv $file $file.done "log-done-compare"

   170   fi

   171   done

       

   172   nice --adjustment=15 mv *.log "log-alone-wrong-movie"

       

   173   IFS=$'\n'

       

   174   nice --adjustment=15 cp -xa "log-alone-wrong-movie" "/plex/log-alone-wrong-movie du "`date`

       

   175   ## /répertorie

       

   176   ## Effacement du répertoir tmpfs pour accélerer la production des .tmp et des .html suivants

   177   nice --adjustment=15 rm $CHTMP"/"* -rf &> /dev/null

   178   ##/

       

   179   IFS=$' \t\n'

   180   sync

       

   181   exit 0

       

   182   # real   17m47.653s

   183   # user   83m57.765s

   184   # sys   11m55.586s

       

   185   # find /media/racine-n40l/plex-web -iname '*.html' | wc -l

   186   # 9261

       

   187   # find /media/racine-n40l/plex/log-alone-wrong-movie\ du\ mer.\ août\ 17\ 11\:39\:17\ CEST\ 2016/ \

   188   # -iname '*.log' | wc -l

   189   # 59

       

   190   # echo 9261 + 59 | bc

   191   # 9320

       

   192   # cat /media/racine-n40l/plex/fichiers-a-traiter | wc -l

   193   # 9319

       

   194   # du /media/racine-n40l/plex-web -h --max-depth=1

   195   #

   196   # 1,2M   /media/racine-n40l/plex-web/Docus-TS

   197   # 8,0M   /media/racine-n40l/plex-web/Films

   198   # 40K   /media/racine-n40l/plex-web/Courts

   199   # 2,1M   /media/racine-n40l/plex-web/Films-TS

   200   # 24M   /media/racine-n40l/plex-web/Séries

   201   # 776K   /media/racine-n40l/plex-web/TOMS

   202   # 8,0K   /media/racine-n40l/plex-web/AIDE

   203   # 3,9M   /media/racine-n40l/plex-web/captures

   204   # 1,8M   /media/racine-n40l/plex-web/Docus

   205   # 84K   /media/racine-n40l/plex-web/TVFilms

   206   # 148K   /media/racine-n40l/plex-web/TVFilms-TS

   207   # 12K   /media/racine-n40l/plex-web/Pluzz

   208   # 42M   /media/racine-n40l/plex-web
```

----------

## pti-rem

La duplication de /etc/init.d/nginx en /etc/init.d/nginx-autoindex-large modifié me pose une difficulté pour la ligne «pidfile=» ;

J'ai dû préciser «-g "pid /run/nginx-large.pid;"» pour la ligne «command_args=» pour avoir un stop et un start corrects.

```
14c14

< nginx_config=${nginx_config:-/etc/nginx/nginx.conf}

---

> nginx_config=${nginx_config:-/opt/nginx/conf/nginx.conf} 

16,18c16,18

< command="/usr/sbin/nginx"

< command_args="-c ${nginx_config}"

< pidfile=${pidfile:-/run/nginx.pid}

---

> command="/opt/nginx/sbin/nginx" 

> command_args="-c ${nginx_config} -g \"pid /run/nginx-large.pid;\""

> pidfile=${pidfile:-/run/nginx-large.pid}
```

Tant que ça fonctionne et même si ce n'est pas fait dans les règles de l'art ce n'est pas si grave.

La question reste en suspens pour savoir comment nommer et écrire mon script en /etc/init.d/ pour la version source de Nginx. Avec une gestion du pid normale.

----------

