From 7dfdecec73c1ad6e9f37815c6920f1d07150784f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wxcaf=C3=A9=20=28Cl=C3=A9ment=20Hertling=29?= Date: Thu, 3 Sep 2015 20:14:09 +0200 Subject: [PATCH] fixes git merge shit --- Gemfile | 6 - Gemfile.lock | 57 - Guardfile | 34 - cache/ArticlesGenerator-Readers | Bin 86769 -> 88435 bytes cache/PagesGenerator-Readers | Bin 3925 -> 3925 bytes content/archlinux-made-simple.md | 262 ---- content/debuts-presentation-etc.md | 36 - ...iles-ou-los-libre-pour-votre-grand-mere.md | 84 -- ...h-en-tant-que-language-de-programmation.md | 158 -- ...raphie-avec-pgp-et-principalement-gnupg.md | 177 --- .../la-programmation-expliquee-simplement.md | 75 - ...s-et-de-letat-une-idee-quelle-est-bonne.md | 108 -- content/le-quenya-episode-o.md | 44 - ...entes-couches-dun-systeme-dexploitation.md | 94 -- content/les-systemes-de-fichiers.md | 123 -- content/linformatique-a-lecole.md | 81 -- content/update-a-propos-du-blog.md | 34 - output/author/wxcafe3.html | 1271 ----------------- output/category/language/index.html | 244 ---- output/category/notes/index.html | 567 -------- output/category/programmation/index.html | 412 ------ output/category/teaching/index.html | 646 --------- output/category/tutorial/index.html | 582 -------- output/feeds/feed.language.xml | 30 - output/feeds/feed.notes.xml | 265 ---- output/feeds/feed.programmation.xml | 198 --- output/feeds/feed.rss.language.xml | 30 - output/feeds/feed.rss.notes.xml | 265 ---- output/feeds/feed.rss.programmation.xml | 198 --- output/feeds/feed.rss.teaching.xml | 344 ----- output/feeds/feed.rss.tutorial.xml | 368 ----- output/feeds/feed.teaching.xml | 344 ----- output/feeds/feed.tutorial.xml | 368 ----- output/index3.html | 1271 ----------------- output/posts/archlinux-made-simple/index.html | 508 ------- .../posts/debuts-presentation-etc/index.html | 246 ---- .../index.html | 285 ---- .../index.html | 418 ------ .../index.html | 383 ----- .../index.html | 284 ---- .../index.html | 313 ---- output/posts/le-quenya-episode-o/index.html | 250 ---- .../index.html | 292 ---- .../posts/les-systemes-de-fichiers/index.html | 336 ----- .../posts/linformatique-a-lecole/index.html | 286 ---- .../posts/update-a-propos-du-blog/index.html | 247 ---- pelicanconf.py | 14 - pelicanconf.pyc | Bin 2190 -> 2190 bytes themes/bootstrap2/templates/base.html | 3 - 49 files changed, 12641 deletions(-) delete mode 100644 Gemfile delete mode 100644 Gemfile.lock delete mode 100644 Guardfile delete mode 100644 content/archlinux-made-simple.md delete mode 100644 content/debuts-presentation-etc.md delete mode 100644 content/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere.md delete mode 100644 content/introduction-a-bash-en-tant-que-language-de-programmation.md delete mode 100644 content/la-cryptographie-avec-pgp-et-principalement-gnupg.md delete mode 100644 content/la-programmation-expliquee-simplement.md delete mode 100644 content/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne.md delete mode 100644 content/le-quenya-episode-o.md delete mode 100644 content/les-differentes-couches-dun-systeme-dexploitation.md delete mode 100644 content/les-systemes-de-fichiers.md delete mode 100644 content/linformatique-a-lecole.md delete mode 100644 content/update-a-propos-du-blog.md delete mode 100644 output/author/wxcafe3.html delete mode 100644 output/category/language/index.html delete mode 100644 output/category/notes/index.html delete mode 100644 output/category/programmation/index.html delete mode 100644 output/category/teaching/index.html delete mode 100644 output/category/tutorial/index.html delete mode 100644 output/feeds/feed.language.xml delete mode 100644 output/feeds/feed.notes.xml delete mode 100644 output/feeds/feed.programmation.xml delete mode 100644 output/feeds/feed.rss.language.xml delete mode 100644 output/feeds/feed.rss.notes.xml delete mode 100644 output/feeds/feed.rss.programmation.xml delete mode 100644 output/feeds/feed.rss.teaching.xml delete mode 100644 output/feeds/feed.rss.tutorial.xml delete mode 100644 output/feeds/feed.teaching.xml delete mode 100644 output/feeds/feed.tutorial.xml delete mode 100644 output/index3.html delete mode 100644 output/posts/archlinux-made-simple/index.html delete mode 100644 output/posts/debuts-presentation-etc/index.html delete mode 100644 output/posts/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/index.html delete mode 100644 output/posts/introduction-a-bash-en-tant-que-language-de-programmation/index.html delete mode 100644 output/posts/la-cryptographie-avec-pgp-et-principalement-gnupg/index.html delete mode 100644 output/posts/la-programmation-expliquee-simplement/index.html delete mode 100644 output/posts/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/index.html delete mode 100644 output/posts/le-quenya-episode-o/index.html delete mode 100644 output/posts/les-differentes-couches-dun-systeme-dexploitation/index.html delete mode 100644 output/posts/les-systemes-de-fichiers/index.html delete mode 100644 output/posts/linformatique-a-lecole/index.html delete mode 100644 output/posts/update-a-propos-du-blog/index.html diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 6e3bf7e..0000000 --- a/Gemfile +++ /dev/null @@ -1,6 +0,0 @@ -# A sample Gemfile -source "https://rubygems.org" -gem 'guard' -gem 'guard-livereload' - -# gem "rails" diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 92b52bc..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,57 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - celluloid (0.16.0) - timers (~> 4.0.0) - coderay (1.1.0) - em-websocket (0.5.1) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0.6.0) - eventmachine (1.0.4) - ffi (1.9.6) - formatador (0.2.5) - guard (2.11.1) - formatador (>= 0.2.4) - listen (~> 2.7) - lumberjack (~> 1.0) - nenv (~> 0.1) - notiffany (~> 0.0) - pry (>= 0.9.12) - shellany (~> 0.0) - thor (>= 0.18.1) - guard-livereload (2.4.0) - em-websocket (~> 0.5) - guard (~> 2.8) - multi_json (~> 1.8) - hitimes (1.2.2) - http_parser.rb (0.6.0) - listen (2.8.5) - celluloid (>= 0.15.2) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) - lumberjack (1.0.9) - method_source (0.8.2) - multi_json (1.10.1) - nenv (0.2.0) - notiffany (0.0.3) - nenv (~> 0.1) - shellany (~> 0.0) - pry (0.10.1) - coderay (~> 1.1.0) - method_source (~> 0.8.1) - slop (~> 3.4) - rb-fsevent (0.9.4) - rb-inotify (0.9.5) - ffi (>= 0.5.0) - shellany (0.0.1) - slop (3.6.0) - thor (0.19.1) - timers (4.0.1) - hitimes - -PLATFORMS - ruby - -DEPENDENCIES - guard - guard-livereload diff --git a/Guardfile b/Guardfile deleted file mode 100644 index 8c3922c..0000000 --- a/Guardfile +++ /dev/null @@ -1,34 +0,0 @@ -# A sample Guardfile -# More info at https://github.com/guard/guard#readme - -## Uncomment and set this to only include directories you want to watch -# directories %w(app lib config test spec feature) - -## Uncomment to clear the screen before every task -# clearing :on - -## Guard internally checks for changes in the Guardfile and exits. -## If you want Guard to automatically start up again, run guard in a -## shell loop, e.g.: -## -## $ while bundle exec guard; do echo "Restarting Guard..."; done -## -## Note: if you are using the `directories` clause above and you are not -## watching the project directory ('.'), the you will want to move the Guardfile -## to a watched dir and symlink it back, e.g. -# -# $ mkdir config -# $ mv Guardfile config/ -# $ ln -s config/Guardfile . -# -# and, you'll have to watch "config/Guardfile" instead of "Guardfile" - -guard 'livereload' do - watch(%r{app/views/.+\.(erb|haml|slim)$}) - watch(%r{app/helpers/.+\.rb}) - watch(%r{public/.+\.(css|js|html)}) - watch(%r{config/locales/.+\.yml}) - watch(%r{.+\.(css|js|html)}) - # Rails Assets Pipeline - watch(%r{(app|vendor)(/assets/\w+/(.+\.(css|js|html|png|jpg))).*}) { |m| "/assets/#{m[3]}" } -end diff --git a/cache/ArticlesGenerator-Readers b/cache/ArticlesGenerator-Readers index 043846e15851f4fde6432d38eee3485f0ccb6093..8098ff3e12de640a6d71af789bb2490640213630 100644 GIT binary patch literal 88435 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 *%gRQ21rf+pBgDP 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 d{5%^bexCJeOXYCl=NUZe6AqS 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


2d5WpocrsQ1YrN%6nvvX!XcO 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 z⩔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 diff --git a/cache/PagesGenerator-Readers b/cache/PagesGenerator-Readers index 5adb2c96b8e07c71514dae9a0cf12146b1cdd8e5..9d92b71098bc079ee312257f17187fb02bd9ec9a 100644 GIT binary patch delta 15 WcmcaAcU6u}zMF$%OYcTDe|`WfwgmkE delta 15 WcmcaAcU6u}zMF$Xv}+@qKR*B`?F3r@ diff --git a/content/archlinux-made-simple.md b/content/archlinux-made-simple.md deleted file mode 100644 index 183038f..0000000 --- a/content/archlinux-made-simple.md +++ /dev/null @@ -1,262 +0,0 @@ -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/ diff --git a/content/debuts-presentation-etc.md b/content/debuts-presentation-etc.md deleted file mode 100644 index adce6b8..0000000 --- a/content/debuts-presentation-etc.md +++ /dev/null @@ -1,36 +0,0 @@ -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! diff --git a/content/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere.md b/content/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere.md deleted file mode 100644 index 6842759..0000000 --- a/content/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere.md +++ /dev/null @@ -1,84 +0,0 @@ -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/ diff --git a/content/introduction-a-bash-en-tant-que-language-de-programmation.md b/content/introduction-a-bash-en-tant-que-language-de-programmation.md deleted file mode 100644 index 17981af..0000000 --- a/content/introduction-a-bash-en-tant-que-language-de-programmation.md +++ /dev/null @@ -1,158 +0,0 @@ -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) diff --git a/content/la-cryptographie-avec-pgp-et-principalement-gnupg.md b/content/la-cryptographie-avec-pgp-et-principalement-gnupg.md deleted file mode 100644 index d93b36a..0000000 --- a/content/la-cryptographie-avec-pgp-et-principalement-gnupg.md +++ /dev/null @@ -1,177 +0,0 @@ -Title: La cryptographie avec PGP et principalement GnuPG -Date: 2012-11-19 00:36 -Author: Wxcafe -Category: Tutoriel -Slug: la-cryptographie-avec-pgp-et-principalement-gnupg - -PGP (pour [pretty good privacy][]) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir [ici][]) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de *Web of Trust*. - -Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser. -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées. - -Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -[quitter Gmail][] aussi, par exemple). - -Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante) - -L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG ([GNU Privacy Guard][]) , qui comme son nom l'indique fait -partie du projet GNU, et qui (`` de façon surprenante pour un -programme GNU``) est extrêmement efficace et claire. - -Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs). - -Tout d'abord, générons une clé GPG : - - gpg --gen-key - -GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an. - -Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande `makepasswd`, qui génère automatiquement un mot de -passe) - -GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard) - -Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande: - - gpg --armor --export --output=pubkey.gpg - -pour la clé publique, et - - gpg --armor --export-secret-keys --output=seckey.gpg - -pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC. - -Cela fait, listons les informations sur votre clé publique : - - $ gpg --list-keys --fingerprint - pub 4096R/27D81AC8 2012-11-17 - Key fingerprint = 6345 A91A FF89 97E0 13D0 96A9 9E2A 1917 27D8 1AC8 - uid Clément Hertling (Wxcafe) - uid [jpeg image of size 14692] - sub 4096R/9ED7F77F 2012-11-17 - -La partie `pub` indique que c'est une clé publique, `4096R` indique que c'est -une clé RSA sur 4096 bits. La partie `27D81AC8` est -l'identifiant de la clé publique, `Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8` est appelé fingerprint de la clé. Les champs -`uid` sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ `sub` est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp. -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu. - - gpg --keyserver pgp.mit.edu --send-keys *ID de la clé a uploader* - -Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails! -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file). - -Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi. -Concernant les signatures de clés, elles fonctionnent de manière très -simple : -Vous devez télécharger la clé de votre correspondant, via un - - gpg --keyserver pgp.mit.edu --search-keys *ID de la clé de votre correspondant* - -(a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien. -Ceci fait, vous pouvez signer la clé via un - - gpg --sign *ID de la clé a signer* - -puis la renvoyer au serveur via - - gpg --keyserver pgp.mit.edu --send-key *ID de la clé a signer* - -Voila, la clé de votre correspondant est signée! - -Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie! - - [pretty good privacy]: http://fr.wikipedia.org/wiki/Pretty_Good_Privacy - [ici]: http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique - [quitter Gmail]: http://www.hauteresolution.net/pourquoi-je-vais-quitter-gmail/ - [GNU Privacy Guard]: http://fr.wikipedia.org/wiki/GNU_Privacy_Guard diff --git a/content/la-programmation-expliquee-simplement.md b/content/la-programmation-expliquee-simplement.md deleted file mode 100644 index 5342b12..0000000 --- a/content/la-programmation-expliquee-simplement.md +++ /dev/null @@ -1,75 +0,0 @@ -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! diff --git a/content/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne.md b/content/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne.md deleted file mode 100644 index 976d720..0000000 --- a/content/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne.md +++ /dev/null @@ -1,108 +0,0 @@ -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 -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive. - -Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine **doit**fournir toutes ses -informations au gouvernement américain **sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.** - -Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire [cet article][] de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps. - -Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, ``Apple -Maps``, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé. - -De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières. - -Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur. - -Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi. -Voila, a bientôt! - - [cet article]: http://www.internetactu.net/2009/03/12/la-vie-privee-un-probleme-de-vieux-cons/ diff --git a/content/le-quenya-episode-o.md b/content/le-quenya-episode-o.md deleted file mode 100644 index e854971..0000000 --- a/content/le-quenya-episode-o.md +++ /dev/null @@ -1,44 +0,0 @@ -Title: Le Quenya - Épisode ø -Date: 2012-09-18 19:07 -Author: Wxcafe -Category: Language -Slug: le-quenya-episode-o - -Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. - -En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. - -Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.) - -J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles [ici][] , une -traduction en français est disponible [la][] en pdf ), et des infos ici -toutes les deux semaines. - -Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver [par ici][]. - -Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya! - - [ici]: http://folk.uib.no/hnohf/qcourse.htm - [la]: http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf - [par ici]: olk.uib.no/hnohf/quenya.htm diff --git a/content/les-differentes-couches-dun-systeme-dexploitation.md b/content/les-differentes-couches-dun-systeme-dexploitation.md deleted file mode 100644 index 235077b..0000000 --- a/content/les-differentes-couches-dun-systeme-dexploitation.md +++ /dev/null @@ -1,94 +0,0 @@ -Title: Les différentes couches d'un système d'exploitation -Date: 2012-09-06 23:29 -Author: Wxcafe -Category: Teaching -Slug: les-differentes-couches-dun-systeme-dexploitation - -Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches. - -Un système d'exploitation (de type UNIX, \enfin un vrai système quoi. -\) incorpore plusieurs systèmes de couches. - -Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. - -Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play") - -Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels" - -Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre - -Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux - -Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés. - -Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés. - -Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au... - -Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique. - -Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant. - -(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.) - -Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...) - -Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2. - -De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus. - -Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels - diff --git a/content/les-systemes-de-fichiers.md b/content/les-systemes-de-fichiers.md deleted file mode 100644 index 7003c88..0000000 --- a/content/les-systemes-de-fichiers.md +++ /dev/null @@ -1,123 +0,0 @@ -Title: Les systèmes de fichiers -Date: 2012-09-25 10:28 -Author: Wxcafe -Category: Teaching -Slug: les-systemes-de-fichiers - -Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32. - -Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers? - -Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -([kibioctet][]), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). - -Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. - -Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente. - -Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence. - -Détaillons maintenant les types de fichiers les plus répandus: - -- FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio. - -- NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition. - -- ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque. - -- Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation. - -- ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.) - -- Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec [LVM][], a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4. - -- HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir - -- ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et \*BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc... - -Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge... - -Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...) - -Bon courage, et bon choix pour votre prochain système. - - [kibioctet]: http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s - [LVM]: http://fr.wikipedia.org/wiki/LVM diff --git a/content/linformatique-a-lecole.md b/content/linformatique-a-lecole.md deleted file mode 100644 index e7bf923..0000000 --- a/content/linformatique-a-lecole.md +++ /dev/null @@ -1,81 +0,0 @@ -Title: L'informatique a l'école -Date: 2012-10-15 20:34 -Author: Wxcafe -Category: Ranting -Slug: linformatique-a-lecole - -Après avoir lu [cet article][] paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège. - -En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu [Hackers - Heroes of the Computer Revolution][] de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela. - -Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre [iWoz][]) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision. - -Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie. - -C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre... - -Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple. - -Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé. - - [cet article]: http://t.co/5PTfe6zu - [Hackers - Heroes of the Computer Revolution]: http://en.wikipedia.org/wiki/Hackers:_Heroes_of_the_Computer_Revolution - [iWoz]: http://en.wikipedia.org/wiki/IWoz diff --git a/content/update-a-propos-du-blog.md b/content/update-a-propos-du-blog.md deleted file mode 100644 index 2d63b13..0000000 --- a/content/update-a-propos-du-blog.md +++ /dev/null @@ -1,34 +0,0 @@ -Title: Update a propos du blog -Date: 2012-09-18 16:57 -Author: Wxcafe -Category: Notes -Slug: update-a-propos-du-blog - -Bonsoir! Un petit post pour faire un peu le point sur ce blog. -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux : - -- Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter ([@Wxcafe][]) - -- Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre. - -A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un \*minimum\* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables. - -Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P - -Ceci dit, je vais bosser un peu sur le prochain article. - -A plus tard! - - [@Wxcafe]: https://twitter.com/wxcafe diff --git a/output/author/wxcafe3.html b/output/author/wxcafe3.html deleted file mode 100644 index 8105624..0000000 --- a/output/author/wxcafe3.html +++ /dev/null @@ -1,1271 +0,0 @@ - - - - - Wxcafé - Wxcafe - - - - - - - - - - - - - - - - - - - - -

- -
-
-
-
-

Archlinux made simple

-
- Date - - Fri 05 October 2012 - -
- By - Wxcafe -
- Category - OSes -
- - - - -
-

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. -
  3. -

    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.

    -
  4. -
-

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~

-
-
-
-

Les systèmes de fichiers

-
- Date - - Tue 25 September 2012 - -
- By - Wxcafe -
- Category - Teaching -
- - - - -
-

Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.

-

Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?

-

Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(kibioctet), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée).

-

Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte.

-

Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.

-

Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.

-

Détaillons maintenant les types de fichiers les plus répandus:

-
    -
  • -

    FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.

    -
  • -
  • -

    NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.

    -
  • -
  • -

    ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.

    -
  • -
  • -

    Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.

    -
  • -
  • -

    ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)

    -
  • -
  • -

    Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec LVM, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.

    -
  • -
  • -

    HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir

    -
  • -
  • -

    ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...

    -
  • -
-

Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...

-

Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)

-

Bon courage, et bon choix pour votre prochain système.

-
-
-
-

Le Quenya - Épisode ø

-
- Date - - Tue 18 September 2012 - -
- By - Wxcafe -
- Category - Language -
- - - - -
-

Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc.

-

En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite.

-

Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)

-

J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles ici , une -traduction en français est disponible la en pdf ), et des infos ici -toutes les deux semaines.

-

Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver par ici.

-

Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!

-
-
-
-

Update a propos du blog

-
- Date - - Tue 18 September 2012 - -
- By - Wxcafe -
- Category - Notes -
- - - - -
-

Bonsoir! Un petit post pour faire un peu le point sur ce blog.
-Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :

-
    -
  • -

    Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (@Wxcafe)

    -
  • -
  • -

    Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.

    -
  • -
-

A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.

-

Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P

-

Ceci dit, je vais bosser un peu sur le prochain article.

-

A plus tard!

-
-
-
-

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:

-
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
#!/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:

-
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
#!/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:

-
1
-2
-3
-4
-5
-6
-7
#!/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:

-
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
#!/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)

-
-
-
-

Les différentes couches d'un système d'exploitation

-
- Date - - Thu 06 September 2012 - -
- By - Wxcafe -
- Category - Teaching -
- - - - -
-

Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.

-

Un système d'exploitation (de type UNIX, \<troll>enfin un vrai système quoi. -\</troll>) incorpore plusieurs systèmes de couches.

-

Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier.

-

Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")

-

Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"

-

Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre

-

Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux

-

Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.

-

Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.

-

Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...

-

Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.

-

Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.

-

(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)

-

Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)

-

Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.

-

De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.

-

Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels

-
-
-
-

La programmation expliquée simplement

-
- Date - - Mon 27 August 2012 - -
- By - Wxcafe -
- Category - Teaching -
- - - - -
-

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!

-
-
-
-

GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère

-
- Date - - Wed 22 August 2012 - -
- By - Wxcafe -
- Category - Teaching -
- - - - -
-

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!

-
-
-
-

Débuts, présentation, etc...

-
- Date - - Sat 18 August 2012 - -
- By - Wxcafe -
- Category - Notes -
- - - - -
-

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!

-
-
- -
- -
-
-
-
- Proudly powered by Pelican, - which takes great advantage of Python.
- Powered by bootstrap2 theme, thanks! -
-
-
- - \ No newline at end of file diff --git a/output/category/language/index.html b/output/category/language/index.html deleted file mode 100644 index 5206d73..0000000 --- a/output/category/language/index.html +++ /dev/null @@ -1,244 +0,0 @@ - - - - - Wxcafé - Language - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-

Le Quenya - Épisode ø

-
- Date - - Tue 18 September 2012 - -
- By - Wxcafe -
- Category - Language -
- - - - -
-

Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc.

-

En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite.

-

Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)

-

J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles ici , une -traduction en français est disponible la en pdf ), et des infos ici -toutes les deux semaines.

-

Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver par ici.

-

Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!

-
-
-
-

Pages

-
  • A propos
  • -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/category/notes/index.html b/output/category/notes/index.html deleted file mode 100644 index 0b57020..0000000 --- a/output/category/notes/index.html +++ /dev/null @@ -1,567 +0,0 @@ - - - - - Wxcafé - Notes - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    SSL ou la sécurité sur l'internet

    -
    - Date - - Fri 30 May 2014 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

    Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie -Marlinspike suivante: More Tricks for Defeating SSL, -présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: -A Critique of Lavabit, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès -a présent dire coucou aux différentes personnes qui écoutent votre connection)

    -

    Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous -connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être -remarqué quelque chose récemment : il se trouve que le certificat qui permet de -desservir ce site a changé.

    -

    Cela fait suite aux évènements évoqués dans le Disclaimer, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", -qui a pris enfin les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système -fonctionnel utilisant cette compréhension récemment acquise.

    -

    Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très -simple : il existait auparavant un certificat pour wxcafe.net, un pour -paste.wxcafe.net, un pour mail.wxcafe.net, etc... Bref, un certificat -différent pour chaque sous-domaine.

    -

    Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs -doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat -pour *.wxcafe.net hier, et il sera dorénavant utilisé pour tous les -sous-domaine de wxcafe.net; et un certificat pour wxcafe.net, qui ne matche -pas *.wxcafe.net, et qui sera donc utilisé... bah pour wxcafe.net.

    -

    Il serait préférable de faire des redirections automatiques des adresses http -vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront -donc pas mises en place.

    -

    De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus -haut, il semble intéressant (et assez important) de faire en sorte que le -serveur utilise en priorité (et si possible, uniquement) des ciphers supportant -PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves -de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les -communications passées.

    -

    Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation :
    -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes -suivantes:

    -
    sudo openssl genrsa -out example.key 4096
    -# nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation
    -sudo openssl req -new -key example.key -out example.csr
    -# OpenSSL va ici vous demander de nombreuses informations, "Common Name" devant contenir le FQDN
    -sudo openssl X509 -req -days 1095 -in example.csr -signkey example.key -out example.crt
    -# enfin, nous générons la clé, d'une durée de vie de 3 ans
    -
    - - -

    Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser -*.example.com comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :

    -

    apache :

    -
    # /etc/apache2/mods_enabled/ssl.conf
    -# [...]
    -SSLProtocol all -SSLv2 -SSLv3
    -SSLHonorCipherOrder on
    -SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    -  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    -  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
    -# [...]
    -# /etc/apache2/sites-enabled/default-ssl
    -# [...]
    -SSLEngine on
    -SSLCertificateFile /etc/certs/example.com.crt
    -SSLCertificateKeyFile /etc/certs/example.com.key
    -# [...]
    -
    - - -

    nginx :

    -
    # /etc/nginx/nginx.conf 
    -# [...]
    -ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    -ssl_prefer_server_ciphers on;
    -ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
    -  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
    -  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";
    -# [...]
    -# /etc/nginx/sites-enabled/default-ssl
    -# [...]
    -ssl on;
    -ssl_certificate /etc/certs/example.com.crt
    -ssl_certificate_key /etc/certs/example.com.key
    -# [...]
    -
    - - -

    prosody (jabber) :

    -
    # tout d'abord, lancez la commande suivante :
    -sudo openssl dhparam -out /etc/prosody/certs/dh-2048.pem 2048
    -# ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :
    -ssl = {
    -  dhparam = "/etc/prosody/certs/dh-2048.pem";
    -  key = "/etc/certs/example.com.key";
    -  certificate = "/etc/certs/example.com.crt";
    -}
    -# la cipher suite de prosody utilise par défaut EDH et EECDH
    -
    - - -

    postfix (email) :

    -
    # /etc/postfix/main.cf
    -# [...]
    -smtpd_tls_cert_file = /etc/certs/example.com.crt
    -smtpd_tls_key_file = /etc/certs/example.com.key
    -tls_preempt_cipherlist = yes
    -smtpd_tls_eecdh_grade = strong
    -smtdp_tls_mandatory_ciphers = high
    -smtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS
    -smtpd_tls_security_level = encrypt
    -smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
    -smtpd_use_tls = yes
    -# [...]
    -
    - - -

    dovecot (imap) :

    -
    # /etc/dovecot/dovecot.conf 
    -# [...]
    -ssl_cert = </etc/certs/example.com.crt
    -ssl_key = </etc/certs/example.com.key
    -ssl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
    -
    - - -

    Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter -au manuel approprié.

    -

    Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker SSL and the future -of Authenticity qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.

    -
    -
    -
    -

    Redesign du blog, etc

    -
    - Date - - Wed 12 June 2013 - -
    - By - wxcafe -
    - Category - Notes -
    - - - - -
    -

    Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.

    -

    Du coup, expliquons. J'ai récemment monté serverporn, et ai par la même -occasion découvert pelican. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation -et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au -projet, et en fait des pages html.

    -

    Globalement, un thème est constitué ainsi :

    -
    thème
    -├── static
    -   ├─ css
    -     └─ [css files]
    -   ├─ img
    -     └─ [image files]
    -   └─ js
    -      └─ [javascript files]
    -└── template
    -    ├─ base.html
    -    ├─ index.html
    -    ├─ page.html
    -    ├─ [...]
    -    └─ article.html
    -
    - - -

    Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe -django, et utilisent des variables particulières telles {{ article.content }}, -par exemple. La syntaxe complète est très bien documentée dans la doc de -pelican.

    -

    L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a -la mise a jour du blog.
    -En effet, il offre un système de Makefiles permettant, grâce a de nombreuses -cibles de compilation, de régénérer le site entier, de ne générer que les -fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... -La gestion du projet en devient donc très simple, puisque après avoir écrit un -article, il suffit de faire un make html pour mettre a jour le blog.

    -

    De plus, le système de wordpress commençait a ne plus me convenir, du fait du -manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est -très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus -efficace.

    -

    En ce qui concerne les points négatifs :

    -
      -
    • -

      Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos ici quand a - mon avis sur ce sujet.

      -
    • -
    • -

      Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a - faire.

      -
    • -
    • -

      Perte du spam: - Pourquoi c'est dans les points négatifs, ca?

      -
    • -
    • -

      Temps d'adaptation et d'appréhension du système: - Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca - dans la catëgorie positive.

      -
    • -
    -

    Voila, c'est mon retour d'expérience sur pelican. A plus.

    -
    -
    -
    -

    Update

    -
    - Date - - Sat 05 January 2013 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

    Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!

    -
    -
    -
    -

    Update a propos du blog

    -
    - Date - - Tue 18 September 2012 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

    Bonsoir! Un petit post pour faire un peu le point sur ce blog.
    -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :

    -
      -
    • -

      Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (@Wxcafe)

      -
    • -
    • -

      Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.

      -
    • -
    -

    A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.

    -

    Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P

    -

    Ceci dit, je vais bosser un peu sur le prochain article.

    -

    A plus tard!

    -
    -
    -
    -

    Débuts, présentation, etc...

    -
    - Date - - Sat 18 August 2012 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

    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!

    -
    -
    -
    -

    Pages

    -
  • A propos
  • -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/category/programmation/index.html b/output/category/programmation/index.html deleted file mode 100644 index 6cdd42d..0000000 --- a/output/category/programmation/index.html +++ /dev/null @@ -1,412 +0,0 @@ - - - - - Wxcafé - Programmation - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    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:

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    -11
    -12
    -13
    #!/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:

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    #!/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:

    -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    #!/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:

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    #!/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)

    -
    -
    -
    -

    Pages

    -
  • A propos
  • -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/category/teaching/index.html b/output/category/teaching/index.html deleted file mode 100644 index ca69a7d..0000000 --- a/output/category/teaching/index.html +++ /dev/null @@ -1,646 +0,0 @@ - - - - - Wxcafé - Teaching - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    SSL - STARTTLS

    -
    - Date - - Sat 16 May 2015 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    Le chiffrement SSL pour les services en ligne est un problème relativement -récent, par rapport a l’histoire d’Internet. Sa mise en place pose -problème : les protocoles existants ne s’accommodent qu’assez mal de recevoir -soudainement un flot de données chiffrées, mais développer de nouveaux -protocoles est complexe et n’apporte rien d’intéressant. Pour palier a ce -problème, deux solutions sont apparues.

    -

    Le première consiste à faire écouter les services sur un -autre port, dans un tunnel SSL. De cette façon, le service existant écoute -normalement, mais il ne répond pas directement aux requêtes. A la place, un -tunnel SSL est mis en place, et les requêtes et les réponses passent dans le -tunnel (ou elles apparaissent donc chiffrées pour l’extérieur). Cela permet de -proposer un service chiffré en modifiant de façon minimale le programme, au prix -de devoir aussi changer tous les clients, et de devoir les orienter sur un autre -port.

    -

    L’autre approche qui a été utilisée est une approche d’upgrade. La -communication commence en mode non chiffré, puis le client demande l’upgrade de -la connexion vers le mode chiffré s’il le supporte, les deux machines -machines font un handshake SSL et la communication continue a travers le -tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls -les clients capables de passer en SSL le feront, ce qui permet de faire la “mise -a jour” en douceur.

    -

    Il est souvent demandé quelle est la meilleure méthode pour mettre en place un -service – laisser un port pour le SSL et un pour le trafic non chiffré, ou bien -un seul, avec STARTTLS, qui upgrade les connexions si nécessaire.
    -La réponse est que STARTTLS est plus interessant, pour plusieurs raisons. Tout -d’abord, il permet de n’utiliser qu’un seul port : ça permet de simplifier la -configuration du firewall. En plus de ça, il permet aux clients “anciens” (ceux -qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se -connecter, même si cela signifie que leurs informations seront transmises en -clair. Surtout, il permet d’éviter aux utilisateurs d’avoir a configurer leurs -clients. Si le client supporte le chiffrement, il l’activera de lui même s’il -voit qu’il est disponible.
    -Bref, mettez en place du STARTTLS, et pas du SSL. C’est mieux pour la sécurité -de tout le monde.

    -
    -
    -
    -

    Les systèmes de fichiers

    -
    - Date - - Tue 25 September 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.

    -

    Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?

    -

    Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(kibioctet), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée).

    -

    Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte.

    -

    Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.

    -

    Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.

    -

    Détaillons maintenant les types de fichiers les plus répandus:

    -
      -
    • -

      FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.

      -
    • -
    • -

      NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.

      -
    • -
    • -

      ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.

      -
    • -
    • -

      Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.

      -
    • -
    • -

      ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)

      -
    • -
    • -

      Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec LVM, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.

      -
    • -
    • -

      HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir

      -
    • -
    • -

      ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...

      -
    • -
    -

    Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...

    -

    Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)

    -

    Bon courage, et bon choix pour votre prochain système.

    -
    -
    -
    -

    Les différentes couches d'un système d'exploitation

    -
    - Date - - Thu 06 September 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.

    -

    Un système d'exploitation (de type UNIX, \<troll>enfin un vrai système quoi. -\</troll>) incorpore plusieurs systèmes de couches.

    -

    Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier.

    -

    Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")

    -

    Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"

    -

    Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre

    -

    Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux

    -

    Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.

    -

    Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.

    -

    Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...

    -

    Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.

    -

    Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.

    -

    (Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)

    -

    Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)

    -

    Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.

    -

    De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.

    -

    Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels

    -
    -
    -
    -

    La programmation expliquée simplement

    -
    - Date - - Mon 27 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    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!

    -
    -
    -
    -

    GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère

    -
    - Date - - Wed 22 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    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!

    -
    -
    -
    -

    Pages

    -
  • A propos
  • -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/category/tutorial/index.html b/output/category/tutorial/index.html deleted file mode 100644 index 20bb4dd..0000000 --- a/output/category/tutorial/index.html +++ /dev/null @@ -1,582 +0,0 @@ - - - - - Wxcafé - Tutorial - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    OpenSMTPd comme serveur mail sous debian

    -
    - Date - - Fri 07 November 2014 - -
    - By - Wxcafé -
    - Category - Tutorial -
    - - - - -
    -

    J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de -changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la -gestion de mon système de mails.

    -

    Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais -effectuer depuis un certain temps. OpenSMTPd est un -projet originaire d'OpenBSD qui a pour but de fournir un -serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).

    -

    Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA -(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou -serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du -destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le -mail au destinataire.

    -

    Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis -le serveur, des yeux pour la lecture).

    -

    Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -Dovecot qui fait office de serveur IMAP et -amavis/spamassassin -pour filtrer les mails entrants et sortants. -Le schéma suivant explique la façon dont les mails sont gérés sur le système

    -
                ╭────────────────╮                    ╭──────────╮
    -            │╭──────────────>│────> to filter ───>│─╮        
    -  mail in   ││                                     amavis 
    -───────────>│╯ OpenSMTPd  ╭──│<─── from filter<───│<        
    -                                               ╰──────────╯
    -  mail out                                     ╭──────────╮
    -<───────────│<────────────┴─>│─────> to MDA ─────>│─────────>│──> to user's
    -                                                 dovecot       mailbox
    -            ╰────────────────╯                    ╰──────────╯
    -
    - - -

    Normalement, ceci devrait être a peu près clair. -Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -amavis, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de -nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, -qui a ce moment-ci trie en fonction de la destination : les mails gérés -par le domaine vont via dovecot dans les boites mail des destinataires -locaux, les mails exterieurs vont directement vers le MTA du serveur -distant.

    -

    Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon -dont les différents services vont communiquer.

    -

    Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de -signer, nous allons profiter de cette configuration et donc lui parler en SMTP -sur ces ports.

    -

    Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail -Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, -/var/run/dovecot/lmtp).

    -

    Ainsi, pour reprendre le schéma présenté plus haut :

    -
                ╭───────────────╮                    ╭───────────╮
    -            │╭─────────────>│──> SMTP (10026) ──>│─╮         
    -  SMTP in   ││                                    amavis  
    -────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10027) <──│< (sign)  
    -                                              ╰───────────╯
    -  SMTP out                
    -25 <────────│<───────────╯  
    -            ╰───────────────╯
    -
    - - -

    Pour les mails sortants; et

    -
                ╭───────────────╮                    ╭────────────╮
    -            │╭─────────────>│──> SMTP (10024) ──>│─╮          
    -  SMTP in   ││                                    amavis   
    -────────> 25│╯ OpenSMTPd ╭──│<── SMTP (10025) <──│<(filter)  
    -                                              ╰────────────╯
    -                                              ╭────────────╮
    -                        ╰─>│──> LMTP (socket) >│───────────>│──> to user's
    -                                                 dovecot        mailbox
    -            ╰───────────────╯                    ╰────────────╯
    -
    - - -

    Pour les mails entrants.

    -

    Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai -ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même

    -

    (Vous aurez besoin de certificats SSL pour ce guide, même self-signés. -Si vous ne savez pas comment en créer, vous pouvez aller voir ce -post)

    -

    Tout d'abord, commençons par installer les programmes nécessaires :

    -
    sudo apt-get install opensmtpd dovecot dovecot-pigeonhole amavisd-new dovecot-managesieved
    -sudo pkg_add dovecot dovecot-pigeonhole amavisd-new
    -
    - - -

    Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :

    -

    /etc/smtpd.conf

    -
    # This is the smtpd server system-wide configuration file.
    -# See smtpd.conf(5) for more information.
    -
    -## Certs
    -pki exem.pl certificate "/etc/certs/exem.pl.crt"
    -pki exem.pl key         "/etc/certs/exem.pl.key"
    -
    -## Ports to listen on, and how to listen on them
    -listen on eth0 port 25 tls pki exem.pl hostname exem.pl auth-optional
    -listen on eth0 port 465 tls-require pki exem.pl hostname exem.pl auth mask-source
    -listen on eth0 port 587 tls-require pki exem.pl hostname exem.pl auth mask-source
    -
    -## Aliases
    -table aliases file:/etc/aliases
    -
    -# coming from amavisd, checked for spam/malware
    -listen on lo port 10025 tag Filtered
    -# coming from amavisd, signed with DKIM
    -listen on lo port 10027 tag Signed
    -
    -## Receiving
    -# if the (incoming) mail has been through amavisd, then we can deliver it
    -accept tagged Filtered for any alias <aliases> deliver to lmtp "/var/run/dovecot/lmtp"
    -# we directly tranfer incoming mail to amavisd to be checked 
    -accept from any for domain "exem.pl" relay via "smtp://localhost:10024"
    -# we have to put these lines in this order to avoid infinite loops
    -
    -## Sending
    -# if the (outgoint) mail has been through amavisd, then we can deliver it
    -accept tagged Signed for any relay
    -# we tranfer the outgoing mail to amavisd to be signed
    -accept for any relay via "smtp://localhost:10026"
    -# same, we have to put these lines in this order or infinite loops...
    -
    - - -

    Expliquons un peu ce fichier de configuration :

    -
      -
    • Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.
    • -
    • Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : - port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire
    • -
    • Les alias sont définis juste après
    • -
    • Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : - 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"
    • -
    • Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail - traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore - été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 - donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième - ligne matchant tous les mails arrivant et la première seulement ceux filtrés, - inverser leur sens voudrait dire que les mails seraient toujours renvoyés a - amavis
    • -
    • Enfin, le dernier paragraphe traite les mails sortants. De la même façon que - pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au - dessus.
    • -
    -

    Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit -écouter en LMTP via la socket /var/run/dovecot/lmtp et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne -mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du -POP3[s], différents guides sont trouvables facilement sur internet.

    -

    /etc/dovecot/dovecot.conf

    -
    ## Dovecot configuration file
    -
    -# basic config
    -info_log_path = /var/log/dovecot-info.log
    -log_path = /var/log/dovecot.log
    -log_timestamp = "%Y-%m-%d %H:%M:%S "
    -mail_location = maildir:%h/mail
    -
    -# authentication
    -passdb {
    -    driver = pam
    -}
    -userdb {
    -    driver = passwd
    -}
    -
    -# the protocols we use
    -protocols = imap lmtp sieve
    -
    -# ssl config
    -ssl_cert = </etc/certs/exem.pl.cert
    -ssl_key = </etc/certs/exem.pl.key
    -ssl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL
    -ssl = yes
    -
    -## configuring services 
    -# disables imap login without SSL (yes dovecot is dumb that way)
    -service imap-login {
    -    inet_listener imap {
    -        port=0 
    -    }
    -}
    -
    -service lmtp {
    -    unix_listener lmtp {
    -        mode = 0666
    -    }
    -}
    -
    -## configuring protocols
    -# the dovecot lda, we set it to use sieve
    -protocol lda {
    -    mail_plugins = $mail_plugins sieve
    -}
    -
    -protocol lmtp {
    -    postmaster_address =  whoever@exem.pl
    -    mail_plugins = $mail_plugins sieve
    -}
    -
    -plugin {
    -    sieve = ~/.dovecot.sieve
    -    sieve_dir = ~/sieve
    -}
    -
    - - -

    ATTENTION: Sous OpenBSD, remplacez

    -
    passdb {
    -    driver = pam
    -}
    -
    - - -

    par

    -
    passdb {
    -    driver = bsdauth
    -}
    -
    - - -

    pour identifier les utilisateurs système

    -

    Ici aussi, voyons comment ce fichier est structuré :

    -
      -
    • Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.
    • -
    • Nous configurons ensuite la gestion de l'authentification des utilisateurs. - Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs - mots de passe avec PAM (ou BSDAuth)
    • -
    • Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).
    • -
    • Nous configurons le SSL
    • -
    • Le section suivante contient la configuration des services. Nous avons en - premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. - La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise
    • -
    • Nous configurons maintenant les protocoles, pour faire fonctionner Sieve
    • -
    • enfin, nous configurons le plugin sieve en lui indiquant quel fichier et - quel dossier utiliser pour sa configuration.
    • -
    -

    Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir -a deux choses : signer les emails sortants, et filtrer les emails entrants. Il -doit donc écouter sur les port 10026 pour les signatures et 10024 pour le -filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun -risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -/usr/local/share/examples/amavisd-new/amavisd.conf et ajoutez les -modifications nécessaires a la fin du fichier.

    -

    /etc/amavis/conf.d/99-local.conf (debian) -/etc/amavis.conf (OpenBSD)

    -
    use strict;
    -
    -$enable_dkim_verification = 1;
    -$enable_dkim_signing = 1;
    -dkim_key("exem.pl", "main", "/etc/certs/dkim.key" );
    -
    -@dkim_signature_options_bysender_maps = (
    -    { '.' =>
    -        { ttl => 21*24*3600, c => 'relaxed/simple' }
    -    }
    -);
    -
    -$inet_socket_port = [10024, 10026];
    -$policy_bank{'MYNETS'} = {
    -        originating => 1,
    -        os_fingerprint_method => undef,
    -};
    -
    -$interface_policy{'10026'} = 'ORIGINATING';
    -
    -$policy_bank{'ORIGINATING'} = {
    -        originating => 1,
    -        allow_disclaimers => 1,
    -        virus_admin_maps => ["root\@$mydomain"],
    -        spam_admin_maps => ["root\@$mydomain"],
    -        warnbadhsender => 1,
    -        forward_method => 'smtp:localhost:10027',
    -        smtpd_discard_ehlo_keywords => ['8BITMIME'],
    -        bypass_banned_checks_maps => [1],
    -        terminate_dsn_on_notify_success => 0,
    -};
    -
    -#------------ Do not modify anything below this line -------------
    -1;  # ensure a defined return
    -
    - - -

    A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se - trouve la clé privée servant a signer les emails. -- le second définit les options DKIM que nous souhaitons utiliser comme défaut. - Je vous invite a consulter la RFC 4871 -- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les - paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel - ils viennent. -- nous savons que les emails venants du port 10026 sont sortants, nous les - traitons donc comme tel -- le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre - serveur. Nous autorisons les disclaimers (voire encore une fois la RFC - 4871. Nous déclarons l'adresse a - prévenir en cas de spam/virus venants de notre système, et que nous voulons - être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de - les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!

    -

    Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature -des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en -fait inclus par défaut dans amavis.

    -

    Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (un -tutorial) -mais de nombreuses autre méthodes existent. -Il nous reste encore a configurer spamassassin :

    -
    #rewrite_header Subject *****SPAM*****
    -# report_safe 1
    -required_score 2.0
    -# use_bayes 1
    -# bayes_auto_learn 1
    -# bayes_ignore_header X-Bogosity
    -# bayes_ignore_header X-Spam-Flag
    -# bayes_ignore_header X-Spam-Status
    -ifplugin Mail::SpamAssassin::Plugin::Shortcircuit
    -# shortcircuit USER_IN_WHITELIST       on
    -# shortcircuit USER_IN_DEF_WHITELIST   on
    -# shortcircuit USER_IN_ALL_SPAM_TO     on
    -# shortcircuit SUBJECT_IN_WHITELIST    on
    -# shortcircuit USER_IN_BLACKLIST       on
    -# shortcircuit USER_IN_BLACKLIST_TO    on
    -# shortcircuit SUBJECT_IN_BLACKLIST    on
    -shortcircuit ALL_TRUSTED             off
    -# shortcircuit BAYES_99                spam
    -# shortcircuit BAYES_00                ham
    -
    -endif # Mail::SpamAssassin::Plugin::Shortcircuit
    -
    - - -

    Comme vous pouvez le voir, les modifications se résument globalement a baisser -le required_score pour ma part.

    -

    Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et -spamassassin, et tout devrait fonctionner parfaitement

    -

    Bon courage pour votre hosting de mail ensuite...

    -
    -
    -
    -

    Pages

    -
  • A propos
  • -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/feeds/feed.language.xml b/output/feeds/feed.language.xml deleted file mode 100644 index a424677..0000000 --- a/output/feeds/feed.language.xml +++ /dev/null @@ -1,30 +0,0 @@ - -Wxcaféfile:///home/wxcafe/code/blog-source/output/2012-09-18T19:07:00+02:00Le Quenya - Épisode ø2012-09-18T19:07:00+02:00Wxcafetag:,2012-09-18:home/wxcafe/code/blog-source/output/posts/le-quenya-episode-o/<p>Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. </p> -<p>En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. </p> -<p>Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)</p> -<p>J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles <a href="http://folk.uib.no/hnohf/qcourse.htm">ici</a> , une -traduction en français est disponible <a href="http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf">la</a> en pdf ), et des infos ici -toutes les deux semaines.</p> -<p>Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver <a href="olk.uib.no/hnohf/quenya.htm">par ici</a>.</p> -<p>Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!</p> \ No newline at end of file diff --git a/output/feeds/feed.notes.xml b/output/feeds/feed.notes.xml deleted file mode 100644 index 1873405..0000000 --- a/output/feeds/feed.notes.xml +++ /dev/null @@ -1,265 +0,0 @@ - -Wxcaféfile:///home/wxcafe/code/blog-source/output/2014-05-30T08:25:00+02:00SSL ou la sécurité sur l'internet2014-05-30T08:25:00+02:00Wxcafetag:,2014-05-30:home/wxcafe/code/blog-source/output/posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie -Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, -présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: -<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès -a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> -<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous -connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être -remarqué quelque chose récemment : il se trouve que le certificat qui permet de -desservir ce site a changé.</p> -<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", -qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système -fonctionnel utilisant cette compréhension récemment acquise.</p> -<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très -simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour -<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat -différent pour chaque sous-domaine.</p> -<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs -doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat -pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les -sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche -pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> -<p>Il serait préférable de faire des redirections automatiques des adresses http -vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront -donc pas mises en place.</p> -<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus -haut, il semble intéressant (et assez important) de faire en sorte que le -serveur utilise en priorité (et si possible, uniquement) des ciphers supportant -PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves -de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les -communications passées.</p> -<p>Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation : <br /> -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes -suivantes: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> -<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> -<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> -<span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> -</pre></div> - - -<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser -<code>*.example.com</code> comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :</p> -<h3>apache :</h3> -<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> -<span class="cp"># [...]</span> -<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> -<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> -<span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">SSLEngine</span> <span class="n">on</span> -<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>nginx :</h3> -<div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> -<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>prosody (jabber) :</h3> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> -<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> - <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> - <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> -<span class="p">}</span> -<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> -</pre></div> - - -<h3>postfix (email) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> -<span class="cp"># [...]</span> -<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> -<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> -<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> -<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> -<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> -<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>dovecot (imap) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -</pre></div> - - -<p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter -au manuel approprié.</p> -<p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future -of Authenticity</a> qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.</p>Redesign du blog, etc2013-06-12T19:14:00+02:00wxcafetag:,2013-06-12:home/wxcafe/code/blog-source/output/posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> -<p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même -occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation -et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au -projet, et en fait des pages html. </p> -<p>Globalement, un thème est constitué ainsi :</p> -<div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> -<span class="err">├──</span> <span class="k">static</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> -<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> -<span class="err">└──</span> <span class="n">template</span> - <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="p">[...]</span> - <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> -</pre></div> - - -<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe -django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, -par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de -pelican.</p> -<p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a -la mise a jour du blog.<br /> -En effet, il offre un système de Makefiles permettant, grâce a de nombreuses -cibles de compilation, de régénérer le site entier, de ne générer que les -fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... -La gestion du projet en devient donc très simple, puisque après avoir écrit un -article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> -<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du -manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est -très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus -efficace.</p> -<p>En ce qui concerne les points négatifs : </p> -<ul> -<li> -<p>Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a - mon avis sur ce sujet.</p> -</li> -<li> -<p>Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a - faire.</p> -</li> -<li> -<p>Perte du spam: - Pourquoi c'est dans les points négatifs, ca?</p> -</li> -<li> -<p>Temps d'adaptation et d'appréhension du système: - Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca - dans la catëgorie positive.</p> -</li> -</ul> -<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>Update2013-01-05T18:32:00+01:00Wxcafetag:,2013-01-05:home/wxcafe/code/blog-source/output/posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!</p>Update a propos du blog2012-09-18T16:57:00+02:00Wxcafetag:,2012-09-18:home/wxcafe/code/blog-source/output/posts/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> -<ul> -<li> -<p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> -</li> -<li> -<p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.</p> -</li> -</ul> -<p>A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> -<p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P</p> -<p>Ceci dit, je vais bosser un peu sur le prochain article.</p> -<p>A plus tard!</p>Débuts, présentation, etc...2012-08-18T20:27:00+02:00Wxcafetag:,2012-08-18:home/wxcafe/code/blog-source/output/posts/debuts-presentation-etc/<p>Bonjour!</p> -<p>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)</p> -<p>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. </p> -<p>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.</p> -<p>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.</p> -<p>Merci beaucoup de votre attention, et a bientôt!</p> \ No newline at end of file diff --git a/output/feeds/feed.programmation.xml b/output/feeds/feed.programmation.xml deleted file mode 100644 index a51d231..0000000 --- a/output/feeds/feed.programmation.xml +++ /dev/null @@ -1,198 +0,0 @@ - -Wxcaféfile:///home/wxcafe/code/blog-source/output/2012-09-08T18:15:00+02:00Introduction a bash en tant que language de programmation.2012-09-08T18:15:00+02:00Wxcafetag:,2012-09-08:home/wxcafe/code/blog-source/output/posts/introduction-a-bash-en-tant-que-language-de-programmation/<p>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...).</p> -<p>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. </p> -<p>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.)</p> -<p>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. </p> -<p>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:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span> -<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span> -<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span> -<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span> -<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span> -<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span> -<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span> -<span class="c"># information, stockée dans la variable en paramètre. </span> -<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span> -<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span> -<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span> -<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span> -</pre></div> -</td></tr></table> - -<p>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:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span> -<span class="nb">read </span>host_name -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## 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. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span> -<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span> -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span> -<span class="k">fi </span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>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.</p> -<p>Passons maintenant au while:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1 -2 -3 -4 -5 -6 -7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span> -<span class="nb">read </span>name -<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span> -<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span> -<span class="k">done</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).</p> -<p>Le troisième opérateur de bash est case. Voyons:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span> -<span class="nb">read </span>number -<span class="k">case</span> <span class="nv">$number</span> in -1<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span> -;; -2<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span> -;; -3<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span> -;; -4<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span> -;; -5<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span> -;; -*<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span> -;; -<span class="k">esac</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>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.<br /> -(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.</p> -<p>Quelques notions manquent ici:<br /> -- 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.<br /> -- 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.<br /> -être utilisées dans un programme bash.<br /> -- 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.</p> -<p>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.<br /> -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.</p> -<p>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)</p> \ No newline at end of file diff --git a/output/feeds/feed.rss.language.xml b/output/feeds/feed.rss.language.xml deleted file mode 100644 index 3a514c5..0000000 --- a/output/feeds/feed.rss.language.xml +++ /dev/null @@ -1,30 +0,0 @@ - -Wxcaféfile:///home/wxcafe/code/blog-source/output/Tue, 18 Sep 2012 19:07:00 +0200Le Quenya - Épisode øfile:///home/wxcafe/code/blog-source/output/posts/le-quenya-episode-o/<p>Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc. </p> -<p>En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite. </p> -<p>Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)</p> -<p>J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles <a href="http://folk.uib.no/hnohf/qcourse.htm">ici</a> , une -traduction en français est disponible <a href="http://www.ambar-eldaron.com/telechargements/integraleshelge.pdf">la</a> en pdf ), et des infos ici -toutes les deux semaines.</p> -<p>Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver <a href="olk.uib.no/hnohf/quenya.htm">par ici</a>.</p> -<p>Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!</p>WxcafeTue, 18 Sep 2012 19:07:00 +0200tag:,2012-09-18:home/wxcafe/code/blog-source/output/posts/le-quenya-episode-o/ \ No newline at end of file diff --git a/output/feeds/feed.rss.notes.xml b/output/feeds/feed.rss.notes.xml deleted file mode 100644 index 4429edd..0000000 --- a/output/feeds/feed.rss.notes.xml +++ /dev/null @@ -1,265 +0,0 @@ - -Wxcaféfile:///home/wxcafe/code/blog-source/output/Fri, 30 May 2014 08:25:00 +0200SSL ou la sécurité sur l'internetfile:///home/wxcafe/code/blog-source/output/posts/SSL-ou-la-securite-sur-internet/<p><em>Disclaimer: Ce billet est écrit après le visionnage de la conférence de Moxie -Marlinspike suivante: <a href="https://www.youtube.com/watch?v=ibF36Yyeehw">More Tricks for Defeating SSL</a>, -présentée a la DefCon 17 (en 2011), et la lecture du billet suivant: -<a href="http://www.thoughtcrime.org/blog/lavabit-critique/">A Critique of Lavabit</a>, -ce qui peut avoir l'effet de rendre légèrement parano. Si vous considérez que -c'est le cas ici, veuillez ne pas tenir compte de ce billet (et vous pouvez dès -a présent dire coucou aux différentes personnes qui écoutent votre connection)</em></p> -<p>Si vous venez ici souvent (vous devriez), et que vous utilisez SSL pour vous -connecter a ce site (vous devriez, vraiment, dans ce cas), vous avez peut être -remarqué quelque chose récemment : il se trouve que le certificat qui permet de -desservir ce site a changé.</p> -<p>Cela fait suite aux évènements évoqués dans le <em>Disclaimer</em>, mais aussi a des -doigts sortis d'un endroit particulier du corps de l'admin/auteur de ce "blog", -qui a pris <strong>enfin</strong> les 5 minutes nécessaires a la compréhension superficielle -du fonctionnement de SSL, et les 10 nécessaires a la mise en place d'un système -fonctionnel utilisant cette compréhension récemment acquise.</p> -<p>Bref, le certificat a changé. Mais de quelle façon, vous demandez vous peut -être (ou pas, mais bon, je vais expliquer de toute façon). Et bien c'est très -simple : il existait auparavant un certificat pour <code>wxcafe.net</code>, un pour -<code>paste.wxcafe.net</code>, un pour <code>mail.wxcafe.net</code>, etc... Bref, un certificat -différent pour chaque sous-domaine.</p> -<p>Il s'avère que c'est a la fois très peu pratique a utiliser (les utilisateurs -doivent ajouter chaque certificat a leur navigateur séparément, chaque -changement de sous-domaine conduit a un message d'erreur, etc) et pas plus -sécurisé que d'avoir un seul certificat wildcard. J'ai donc généré un certificat -pour <code>*.wxcafe.net</code> hier, et il sera dorénavant utilisé pour tous les -sous-domaine de <code>wxcafe.net</code>; et un certificat pour <code>wxcafe.net</code>, qui ne matche -pas <code>*.wxcafe.net</code>, et qui sera donc utilisé... bah pour <code>wxcafe.net</code>.</p> -<p>Il serait préférable de faire des redirections automatiques des adresses http -vers les adresses https, cependant, étant donné que le certificat est -self-signed, il me semble préférable que l'arrivée sur le site ne commence pas -par une page firefox disant "Something's Wrong!", et ces redirections ne seront -donc pas mises en place.</p> -<p>De plus, après la lecture de l'article de blog sur Lavabit dont le lien est plus -haut, il semble intéressant (et assez important) de faire en sorte que le -serveur utilise en priorité (et si possible, uniquement) des ciphers supportant -PFS, soit EDH et EECDH (Ephemeral Diffie-Helmann et la version Elliptic Curves -de ce même algorithme). Cela permet de faire en sorte que toutes les -communications avec ce serveur soient future-proof, c'est a dire que, même si -quelqu'un récupérait la clé privée, elle ne serait pas utile pour déchiffrer les -communications passées.</p> -<p>Bon, maintenant que les explications basiques sont faites, voyons -l'implémentation : <br /> -Pour générer la clé, tout d'abord, il convient d'utiliser les commandes -suivantes: </p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">openssl</span> <span class="n">genrsa</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="mi">4096</span> -<span class="cp"># nous utilisons ici une clé de 4096 bits, la taille est laissée a votre appréciation</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">req</span> <span class="o">-</span><span class="n">new</span> <span class="o">-</span><span class="n">key</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> -<span class="cp"># OpenSSL va ici vous demander de nombreuses informations, &quot;Common Name&quot; devant contenir le FQDN</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">X509</span> <span class="o">-</span><span class="n">req</span> <span class="o">-</span><span class="n">days</span> <span class="mi">1095</span> <span class="o">-</span><span class="n">in</span> <span class="n">example</span><span class="p">.</span><span class="n">csr</span> <span class="o">-</span><span class="n">signkey</span> <span class="n">example</span><span class="p">.</span><span class="n">key</span> <span class="o">-</span><span class="n">out</span> <span class="n">example</span><span class="p">.</span><span class="n">crt</span> -<span class="cp"># enfin, nous générons la clé, d&#39;une durée de vie de 3 ans</span> -</pre></div> - - -<p>Bien entendu, si vous voulez utiliser une clé wildcard, il vous faut préciser -<code>*.example.com</code> comme common name. -Une fois la clé générée, il faut dire aux différents services de l'utiliser, et -de n'utiliser que des ciphers PFS. La méthode dépend donc du service. -Je vais lister ici les methodes pour quelques services que j'utilise :</p> -<h3>apache :</h3> -<div class="highlight"><pre><span class="cp"># /etc/apache2/mods_enabled/ssl.conf</span> -<span class="cp"># [...]</span> -<span class="n">SSLProtocol</span> <span class="n">all</span> <span class="o">-</span><span class="n">SSLv2</span> <span class="o">-</span><span class="n">SSLv3</span> -<span class="n">SSLHonorCipherOrder</span> <span class="n">on</span> -<span class="n">SSLCipherSuite</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/apache2/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">SSLEngine</span> <span class="n">on</span> -<span class="n">SSLCertificateFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">SSLCertificateKeyFile</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>nginx :</h3> -<div class="highlight"><pre><span class="cp"># /etc/nginx/nginx.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_protocols</span> <span class="n">TLSv1</span> <span class="n">TLSv1</span><span class="mf">.1</span> <span class="n">TLSv1</span><span class="mf">.2</span><span class="p">;</span> -<span class="n">ssl_prefer_server_ciphers</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_ciphers</span> <span class="s">&quot;EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \</span> -<span class="s"> EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \</span> -<span class="s"> EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS&quot;</span><span class="p">;</span> -<span class="cp"># [...]</span> -<span class="cp"># /etc/nginx/sites-enabled/default-ssl</span> -<span class="cp"># [...]</span> -<span class="n">ssl</span> <span class="n">on</span><span class="p">;</span> -<span class="n">ssl_certificate</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_certificate_key</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>prosody (jabber) :</h3> -<div class="highlight"><pre><span class="cp"># tout d&#39;abord, lancez la commande suivante :</span> -<span class="n">sudo</span> <span class="n">openssl</span> <span class="n">dhparam</span> <span class="o">-</span><span class="n">out</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">prosody</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">dh</span><span class="o">-</span><span class="mf">2048.</span><span class="n">pem</span> <span class="mi">2048</span> -<span class="cp"># ensuite, pour chaque VirtualHost dans /etc/prosody/prosody.conf :</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">dhparam</span> <span class="o">=</span> <span class="s">&quot;/etc/prosody/certs/dh-2048.pem&quot;</span><span class="p">;</span> - <span class="n">key</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.key&quot;</span><span class="p">;</span> - <span class="n">certificate</span> <span class="o">=</span> <span class="s">&quot;/etc/certs/example.com.crt&quot;</span><span class="p">;</span> -<span class="p">}</span> -<span class="cp"># la cipher suite de prosody utilise par défaut EDH et EECDH</span> -</pre></div> - - -<h3>postfix (email) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/postfix/main.cf</span> -<span class="cp"># [...]</span> -<span class="n">smtpd_tls_cert_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">smtpd_tls_key_file</span> <span class="o">=</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">tls_preempt_cipherlist</span> <span class="o">=</span> <span class="n">yes</span> -<span class="n">smtpd_tls_eecdh_grade</span> <span class="o">=</span> <span class="n">strong</span> -<span class="n">smtdp_tls_mandatory_ciphers</span> <span class="o">=</span> <span class="n">high</span> -<span class="n">smtpd_tls_mandatory_exclude_ciphers</span> <span class="o">=</span> <span class="n">aNULL</span><span class="p">,</span> <span class="n">eNULL</span><span class="p">,</span> <span class="n">MD5</span><span class="p">,</span> <span class="n">LOW</span><span class="p">,</span> <span class="mi">3</span><span class="n">DES</span><span class="p">,</span> <span class="n">EXP</span><span class="p">,</span> <span class="n">PSK</span><span class="p">,</span> <span class="n">SRP</span><span class="p">,</span> <span class="n">DSS</span> -<span class="n">smtpd_tls_security_level</span> <span class="o">=</span> <span class="n">encrypt</span> -<span class="n">smtpd_tls_mandatory_protocols</span> <span class="o">=</span> <span class="o">!</span><span class="n">SSLv2</span><span class="p">,</span> <span class="o">!</span><span class="n">SSLv3</span> -<span class="n">smtpd_use_tls</span> <span class="o">=</span> <span class="n">yes</span> -<span class="cp"># [...]</span> -</pre></div> - - -<h3>dovecot (imap) :</h3> -<div class="highlight"><pre><span class="cp"># /etc/dovecot/dovecot.conf </span> -<span class="cp"># [...]</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">crt</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">example</span><span class="p">.</span><span class="n">com</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -</pre></div> - - -<p>Voila. Pour d'autres protocoles/services, je vous invite a RTFM^W vous reporter -au manuel approprié.</p> -<p>Cela étant dit, je conseille a tout le monde d'aller voir la conférence dans le -disclaimer, et tant qu'a faire la conférence du même hacker <a href="https://www.youtube.com/watch?v=8N4sb-SEpcg">SSL and the future -of Authenticity</a> qui parle de son -implémentation d'une technologie "remplaçant" le système de CAs qui existe -actuellement.</p>WxcafeFri, 30 May 2014 08:25:00 +0200tag:,2014-05-30:home/wxcafe/code/blog-source/output/posts/SSL-ou-la-securite-sur-internet/Redesign du blog, etcfile:///home/wxcafe/code/blog-source/output/posts/redesign-du-blog/<p>Comme vous avez pu le remarquer, ce blog a "un peu" changé récemment.</p> -<p>Du coup, expliquons. J'ai récemment monté <a href="http://serverporn.fr">serverporn</a>, et ai par la même -occasion découvert <a href="http://getpelican.com">pelican</a>. J'ai tout de suite accroché a ce générateur de -site statique en python, du fait de son efficacité, de sa facilité d'utilisation -et de sa grande customisation. En gros, pelican est un logiciel qui prend des -fichiers markdown ou reStructuredText, les passe a la moulinette d'un "thème" -constitué de templates pour les fichiers html et l'organisation du projet et -d'une partie "statique" contenant le css, et les autres fichiers nécessaires au -projet, et en fait des pages html. </p> -<p>Globalement, un thème est constitué ainsi :</p> -<div class="highlight"><pre><span class="n">th</span><span class="err">è</span><span class="n">me</span> -<span class="err">├──</span> <span class="k">static</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">css</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">css</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">├─</span> <span class="n">img</span> -<span class="err">│</span> <span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">image</span> <span class="n">files</span><span class="p">]</span> -<span class="err">│</span> <span class="err">└─</span> <span class="n">js</span> -<span class="err">│</span> <span class="err">└─</span> <span class="p">[</span><span class="n">javascript</span> <span class="n">files</span><span class="p">]</span> -<span class="err">└──</span> <span class="n">template</span> - <span class="err">├─</span> <span class="n">base</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">index</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="n">page</span><span class="p">.</span><span class="n">html</span> - <span class="err">├─</span> <span class="p">[...]</span> - <span class="err">└─</span> <span class="n">article</span><span class="p">.</span><span class="n">html</span> -</pre></div> - - -<p>Sachant que les fichiers .html sont en réalité des fichiers suivant la syntaxe -django, et utilisent des variables particulières telles <code>{{ article.content }}</code>, -par exemple. La syntaxe complète est très bien documentée dans la <a href="http://docs.getpelican.com/en/3.2/themes.html#templates-and-variables">doc</a> de -pelican.</p> -<p>L'un des grands avantages de pelican est aussi la facilité qu'il offre quand a -la mise a jour du blog.<br /> -En effet, il offre un système de Makefiles permettant, grâce a de nombreuses -cibles de compilation, de régénérer le site entier, de ne générer que les -fichiers modifiés depuis la dernière génération, de générer uniquement les -fichiers n'existant pas la dernière fois, etc... -La gestion du projet en devient donc très simple, puisque après avoir écrit un -article, il suffit de faire un <code>make html</code> pour mettre a jour le blog.</p> -<p>De plus, le système de wordpress commençait a ne plus me convenir, du fait du -manque de customisation, du fait que ça soit du PHP (beurk), etc. La, avec -pelican, je contrôle bien plus ce qui est mis sur le serveur (puisque c'est moi -qui ait modifié les templates et le css), c'est lisible (puisque c'est du -python, par opposition au PHP...), et c'est plus "efficace". Le markdown est -très pratique, je peux utiliser mon éditeur de texte de prédilection pour faire -les articles, je n'ai pas besoin d'un accès continu au net, bref, c'est plus -efficace.</p> -<p>En ce qui concerne les points négatifs : </p> -<ul> -<li> -<p>Perte des commentaires: - Je vous propose de vous référer a l'article de Gordontesos <a href="http://gordon.re/hacktivisme/la-necessite-des-commentaires.html">ici</a> quand a - mon avis sur ce sujet.</p> -</li> -<li> -<p>Perte du bouton flattr: - Il va bientôt être remis, c'est juste un manque de temps de ma part, mais vu - que toutes les pages passent par les mêmes templates, c'est assez facile a - faire.</p> -</li> -<li> -<p>Perte du spam: - Pourquoi c'est dans les points négatifs, ca?</p> -</li> -<li> -<p>Temps d'adaptation et d'appréhension du système: - Oui, pendant encore un certain temps, il y aura des glitchs plus ou moins - réguliers sur le blog, c'est parce que j'apprend a me servir de ce système - et que j'apprend du css et du html. Ca arrive, ca passera, mais dans tous - les cas ca me permet d'apprendre plein de choses, donc je mets plutôt ca - dans la catëgorie positive.</p> -</li> -</ul> -<p>Voila, c'est mon retour d'expérience sur pelican. A plus. </p>wxcafeWed, 12 Jun 2013 19:14:00 +0200tag:,2013-06-12:home/wxcafe/code/blog-source/output/posts/redesign-du-blog/Updatefile:///home/wxcafe/code/blog-source/output/posts/update/<p>Juste une petite note pour annoncer le prochain article, consacré a la -fabrication d'une PirateBox basée sur un Raspberry Pi. Voila, a bientôt -sur le blog!</p>WxcafeSat, 05 Jan 2013 18:32:00 +0100tag:,2013-01-05:home/wxcafe/code/blog-source/output/posts/update/Update a propos du blogfile:///home/wxcafe/code/blog-source/output/posts/update-a-propos-du-blog/<p>Bonsoir! Un petit post pour faire un peu le point sur ce blog.<br /> -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :</p> -<ul> -<li> -<p>Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (<a href="https://twitter.com/wxcafe">@Wxcafe</a>)</p> -</li> -<li> -<p>Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.</p> -</li> -</ul> -<p>A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.</p> -<p>Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P</p> -<p>Ceci dit, je vais bosser un peu sur le prochain article.</p> -<p>A plus tard!</p>WxcafeTue, 18 Sep 2012 16:57:00 +0200tag:,2012-09-18:home/wxcafe/code/blog-source/output/posts/update-a-propos-du-blog/Débuts, présentation, etc...file:///home/wxcafe/code/blog-source/output/posts/debuts-presentation-etc/<p>Bonjour!</p> -<p>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)</p> -<p>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. </p> -<p>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.</p> -<p>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.</p> -<p>Merci beaucoup de votre attention, et a bientôt!</p>WxcafeSat, 18 Aug 2012 20:27:00 +0200tag:,2012-08-18:home/wxcafe/code/blog-source/output/posts/debuts-presentation-etc/ \ No newline at end of file diff --git a/output/feeds/feed.rss.programmation.xml b/output/feeds/feed.rss.programmation.xml deleted file mode 100644 index 11e7258..0000000 --- a/output/feeds/feed.rss.programmation.xml +++ /dev/null @@ -1,198 +0,0 @@ - -Wxcaféfile:///home/wxcafe/code/blog-source/output/Sat, 08 Sep 2012 18:15:00 +0200Introduction a bash en tant que language de programmation.file:///home/wxcafe/code/blog-source/output/posts/introduction-a-bash-en-tant-que-language-de-programmation/<p>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...).</p> -<p>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. </p> -<p>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.)</p> -<p>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. </p> -<p>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:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="c"># La ligne du dessus est très importante, c&#39;est elle qui dit a bash quel doit être </span> -<span class="c"># l&#39;interpreteur des commandes écrites dans ce script. Ici, on dit a bash d&#39;interpréter </span> -<span class="c"># lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire </span> -<span class="c"># executer du python, par exemple, en mettant #!/usr/bin/python a la place.</span> -<span class="nb">echo</span> <span class="s2">&quot;this is a test of bash as a simple script manager&quot;</span> <span class="c"># echo est une commande d&#39;affichage de message.</span> -<span class="nb">echo</span> <span class="s2">&quot;what&#39;s your name, user?&quot;</span> -<span class="nb">read </span>your_name <span class="c"># la commande read permet de demander a l&#39;utilisateur de donner une </span> -<span class="c"># information, stockée dans la variable en paramètre. </span> -<span class="nb">echo</span> <span class="nv">$your_name</span> <span class="s2">&quot;is your name&quot;</span> <span class="c"># echo permet aussi d&#39;afficher la valeur de variables. </span> -<span class="c"># Ici, on renvoie la variable remplie précédemment, suivie d&#39;un message. </span> -<span class="nb">exit</span> <span class="c"># cet appel a exit n&#39;est pas obligatoire, mais donne un aspect plus </span> -<span class="c"># propre au code. Il ne quittera pas la session de terminal, cependant.</span> -</pre></div> -</td></tr></table> - -<p>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:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash </span> -<span class="nb">echo</span> <span class="s2">&quot;welcome to this second bash program. would you please kindly enter the name of the machine you&#39;re running this on?&quot;</span> -<span class="nb">read </span>host_name -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> <span class="o">==</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## 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. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you told the truth!&quot;</span> -<span class="k">fi</span> <span class="c">## le fi est la commande fermant le if, tout comme le EndIf en basic. C&#39;est un peu vieillot, mais important en bash. </span> -<span class="k">if</span> <span class="o">[</span> <span class="nv">$host_name</span> !<span class="o">=</span> <span class="nv">$HOSTNAME</span> <span class="o">]</span> <span class="c">## l&#39;opérateur != est l&#39;inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. </span> -<span class="k">then </span><span class="nb">echo</span> <span class="s2">&quot;you lied!&quot;</span> -<span class="k">fi </span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>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.</p> -<p>Passons maintenant au while:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1 -2 -3 -4 -5 -6 -7</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;what is your name?&quot;</span> -<span class="nb">read </span>name -<span class="k">while</span> <span class="o">[</span> 1 &lt; 10 <span class="o">]</span> <span class="c">## le while se présente sous la forme while (truc); do (machin); done. Les [] sont en fait des programmes differents, inclus dans bash.</span> -<span class="k">do </span><span class="nb">echo</span> <span class="s2">&quot;i love&quot;</span> <span class="nv">$name</span> -<span class="k">done</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>Ce petit programme permet d'observer les bases de while (qui est la -boucle de base en bash).</p> -<p>Le troisième opérateur de bash est case. Voyons:</p> -<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24</pre></div></td><td class="code"><div class="highlight"><pre><span class="c">#!/bin/bash</span> -<span class="nb">echo</span> <span class="s2">&quot;please enter a number between one and five&quot;</span> -<span class="nb">read </span>number -<span class="k">case</span> <span class="nv">$number</span> in -1<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was one&quot;</span> -;; -2<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was two&quot;</span> -;; -3<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was three&quot;</span> -;; -4<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was four&quot;</span> -;; -5<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;the choosen number was five&quot;</span> -;; -*<span class="o">)</span> -<span class="nb">echo</span> <span class="s2">&quot;this number is not correct&quot;</span> -;; -<span class="k">esac</span> -<span class="nb">exit</span> -</pre></div> -</td></tr></table> - -<p>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.<br /> -(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.</p> -<p>Quelques notions manquent ici:<br /> -- 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.<br /> -- 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.<br /> -être utilisées dans un programme bash.<br /> -- 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.</p> -<p>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.<br /> -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.</p> -<p>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)</p>WxcafeSat, 08 Sep 2012 18:15:00 +0200tag:,2012-09-08:home/wxcafe/code/blog-source/output/posts/introduction-a-bash-en-tant-que-language-de-programmation/ \ No newline at end of file diff --git a/output/feeds/feed.rss.teaching.xml b/output/feeds/feed.rss.teaching.xml deleted file mode 100644 index 3b4ad13..0000000 --- a/output/feeds/feed.rss.teaching.xml +++ /dev/null @@ -1,344 +0,0 @@ - -Wxcaféfile:///home/wxcafe/code/blog-source/output/Sat, 16 May 2015 02:00:00 +0200SSL - STARTTLSfile:///home/wxcafe/code/blog-source/output/posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement -récent, par rapport a l&rsquo;histoire d&rsquo;Internet. Sa mise en place pose -problème : les protocoles existants ne s&rsquo;accommodent qu&rsquo;assez mal de recevoir -soudainement un flot de données chiffrées, mais développer de nouveaux -protocoles est complexe et n&rsquo;apporte rien d&rsquo;intéressant. Pour palier a ce -problème, deux solutions sont apparues.</p> -<p>Le première consiste à faire écouter les services sur un -autre port, dans un tunnel SSL. De cette façon, le service existant écoute -normalement, mais il ne répond pas directement aux requêtes. A la place, un -tunnel SSL est mis en place, et les requêtes et les réponses passent dans le -tunnel (ou elles apparaissent donc chiffrées pour l&rsquo;extérieur). Cela permet de -proposer un service chiffré en modifiant de façon minimale le programme, au prix -de devoir aussi changer tous les clients, et de devoir les orienter sur un autre -port.</p> -<p>L&rsquo;autre approche qui a été utilisée est une approche d&rsquo;<em>upgrade</em>. La -communication commence en mode non chiffré, puis le client demande l&rsquo;upgrade de -la connexion vers le mode chiffré s&rsquo;il le supporte, les deux machines -machines font un <em>handshake</em> SSL et la communication continue a travers le -tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls -les clients capables de passer en SSL le feront, ce qui permet de faire la &ldquo;mise -a jour&rdquo; en douceur.</p> -<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un -service &ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien -un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br /> -La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout -d&rsquo;abord, il permet de n&rsquo;utiliser qu&rsquo;un seul port : ça permet de simplifier la -configuration du firewall. En plus de ça, il permet aux clients &ldquo;anciens&rdquo; (ceux -qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se -connecter, même si cela signifie que leurs informations seront transmises en -clair. Surtout, il permet d&rsquo;éviter aux utilisateurs d&rsquo;avoir a configurer leurs -clients. Si le client supporte le chiffrement, il l&rsquo;activera de lui même s&rsquo;il -voit qu&rsquo;il est disponible.<br /> -Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C&rsquo;est mieux pour la sécurité -de tout le monde.</p>WxcafeSat, 16 May 2015 02:00:00 +0200tag:,2015-05-16:home/wxcafe/code/blog-source/output/posts/ssl-starttls/Les systèmes de fichiersfile:///home/wxcafe/code/blog-source/output/posts/les-systemes-de-fichiers/<p>Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.</p> -<p>Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?</p> -<p>Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(<a href="http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s">kibioctet</a>), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). </p> -<p>Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. </p> -<p>Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.</p> -<p>Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.</p> -<p>Détaillons maintenant les types de fichiers les plus répandus:</p> -<ul> -<li> -<p>FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.</p> -</li> -<li> -<p>NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.</p> -</li> -<li> -<p>ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.</p> -</li> -<li> -<p>Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.</p> -</li> -<li> -<p>ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)</p> -</li> -<li> -<p>Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec <a href="http://fr.wikipedia.org/wiki/LVM">LVM</a>, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.</p> -</li> -<li> -<p>HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir</p> -</li> -<li> -<p>ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...</p> -</li> -</ul> -<p>Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...</p> -<p>Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)</p> -<p>Bon courage, et bon choix pour votre prochain système.</p>WxcafeTue, 25 Sep 2012 10:28:00 +0200tag:,2012-09-25:home/wxcafe/code/blog-source/output/posts/les-systemes-de-fichiers/Les différentes couches d'un système d'exploitationfile:///home/wxcafe/code/blog-source/output/posts/les-differentes-couches-dun-systeme-dexploitation/<p>Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.</p> -<p>Un système d'exploitation (de type UNIX, \&lt;troll>enfin un vrai système quoi. -\&lt;/troll>) incorpore plusieurs systèmes de couches.</p> -<p>Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. </p> -<p>Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")</p> -<p>Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"</p> -<p>Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre</p> -<p>Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux</p> -<p>Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.</p> -<p>Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.</p> -<p>Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...</p> -<p>Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.</p> -<p>Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.</p> -<p>(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)</p> -<p>Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)</p> -<p>Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.</p> -<p>De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.</p> -<p>Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels</p>WxcafeThu, 06 Sep 2012 23:29:00 +0200tag:,2012-09-06:home/wxcafe/code/blog-source/output/posts/les-differentes-couches-dun-systeme-dexploitation/La programmation expliquée simplementfile:///home/wxcafe/code/blog-source/output/posts/la-programmation-expliquee-simplement/<p>Salut!<br /> -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é. </p> -<p>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.<br /> -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<br /> -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. </p> -<p>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.<br /> -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. </p> -<p>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.<br /> -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. </p> -<p>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 </p> -<p>Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :</p> -<div class="highlight"><pre><span class="cp">#include </span> -<span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> -<span class="n">printf</span><span class="p">(</span><span class="s">&quot;hello world&quot;</span><span class="p">);</span> -<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> - - -<p>le même programme en python s'écrit :</p> -<div class="highlight"><pre><span class="n">print</span> <span class="s">&quot;hello world&quot;</span> -</pre></div> - - -<p>et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. </p> -<p>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. </p> -<p>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.)</p> -<p>Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.<br /> -A bientôt!</p>WxcafeMon, 27 Aug 2012 00:22:00 +0200tag:,2012-08-27:home/wxcafe/code/blog-source/output/posts/la-programmation-expliquee-simplement/GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mèrefile:///home/wxcafe/code/blog-source/output/posts/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/<p>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.</p> -<p>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.</p> -<p>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?</p> -<p>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 <a href="http://debian.org">Debian</a>, qui est l'une -des distributions les plus importantes, ou encore <a href="http://ubuntu.com">Ubuntu</a>, qui est -l'une des plus connues et des plus simples a utiliser.</p> -<p>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 : <a href="unity.ubuntu.com">Unity</a>, la -nouvelle interface d'Ubuntu; <a href="gnome.org">GNOME</a> , une interface qui vise a la -simplicité; ou encore <a href="http://kde.org/">KDE</a>, une interface utilisateur ressemblant a -Windows 7.</p> -<p>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.</p> -<p>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.</p> -<p>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 :)</p> -<p>A bientôt!</p>WxcafeWed, 22 Aug 2012 20:33:00 +0200tag:,2012-08-22:home/wxcafe/code/blog-source/output/posts/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/ \ No newline at end of file diff --git a/output/feeds/feed.rss.tutorial.xml b/output/feeds/feed.rss.tutorial.xml deleted file mode 100644 index dd04f48..0000000 --- a/output/feeds/feed.rss.tutorial.xml +++ /dev/null @@ -1,368 +0,0 @@ - -Wxcaféfile:///home/wxcafe/code/blog-source/output/Fri, 07 Nov 2014 13:04:00 +0100OpenSMTPd comme serveur mail sous debianfile:///home/wxcafe/code/blog-source/output/posts/opensmtpd-debian/<p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de -changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la -gestion de mon système de mails.</p> -<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais -effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un -projet originaire d'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un -serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).</p> -<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA -(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou -serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du -destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le -mail au destinataire.</p> -<p>Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis -le serveur, des yeux pour la lecture).</p> -<p>Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et -<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> -pour filtrer les mails entrants et sortants. -Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> -<div class="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span> - <span class="err">│╭──────────────</span><span class="o">&gt;</span><span class="err">│────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">───────────</span><span class="o">&gt;</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o">&lt;</span><span class="err">───│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span> - <span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span> -<span class="o">&lt;</span><span class="err">───────────│</span><span class="o">&lt;</span><span class="err">────────────┴─</span><span class="o">&gt;</span><span class="err">│─────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">&gt;</span><span class="err">│─────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span> -</pre></div> - - -<p>Normalement, ceci devrait être a peu près clair. -Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de -nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, -qui a ce moment-ci trie en fonction de la destination : les mails gérés -par le domaine vont via dovecot dans les boites mail des destinataires -locaux, les mails exterieurs vont directement vers le MTA du serveur -distant.</p> -<p>Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon -dont les différents services vont communiquer.</p> -<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de -signer, nous allons profiter de cette configuration et donc lui parler en SMTP -sur ces ports.</p> -<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail -Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, -<code>/var/run/dovecot/lmtp</code>).</p> -<p>Ainsi, pour reprendre le schéma présenté plus haut :</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span> - <span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> -<span class="mi">25</span> <span class="o">&lt;</span><span class="err">────────│</span><span class="o">&lt;</span><span class="err">───────────╯</span> <span class="err">│</span> - <span class="err">╰───────────────╯</span> -</pre></div> - - -<p>Pour les mails sortants; et</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span> - <span class="err">│</span> <span class="err">╰─</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">&gt;</span><span class="err">│───────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span> -</pre></div> - - -<p>Pour les mails entrants.</p> -<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai -ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même</p> -<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. -Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce -post</a>)</p> -<p>Tout d'abord, commençons par installer les programmes nécessaires :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span> -<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> -</pre></div> - - -<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> -<p><code>/etc/smtpd.conf</code></p> -<div class="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span> -<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span> - -<span class="err">##</span> <span class="nx">Certs</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">&quot;/etc/certs/exem.pl.crt&quot;</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">&quot;/etc/certs/exem.pl.key&quot;</span> - -<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> - -<span class="err">##</span> <span class="nx">Aliases</span> -<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span> - -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span> -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span> - -<span class="err">##</span> <span class="nx">Receiving</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o">&lt;</span><span class="nx">aliases</span><span class="o">&gt;</span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">&quot;/var/run/dovecot/lmtp&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span> -<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">&quot;exem.pl&quot;</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10024&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span> - -<span class="err">##</span> <span class="nx">Sending</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span> -<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10026&quot;</span> -<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">loops...</span> -</pre></div> - - -<p>Expliquons un peu ce fichier de configuration :</p> -<ul> -<li>Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.</li> -<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : - port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> -<li>Les alias sont définis juste après</li> -<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : - 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"</li> -<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail - traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore - été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 - donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième - ligne matchant tous les mails arrivant et la première seulement ceux filtrés, - inverser leur sens voudrait dire que les mails seraient toujours renvoyés a - amavis</li> -<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que - pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au - dessus.</li> -</ul> -<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit -écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne -mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du -POP3[s], différents guides sont trouvables facilement sur internet.</p> -<p><code>/etc/dovecot/dovecot.conf</code></p> -<div class="highlight"><pre><span class="cp">## Dovecot configuration file</span> - -<span class="cp"># basic config</span> -<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">&quot;%Y-%m-%d %H:%M:%S &quot;</span> -<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</span> - -<span class="cp"># authentication</span> -<span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -<span class="n">userdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span> -<span class="p">}</span> - -<span class="cp"># the protocols we use</span> -<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</span> - -<span class="cp"># ssl config</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span> - -<span class="cp">## configuring services </span> -<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span> -<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span> - <span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span> - <span class="n">port</span><span class="o">=</span><span class="mi">0</span> - <span class="p">}</span> -<span class="p">}</span> - -<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span> - <span class="p">}</span> -<span class="p">}</span> - -<span class="cp">## configuring protocols</span> -<span class="cp"># the dovecot lda, we set it to use sieve</span> -<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> - -<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> - -<span class="n">plugin</span> <span class="p">{</span> - <span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span> - <span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>par</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>pour identifier les utilisateurs système</strong></p> -<p>Ici aussi, voyons comment ce fichier est structuré :</p> -<ul> -<li>Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li> -<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs. - Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs - mots de passe avec PAM (ou BSDAuth)</li> -<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> -<li>Nous configurons le SSL</li> -<li>Le section suivante contient la configuration des services. Nous avons en - premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. - La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise</li> -<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> -<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et - quel dossier utiliser pour sa configuration.</li> -</ul> -<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir -a deux choses : signer les emails sortants, et filtrer les emails entrants. Il -doit donc écouter sur les port 10026 pour les signatures et 10024 pour le -filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun -risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les -modifications nécessaires a la fin du fichier.</p> -<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) -<code>/etc/amavis.conf</code> (OpenBSD)</p> -<div class="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span> - -<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="n">dkim_key</span><span class="p">(</span><span class="s">&quot;exem.pl&quot;</span><span class="p">,</span> <span class="s">&quot;main&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/certs/dkim.key&quot;</span> <span class="p">);</span> - -<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span> - <span class="p">{</span> <span class="sc">&#39;.&#39;</span> <span class="o">=&gt;</span> - <span class="p">{</span> <span class="n">ttl</span> <span class="o">=&gt;</span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">&#39;</span> <span class="p">}</span> - <span class="p">}</span> -<span class="p">);</span> - -<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">MYNETS</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">os_fingerprint_method</span> <span class="o">=&gt;</span> <span class="n">undef</span><span class="p">,</span> -<span class="p">};</span> - -<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">&#39;</span><span class="mi">10026</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">;</span> - -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">allow_disclaimers</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">virus_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">spam_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">warnbadhsender</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">forward_method</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">&#39;</span><span class="p">,</span> - <span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="err">&#39;</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">&#39;</span><span class="p">],</span> - <span class="n">bypass_banned_checks_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> - <span class="n">terminate_dsn_on_notify_success</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> -<span class="p">};</span> - -<span class="cp">#------------ Do not modify anything below this line -------------</span> -<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</span> -</pre></div> - - -<p>A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se - trouve la clé privée servant a signer les emails. -- le second définit les options DKIM que nous souhaitons utiliser comme défaut. - Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> -- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les - paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel - ils viennent. -- nous savons que les emails venants du port 10026 sont sortants, nous les - traitons donc comme tel -- le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre - serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC - 4871</a>. Nous déclarons l'adresse a - prévenir en cas de spam/virus venants de notre système, et que nous voulons - être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de - les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!</p> -<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature -des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en -fait inclus par défaut dans amavis.</p> -<p>Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un -tutorial</a>) -mais de nombreuses autre méthodes existent. -Il nous reste encore a configurer spamassassin :</p> -<div class="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span> -<span class="cp"># report_safe 1</span> -<span class="n">required_score</span> <span class="mf">2.0</span> -<span class="cp"># use_bayes 1</span> -<span class="cp"># bayes_auto_learn 1</span> -<span class="cp"># bayes_ignore_header X-Bogosity</span> -<span class="cp"># bayes_ignore_header X-Spam-Flag</span> -<span class="cp"># bayes_ignore_header X-Spam-Status</span> -<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -<span class="cp"># shortcircuit USER_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span> -<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span> -<span class="cp"># shortcircuit BAYES_99 spam</span> -<span class="cp"># shortcircuit BAYES_00 ham</span> - -<span class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -</pre></div> - - -<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser -le required_score pour ma part.</p> -<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et -spamassassin, et tout devrait fonctionner parfaitement</p> -<p>Bon courage pour votre hosting de mail ensuite...</p>WxcaféFri, 07 Nov 2014 13:04:00 +0100tag:,2014-11-07:home/wxcafe/code/blog-source/output/posts/opensmtpd-debian/ \ No newline at end of file diff --git a/output/feeds/feed.teaching.xml b/output/feeds/feed.teaching.xml deleted file mode 100644 index 11639e3..0000000 --- a/output/feeds/feed.teaching.xml +++ /dev/null @@ -1,344 +0,0 @@ - -Wxcaféfile:///home/wxcafe/code/blog-source/output/2015-05-16T02:00:00+02:00SSL - STARTTLS2015-05-16T02:00:00+02:00Wxcafetag:,2015-05-16:home/wxcafe/code/blog-source/output/posts/ssl-starttls/<p>Le chiffrement SSL pour les services en ligne est un problème relativement -récent, par rapport a l&rsquo;histoire d&rsquo;Internet. Sa mise en place pose -problème : les protocoles existants ne s&rsquo;accommodent qu&rsquo;assez mal de recevoir -soudainement un flot de données chiffrées, mais développer de nouveaux -protocoles est complexe et n&rsquo;apporte rien d&rsquo;intéressant. Pour palier a ce -problème, deux solutions sont apparues.</p> -<p>Le première consiste à faire écouter les services sur un -autre port, dans un tunnel SSL. De cette façon, le service existant écoute -normalement, mais il ne répond pas directement aux requêtes. A la place, un -tunnel SSL est mis en place, et les requêtes et les réponses passent dans le -tunnel (ou elles apparaissent donc chiffrées pour l&rsquo;extérieur). Cela permet de -proposer un service chiffré en modifiant de façon minimale le programme, au prix -de devoir aussi changer tous les clients, et de devoir les orienter sur un autre -port.</p> -<p>L&rsquo;autre approche qui a été utilisée est une approche d&rsquo;<em>upgrade</em>. La -communication commence en mode non chiffré, puis le client demande l&rsquo;upgrade de -la connexion vers le mode chiffré s&rsquo;il le supporte, les deux machines -machines font un <em>handshake</em> SSL et la communication continue a travers le -tunnel SSL. Le service peut continuer a écouter sur son port habituel, et seuls -les clients capables de passer en SSL le feront, ce qui permet de faire la &ldquo;mise -a jour&rdquo; en douceur.</p> -<p>Il est souvent demandé quelle est la meilleure méthode pour mettre en place un -service &ndash; laisser un port pour le SSL et un pour le trafic non chiffré, ou bien -un seul, avec <code>STARTTLS</code>, qui <em>upgrade</em> les connexions si nécessaire.<br /> -La réponse est que <code>STARTTLS</code> est plus interessant, pour plusieurs raisons. Tout -d&rsquo;abord, il permet de n&rsquo;utiliser qu&rsquo;un seul port : ça permet de simplifier la -configuration du firewall. En plus de ça, il permet aux clients &ldquo;anciens&rdquo; (ceux -qui ne supportent pas SSL, donc ceux qui devraient être changés) de toujours se -connecter, même si cela signifie que leurs informations seront transmises en -clair. Surtout, il permet d&rsquo;éviter aux utilisateurs d&rsquo;avoir a configurer leurs -clients. Si le client supporte le chiffrement, il l&rsquo;activera de lui même s&rsquo;il -voit qu&rsquo;il est disponible.<br /> -Bref, mettez en place du <code>STARTTLS</code>, et pas du SSL. C&rsquo;est mieux pour la sécurité -de tout le monde.</p>Les systèmes de fichiers2012-09-25T10:28:00+02:00Wxcafetag:,2012-09-25:home/wxcafe/code/blog-source/output/posts/les-systemes-de-fichiers/<p>Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.</p> -<p>Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?</p> -<p>Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(<a href="http://fr.wikipedia.org/wiki/Kibioctet#Multiples_normalis.C3.A9s">kibioctet</a>), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée). </p> -<p>Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte. </p> -<p>Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.</p> -<p>Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.</p> -<p>Détaillons maintenant les types de fichiers les plus répandus:</p> -<ul> -<li> -<p>FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.</p> -</li> -<li> -<p>NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.</p> -</li> -<li> -<p>ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.</p> -</li> -<li> -<p>Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.</p> -</li> -<li> -<p>ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)</p> -</li> -<li> -<p>Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec <a href="http://fr.wikipedia.org/wiki/LVM">LVM</a>, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.</p> -</li> -<li> -<p>HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir</p> -</li> -<li> -<p>ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...</p> -</li> -</ul> -<p>Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...</p> -<p>Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)</p> -<p>Bon courage, et bon choix pour votre prochain système.</p>Les différentes couches d'un système d'exploitation2012-09-06T23:29:00+02:00Wxcafetag:,2012-09-06:home/wxcafe/code/blog-source/output/posts/les-differentes-couches-dun-systeme-dexploitation/<p>Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.</p> -<p>Un système d'exploitation (de type UNIX, \&lt;troll>enfin un vrai système quoi. -\&lt;/troll>) incorpore plusieurs systèmes de couches.</p> -<p>Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier. </p> -<p>Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")</p> -<p>Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"</p> -<p>Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre</p> -<p>Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux</p> -<p>Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.</p> -<p>Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.</p> -<p>Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...</p> -<p>Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.</p> -<p>Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.</p> -<p>(Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)</p> -<p>Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)</p> -<p>Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.</p> -<p>De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.</p> -<p>Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels</p>La programmation expliquée simplement2012-08-27T00:22:00+02:00Wxcafetag:,2012-08-27:home/wxcafe/code/blog-source/output/posts/la-programmation-expliquee-simplement/<p>Salut!<br /> -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é. </p> -<p>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.<br /> -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<br /> -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. </p> -<p>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.<br /> -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. </p> -<p>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.<br /> -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. </p> -<p>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 </p> -<p>Ainsi, en C, un langage de niveau relativement bas, pour afficher -"hello world" sur l'écran, le code nécessaire est :</p> -<div class="highlight"><pre><span class="cp">#include </span> -<span class="kt">void</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span> -<span class="n">printf</span><span class="p">(</span><span class="s">&quot;hello world&quot;</span><span class="p">);</span> -<span class="k">return</span> <span class="mi">0</span><span class="p">;</span> -<span class="p">}</span> -</pre></div> - - -<p>le même programme en python s'écrit :</p> -<div class="highlight"><pre><span class="n">print</span> <span class="s">&quot;hello world&quot;</span> -</pre></div> - - -<p>et n'a pas besoin d'être compilé , puisqu'il peut être intepreté -directement. </p> -<p>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. </p> -<p>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.)</p> -<p>Voila, je vous laisse sur le fonctionnement de Java et de Python, et je -vais me coucher.<br /> -A bientôt!</p>GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère2012-08-22T20:33:00+02:00Wxcafetag:,2012-08-22:home/wxcafe/code/blog-source/output/posts/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/<p>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.</p> -<p>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.</p> -<p>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?</p> -<p>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 <a href="http://debian.org">Debian</a>, qui est l'une -des distributions les plus importantes, ou encore <a href="http://ubuntu.com">Ubuntu</a>, qui est -l'une des plus connues et des plus simples a utiliser.</p> -<p>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 : <a href="unity.ubuntu.com">Unity</a>, la -nouvelle interface d'Ubuntu; <a href="gnome.org">GNOME</a> , une interface qui vise a la -simplicité; ou encore <a href="http://kde.org/">KDE</a>, une interface utilisateur ressemblant a -Windows 7.</p> -<p>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.</p> -<p>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.</p> -<p>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 :)</p> -<p>A bientôt!</p> \ No newline at end of file diff --git a/output/feeds/feed.tutorial.xml b/output/feeds/feed.tutorial.xml deleted file mode 100644 index 5455714..0000000 --- a/output/feeds/feed.tutorial.xml +++ /dev/null @@ -1,368 +0,0 @@ - -Wxcaféfile:///home/wxcafe/code/blog-source/output/2014-11-07T13:04:00+01:00OpenSMTPd comme serveur mail sous debian2014-11-07T13:04:00+01:00Wxcafétag:,2014-11-07:home/wxcafe/code/blog-source/output/posts/opensmtpd-debian/<p>J'avais dit il y a un certain temps que j'allais écrire un tutoriel expliquant -comment gérer ses mails soi-même. Il se trouve que j'ai récemment décidé de -changer le serveur qui héberge (entre autres) ce blog, et que ce dernier héberge -aussi mes emails. J'ai donc totalement changé d'infrastructure quand a la -gestion de mon système de mails.</p> -<p>Ainsi, j'ai décidé de passer de Postfix a OpenSMTPd, changement que je voulais -effectuer depuis un certain temps. <a href="https://opensmtpd.org">OpenSMTPd</a> est un -projet originaire d'<a href="http://openbsd.org">OpenBSD</a> qui a pour but de fournir un -serveur SMTP fiable, simple, rapide, et surtout sécurisé (les même buts que ceux -qu'a le projet OpenBSD, globalement).</p> -<p>Pour rappel, le système d'emails fonctionne d'une façon très simple : votre MUA -(Mail User Agent, ou client email) contacte le MTA (Mail Transport Agent, ou -serveur SMTP) de votre fournisseur email, qui contacte le MTA du fournisseur du -destinataire, qui lui même contacte le MDA (Mail Delivery Agent) qui délivre le -mail au destinataire.</p> -<p>Si vous avez bien suivi, vous pouvez voir que je n'ai pas parlé de récupération -ni de lecture des mails. C'est pour une raison simple, qui est que ces taches -sont remplies par d'autres services encore (IMAP/POP pour la récupération depuis -le serveur, des yeux pour la lecture).</p> -<p>Or ce qui nous intéresse ici, ce n'est pas simplement d'envoyer et de recevoir -des emails mais bien aussi de pouvoir les récupérer et les lire, et c'est pour -ça que ce tutoriel ne parlera pas que d'OpenSMTPd mais aussi de -<a href="http://dovecot.org/">Dovecot</a> qui fait office de serveur IMAP et -<a href="http://www.ijs.si/software/amavisd/">amavis</a>/<a href="http://spamassassin.apache.org/">spamassassin</a> -pour filtrer les mails entrants et sortants. -Le schéma suivant explique la façon dont les mails sont gérés sur le système</p> -<div class="highlight"><pre> <span class="err">╭────────────────╮</span> <span class="err">╭──────────╮</span> - <span class="err">│╭──────────────</span><span class="o">&gt;</span><span class="err">│────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">filter</span> <span class="err">───</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">mail</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">───────────</span><span class="o">&gt;</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">───</span> <span class="n">from</span> <span class="n">filter</span><span class="o">&lt;</span><span class="err">───│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰──────────╯</span> - <span class="n">mail</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭──────────╮</span> -<span class="o">&lt;</span><span class="err">───────────│</span><span class="o">&lt;</span><span class="err">────────────┴─</span><span class="o">&gt;</span><span class="err">│─────</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">MDA</span> <span class="err">─────</span><span class="o">&gt;</span><span class="err">│─────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰────────────────╯</span> <span class="err">╰──────────╯</span> -</pre></div> - - -<p>Normalement, ceci devrait être a peu près clair. -Pour expliquer vite fait, les emails entrants (venant des utilisateurs mais -aussi d'autres correspondants) sont transmis a OpenSMTPd, qui envoie tout a -<code>amavis</code>, qui vérifie a la fois les spams et les malwares pour les mails -venants de l'exterieur, et qui signe avec DKIM pour les mails venants de -nos utilisateurs, puis qui rentransmet les mails filtrés/signés a OpenSMTPd, -qui a ce moment-ci trie en fonction de la destination : les mails gérés -par le domaine vont via dovecot dans les boites mail des destinataires -locaux, les mails exterieurs vont directement vers le MTA du serveur -distant.</p> -<p>Voyons comment mettre cela en place. Tout d'abord, il faut décider de la façon -dont les différents services vont communiquer.</p> -<p>Déjà, amavis étant configuré par défaut pour écouter (en SMTP) sur le port -10024 et répondre sur le port 10025 quand il s'agit de filtrer et -écouter sur le port 10026 et répondre sur le port 10027 quand il s'agit de -signer, nous allons profiter de cette configuration et donc lui parler en SMTP -sur ces ports.</p> -<p>Quand a Dovecot, nous allons lui transmettre les emails en LMTP (Local Mail -Transfer Protocol), non pas sur un port mais via un socket (dans ce cas précis, -<code>/var/run/dovecot/lmtp</code>).</p> -<p>Ainsi, pour reprendre le schéma présenté plus haut :</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭───────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10026</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10027</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span> <span class="p">(</span><span class="n">sign</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰───────────╯</span> - <span class="n">SMTP</span> <span class="n">out</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> -<span class="mi">25</span> <span class="o">&lt;</span><span class="err">────────│</span><span class="o">&lt;</span><span class="err">───────────╯</span> <span class="err">│</span> - <span class="err">╰───────────────╯</span> -</pre></div> - - -<p>Pour les mails sortants; et</p> -<div class="highlight"><pre> <span class="err">╭───────────────╮</span> <span class="err">╭────────────╮</span> - <span class="err">│╭─────────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10024</span><span class="p">)</span> <span class="err">──</span><span class="o">&gt;</span><span class="err">│─╮</span> <span class="err">│</span> - <span class="n">SMTP</span> <span class="n">in</span> <span class="err">││</span> <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">amavis</span> <span class="err">│</span> -<span class="err">────────</span><span class="o">&gt;</span> <span class="mi">25</span><span class="err">│╯</span> <span class="n">OpenSMTPd</span> <span class="err">╭──│</span><span class="o">&lt;</span><span class="err">──</span> <span class="n">SMTP</span> <span class="p">(</span><span class="mi">10025</span><span class="p">)</span> <span class="o">&lt;</span><span class="err">──│</span><span class="o">&lt;</span><span class="err">╯</span><span class="p">(</span><span class="n">filter</span><span class="p">)</span> <span class="err">│</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╰────────────╯</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="err">╭────────────╮</span> - <span class="err">│</span> <span class="err">╰─</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">LMTP</span> <span class="p">(</span><span class="n">socket</span><span class="p">)</span> <span class="err">─</span><span class="o">&gt;</span><span class="err">│───────────</span><span class="o">&gt;</span><span class="err">│──</span><span class="o">&gt;</span> <span class="n">to</span> <span class="n">user</span><span class="err">&#39;</span><span class="n">s</span> - <span class="err">│</span> <span class="err">│</span> <span class="err">│</span> <span class="n">dovecot</span> <span class="err">│</span> <span class="n">mailbox</span> - <span class="err">╰───────────────╯</span> <span class="err">╰────────────╯</span> -</pre></div> - - -<p>Pour les mails entrants.</p> -<p>Maintenant que la théorie est claire, mettons en place tout cela. Je me baserai -ici sur le fait que vous utilisiez une plateforme Debian ou OpenBSD. Pour -d'autres plateformes, la configuration devrait être sensiblement la même</p> -<p>(Vous aurez besoin de certificats SSL pour ce guide, même self-signés. -Si vous ne savez pas comment en créer, vous pouvez aller voir <a href="http://wxcafe.net/posts/05/30/14/SSL-ou-la-securite-sur-internet/">ce -post</a>)</p> -<p>Tout d'abord, commençons par installer les programmes nécessaires :</p> -<div class="highlight"><pre><span class="n">sudo</span> <span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">opensmtpd</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">managesieved</span> -<span class="n">sudo</span> <span class="n">pkg_add</span> <span class="n">dovecot</span> <span class="n">dovecot</span><span class="o">-</span><span class="n">pigeonhole</span> <span class="n">amavisd</span><span class="o">-</span><span class="n">new</span> -</pre></div> - - -<p>Continuons en configurant OpenSMTPd tel que nous avons vu plus haut :</p> -<p><code>/etc/smtpd.conf</code></p> -<div class="highlight"><pre><span class="err">#</span> <span class="nx">This</span> <span class="nx">is</span> <span class="nx">the</span> <span class="nx">smtpd</span> <span class="nx">server</span> <span class="nx">system</span><span class="na">-wide</span> <span class="nx">configuration</span> <span class="nx">file.</span> -<span class="err">#</span> <span class="nx">See</span> <span class="nx">smtpd.conf</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span> <span class="nb">for</span> <span class="nx">more</span> <span class="nx">information.</span> - -<span class="err">##</span> <span class="nx">Certs</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nx">certificate</span> <span class="s2">&quot;/etc/certs/exem.pl.crt&quot;</span> -<span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">key</span> <span class="s2">&quot;/etc/certs/exem.pl.key&quot;</span> - -<span class="err">##</span> <span class="nx">Ports</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span><span class="p">,</span> <span class="ow">and</span> <span class="nx">how</span> <span class="k">to</span> <span class="nb">listen</span> <span class="k">on</span> <span class="nx">them</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">25</span> <span class="nx">tls</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span><span class="na">-optional</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">465</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">eth0</span> <span class="nb">port</span> <span class="mi">587</span> <span class="nx">tls</span><span class="na">-require</span> <span class="nx">pki</span> <span class="nx">exem.pl</span> <span class="nb">hostname</span> <span class="nx">exem.pl</span> <span class="nb">auth</span> <span class="nx">mask</span><span class="na">-source</span> - -<span class="err">##</span> <span class="nx">Aliases</span> -<span class="nb">table</span> <span class="nx">aliases</span> <span class="nb">file</span><span class="p">:/</span><span class="nx">etc</span><span class="p">/</span><span class="nx">aliases</span> - -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nb">checked</span> <span class="nb">for</span> <span class="nx">spam</span><span class="p">/</span><span class="nx">malware</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10025</span> <span class="kt">tag</span> <span class="nx">Filtered</span> -<span class="err">#</span> <span class="nx">coming</span> <span class="nb">from</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">signed</span> <span class="k">with</span> <span class="nx">DKIM</span> -<span class="nb">listen</span> <span class="k">on</span> <span class="nx">lo</span> <span class="nb">port</span> <span class="mi">10027</span> <span class="kt">tag</span> <span class="nx">Signed</span> - -<span class="err">##</span> <span class="nx">Receiving</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">incoming</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Filtered</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">alias</span> <span class="o">&lt;</span><span class="nx">aliases</span><span class="o">&gt;</span> <span class="nx">deliver</span> <span class="k">to</span> <span class="nx">lmtp</span> <span class="s2">&quot;/var/run/dovecot/lmtp&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">directly</span> <span class="nx">tranfer</span> <span class="nx">incoming</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nb">checked</span> -<span class="nb">accept</span> <span class="nb">from</span> <span class="nb">any</span> <span class="nb">for</span> <span class="nx">domain</span> <span class="s2">&quot;exem.pl&quot;</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10024&quot;</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="k">to</span> <span class="nx">avoid</span> <span class="nx">infinite</span> <span class="nx">loops</span> - -<span class="err">##</span> <span class="nx">Sending</span> -<span class="err">#</span> <span class="k">if</span> <span class="nx">the</span> <span class="p">(</span><span class="nx">outgoint</span><span class="p">)</span> <span class="nx">mail</span> <span class="nx">has</span> <span class="nx">been</span> <span class="nx">through</span> <span class="nx">amavisd</span><span class="p">,</span> <span class="nx">then</span> <span class="nx">we</span> <span class="nx">can</span> <span class="nx">deliver</span> <span class="nx">it</span> -<span class="nb">accept</span> <span class="nx">tagged</span> <span class="nx">Signed</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> -<span class="err">#</span> <span class="nx">we</span> <span class="nx">tranfer</span> <span class="nx">the</span> <span class="nx">outgoing</span> <span class="nx">mail</span> <span class="k">to</span> <span class="nx">amavisd</span> <span class="k">to</span> <span class="nx">be</span> <span class="nx">signed</span> -<span class="nb">accept</span> <span class="nb">for</span> <span class="nb">any</span> <span class="nx">relay</span> <span class="nx">via</span> <span class="s2">&quot;smtp://localhost:10026&quot;</span> -<span class="err">#</span> <span class="nx">same</span><span class="p">,</span> <span class="nx">we</span> <span class="nx">have</span> <span class="k">to</span> <span class="nx">put</span> <span class="nx">these</span> <span class="n">lines</span> <span class="k">in</span> <span class="nx">this</span> <span class="k">order</span> <span class="ow">or</span> <span class="nx">infinite</span> <span class="nx">loops...</span> -</pre></div> - - -<p>Expliquons un peu ce fichier de configuration :</p> -<ul> -<li>Tout d'abord, le paragraphe nommé "Certs" contient les déclaration - d'emplacement des certificats SSL.</li> -<li>Ensuite, le paragraphe contenant les ports externes sur lesquels nous écoutons : - port 25 avec TLS optionel et ports 465 et 587 avec TLS obligatoire</li> -<li>Les alias sont définis juste après</li> -<li>Le paragraphe suivant contient les ports locaux sur lesquels nous écoutons : - 10025 (port de sortie du filtre de amavis) dont on taggue les mails sortants - comme "Filtered" et 10027 (port de sortie des mails signés par amavis) dont on - taggue les mails sortants comme "Signed"</li> -<li>Nous avons ensuite le paragraphe qui traite les mails rentrants. Si le mail - traité est taggué comme Filtered, alors il a été vérifié par amavis, et on - peut donc le transmettre au destinataire. Sinon, c'est qu'il n'a pas encore - été vérifié par amavis, donc on lui transmet pour analyse (sur le port 10024 - donc). Il est important de mettre les déclarations dans ce sens, car la - première règle qui matche l'état du paquet est appliquée. Ici, la deuxième - ligne matchant tous les mails arrivant et la première seulement ceux filtrés, - inverser leur sens voudrait dire que les mails seraient toujours renvoyés a - amavis</li> -<li>Enfin, le dernier paragraphe traite les mails sortants. De la même façon que - pour le paragraphe précédent, si le mail sortant est déjà taggué comme Signed - on le transmet au MTA du destinataire, sinon il n'a pas encore été signé par - DKIM par amavis et on le transmet donc a amavis pour qu'il le signe. Le - problème de l'ordre des lignes se pose encore, pour la même raison qu'au - dessus.</li> -</ul> -<p>Nous allons maintenant configurer dovecot. Comme nous l'avons vu, dovecot doit -écouter en LMTP via la socket <code>/var/run/dovecot/lmtp</code> et transmettre les -emails a la boite email de l'utilisateur. Il serait aussi interessant -qu'il nous permette de récuperer les mails. Pour cette configuration, on ne -mettra en place que du IMAPS. Cependant, si vous voulez mettre en place du -POP3[s], différents guides sont trouvables facilement sur internet.</p> -<p><code>/etc/dovecot/dovecot.conf</code></p> -<div class="highlight"><pre><span class="cp">## Dovecot configuration file</span> - -<span class="cp"># basic config</span> -<span class="n">info_log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="o">-</span><span class="n">info</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_path</span> <span class="o">=</span> <span class="o">/</span><span class="n">var</span><span class="o">/</span><span class="n">log</span><span class="o">/</span><span class="n">dovecot</span><span class="p">.</span><span class="n">log</span> -<span class="n">log_timestamp</span> <span class="o">=</span> <span class="s">&quot;%Y-%m-%d %H:%M:%S &quot;</span> -<span class="n">mail_location</span> <span class="o">=</span> <span class="n">maildir</span><span class="o">:%</span><span class="n">h</span><span class="o">/</span><span class="n">mail</span> - -<span class="cp"># authentication</span> -<span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -<span class="n">userdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">passwd</span> -<span class="p">}</span> - -<span class="cp"># the protocols we use</span> -<span class="n">protocols</span> <span class="o">=</span> <span class="n">imap</span> <span class="n">lmtp</span> <span class="n">sieve</span> - -<span class="cp"># ssl config</span> -<span class="n">ssl_cert</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">cert</span> -<span class="n">ssl_key</span> <span class="o">=</span> <span class="o">&lt;/</span><span class="n">etc</span><span class="o">/</span><span class="n">certs</span><span class="o">/</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span><span class="p">.</span><span class="n">key</span> -<span class="n">ssl_cipher_list</span> <span class="o">=</span> <span class="n">HIGH</span><span class="o">+</span><span class="n">kEDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">+</span><span class="n">kEECDH</span><span class="o">:</span><span class="n">HIGH</span><span class="o">:!</span><span class="n">PSK</span><span class="o">:!</span><span class="n">SRP</span><span class="o">:!</span><span class="mi">3</span><span class="n">DES</span><span class="o">:!</span><span class="n">aNULL</span> -<span class="n">ssl</span> <span class="o">=</span> <span class="n">yes</span> - -<span class="cp">## configuring services </span> -<span class="cp"># disables imap login without SSL (yes dovecot is dumb that way)</span> -<span class="n">service</span> <span class="n">imap</span><span class="o">-</span><span class="n">login</span> <span class="p">{</span> - <span class="n">inet_listener</span> <span class="n">imap</span> <span class="p">{</span> - <span class="n">port</span><span class="o">=</span><span class="mi">0</span> - <span class="p">}</span> -<span class="p">}</span> - -<span class="n">service</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">unix_listener</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">mode</span> <span class="o">=</span> <span class="mo">0666</span> - <span class="p">}</span> -<span class="p">}</span> - -<span class="cp">## configuring protocols</span> -<span class="cp"># the dovecot lda, we set it to use sieve</span> -<span class="n">protocol</span> <span class="n">lda</span> <span class="p">{</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> - -<span class="n">protocol</span> <span class="n">lmtp</span> <span class="p">{</span> - <span class="n">postmaster_address</span> <span class="o">=</span> <span class="n">whoever</span><span class="err">@</span><span class="n">exem</span><span class="p">.</span><span class="n">pl</span> - <span class="n">mail_plugins</span> <span class="o">=</span> <span class="err">$</span><span class="n">mail_plugins</span> <span class="n">sieve</span> -<span class="p">}</span> - -<span class="n">plugin</span> <span class="p">{</span> - <span class="n">sieve</span> <span class="o">=</span> <span class="o">~/</span><span class="p">.</span><span class="n">dovecot</span><span class="p">.</span><span class="n">sieve</span> - <span class="n">sieve_dir</span> <span class="o">=</span> <span class="o">~/</span><span class="n">sieve</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>ATTENTION: Sous OpenBSD, remplacez</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">pam</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>par</strong></p> -<div class="highlight"><pre><span class="n">passdb</span> <span class="p">{</span> - <span class="n">driver</span> <span class="o">=</span> <span class="n">bsdauth</span> -<span class="p">}</span> -</pre></div> - - -<p><strong>pour identifier les utilisateurs système</strong></p> -<p>Ici aussi, voyons comment ce fichier est structuré :</p> -<ul> -<li>Tout d'abord, les configurations de base : ou iront les logs, comment formater - leur datation, et l'endroit ou seront stockés les mails des utilisateurs.</li> -<li>Nous configurons ensuite la gestion de l'authentification des utilisateurs. - Ici nous identifions les utilisateurs avec le fichier /etc/passwd et leurs - mots de passe avec PAM (ou BSDAuth)</li> -<li>Nous configurons ensuite les protocoles que nous servons. Ici, nous voulons de - l'IMAPS, du LMTP local et Sieve (qui sert pour trier les messages).</li> -<li>Nous configurons le SSL</li> -<li>Le section suivante contient la configuration des services. Nous avons en - premier lieu le service IMAP, dont la configuration sert uniquement a - désactiver IMAP. En effet, dovecot ne permet d'activer IMAPS qu'en activant - IMAP avec. Comme nous ne voulons pas d'IMAP sans SSL, nous le désactivons. - La configuration de lmtp sert a attribuer des permissions plus correctes au - fifo qu'il utilise</li> -<li>Nous configurons maintenant les protocoles, pour faire fonctionner Sieve</li> -<li>enfin, nous configurons le plugin sieve en lui indiquant quel fichier et - quel dossier utiliser pour sa configuration.</li> -</ul> -<p>Enfin, il nous reste a configurer amavis. Comme expliqué, amavis va nous servir -a deux choses : signer les emails sortants, et filtrer les emails entrants. Il -doit donc écouter sur les port 10026 pour les signatures et 10024 pour le -filtrage, et répondre respectivement sur les ports 10027 et 10025 (le tout, en -SMTP. Comme toutes les transactions se font sur le loopback, il n'y a aucun -risque a utiliser des protocoles non chiffrés. -Pour OpenBSD, pensez a copier la configuration par défaut depuis -<code>/usr/local/share/examples/amavisd-new/amavisd.conf</code> et ajoutez les -modifications nécessaires a la fin du fichier.</p> -<p><code>/etc/amavis/conf.d/99-local.conf</code> (debian) -<code>/etc/amavis.conf</code> (OpenBSD)</p> -<div class="highlight"><pre><span class="n">use</span> <span class="n">strict</span><span class="p">;</span> - -<span class="err">$</span><span class="n">enable_dkim_verification</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="err">$</span><span class="n">enable_dkim_signing</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> -<span class="n">dkim_key</span><span class="p">(</span><span class="s">&quot;exem.pl&quot;</span><span class="p">,</span> <span class="s">&quot;main&quot;</span><span class="p">,</span> <span class="s">&quot;/etc/certs/dkim.key&quot;</span> <span class="p">);</span> - -<span class="err">@</span><span class="n">dkim_signature_options_bysender_maps</span> <span class="o">=</span> <span class="p">(</span> - <span class="p">{</span> <span class="sc">&#39;.&#39;</span> <span class="o">=&gt;</span> - <span class="p">{</span> <span class="n">ttl</span> <span class="o">=&gt;</span> <span class="mi">21</span><span class="o">*</span><span class="mi">24</span><span class="o">*</span><span class="mi">3600</span><span class="p">,</span> <span class="n">c</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">relaxed</span><span class="o">/</span><span class="n">simple</span><span class="err">&#39;</span> <span class="p">}</span> - <span class="p">}</span> -<span class="p">);</span> - -<span class="err">$</span><span class="n">inet_socket_port</span> <span class="o">=</span> <span class="p">[</span><span class="mi">10024</span><span class="p">,</span> <span class="mi">10026</span><span class="p">];</span> -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">MYNETS</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">os_fingerprint_method</span> <span class="o">=&gt;</span> <span class="n">undef</span><span class="p">,</span> -<span class="p">};</span> - -<span class="err">$</span><span class="n">interface_policy</span><span class="p">{</span><span class="err">&#39;</span><span class="mi">10026</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">;</span> - -<span class="err">$</span><span class="n">policy_bank</span><span class="p">{</span><span class="err">&#39;</span><span class="n">ORIGINATING</span><span class="err">&#39;</span><span class="p">}</span> <span class="o">=</span> <span class="p">{</span> - <span class="n">originating</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">allow_disclaimers</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">virus_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">spam_admin_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s">&quot;root\@$mydomain&quot;</span><span class="p">],</span> - <span class="n">warnbadhsender</span> <span class="o">=&gt;</span> <span class="mi">1</span><span class="p">,</span> - <span class="n">forward_method</span> <span class="o">=&gt;</span> <span class="err">&#39;</span><span class="n">smtp</span><span class="o">:</span><span class="n">localhost</span><span class="o">:</span><span class="mi">10027</span><span class="err">&#39;</span><span class="p">,</span> - <span class="n">smtpd_discard_ehlo_keywords</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="err">&#39;</span><span class="mi">8</span><span class="n">BITMIME</span><span class="err">&#39;</span><span class="p">],</span> - <span class="n">bypass_banned_checks_maps</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="mi">1</span><span class="p">],</span> - <span class="n">terminate_dsn_on_notify_success</span> <span class="o">=&gt;</span> <span class="mi">0</span><span class="p">,</span> -<span class="p">};</span> - -<span class="cp">#------------ Do not modify anything below this line -------------</span> -<span class="mi">1</span><span class="p">;</span> <span class="err">#</span> <span class="n">ensure</span> <span class="n">a</span> <span class="n">defined</span> <span class="k">return</span> -</pre></div> - - -<p>A nouveau, expliquons ce fichier : -- le premier paragraphe définit que nous voulons qu'amavis signe les emails - sortants, vérifie la signature DKIM des emails rentrants, et l'endroit ou se - trouve la clé privée servant a signer les emails. -- le second définit les options DKIM que nous souhaitons utiliser comme défaut. - Je vous invite a consulter la <a href="https://tools.ietf.org/html/rfc4871">RFC 4871</a> -- nous définissons ensuite les ports sur lesquels nous allons écouter, puis les - paramètres que nous utiliserons pour les emails venant de nos utilisateurs : - ils seront traités comme "originating" et nous ne vérifierons pas l'OS duquel - ils viennent. -- nous savons que les emails venants du port 10026 sont sortants, nous les - traitons donc comme tel -- le paragraphe suivant décrit le traitement que nous faisons subir aux emails - sortants : tout d'abord, nous réaffirmons qu'ils viennent bien de notre - serveur. Nous autorisons les disclaimers (voire encore une fois la <a href="https://tools.ietf.org/html/rfc4871">RFC - 4871</a>. Nous déclarons l'adresse a - prévenir en cas de spam/virus venants de notre système, et que nous voulons - être prévenus. Nous déclarons ou envoyer les mails une fois signés et filtrés, - puis qu'il est nécessaire de convertir les emails au format 7 bits avant de - les envoyer au MTA, que nous autorisons tous les types et noms de fichiers, et - les notifications de succès d'envoi. Et voila!</p> -<p>Vous avez pu remarquer qu'a aucun moment nous ne configurions ni la signature -des emails sortants ni le filtrage des emails entrants. Ces paramètres sont en -fait inclus par défaut dans amavis.</p> -<p>Il nous reste cependant quelques opérations a faire, encore. -Tout d'abord, il nous faut générer notre clé DKIM. Pour cela, il existe -différentes méthodes, j'ai personnellement utilisé opendkim (<a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy">un -tutorial</a>) -mais de nombreuses autre méthodes existent. -Il nous reste encore a configurer spamassassin :</p> -<div class="highlight"><pre><span class="cp">#rewrite_header Subject *****SPAM*****</span> -<span class="cp"># report_safe 1</span> -<span class="n">required_score</span> <span class="mf">2.0</span> -<span class="cp"># use_bayes 1</span> -<span class="cp"># bayes_auto_learn 1</span> -<span class="cp"># bayes_ignore_header X-Bogosity</span> -<span class="cp"># bayes_ignore_header X-Spam-Flag</span> -<span class="cp"># bayes_ignore_header X-Spam-Status</span> -<span class="n">ifplugin</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -<span class="cp"># shortcircuit USER_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_DEF_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_ALL_SPAM_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_WHITELIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST on</span> -<span class="cp"># shortcircuit USER_IN_BLACKLIST_TO on</span> -<span class="cp"># shortcircuit SUBJECT_IN_BLACKLIST on</span> -<span class="n">shortcircuit</span> <span class="n">ALL_TRUSTED</span> <span class="n">off</span> -<span class="cp"># shortcircuit BAYES_99 spam</span> -<span class="cp"># shortcircuit BAYES_00 ham</span> - -<span class="n">endif</span> <span class="err">#</span> <span class="n">Mail</span><span class="o">::</span><span class="n">SpamAssassin</span><span class="o">::</span><span class="n">Plugin</span><span class="o">::</span><span class="n">Shortcircuit</span> -</pre></div> - - -<p>Comme vous pouvez le voir, les modifications se résument globalement a baisser -le required_score pour ma part.</p> -<p>Pour finir, activez les services nécessaires : opensmtpd, dovecot, amavisd, et -spamassassin, et tout devrait fonctionner parfaitement</p> -<p>Bon courage pour votre hosting de mail ensuite...</p> \ No newline at end of file diff --git a/output/index3.html b/output/index3.html deleted file mode 100644 index 1171ba5..0000000 --- a/output/index3.html +++ /dev/null @@ -1,1271 +0,0 @@ - - - - - Wxcafé - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -

    Archlinux made simple

    -
    - Date - - Fri 05 October 2012 - -
    - By - Wxcafe -
    - Category - OSes -
    - - - - -
    -

    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. -
    3. -

      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.

      -
    4. -
    -

    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~

    -
    -
    -
    -

    Les systèmes de fichiers

    -
    - Date - - Tue 25 September 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.

    -

    Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?

    -

    Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(kibioctet), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée).

    -

    Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte.

    -

    Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.

    -

    Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.

    -

    Détaillons maintenant les types de fichiers les plus répandus:

    -
      -
    • -

      FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.

      -
    • -
    • -

      NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.

      -
    • -
    • -

      ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.

      -
    • -
    • -

      Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.

      -
    • -
    • -

      ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)

      -
    • -
    • -

      Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec LVM, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.

      -
    • -
    • -

      HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir

      -
    • -
    • -

      ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...

      -
    • -
    -

    Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...

    -

    Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)

    -

    Bon courage, et bon choix pour votre prochain système.

    -
    -
    -
    -

    Le Quenya - Épisode ø

    -
    - Date - - Tue 18 September 2012 - -
    - By - Wxcafe -
    - Category - Language -
    - - - - -
    -

    Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc.

    -

    En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite.

    -

    Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)

    -

    J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles ici , une -traduction en français est disponible la en pdf ), et des infos ici -toutes les deux semaines.

    -

    Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver par ici.

    -

    Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!

    -
    -
    -
    -

    Update a propos du blog

    -
    - Date - - Tue 18 September 2012 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

    Bonsoir! Un petit post pour faire un peu le point sur ce blog.
    -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :

    -
      -
    • -

      Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (@Wxcafe)

      -
    • -
    • -

      Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.

      -
    • -
    -

    A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.

    -

    Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P

    -

    Ceci dit, je vais bosser un peu sur le prochain article.

    -

    A plus tard!

    -
    -
    -
    -

    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:

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    -11
    -12
    -13
    #!/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:

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    #!/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:

    -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    #!/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:

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    #!/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)

    -
    -
    -
    -

    Les différentes couches d'un système d'exploitation

    -
    - Date - - Thu 06 September 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.

    -

    Un système d'exploitation (de type UNIX, \<troll>enfin un vrai système quoi. -\</troll>) incorpore plusieurs systèmes de couches.

    -

    Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier.

    -

    Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")

    -

    Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"

    -

    Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre

    -

    Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux

    -

    Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.

    -

    Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.

    -

    Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...

    -

    Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.

    -

    Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.

    -

    (Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)

    -

    Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)

    -

    Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.

    -

    De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.

    -

    Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels

    -
    -
    -
    -

    La programmation expliquée simplement

    -
    - Date - - Mon 27 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    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!

    -
    -
    -
    -

    GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère

    -
    - Date - - Wed 22 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    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!

    -
    -
    -
    -

    Débuts, présentation, etc...

    -
    - Date - - Sat 18 August 2012 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

    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!

    -
    -
    - -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/archlinux-made-simple/index.html b/output/posts/archlinux-made-simple/index.html deleted file mode 100644 index 5185a09..0000000 --- a/output/posts/archlinux-made-simple/index.html +++ /dev/null @@ -1,508 +0,0 @@ - - - - - Archlinux made simple - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Archlinux made simple -

    -
    -
    -
    -
    - Date - - Fri 05 October 2012 - -
    - By - Wxcafe -
    - Category - OSes -
    - - - - -
    -

    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. -
    3. -

      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.

      -
    4. -
    -

    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~

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/debuts-presentation-etc/index.html b/output/posts/debuts-presentation-etc/index.html deleted file mode 100644 index 3b12efc..0000000 --- a/output/posts/debuts-presentation-etc/index.html +++ /dev/null @@ -1,246 +0,0 @@ - - - - - Débuts, présentation, etc... - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Débuts, présentation, etc... -

    -
    -
    -
    -
    - Date - - Sat 18 August 2012 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

    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!

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/index.html b/output/posts/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/index.html deleted file mode 100644 index b0a711d..0000000 --- a/output/posts/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere/index.html +++ /dev/null @@ -1,285 +0,0 @@ - - - - - GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - GNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère -

    -
    -
    -
    -
    - Date - - Wed 22 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    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!

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/introduction-a-bash-en-tant-que-language-de-programmation/index.html b/output/posts/introduction-a-bash-en-tant-que-language-de-programmation/index.html deleted file mode 100644 index ffcaa39..0000000 --- a/output/posts/introduction-a-bash-en-tant-que-language-de-programmation/index.html +++ /dev/null @@ -1,418 +0,0 @@ - - - - - Introduction a bash en tant que language de programmation. - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - 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:

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    -11
    -12
    -13
    #!/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:

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    #!/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:

    -
    1
    -2
    -3
    -4
    -5
    -6
    -7
    #!/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:

    -
     1
    - 2
    - 3
    - 4
    - 5
    - 6
    - 7
    - 8
    - 9
    -10
    -11
    -12
    -13
    -14
    -15
    -16
    -17
    -18
    -19
    -20
    -21
    -22
    -23
    -24
    #!/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)

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/la-cryptographie-avec-pgp-et-principalement-gnupg/index.html b/output/posts/la-cryptographie-avec-pgp-et-principalement-gnupg/index.html deleted file mode 100644 index 338d5c1..0000000 --- a/output/posts/la-cryptographie-avec-pgp-et-principalement-gnupg/index.html +++ /dev/null @@ -1,383 +0,0 @@ - - - - - La cryptographie avec PGP et principalement GnuPG - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - La cryptographie avec PGP et principalement GnuPG -

    -
    -
    -
    -
    - Date - - Mon 19 November 2012 - -
    - By - Wxcafe -
    - Category - Tutoriel -
    - - - - -
    -

    PGP (pour pretty good privacy) est un système de -chiffrement asymétrique (pour plus d'information sur le chiffrement -asymétrique, voir ici) utilisant en général les algorithmes RSA -et/ou DSA, et pouvant servir a chiffrer tout fichier, mais aussi a -signer des emails. Le système de signature consiste a s'identifier en -tant que la personne que l'on est, en certifiant de son identité, et -repose sur un système dit de Web of Trust.

    -

    Ce concept de Web of Trust est simple: si je valide le code vous -identifiant (votre clé), en certifiant que vous êtes qui vous êtes et -que je vous connais, et que d'autres personnes m'ont déjà -personnellement validé, les autres utilisateurs seront enclins a croire -que vous êtes en effet la personne que vous prétendez être. Bien -entendu, les utilisateurs validant trop de clés rapportées comme fausses -voient la valeur de leurs signatures baissée, et toutes les clés signées -par ces utilisateurs voient leur crédibilité baisser.
    -Inversement, les "bons utilisateurs" voient la valeur de leurs -signatures augmentée, ce qui augmente la crédibilité des clés qu'ils ont -signées.

    -

    Ceci dit, un email peut être a la fois signé et chiffré, de façon a être -sûr, non seulement que l’expéditeur de l'email est bien celui qu'il dit -être, mais aussi que l'email n'a pas été modifié entre l'envoi et -la réception (en effet, avec un chiffrement de type RSA/DSA, une -modification du corps de l'email rend ce dernier illisible, la clé -publique ne  correspondant plus a la phrase de passe du message), ce qui -offre bien évidemment des avantages non négligeables dans un -environnement ou la protection des échanges est importante (soit a peu -près partout sur internet, si vous tenez a votre vie privée. Pensez a -quitter Gmail aussi, par exemple).

    -

    Il est cependant a noter que les clés publiques sont généralement -situées sur un serveur de clés publiques, tel pgp.mit.edu ou encore -subkeys.pgp.net (certaines personnes préfèrent garder leur clés hors des -serveurs de clés publiques, craignant une compromission de ces serveurs. -Dans le cas d'utilisateurs normaux (c'est a dire n'échangeant pas de -secrets classés secret-défense par email), la protection offerte par les -serveurs de clé publiques est suffisante)

    -

    L'une des implémentations les plus connues et utilisées de PGP est sans -conteste GPG (GNU Privacy Guard) , qui comme son nom l'indique fait -partie du projet GNU, et qui (<troll> de façon surprenante pour un -programme GNU</troll>) est extrêmement efficace et claire.

    -

    Après ces explications techniques, voici venue le -moment intéressant/utile, a savoir l'application. Le chiffrement et la -signature de mails doivent cependant attendre un petit peu, étant donné -qu'il vous faut d'abord créer votre clé et la placer sur un serveur de -clés publiques, de façon à ce que votre destinataire puisse vous -identifier lorsqu'il recevra le mail, mais aussi a configurer votre -client mail pour utiliser gpg (je baserai les explications de cet -article sur Thunderbird, mais des explications efficaces sont trouvables -facilement sur les interwebs).

    -

    Tout d'abord, générons une clé GPG :

    -
     gpg --gen-key
    -
    - - -

    GPG va vous demander les méthodes de chiffrement que vous voulez -utiliser, le plus sur est de laisser la valeur par défaut. La question -suivante est de savoir quelle taille votre clé doit faire, il est -préférable de choisir la taille la plus importante possible (4096). GPG -veut ensuite savoir quand votre clé doit expirer. La méthode simple est -bien évidemment de ne jamais la faire expirer, il est cependant plus -intéressant dans une logique de sécurité de régler cette durée a six -mois/un an.

    -

    Des informations personnelles vous sont ensuite demandées, -concernant votre nom (mettez le vrai, tel qu'il apparaît sur votre carte -d'identité, si vous souhaitez utiliser votre véritable identité), votre -adresse mail (mettez la plus utilisée, vous pourrez en rajouter plus -tard), et un mot de passe pour la clé (utilisez un mot de passe -sécurisé!! Il est conseillé d'utiliser au moins 8 caractères, dont majuscules, -minuscules, caractères spéciaux et nombres (vous pouvez utiliser la -commande makepasswd, qui génère automatiquement un mot de -passe)

    -

    GPG va maintenant prendre un peu de temps pour générer le couple clé -publique/clé privée, vous devriez profiter de ce temps pour effectuer -des opérations autres sur votre ordinateur : taper des textes, lancer -des films, écouter de la musique... De façon à augmenter les chances -d'obtenir un nombre bien aléatoire (le générateur d'aléatoire se base -sur la RAM pour obtenir des bits au hasard)

    -

    Une fois cela fini, vous obtenez un couple clé publique/clé privée, que -vous ne pouvez pas visualiser entièrement pour l'instant. Il est -cependant possible (et recommandé) de les exporter pour les sauvegarder -via une commande:

    -
    gpg --armor --export --output=pubkey.gpg
    -
    - - -

    pour la clé publique, et

    -
    gpg --armor --export-secret-keys --output=seckey.gpg
    -
    - - -

    pour la clé privée. Il est possible et même souhaitable de copier ces -clés sur une clé USB, une carte SD, ou un autre support de stockage -résistant, de façon a avoir une solution de sauvegarde, au cas ou vous -perdiez ces clés sur ce PC.

    -

    Cela fait, listons les informations sur votre clé publique :

    -
    $ gpg --list-keys --fingerprint
    -pub     4096R/27D81AC8 2012-11-17
    -    Key fingerprint = 6345 A91A FF89 97E0 13D0 96A9 9E2A 1917 27D8 1AC8
    -uid             Clément Hertling (Wxcafe) 
    -uid             [jpeg image of size 14692]
    -sub     4096R/9ED7F77F 2012-11-17
    -
    - - -

    La partie pub indique que c'est une clé publique, 4096R indique que c'est -une clé RSA sur 4096 bits. La partie 27D81AC8 est -l'identifiant de la clé publique, Key fingerprint = 6345 A91A FF89 97E0 13D0 -96A9 9E2A 1917 27D8 1AC8 est appelé fingerprint de la clé. Les champs -uid sont des manières d'identifier la clé et la personne associée a -celle-ci, et enfin le champ sub est indicateur d'une subkey, système -uniquement pris en charge par GPG et non inclus dans les premières -versions de PGP, donc non-implémentées dans nombre de clients pgp.
    -Passons maintenant a la mise en place de cette clé publique sur un -serveur de clés : nous utiliserons ici le serveur pgp.mit.edu.

    -
    gpg --keyserver pgp.mit.edu --send-keys *ID de la clé a uploader*
    -
    - - -

    Maintenant que votre clé publique a été uploadée, vous pouvez l'utiliser -pour signer et chiffrer vos emails!
    -Installons donc l'extension Enigmail pour Thunderbird, permettant de -chiffrer/signer vos emails de façon transparente. Il conviendra de -paramétrer cette extension, via le menu OpenPGP dans Thunderbird, puis -Setup Wizard (l'option entre Help et About OpenPGP). Normalement, -Enigmail détecte votre installation de gpg automatiquement, si cependant -ce n'était pas le cas, vous pouvez utiliser la clé exportée tout a -l'heure (pubkey.gpg) en l'important (import key from file).

    -

    Selon les options que vous avez utilisées, vos emails seront -automatiquement signés et/ou chiffrés a l'envoi. Gardez cependant a -l'esprit que si tout le monde peut lire les mails signés, il n'en est -pas de même pour les mails chiffrés, pour lesquels il est nécessaire de -posséder la clé publique du correspondant en question, et de posséder -soi même une clé privée, donc d'utiliser OpenPGP aussi.
    -Concernant les signatures de clés, elles fonctionnent de manière très -simple :
    -Vous devez télécharger la clé de votre correspondant, via un

    -
     gpg --keyserver pgp.mit.edu --search-keys *ID de la clé de votre correspondant*
    -
    - - -

    (a noter que cette commande fonctionne aussi en cherchant une adresse -email ou un nom. Cependant, en cherchant via l'identifiant de la clé, -vous êtes sur de trouver votre correspondant. Globalement, l'email est -lui aussi assez sûr en terme de recherche de clés, tandis que le nom -donne rarement un résultat). L'étape suivante est de vérifier que votre -correspondant est bien la personne qui est spécifiée sur sa clé. Pour -cela, il convient d'avoir déjà vu physiquement cette personne et si -possible d'avoir vu une pièce d'identité lui appartenant, et d'avoir une -confirmation de cette personne que la clé que vous voyez lui appartient -bien.
    -Ceci fait, vous pouvez signer la clé via un

    -
     gpg --sign *ID de la clé a signer*
    -
    - - -

    puis la renvoyer au serveur via

    -
     gpg --keyserver pgp.mit.edu --send-key *ID de la clé a signer*
    -
    - - -

    Voila, la clé de votre correspondant est signée!

    -

    Ce tutoriel sur PGP/GPG est terminé, et votre sécurité est améliorée -grâce a cette superbe invention qu'est la cryptographie!

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/la-programmation-expliquee-simplement/index.html b/output/posts/la-programmation-expliquee-simplement/index.html deleted file mode 100644 index 08fb2af..0000000 --- a/output/posts/la-programmation-expliquee-simplement/index.html +++ /dev/null @@ -1,284 +0,0 @@ - - - - - La programmation expliquée simplement - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - La programmation expliquée simplement -

    -
    -
    -
    -
    - Date - - Mon 27 August 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    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!

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/index.html b/output/posts/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/index.html deleted file mode 100644 index c70e708..0000000 --- a/output/posts/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne/index.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - La séparation des églises et de l'état, une idée qu'elle est bonne? - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - La séparation des églises et de l'état, une idée qu'elle est bonne? -

    -
    -
    -
    -
    - Date - - Thu 13 December 2012 - -
    - By - Wxcafe -
    - Category - Ranting -
    - - - - -
    -

    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 -ayant été perdu a cause de cet article) J'ai pris ici comme exemple -Google, parce que c'est celui qui propose le plus de services, mais -Apple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec -WP8 et Skydrive.

    -

    Twitter et Facebook n'ont de rôle dans ce sujet qu'en ce que vous leur -fournissez des informations dont ils s'empressent de devenir seuls -propriétaires (cf les Conditions d'Utilisation de ces deux services), -puis de les revendre a des annonceurs faisant de la publicité -ciblée. Le problème est simple a apprehender, vous ne voulez pas que -l'un de ces services connaisse trop de choses sur vous (et ils recoupent -très bien les informations venant de sources differentes), car il est -évident qu'ils les vendent a des entreprises peu scrupuleuses quand -a leurs engagements de confidentialité, quand a leurs securité -aussi; mais surtout parce que depuis le 11 Septembre 2001 et le -Patriot Act, toute entreprise américaine doitfournir toutes ses -informations au gouvernement américain sans aucune intervention d'un -juge, ou de quelque institution de controle que ce soit.

    -

    Ce qui est, comme vous pouvez le comprendre, relativement -problématique. (pour ceux qui a ce point se disent "je n'ai rien a -cacher, donc je m'en fous si le gouvernement américain sait tout de -moi", je vous conseille d'aller lire cet article de Jean Marc -Manach, plein de bon sens...) Pour éviter cela, vous avez plusieurs -possibilités: utiliser des services concurrents pour tout (Facebook -Mail, Skydrive, Twitter et Google Reader par exemple), tout en vous -souvenant que comme ces entreprises sont toutes américaines, le -gouvenrnement américain détient tout de même vos informations, et que ca -lui prendra juste un peu plus de temps.

    -

    Vous pouvez aussi n'utiliser que des entreprises francaises, -mais cela ne regle que le problème du Patriot Act, et pas celui de -la revente de vos données. Et puis essayez de trouver un service équivalent -a Google Reader et fourni par une entreprise française, on en reparlera. -Non, la véritable alternative, c'est d'héberger vos services vous -même, d'avoir votre propre serveur sur lequel vous possedez le plus -de services possibles, et d'utiliser des concurents ou des services -libres au maximum pour les autres, ceux qui ne sont pas distribuables -(par exemple, les cartes sont difficiles a mettre en commun, -or plusieurs alternatives existent: Google Maps, <troll>Apple -Maps</troll>, Bing Maps, OpenStreetMaps, etc...). -Beaucoup de ces services sont cependant très facilement -décentralisables, surement parce qu'ils ont a la base étés conçus comme -des services décentralisés. Ainsi les emails, le web, le chat (via XMPP) -par exemple sont basés sur un système décentralisé.

    -

    De plus, votre serveur peut vous servir a beaucoup d'autres des -choses que vous feriez habituellement sur votre ordinateur -personnel: conserver une présence sur IRC, compiler du code, faire -du rendu vidéo, etc... En bref, un serveur peut vous servir -a effectuer toutes les opérations que vous effectuez sur votre -ordinateur sans les inconvénients de la consommation éléctrique -ni du bruit, mais vous permet aussi de ne dépendre aucunement -d'une entreprise américaine, et cependant de disposer de tous les -services utiles offerts par ces dernières.

    -

    Un serveur peut de plus vous permettre de controller parfaitement -tous ces services, sans aucune limitation d'aucune sorte, -voire de vous créer une page web. Bien entendu, il est bien plus -utile d'avoir un serveur si vous avez aussi un nom de domaine. -Heureusement, ils sont peu chers et souvent fournis avec le serveur.

    -

    Dans de prochains articles, je vous expliquerai comment louer puis -configurer votre serveur pour qu'il serve de serveur mail (IMAP/SMTP), -web, base de données, et proxy. Cela dit, comme c'est un serveur sous -linux, vous pouvez l'utiliser pour a peu près n'importe quoi.
    -Voila, a bientôt!

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/le-quenya-episode-o/index.html b/output/posts/le-quenya-episode-o/index.html deleted file mode 100644 index 431be6b..0000000 --- a/output/posts/le-quenya-episode-o/index.html +++ /dev/null @@ -1,250 +0,0 @@ - - - - - Le Quenya - Épisode ø - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Le Quenya - Épisode ø -

    -
    -
    -
    -
    - Date - - Tue 18 September 2012 - -
    - By - Wxcafe -
    - Category - Language -
    - - - - -
    -

    Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu’à il y -a peu...), le nom que donnait Tolkien au dialecte principal parlé par -les Elfes dans les différentes œuvres de l'auteur, dont Le Seigneur des -Anneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte -avant de commencer cet article que l'une des œuvres les plus -impressionnantes de Tolkien, si ce n'est la plus grande, est -l'impressionnant travail linguistique passé sur les différentes langues -présentes dans son œuvre littéraire : L'elfique, qui est donc le quenya, -la langue des nains, qui est appelé le khazalide, etc.

    -

    En effet, a contrario des "langues" développées dans d'autres œuvres littéraires -telles Eragon ou Harry Potter, où l'auteur-e se contente de lier un mot -de français (ou d'anglais) a un mot de sa "langue", les langues de -l'oeuvre de Tolkien sont des langues complètes. Elles possèdent des -racines logiques, des systèmes de grammaire et de conjugaison propres, -une logique inhérente dans la prononciation ou l'orthographe, et ainsi -de suite.

    -

    Un véritable rêve de linguiste donc, puisque ces langues sont -pratiquement entièrement documentées par Tolkien lui même (voir -l'appendice E du SdA, particulièrement instructif a ce sujet.)

    -

    J'ai donc décidé d'apprendre le Quenya récemment, et je vais donc poster -ici des résumés des cours que je suis ( disponibles ici , une -traduction en français est disponible la en pdf ), et des infos ici -toutes les deux semaines.

    -

    Si ce sujet vous intéresse, le compte twitter @Quenya101 poste -régulièrement des informations sur le sujet, et pour plus d'infos sur le -sujet, vous pouvez en trouver par ici.

    -

    Et en tant que première leçon, vous pouvez apprendre que ce mot que vous -avez prononcé comme le Kenya tout le long de cet article se prononce en -fait [Kwenïa], ou bien Qwenya!

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/les-differentes-couches-dun-systeme-dexploitation/index.html b/output/posts/les-differentes-couches-dun-systeme-dexploitation/index.html deleted file mode 100644 index 477150a..0000000 --- a/output/posts/les-differentes-couches-dun-systeme-dexploitation/index.html +++ /dev/null @@ -1,292 +0,0 @@ - - - - - Les différentes couches d'un système d'exploitation - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Les différentes couches d'un système d'exploitation -

    -
    -
    -
    -
    - Date - - Thu 06 September 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    Étant utilisateur plus ou moins fidèle de GNU/Linux depuis quelques -années (plus ou moins, parce que j'ai toujours un Windows en dual boot, -principalement pour les jeux (possiblement plus pour longtemps, avec -l'arrivée de Steam pour Linux... ) ), je commence a connaître plus ou -moins bien mon système. Or il y a plusieurs choses a savoir sur les -systèmes d'exploitation, et celle dont je vais parler aujourd'hui, c'est -le système de couches.

    -

    Un système d'exploitation (de type UNIX, \<troll>enfin un vrai système quoi. -\</troll>) incorpore plusieurs systèmes de couches.

    -

    Ainsi, Linux (le noyau) a commencé en étant un kernel monolithique, -c'est a dire que tous les composants sont intégrés au kernel. Ce qui -signifie que rien ne peut être ajouté au noyau sans recompiler celui ci. -Or, quand on sait que le noyau comprend entre autres les drivers du -matériel et des systèmes de fichier, cela peut poser des problèmes quand -a la taille du kernel et a la licence libre de ce dernier.

    -

    Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui -signifie que des modules peuvent être chargé a tout moment en cours -d’exécution, ce qui permet l'utilisation de nouveaux systèmes de -fichiers a chaud, ou l'insertion de matériel et l'installation de -drivers sans interrompre l’exécution du système (Windows utilise un -système de fausse installation de drivers pour le matériel externe, et -un système de pré-installation des drivers pour les périphériques dits -"plug and play")

    -

    Après le noyau intervient le système. Or, au tous premiers instants du -boot, les systèmes GNU/Linux utilisent un système permettant de limiter -l'utilisation de ressources systèmes si elles ne sont pas nécessaires, -et incorpore ainsi un système dit de "runlevels"

    -

    Ainsi, au runlevel 0, le système s'éteint après avoir booté. Ainsi, ce -runlevel permet de tester le bon démarrage du système sans avoir a -effectuer de manipulation pour le ré-éteindre

    -

    Le runlevel 1 est appelé mode single user, et c'est un nom plutôt adapté -étant donné que ce runlevel donne accès a un système en étant -automatiquement loggé en tant que root, avec tous les autres -utilisateurs désactivés, de même que tous les systèmes de réseaux

    -

    Le runlevel 2 est appelé mode multi user, et vous mets en face d'un -système classique. en ligne de commande, mais avec tous les systèmes de -réseau désactivés.

    -

    Le runlevel 3 est le même que le 2, mais avec les systèmes de réseaux -activés.

    -

    Le runlevel 4 n'est pas officiellement défini, et est censé être -activable en fonction des besoins de l'utilisateur. Sur la plupart des -distributions grand public, ce runlevel est lié au...

    -

    Runlevel 5! Multi-user, networking, with working GUI! c'est le système -tel que vous le connaissez, avec l'interface graphique et le système de -login graphique.

    -

    Le runlevel 6, enfin, est le bien nommé "reboot", qui reboot la machine -quand il devient le runlevel courant.

    -

    (Il est a noter que Debian, et donc toutes les distribs qui en sont -dérivées, ne font pas de distinction entre les differents runlevels du 2 -au 5. Ainsi, Ubuntu fonctionne par défaut au runlevel 2, avec un login -et une interface graphique, et un mode réseau fonctionnel, bref avec des -fonctionnalités qui ne sont normalement disponibles que sous le runlevel 5.)

    -

    Il est possible de changer de runlevel grâce a la commande runlevel -(oui, c'est évident...)

    -

    Les systèmes Linux utilisent aussi un système dit de SandBox , qui en -informatique est un système permettant d'isoler les processus les uns -des autres. Ainsi, la pile réseau, qui est le système auquel les -différents processus envoient les différents paquets qui doivent sortir -de la machine , et qui redistribue ces paquets, est isolée du reste du -système, en cela qu'aucun des autres processus ne peuvent modifier cette -pile hors du runlevel 1 ou 2.

    -

    De la même façon, le navigateur chrom/ium fait fonctionner tous les -onglets, ainsi que toutes les extensions, dans des processus différents. -Certaines distributions linux implémentent un système de cette sorte -pour toutes les applications, ou seulement pour certaines. ainsi Chakra -Linux a un système d'installation d'applications dans des disques -virtuels, ce qui permet une sécurité totale du processus.

    -

    Voila, j'espère vous en avoir appris un peu sur le fonctionnement des -différentes couches de linux, et j'espère que cet article vous poussera -a tester un peu votre système et a vous amuser avec les différents -runlevels

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/les-systemes-de-fichiers/index.html b/output/posts/les-systemes-de-fichiers/index.html deleted file mode 100644 index 1fd39d3..0000000 --- a/output/posts/les-systemes-de-fichiers/index.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - - Les systèmes de fichiers - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Les systèmes de fichiers -

    -
    -
    -
    -
    - Date - - Tue 25 September 2012 - -
    - By - Wxcafe -
    - Category - Teaching -
    - - - - -
    -

    Un système de fichiers. Vous en avez surement déjà entendu parlé si vous -avec déjà installé Linux, ou formaté une clé USB. Dans ces cas, vous -connaissez surement NTFS, EXT4, ou encore FAT32.

    -

    Ces différents noms désignent en effet des systèmes de fichiers. Mais -qu'est-ce qu'un système de fichiers?

    -

    Pour comprendre cela, il faut déjà savoir ce qu'est exactement un -fichier. Un fichier est un ensemble de blocs (les blocs sont l'unité la -plus petite traitable par le matériel, ils font généralement 1 ou 4 Kio -(kibioctet), en fonction du système de fichier utilisé.), qui est -donc composé de bits, interprétés différemment en fonction du type de -fichier. Cependant, seul, le fichier n'est pas accessible, puisqu'il -n'est pas indexé, c'est a dire que l'OS ne sait pas qu'il est présent, -ou il commence ni où il s'arrête (je schématise un peu, mais c'est -l'idée).

    -

    Ainsi, le système de fichier donne un cadre et un standard à -l'arborescence des fichiers. Par exemple, le système de fichier ext4 -utilise des blocs de 1 Kio, et de ce fait, toutes les partitions de -disque dur formatées en ext4 peuvent prendre comme unité de base 1 Kio -et mesurer la taille des fichiers en blocs de cette façon. Les systèmes -de fichiers nécessitent l'inclusion de drivers dans le noyau pour -pouvoir être pris en compte.

    -

    Le noyau linux inclut par défaut les drivers pour ext2/3/4, btrfs, -reiserfs, ntfs, fat16/32 et hfsx, ce qui permet de monter a peu -près tout type de partition récente.

    -

    Il convient de bien faire la différence entre le système de fichier et -l'arborescence des fichiers. Si l'arborescence des fichiers est en fait -une entité virtuelle englobant la racine / et tous les fichiers et -dossiers contenus dedans, le système de fichier permet a votre système -GNU/Linux de distinguer les différents fichiers composants cette -arborescence.

    -

    Détaillons maintenant les types de fichiers les plus répandus:

    -
      -
    • -

      FAT16/32 : Les systèmes de fichier FAT (pour File Allocation Table, - soit la définition d'un système de fichier), remplissent leur rôle le - plus simplement possible. Ne permettant (historiquement) que des noms de - 8 caractères (plus extension de trois caractères), ni chiffrement, ni - système de distinction d'utilisateurs (DOS étant un système - mono-utilisateur), Il fut décliné par microsoft en FAT16 et en FAT32, - utlisants respectivement des blocs de 16 et 32 Kio.

      -
    • -
    • -

      NTFS :. Le NTFS (pour New Technology File System, rapport a Windows - NT) est un système de fichier qui est apparu avec Windows XP, et qui - était une mise a jour nécessaire du FAT32 vieillissant. NTFS ajoute a - FAT différentes capacités dont le chiffrement, les liens symboliques, la - compression et les quotas pour les volumes, permettant de limiter la - taille maximum occupée dans une partition.

      -
    • -
    • -

      ReFS : ReFS est le système de fichiers introduit dans Windows Server 2012. - Ne différant pas énormément de NTFS, je le mentionne principalement - parce qu'il est prévu qu'il soit le défaut pour Windows 8. - Il apporte principalement la redondance, c'est a dire que chaque - fichier possède une somme de contrôle en 64 bits stockée dans un fichier - séparé pour éviter les corruption de disque.

      -
    • -
    • -

      Ext2/3/4 : les systèmes ext (extended) sont les systèmes de fichiers - les plus utilisés sous linux pour le grand public. (Je traiterai ici - d'ext4, puisque c'est le plus récent.) Il dispose de toutes les - fonctions que l'on peut attendre d'un système de fichiers moderne, ni - plus ni moins. Ainsi, ext4 est un système de fichiers journalisé, - acceptant les capacités jusqu’à 1 Exioctet, et utilise l'allocation dite - "par extent", ce qui signifie que la création d'un fichier réserve - automatiquement les zones contiguës de façon a réduire la fragmentation.

      -
    • -
    • -

      ReiserFS : ce système de fichiers, créé par le (légèrement mégalo) - programmeur Hans Reiser, est a retenir pour avoir été le premier système - de fichiers journalisé, et accepte un nombre de fichiers de l'ordre des - 4 milliards. Le but de ce système est de créer un système polyvalent, a - la fois système de fichiers et base de donnée (de part sa grande - capacité en terme de nombre de fichiers et de l'utilisation d'un - journal.)

      -
    • -
    • -

      Btrfs : ce système est l'évolution logique d'ext4, et inclut lui aussi - l'allocation par extent, mais possède de plus un système de - sous-volumes, qui permet d’accéder a plusieurs arborescences de fichiers - montées en même temps (système pratique et utile pour faire des - snapshots de systèmes.). Il permet aussi de redimensionner a chaud la - taille des partitions, en les agrandissant ou en les rétrécissant, est - compatible avec LVM, a un système de checking intégré (btrfsck), et - utilise un algorithme de compression appelé LZ4, qui accélère les accès - aux fichiers compressés d'environ 30% par rapport a LZO, le système - utilisé dans ext4.

      -
    • -
    • -

      HFS+ : le système de fichier présent sur tous les macs a des capacités - relativement standards, et ressemble énormément a l'ext3. Il supporte - cependant les liens directs vers les dossiers, fonction rare sur les - systèmes de fichiers actuels. Il est possible qu'il évolue a nouveau - dans les années a venir

      -
    • -
    • -

      ZFS : Ce système de fichier, venu de Solaris mais utilisable par Linux - et *BSD, est, tel Btrfs, a la fois un système de fichier et un - remplaçant/compatible avec LVM, C'est un système de fichiers conçu - principalement pour les serveurs, et il intègre ainsi un système de - redondance des données pour éviter les corruptions, un mode RAID-Z - (apparenté au RAID5), des checks d’intégrité en continu, des snapshots, - etc...

      -
    • -
    -

    Comme on a pu le voir, les systèmes de fichiers disponibles sont -légions. Cependant, le plus adapté a Linux et a une utilisation grand -public aujourd'hui est probablement Btrfs. Malheureusement, ce dernier -n'est pas aujourd'hui proposé par défaut sur les distributions les plus -utilisées, au profit de l'ext4, qui commence a accuser son âge...

    -

    Les systèmes de fichiers, s'ils peuvent ne pas sembler primordiaux au -fonctionnement du système, sont en fait de première importance, et ce -choix ne devrait pas être laissé au hasard, et être mis a jour -régulièrement (pour éviter les failles de sécurité...)

    -

    Bon courage, et bon choix pour votre prochain système.

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/linformatique-a-lecole/index.html b/output/posts/linformatique-a-lecole/index.html deleted file mode 100644 index e5b2dbe..0000000 --- a/output/posts/linformatique-a-lecole/index.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - L'informatique a l'école - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - L'informatique a l'école -

    -
    -
    -
    -
    - Date - - Mon 15 October 2012 - -
    - By - Wxcafe -
    - Category - Ranting -
    - - - - -
    -

    Après avoir lu cet article paru sur écrans.fr, et au vu des -nombreuses réflexions que j'ai eu sur ce sujet au cours des années, je -commence a me demander si la réponse logique ne serait pas d'enseigner -les bases de l'informatique (bases d’électronique, de programmation et -de logique formelle) dès le collège.

    -

    En effet, l'exemple qui me revient toujours est celui des technoprêtres -de warhammer 40 000, dans un univers ou la technologie est ritualisée et -incomprise même des plus savants, qui se contentent de reproduire ce qui -existe, et parfois par chance de retrouver un schéma explicatif lisible -par une machine, et qu'ils ne comprennent pas eux mêmes, ou toute -technologie est ointe d'onguents sacrés, entourée d'encens avant d'être -péniblement actionnée par des assistants ne comprenant rien a cette -technologie (ayant lu Hackers - Heroes of the Computer Revolution de -Steven Levy, c'est l'ambiance que l'on retrouve quand l'auteur décrit -l'ambiance près des machines IBM au MIT, au début de l'ouvrage), et il -me semble que de plus en plus la société se rapproche de cela.

    -

    Cette culture de l’ingénierie, qui existait beaucoup lors des débuts de -l'informatique (telle que décrite par exemple par Steve Wozniak dans son -livre iWoz) disparait pour laisser place a une culture de la -consommation et de l'utilisation de contenus existants, et même a une -certaine peur de la compréhension de la technologie. Ceux qui s'y -intéressent sont considérés comme marginaux (combien de hackers créent -des outils sur lesquels seront construits tous les systèmes du siècle a -venir, tels des Dennis Ritchie en puissance? Combien d'entre eux ne sont -pas intégrés a la société dite "normale"?), et on peut souvent observer -les réactions de peur que lancent les actions des hackers, ne serait-ce -que dans les journaux (combien de journaux 'mainstream' ont-ils parlés -des hackers en bien, c'est a dire tels qu'ils sont réellement, depuis -les années 80?) ou a la télévision.

    -

    Ainsi, la culture et la connaissance de ces appareils que -sont les ordinateurs, qui aujourd'hui se trouvent du fond de nos -poches a dans l'espace en passant par l’intérieur des pacemakers -jusqu’à être une composante indispensable de la société, se perdent et -rendent ainsi la compréhension de ces appareils impossible (j'ai eu -la désagréable surprise récemment de voir un camarade de classe -me poser ingénument la question "Ah, mais en fait, quand tu installes -Linux, ça change le fond d'écran et les icônes?". Au-delà du niveau, -la misère de cette question est que cette personne n'avait probablement -aucune idée de la façon dont fonctionnait son ordinateur, a part -pour le fond d'écran en question et pour les fameuses icônes.) pour -le grand public, et cet évolution crée de fait une sorte d'oligarchie de -techno-comprenants, seuls capables de manier et de créer la technologie.

    -

    C'est pour cela qu'il me semble intéressant, important, peut être même -requis, d'inclure au programme du collège puis du lycée des cours -d’électronique et d'informatique tels que décrits plus haut, de façon a -ce que les élèves comprennent le monde qui les entoure. Car c'est la le -but du cycle scolaire secondaire, me semble-t-il, et non pas de former -des futurs travailleurs. Sinon, pourquoi y aurait-il des cours de -musique, d'arts plastiques, ou encore de philosophie? Si le but du cycle -secondaire est bien d'ouvrir l'esprit des élèves sur le monde et sur ce -qui les entoure, alors les cours sur l'informatique s'imposent comme une -évidence, puisque ceux-ci nous entourent aujourd'hui bien plus que quoi -que soit d'autre...

    -

    Ces cours seraient susceptibles de s’insérer en un mélange entre des -cours de technologie (qui aujourd'hui sont bien plus orientés physique -et machines-outils qu'informatique ou électronique, alors que la -technologie d'aujourd'hui et vraisemblablement de demain aussi est -l'informatique) et de physique, pour le côté électronique, et de façon a -donner enfin aux cours de physique un intérêt quelconque, sortir au delà -de la théorie et de l'abstraction complète que sont actuellement ces -cours et passer un peu dans la réalisation, avec des arduinos par -exemple.

    -

    Vous aussi, intéressez vous a cela, de façon a ce que les jeunes ne -finissent pas par ne rien comprendre a ce qui est aujourd'hui l'une des -composante les plus importantes du monde tel qu'il est programmé.

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/output/posts/update-a-propos-du-blog/index.html b/output/posts/update-a-propos-du-blog/index.html deleted file mode 100644 index 2d3d442..0000000 --- a/output/posts/update-a-propos-du-blog/index.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - - Update a propos du blog - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    -

    - Update a propos du blog -

    -
    -
    -
    -
    - Date - - Tue 18 September 2012 - -
    - By - Wxcafe -
    - Category - Notes -
    - - - - -
    -

    Bonsoir! Un petit post pour faire un peu le point sur ce blog.
    -Comme vous avez pu le remarquer, j'ai un peu de mal a tenir les délais -que je m'étais fixés pour ce blog (un post tous les 8 jours), et après y -avoir un tantinet réfléchi, ceci est du a deux points principaux :

    -
      -
    • -

      Tout d'abord, le manque d'inspiration, tout simplement. C'est assez -compliqué de trouver des sujets intéressants liés a l'informatique, et -qui méritent un article. Je vous invite d'ailleurs a me suggérer des -sujets via les commentaires ou twitter (@Wxcafe)

      -
    • -
    • -

      Ensuite, le délai de 8 jours est trop court pour me permettre de faire -les recherches nécessaires, tout en manageant mes cours et mon temps -libre.

      -
    • -
    -

    A cause de cela, j'ai pris la décision de changer le rythme de parution -des articles a un *minimum* d'un post tous les 10 jours. Bien entendu, -si j'ai de l'inspiration en trop, plus de posts sont envisageables.

    -

    Voila. A part ca, je tiens a vous remercier de me lire (c'est assez -étonnant de voir ca...), et je précise que je vais ajouter une page -About Me, qui bien entendu rassemblera des informations sur moi, ma vie, -mon oeuvre :P

    -

    Ceci dit, je vais bosser un peu sur le prochain article.

    -

    A plus tard!

    -
    -
    -
    -
    - -
    -
    -
    -
    - Proudly powered by Pelican, - which takes great advantage of Python.
    - Powered by bootstrap2 theme, thanks! -
    -
    -
    - - \ No newline at end of file diff --git a/pelicanconf.py b/pelicanconf.py index 7bbb03a..1003d31 100644 --- a/pelicanconf.py +++ b/pelicanconf.py @@ -5,11 +5,7 @@ from __future__ import unicode_literals # Misc Settings AUTHOR = u'wxcafé' SITENAME = u'Wxcafé' -<<<<<<< HEAD SITEURL = '//wxcafe.net' -======= -SITEURL = 'file:///home/wxcafe/code/blog-source/output' ->>>>>>> origin/master TIMEZONE = 'Europe/Paris' DEFAULT_LANG = u'fr' DEFAULT_PAGINATION = 10 @@ -39,10 +35,6 @@ MD_EXTENSIONS = [ # Blogroll LINKS = ( ('Source!', 'https://github.com/wxcafe/blog-source', 'code'), -<<<<<<< HEAD -======= - ('Zerobin', 'http://paste.wxcafe.net', 'paste'), ->>>>>>> origin/master ('Public Git', 'http://git.wxcafe.net', 'github-sign'), ) @@ -51,14 +43,8 @@ SOCIAL = ( ('Twitter', 'https://twitter.com/wxcafe', 'twitter'), ('Github', 'https://github.com/wxcafe', 'github'), ('Email', 'mailto://wxcafe@wxcafe.net', 'envelope'), -<<<<<<< HEAD ('Gpg', 'https://pub.wxcafe.net/wxcafe.asc', 'key'), ('IRL', 'https://www.openstreetmap.org/relation/105146', 'map-marker') -======= - ('Gpg', 'https://data.wxcafe.net/wxcafe.asc', 'key'), - ('Finger', 'finger://wxcafe@wxcafe.net', 'terminal'), - ('IRL', 'http://leloop.org/where.html', 'map-marker') ->>>>>>> origin/master ) # Categories on right-side bar but not on top menu diff --git a/pelicanconf.pyc b/pelicanconf.pyc index acf6bc095340c78f936072a797a3955e9a71bc15..c9ba17c1d7bdb44f858e0f9fd0f8e69a518ccf13 100644 GIT binary patch delta 15 WcmeAZ>=R^T{>;l|)4P$ag988~0R&=R^T{>;l&)VYzZg9890F$9zV diff --git a/themes/bootstrap2/templates/base.html b/themes/bootstrap2/templates/base.html index 62a03b3..270f76d 100644 --- a/themes/bootstrap2/templates/base.html +++ b/themes/bootstrap2/templates/base.html @@ -7,10 +7,7 @@ -<<<<<<< HEAD -======= ->>>>>>> origin/master