Synchroniser son serveur à un serveur de temps

Owncloud est une solution d’hébergement personnel particulièrement bien fichue. Afin de garder un versionning des fichiers qui soit cohérent, il demande que l’heure de sa machine et du serveur soient synchronisés. L’heure de ma machine étant la bonne, il ne m’a pas été dur de trouver le responsable de cette erreur.

Pour synchroniser un serveur sans affichage graphique, on utilise le logiciel ntp. Pour l’installer :

apt-get install ntp

NTP signifie Network Time Protocol et est un protocole qui permet de de synchroniser l’heure d’un ordinateur sur un autre qui a une plus grande précision (ou en tout cas dont l’exactitude est avérée).

Pour le configurer, il suffit d’aller ajouter/modifier dans le fichier /etc/ntp.conf la liste des serveur de temps afin d’en prendre des proches de là où est pour une meilleure précision. Je ne ferais pas une liste ici puisque les serveurs peuvent changer et que tout dépend de là où vous êtes. Cependant un petit tour sur Google devrait vous donner les bonnes adresses en un rien de temps.

Une fois les adresses en place, il suffit de relancer le démon qui a dû se lancer avec l’installation à l’aide de la commande :

/etc/init.d/ntp restart

Un petit détail reste encore à régler qui est la resynchronisation de l’horloge du système d’exploitation avec celle du BIOS. Afin de régler celle là aussi, il suffit de taper :

hwclock --systohc

et le tour est joué. L’horloge du BIOS sera mise à l’heure de l’OS. On peut cependant régler la date et l’heure à la main n’importe quand à l’aide des commandes :

date --set HH:MM:SS
date --set AAAA-MM-JJ

ou par NTP avec :

ntpdate <URL_DU_SERVEUR_DE_TEMPS>

On peu vérifier la nouvelle heure à l’aide de la commande :

date

Réinstallation de mon PC fixe et organisation

Comme j’en avais parlé il y a quelques temps, je viens de finir de réinstaller mon PC fixe afin d’avoir un autre environnement linux que ceux que j’avais déjà. En l’occurrence, j’ai décidé de me faire violence pour utiliser Gnome 3, comme je me fais violence pour utiliser Unity. J’ai donc au départ voulu installer une Fedora afin d’avoir cet environnement de bureau tout en testant une distribution non basée sur Debian. Je voulais voir un peu ce que donnait les rpm et Yum. Après bien des déboires d’installation dû à beaucoup de disques durs et un partitionnement particulier recherché, j’ai fini par avoir ce que je voulais. Cependant, j’ai dû y renoncer au bout de 10 minutes de test. Je ne peux définitivement pas utiliser un OS sans bureau.

Ainsi donc, j’ai réfléchis à quoi installer et je me suis dit que j’allais tester la technique d’Ubuntu avec Gnome 3 au lieu d’Unity. Grand bien m’en a pris puisqu’en suivant cette procédure, on dispose d’un bureau tout à fait fonctionnel malgré Gnome 3.

Me voilà donc avec un double boot Ubuntu avec Gnome 3 et Windows 7. Au niveau des disques durs, j’ai 1 Seagate de 320 Go qui héberge mes OS (100 Go Ubuntu, 4 Go de swap, 216 Go de Windows), 1 Seagate de 250 Go pour du stockage normal et 2 Seagate de 80 Go sur lesquels je comptais mettre en place un RAID 1 pour avoir du stockage un peu plus sécurisé. Le problème de la non disponibilité des données sur les 2 OS est un problème de taille que je cherche toujours à résoudre.

Cette installation fera donc l’affaire jusqu’à ce que Gnome 3 m’énerve définitivement ou que je trouve comment réactiver le bureau sur une Fedora d’origine sans trop de difficultés (ou qu’une Ubuntu avec Mate voit le jour).

Installer Java sous Linux et l’ajouter au Path de l’interface graphique

Je suis un utilisateur de Java depuis quelques années maintenant et malheureusement, depuis le passage à la version 7, il n’y a plus d’installateur automatique pour les versions autres que RPM (gageons que ce soit temporaire). Voici donc la procédure pour avoir un Java fonctionnel et facilement upgradable par la suite.

Tout d’abord, il faut commencer par télécharger le JDK et le JRE qui nous intéresse sur la page officielle de Java. Il faut bien sûr prendre la version tar.gz et pour ma part je prend la version 64bits. Je me retrouve donc avec les fichiers :

jre-7u7-linux-x64.tar.gz
jdk-7u7-linux-x64.tar.gz

Je créé ensuite un dossier java dans le dossier /opt/ puis y déplace le JDK et le JRE à installer à l’aide des commandes :

mkdir /opt/java
mv jre-7u7-linux-x64.tar.gz jdk-7u7-linux-x64.tar.gz /opt/java/

On décompresse ensuite les deux archives puis on les renomme respectivement en jre et en jdk :

tar -xzf jdk-7u7-linux-x64.tar.gz
tar -xzf jre-7u7-linux-x64.tar.gz
mv  jdk1.7.0_07 jdk
mv  jre1.7.0_07 jre

Il ne reste plus qu’à enlever les deux fichiers d’archives et on a les fichiers d’exécution de Java à leurs places définitives. L’avantage de cette mise en place est qu’il n’y aura qu’à remplacer les fichiers à l’intérieur des dossiers jdk et jre par les nouvelles version de Java. Ce sera ainsi le seul changement qu’il y aura à apporter par la suite pour mettre à jour sa version.

Maintenant qu’on a des emplacements de Java suffisamment génériques pour résister aux changements de versions, il faut les inclure au PATH. Il y a plusieurs solutions en fonction de ce que l’on désire mettre en place. Pour ma part, je voulais inclure Java partout (sous entendu y compris dans l’interface graphique) afin que les programmes qui en ont besoin le trouve facilement. De plus, ceci me permet de lancer facilement mes programmes sans mettre la direction absolue de mon installation.

Je vais maintenant détailler différentes possibilités d’installation :

  • La première permet d’ajouter Java au PATH console d’un seul utilisateur. Il suffit pour ce faire de rajouter les lignes :
export PATH=$PATH:/opt/java/jdk/bin:/opt/java/jre/bin
export JAVA_HOME=/opt/java/jre/bin

à la fin du fichier .bashrc de l’utilisateur.

  • La deuxième permet d’ajouter Java au PATH console de tous les utilisateurs du système. Il suffit de rajouter les même lignes qu’au dessus mais dans le fichier : /etc/bash.bashrc
  • La dernière, et celle que j’ai utilisé, permet de modifier le PATH de tout le système. Elle consiste à modifier le fichier /etc/environment. On modifie la ligne PATH et on rajoute une variable JAVA_HOME au fichier de cette manière :

PATH= »/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/java/jdk/bin:/opt/java/jre/bin »
JAVA_HOME= »/opt/java/jre/bin »

De nombreux détails sur les variables d’environnements et leurs utilisations sont présentes sur les pages officielles d’Ubuntu.

Après un simple redémarrage de l’ordinateur, les configurations seront prises en compte. Nous voici donc avec un Java facilement upgradable utilisable partout.

Connecter son téléphone android sur Linux

J’ai tenté de connecter mon Samsung Galaxy S II à mon Ubuntu mais je n’obtenais que des erreurs de connexion et de montage. Je ne pouvais ainsi notamment pas accéder à mes photos afin de les récupérer. Après quelques recherches, j’ai appris que Google avait choisi d’utiliser le MTP (Media Transfert Protocol) à la place de l’USB Mass Storage afin de palier à des problèmes de montage/démontage de partition. Ubuntu a beau gérer nativement le MTP sur le papier, il n’a pas l’air de bien fonctionner avec les périphériques Android.

Plusieurs personnes (ici ou ici) décrivent des procédures à suivre afin de connecter ce genre de périphériques. Cependant, après un essai infructueux, j’ai décidé de voir s’il n’était pas possible de se connecter autrement.

En effet, j’ai juste cherché à retrouver l’ancienne option d’USB Mass Storage en me disant qu’avant il était possible de l’activer avec de simples options comme le debug développeur. Il ne m’a pas fallut longtemps pour trouver dans Paramètres -> Plus … -> Utilitaires USB le stockage de masse USB. On retrouve ainsi l’ancien format de connexion et tous les problèmes disparaissent.

Créer un lanceur d’application à la main et l’ajouter au menu

Afin de pouvoir lancer facilement mon programme Just Wake Up, j’ai voulu créer un lanceur dans ma lens d’applications Unity. Cependant, autant il était très simple de mettre en place ce genre de solutions avec Gnome 2, autant rien de tel n’existe encore sous Unity. Ainsi, il m’a fallut créer un lanceur à la main. Les lanceurs sont basés sur la Desktop Entry Specification.

Voici le script de lancement que j’utilise avec Just Wake Up :

#!/usr/bin/env xdg-open
[Desktop Entry]
Name=Just Wake Up
Comment=Fancy Mornings, Just Wake Up
Exec=java -jar /opt/justwakeup/JustWakeUp.jar
Terminal=false
Icon=/opt/justwakeup/logo.png
Type=Application
Categories=Utility

Il suffit d’enregistrer ceci dans un fichier (extension .desktop la plupart du temps) et le placer avec les autres lanceurs d’applications dans /usr/share/applications/

On peut aussi mettre ce lanceur ailleurs mais afin de le rendre actif, il faut faire un clic droit dessus, aller dans l’onglet Permissions et cocher l’option Autoriser l’exécution du fichier comme un programme.

Mettre une image en fond sur grub 2

Ubuntu a une fâcheuse habitude depuis quelques version qui est de mettre un HORRIBLE fond violet en fond de base sur grub. Je remplaçais déjà avant le fond par une jolie image mais là en plus ça permet de corriger ce problème.

Pour ce faire,il n’y a rien de plus simple. Il suffit de mettre une image en JPG, PNG, TGA ou l’un des formats supportés par grub dans le dossier /boot/grub/. Une fois ceci fait, il suffit de réexécuter la commande :

update-grub

pour qu’il régénère le fichier /boot/grub/grub.cfg avec la première image rencontrée dans le dossier /boot/grub/ par ordre alphabétique.

Il m’est arrivé une fois de passer plus d’une heure à chercher d’où pouvait venir le fait que l’image ne s’affichait pas au démarrage alors que le fichier grub.cfg était bien configuré. En réalité le problème venait de certains format de compression de JPG qui ne sont pas pris en compte par grub. Ainsi, de manière global je conseil de mettre une image au format PNG afin d’éviter tout problème de ce genre.

Installation d’un serveur web sous Debian

J’avais lors d’un précédent post, expliqué comment installer WordPress sur son serveur Web mais je n’avais pas expliqué comment installer ce serveur.

On partira donc du principe que l’on a besoin de mettre en place un serveur HTTP, un interpréteur PHP, un SGBD (Système de Gestion de Base de Données) et un serveur FTP. De plus pour le contrôler facilement à distance on utilisera le protocole SSH.

Tout d’abord le choix de la distribution. Ayant toujours utilisé des distributions basées sur Debian et Debian étant réputé pour sa stabilité, il m’a semblé évident de prendre cette distribution comme base. De plus les installations sont facilitées grâce à des dépôts bien remplis (pas toujours à jour, mais fournis).

Ainsi, après une installation standard de cette distribution, enfin, en tout cas sans gestionnaire de fenêtre vu que c’est pour un serveur, nous allons passer à la phase d’installation.

Les logiciels que j’ai choisis d’utiliser pour combler tous nos besoins sont :

  • Serveur HTTP : Apache
  • Serveur FTP : vsFTPd
  • Serveur SSH : openSSH
  • interpréteur PHP : PHP5
  • SGBD : MySQL

Nous allons commencer par installer openSSH afin de pouvoir administrer le serveur à distance par la suite à l’aide de la commande :

apt-get install ssh

Nous verrons les configurations à apporter à chaque logiciel par la suite. Installons maintenant le serveur Apache à l’aide de la commande :

apt-get install apache2

Puis PHP et son module pour apache en tapant :

apt-get install php5 libapache2-mod-php5

Pour MySQL, Debian se charge normalement tout seul de récupérer les paquets qui permettent les interactions avec PHP. Dans le cas contraire il faudra les rajouter en plus (paquet php5-mysql). On tapera donc :

apt-get install mysql-server

Un mot de passe root est demandé à ce moment là. Bien penser à en mettre un fort.

Nous allons enfin installer vsFTPd en tapant :

apt-get install vsftpd

Maintenant que tous les logiciels dont nous avons besoin sont installés, il va nous falloir les configurer. Toujours garder en tête cependant que les configurations sont la partie la plus personnelle de ce genre de mise en place car elles dépendent principalement de ce que l’on désire faire. Je ne détaillerais pas les configurations d’SSH car j’ai déjà mis un exemple détaillé dans ce post ci.

Commençons donc avec la configuration d’Apache. Un fichier de configuration extrêmement important est le fichier /etc/apache2/conf.d/security. C’est ce fichier qui déterminera le niveau de détail des messages d’erreur. Pour un serveur en production, afin d’éviter toute fuite d’information sensible en cas de faille, on mettra les lignes :

ServerTokens Prod
ServerSignature Off
TraceEnable Off

Pour un serveur de développement, le but étant d’obtenir un maximum d’informations, on mettra :

ServerTokens Full
ServerSignature On
TraceEnable Extended

La configuration de base d’Apache donne le dossier /var/www/ comme dossier du site principal. On peut héberger plusieurs sites sur un seul serveur en rajoutant des fichiers de configuration dans le dossier /etc/apache2/sites-available/ (De manière globale, tout fichier présent dans ce dossier est inclus dans le fichier de configuration au lancement d’Apache). Une configuration minimale de site possible est :

<VirtualHost <ADRESSE_DU_SERVEUR>:<PORT_DE_CONNEXION>>
ServerName <NOM_DU_SERVEUR>
ServerAdmin <ADRESSE_DU_WEBMASTER>

DocumentRoot <DOSSIER_DU_SITE>
<Directory <DOSSIER_DU_SITE>>
Options -Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>

CustomLog <URI_DU_FICHIER_DE_LOG> combined
LogLevel warn
</VirtualHost>

Pour plus de détail on peut aller sur la documentation officielle d’Apache sans oublier les conseils sur la sécurité. On pourra, selon la distinction que l’on voudra faire entre les différents sites web (différentes adresses IP, différents ports de connexion), utiliser cette page de documentation ou celle ci pour choisir ses options.
Vous remarquerez le -Indexes qui permet de ne pas lister le contenu d’un dossier lorsque le fichier index.html ou index.php n’existe pas. Pour d’autres options de sécurités on peut aller voir par là.

Il ne reste alors plus qu’à activer le site nouvellement configuré à l’aide de la commande

a2ensite <NOM_DU_FICHIER_DE_CONFIGURATION>

et à redémarrer apache (nous ferons ceci à la fin).

En ce qui concerne PHP, je ne rentrerais pas dans les détails de la configuration car ils sont beaucoup trop dépendants de ce que l’on souhaite mettre en place. De plus, ceux de base conviendront la plupart du temps.

La configuration de MySQL étant plus une configuration par base de données que dans sa globalité, les paramètres originaux feront largement l’affaire. Cependant, il ne faudra pas oublier de créer un nouvel utilisateur pour chaque base afin d’améliorer la sécurité et de ne pas laisser traîner le mot de passe root quelque part. J’avais détaillé le script de création dans mon post sur la mise en place de mon blog.

Il nous reste enfin à configurer vsFTPd. Mon choix s’est porté sur ce logiciel plutôt que sur ProFTP, qui est le plus souvent cité lorsque l’on cherche un serveur FTP, car, notamment, il a été conçu en étant orienté sécurité. Le fichier de configuration est /etc/vsftpd.conf. Il est bien détaillé et facile à paramétrer. On peut choisir de chrooter les utilisateurs, utiliser le serveur en IPv4/IPv6, autoriser l’accès anonyme, etc … J’ai détaillé une des configuration que j’utilise sur l’un de mes serveurs dans ce post.

Il suffit ensuite soit de redémarrer la machine (le plus simple), soit de redémarrer tous les services, après configuration. On peut les relancer un par un à l’aide des commandes :

/etc/init.d/apache restart
/etc/init.d/ssh restart
/etc/init.d/vsftpd restart

On a alors un serveur HTTP/FTP/MySQL/SSH prêt à être utilisé.

Bloquer les documents récents sous Linux

Un des problème récurent que je retrouve sur presque toutes les distributions que j’ai pu tester est le stockage des documents récents. Sous Windows, il est possible d’empêcher le stockage des derniers fichiers/documents utilisés en quelques clics depuis le menu de configuration du menu démarrer, alors que sous Linux la configuration est plus compliquée.

Le fichier qui est chargé de stocker la liste des documents récents peut être le fichier

~/.recently-used.xbel
ou
~/.local/share/recently-used.xbel

en fonction de la distribution.

La solution la plus simple et qui a fonctionné sur toutes les distributions que j’ai testé est de supprimer ce fichier puis de le recréer à l’aide de la commande :

touch .recently-used.xbel

On va ensuite changer ses attributs grâce à la commande :

chattr +i <nom_du_fichier>

Ceci va avoir pour effet d’ajouter l’attribut i au fichier recently-used.xbel. Selon la propre documentation de chattr,

A file with the ‘i’ attribute cannot be modified: it cannot be deleted or renamed, no link can be created to this file and no data can be written to the file. Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE capability can set or clear this attribute.

Ainsi, aucun logiciel ne sera capable d’écrire les derniers fichiers qui ont été utilisés avec lui et le gestionnaire de fichier ne pourra pas les afficher.

En attendant une solution plus propre et surtout prévue par le gestionnaire de fenêtre, cette solution fait son office.

Asus Keyboard Backlight Control et paquet .deb

Mon ordinateur portable est un Asus G73J. Il est muni d’un rétro-éclairage clavier des plus pratiques. Cependant, les raccourcis de contrôle au clavier ne sont pas fonctionnels sur la plupart des distributions Linux. J’ai donc créé un script qui me permet, à l’aide d’acpi, d’activer ces raccourcis et de contrôler l’intensité du rétro-éclairage et que j’ai nommé Asus KBBL Control (Asus KeyBoard BackLight Control). [EDIT] Il n’est actuellement pas disponible mais reviendra sous peu [/EDIT]

Pour l’installer et le désinstaller plus facilement, j’ai décidé de créer un paquet .deb. Après un peu de recherche, ceci n’est pas difficile et facilite grandement la tâche de maintient d’applications.

Pour ce faire, il suffit de créer un dossier (le nom importe peu). A l’intérieur de ce dossier, il faut créer un paquet nommé DEBIAN. A l’intérieur de ce dossier, on peut mettre plusieurs fichiers dont :

  • preinst : script exécuté avant l’installation
  • postinst : script exécuté après l’installation
  • prerm : script exécuté avant la suppression
  • postrm : script exécuté après la suppression
  • control : Détails du paquet

Un de ces fichiers est obligatoire cependant, c’est le fichier control. C’est à partir de lui que le paquet final est construit (notamment le nom). Pour plus de détail sur sa construction, il suffit de regarder la manpage :

man deb-control

Cette page étant largement détaillée, je n’entrerais pas dans les détails.

Le logiciel que l’on souhaite empaqueter se met à côté du dossier DEBIAN. On va le placer dans le dossier dans lequel il sera installé en considérant ce dossier comme la racine du disque dur. Ainsi, si mon programme doit être installé dans /etc/acpi, je vais créer à côté de DEBIAN un dossier etc dans lequel je créerais un dossier acpi et dans lequel enfin je mettrais mon programme à installer.

Une fois cette petite cuisine effectuée, il ne reste plus qu’à compiler le paquet. Pour cela, on se place un dossier au dessus du dossier qui contient DEBIAN et le logiciel et on tapera la commande :

dpkg-deb --build <NOM DU DOSSIER>

On a un magnifique fichier .deb qui se créé juste à côté de notre dossier source et qu’il ne restera plus qu’à installer avec un :

dpkg -i <NOM DU PAQUET>