Articles plus anciens

J’ai enfin eu le courage d’écrire un nouvel article, ce n’est pas l’inspiration ou les sujets qui manquent mais l’envie d’écrire de décrire….

Sur mon Dockstar je souhaite avoir un dépôt de fichier, un endroit ou je (ou des personnes de confiance) puisse facilement uploader des fichiers et avoir un lien vers ce fichier.

Premier logiciel testé Jyraphe.

Pour casser le suspense je tiens à préciser tout de suite que ce dernier ne répond à mes attentes

Installation

On télécharge et décompresse les sources :

wget http://download.gna.org/jyraphe/jyraphe-0.5.tar.gz
tar -xvf jyraphe-0.5.tar.gz

 

Puis on installe le package gettext, en effet jyraphe est livré avec les traductions Française mais il faut les « compiler » pour qu’elles soient accessibles :

sudo aptitude install gettext
cd jyraphe
./update-po.sh
./update-mo.sh

Cela créé le fichier Jyraphe.mo contenant la traduction Française de Jyraphe dans le sous-répertoire lib/locale/fr_FR.UTF-8/LC_MESSAGES/

 

On déplace les scripts php vers son arborescence Web (à adapter)

sudo mv pub /var/www/jyraphe
sudo chown www-data:www-data /var/www/jyraphe -R

 

Pour que le site soit accessible il se peut qu’il faille que vous configuriez votre serveur web, je ne décrirais pas ici cette étape….

Puis on lance l’installeur :

http://votre-domaine/jyraphe/install.php

On choisi la langue, si l’interface n’est pas en Français quelque chose à dû mal se passer avec les scripts update-po/mo

 

Jyraphe stockera les fichiers uploadé dans un sous-répertoire de sa racine web dans un répertoire var-xxxx où xxxx est généré aléatoirement

 

Et voila c’est presque fini, il ne reste plus qu’a supprimer le script d’installation :

 

sudo rm /var/www/jyraphe/install.php

 

Jyraphe est prêt à l’emploi :

Donc voici ma conclusion, j’ai aimé, la protection par mot de passe du téléchargement de fichier, la durée limitée de téléchargement (pas testé)

Mais voici les défauts rédhibitoires pour moi :

Il n’est pas possible de protéger l’upload de fichier, il n’y a pas d’authentification, n’importe qui peut uploader des fichier sur votre serveur (plutôt risqué).

J’ai bien pensé mettre un accès protégé par mot de passe (équivalent du .htaccess pour apache) mais dès lors le téléchargement serait protégé par ce même mot de passe.

En fait si, voir Edit ci-dessous

 

Enfin il n’y a pas d’administration pour purger les fichiers (pour cela il faut supprimer fichiers dans var-xxx/files et var-xxx/links) et lister les fichiers disponibles

 

J’ai plus qu’à trouver un autre logiciel…

 

Edit :

Le commentaire de tomamplius a piqué ma curiosité et j’ai voulu tester si sous NGINX il était possible de protéger spécifiquement un fichier, en l’occurrence le index.php pour empêcher l’ouverture à tous le monde de l’upload.

Et après pas mal d’essai voici ma configuration :

location /jyraphe {
        location ^~ /jyraphe/index.php {
		auth_basic            "Section privee";
		auth_basic_user_file  $document_root/jyraphe/.htpasswd;
		include         /etc/nginx/fastcgi_params;
		fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		fastcgi_pass    127.0.0.1:9000;
	}
	location ~ \.php$ {
		include         /etc/nginx/fastcgi_params;
		fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		fastcgi_pass    127.0.0.1:9000;
	}
}

Voici un article décrivant tout un workflow de téléchargement automatisé de séries au fur et à mesure de leur diffusion sur Internet.

Cette article est la compilation de nombreux de mes articles qui traitaient d’un bout du sujet

Les manipulation décrites ont été testé sur mon Dockstar mais peuvent être adaptées sans grand efforts sur tout autre machine Linux.

 

Cette article met en œuvre différentes briques logiciels et différents scripts :

  • Flexget : Surveille un flux RSS listant la disponibilité des épisodes de série, si la série est configurée, télécharge le fichier .torrent correspondant et le place dans un répertoire surveillé par Transmission
  • Transmission : télécharge la série via le protocole P2P bittorent
  • Scripts Transmission : un ensemble de scripts qui limitent la bande passante dès lors qu’un PC du LAN est allumé (pour ne pas perturber la navigation sur Internet), déplacent le fichier vidéo de la série dans une répertoire particulier dès lors que le téléchargement par Transmission est terminé (et que le ratio de partage est atteint)
  • Periscope : Scrute à intervalle régulier le répertoire où sont placé les téléchargements terminés et cherche sur divers sites la disponibilité de sous-titres, auquel cas le fichier de sous titre est téléchargé et renommé automatiquement avec le même nom que le fichier vidéo
  • Script de rangement : ce script scrute à son tour le répertoire où sont placé les téléchargements terminés et si sont présents à la fois le fichier vidéo et le fichier de sous-titre il les déplace dans un répertoire où la série peut être visionné (répertoire accessible par un HTPC ou par une Freebox)

 

Enfin avertissement d’usage : Télécharger c’est mal, cet article est une démonstration des possibilités de Linux et non pas une incitation à commettre un crime…

 

Flexget : téléchargement des fichiers torrent à partir d’un flux RSS

Installation

Dépendances : Flexget est un programme python distribué sous la forme d’un paquet egg installable via la commande easy_install du paquet python-setuptools :

sudo aptitude install python2.6 python-setuptools

(Cette installation est assez gourmande en espace disque presque 17Mo sur mon Dockstar)

Comme indiqué l’installation de Flexget est ensuite simple car packagé sous la forme d’un egg :

sudo easy_install flexget

Les paquets egg s’assurent de l’installation des dépendance (en terme de librairies Python). Lors de l’installation de PyYAML j’ai eu cette erreur qui ne semble pas avoir de conséquences :

libyaml is not found or a compiler error: forcing --without-libyaml
(if libyaml is installed correctly, you may need to
specify the option --include-dirs or uncomment and
modify the parameter include_dirs in setup.cfg)
zip_safe flag not set; analyzing archive contents...
Adding PyYAML 3.09 to easy-install.pth file

 

Configuration

Par défaut Flexget va chercher sa configuration dans un fichier config.yml dans un répertoire .flexget du répertoire  home de l’utilisateur le lançant, on créé donc ce fichier :

mkdir ~/.flexget
cd ~/.flexget
touch config.yml

Vient ensuite la configuration proprement dite de Flexget et partie la plus compliquée (enfin le temps de comprendre la syntaxe de la configuration Flexget).

Pour vous aider vous pouvez :

presets:
  global:
    email:
      from: adresse@free.fr
      to:
        - adresse@free.fr
      smtp_host: smtp.free.fr
feeds:
  Series_torrent:
    rss: http://showrss.karmorra.info/xxx
    series:
       settings:
         hdtv:
           timeframe: 3 hours
           quality: hdtv
         720p:
           timeframe: 3 hours
           quality: 720p
       hdtv:
         - Nom série 1
         - Nom série 2
       720p:
         - Nom série téléchargée en HD
    download: /data/downloads/torrents/watch/

 

Transmission : téléchargement de la série

Flexget télécharge le fichier .torrent correspondant à un épisode de série, Transmission se charge de télécharger l’épisode.

Installation

sudo aptitude install transmission-daemon transmission-cli

(place occupé sur mon système : 1 692 ko)

Le paquet transmission-cli n’est utile que pour les scripts périphériques à Transmission (déplacement des torrents terminés, économie de bande passante)

Pour ma configuration j’utilise l’arborescence de répertoire suivante :

download/
    torrents/
        complete/
        downloading/
        seeding/
        watch/
  • watch : répertoire configuré dans Flexget dans lequel les fichiers .torrent vont être déposés, Transmission est configuré pour surveiller ce répertoire et démarrer automatiquement le téléchargement correspondant
  • downloading : répertoire ou sont situés les fichiers en cours de téléchargement (fichier avec une extension part pour partial)
  • seeding : fichier complet mais pour lesquels le ratio de partage n’a pas encore été atteint
  • complete : répertoire où sont déposés in-fine les fichiers complétement téléchargés (et ayant atteint le bon ratio de partage). Ce répertoire est ensuite scruté pour la recherche des sous-titres

 

Changement de l’utilisateur démarrant Transmission (optionnel)

Stopper Transmission :

sudo /etc/init.d/transmission-daemon stop

Éditer le fichier default du script d’init :

sudo vim /etc/default/transmission-daemon

Mettre la ligne OPTIONS en commentaire :

#OPTIONS="--config-dir $CONFIG_DIR"

Éditer le script d’init

sudo vim /etc/init.d/transmission-daemon

Changer l’utilisateur démarrant le service en modifiant la ligne USER :

USER=mon_utilisateur #debian-transmission

Copier le fichier de configuration vers le HOME de notre utilisateur (et mettre à jour les droits) :

mkdir -p $HOME/.config/transmission-daemon
sudo cp /etc/transmission-daemon/settings.json $HOME/.config/transmission-daemon/
sudo chown mon_utilisateur:mon_utilisateur $HOME/.config/transmission-daemon/ -R

 

Configuration de Transmission

La configuration de Transmission doit se faire lorsque ce dernier ne fonctionne pas, il faut donc arrêter le démon si cela n’est pas déjà fait :

sudo /etc/init.d/transmission-daemon stop

On édite ensuite le fichier settings.json qui contient tous les paramètres de Transmission, selon si vous avez réalisé la configuration du paragraphe ci-dessus ce fichier se situe dans votre $HOME dans .config/transmission-deamon sinon il est dans /etc/transmission-deamon

Je ne reprendrais pas ici l’explication des différents paramètres voir pour cela mon article Installer et configurer Transmission en tant que démon

 

Paramétrage d’une Blocklist personnalisée

Une blocklist est une liste d’adresse IP avec qui on ne souhaite pas partager les fichiers en cours de téléchargement. Pour mettre à jour cette liste ou en utiliser une personnalisée se référer à mon article utiliser des listes de blocage personnalisées (blocklist) avec le démon Transmission

Déplacement des téléchargements terminés

Par défaut une fois les téléchargements terminés Transmission partage indéfiniment le fichier, ce comportement peut être modifié par script voir mon article Déplacer/enlever les téléchargements terminés de Transmission (démon)

Limitation automatique de la bande passante

Lorsque Transmission télécharge il prendra par défaut toute la bande passante, pénalisant les autres usage d’Internet sur le réseau.

Il est possible de définir des vitesses maximales de téléchargement afin de limiter ce comportement, voir il est possible de définir 2 vitesses maximales et de les planifier en fonction des jours / heures.

Mais encore mieux grâce a un petit script qui s’exécute à intervalle régulier le basculement de la vitesse maximal à la vitesse modéré se fait automatiquement dès lors qu’un PC du réseau est allumé, pour en savoir plus voir mon article Limiter l’usage de la bande passante par Transmission automatiquement

 

Periscope : recherche des sous-titres

Périscope permet de télécharger les sous-titres associés à un fichier vidéo. Il se base sur divers sites fournissant des sous titres (dont OpenSubtitles.org)

Personnellement je l’installe depuis les sources ainsi :

Installation de subversion pour récupérer le dernier code source et des dépendances de Périscope :

sudo aptitude install subversion python-setuptools python-beautifulsoup python-xdg

Téléchargement du code source :

svn checkout http://periscope.googlecode.com/svn/trunk/ periscope-svn

Installation :

cd periscope-svn
sudo python setup.py install

Bonus : mon plugin sous-titres.eu (pour l’installer copier le fichier dans le répertoire plugins des sources et ajouter la ligne « from SousTitresEu import SousTitresEu » dans le fichier __init__.py du répertoire plugins puis compiler)

 

Configuration de la langue via le fichier ~/.config/periscope

[DEFAULT]
 lang = fr
 plugins =

Plus de détails :Téléchargement automatique des sous-titres de série avec Periscope et Installer Periscope depuis les sources + activation / désactivation des plugins

 

Script de déplacement des fichiers

Dernière étape, on a le fichier vidéo (téléchargé via Flexget et Transmission) et le fichier de sous-titre (téléchargé par Periscope), tous deux portent le même nom (merci Periscope) maitenant on veut pouvoir les ranger, c’est à dire les déplacer vers un autre espace disque où ils pourront être visionnées.

Ce répertoire est très spécifique à l’installation de chacun je vais ici décrire la mienne, à vous de l’adapter à votre architecture.

 

Donc dans mon cas c’est mon dockstar qui réalise toutes les opération de téléchargement, les séries sont ensuite déplacé vers le Freebox Server pour celle en HD et vers mon mediacenter pour les séries SD.

 

Mon mediacenter est une machine Linux le plus simple est donc de monter le répertoire de destination via sshfs.

Préparation déplacement de fichier via sshfs

Sur la machine cible le client openssh (paquet openssh-client) devra être installé.

Sur la machine source (Dockstar) ayant réalisée les téléchargements et sur laquelle le script va tourner on crée ce qu’il faut pour établir une connexion SSH sans mot de passe (donc scriptable)

Création des clés :

ssh-keygen -t rsa -b 2048

Ce qui donne :

Generating public/private rsa key pair.
 Enter file in which to save the key (/home/mon_user/.ssh/id_rsa):
 Enter passphrase (empty for no passphrase):
 Enter same passphrase again:
 Your identification has been saved in /home/mon_user/.ssh/id_rsa.
 Your public key has been saved in /home/mon_user/.ssh/id_rsa.pub.
 The key fingerprint is:
 bb:3c:91:f4:6f:cb:da:b1:32:7b:08:f8:4b:33:35:44 mon_user@mon_dockstar
 The key's randomart image is:
 +--[ RSA 2048]----+
 |          E      |
 |         .       |
 |          .      |
 |        ..       |
 |       oSoo      |
 |      . +o..     |
 |       .=o o.    |
 |       oo++o+o   |
 |        +ooB=.   |
 +-----------------+

Copie de la clé  publique sur la mahcine cible (le mediacenter) :

ssh-copy-id -i /home/mon_user/.ssh/id_rsa.pub mon_user_distant@IP_machine_distante

Ce qui donne :

Now try logging into the machine, with "ssh 'mon_user_distant@IP_machine_distante'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

On obéit au recommandation ci-dessus et on se connecte en SSH sur la machine cible (mediacenter) et on ajoute l’ordinateur distant à liste des known_host, puis on se déconnecte.

On installe ensuite le paquet sshfs (2 879 ko sur mon Dockstar)

sudo aptitude install sshfs

Préparation du répertoire devant accueillir le montage via sshfs et gestion des droits utilisateur :

sudo mkdir /mnt/sweetbox
sudo chown mon_user:mon_user /mnt/sweetbox
sudo adduser mon_user fuse
sudo chown root:fuse /dev/fuse

Et on reboot, on peut ensuite (toujours du Dockstar) tester le montage sshfs :

sshfs mon_user_distant@IP_mediacenter:/chemin/cible/vers/les/series /mnt/sweetbox/

Pour démonter :

fusermount -u /mnt/sweetbox

Script de déplacement des fichiers

Voici le script de déplacement des fichier de série proprement dit (voir les explication après le script) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/bash
 
SERIESNONTRIE=/data/downloads/torrents/complete
SERIES_SD_PATH=/mnt/sweetbox
SERIES_HD_PATH=/mnt/freebox
 
cd $(dirname "${0}")
 
FREEBOX_MOUNTED=false
function chechAndMountFreebox {
  if [ $FREEBOX_MOUNTED == false ]; then
    echo "Montage du répertoire contenant les séries de la Freebox"
    curlftpfs ftp://192.168.1.254/Disque%20dur/Vidéos/Séries /mnt/freebox/ -o user=freebox:password,uid=1000,gid=1000,umask=003
    FREEBOX_MOUNTED=true
  fi
}
 
SWEETBOX_MOUNTED=false
function chechAndMountSweetbox {
  if [ $SWEETBOX_MOUNTED == false ]; then
    echo "Montage du répertoire contenant les séries de Sweetbox"
    ./wakeonlan.sh "adresse MAC" "Adresse IP"
    sshfs user_distant@adresse_ip:/chemin/cible/vers/les/series /mnt/sweetbox/
    SWEETBOX_MOUNTED=true
  fi
}
 
#pour tous les éléments présents dans le repertoire à trier 
for F in $SERIESNONTRIE/*
do
  # si c'est un fichier
  if [ -f "$F" ]; then
    extension=`echo ${F##*.} | tr "[:upper:]" "[:lower:]"`
    if [ $extension == "avi" ] ; then
      SERIES_PATH=$SERIES_SD_PATH
      chechAndMountSweetbox
    elif [ $extension == "mkv" ] ; then
      SERIES_PATH=$SERIES_HD_PATH
      chechAndMountFreebox
    else
      continue
    fi
 
    # on deduit le nom de la serie à partir du nom du fichier
    serie=`basename "$F" | sed 's/\([a-zA-Z.]*\.S[0-9]\{2\}\)E[0-9]\{2\}.*/\1/'`
 
    # si il existe un fichier srt portant le meme nom dans le meme repertoire
    if [ -f "${F%.*}.srt" ]; then
 
      # on deplace les 2 fichiers dans un repertoire portant le nom de la serie et de la saison
      echo Deplacement de "${F%.*}.*" dans $SERIES_PATH/$serie
 
      # si le repertoire destination n'existe pas
      if [ ! -d "$SERIES_PATH/$serie" ]; then
        # on le crée
        echo Creation du repertoire $SERIES_PATH/$serie
        mkdir -p "$SERIES_PATH/$serie/Vus"
      fi
 
      mv ${F%.*}.srt $SERIES_PATH/$serie
      mv ${F%.*}.$extension $SERIES_PATH/$serie
    fi
  fi
done
 
if [ $FREEBOX_MOUNTED == true ]; then
  echo "Démontage du répertoire contenant les séries de la Freebox"
  sudo umount /mnt/freebox/
fi
if [ $SWEETBOX_MOUNTED == true ]; then
  echo "Démontage du répertoire contenant les séries de Sweetbox"
  fusermount -u /mnt/sweetbox
  ./shutdown.sh "mon_user_distant" "IP distante"
fi

 

Le principe de ce script est le suivant, on parcours tous les fichiers présents dans le répertoire où sont stocké les téléchargements terminés (download/torrents/complete/)  (ligne 29)

Ligne 37 : Si le fichier à l’extension .mkv c’est une série en HD on va donc potentiellement le déplacer vers la Freebox.

On verifie donc que le disque dur de la Freebox est bien monté (via un booléen) sinon on le fait (voir mon article Monter le disque dur du Freebox Server (v6) en ligne de commande) (ligne 39 et fonction en ligne 9-16)

Ligne 34 : Si le fichier à l’extension .avi c’est une série en SD on va donc potentiellement le déplacer vers le mediacenter (sweetbox) via sshfs.

Je fais alors appel à mon script de démarrage via WakeOnLan qui démarre la machine dont on passe l’adresse IP et MAC en paramètre si elle ne l’est pas déjà, sinon on flag le fait que le mediacenter était déjà allumé pour ne pas l’éteindre à la fin (voir Allumer / éteindre un PC sous Linux à distance (scripts)). Puis on monte le répertoire de destination. (ligne 36 et fonction en ligne 18-27)

Ligne 48 : on vérifie si on a un fichier de sous-titre, si oui on est OK pour déplacer les 2 fichiers (lignes 60-61) vers le chemin cible déterminé en fonction du type du fichier vidéo en cours de traitement (lignes 35 et 38)

Les séries sont rangé dans le répertoire cible dans un sous répertoire du nom de la série (ligne 45) que l’on crée le cas échéant (lignes 54-58)

Lignes 66-74 : Puis on range comme c’était avant notre arrivé, on démonte les point de montage et on n’éteint le mediacenter si ce dernier n’était pas allumé avant le script (voir Allumer / éteindre un PC sous Linux à distance (scripts))

 

Planification

Dans cette article de nombreux scripts ont été mis en œuvre il faut les planifier via CRON, en voici un exemple :

MAILTO=""
 LANG=fr_FR.UTF-8
 PATH=/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin
 ##########################################################
 #minute (0-59),                                          #
 #|  hour (0-23),                                         #
 #|  |  day of the month (1-31),                          #
 #|  |  |  month of the year (1-12),                      #
 #|  |  |  |  day of the week (0-6 with 0=Sunday)         #
 #|  |  |  |  |       commands                            #
 ##########################################################
 
##### Opérations pour Transmission
# téléchargement d'une blocklist personnalisé une fois par semaine
0 0 * * 0 $HOME/bin/blocklist_transmission.sh > $HOME/tmp/maintenance/blocklist.log
# Toutes les 3h on vérifie s'il n'y a pas une téléchargement terminé à déplacer
30 */3 * * * $HOME/bin/remove_completed_torrents.sh
# Toutes les minutes on vérifie s'il n'y a pas un PC qui s'allume sur le réseau pour basculer en vitesse lente
*/1 * * * * $HOME/bin/alt_speed_transmission.sh
 
##### Téléchargement des séries, on enchaine flexget, periscope et le déplacement des fichier toutes les 3h (les 3 scripts étant espacé de 20 minutes)
0 */3 * * * flexget -v --cron > $HOME/tmp/flexget.log
20 */3 * * * periscope /data/downloads/torrents/complete/
40 */3 * * * $HOME/bin/move_tv_show.sh

 

Sources:

Flexget :

Transmission :

TVNamer (pas utilisé encore) :

SSHFS :

La nouvelle (enfin plus tant que ça) Freebox v6 possède un boîtier serveur (comme la v5), ce dernier est équipé d’un disque dur de 250 Go.

Voici les différentes techniques que j’ai testé pour monter ce disque dur sous Linux (Debian/Ubuntu)

Montage via Samba :

Si vous ne l’avez pas déjà, installer le paquet cifs-utils (lors de l’installation une question relative au workgroup de travail est posé, ne pas s’en occuper)

La montage se fait ensuite via la commande mount :

sudo mount -t cifs //mafreebox.freebox.fr/Disque\ dur/Vidéos  /mnt/freebox/ -o user=freebox,password=password,uid=1000,gid=1000,rw

L’utilisateur et le mot de passe sont configurables via la console locale de la freebox (http://mafreebox.freebox.fr) :

L’accès est anonyme par défaut (pas de login / mot de passe) mais si vous utilisez cette commande dans un script il faut mettre un login / mot de passe sinon la commande mount demande un mot de passe (pour lequel vous pouvez sisir n’importe quoi)

Montage via FTP

Installer le paquet curlftpfs, puis le montage se fait avec la commande du même nom :

curlftpfs ftp://192.168.1.254/Disque%20dur/Vidéos /mnt/freebox/ -o user=freebox:password,uid=1000,gid=1000,umask=003

(pas besoin de sudo ici)

Le login, mot de passe est aussi défini dans la console locale de la freebox mais dans al zone FTP :

Contrairement à l’accès Samba, l’accès au FTP n’autorise pas par défaut l’accès anonyme, mais vous pouvez le forcer.


Source :

[resolu] Monter le HDD NAS d’une FreeBox V6 ‘revolution’ ? – Forum Ubuntu-fr.org : presque tout y est, sauf 2-3 réglage concernant les droits (uid / gid)

24 juin 11

Firefox 5.0 est sorti cette semaine, bien que n’apportant aucune révolution j’ai voulu l’installer sur mon poste de travail sous Windows XP.

L’installation s’est déroulé sans problème mais au démarrage j’ai eu cette erreur :

Echofon (extension twitter) n’arrive pas à se connecter, ce qui est très gênant pour moi, je suis donc repassé sous Firefox 4.0.1.

Après quelques recherches sur internet voici le lien pour télécharger l’installeur qui permet de ré-installer Firefox 4.0.1 en Français : Firefox 4.0.1 – Win – 32bits

 

Source : Mozilla Firefox 5.0 : en fin d’article les liens pour les 3 dernières versions de Firefox 2.0.0.20, 3.6.18 et 4.0.1 pour Windows, Linux et OSX

Commentaires fermés

Hier je bidouillais sur mon Dockstar et un programme que je testais s’est montré trop gourmand en ressource puis à crashé, mon système ne répondais plus du tout. Impatient j’ai rebooté électriquement mon Dockstar, erreur fatale, impossible après cela de me connecter en SSH sur Debian.

Voici les symptômes au début du boot le système est pingable, la lumière du Dockstar clignote en vert, puis le système ne répond plus au ping et la lumière s’éteint….

Voici les étapes suivi pour ramener le Dockstar à la vie.

Booter sous pogoplug

Tout d’abord je me suis assuré que le problème venait de Debian et pas du Dockstar lui-même, pour cela il suffit de débrancher tous les périphériques USB et de rebooter, au bout d’un certain temps le système devrait être accessible en SSH avec l’utilisateur root (comme lors de la toute première connexion au Dockstar sous Pogoplug) :

ssh root@[Ip du Dockstar]

Avec le mot de passe stxadmin

Si ce n’est pas le cas il va vous falloir vous fabriquer un connecteur JTAG, heureusement pour moi je n’en ai pas eu besoin

Installer le uBoot modifié

Jeff Doozan (encore lui) à créé une version modifié du uBoot (Universal Bootloader) permettant d’interagir avec le dockstar lors du boot, nous allons l’installer (peut n’est ce pas nécessaire, je n’ai pas vérifié mais il semblerait que le uBoot modifié soit déjà installé dès lors que l’on à installé Debian avec le script de Jeff Doozan)

cd /tmp
wget http://jeff.doozan.com/debian/uboot/install_uboot_mtd0.sh
chmod +x install_uboot_mtd0.sh
./install_uboot_mtd0.sh

Configurer netconsole

Netconsole permet de transmettre les messages du noyaux via UDP (réseau), il faut configurer netconsole (inclus dans le noyau 2.6 de Linux) pour qu’il emette les message de boot vers un autre PC via le réseau.

On réalise cette configuration avec l’utilitaire fw_setenv installé par le uBoot de Jeff Dozan, dans mon cas cet utilitaire est présent dans /usr/sbin qui n’est pas dans mon path d’où le chemin complet à chaque fois :

/usr/sbin/fw_setenv serverip [adresse IP PC]
/usr/sbin/fw_setenv ipaddr [adresse IP Dockstar]
/usr/sbin/fw_setenv if_netconsole 'ping $serverip'
/usr/sbin/fw_setenv start_netconsole 'setenv ncip $serverip; setenv bootdelay 10; setenv stdin nc; setenv stdout nc; setenv stderr nc; version;'
/usr/sbin/fw_setenv preboot 'run if_netconsole start_netconsole'

Diagnostiquer le boot du Dockstar

Sur le PC qui recevra les messages netconsole lancer la commande :

nc -lu 6666

Pour Ubuntu (11.04) sur Debian il semblerait que ce soit nc -l -u -p 6666 ce qui m’a valu un peu de recherche…

Rebooter le Dockstar (shutdown -r now sur la console en SSH que vous devez avoir sous la main pour avoir fait les manip ci-dessus) et miracle sur votre autre console (celle avec le nc) les messages de boot s’affichent :

Messages de boot sous pogoplug :

U-Boot 2010.09 (Oct 23 2010 - 11:49:22)
 Marvell-Dockstar/Pogoplug by Jeff Doozan
 Hit any key to stop autoboot:  0
 (Re)start USB...
 USB:   Register 10011 NbrPorts 1
 USB EHCI 1.00
 scanning bus for devices... 2 USB Device(s) found
 scanning bus for storage devices... 0 Storage Device(s) found
 ** Block device usb 0 not supported
 
** Invalid boot device **
 Creating 1 MTD partitions on "nand0":
 0x000002500000-0x000010000000 : "mtd=3"
 UBI: attaching mtd1 to ubi0
 UBI: physical eraseblock size:   131072 bytes (128 KiB)
 UBI: logical eraseblock size:    129024 bytes
 UBI: smallest flash I/O unit:    2048
 UBI: sub-page size:              512
 UBI: VID header offset:          512 (aligned 512)
 UBI: data offset:                2048
 UBI: attached mtd1 to ubi0
 UBI: MTD device name:            "mtd=3"
 UBI: MTD device size:            219 MiB
 UBI: number of good PEBs:        1751
 UBI: number of bad PEBs:         1
 UBI: max. allowed volumes:       128
 UBI: wear-leveling threshold:    4096
 UBI: number of internal volumes: 1
 UBI: number of user volumes:     0
 UBI: available PEBs:             1730
 UBI: total number of reserved PEBs: 21
 UBI: number of PEBs reserved for bad PEB handling: 17
 UBI: max/mean erase counter: 1/1
 UBIFS error (pid 0): ubifs_get_sb: cannot open "ubi:rootfs", error -19
 Error reading superblock on volume 'ubi:rootfs'!
 ** Block device usb 0 not supported
 ** Block device usb 1 not supported
 ** Block device usb 2 not supported
 ** Block device usb 3 not supported
 ** Block device usb 0 not supported
 ** Block device usb 0 not supported
 Wrong Image Format for bootm command
 ERROR: can't get kernel image!
 stopping USB..
 ### JFFS2 loading 'uboot-original-mtd0.kwb' to 0x800000
 Scanning JFFS2 FS: ........ done.
 ### JFFS2 load complete: 524288 bytes loaded to 0x800000
 ## Starting application at 0x00800200 ...

J’ai ensuite rebranche ma clé USB qui contient mon système Debian et le disque dur qui contient divers point de montage et rebooté une autre fois le Dockstar

 

Messages de boot sous Debian :

U-Boot 2010.09 (Oct 23 2010 - 11:49:22)
 Marvell-Dockstar/Pogoplug by Jeff Doozan
 Hit any key to stop autoboot:  0
 (Re)start USB...
 USB:   Register 10011 NbrPorts 1
 USB EHCI 1.00
 scanning bus for devices... 4 USB Device(s) found
 scanning bus for storage devices... 2 Storage Device(s) found
 Loading file "/rescueme" from usb device 0:1 (usbda1)
 ** File not found /rescueme
 reading /rescueme.txt
 
** Unable to read "/rescueme.txt" from usb 0:1 **
 Creating 1 MTD partitions on "nand0":
 0x000002500000-0x000010000000 : "mtd=3"
 UBI: attaching mtd1 to ubi0
 UBI: physical eraseblock size:   131072 bytes (128 KiB)
 UBI: logical eraseblock size:    129024 bytes
 UBI: smallest flash I/O unit:    2048
 UBI: sub-page size:              512
 UBI: VID header offset:          512 (aligned 512)
 UBI: data offset:                2048
 UBI: attached mtd1 to ubi0
 UBI: MTD device name:            "mtd=3"
 UBI: MTD device size:            219 MiB
 UBI: number of good PEBs:        1751
 UBI: number of bad PEBs:         1
 UBI: max. allowed volumes:       128
 UBI: wear-leveling threshold:    4096
 UBI: number of internal volumes: 1
 UBI: number of user volumes:     0
 UBI: available PEBs:             1730
 UBI: total number of reserved PEBs: 21
 UBI: number of PEBs reserved for bad PEB handling: 17
 UBI: max/mean erase counter: 1/1
 UBIFS error (pid 0): ubifs_get_sb: cannot open "ubi:rootfs", error -19
 Error reading superblock on volume 'ubi:rootfs'!
 Loading file "/boot/uImage" from usb device 0:1 (usbda1)
 1 bytes read
 Found bootable drive on usb 0:1
 Loading file "/boot/uImage" from usb device 0:1 (usbda1)
 1433640 bytes read
 Loading file "/boot/uInitrd" from usb device 0:1 (usbda1)
 4887353 bytes read
 ## Booting kernel from Legacy Image at 00800000 ...
 Image Name:   Debian kernel 2.6.32-5-kirkwood
 Image Type:   ARM Linux Kernel Image (uncompressed)
 Data Size:    1433576 Bytes = 1.4 MiB
 Load Address: 00008000
 Entry Point:  00008000
 Verifying Checksum ... OK
 ## Loading init Ramdisk from Legacy Image at 01100000 ...
 Image Name:   Debian ramdisk 2.6.32-5-kirkwood
 Image Type:   ARM Linux RAMDisk Image (gzip compressed)
 Data Size:    4887289 Bytes = 4.7 MiB
 Load Address: 00000000
 Entry Point:  00000000
 Verifying Checksum ... OK
 Loading Kernel Image ... OK
 OK
 
Starting kernel ...

On voit / confirme alors que le boot du Dockstar fonctionne parfaitement puisque le kernel Debian démarre. Le problème se situe donc au niveau de ce dernier…

 

Réparer Debian

Après avoir éteint le Dockstar, j’ai branché la clé USB contenant Debian sur mon PC et commencé par faire une vérification du disque :

sudo fsck /dev/sdb1

La clé contenait une erreur :

fsck de util-linux-ng 2.17.2
 e2fsck 1.41.14 (22-Dec-2010)
 /dev/sdb1 est monté.
 
AVERTISSEMENT !!! Le système de fichiers est monté.   Si vous continuez
 vous ***ALLEZ*** causer des dommages ***SÉVÈRES*** au système de fichiers.
 
Souhaitez-vous réellement continuer (o/n)? oui
 
/dev/sdb1 contient un système de fichiers comportant des erreurs, vérification forcée.
 Passe 1 : vérification des i-noeuds, des blocs et des tailles
 Passe 2 : vérification de la structure des répertoires
 Passe 3 : vérification de la connectivité des répertoires
 Passe 4 : vérification des compteurs de référence
 I-noeud 8098 non attaché
 Connecter à /lost+found<o>? oui
 
le compteur de référence de l'i-noeud 8098 est 2, devrait être 1. Corriger<o>? oui
 
Passe 5 : vérification de l'information du sommaire de groupe
 
/dev/sdb1: ***** LE SYSTÈME DE FICHIERS A ÉTÉ MODIFIÉ *****
 /dev/sdb1 : 28353/108864 fichiers (1.3% non contigus), 217045/435448 blocs

J’ai ensuite re-généré l’image du kernel, pour cela on démarre le Dockstar sous pogoplug (sans clé USB) et on se connecte dessus en SSH (voir 1er paragraphe).

On connecte alors la clé USB contenant Debian, on la monte, on fait un chroot sur le point de montage et on régénère l’image du kernel :

mount /dev/sda1 /mnt
/usr/sbin/chroot /mnt
/usr/bin/mkimage -A arm -O linux -T kernel  -C none -a 0x00008000 -e 0x00008000 -n Linux-2.6.32-5 -d /boot/vmlinuz-2.6.32-5-kirkwood /boot/uImage

Sortie de la commande :

Image Name:   Linux-2.6.32-5
 Created:      Tue Jun 21 23:58:21 2011
 Image Type:   ARM Linux Kernel Image (uncompressed)
 Data Size:    1433576 Bytes = 1399.98 kB = 1.37 MB
 Load Address: 0x00008000
 Entry Point:  0x00008000

Puis

 

/usr/bin/mkimage -A arm -O linux -T ramdisk -C gzip -a 0x00000000 -e 0x00000000 -n initramfs -d /boot/initrd.img-2.6.32-5-kirkwood /boot/uInitrd

 

Sortie de la commande :

Image Name:   initramfs
 Created:      Tue Jun 21 23:58:25 2011
 Image Type:   ARM Linux RAMDisk Image (gzip compressed)
 Data Size:    4887289 Bytes = 4772.74 kB = 4.66 MB
 Load Address: 0x00000000
 Entry Point:  0x00000000

 

Laisser les périphériques branchés, sortir du chroot (exit) et rebooter et normalement miracle le Dockstar devrait démarrer sous Debian…

 

Sources :