commit
76b30a0078
@ -0,0 +1,88 @@ |
||||
PY=python
|
||||
PELICAN=pelican
|
||||
PELICANOPTS=
|
||||
|
||||
BASEDIR=$(CURDIR)
|
||||
INPUTDIR=$(BASEDIR)/content
|
||||
OUTPUTDIR=$(BASEDIR)/output
|
||||
CONFFILE=$(BASEDIR)/pelicanconf.py
|
||||
PUBLISHCONF=$(BASEDIR)/publishconf.py
|
||||
|
||||
FTP_HOST=localhost
|
||||
FTP_USER=anonymous
|
||||
FTP_TARGET_DIR=/
|
||||
|
||||
SSH_HOST=localhost
|
||||
SSH_PORT=22
|
||||
SSH_USER=root
|
||||
SSH_TARGET_DIR=/var/www
|
||||
|
||||
S3_BUCKET=my_s3_bucket
|
||||
|
||||
DROPBOX_DIR=~/Dropbox/Public/
|
||||
|
||||
help: |
||||
@echo 'Makefile for a pelican Web site '
|
||||
@echo ' '
|
||||
@echo 'Usage: '
|
||||
@echo ' make html (re)generate the web site '
|
||||
@echo ' make clean remove the generated files '
|
||||
@echo ' make regenerate regenerate files upon modification '
|
||||
@echo ' make publish generate using production settings '
|
||||
@echo ' make serve serve site at http://localhost:8000'
|
||||
@echo ' make devserver start/restart develop_server.sh '
|
||||
@echo ' make stopserver stop local server '
|
||||
@echo ' ssh_upload upload the web site via SSH '
|
||||
@echo ' rsync_upload upload the web site via rsync+ssh '
|
||||
@echo ' dropbox_upload upload the web site via Dropbox '
|
||||
@echo ' ftp_upload upload the web site via FTP '
|
||||
@echo ' s3_upload upload the web site via S3 '
|
||||
@echo ' github upload the web site via gh-pages '
|
||||
@echo ' '
|
||||
|
||||
|
||||
html: clean $(OUTPUTDIR)/index.html |
||||
|
||||
$(OUTPUTDIR)/%.html: |
||||
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
|
||||
|
||||
clean: |
||||
[ ! -d $(OUTPUTDIR) ] || find $(OUTPUTDIR) -mindepth 1 -delete
|
||||
|
||||
regenerate: clean |
||||
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
|
||||
|
||||
serve: |
||||
cd $(OUTPUTDIR) && $(PY) -m pelican.server
|
||||
|
||||
devserver: |
||||
$(BASEDIR)/develop_server.sh restart
|
||||
|
||||
stopserver: |
||||
kill -9 `cat pelican.pid`
|
||||
kill -9 `cat srv.pid`
|
||||
@echo 'Stopped Pelican and SimpleHTTPServer processes running in background.'
|
||||
|
||||
publish: |
||||
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
|
||||
|
||||
ssh_upload: publish |
||||
scp -P $(SSH_PORT) -r $(OUTPUTDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)
|
||||
|
||||
rsync_upload: publish |
||||
rsync -e "ssh -p $(SSH_PORT)" -P -rvz --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude
|
||||
|
||||
dropbox_upload: publish |
||||
cp -r $(OUTPUTDIR)/* $(DROPBOX_DIR)
|
||||
|
||||
ftp_upload: publish |
||||
lftp ftp://$(FTP_USER)@$(FTP_HOST) -e "mirror -R $(OUTPUTDIR) $(FTP_TARGET_DIR) ; quit"
|
||||
|
||||
s3_upload: publish |
||||
s3cmd sync $(OUTPUTDIR)/ s3://$(S3_BUCKET) --acl-public --delete-removed
|
||||
|
||||
github: publish |
||||
ghp-import $(OUTPUTDIR)
|
||||
git push origin gh-pages
|
||||
|
||||
.PHONY: html help clean regenerate serve devserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload github |
@ -0,0 +1,13 @@ |
||||
Source code for my [blog][] |
||||
=========================== |
||||
|
||||
So this is the source code for my blog. |
||||
More exactly, this is the configuration files and the theme I've used and |
||||
modified to put this blog online. |
||||
|
||||
This repository will also contain the markdown "source" for the articles, and of |
||||
course the output folder. |
||||
|
||||
So here goes. Not sure why anyone would be interested, but still. |
||||
|
||||
[blog]: http://wxcafe.net |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,152 @@ |
||||
Title: Le chiffrement de partitions avec dm-crypt et device-mapper |
||||
Date: 2013-07-10 03:18 |
||||
Author: Wxcafe |
||||
Category: Tutoriel |
||||
Slug: le-chiffrement-de-partition-avec-dm-crypt-et-device-mapper |
||||
|
||||
|
||||
Le chiffrement en tant que concept informatique est traditionnellement associé |
||||
au chiffrement de fichiers, c'est a dire au fait de passer d'un fichier *en |
||||
clair* a un fichier chiffré dit *cyphertext*. Cependant, il ne se limite pas a |
||||
ça, et peut aussi servir a garantir l'intégrité d'un système d'exploitation, ou |
||||
bien la confidentialité d'un support de stockage, par exemple. Nous allons ici |
||||
voir comment mettre en place un système de ce type sous GNU/Linux. Cet article |
||||
n'a pas pour but de vous apprendre a mettre en place un système basé sur une |
||||
procédure de boot sécurisée, mais plutôt d'expliquer les concepts qui entrent en |
||||
jeu dans l'utilisation du sous-système du noyau Linux [__dm_crypt__](http://en.wikipedia.org/wiki/dm-crypt) et de |
||||
présenter un rapide tutoriel concernant la création d'un support chiffré sur |
||||
lequel garder vos informations confidentielles (par exemple, votre [clé GPG](http://wxcafe.net/posts/11/19/12/la-cryptographie-avec-pgp-et-principalement-gnupg)) |
||||
|
||||
dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système |
||||
du noyau Linux, et s'appuie sur [LUKS](http://en.wikipedia.org/wiki/Linux_Unified_Key_Setup), un standard de chiffrement |
||||
de disques. Comme son nom l'indique, device-mapper est un système qui a pour but |
||||
de __mapper__ des __block devices__. Pour être plus clair, le kernel considère |
||||
comme "block device" tout fichier spécial (en gros, les fichiers disques dans |
||||
`/dev/`, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le |
||||
cas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de |
||||
fonctionnement est simple : a partir d'un "fichier de périphérique" (trad. |
||||
Wikipédia), il en "crée" un nouveau, virtuel, ayant des propriétés différentes. |
||||
Par exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans |
||||
/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui |
||||
apparaîtront donc dans /dev/mapper) |
||||
|
||||
Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de |
||||
fichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et |
||||
déchiffre a la volée tous les accès disques a ce périphérique non chiffré en les |
||||
traduisant sur le système de fichier chiffré, le tout de manière tout a fait |
||||
transparente pour les applications utilisant le disque en question. Cela induit |
||||
bien entendu une baisse de performance relativement significative dans le cas |
||||
d'un chiffrement du système de fichier root, mais quasiment insignifiante dans |
||||
le cas de chiffrement de partitions de données. |
||||
|
||||
D'ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer |
||||
si le système de fichier root est chiffré. Dans ce cas précis, la procédure de |
||||
boot __*doit*__ s'appuyer sur une image initrd (l'initrd est un système de |
||||
fichier minimal qui sert uniquement a initialiser le système. Les kernels de |
||||
base de la plupart des distributions GNU/Linux en utilisent un dans tous les |
||||
cas, pour des raisons de compatibilité) et sur une partition de boot qui elle |
||||
n'est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,...) charge |
||||
en mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et |
||||
charge l'initrd en RAM, celui-ci a son tour lance un script permettant de |
||||
charger les modules nécessaires a la suite du boot (que ce soit pour un boot |
||||
sans disque root local, ou bien comme ici avec un système chiffré), puis le |
||||
système de fichier "cible" est remonté sur la racine, et l'initrd est démonté |
||||
est la RAM qu'il occupait est libérée, puis la procédure de boot normale reprend |
||||
depuis le système de fichier maintenant monté sur la racine. |
||||
|
||||
La méthode la plus évidente pour contourner le chiffrement du disque est alors |
||||
de remplacer le fichier compressé initrd dans /boot, qui n'est pas chiffrée, par |
||||
un autre modifié, copiant par exemple la phrase de passe permettant de |
||||
déchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir |
||||
contre ce genre d'attaques : l'une des plus simple est de faire un checksum du |
||||
fichier initrd utilisé et reconnu comme sûr, et de vérifier lors du *vrai* boot |
||||
que l'initrd présente toujours le même checksum. Cela dit, cette méthode a |
||||
l'inconvénient d'intervenir après les faits, et de nécessiter au moins un accès |
||||
a un fichier initrd reconnu comme sûr. |
||||
Une autre approche consisterait a placer le système de fichier /boot sur un |
||||
périphérique dédié, protégé en écriture de façon matérielle (par exemple, une |
||||
carte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et |
||||
protégé en écriture de façon matérielle. Ainsi, il n'est pas possible pour un |
||||
attaquant de modifier ce système de fichier, et l'initrd est alors toujours de |
||||
confiance. Cependant, cela a pour conséquence de rendre la mise a jour de |
||||
l'initrd et du noyau *beaucoup* plus difficile qu'elle ne le serait sans. |
||||
|
||||
Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un |
||||
programme dédié, `cryptsetup`. Ce dernier était en charge de cryptoloop, |
||||
l'ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est |
||||
maintenant responsable de l'utilisation *userspace* de dm-crypt, qui pour sa |
||||
part est entièrement *kernel-space*. Cryptsetup permet ainsi le chiffrement, la |
||||
manipulation (montage/démontage/...) et la gestion de clé des systèmes de fichier |
||||
LUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les |
||||
utilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi |
||||
obligatoirement être capables de le faire en tant que root. |
||||
|
||||
Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go : |
||||
Tout d'abord, il nous faut créer le fichier qui contiendra l'image. Pour cela, |
||||
dans une situation réelle ou l'on cherche a chiffrer un disque, il convient |
||||
d'utiliser /dev/urandom comme source, pour éviter la détection du système de |
||||
fichier chiffré sur le disque. |
||||
Ici, par exemple, nous allons faire : |
||||
|
||||
dd bs=1000 count=1000000 if=/dev/urandom of=image.img |
||||
|
||||
Maintenant que notre image est créée, nous pouvons la chiffrer : |
||||
|
||||
sudo cryptsetup luksFormat image.img |
||||
|
||||
`cryptsetup` va alors nous demander si nous sommes absolument surs de vouloir |
||||
formater ce disque (nous allons donc valider en tapant YES), puis une |
||||
passphrase. Il convient ici de choisir une passphrase particulièrement sûre, |
||||
puisque toute personne ayant accès a la passphrase aura aussi accès au disque et |
||||
donc a vos secrets. |
||||
Une fois cela fait, nous allons mapper cette image : |
||||
|
||||
sudo cryptsetup luksOpen image.img crypto |
||||
|
||||
`cryptsetup` nous redemande la passphrase, charge pendant quelques secondes, |
||||
puis nous redonne le prompt. Que s'est-il passé? En cherchant un peu, nous |
||||
voyons qu'il n'y a pas de nouveau disque dans /dev. C'est tout a fait normal. En |
||||
effet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les |
||||
systèmes de fichiers chiffrés, il les mappe, et ça n'a rien a voir. On remarque |
||||
qu'est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque |
||||
virtuel qui correspond a notre image. Il se comporte comme toute partition, et |
||||
peut donc être monté, formaté, etc (il ne peut cependant pas être partitionné. |
||||
Il se comporte en effet comme une partition, et non comme un véritable disque.) |
||||
Bon, ceci fait, notre disque virtuel n'est pas formaté. Il nous reviens donc de |
||||
le faire, pour pouvoir l'utiliser. |
||||
|
||||
sudo mkfs.ext4 /dev/mapper/crypto |
||||
|
||||
Maintenant que notre disque est formaté, il peut être monté : |
||||
|
||||
sudo mount /dev/mapper/crypto /mnt |
||||
|
||||
Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous |
||||
voulez vérifier, un `mount | grep crypto` devrait vous donner le résultat |
||||
suivant : |
||||
|
||||
/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered) |
||||
|
||||
Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils |
||||
sont (en fonction de votre passphrase) en sécurité. |
||||
|
||||
Pour résumer : |
||||
|
||||
- Pour monter vos partitions : |
||||
|
||||
sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel> |
||||
sudo mount /dev/mapper/<nom de disque virtuel> <emplacement> |
||||
|
||||
- Pour démonter vos partitions : |
||||
|
||||
sudo umount <emplacement> |
||||
sudo cryptsetup luksClose <nom de disque virtuel> |
||||
|
||||
Pour simplifier la vie de tous, j'ai créé deux petits scripts vous permettant de |
||||
créer et de monter/démonter vos images/disques chiffré-e-s en une seule |
||||
commande. Ils se trouvent sur [github](https://github.com/wxcafe/cryptoscripts). |
||||
|
||||
Par ailleurs, si vous comptez transferer votre image disque sur un véritable |
||||
disque (ou clé usb, ou autre), il est préférable de créer une partition de |
||||
taille appropriée et de faire un `dd if=votre_image of=/dev/votre_partition` |
||||
pour ce faire. |
@ -0,0 +1,262 @@ |
||||
Title: Archlinux made simple |
||||
Date: 2012-10-05 14:48 |
||||
Author: Wxcafe |
||||
Category: OSes |
||||
Slug: archlinux-made-simple |
||||
|
||||
Archlinux est réputée être une distribution Linux très complexe a |
||||
installer et a maintenir. |
||||
|
||||
Je vais tenter ici de vous convaincre que ce n'est pas le cas, et |
||||
qu'elle peut se monter très intéressante et très instructive a installer |
||||
tout autant qu'a utiliser. |
||||
|
||||
Il convient tout d'abord de rappeler a quels principes obéit Arch: |
||||
|
||||
1. Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des |
||||
programmes simples et utilisables par tous. Avec comme base de |
||||
simplicité les utilisateurs de LFS... Mais il n'empêche qu'avec un peu |
||||
de bonne volonté, la configuration n'est pas si compliquée! |
||||
|
||||
2. La philosophie UNIX : chaque programme est prévu pour ne remplir |
||||
qu'une seule tâche. Bien entendu, cela ne concerne que les programmes |
||||
conçus pour s’insérer dans la philosophie UNIX, et les installations de |
||||
dépendances avec le gestionnaire de paquet d'Arch fonctionnent |
||||
superbement bien. |
||||
|
||||
De plus, posons les bases d'Arch : le gestionnaire de paquets s'appelle |
||||
pacman, et les commandes de base sont : |
||||
|
||||
- recherche d'un paquet : |
||||
|
||||
pacman -Ss paquet |
||||
|
||||
- installation d'un paquet : |
||||
|
||||
sudo pacman -S paquet |
||||
|
||||
- désinstallation d'un paquet : |
||||
|
||||
sudo pacman -R paquet |
||||
|
||||
- mise a jour de tous les paquets installés : |
||||
|
||||
sudo pacman -Syu paquet |
||||
|
||||
Archlinux est une distribution dite "rolling release", ce qui signifie |
||||
qu'il n'y a pas de version a proprement dites, et que les paquets se |
||||
mettent a jour en permanence, sans jamais changer la "version" d'Arch. |
||||
Il n'y a d'ailleurs qu'une seule version de l'installeur sur le site, |
||||
puisqu'une version plus ancienne n'aurait aucun sens. |
||||
|
||||
Arch n'offre pas d'interface graphique par défaut : après avoir installé |
||||
le système, vous n'aurez qu'une invite de commande. Heureusement, je |
||||
vais ici vous guider a travers l'installation d'une interface graphique |
||||
(mate, le fork de gnome 2) |
||||
|
||||
L'installation d'Arch se fait par le réseau, veillez a avoir une |
||||
connection WiFi ou filaire a proximité avant de suivre ce guide. |
||||
|
||||
Ce guide utilise SystemV, alors qu'Arch va prochainement passer sous |
||||
systemd. N'ayant pas encore eu le temps d’expérimenter assez avec ce |
||||
dernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt. |
||||
|
||||
Bon, passons a l'explication de l'installation proprement dite : |
||||
|
||||
Tout d'abord, téléchargeons l'iso d'arch la plus récente : |
||||
|
||||
wget http://mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso |
||||
|
||||
Ensuite, gravons cette image sur un disque USB : |
||||
|
||||
dd if=archlinux-2012.09.07-dual.iso of=/dev/sdX |
||||
|
||||
Après reboot de la machine sur l'iso en question et choix de |
||||
l'architecture, nous sommes accueillis par un shell root. |
||||
|
||||
La première chose a faire est de paramétrer le clavier : |
||||
|
||||
loadkeys fr |
||||
|
||||
Puis nous pouvons passer a l'installation proprement dite. |
||||
Partitionnement : |
||||
|
||||
cfdisk # cfdisk est suffisamment clair pour ne pas nécessiter d'explications |
||||
|
||||
formatage des partitions : |
||||
|
||||
mkfs.ext4 /dev/sda1 # partition root |
||||
|
||||
pacman -Syu btrfs-progs && mkfs.btrfs /dev/sda2 # partition home |
||||
|
||||
mkswap /dev/sda3 && swapon /dev/sda3 # partition de swap |
||||
|
||||
Montons les partitions nouvellement créées, puis installons le système : |
||||
|
||||
mount /dev/sda1 /mnt |
||||
|
||||
mkdir /mnt/home && mount /dev/sda2 /mnt/home |
||||
|
||||
dhclient eth0 # si vous utilisez une connection filaire, sinon voire http://wiki.archlinux.fr/Wifi#Configuration |
||||
|
||||
pacstrap /mnt base base-devel |
||||
|
||||
genfstab -p /mnt > /mnt/etc/fstab |
||||
|
||||
Allons prendre un café le temps que ça charge, puis installons les |
||||
quelques paquets nécessaires a notre installation et au premier |
||||
démarrage: |
||||
|
||||
pacstrap /mnt syslinux btrfs-progs wireless_tools dhclient |
||||
|
||||
Maintenant, passons sur notre install toute fraîche d'Arch : |
||||
|
||||
arch-chroot /mnt bash |
||||
|
||||
configurons les bases : |
||||
|
||||
echo HOSTNAME > /etc/hostname |
||||
|
||||
ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime |
||||
|
||||
date MMJJhhmmAAAA |
||||
|
||||
hwclock --systohc |
||||
|
||||
vim /etc/locale.gen # Décommentez les lignes correspondant au français : fr_FR.UTF-8 et fr_FR.ISO-8859-1 |
||||
|
||||
echo 'LANG="fr_FR.UTF-8"' > /etc/locale.conf |
||||
|
||||
locale-gen |
||||
|
||||
mkinitcpio -p linux |
||||
|
||||
Enfin, vérifions que syslinux est correctement configuré : |
||||
|
||||
vim /boot/syslinux/syslinux.cfg # il devrait y avoir "append root=/dev/sda1" |
||||
|
||||
Si tout est correct, installons syslinux, et paramétrons un mot de passe |
||||
root : |
||||
|
||||
syslinux-install_update /dev/sda -mia |
||||
|
||||
passwd root |
||||
|
||||
Et voila, l'installation est terminée! Plus qu'a quitter la session et a |
||||
redémarrer l'ordinateur! |
||||
|
||||
exit |
||||
umount /mnt/home |
||||
umount /mnt |
||||
reboot |
||||
|
||||
Fini! |
||||
|
||||
Prenons une petite pause. La partie suivante de ce tutoriel consister en |
||||
un paramétrage des principaux services nécessaires a l'utilisation d'un |
||||
OS, disons, moyen : |
||||
|
||||
- Installation de MATE, le gestionnaire de bureau (voir |
||||
[http://mate-desktop.org/][]) |
||||
|
||||
- Installation de sudo et de networkmanager pour faire fonctionner les |
||||
composants essentiels du système sans avoir a tout activer a la main a |
||||
chaque démarrage |
||||
|
||||
- Installation de SLiM comme gestionnaire de login graphique, pour |
||||
présenter une interface plus accueillante que la console, et |
||||
configuration de celui-ci |
||||
|
||||
- Installation des principaux logiciels utiles non inclus dans mate ni |
||||
base (yaourt, chromium, thunderbird, etc...). |
||||
|
||||
Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un |
||||
gestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter |
||||
ici. |
||||
|
||||
Bon, reprenons. |
||||
|
||||
Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de |
||||
passe paramétré plus haut pour le root, puis retapez la commande |
||||
utilisée plus tôt pour vous connecter a internet. |
||||
|
||||
Il convient d'ajouter le dépôt de MATE pour installer ce dernier, puis |
||||
d'effectuer l'action en question : |
||||
|
||||
vim /etc/pacman.conf |
||||
|
||||
Ici, ajoutez les lignes suivantes : |
||||
|
||||
[mate] |
||||
Server = http://repo.mate-desktop.org/archlinux/$arch |
||||
|
||||
Installons maintenant les paquets : |
||||
|
||||
pacman -Syu mate mate-extras dbus dbus-core alsa networkmanager sudo |
||||
|
||||
Ajoutons un compte utilisateur pour utiliser les composants du système |
||||
sans tout crasher a chaque fois : |
||||
|
||||
useradd -g users -G wheel,audio,optical,lp,scanner,log,power,floppy,storage,games,video -m -s /bin/bash *votrenom* |
||||
passwd *votrenom* |
||||
su *votrenom* |
||||
|
||||
Il faut maintenant éditer le fichier \~/.xinitrc pour préciser a X.org |
||||
ce que l'on veut utiliser : |
||||
|
||||
echo "exec ck-launch-session mate-session" > ~/.xinitrc |
||||
|
||||
Profitons en pour ajouter les démons système au lancement : |
||||
|
||||
vim /etc/rc.conf |
||||
|
||||
Ajoutez donc `dbus, alsa. hwclock` et `networkmanager` dans la section |
||||
DAEMONS (entre les parenthèses, après crond normalement) |
||||
|
||||
DAEMONS=(syslog-ng network crond dbus alsa hwclock networkmanager) |
||||
|
||||
Pour éviter un reboot, il est ici possible de faire un |
||||
|
||||
su |
||||
|
||||
Puis un |
||||
|
||||
/etc/rc.d/dbus start && /etc/rc.d/alsa start && /etc/rc.d/networkmanager start |
||||
|
||||
Sinon, il est possible de juste redémarrer. |
||||
Une fois cela fait, profitez de ce moment pour vous autoriser vous même |
||||
a utiliser sudo. Loggez vous en root, et : |
||||
|
||||
vim /etc/sudoers |
||||
|
||||
Décommentez la ligne qui commence par \# %wheel ALL=(ALL) |
||||
Sauvegardez le fichier, puis, après un `su *votrenom*`, tentez de faire |
||||
un sudo ls / |
||||
Normalement, vous devriez avoir un listing du dossier / |
||||
Bon, maintenant, pourquoi ne pas tenter de lancer MATE? |
||||
C'est simple comme bonjour : |
||||
|
||||
startx |
||||
|
||||
Et PAF! Voila un MATE desktop flambant neuf a configurer! |
||||
Avant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous, |
||||
puis installez SLiM (`sudo pacman -Syu slim`). |
||||
Configurons le: |
||||
|
||||
echo "exec dbus-launch mate-session" > ~/.xinitrc && vim /etc/slim.conf |
||||
|
||||
Éditez la ligne |
||||
"`sessions xfce4,icewm-session,wmaker,blackbox`" de facon a |
||||
ce qu'elle ressemble a "`sessions mate-session`" |
||||
Puis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS. |
||||
Normalement, tout devrait fonctionner! |
||||
Ah oui, et pour installer thunderbird, firefox, chromium, etc... |
||||
|
||||
sudo pacman -Syu chromium thunderbird xchat firefox rhythmbox pidgin transmission-gtk vlc |
||||
|
||||
Voila! Et comme dirait [@Spartition][], c'est sale, mais qu'est-ce que c'est |
||||
bon! |
||||
A plus~ |
||||
|
||||
[@Spartition]: https://twitter.com/spartition |
||||
[http://mate-desktop.org/]: http://mate-desktop.org/ |
@ -0,0 +1,36 @@ |
||||
Title: Débuts, présentation, etc... |
||||
Date: 2012-08-18 20:27 |
||||
Author: Wxcafe |
||||
Category: Notes |
||||
Slug: debuts-presentation-etc |
||||
|
||||
Bonjour! |
||||
|
||||
Je m'appelle Wxcafé, et ça fait pas mal de temps que je sévis sur |
||||
Twitter, mais aussi sur IRC (Je traîne pas mal sur |
||||
irc.freenode.net/\#\#nolife et \#debian-fr) |
||||
|
||||
J'ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je |
||||
fais partie de ce genre de personne qui sont capables d'investir tout |
||||
leur temps et leur énergie a s’intéresser a un sujet en particulier, et |
||||
qui ne peuvent pas vivre sans leurs passions, avec une petite différence |
||||
cependant, qui est que je m’intéresse a plusieurs choses : |
||||
l'informatique, qui est un champ tellement large qu'on peut passer une |
||||
vie a apprendre des choses dessus, et plus particulièrement à |
||||
l'informatique avancée (Noyaux dérivés d'UNIX et de Linux, outils libres |
||||
{bien que n'étant pas un barbu intégriste [ceci est un troll assumé. Les |
||||
trolls seront a partir de maintenant indiqués avec le tag [tr]] du |
||||
libre, je préfère utiliser de l'open-source si c'est possible}, |
||||
programmation en C, python et java, etc...) , mais aussi a |
||||
l’électronique. |
||||
|
||||
Dans un tout autre registre, je m’intéresse aussi |
||||
beaucoup aux différents aspects du féminisme et des égalités sexuelles |
||||
(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) , |
||||
et a la culture dite "geek" en général. |
||||
|
||||
Je tenterai de poster ici le plus souvent possible, mais j'ai de gros |
||||
problèmes en terme de régularité de post, donc ne vous inquiétez pas si |
||||
vous ne voyez rien pendant deux semaines. |
||||
|
||||
Merci beaucoup de votre attention, et a bientôt! |
@ -0,0 +1,244 @@ |
||||
Title: Mise en place d'un serveur DNS |
||||
Date: 2014-02-24 02:49 |
||||
Author: Wxcafe |
||||
Category: Tutoriel |
||||
Slug: mise-en-place-dun-serveur-dns |
||||
|
||||
Le DNS (Domain Name System) est le service permettant la résolution des noms de |
||||
domaines en différentes informations : adresses IPv4, adresses IPv6, certificats |
||||
DNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS |
||||
est utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour |
||||
simplifier la vie de tous les utilisateurs (je doute que tout le monde retienne |
||||
de se connecter a [http://173.194.45.66](http://173.194.45.66), ou a |
||||
[http://199.16.156.70](http://199.16.156.70). Voire même a |
||||
[http://5.39.76.46](http://5.39.76.46)). |
||||
|
||||
Cependant, le DNS est un système qui date de 1984, et les exigences de l'époque |
||||
en termes d'expérience utilisateur n'étaient pas forcément aussi importantes que |
||||
de nos jours. La configuration des serveurs DNS peut ainsi être assez |
||||
contre intuitive. |
||||
Cela étant dit, comprendre le fonctionnement de DNS et contrôler ses |
||||
enregistrements est important. |
||||
|
||||
Tout d'abord, une petite explication théorique. Le DNS fonctionne de la même |
||||
façon que le système de fichiers : en arborescence. Cependant, là ou la racine |
||||
du FS est `/`, celle de DNS est `.`, et là ou il convient d'écrire, par exemple, |
||||
`/usr/` et ou la progression se fait de gauche a droite pour le FS, pour DNS le |
||||
`.` n'est pas obligatoire et la progression se fait de droite a gauche. Par |
||||
exemple, le tld(top level domain, domaine de haut niveau) `com`, et le domaine |
||||
`google.com` appartient a `com`, on écrit donc `google.com` sans écrire le point |
||||
a la fin de façon courante. |
||||
|
||||
Le reverse DNS est une variante du DNS "classique" permettant de résoudre les |
||||
adresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. |
||||
Cependant, le reverse DNS n'a, par définition, pas de TLD sur lequel se diriger |
||||
quand on lui adresse une query. Les "adresses" que l'on query en reverse DNS |
||||
sont donc constituées de l'adresse IP, **_dans le sens contraire a l'ordre |
||||
habituel_**, et du faux domaine .in-addr.arpa |
||||
Par exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire `dig PTR |
||||
76.46.39.5.in-addr.arpa`. La réponse sera, évidemment, `wxcafe.net` |
||||
|
||||
Voyons maintenant comment mettre en place son propre serveur DNS. Tout d'abord, |
||||
quelques informations. DNS fonctionne sur le port 53 en UDP, et la commande |
||||
utilisée pour faire des tests DNS est `dig`. Le DNS fonctionne avec des |
||||
"enregistrements", records en anglais. Par exemple, un record A indique une |
||||
adresse IP, un record NS indique un Serveur de nom, etc. `dig` se base sur ces |
||||
records : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom |
||||
de domaine que vous donnez en argument, mais en précisant un autre type de |
||||
record, vous pouvez obtenir n'importe quelle information : par exemple, `dig NS |
||||
wxcafe.net` devrait vous renvoyer |
||||
|
||||
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> NS wxcafe.net |
||||
;; global options: +cmd |
||||
;; Got answer: |
||||
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13846 |
||||
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 |
||||
|
||||
;; QUESTION SECTION: |
||||
;wxcafe.net. IN NS |
||||
|
||||
;; ANSWER SECTION: |
||||
wxcafe.net. 3600 IN NS ns.wxcafe.net. |
||||
wxcafe.net. 3600 IN NS ns.home.wxcafe.net. |
||||
|
||||
;; Query time: 60 msec |
||||
;; SERVER: 10.0.42.1#53(10.0.42.1) |
||||
;; WHEN: Tue Dec 10 13:31:18 2013 |
||||
;; MSG SIZE rcvd: 67 |
||||
|
||||
Comme vous pouvez le voir, les serveurs DNS principaux pour |
||||
[wxcafe.net](http://wxcafe.net) sont `ns.wxcafe.net` et `ns.home.wxcafe.net`, |
||||
qui sont respectivement des alias pour `wxcafe.net` et `home.wxcafe.net`. Ainsi, |
||||
chacun fait autorité pour lui même, et le problème évident est que le résolveur |
||||
ne peut résoudre la query si il est renvoyé encore et encore vers le même |
||||
serveur. Il convient donc de définir dans le même fichier de configuration |
||||
l'adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième |
||||
loop, se rendra compte qu'il est en train de faire une boucle infinie et |
||||
demandera l'adresse au serveur auquel il est connecté. La première indication de |
||||
direction se fait grâce au serveur du TLD. |
||||
|
||||
La configuration de bind est assez simple dans le principe, le plus complexe |
||||
étant en fait d'écrire les fichiers de zone. |
||||
La configuration de bind sous debian se fait dans le dossier /etc/bind/. Il |
||||
existe 4 fichiers de configuration principaux : `named.conf`, |
||||
`named.conf.default-zones`, `named.conf.local` et `named.conf.options`. |
||||
`named.conf` contient les options par défaut de bind, `named.conf.default-zones` |
||||
les déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher), |
||||
`named.conf.local` contient les déclarations de vos zones, et |
||||
named.conf.options contient les options que vous rajoutez pour changer le |
||||
comportement de bind. |
||||
|
||||
Pour commencer, il convient de préciser que nous allons parler ici du cas dans |
||||
lequel se trouve wxcafe.net: deux domaines dont nous voulons faire l'autorité, |
||||
deux serveurs DNS, et un service de résolution récursive limitée a quelques IPs |
||||
(notamment mon accès chez moi). |
||||
|
||||
Examinons tout d'abord les fichiers de configuration de named. |
||||
`named.conf.local` contient les définitions des zones forward et reverse. |
||||
Sur wxcafe.net, les zones `wxcafe.net` et `76.46.39.5.in-addr.arpa` sont gérées |
||||
en master, et les zones `home.wxcafe.net` et `103.177.67.80.in-addr.arpa` sont |
||||
gérées en slave. Nous n'examinerons ici que les déclarations de zones sur ce |
||||
serveur, et pas sur home., car elles sont sensiblement les mêmes. La différence |
||||
principale étant que l'un héberge en slave les masters de l'autre. |
||||
Le fichier `named.conf.local` sur wxcafe.net contient donc |
||||
|
||||
zone "wxcafe.net" { |
||||
type master; |
||||
file "/etc/bind/master/wxcafe.net"; |
||||
allow-transfer { |
||||
80.67.177.103; |
||||
}; |
||||
}; |
||||
|
||||
zone "home.wxcafe.net" { |
||||
type slave; |
||||
file "/etc/bind/slave/home.wxcafe.net"; |
||||
masters { |
||||
80.67.177.103; |
||||
}; |
||||
}; |
||||
|
||||
zone "46.76.39.5.in-addr.arpa" { |
||||
type master; |
||||
file "/etc/bind/master/46.76.39.5.in-addr.arpa"; |
||||
allow-transfer { |
||||
80.67.177.103; |
||||
}; |
||||
}; |
||||
|
||||
zone "103.177.67.80.in-addr.arpa" { |
||||
type slave; |
||||
file "/etc/bind/slave/103.177.67.80.in-addr.arpa"; |
||||
masters { |
||||
80.67.177.103; |
||||
}; |
||||
}; |
||||
|
||||
Cela devrait être relativement clair. Globalement, les zones master ont un |
||||
fichier dans `/etc/bind/master/`, et les slaves un fichier dans |
||||
`/etc/bind/slave/`, les masters autorisent le transfert vers home.wxcafe.net |
||||
tandis que les slaves déclarent home.wxcafe.net comme master, et le reste est |
||||
assez parlant. |
||||
|
||||
Voyons maintenant le fichier de zone concernant wxcafe.net, soit |
||||
`/etc/bind/master/wxcafe.net` : |
||||
|
||||
$TTL 3600 ; 1 hour |
||||
@ IN SOA ns.wxcafe.net. wxcafe.wxcafe.net. ( |
||||
2014011001 ; serial |
||||
3h ; refresh |
||||
1h ; retry |
||||
168h ; expire |
||||
300 ; negative response ttl |
||||
) |
||||
|
||||
; Name servers |
||||
IN NS ns.wxcafe.net. |
||||
IN NS ns.home.wxcafe.net. |
||||
|
||||
; Mail exchangers |
||||
IN MX 10 wxcafe.net. |
||||
IN SPF "v=spf1 ip4:5.39.76.46 a -all" |
||||
|
||||
; Main A/AAAA records |
||||
IN A 5.39.76.46 |
||||
ns IN A 5.39.76.46 |
||||
|
||||
; Aliases |
||||
data IN CNAME wxcafe.net. |
||||
; [...] |
||||
www IN CNAME wxcafe.net. |
||||
|
||||
|
||||
; home.wxcafe.net. definition |
||||
$ORIGIN home.wxcafe.net. |
||||
@ IN NS ns.home.wxcafe.net. |
||||
IN NS ns.wxcafe.net. |
||||
ns IN A 80.67.177.103 |
||||
IN A 80.67.177.103 |
||||
|
||||
|
||||
|
||||
Alors. Expliquons ligne par ligne. |
||||
Tout d'abord, le TTL (time to live) est un paramètre définissant le temps |
||||
pendant lequel les serveurs récursif (qui font un cache des données) doivent |
||||
cacher ce fichier de zone. |
||||
Le @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc, |
||||
wxcafe.net. |
||||
Maintenant, nous arrivons a un record important : SOA (Start of Authority). |
||||
Ce record prend de nombreux arguments, dans l'ordre : |
||||
- Le nameserver autoritaire pour le nom de domaine en question, |
||||
- L'adresse email du responsable de cette zone, avec le premier point |
||||
remplacé par un @, |
||||
|
||||
puis entre parenthèses : |
||||
- Le numéro de série ("version" du fichier de zone, ici au format |
||||
YYYYMMDDNN) |
||||
- La période de refresh, période entre chaque mise a jour du nameserver |
||||
authoritaire secondaire, |
||||
- La période de retry, le temps entre chaque essai de mise a jour si le |
||||
nameserveur authoritaire primaire est indisponible, |
||||
- La période d'expire, le temps qu'attendra le serveur autoritaire |
||||
secondaire avant de supprimer les informations de son cache si le primaire |
||||
reste indisponible, et enfin |
||||
- La période de TTL négatif, le temps qu'attendra le serveur secondaire |
||||
avant de ne plus offrir les informations de cette zone si le serveur |
||||
primaire est injoignable. |
||||
|
||||
Bon, tout ceci est peut-être un peu confus, mais ce n'est pas le record le plus |
||||
important a lire (pour les humains en tout cas). Continuons : |
||||
|
||||
NS (nameserver) permet de désigner les différents nameservers faisant autorité |
||||
pour ce domaine. |
||||
|
||||
MX permet d'indiquer ou il convient d'envoyer les emails pour ce domaine. |
||||
SPF est un record d'authentification pour les emails. |
||||
Les records A désignent l'association entre un nom de domaine et une adresse |
||||
IPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site |
||||
n'est pas encore en IPv6. |
||||
|
||||
Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de |
||||
mettre en place des domaines exactement semblables a d'autre (ce qui permet par |
||||
exemple de filtrer ensuite avec les Virtual Hosts d'Apache, pour le web) |
||||
|
||||
Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet |
||||
de changer la valeur du @ et des noms de domaine non complets (qui ne se |
||||
terminent pas avec un .). Ainsi, la partie suivant définit les nameservers et |
||||
l'adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on |
||||
l'a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS, |
||||
cela permet de rediriger les requêtes nous parvenant et demandant un domaine se |
||||
trouvant sous home.wxcafe.net. |
||||
|
||||
Les autres fichiers de zone sont sensiblement similaires, avec les quelques |
||||
différences n'étant en fin de compte que des différences de valeurs (dues au |
||||
fait que, eh bah, c'est pas les mêmes domaines...). |
||||
|
||||
Voila donc une courte explication de ce qu'est le DNS. Bien entendu, tout n'est |
||||
pas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de |
||||
wxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez |
||||
aller vous renseigner directement a la source : le [RFC |
||||
1034](https://www.ietf.org/rfc/rfc1034.txt) et le |
||||
[RFC 1035](https://www.ietf.org/rfc/rfc1035.txt). Dans un autre style (bien plus |
||||
avancé) le blog de [Stéphane Bortzmeyer](http://bortzmeyer.org) est interessant |
||||
aussi. |
||||
|
@ -0,0 +1,84 @@ |
||||
Title: GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère |
||||
Date: 2012-08-22 20:33 |
||||
Author: Wxcafe |
||||
Category: Teaching |
||||
Slug: gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere |
||||
|
||||
GNU/Linux est un vaste et extraordinaire territoire technologique, mais |
||||
je ne vais pas m'attarder ici sur les aspects profondément techniques de |
||||
ce territoire pour faire plutôt une sorte d'introduction a ce qu'est |
||||
vraiment GNU/Linux, pour les gens n'ayant aucune ou très peu de |
||||
connaissances en informatique. |
||||
|
||||
GNU/Linux, que j’abrégerai ici en Linux pour plus de simplicité, est un |
||||
Système d'Exploitation. Un système d'exploitation est, pour simplifier, |
||||
un ensemble d'outils informatiques qui vous permettent d'utiliser votre |
||||
ordinateur, ainsi, Windows est un système d'exploitation. L'abréviation |
||||
de système d'exploitation (Operating System en anglais) est OS. Les 4 |
||||
principaux OS existants aujourd'hui sont Windows, Mac OS, GNU/Linux, et |
||||
Solaris. Les trois derniers sont issus d'un autre système, plus ancien, |
||||
nommé UNIX. |
||||
|
||||
De ce fait, on pourrait penser que Linux remplace complètement Windows |
||||
une fois installé, et comprend une interface graphique, et toutes sortes |
||||
d'utilitaires permettant a l'utilisateur d'utiliser le système (sous |
||||
Windows, pensez a l'explorateur de fichiers, ou a Internet Explorer. |
||||
Pour l'interface graphique, pensez a... Pensez que votre système affiche |
||||
autre chose que des lignes de commande.) Or non, une fois installé, |
||||
Linux en lui même ne vous afficherait aucune interface graphique, et |
||||
s'il est effectivement livré avec des utilitaires, ils ne sont que des |
||||
programmes en ligne de commande. Autant les utilisateurs avancés sauront |
||||
s'en servir, et pourront argumenter que c'est plus efficace ou plus |
||||
rapide, autant les utilisateurs basiques préfèrent une interface |
||||
graphique. Alors comment en obtenir une? |
||||
|
||||
Ici, il convient de faire une précision importante. Si il n'existe |
||||
qu'une seule version de Windows, ou de Mac OS, il existe en fait |
||||
plusieurs centaines de "versions" différentes de Linux. Appelées |
||||
distributions, ces dernière sont développées par des groupes |
||||
complètement séparés, et se basent sur le fait que Linux soit |
||||
entièrement placé sous licence libre (ce qui leur permet de l'utiliser a |
||||
leur guise, a condition que leur travail soit lui aussi placé sous |
||||
licence libre). De ce fait, de nombreuses distributions existent et se |
||||
développent en parallèle. On peut ainsi citer [Debian][], qui est l'une |
||||
des distributions les plus importantes, ou encore [Ubuntu][], qui est |
||||
l'une des plus connues et des plus simples a utiliser. |
||||
|
||||
Ainsi, ces distributions intègrent une interface graphique. Cependant, |
||||
grâce a la liberté dont bénéficient les développeurs sous Linux, il |
||||
existe de nombreuses interfaces graphiques différentes : [Unity][], la |
||||
nouvelle interface d'Ubuntu; [GNOME][] , une interface qui vise a la |
||||
simplicité; ou encore [KDE][], une interface utilisateur ressemblant a |
||||
Windows 7. |
||||
|
||||
Ainsi, le choix astronomique de distributions Linux a bien un sens : |
||||
chacune d'entre elle intègre des outils différents. Par exemple, Debian |
||||
intègre GNOME 2, qui est l'ancienne version de GNOME, ce qui la rend |
||||
particulièrement stable. Ubuntu intègre Unity, ce qui en fait une |
||||
distribution particulièrement intuitive. Linux Mint intègre Cinnamon, |
||||
qui est une version dérivée de GNOME 3, ce qui permet encore une autre |
||||
expérience. Et Arch Linux n'intègre pas d'interface graphique du tout, |
||||
ce qui permet a l'utilisateur de choisir entre les multiples interfaces |
||||
existantes. |
||||
|
||||
Ce qu'il est important de retenir de cela, c'est que Linux est un OS |
||||
complètement libre, ce qui signifie que n'importe qui peut modifier et |
||||
utiliser tout le code de Linux gratuitement et comme il l'entend. Ainsi, |
||||
Linux est un OS qui est véritablement créé par des passionnés, pour tous |
||||
et toutes. Surtout, il convient de retenir que Linux n'est pas compliqué |
||||
a utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus. |
||||
Cependant, Linux donne la possibilité a l'utilisateur de le rendre |
||||
affreusement complexe, mais aussi de le rendre adapté a ses besoins, |
||||
quels que soient ceux ci. Et c'est la que réside l'incroyable puissance |
||||
de ce Système d'Exploitation. Il est extraordinairement adaptable. |
||||
|
||||
N'hésitez donc pas a le présenter a vos proches, même s'ils ne sont pas |
||||
technophiles. Ils pourraient adorer, et peut être même le devenir :) |
||||
|
||||
A bientôt! |
||||
|
||||
[Debian]: http://debian.org |
||||
[Ubuntu]: http://ubuntu.com |
||||
[Unity]: unity.ubuntu.com |
||||
[GNOME]: gnome.org |
||||
[KDE]: http://kde.org/ |
@ -0,0 +1,158 @@ |
||||
Title: Introduction a bash en tant que language de programmation. |
||||
Date: 2012-09-08 18:15 |
||||
Author: Wxcafe |
||||
Category: Programmation |
||||
Slug: introduction-a-bash-en-tant-que-language-de-programmation |
||||
|
||||
L’interpréteur de commandes bash (Bourne Again SHell) |
||||
est possiblement le shell le plus connu, notamment grâce a son |
||||
intégration en tant que shell par défaut dans les distributions Linux |
||||
les plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva - |
||||
Mageia, etc...). |
||||
|
||||
Cependant, il n'est souvent connu qu'en tant qu’interpréteur de |
||||
commande. Alors qu'en réalité, le bash est un langage de programmation |
||||
(presque) complet! Ainsi, il intègre les structures de contrôle |
||||
habituelles ( pour mémoire, les structures de contrôle comprennent les |
||||
conditions (les ifs), les boucles (les while), et les choix (les case), |
||||
entre autres.), et est donc ce que l'on pourrait appeler un langage de |
||||
script, interprété, de la même façon que python, a la difference près |
||||
qu'il contient un prompt (un système d'entrée de commande interactif) |
||||
bien plus complet et développé que python. |
||||
|
||||
Cependant, les programmes en bash ne sont executables que dans un |
||||
environnement de type UNIX, et donc pas sous Windows (cygwin |
||||
(cygwin.com) propose ceci dit un système permettant d'utiliser bash sous |
||||
windows. Il faut malgré tout convenir que cet environnement est bien |
||||
plus compliqué a manipuler, et globalement ne permet pas d'acceder a des |
||||
portages de qualité satisfaisante.) |
||||
|
||||
Ainsi, il est possible de créer des fichiers .sh, contenant des |
||||
instructions bash mises a la suite (de la même façon qu'un script BATCH |
||||
Windows .bat), et faisant appel autant aux commandes internes de bash, |
||||
aussi bien que les commandes externes mises en place par les programmes |
||||
installés sur le système, exactement comme dans une invite de commande. |
||||
Ainsi, pour appeller firefox, la commande 'firefox' lancera le petit |
||||
panda roux directement dans la boite magique, tandis qu'un if |
||||
[condition] suivi d'un then (quelque chose) lancera le fameux quelque |
||||
chose suscité si la condition est vérifiée. Un peu comme en C, quoi. |
||||
|
||||
De cette façon, et avec quelques informations et connaissances, il est |
||||
facile de comprendre le fonctionnement de la programmation en bash. |
||||
Quelques exemples commentés: |
||||
|
||||
#!/bin/bash |
||||
# La ligne du dessus est très importante, c'est elle qui dit a bash quel doit être |
||||
# l'interpreteur des commandes écrites dans ce script. Ici, on dit a bash d'interpréter |
||||
# lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire |
||||
# executer du python, par exemple, en mettant #!/usr/bin/python a la place. |
||||
echo "this is a test of bash as a simple script manager" # echo est une commande d'affichage de message. |
||||
echo "what's your name, user?" |
||||
read your_name # la commande read permet de demander a l'utilisateur de donner une |
||||
# information, stockée dans la variable en paramètre. |
||||
echo $your_name "is your name" # echo permet aussi d'afficher la valeur de variables. |
||||
# Ici, on renvoie la variable remplie précédemment, suivie d'un message. |
||||
exit # cet appel a exit n'est pas obligatoire, mais donne un aspect plus |
||||
# propre au code. Il ne quittera pas la session de terminal, cependant. |
||||
|
||||
Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite |
||||
d'être clair quand aux capacités et a la simplicité du bash en tant que |
||||
language de programmation. Alors en effet, nous n'avons ici absolument |
||||
pas utilisé les capacités de bash en lui même, et n'avons fait que le |
||||
renvoyer a des programmes externes (sauf read, il est vrai). Voyons |
||||
maintenant la syntaxe de bash quand il s'agit d'utiliser les structures |
||||
de contrôle: |
||||
|
||||
#!/bin/bash |
||||
echo "welcome to this second bash program. would you please kindly enter the name of the machine you're running this on?" |
||||
read host_name |
||||
if [ $host_name == $HOSTNAME ] ## voici la syntaxe du if. Attention a bien penser a mettre les espaces avant la première variable, et après la seconde. La variable $HOSTNAME ici utilisée est une variable présente par défaut sur le système. |
||||
then echo "you told the truth!" |
||||
fi ## le fi est la commande fermant le if, tout comme le EndIf en basic. C'est un peu vieillot, mais important en bash. |
||||
if [ $host_name != $HOSTNAME ] ## l'opérateur != est l'inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. |
||||
then echo "you lied!" |
||||
fi |
||||
exit |
||||
|
||||
Voila un petit programme permettant d'apprendre la syntaxe du if en |
||||
bash. comme vous pouvez le voir, le language est plutôt lite, et la |
||||
structure if n'est pas très difficile a prendre en main. |
||||
|
||||
Passons maintenant au while: |
||||
|
||||
#!/bin/bash |
||||
echo "what is your name?" |
||||
read name |
||||
while [ 1 < 10 ] ## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash. |
||||
do echo "i love" $name |
||||
done |
||||
exit |
||||
|
||||
Ce petit programme permet d'observer les bases de while (qui est la |
||||
boucle de base en bash). |
||||
|
||||
Le troisième opérateur de bash est case. Voyons: |
||||
|
||||
#!/bin/bash |
||||
echo "please enter a number between one and five" |
||||
read number |
||||
case $number in |
||||
1) |
||||
echo "the choosen number was one" |
||||
;; |
||||
2) |
||||
echo "the choosen number was two" |
||||
;; |
||||
3) |
||||
echo "the choosen number was three" |
||||
;; |
||||
4) |
||||
echo "the choosen number was four" |
||||
;; |
||||
5) |
||||
echo "the choosen number was five" |
||||
;; |
||||
*) |
||||
echo "this number is not correct" |
||||
;; |
||||
esac |
||||
exit |
||||
|
||||
case est un opérateur plus complexe a utiliser a bon escient, et sert a |
||||
faire des ifs multiples sans avoir a taper des dizaines de lignes de |
||||
code. |
||||
(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre |
||||
que le code vérifie chacune des conditions : le 1) est validé si la |
||||
valeur de \$number est 1, le 2) est validé si cette valeur est 2, etc.. |
||||
le \*) désigne toutes les valeurs, et est donc validé si aucune autre |
||||
valeur n'a précédemment acceptée. |
||||
|
||||
Quelques notions manquent ici: |
||||
- les nombres aléatoires sont générés par un appel a la variable |
||||
\$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a |
||||
16 bits donc). il est possible de faire des invocations a des nombres |
||||
aléatoires plus grands, mais les méthodes permettant de faire cela sont |
||||
plus complexes, et je ne les aborderai donc pas ici. |
||||
- comme vous avez pu le constater, les variables sont désignées en tant |
||||
que telles par l'utilisation d'un symbole \$ au début de leur nom. |
||||
Ainsi, echo number renverra "number", tandis que echo \$number renverra |
||||
le résultat de la variable \$number. |
||||
être utilisées dans un programme bash. |
||||
- comme vous avez pu le constater, les commandes doivent tenir en |
||||
théorie en une ligne. Cependant, le caractère \\ permet de retourner a |
||||
la ligne en faisant considérer a bash qu'il s'agit de la même ligne. |
||||
|
||||
Globalement, il faut admettre que bash n'a pas vocation a être un |
||||
langage de programmation extrêmement développé. Sans framework |
||||
graphique, avec peu de manières d'utiliser de grandes variables, ou |
||||
encore une gestion de la mémoire risible, bash n'a rien d'un langage de |
||||
développement professionnel. |
||||
Cependant, le simple fait qu'il soit considéré comme un langage de |
||||
programmation a part entière font de lui un langage de script d'une |
||||
puissance incontestable, et sa simplicité et sa grande popularité font |
||||
de lui un langage de choix pour apprendre la programmation simplement et |
||||
sans trop se prendre la tête. |
||||
|
||||
J'espère que cet article aura été utile a certain-e-s, et je vous |
||||
souhaite bonne chance dans votre découverte de la programmation (n'allez |
||||
pas voir ceux qui font de l'orienté objet, c'est des méchants :3) |
@ -0,0 +1,75 @@ |
||||
Title: La programmation expliquée simplement |
||||
Date: 2012-08-27 00:22 |
||||
Author: Wxcafe |
||||
Category: Teaching |
||||
Slug: la-programmation-expliquee-simplement |
||||
|
||||
Salut! |
||||
Tout d'abord, je tiens a m'excuser de ne pas avoir eu le temps d'écrire |
||||
récement, mais j'ai eu la chance d'avoir un PC a monter, donc j'ai passé |
||||
pas mal de temps assez occupé. |
||||
|
||||
Enfin, après un certain temps a farfouiller au millieu des connecteurs |
||||
SATA et a apprendre que, oui, l'alimentation sert aussi pour les disques |
||||
durs, je suis de retour pour un court article. |
||||
Du coup, je m'étais dit que j'allais reprendre sur le thème de |
||||
l'informatique expliquée au grand public, en tentant d'aller un peu plus |
||||
loin que la dernière fois sur le thème de la programmation |
||||
Ce qu'il faut comprendre, c'est la facon dont fonctionne un ordinateur. |
||||
Si a peu près tout le monde sait que "les ordinateurs, ils ne |
||||
comprennent que les 1 et les 0!", peu de gens savent comment cela |
||||
fonctionne en détail. |
||||
|
||||
Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà |
||||
des notions de base en informatique. Ainsi, vous savez surement que les |
||||
ordinateurs fonctionnent avec des programmes, qui sont composés de |
||||
code. |
||||
Ainsi, il faut comprendre que le code (source) est "compilé" en un |
||||
fichier "binaire". Un fichier binaire est un fichier comprenant les |
||||
instructions telles qu’exécutées par le processeur, et donc absolument |
||||
illisible pour un humain. |
||||
|
||||
La compilation est le processus qui transforme le code source en |
||||
binaire executable. Les binaires ont, sous Windows, l'extension .exe, |
||||
tandis que sous les systèmes UNIX-like, ils n'ont pas d'extension |
||||
particulière. |
||||
Ceci étant dit, il faut comprendre que certains langages sont plus |
||||
proches que d'autres du langage processeur, les langages les plus |
||||
proches sont dits de "bas niveau". Les langages les plus éloignés sont |
||||
donc dits de haut niveau. |
||||
|
||||
Par exemple, l'assembleur est l'un des languages de plus bas niveau, |
||||
tandis que python par exemple est un langage de plus haut niveau. Les |
||||
langages de haut niveau sont souvent bien plus simples a comprendre et a |
||||
apprendre que les langages de bas niveau |
||||
|
||||
Ainsi, en C, un langage de niveau relativement bas, pour afficher |
||||
"hello world" sur l'écran, le code nécessaire est : |
||||
|
||||
#include |
||||
void main() { |
||||
printf("hello world"); |
||||
return 0; |
||||
} |
||||
|
||||
le même programme en python s'écrit : |
||||
|
||||
print "hello world" |
||||
|
||||
et n'a pas besoin d'être compilé , puisqu'il peut être intepreté |
||||
directement. |
||||
|
||||
Python utilise en effet un système similaire a Java en ayant un |
||||
interpréteur dit "runtime" ou "temps réel", qui interprète le programme |
||||
sans le compiler. Java utilise un système légèrement différent, puisque |
||||
le code a besoin d'être compilé, mais est interpreté par un interpréteur |
||||
et non par le processeur. |
||||
|
||||
Cette méthode permet le fameux "code once, run everywhere", ce qui |
||||
signifie que le même code est exécutable sur quasiment tous les systèmes |
||||
d'exploitation (en fait, tous ceux sur lesquels l’interpréteur est |
||||
disponible.) |
||||
|
||||
Voila, je vous laisse sur le fonctionnement de Java et de Python, et je |
||||
vais me coucher. |
||||
A bientôt! |
@ -0,0 +1,108 @@ |
||||
Title: La séparation des églises et de l'état, une idée qu'elle est bonne? |
||||
Date: 2012-12-13 03:08 |
||||
Author: Wxcafe |
||||
Category: Ranting |
||||
Slug: la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne |
||||
|
||||
Aujourd'hui, et depuis 1901 (j'ai révisé mon histoire récemment), il |
||||
existe une loi dite de séparation des églises et de l'état, qui consiste |
||||
a faire en sorte que l'état n'ait rien a voir avec les differentes |
||||
églises, pour de sombres histoires d'indépendance et de laïcité. |
||||
(principes qui sont aujourd'hui en voie de disparition, mais ce n'est |
||||
pas le propos qui nous occupe ici). Cela dit, cette bonne idée |
||||
politique, si elle a évité a ses auteurs de nombreux tracas, et leur a |
||||
surement permis de conserver une tête en état de fonctionnement bien |
||||
reliée a leur colonne vertébrale, ne vous interesse que moyennement, et |
||||
vous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer |
||||
(quel mot horrible...) sur twitter? |
||||
|
||||
Ça tombe bien, vous abordez justement le sujet véritable de cet article |
||||
(non, mon blog n'est pas devenu un histoblog, désolé aux déçus...), a savoir |
||||
la centralisation qui se met progressivement en place sur internet depuis |
||||
quelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces |
||||
acteurs du web (et pas que, pour certains...) ont commencé a prendre |
||||
pour manie de centraliser vos données : pour prendre un exemple simple, |
||||
si vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails |
||||
pour accorder la publicité, dites adieu a votre vie privée), vous avez |
||||
un compte Google Talk, probablement aussi un Google+. |
||||
|
||||
L'outil le plus pratique aujourd'hui pour aggreger des flux RSS est |
||||
Google Reader, et vous l'utilisez aussi probablement. Votre téléphone |
||||
est un android? Ah, un Nexus? Vous avez donc toutes les applications |
||||
google installées, et Chrome mobile comme navigateur par défaut, qui est |
||||
synchronisé avec la version qui tourne sur votre PC (via les serveurs de |
||||
Google, bien sur). |
||||
Depuis peu, les recherches sur le moteur de recherche |
||||
sont elles aussi ajoutées a votre profil, enregistrées a jamais par |
||||
Google (qui n'est pas touchée, en tant que société américaine, par la |
||||
"loi des 10 ans" francaise.). Vous commencez a voir le truc? Non, ne |
||||
jetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone |
||||