Archive | May, 2010

Tags: , , ,

Modifier le message de bienvenue lors d’une connexion distante

Posted on 18 May 2010 by Thomas Ginestet

Afin de modifier le message de bienvenue qui apparaît lorsque par exemple vous vous connectez en ssh sur une machine Linux, il ne suffit pas de modifier le fichier /etc/motd.

En effet, celui-ci n’est qu’un lien symbolique vers /var/run/motd. Il faut en fait modifier /etc/motd.tail puis ensuite se reconnecter ou lancer la commande suivante pour que la modification soit immédiatement prise en compte:

thomas@cryonux:~$ /etc/init.d/bootmisc.sh start

Comments (0)

Tags: , , , ,

Créer ou supprimer les liens vers les scripts d’initialisation (Ubuntu)

Posted on 16 May 2010 by Thomas Ginestet

Il existe un moyen de gérer efficacement les scripts d’initialisation placés dans /etc/init.d/ .
update-rc.d vous permet de créer ou supprimer les liens vers les différents runlevels des scripts placés au préalable dans /etc/init.d/
- Pour créer un lien vers tous les runlevels on pourra utiliser la commande suivante:

thomas@cryonux:~$ update-rc.d monscript defaults

Ce qui va avoir pour conséquence la création d’un lien de monscript dans les runlevels 2,3,4,5 pour le lancer et 0,1,6 pour le stopper. La priorité par défaut est de 20.
- Pour supprimer un lien dans tous les runlevels on pourra utiliser la commande suivante:

thomas@cryonux:~$ update-rc.d monscript remove

Ce qui va avoir pour conséquence de supprimer tous les liens d’initialisation du script dans les différents runlevels si et seulement si le script monscript n’existe plus dans /etc/init.d/. Si l’on souhaite supprimer les liens tout en conservant le script dans /etc/init.d/ il suffit alors de rajouter l’argument -f comme cela:

thomas@cryonux:~$ update-rc.d -f monscript remove

Il est bien sûr possible d’être beaucoup plus fin selon les besoins. Vous pouvez par exemple choisir de ne créer les liens de votre script que vers certains runlevels et avec une priorité bien précise:

thomas@cryonux:~$ update-rc.d monscript start 30 5 . stop 30 0 1 6 .

Dans ce cas là, monscript sera uniquement lancé dans le runlevel 5 et avec une priorité de 30. Il sera stoppé dans les runlevels 0,1,6 avec une priorité de 30 également.
Si vous n’êtes pas bien certain de ce que vous faîtes, vous pouvez toujours lancer une simulation afin d’éviter la bourde… Pour cela, il est possible d’utiliser l’argument -n à votre commande qui affichera ce qu’aurait fait update-rc.d. Imaginons que l’on souhaite simuler la suppression des liens du script /etc/init.d/apache2:

thomas@cryonux:~$ update-rc.d -n -f apache2 remove
Removing any system startup links for /etc/init.d/apache2 ...
/etc/rc0.d/K09apache2
/etc/rc1.d/K09apache2
/etc/rc2.d/S91apache2
/etc/rc3.d/S91apache2
/etc/rc4.d/S91apache2
/etc/rc5.d/S91apache2
/etc/rc6.d/K09apache2

Allez maintenant vérifier dans les différents répertoires /etc/rcX.d/ et vous pourrez constater que les liens vers apache2 sont toujours présents.

Comments (0)

Tags: , , , , , , , , , , ,

Les options de fstab

Posted on 15 May 2010 by Thomas Ginestet

Le 4ème champs de fstab permet de définir les options associées à chaque système de fichiers déclaré.

Il y a les options communes à l’ensemble des systèmes de fichiers et d’autres propres à certains types bien spécifiques comme par exemple le fat ou encore l’iso 9660 pour le montage d’un lecteur cd/dvd.

Les options communes à tous les systèmes de fichiers se résument à cela:

ro / rw: monte le système de fichiers en lecture seule / en lecture écriture.

auto / noauto: monte automatiquement le système de fichiers au démarrage / ne le monte pas automatiquement au démarrage.

sync / async: les entrées/sorties sur le système de fichiers se feront en mode synchrone / se feront en mode asynchrone.

user / nouser: n’importe quel utilisateur pourra monter le système de fichiers / seul l’utilisateur root pourra monter le système de fichiers.

suid / nosuid: permet l’utilisation des bits setuid et setgid sur le système de fichiers / ne permet pas de les utiliser sur le système de fichiers.

exec / noexec: permet l’exécution de fichiers binaires sur le système de fichiers / ne permet pas de les exécuter sur le système de fichiers.

dev / nodev: permet l’interprétation des périphériques en mode caractères et en mode blocs spéciaux sur le système de fichiers / ne permet pas de les interpréter sur le système de fichiers.

defaults: cette option regroupe en fait les options rw,auto,async,nouser,suid,exec,dev. C’est un peu un faux ami à mon goût puisqu’on peut être tenté de croire que c’est l’option idéale si on ne sait pas trop comment configurer son fstab. En fait, c’est un peu comme d’habitude, tout dépend du système de fichiers à monter. Par exemple pour monter une clef usb, on pourrait très bien le faire plutôt en mode synchrone afin d’éviter les erreurs d’écritures pour ceux qui comme moi la retire à l’arrache.

D’autres options intéressantes existent, notamment celles capables de nous faire gagner un peu de perf:

noatime: permet de ne pas modifier la date d’un fichier quand celui-ci est uniquement lu.

nodiratime: même principe que pour noatime, mais cette fois sur un répertoire.

relatime: met à jour uniquement la date d’accès si elle est plus vieille que la date de modification ou de changement.

Le revers de la médaille c’est que du coup vous avez moins de traces sur les manipulations de vos fichiers et répertoires, ce qui peut être problématique en entreprise.

Pour les admins système, d’autres options sont également intéressantes au niveau de la gestion des utilisateurs (nécessitent que le support soit activé dans le noyau):

acl: activation des acl sur le système de fichiers.

usrquota: activation des quotas utilisateurs sur le système de fichiers.

grpquota: activation des quotas de groupes sur le système de fichiers.

Comments (0)

Tags: , , , ,

Ajouter de la swap à la volée

Posted on 14 May 2010 by Thomas Ginestet

Ou comment sauver ses miches quand un serveur swap à mort et qu’on a pas de barrettes mémoires sous la main…

Soyons clair, si une machine swap énormément c’est qu’il y a un problème (sous dimensionnement de la partition de swap à la base, application qui foire, ou tout simplement machine vieillissante qui n’est plus capable de supporter le poids de tout ce qu’on lui rajoute à faire tourner). Pour résoudre ce problème, rien de mieux que de la bonne barrette de mémoire bien fraîche !

Oui mais voilà, comment faire si il n’y a plus de slot disponible ou que vous êtes déjà en attente d’une cargaison de cette fameuse mémoire vive ?

La solution: sous Linux tout est fichier. Créons donc un fichier de swap supplémentaire !

Choisissez une partition qui servira à héberger le fichier de swap que nous allons créer. Dans mon exemple, j’appellerai ce fichier GLOP que je placerai dans /home/thomas. Ce fichier fera approximativement 100Mo (taille de bloc de 1MB x 100).

Puis lancez les commandes suivantes:

thomas@cryonux:~$ dd if=/dev/zero of=/home/thomas/GLOP bs=1MB count=100
thomas@cryonux:~$ mkswap /home/thomas/GLOP
thomas@cryonux:~$ swapon /home/thomas/GLOP

Pour désactiver l’utilisation de ce fichier en tant que fichier d’échange, il vous suffira bien entendu de remplacer swapon par swapoff.

Et voilà, le tour est joué !

Cependant la manip n’est pas définitive car un redémarrage de la machine aura raison de la prise en compte de ce fichier d’échange. Pour conserver la swap après un redémarrage, il suffira de rajouter la ligne suivante à votre fstab:

/home/thomas/GLOP     none    swap    sw    0    0

 

photo: jscreationzs/FreeDigitalPhotos.net

Comments (0)

Tags: , ,

Recess Framework: traitement avant insertion ou update

Posted on 06 May 2010 by adrien

Dans un de mes projets, j’utilise le framework Recess pour créer une API REST en php. Ce framework est intéressant mais jeune et il peut être long de trouver une information simple.

Ici mon besoin était de faire un traitement sur le model avant son insertion en base. On peut facilement faire ceci en utilisant l’annotation !Before dans l’objet. Voici un exemple:

class user extends Model {
/** !Column PrimaryKey, Integer, AutoIncrement */
public $id;

/** !Column DateTime */
public $creation_date;

/** !Column String */
public $name;

/** !Before insert */
public function beforeInsert() {
$this->creation_date = time();
}

/** !Before update */
public function beforeUpdate() {
//we block update of creation date
unset($this->creation_date);

}

}

On remarque en passant que les champs qui sont en datetime en base de donnée sont traités en timestamp sous Recess.
Lors de l’update on fait un unset sur la variable $creation_date, ainsi elle ne sera pas traitée par le framework.

Comments (1)