Aller au contenu principal

Faire du montage en console avec ffmpeg

· 3 minutes de lecture
Idriss Neumann
CEO comwork.io

Dans le cadre de la chaîne YouTube de comwork je suis parfois amener à faire du montage vidéo bien que je déteste cela.

Vous me connaissez, il me faut un outil en ligne de commande et quoi de mieux que ffmpeg disponible sur Linux et MacOS ?

Dans ce billet je vais énumérer quelques commandes utiles pour faire les opérations dont j'ai le plus souvent besoin.


Compression d'une vidéo en mp4

ffmpeg -i input.mkv -vcodec libx265 -crf 28 output.mp4

Vous pouvez avoir envie de compression la taille davantage et pour cela il y a différente méthodes :

Bitrate

ffmpeg -i input.mp4 -b <bitrate> output.mp4

Calculez le bitrate1 dont vous avez besoin en divisant la taille de votre cible (en bits) par la longueur de la vidéo (en secondes).

Par exemple, pour une taille cible de 1Gb2 et 10 0003 secondes de vidéo, utilisez un débit binaire de 800 000 bit/s (800 kbit/s) :

ffmpeg -i input.mp4 -b 800k output.mp4

Constant rate factor

Une autre option est le réglage du constant rate factor4, qui réduit le débit binaire, mais conserve une meilleure qualité. Faites varier le CRF entre 18 et 24 environ: plus il est bas, plus le débit binaire est élevé.

ffmpeg -i input.mp4 -vcodec libx264 -crf 23 output.mp4

Note : depuis 2013, un meilleur format d'encodage de vidéo que le H.264 est disponible : le H.265. Il compresse davantage pour la même qualité et offre une qualité supérieure pour la même taille.

Pour l'utiliser, remplacez le codec libx264 par libx265. Vous pouvez aussi pousser le levier de compression plus loin avec le format H.265 avec un résultat acceptable de 24 à 30. Notez que des valeurs CRF inférieures correspondent à des débits binaires plus élevés et produisent donc des vidéos de meilleure qualité mais plus volumineuses.

ffmpeg -i input.mp4 -vcodec libx265 -crf 28 output.mp4

Couper des scènes au montage

Couper la ou les premières secondes

ffmpeg -i input.mov -ss 1 -vcodec copy -acodec copy output.mp4

Vous pouvez bien sûr remplacer la valeur 1 par une autre pour couper plus de secondes.

Couper un segment

ffmpeg -i input.mp4 -to 00:07:41 -c copy part1.mp4
ffmpeg -i input.mp4 -ss 00:08:10 -c copy part2.mp4
for i in {1..2}; do echo "file 'part${i}.mp4'"; done > files.txt
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4
rm -rf files.txt part1.mp4 part2.mp4

Ici on prend toute la première partie de la vidéo jusquà la minute 07:41 dans un premier fichier part1.mp4, puis de la minute 08:10 à la fin dans un autre fichier part2.mp4.

Ensuite on fusionne les deux parties et supprime ces deux fichiers temporaires. Le résultat sera la même vidéo avec ce qui s'est passé entre les minutes 07:41 et 08:10 coupé au montage.

Insérer une image

ffmpeg -i input.mp4 -i image.jpg -filter_complex \
"[0:v]trim=0:106,setpts=PTS-STARTPTS[v1]; \
[0:v]trim=124:548,setpts=PTS-STARTPTS[v2]; \
[1:v]loop=-1:1,scale=1920:1080,trim=0:18,setpts=PTS-STARTPTS[v3]; \
[v1][v3][v2]concat=n=3:v=1:a=0[outv]; \
[0:a]atrim=0:548,asetpts=PTS-STARTPTS[outa]" \
-map "[outv]" -map "[outa]" -c:v libx264 -crf 23 -preset fast -c:a aac -b:a 128k output.mp4

Ici on fait durer l'image 18 secondes entre la 296ème seconde et la 124ème (548 correspond à la fin de la vidéo).

Résolution 1920x1080 (il faut que l'image fit cette résolution).

Changer la résolution de la vidéo

ffmpeg -i input.mp4 -vf "scale=iw/2:ih/2" output.mp4

Ici on divise la résolution par 2.


Et voilà, ce sont les trois opérations que j'utilise presque systématiquement pour monter ces magnifiques vidéos sur CWCloud :)

Footnotes

  1. débit binaire d'écriture

  2. un gigaoctet, soit 8 gigabits

  3. 2h46 minutes et 40 secondes

  4. facteur de débit constant (levier de compression)

Les dangers du typage faible en PHP

· 2 minutes de lecture
Idriss Neumann
CEO comwork.io

Il faut avouer que le langage PHP rend bien service et est un langage assez complet. Toutefois, le typage faible de ce langage peut parfois nous amener à écrire des erreurs surprenantes sans que l'on s'en rende compte.

Dernière en date :

[idriss@hp-dv6:~]$ cat script.php
#!/usr/bin/php
<?php
// Bien entendu on désactive les warnings pour la prod :D
error_reporting("E_ALL & ~E_NOTICE");

$var1 = 'TOTO';
$var2 = array('TATA');

// Quelqu'un a décidé d'écrire son test en utilisant strcmp, pourquoi pas...
if (strcmp($var1, $var2) == 0){ // tient s'est trompé et compare $var1 à $var2 au lieu de $var2[0], ça arrive...
echo "OK\n";
} else {
echo "KO\n";
}
?>
[idriss@hp-dv6:~]$ chmod +x script.php
[idriss@hp-dv6:~]$ ./script.php
OK
[idriss@hp-dv6:~]$

Ici strcmp, au lieu de lever une exception ou une erreur renvoie un simple warning (que l'on ne voit pas forcément en fonction de la conf PHP) et accepte la comparaison en renvoyant null.

null est ensuite implicitement casté en false, l'opérande 0 également et on se retrouve avec une condition qui vaut true. Génial non :D ?

Alors oui, on peut effectivement faire des efforts de rigueur, tenir compte du warning par exemple. Il n'empêche qu'avec un langage compilé au typage fort, le codeur n'aurait jamais eu à attendre de voir une exécution erronée pour se rendre compte du problème`

Conclusion : faites attention aux casts implicites de vos if en PHP et à la fonction strcmp qui lorsqu'elle plante renvoie null alors que 0 signifie "chaînes égales". Utilisez toujours les opérateurs ===,!== dans le cadre de l'utilisation de cette fonction !

Installation de Cassandra sous Ubuntu/Mint

· 2 minutes de lecture
Idriss Neumann
CEO comwork.io

Vous souhaitez vous mettre au NoSQL ? Vous avez le choix entre une multitude de SGBD NoSQL orientés clefs/valeurs ou orientés colonnes.

Parmi l'un des plus en vogue, se trouve Cassandra maintenu par la fondation Apache. Il est possible de télécharger une archive .tar.gz et de suivre les directives dans le fichier README mais nous verrons ici comment installer proprement Cassandra depuis les dépôts.

L'avantage ici est que le serveur Cassandra sera automatiquement configuré correctement. Ces manipulations ont été effectuées sous Ubuntu 12.04 LTS.

1/ Ajouter les lignes suivantes au fichier /etc/apt/sources.list (en root)

deb http://www.apache.org/dist/cassandra/debian 11x main
deb-src http://www.apache.org/dist/cassandra/debian 11x main

2/ Exécuter les commandes suivantes :

gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D
gpg --export --armor F758CE318D77295D | sudo apt-key add -
gpg --keyserver pgp.mit.edu --recv-keys 2B5C1B00
gpg --export --armor 2B5C1B00 | sudo apt-key add -

3/ Mettre à jour la liste des dépôts :

sudo apt-get update

4/ Installer le serveur :

sudo apt-get install cassandra

5/ Démarrer le service :

sudo service cassandra start

Utilisation

1/ Lancer le client cassandra :

cassandra-cli --host
# ou en local
cassandra-cli

2/ Créer un keyspace et s'y connecter :

[default@unknown] create keyspace test;
[default@unknown] use test;
Authenticated to keyspace: test

3/ Créer une colonne :

[default@test] create column family Users with comparator=UTF8Type and default_validation_class=UTF8Type and key_validation_class=UTF8Type;

4 Ajouter des entrées :

[default@test] set Users[jsmith][first] = 'John';
Value inserted.
[default@test] set Users[jsmith][last] = 'Smith';
Value inserted.
[default@test] set Users[jsmith][age] = long(42);
Value inserted.

5/ Récupérer des entrées :

[default@test] get Users[jsmith];
=> (column=last, value=Smith, timestamp=1287604215498000)
=> (column=first, value=John, timestamp=1287604214111000)
=> (column=age, value=42, timestamp=1287604216661000)
Returned 3 results.

Impossible de lancer Cassandra

Vous avez une erreur similaire à celle ci-dessous ?

cassandra -f xss = -ea -javaagent:/usr/share/cassandra/lib/jamm-0.2.5.jar -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms1493M -Xmx1493M -Xmn373M -Xss160k Segmentation fault (core dumped)

Ajouter la ligne suivante au fichier /etc/cassandra/cassandra-env.sh (en root) :

[[ $(uname) =~ "Linux" ]] && JVM_OPTS="$JVM_OPTS -Xss280k"

Puis redémarrer le serveur :

sudo service cassandra restart

Installation de MongoDB sous Ubuntu/Mint

· Une minute de lecture
Idriss Neumann
CEO comwork.io

Cet article traite de l'installation de MongoDB via les dépôts sous Ubuntu. MongoDB est un SGBD assez répandu qui fait partie, au même titre que Cassandra, de la mouvance des SGBD NoSQL.

Ces manipulations ont été effectuées sous Ubuntu 12.04 LTS.

1/ Exécuter les commandes suivantes :

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
sudo touch /etc/apt/sources.list.d/10gen.list

2/ Ajouter la ligne suivante au fichier /etc/apt/source.list (en root) :

deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen

3/ Mettre à jour la liste des dépôts :

sudo apt-get update

4/ Installation :

apt-get install mongodb-10gen=2.2.3
echo "mongodb-10gen hold" | dpkg --set-selections
sudo apt-get install mongodb-10gen

5/ Lancer le service :

sudo service mongodb start

Utilisation

Lancer le client MongoDB :

mongo

Insérer une donnée :

db.test.save( { key: "value" } )

Récupérer les valeurs :

db.test.find()

Liste des répertoires principaux et fichiers courants

· 3 minutes de lecture
Idriss Neumann
CEO comwork.io

Voici une liste non exhaustive des répertoires principaux composant l'arborescence sur les différentes distributions Linux :

  • / : répertoire « racine » ;
  • /boot : contient les éléments liés au démarrage du système (kernel, grub...) ;
  • /bin : contient toutes les commandes (ou exécutables binaires) utilisateurs ;
  • /sbin : contient toutes les commandes (ou exécutables binaires) administrateur ;
  • /home : contient tous les répertoires personnels des utilisateurs ;
  • /dev : contient les périphériques réels et virtuels (par exemple les partitions /dev/sda...) ;
  • /mnt : point de montage de volumes aux différents systèmes de fichiers (partitions ext, NTFS...) ;
  • /media : point de montage des périphériques amovibles ;
  • /lib : répertoire des bibliothèques ;
  • /tmp : contient des fichiers temporaires ;
  • /usr : répertoire des installations et configurations communes aux utilisateurs, composé des répertoires suivants (entre autres) :
    • /usr/bin : contient des commandes et autres binaires utilisateurs ;
    • /usr/sbin : contient des commandes et autres binaires administrateur ;
    • /usr/share : contient les données statiques (ne nécessitant aucune modification) des différents programmes ou paquetages ;
    • /usr/local : répertoire des applications locales ;
    • /usr/include : contient les fichiers header (en tête ayant l'extension .h) liés à la compilation d'applications développées en C ou C++.
  • /opt : contient des applications supplémentaires ;
  • /var : composé des répertoires suivants (entre autres) :
    • /var/log : contient des fichiers de logs ;
    • /var/spool : répertoire des mails et files d'impression ;
    • /var/tmp : contient des fichiers temporaires ;
    • /var/www : répertoire par défaut du serveur HTTP apache (DocumentRoot).
  • /etc : répertoires des configurations systèmes, composé des répertoires suivants (entre autres) :
    • /etc/init.d : contient les deamons (scripts ou processus qui s'exécutent en arrière plan au démarrage et à l'arrêt du système). Ces scripts sont activés via des liens qui se trouvent dans les répertoires /etc/rc?.d/ ;
    • /etc/X11 : contient les fichiers de configuration du serveur X (interface graphique) ;
    • /etc/opt : contient des fichiers de configurations d'applications intallées dans /opt.

Remarque : cette arborescence peut varier sur d'autres systèmes de type Unix comme FreeBSD par exemple.

Quelques fichiers courants

Voici une liste non exhaustive des fichiers courants sur les différentes distributions Linux :

  • /boot/grub/menu.lst ou /boot/grub/grub.cfg : fichier de configuration du chargeur GRUB ;
  • ~/.bashrc ou ~/.bash_profile : script exécuté au début de chaque session utilisateur ;
  • /etc/contrab : fichier contenant les tâches cron/etc/fstab : liste des volumes à monter au démarrage du système ainsi que l'espace swap à activer ;
  • /etc/hosts : table de correspondance entre un nom de machine (hostname) et une adresse IP ;
  • /etc/inittab : liste les applications lancées par init (remplacé sur Ubuntu par le système upstart) ;
  • /etc/group : liste descriptive des groupes d'utilisateurs ;
  • /etc/passwd : liste descriptive des utilisateurs ;
  • /etc/shadow : liste des mots de passe cryptés des utilisateurs ;
  • /etc/sudoers : fichier de configuration de la commande sudo ;
  • /etc/X11/xorg.conf : fichier de configuration du serveur graphique X ;
  • /etc/init.d/rc.local : dernier script de /etc/init.d à s'exécuter au démarrage. Ce script est prévu pour contenir les tâches que l'on souhaite exécuter en plus des autres deamons au démarrage du système. Sous Fedora, il s'agit d'un lien symbolique vers /etc/rc.d/rc.local ;
  • /proc/cpuinfo : contient des informations sur le processeur.

Attention : le nom et la place de ces fichiers peuvent varier selon les différentes distributions. Certains de ces fichiers ne sont pas toujours présents d'une distribution à l'autre.

Création d'un répertoire de partage avec VirtualBox

· 2 minutes de lecture
Idriss Neumann
CEO comwork.io

VirtualBox est un gestionnaire de machines virtuelles, sur les hôtes Windows, GNU/Linux 32 et 64 bits et Mac OS X supportant de nombreux systèmes dont Windows (dont Vista), Linux, OpenSolaris, FreeBSD comme systèmes invités. Elle a été créée par InnoTek (ancienne compagnie allemande de logiciels qui a ensuite été rachetée par Sun elle-même rachetée par Oracle).

Création du dossier de partage

Cette manipulation a été testée pour 4 distributions distinctes (Fedora 6 et 7, Mandriva spring 2008 et Ubuntu 7.10) comme systèmes invités, avec la version 1.6.2 de VirtualBox sous Windows Vista basic. Depuis, il est possible que cela ait évolué ...

Pour commencer, après avoir créé le dossier qui servira de répertoire de partage (nous l'appellerons « partage ») , entrez le chemin C:\Users\VotreNom\Documents dans l'onglet « répertoires partagés » des préférences de votre machine virtuelle sous VBox (sous Windows). Faites ensuite les étapes suivantes sur votre console (sous Linux) :

[ ~]$ cd /mnt/
[ /mnt]$ sudo mkdir partage

Puis exécutez la commande suivante :

sudo mount -t vboxsf partage /mnt/partage -o rw,uid=y,gid=y

Enfin créez un nouveau répertoire dans « Mes documents » sous Windows, vous y aurez des droits d'écriture et il pourra servir de répertoire de transfert.

Remarques :

  • Pour connaître les valeurs uid et gid (notées pour l'instant y), faites id en console.
  • Il vous est possible d'écrire un script ou un alias pour automatiser cette tâche.
  • Cette méthode fonctionne uniquement sur un système virtuel de type GNU/Linux (elle ne fonctionne pas sous OpenSolaris par exemple).
  • Sur le système hôte (dans notre cas Windows), vous ne pourrez pas explorer, depuis le système virtuel, les dossiers systèmes comme « Mes documents. Vous pourrez néanmoins ouvrir le répertoire de transfert (qui ne sera pas en lecture seule) à partir du dossier « Documents » (qui lui sera en lecture seule).

Initiation à la compilation en console avec gcc, g++, javac et make

· 4 minutes de lecture
Idriss Neumann
CEO comwork.io

GCC signifie « Gnu Compiler Collection », il s'agit d'un compilateur libre créé par le projet GNU. Il rassemble une panoplie de logiciels libres intégrés capables de compiler pour divers langages de programmation, dont le C, C++, Objective-C... GCC est à l'origine de la plupart des logiciels libres et est étroitement lié au noyau Linux. Il a été aussi porté sur quelques plateformes pour Windows comme MinGW qui est utilisé sur certains IDE comme Code::Blocks ou Dev C++.

Installer gcc, g++, et make

Pour Ubuntu/Debian :

sudo apt-get install build-essential

ou encore :

sudo aptitude install build-essential

Pour Fedora, RHEL et CentOS :

[ ~] su -
root\'s password :
[ $] yum install gcc
[ $] yum install gcc-c++

Pour les autres distributions, renseignez-vous sur les différents paquets à installer et sur l'utilisation de votre gestionnaire des paquets.

Compiler en C avec gcc

Pour compiler un seul fichier .c :

gcc nom_du_fichier.c -o nom_du_programme

ou encore :

cc nom_du_fichier.c -o nom_du_programme

cc étant désormais un alias de la commande gcc (à l'origine c'était le compilateur C sur Unix dont GCC est le clone GNU).

Pour exécuter le programme, faites ./nom_du_programme en console (attention au chemin relatif).

Remarque : si vous faites uniquement gcc nom_du_fichier ou cc nom_du_fichier, vous aurez l'apparition d'un exécutable a.out.

Pour compiler un projet composé des fichiers : main.c, fonctions.c et header.h :

gcc main.c fonctions.c -o nom_du_programme

Il faut suivre l'ordre : cible ; dépendance.

Remarques :

  • Il faut parfois inclure l'option -lm dans la commande de compilation pour inclure certaines bibliothèques ou fichiers d'entêtes comme math.h.
  • Pour afficher les warnings, il faut utiliser certaines options comme -Wall, -Wextra... voir la documentation de GCC ou la manpage de ce dernier.
  • L'option -c indique à GCC de ne pas linker, vous n'aurez pas de fichier.o, exemple : gcc -c main.c -o nom_du_programme.

Compiler en C++ avec g++ et en java avec javac

Pour compiler en C++, il s'agit exactement du même processus sauf qu'il faut remplacer la commande gcc par g++ dans les commandes de compilation.

Exemples :

g++ nom_du_fichier.cpp -o nom_du_programme
g++ main.cpp fonctions.cpp -o nom_du_programme

Pour le cas de Java, les commandes sont légèrement plus simples :

javac nom_du_fichier.java
java NomProgramme

Compiler ses projet avec make

Vous devez créer un fichier nommé Makefile dans le répertoire des sources afin de pouvoir utiliser la commande make. Il s'agit du fichier d'instruction dans lequel vous écrirez les commandes qui doivent être exécutée par la commande make.

Les commandes doivent respecter cet ordre :

cible: dépendances
commandes
# ...

Attention : vous devez impérativement respecter les tabulations devant les commandes.

Voici un exemple de Makefile pour un projet en C composé d'un fichier main.c, fonction.c et header.h :

# Ceci est un commentaire
# création de l'exécutable 'NomDuProgramme'

NomDuProgramme: main.o fonctions.o
gcc main.o fonctions.o -o NomDuProgramme

main.o: main.c
gcc -c main.c -o main.`

fonctions.o: fonctions.c
gcc -c fonctions.c -o fonctions.o

# suppression des fichiers.o
clean:
rm -rf *.o

Les commandes à exécuter ensuite sont :

  • make ou make NomDuProgramme : compiler votre projet
  • make clean : supprimera tout les fichiers ayant l'extension .o

Mais pour l'utilisation des warnings, l'écriture deviendrait très laborieuse. C'est pourquoi, il est préférable d'utiliser une variable qui contient toutes les options de gcc souhaitées.

Exemple :

# Déclaration de la variable "warnings"

warnings = -Wall -Wextra - pedentic -ansi -Wwrite-strings
-Wstrict-prototypes -Wuninitialized -Wunreachable-code

#création de l'exécutable 'NomDuProgramme'

NomDuProgramme: main.o fonctions.o
gcc main.o fonctions.o -o NomDuProgramme

main.o: main.c
gcc -c main.c $(warnings) -o main.o
# attention, les parenthèses sont importantes ici

fonctions.o: fonctions.c
gcc -c fonctions.c $(warnings) -o fonctions.o

#suppression des fichiers.o
clean:
rm -rf *o

Installation et configuration minimale d'un serveur web Apache/PHP local sous Ubuntu/Debian

· 5 minutes de lecture
Idriss Neumann
CEO comwork.io

Ce billet a pour but de permettre l'installation et l'utilisation d'un serveur HTTP et d'un SGBD en local sur Debian ou Ubuntu. Il évite ainsi de passer par des outils du type easyPHP, LAMP/WAMP/MAMP... Par ailleurs nous ne nous limiterons pas à la simple installation de MySQL comme SGBDR.

Parmi toutes les distributions existantes, nous avons ici choisi Debian et Ubuntu pour plusieurs raisons :

  • Elles sont aujourd'hui parmi les distributions les plus répandues.
  • Parler de toutes les distributions surchargerait l'article.
  • Si vous êtes utilisateurs d'une autre distribution, la démarche sera exactement la même et il faudra simplement adapter les commandes de gestion des paquets.

Tout d'abord, il faut mettre la liste des dépôts à jour, pour cela faites en console sudo aptitude update ou encore sudo apt-get update afin de mettre à jour les informations sur les paquets.

Le serveur HTTP apache

Les versions récentes d'Ubuntu et dérivées embarquent automatiquement une version du serveur HTTP apache avec comme répertoire par défaut /var/www. Ainsi pour vérifier si le serveur apache est présent et est lancé, il suffit d'exécuter la commande /etc/init.d/apache2 status ou /etc/init.d/httd status selon les versions.

En cas de besoin, vous pouvez lancer le deamon à l'aide de la directive start ou le relancer avec restart de la même façon que status. Pour stopper le serveur apache, vous pouvez enfin utiliser la directive stop.

Si le deamon apache2 ou httpd n'est pas présent, lancez l'installation à l'aide de la commande sudo aptitude install apache ou encore sudo apt-get install apache.

Pour une configuration minimale, le répertoire par défaut d'apache est /var/www. C'est donc dans ce répertoire que devront être placés vos scripts PHP. Ainsi, pour une utilisation plus aisée :

  • Vous pouvez rendre accessible ce répertoire aux autres comptes utilisateurs comme ceci chmod 777 /var/www sinon vous serez obligés de coder et tester vos scripts via le compte root ou le compte d'apache (totalement déconseillé).
  • Vous pouvez créer un lien symbolique de /var/www vers votre répertoire personnel de cette façon : ln -s /var/www ~/www.

Pour exécuter vos scripts PHP à partir de votre navigateur, il faut le faire à partir de ce type d'URL : http://localhost/mon_fichier.php ou encore http://127.0.0.1/mon_fichier.php.

MySQL et PHPMyAdmin

MySQL est un SGBDR (système de gestion de bases de données relationnelles) libre et gratuit qui est aujourd'hui le plus utilisé dans le domaine du web. Pour l'installer, il faut lancer ces deux commandes sudo aptitude install mysql-client (ou sudo apt-get install mysql-client) et sudo aptitude install mysql-server (ou sudo apt-get install mysql-server).

Pour éviter de vous connecter via un client graphique vous pouvez utiliser cette commande : mysql -u root -p (si vous possédez un utilisateur root), puis create database nom_base pour créer une base de données et enfin use nom_base pour travailler sur la bdd « nom_base ».

Pour une utilisation plus simple, vous pouvez installer un client graphique tel que PHPMyAdmin, un client léger sous une interface PHP qui est aujourd'hui l'un des plus connus voire le plus connus. Pour l'installer, exécutez la commande sudo aptitude install phpmyadmin ou encore sudo apt-get install phpmyadmin. Il faudra ensuite créer un lien symbolique de /usr/share/phpmyadmin vers /var/www de cette manière : ln -s /usr/share/phpmyadmin /var/www/phpmyadmin. Ainsi, vous pourrez accéder à PHPMyAdmin à partir du navigateur via ces URLs : http://localhost/phpmyadmin ou encore http://127.0.0.1/phpmyadmin.

PostgreSQL et PHPPgAdmin

PostgreSQL est un autre SGBDR libre et gratuit. En effet, il est assez apprécié en entreprise pour sa fiabilité, sa sécurité (notamment dû au respect des contraintes d'intégrités référentielles, à la puissance de son langage de procédure stockée et de triggers proche de celui d'Oracle...) et sa stabilité. Il est souvent perçu comme une alternative à Oracle (autre SGBD très puissant, très utilisé en entreprise mais payant avec un ensemble de services qui vont autour). Pour l'installer, il faut effectuer cette commande : sudo aptitude install postgresql ou encore sudo apt-get install postgresql.

De même que pour MySQL, vous pouvez vous connecter à PostgreSQL en console ou via un client graphique. Or, il existe un client léger sous une interface Web appelée PHPPgAdmin équivalent à PHPMyAdmin. Pour l'installation, il s'agit de la même procédure que pour PHPMyAdmin : lancez en console la commande sudo aptitude install phppgadmin ou encore sudo apt-get install phppgadmin. Créez ensuite un lien symbolique de /usr/share/phppgadmin vers /var/www de cette façon : ln -s /usr/share/phppgadmin /var/www/phppgadmin. Ainsi, vous pourrez enfin accéder à PHPPgAdmin à partir du navigateur via ces URLs : http://localhost/phppgadmin ou encore http://127.0.0.1/phppgadmin.

Conclusion

Vous disposez maintenant de tout ce qu'il vous faut pour développer en PHP et SQL localement sur votre machine. Vous pouvez également aller plus loin en apprenant à administrer votre serveur HTTP (par exemple via le fichier httpd.conf ou apache2.conf pour apache2 sous Ubuntu).

Installation de Linux en dual boot avec Windows

· 7 minutes de lecture
Idriss Neumann
CEO comwork.io

Il existe aujourd'hui plusieurs façons de partitionner ses disques et d'installer Linux. En effet, il existe différents outils de partitionnement plus ou moins évolués et les CD d'installation intègrent de plus en plus leur propre outil de partitionnement. Mais ces manipulations peuvent toujours entraîner un risque de perte de données par l'écrasement de la partition Windows NTFS. Ainsi, cette méthode à été choisie parce qu'elle est assez sûre et simple. Il faut enfin savoir que l'installation de Linux avec tout ce que cela sous entend (téléchargement, gravure, défragmentation, partitionnement, etc) peut s'avérer assez longue, soyez patients.

Choix d'une distribution

Bien que l'on puisse faire absolument tout à partir de n'importe quelle distribution de Linux, la configuration initiale de celle-ci doit répondre à des besoins précis. Voici les principales distributions au jour d'aujourd'hui classées par catégorie d'utilisation :

  • Débutants, multimédia et grand public : Ubuntu, Fedora, Mandriva et OpenSuSE ;
  • Postes d'entreprises : RHEL (Red Hat Enterprise Linux), CentOS et SuSE ;
  • Serveurs : Debian, RHEL et CentOS ;
  • Plateformes de développement : Fedora, RHEL et CentOS.

Bien sûr cette classification un peu généraliste et minimaliste ne tient pas compte des préférences de chacun et ne parle pas de certaines distributions un peu plus complexes comme Gentoo, Slackware, voire d'autres systèmes voisins tels que les BSD, Solaris, AIX...

Notons également que Fedora sert aussi de vitrine des dernières technologies qui ne sont pas toujours stables et contribue au développement de RHEL (Red Hat Enterprise sponsorisant le développement de Fedora en retour) et de CentOS (clone libre et gratuit de RHEL mais qui ne bénéficie ni du support, ni de la garantie de celle-ci). Une version de Fedora sort environ tous les 6 mois alors que CentOS et RHEL sortent une version basée sur Fedora tous les 4 à 5 ans, d'où une stabilité idéale pour les serveurs et postes d'entreprises.

Notons enfin qu'Ubuntu est une distribution dérivée de Debian réservée au grand public. C'est aujourd'hui une des distributions les plus utilisées au monde et est fortement recommandée aux débutants. Une version LTS (Long Term Support) sort environ tous les 3 ans (5 ans pour la version serveur) tandis que les versions habituelles sortent tous les 6 mois.

Graver un live CD

Un live CD est un CD à partir duquel on peut booter (démarrer directement sans passer par le ou les OS stockés sur les disques durs). Pour graver un live CD, il faut d'abord télécharger une image ISO de la distribution afin de la graver. Il existe plusieurs modes de téléchargement : les plus répandus se font via FTP ou Torrent (conseillé lorsque les serveurs de téléchargement sont surchargés).

La plupart du temps, on peut trouver un lien vers le téléchargement d'une image ISO d'une distribution en consultant sa documentation.

Voici néanmoins quelques liens de téléchargement :

Assurez-vous également que la version de la distribution souhaitée correspond à l'architecture processeur de votre machine (32 bits, 64 bits...).

Le téléchargement de l'image peut s'avérer très long mais évitez les interruptions qui facilitent la corruption de cette dernière. Ainsi il vous est recommandé de vérifier son intégrité après téléchargement. Vous devez ensuite graver cette image sur un ou plusieurs CD (ou DVD) avec un logiciel de gravure en choisissant l'option « graver une image » (ou équivalent). La vitesse de gravure doit être au plus bas pour éviter à nouveau la corruption du fichier ISO sur le futur live-CD. Testez ensuite le live-CD en redémarrant votre PC.

Si le PC démarre immédiatement sur le disque dur, allez dans le setup du bios (voir la touche correspondante au démarrage, il s'agit souvent de la touche F2 ou d'une touche similaire, appuyez à plusieurs reprises dessus). Une fois dans le setup, allez dans la liste de démarrage (ou d'amorçage) des périphériques et placez le lecteur CD en premier (ou tout au moins avant le ou les disques durs).

Après avoir testé le livre-CD (sans installer Linux), retournez sous Windows. Une option du live-CD permet généralement de booter sur le disque dur, sinon rebootez le PC en retirant rapidement le CD avant l'amorçage.

Vous pouvez également, avant de retourner sous Windows, tester Linux à partir du live-CD si il vous propose une options du type « essayer sans rien installer » (ce qui est généralement le cas). Cependant le démarrage de l'OS en live peut s'avérer très long et ceci n'est pas indispensable lors de l'installation de Linux.

Création d'un espace libre

Avant de partitionner une première fois, il faut impérativement défragmenter ses volumes. Cela est possible à partir du poste de travail ou avec d'autres outils et cela peut prendre aussi un certain temps.

Une fois la défragmentation achevée, vous pouvez commencer le partitionnement à l'aide de différents outils :

  • Norton Partition Magic : c'est un des outils de partitionnement les plus évolués aujourd'hui. Cependant, il est payant et assez cher. Avec cet outil, il n'est pas forcément utile de défragmenter ses disques car il vous indique s'il y a besoin de défragmenter ou pas.
  • L'outil de gestion des disques de Windows : Les versions récentes de Windows embarquent un outil de gestion des volumes qui permet de partitionner et qui fonctionne assez bien sur les partitions NTFS et FAT32.
  • GParted : C'est un outil libre et gratuit de partitionnement auquel vous aurez accès à partir d'un live CD Linux.
  • fdisk et cfdisk : Ce sont des outils disponibles en console depuis un live CD de Linux. Il sont de plus bas niveau que les outils précédemment cités et sont déconseillés aux débutants.

Vous devez réduire, à l'aide de l'un de ces outils, la partition NTFS en faisant bien attention à ne pas empiéter sur l'espace occupé. Pour une utilisation suffisamment aisée des dernières versions de Linux, prenez une partition d'au moins 15 GO (plus si vous pouvez). Un espace libre sera ensuite créé avec comme taille, l'espace retiré lors du redimensionnement de la partition NTFS. Redémarrez ensuite Windows pour vous assurer qu'il n'y a pas eu de problèmes...

Installation de Linux

Insérez maintenant le live CD que vous venez de graver et tester et choisissez le mode « Installation » (ou équivalent). La mise en place de la procédure d'installation peut elle aussi prendre un certain temps, attendez qu'elle se mette en place et poursuivez-la jusqu'à l'étape de partitionnement (jusque-là, c'est assez simple).

Une fois à l'étape de partitionnement, n'utilisez pas les option du type « partitionnement automatique », « écraser les partions Linux », « Prendre tout l'espace disque »... mais l'option « partitionnement personnalisé » ou « partitionnement manuel » (ou équivalent).

Vous devez d'abord créer, à partir de l'espace libre (ne touchez pas à la partition NTFS !), une partition swap qui doit avoir, en théorie, comme espace disque, le double de la capacité de votre PC en mémoire vive. Cette règle était vraie à l'époque, mais il est désormais généralement inutile d'aller au delà d'1 GO de swap.

Prenez ensuite le reste de l'espace libre pour créer une partition racine / et éventuellement une partition /home (créer une partition /home est une solution avantageuse pour vos données personnelles qui seront disponibles depuis une autre partition Linux si vous installez plusieurs systèmes, et qu'elles pourront être conservées lors d'une nouvelle installation de Linux), avec comme système de fichier de l'ext3, de l'ext4 ou du Brtfs (ce dernier n'étant pas encore supporté par Grub, vous serez obligé de créer une partition /boot en ext3 ou ext4). Notez qu'un disque dur ne peut pas supporter plus de quatre partitions primaires mais peut supporter un nombre indéterminé de partitions étendues.

Poursuivez ensuite l'installation (cela reste encore simple mais peut prendre un certain temps) et redémarrez votre PC sous Linux pour le tester. Si vous êtes sous Ubuntu, il est préférable d'activer le compte root qui est par défaut inactif (pour cela faites sudo passwd root via un terminal). Testez ensuite Windows au cas où. Si tout fonctionne bien, il ne vous reste plus qu'à configurer votre OS (réseau, logiciels...), bonne chance. `

Les utilisateurs et les droits

· 4 minutes de lecture
Idriss Neumann
CEO comwork.io

Commençons par les commandes nécessaires à l'administration des utilisateurs. Vous vous douterez que les privilèges super utilisateurs sont requis pour exécuter la majorité de ce type de commandes.

  • adduser ou useradd : ajouter un utilisateur. La première commande est plus conviviale mais la seconde reste plus appropriée pour un script.
  • userdel ou deluser : supprimer un utilisateur.
  • addgroup ou groupadd : ajouter un groupe.
  • groupdel ou delgroup : suppression d'un groupe.
  • passwd : changer le mot de passe de l'utilisateur courant.
  • passwd <username> : changer le mot de passe d'un utilisateur (il peut s'agir de root). Le mot de passe administrateur est requis lorsque cette commande est effectuée sur une autre session que celle de l'utilisateur concerné.
  • who : afficher les utilisateurs connectés.

Le fichier /etc/passwd donne la liste des utilisateurs et le fichier /etc/shadow la liste des mots de passe cryptés pour chaque utilisateur.

Il existe aussi un système de groupes sous les systèmes de type Unix, voici les commandes liées à l'administration des groupes (les privilèges root sont encore requis) :

  • addgroup : ajouter un groupe.
  • usermod -G : ajouter un utilisateur dans un groupe.
  • usermod -g : définir un groupe comme groupe principal d'un utilisateur.

Le fichier /etc/group contient lui la liste des groupes.

Maintenant abordons les droits des utilisateurs sur des fichiers de toutes sortes (fichiers textes, répertoires, exécutables...). Le tableau ci-dessous résume les différents groupes d'utilisateurs et les différents droits que l'on peut leur attribuer grâce à la commande chmod (qui permet de changer ces droits) :

Groupesugo
Désignationusergroupother
Significationutilisateur propriétairegroupe propriétaireautres utilisateurs

Et les différents droits et codes correspondants pour chaque groupes d'utilisateurs :

Droitsrwxrwxrwx
Désignationreadwriteexecutereadwriteexecutereadwriteexecute
Significationlectureécritureexécutionlectureécritureexécutionlectureécritureexécution
Numéro400200100402010421

Il est possible que vous ne perceviez pas immédiatement le fonctionnement de cette commande chmod mais ne vous inquiétez pas, les exemples qui suivent vont éclaircir vos interrogations :

  • chmod +x ou chmod a+x ou chmod ugo+x ou encore chmod 111 : donner le droit d'exécution sur un fichier à tous les groupes.
  • chmod u+x ou chmod 100 : donner le droit d'exécution sur un fichier à l'utilisateur propriétaire (et retirer en même temps tous les autres droits pour le cas de la seconde commande).
  • chmod +rw ou chmod ugo +rw ou encore chmod 666 nom_du_fichier : donner le droit de lecture et d'écriture sur un fichier (ou répertoire).
  • chmod 777 ou chmod ugo+rwx ou encore chmod +rwx : donner tous les droits à tous le monde sur un fichier (ou répertoire).
  • chmod -R 777 : donner tous les droits à tout le monde sur un répertoire et sur son contenu de manière récursive.
  • chmod go-rwx : retirer tous les droits au groupe propriétaire et aux autres utilisateurs.

Remarques :

  • Pour donner plusieurs droits de façon numérique il suffit d'additionner les numéros entre eux par dizaines. Par exemple :
    • o+rx = 005
    • u+rwx = 700
    • ug+rw = 600
    • ugo+rwx = 777
    • ...attention toutefois à la place des zéros qui signifient « aucuns droits ».
  • Lorsque l'on change les droits avec les lettres qui leur correspondent, on utilise + pour ajouter les droits et pour les enlever.
  • L'option -R sert à indiquer que les droits s'appliquent récursivement aux fichiers contenus dans un répertoire sur lequel on applique la commande (y compris dans les sous-répertoires)
  • Si vous n'êtes pas l'utilisateur propriétaire du fichier sur lequel vous lancez un chmod, vous aurez besoin des privilèges administrateur.

Pour terminer ce billet, voici les commandes qui permettent de changer les groupes et/ou utilisateurs propriétaires sur un fichier (il faut bien entendu être soit l'utilisateur propriétaire du fichier concerné, soit root pour pouvoir exécuter ces commandes) :

  • chown : changer l'utilisateur propriétaire d'un fichier quelconque.
  • chgrp : changer le groupe propriétaire d'un fichier.
  • chown : changer l'utilisateur et le groupe propriétaire d'un fichier.