MycRub.info

Aller au contenu | Aller au menu | Aller à la recherche

02oct. 2016

Bananian sur le BananaPi

Après installation de de la distribution bananian sur le PananaPi, quelques étapes à suivre :

Changer le mot de passe root.

Ajouter un compte (dans le groupe sudo). Loggé en tant que root :

adduser banana --shell /usr/bin/zsh sudo
apt-get install sudo

Se relogger en tant que banana.

26janv. 2014

Installation de java et tomcat

Pour faire un peu de développement et héberger mes applications, j'ai besoin d'installer Java et Tomcat. Une solution serait d'installer les package officiels d'Ubuntu par la commande apt-get, mais je préfère installer ces 2 outils manuellement. C'est un peu plus compliqué mais ça me permet de choisir exactement les packages que je veux, où je veux les installer, et avec quel user.

Compte Linux

Je vais créer un compte linux qui sera responsable de l'exécution de Tomcat. Je me connecte avec ce compte et je crée un répertoire qui contient les fichiers installés ou à installer.

sudo adduser tomcat
sudo -i -u tomcat
mkdir install
cd install

Java

Oracle a décidé que télécharger Java ne devait pas être une chose trop facile. Une commande wget toute simple ne fonctionne pas, car le site web nécessite qu'on accepte d'abord la licence. StackOverflow donne une ou deux solutions. Avec le compte tomcat, j'exécute la commande suivante :

wget --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" "http://download.oracle.com/otn-pub/java/jdk/7u51-b13/jdk-7u51-linux-arm-vfp-hflt.tar.gz"
tar -xvzf jdk-7u51-linux-arm-vfp-hflt.tar.gz
ln -s jdk1.7.0_51 ../java

Ainsi, java est installé directement dans /home/tomcat/java

Maven

Maven n'est pas utilisé par Tomcat, mais j'en aurai besoin pour mes développements. Je l'installe au même endroit. Même principe que pour Java (sans la problématique de cookie) :

wget http://mirror.metrocast.net/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz
tar -xvzf apache-maven-3.1.1-bin.tar.gz
ln -s apache-maven-3.1.1 ../maven

Tomcat

Encore une fois :

wget http://apache.mirrors.hoobly.com/tomcat/tomcat-7/v7.0.50/bin/apache-tomcat-7.0.50.tar.gz
tar -xvzf apache-tomcat-7.0.50.tar.gz
ln -s apache-tomcat-7.0.50 ../tomcat

Avant de pouvoir le démarrer, je dois rajouter quelques variables d'environnement :

nano ~/.profile

Rajouter les lignes suivantes à la fin du fichier :

JAVA_HOME=$HOME/java
M2_HOME=$HOME/maven
CATALINA_HOME=$HOME/tomcat
CATALINA_PID=$CATALINA_HOME/logs/catalina.pid
PATH=$JAVA_HOME/bin:$M2_HOME/bin:$PATH

Démarrage automatique

Un petit script init.d pour faire de tomcat un service linux :

> sudo nano /etc/init.d/tomcat

Voici mon script :

#!/bin/bash
### BEGIN INIT INFO
# Provides: tomcat service
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO

NAME=tomcat
DESC=Tomcat
USERNAME=tomcat
CATALINA_HOME=/home/$USERNAME/tomcat
JAVA_HOME=/home/$USERNAME/java
CATALINA_PID=$CATALINA_HOME/logs/catalina.pid
CATALINA_OPTS=""

case "$1" in
start)
  printf "%-50s" "Starting $NAME..."
  sudo -u $USERNAME CATALINA_HOME=$CATALINA_HOME JAVA_HOME=$JAVA_HOME CATALINA_PID=$CATALINA_PID $CATALINA_HOME/bin/startup.sh $DAEMONOPTS
;;
status)
        printf "%-50s" "Checking $NAME..."
        if [ -f $CATALINA_PID ]; then
            PID=`cat $CATALINA_PID`
            if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; then
                printf "%s\n" "Process dead but pidfile exists"
            else
                echo "Running"
            fi
        else
            printf "%s\n" "Service not running"
        fi
;;
stop)
  printf "%-50s" "Stopping $NAME"
  sudo -u $USERNAME CATALINA_HOME=$CATALINA_HOME JAVA_HOME=$JAVA_HOME CATALINA_PID=$CATALINA_PID $CATALINA_HOME/bin/shutdown.sh $DAEMONOPTS
;;
restart)
  $0 stop
  $0 start
;;
*)
  echo "Usage: $0 {status|start|stop|restart}"
  exit 1
esac

20janv. 2014

Installation de flexget

Flexget, c'est l'outil ultime du geek qui veut automatiser le téléchargement des épisodes de ses séries préférées. Pas d'interface graphique, tout se passe dans un fichier de configuration et dans les lignes de commande. Surpuissant et super flexible. Un tas de plugins qui permettent de s'intégrer à toutes sortes d'écosystèmes.

Installation

J'ai suivi la procédure décrite dans la documentation.

Il s'agit d'un outil Python. Il est nécessaire d'installer pip :

sudo apt-get install python-pip

Puis Flexget :

sudo pip install flexget

Configuration

Je vais créer un user Linux dédié pour flexget. Ce user fera partie du groupe media qui a accès à ma freebox. D'abord, je crée le groupe media, j'y crée le user download et j'y ajoute le user picuntu :

sudo addgroup media
sudo adduser download
sudo adduser download media
sudo adduser picuntu media

Ensuite je me connecte en tant que download :

sudo -u download -i

Puis je crée la configuration de flexget :

mkdir .flexget
chgrp media .flexget
cd .flexget
nano config.yml

Ma configuration :

tasks:
  tv:
    inputs:
      - rss: http://www.ezrss.it/feed/
      - rss: http://kat.ph/tv/?rss=1

    series:
      720p:
        - series1
        - series2
        - series3

    email:
       from: mon@email.com
       to: mon@email.com
       smtp_host: smtp.free.fr
       smtp_port: 25

    download:
      path: "~/.flexget/torrents"
      overwrite: yes
      fail_html: yes

schedules:
  - tasks: tv
    interval:
      hours: 1

Le fichier

Update 02/10/2016 :

tasks:
  tv:
    rss: http://showrss.info/xxxxx
    all_series: yes

    email:
      from: xxxe@xxx
      to: xxx@xxx
      smtp_host: smtp.free.fr
      smtp_port: 25

    download:
      path: "~/.flexget/torrents"
      overwrite: yes
      fail_html: yes

schedules:
  - tasks: tv
    interval:
      minutes: 15

Quelques explications

Dans le plugin inputs, j'indique à flexget quelles sources de fichiers il doit scruter. Ce sont des flux RSS qui contiennent des liens vers des torrents.

Dans le plugin configure_series, j'indique que je veux des épisodes encodés en qualité 720p, mais qu'une qualité inférieure peut aller si on n'a rien trouvé pendant 12h après la sortie de l'épisode. Je lui indique aussi que la liste des séries qui m'intéressent est sur le site betaseries.com.

Le plugin email sert à indiquer à flexget qu'il peut m'envoyer un mail quand un évènement s'y prète : téléchargement réussi ou gros plantage.

Le plugin download permet de configurer l'endroit où les fichiers .torrent doivent être sauvés. Il y a d'autres plugins qui permettent de s'interfacer plutôt avec un client bittorent (deluge ou transmission). La freebox contient un clien transmission, mais il semble que sa version ne soit pas compatible pour le moment avec flexget.

La partie schedules permet de planifier l'exécution de flexget. Ici, on va exécuter la tâche tv toutes les heures.

Intégration avec la Freebox

Je crée un lien vers le répertoire du NAS freebox qui est scruté par le client Bittorent. Lorsque un fichier .torrent y est déposé, le client bittorent de la freebox (transmission) va automatiquement le prendre en compte et le télécharger:

sudo ln -s /media/freebox/Téléchargements/A\ Télécharger/ /home/download/.flexget/torrents

Démarrage du daemon flexget comme un service Linux

Pour que flexget démarre automatiquement à chaque reboot, il faut en faire un service. Je crée donc un script d'init :

sudo nano /etc/init.d/flexget

Mon script :

#!/bin/bash
### BEGIN INIT INFO
# Provides: flexget daemon
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO 

DAEMON_PATH="/home/download"

DAEMON=flexget
DAEMONOPTS=""

NAME=flexget
DESC="Flexget Daemon"
USERNAME=download

case "$1" in
start)
  printf "%-50s" "Starting $NAME..."
  cd $DAEMON_PATH
  sudo -u $USERNAME $DAEMON $DAEMONOPTS daemon start -d
;;
status)
  printf "%-50s" "Checking $NAME..." 
  cd $DAEMON_PATH
  sudo -u $USERNAME $DAEMON $DAEMONOPTS daemon status
;;
stop)
  printf "%-50s" "Stopping $NAME" cd $DAEMON_PATH 
  sudo -u $USERNAME $DAEMON $DAEMONOPTS daemon stop
;;
restart)
  $0 stop
  $0 start
;;
*)
  echo "Usage: $0 {status|start|stop|restart}"
  exit 1
esac

Le fichier

Enregistrement :

sudo chmod +x /etc/init.d/flexget
sudo update-rc.d flexget defaults

Afin de le démarrer la première fois :

sudo service flexget start

Il ne reste plus qu'à attendre.

20janv. 2014

Monter le disque dur de la freebox

J'ai besoin de pouvoir accéder au disque dur de ma freebox depuis mon serveur picuntu, afin d'y déposer des fichiers.

J'ai donc suivi le tutorial à cette adresse : http://doc.ubuntu-fr.org/freeboxv6

Installation de Cifs-Util :

sudo apt-get install cifs-utils

Création du point de montage :

sudo mkdir /media/freebox/

Paramétrage :

sudo nano /etc/fstab

Ajouter la ligne suivante dans le fichier :

//mafreebox.freebox.fr/Disque\040dur /media/freebox cifs _netdev,rw,users,iocharset=utf8,uid=1000,gid=media,sec=none,file_mode=0777,dir_mode=0777 0 0

Update 02/10/2016 : ce qui fonctionne sur bananian :

//mafreebox.freebox.fr/Disque\040dur /media/freebox cifs guest,uid=banana,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm 0 0

NB : ceci va donner les droits en lecture-écriture à tous les users du groupe media

Effectuer le montage (ça sera automatique à chaque démarrage):

mount -a

20janv. 2014

Installation de nginx

Nginx me sert de reverse proxy pour accéder à ma machine depuis le web. Le but : que toutes les requêtes http qui arrivent sur le port 443 (https donc) de ma freebox asoient forwardées au serveur picuntu. La configuration de la freebox est très facile, je ne m'attarde pas sur ce point.

Sur le serveur picuntu, lancer la commande suivante pour installer nginx :

sudo apt-get install nginx

Configuration

Modifier le fichier de configuration par défaut :

sudo nano /etc/nginx/nginx.conf

Voici ma configuration :

user www-data;
worker_processes 1;
pid /run/nginx.pid;
events {
    worker_connections 768;
}
http {
    server {
        listen 443 default_server ssl;
        ssl_certificate server.crt;
        ssl_certificate_key server.key;
        auth_basic "Restricted to operators";
        auth_basic_user_file .htpasswd;

        location /shell/ {
            proxy_pass http://localhost:4200;
        } 
    }
}

Le fichier

Quelques commentaires :

  • worker_processes est limité à 1 pour ne pas surcharger le CPU avec des tâches de crypto (https)
  • nous écoutons sur le port https 443
  • nginx s'attend à trouver 3 fichiers : server.crt (le certificat https), server.key (la clé privée du certificat) et .htpasswd (authentification basique)
  • toutes les requêtes qui arrivent sur la route /shell/ sont redirigées vers le port 4200 : c'est ShellInABox

Génération de la clé privée et du certificat

Cette étape est expliquée dans la doc Nginx :

sudo -i
cd /etc/nginx
openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
exit

Génération du fichier d'authentification

Cette étape est expliquée dans la FAQ Nginx

sudo -i
cd /etc/nginx
printf "LOGIN:$(openssl passwd -crypt PASSWORD)\n" >> .htpasswd
exit

Remplacer LOGIN et PASSWORD par le login et le password que vous allez devoir rentrer pour authentifier votre session http. Cela ne vous prémunis pas de devoir vous logger ensuite avec un vrai compte linux dans ShellInABox. C'est surtout pour cacher par défaut au monde extérieur l'ensemble des services présents sur votre machine.

Recharger les paramètres

Pour informer Nginx que la configuration a changé, et pour qu'il la recharge

sudo nginx -s reload

Tester

Voilà. Nginx transfère maintenant vos requêtes vers le bon service. Exemple : https://mafreebox.fr/shell. Depuis le monde extérieur, remplacer mafreebox.fr par votre adresse ip (par exemple).

20janv. 2014

Installation de ShellInABox

ShellInABox me sert à exposer un service de ligne de commande sur internet. Ca me permet d'administrer mon serveur picuntu depuis n'importe quelle machine connectée à Intenet avec un navigateur web, sans avoir à installer un client ssh. C'est notament le cas sur mon lieu de travail. Cela pourrait ressembler à une faille de sécurité, mais si tout se passe en https, alors c'est équivalent à ssh en terme de cryptographie.

Pour installer ShellInABox, il faut exécuter les commandes suivantes :

sudo apt-get update
sudo apt-get install shellinabox

Et c'est tout ! Il est possible (mais pas primordial) de modifier quelques éléments de configuration dans le fichier /etc/default/shellinabox

Le service se démarre par la commande

sudo service shellinabox start

Vous pouvez tester que tout fonctionne à l'url : http://adresse_ip_picuntu:4200/

17janv. 2014

Flasher Linux sur l'apareil

La toute première étape consiste à installer Linux dans la mémoire de l'appareil. Il y a plusieurs versions possibles, plus ou moins faciles à mettre en oeuvre.

J'ai choisi la solution de facilité : Picuntu 4.5 One cclick install. Cet installeur efface absolument toutes les données de l'appareil : OS, apps, données des apps, données de l'utilisateur.

Mode d'emploi :

  1. démarrer l'appareil en mode flash

    voir le billet précédent

  2. lancer l'outil d'install
  3. cocher les bonnes cases (et décocher les autres)

    loader, parameter, kernel, boot, system

  4. cliquer sur Erase NAND et attendre
  5. cliquer sur Flash ROM et attendre LONGTEMPS

Une fois que le flashage est terminé, Linux va démarrer tout seul. Le premier démarrage est très long.

Une fois démarré et branché sur un port HDMI, la mire de login apparaît. Il faut se logger avec le compte picuntu et le mot de passe 12qwaszx. La première chose à faire est de changer ce mot de passe. Pour faire cela, moi, j'ouvre un terminal (Applications système) et je tape passwd.

Par la suite, je ne me sers plus de l'interface graphique. Tout se passe en ssh.

17janv. 2014

Démarrer l'appareil en mode Flash

Pour changer d'OS, il va falloir démarrer l'appareil en mode Flash. Dans le monde d'Android on appelle ça en mode Bootloader.

Si Android est installé, et rooté, il y a 2 façons très simples de procéder.

  1. Utiliser une application de reboot du market (ou préinstallée selon les ROM) Example

  2. Lancer l'application Term Emulator et exécuter la commande : reboot bootloader

Si l'appareil est déjà sous Linux ou s'il ne démarre plus (par exemple si la mémoire est corrompue), il va falloir ruser. Voici la marche à suivre :

  • Démonter le boitier de l'appareil. 2de29d371210195dfc8fe3038fe8a0c4d5476800.jpg
  • Zoomer sur la plus grosse puce. J'ai décollé l'étiquette qui était dessus. 5e68ec02ebc58bba9b42d3e747f9953217d6a7d3.jpg
  • A l'aide d'une épingle, court-circuiter les pates 7 et 8 (sur certains appareils c'est 8 et 9). Un des coins de la puce comporte un petit repère rond. En général c'est le coin en haut à gauche quand le texte de la puce est lisible à l'endroit. Placer ce repère en haut à gauche, il marque la pate numéro 1. Compter les pates de haut en bas.
  • En maintenant la pate en court-circuit, brancher le cable USB (préalablement relié au PC) sur le port micro-USB (marqué OTG).
  • Si tout va bien, Windows détecte le périphérique. Si le driver n'est pas encore installé, il faut l'installer maintenant, redémarrer l'ordinateur, et recommencer la manip une fois que l'ordinateur est redémarré.
  • Pour vérifier que tout va bien, lancer l'outil de flashage : un message indique que le périphérique est détecté.

    Found RKAndroid Loader Rock Usb

  • Si le PC est vieux, si on utilise un port USB 1.1, il va falloir modifier le fichier de config pour le lui indiquer.

    SUPPORTUSB11=1

  • Il ne faut pas utiliser un port USB qui se trouve sur un HUB.

Si ça ne marche pas, il faut persévérer. Recommencer plusieurs fois. Jusqu'à ce que ça marche.

16janv. 2014

Mon installation de Picuntu 4.5

En 2013 j'ai acheté une clé HDMI équipé un processeur RK3188 (quad-core ARM v9 à 1.6 GHz) et distribué avec Android 4.1. Type Tronsmart CX-919. dx.com

Je m'en suis un peu servi sur mon téléviseur. J'y ai installé quelques softs :

  • des jeux, mais qui nécessitent un touchscreen et qui ne marchent donc pas sur la TV
  • des widgets météo, agenda etc... mais qui nécessitent d'afficher le bureau Android, ce qui n'arrive malheureusement jamais
  • des softs de partage SMB pour le transformer en NAS avec mon disque dur externe

Finalement, Android n'apporte pas grand chose puisque la seule vrai utilité de l'appareil est le partage de fichier, qui n'a pas besoin qu'on allume l'écran.

En décembre 2013 j'ai donc tenté l'installation de Linux dessus. Avec succès, grâce à l'installeur all-in-one de Picuntu : Forum Freaktab

J'ai ensuite passé plusieurs heures/jours à configurer tout ce qui m'intéressait :

  • ShellInABox : pour administrer le serveur à distance, en ligne de commande, par un client html5
  • Transmission : client torrent
  • Sickbeard + Sabnzbd : téléchargement d'épisodes de séries automatique. Abandonné faute de fournisseur de newsgroup gratuit intéressant
  • Flexget : téléchargement d'épisodes de séries automatique connecté à transmission
  • Guacamole : client VNC en html5
  • Mediatomb : serveur UPnP/DLNA pour partager le contenu multimedia avec la freebox
  • Samba : pour partager le disque dur sur le réseau en mode NAS
  • Node.js, Mongodb, java etc... pour héberger mes développements
  • Usbmount : pour monter automatiquement un périphérique de stockage USB dans le filesystem
  • NginX : pour router toutes les requêtes https vers les différents services et exposer ce qui m'intéresse sur internet

Quelques semaines plus tard, ayant détecté quelques faiblesses sur la connexion Wifi, j'ai acheté un adapteur USB-RJ45 réputé pour être supporté par Picuntu. J'ai arrêté le système, tout débranché, placé mon module CPL sur la prise, tout rebranché, mais le système a refusé de redémarrer. Rien à faire. Impossible également de le redémarrer en mode Flash ou Recovery.

J'ai donc passé de nombreux jours à écumer les réseaux (essentiellement le forum freaktab) pour trouver une solution à mon problème. J'ai finalement réussi à trouver comment redémarrer l'appareil dans un mode qui me permettrait de restaurer le système : Forum Freaktab

A partir de là, je compte réinstaller Linux. Mais j'ai perdu toutes mes configs. je passerai beaucoup moins de temps maintenant à tout réinstaller et reconfigurer, mais je vais quand même toput décrire dans ce blog. Il me permettra de documenter tout ce que je fais au cas où je devrais à nouveau recommencer. Et qui sait, peut-être que ça pourrait aider quelqu'un d'autre ?