(dp0 V/srv/www/content/la-cryptographie-avec-pgp-et-principalement-gnupg.md p1 (F1441303347.8733363 (V

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

\u000a

Ce concept de Web of Trust est simple: si je valide le code vous\u000aidentifiant (votre clé), en certifiant que vous êtes qui vous êtes et\u000aque je vous connais, et que d’autres personnes m’ont déjà\u000apersonnellement validé, les autres utilisateurs seront enclins a croire\u000aque vous êtes en effet la personne que vous prétendez être. Bien\u000aentendu, les utilisateurs validant trop de clés rapportées comme fausses\u000avoient la valeur de leurs signatures baissée, et toutes les clés signées\u000apar ces utilisateurs voient leur crédibilité baisser.
\u000aInversement, les “bons utilisateurs” voient la valeur de leurs\u000asignatures augmentée, ce qui augmente la crédibilité des clés qu’ils ont\u000asignées.

\u000a

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

\u000a

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

\u000a

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

\u000a

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

\u000a

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

\u000a
 gpg --gen-key\u000a
\u000a\u000a\u000a

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

\u000a

Des informations personnelles vous sont ensuite demandées,\u000aconcernant votre nom (mettez le vrai, tel qu’il apparaît sur votre carte\u000ad’identité, si vous souhaitez utiliser votre véritable identité), votre\u000aadresse mail (mettez la plus utilisée, vous pourrez en rajouter plus\u000atard), et un mot de passe pour la clé (utilisez un mot de passe\u000asécurisé!! Il est conseillé d’utiliser au moins 8 caractères, dont majuscules,\u000aminuscules, caractères spéciaux et nombres (vous pouvez utiliser la\u000acommande makepasswd, qui génère automatiquement un mot de\u000apasse)

\u000a

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

\u000a

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

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

pour la clé publique, et

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

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

\u000a

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

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

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

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

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

\u000a

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

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

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

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

puis la renvoyer au serveur via

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

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

\u000a

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

p2 (dp3 Vdate p4 cpelican.utils SafeDatetime p5 (S'\x07\xdc\x0b\x13\x00$\x00\x00\x00\x00' p6 tp7 Rp8 sVcategory p9 ccopy_reg _reconstructor p10 (cpelican.urlwrappers Category p11 c__builtin__ object p12 Ntp13 Rp14 (dp15 S'_name' p16 VTutoriel p17 sS'slug' p18 Vtutoriel p19 sS'settings' p20 (dp21 VIGNORE_FILES p22 (lp23 V.#* p24 asVPAGE_ORDER_BY p25 Vbasename p26 sVWITH_FUTURE_DATES p27 I01 sVCATEGORY_SAVE_AS p28 Vcategory/{slug}/index.html p29 sS'LINKS' p30 ((VSource! p31 Vhttps://github.com/wxcafe/blog-source p32 Vcode p33 tp34 (VPublic Git p35 Vhttp://git.wxcafe.net p36 Vgithub-sign p37 tp38 tp39 sVARTICLE_ORDER_BY p40 Vslug p41 sVDEFAULT_LANG p42 Vfr p43 sVCACHE_CONTENT p44 I01 sVPAGE_LANG_SAVE_AS p45 Vpages/{slug}-{lang}.html p46 sVDRAFT_SAVE_AS p47 Vdrafts/{slug}.html p48 sVPAGE_PATHS p49 (lp50 Vpages p51 asVDEFAULT_PAGINATION p52 I10 sVDOCUTILS_SETTINGS p53 (dp54 sVTAG_CLOUD_STEPS p55 I4 sVJINJA_EXTENSIONS p56 (lp57 sVSTATIC_PATHS p58 (lp59 Vimages p60 asVDAY_ARCHIVE_SAVE_AS p61 V p62 sVARTICLE_LANG_URL p63 V{slug}-{lang}.html p64 sVSLUGIFY_SOURCE p65 Vtitle p66 sVSTATIC_URL p67 V{path} p68 sVCATEGORY_FEED_ATOM p69 Vfeeds/feed.%s.xml p70 sVOUTPUT_SOURCES p71 I00 sVPAGINATED_DIRECT_TEMPLATES p72 (Vindex p73 tp74 sVTYPOGRIFY_IGNORE_TAGS p75 (lp76 sVPDF_GENERATOR p77 I00 sVSTATIC_EXCLUDES p78 (lp79 sVTAG_URL p80 Vtag/{slug}.html p81 sVARTICLE_PATHS p82 (lp83 g62 asVGZIP_CACHE p84 I01 sVFILENAME_METADATA p85 V(?P\u005cd{4}-\u005cd{2}-\u005cd{2}).* p86 sVDEFAULT_ORPHANS p87 I0 sVPELICAN_CLASS p88 Vpelican.Pelican p89 sVCACHE_PATH p90 V/srv/www/cache p91 sVAUTORELOAD_IGNORE_CACHE p92 I00 sVINTRASITE_LINK_REGEX p93 V[{|](?P.*?)[|}] p94 sVDISPLAY_PAGES_ON_MENU p95 I01 sVTAG_CLOUD_MAX_ITEMS p96 I100 sS'AUTHOR' p97 Vwxcafé p98 sVDISPLAY_CATEGORIES_ON_MENU p99 I00 sVCHECK_MODIFIED_METHOD p100 Vmtime p101 sVARTICLE_EXCLUDES p102 (lp103 g51 asVTHEME_STATIC_PATHS p104 (lp105 Vstatic p106 asVTRANSLATION_FEED_ATOM p107 Vfeeds/all-%s.atom.xml p108 sVPLUGINS p109 (lp110 sVTYPOGRIFY p111 I00 sVEXTRA_TEMPLATES_PATHS p112 (lp113 sVOUTPUT_RETENTION p114 (tsVPAGE_LANG_URL p115 Vpages/{slug}-{lang}.html p116 sVTHEME p117 V/srv/www/themes/bootstrap2 p118 sVUSE_FOLDER_AS_CATEGORY p119 I01 sVDEBUG p120 I00 sVREVERSE_CATEGORY_ORDER p121 I00 sVRELATIVE_URLS p122 I00 sVDATE_FORMATS p123 (dp124 sVSITEURL p125 V//wxcafe.net p126 sVCONTENT_CACHING_LAYER p127 Vreader p128 sS'SOCIAL' p129 ((VTwitter p130 Vhttps://twitter.com/wxcafe p131 Vtwitter p132 tp133 (VGithub p134 Vhttps://github.com/wxcafe p135 Vgithub p136 tp137 (VEmail p138 Vmailto://wxcafe@wxcafe.net p139 Venvelope p140 tp141 (VGpg p142 Vhttps://pub.wxcafe.net/wxcafe.asc p143 Vkey p144 tp145 (VIRL p146 Vhttps://www.openstreetmap.org/relation/105146 p147 Vmap-marker p148 tp149 tp150 sVNEWEST_FIRST_ARCHIVES p151 I01 sVPATH_METADATA p152 g62 sVPDF_STYLE p153 Vtwelvepoint p154 sS'DISPLAY_CATEGORIES_ON_BAR' p155 I01 sVTEMPLATE_PAGES p156 (dp157 sVFEED_DOMAIN p158 g126 sVDIRECT_TEMPLATES p159 (Vindex p160 Vtags p161 Vcategories p162 Vauthors p163 Varchives p164 tp165 sVLOG_FILTER p166 (lp167 sVAUTHOR_FEED_RSS p168 Vfeeds/%s.rss.xml p169 sS'TIMEZONE' p170 VEurope/Paris p171 sVDRAFT_URL p172 Vdrafts/{slug}.html p173 sVPAGE_EXCLUDES p174 (lp175 g62 asVTAG_SAVE_AS p176 Vtag/{slug}.html p177 sVEXTRA_PATH_METADATA p178 (dp179 sS'FEED_RSS' p180 Vfeeds/feed.rss.xml p181 sVDRAFT_LANG_URL p182 Vdrafts/{slug}-{lang}.html p183 sVOUTPUT_SOURCES_EXTENSION p184 V.text p185 sVPAGINATION_PATTERNS p186 (lp187 g10 (cpelican.paginator PaginationRule p188 c__builtin__ tuple p189 (I0 V{name}{number}{extension} p190 V{name}{number}{extension} p191 tp192 tp193 Rp194 asVSTATIC_EXCLUDE_SOURCES p195 I01 sVJINJA_FILTERS p196 (dp197 sVARTICLE_SAVE_AS p198 Vposts/{slug}/index.html p199 sVYEAR_ARCHIVE_SAVE_AS p200 g62 sVCSS_FILE p201 Vmain.css p202 sVAUTHOR_URL p203 Vauthor/{slug}.html p204 sVCATEGORY_URL p205 Vcategory/{slug}/ p206 sVSUMMARY_MAX_LENGTH p207 I50 sVSLUG_SUBSTITUTIONS p208 (tsVDEFAULT_DATE_FORMAT p209 V%a %d %B %Y p210 sS'CATEGORY_FEED_RSS' p211 Vfeeds/feed.rss.%s.xml p212 sVTHEME_STATIC_DIR p213 Vtheme p214 sVLOAD_CONTENT_CACHE p215 I01 sVDRAFT_LANG_SAVE_AS p216 Vdrafts/{slug}-{lang}.html p217 sS'FEED_ALL_RSS' p218 Vfeeds/feed.rss.all.xml p219 sVREADERS p220 (dp221 sVLOCALE p222 (lp223 g62 asVWRITE_SELECTED p224 (lp225 sVDELETE_OUTPUT_DIRECTORY p226 I00 sVFEED_MAX_ITEMS p227 g62 sVPATH p228 V/srv/www/content p229 sVPAGE_URL p230 Vpages/{slug}/ p231 sVSITENAME p232 VWxcafé p233 sVARTICLE_PERMALINK_STRUCTURE p234 g62 sVARTICLE_URL p235 Vposts/{slug}/ p236 sVMONTH_ARCHIVE_SAVE_AS p237 g62 sVDEFAULT_METADATA p238 (tsVDEFAULT_CATEGORY p239 Vmisc p240 sVPLUGIN_PATHS p241 (lp242 sVFEED_ALL_ATOM p243 Vfeeds/feed.atom.all.xml p244 sVPDF_STYLE_PATH p245 g62 sVSTATIC_SAVE_AS p246 g68 sVAUTHOR_SAVE_AS p247 Vauthor/{slug}.html p248 sVPYGMENTS_RST_OPTIONS p249 (dp250 sVAUTHOR_FEED_ATOM p251 Vfeeds/%s.atom.xml p252 sVARTICLE_LANG_SAVE_AS p253 g64 sVPAGE_SAVE_AS p254 Vpages/{slug}/index.html p255 sVMD_EXTENSIONS p256 (lp257 Vcodehilite(linenums=False, guess_lang=True, noclasses=True, pygments_style=monokai) p258 aVsmarty p259 aVextra p260 asVOUTPUT_PATH p261 V/srv/www/output p262 sS'FEED_ATOM' p263 Vfeeds/feed.atom.xml p264 sVDEFAULT_STATUS p265 Vpublished p266 ssbsVauthor p267 g10 (cpelican.urlwrappers Author p268 g12 Ntp269 Rp270 (dp271 g16 VWxcafe p272 sg18 Vwxcafe p273 sg20 g21 sbsVslug p274 Vla-cryptographie-avec-pgp-et-principalement-gnupg p275 sVtitle p276 VLa cryptographie avec PGP et principalement GnuPG p277 stp278 tp279 sV/srv/www/content/nat.md p280 (F1431623308.6978474 (V

NAT (Network Address Translation) in a word?
\u000aIt’s complicated. Very. Don’t do it, you’d damage your brain.

\u000a

Bon, sinon, prochain article serieux vite, bisous.

p281 (dp282 Vdate p283 g5 (S'\x07\xde\x02\x11\x05\x02\x00\x00\x00\x00' p284 tp285 Rp286 sVcategory p287 g10 (g11 g12 Ntp288 Rp289 (dp290 g16 VRanting p291 sg18 Vranting p292 sg20 (dp293 VCATEGORY_URL p294 Vcategory/{slug}/ p295 sVPAGE_ORDER_BY p296 Vbasename p297 sVWITH_FUTURE_DATES p298 I01 sVCATEGORY_SAVE_AS p299 Vcategory/{slug}/index.html p300 sS'LINKS' p301 ((VSource! p302 Vhttps://github.com/wxcafe/blog-source p303 Vcode p304 tp305 (VZerobin p306 Vhttp://paste.wxcafe.net p307 Vpaste p308 tp309 (VPublic Git p310 Vhttp://git.wxcafe.net p311 Vgithub-sign p312 tp313 tp314 sVARTICLE_ORDER_BY p315 Vslug p316 sVDEFAULT_LANG p317 Vfr p318 sVCACHE_CONTENT p319 I01 sVPAGE_LANG_SAVE_AS p320 Vpages/{slug}-{lang}.html p321 sVDRAFT_SAVE_AS p322 Vdrafts/{slug}.html p323 sVPAGE_PATHS p324 (lp325 Vpages p326 asVDEFAULT_PAGINATION p327 I10 sVDOCUTILS_SETTINGS p328 (dp329 sVTRANSLATION_FEED_ATOM p330 Vfeeds/all-%s.atom.xml p331 sVJINJA_EXTENSIONS p332 (lp333 sVSTATIC_PATHS p334 (lp335 Vimages p336 asVDAY_ARCHIVE_SAVE_AS p337 g62 sVARTICLE_LANG_URL p338 V{slug}-{lang}.html p339 sVSLUGIFY_SOURCE p340 Vtitle p341 sVSTATIC_URL p342 V{path} p343 sVCATEGORY_FEED_ATOM p344 Vfeeds/feed.%s.xml p345 sVOUTPUT_SOURCES p346 I00 sVDIRECT_TEMPLATES p347 (Vindex p348 Vtags p349 Vcategories p350 Vauthors p351 Varchives p352 tp353 sVPDF_GENERATOR p354 I00 sVSTATIC_EXCLUDES p355 (lp356 sVTAG_URL p357 Vtag/{slug}.html p358 sVARTICLE_PATHS p359 (lp360 g62 asVLOG_FILTER p361 (lp362 sVFILENAME_METADATA p363 V(?P\u005cd{4}-\u005cd{2}-\u005cd{2}).* p364 sVDISPLAY_PAGES_ON_MENU p365 I01 sVPELICAN_CLASS p366 Vpelican.Pelican p367 sVCACHE_PATH p368 V/srv/www/cache p369 sVAUTORELOAD_IGNORE_CACHE p370 I00 sVINTRASITE_LINK_REGEX p371 V[{|](?P.*?)[|}] p372 sVDEFAULT_ORPHANS p373 I0 sVTAG_CLOUD_MAX_ITEMS p374 I100 sS'AUTHOR' p375 Vwxcafé p376 sVDISPLAY_CATEGORIES_ON_MENU p377 I00 sVCHECK_MODIFIED_METHOD p378 Vmtime p379 sVARTICLE_EXCLUDES p380 (lp381 g326 asVDEFAULT_DATE_FORMAT p382 V%a %d %B %Y p383 sVTAG_CLOUD_STEPS p384 I4 sVPLUGINS p385 (lp386 sVTYPOGRIFY p387 I00 sVFEED_ALL_ATOM p388 Vfeeds/feed.atom.all.xml p389 sVEXTRA_TEMPLATES_PATHS p390 (lp391 sVOUTPUT_RETENTION p392 (tsVPAGE_LANG_URL p393 Vpages/{slug}-{lang}.html p394 sVTHEME p395 V/srv/www/themes/bootstrap2 p396 sVUSE_FOLDER_AS_CATEGORY p397 I01 sVDEBUG p398 I00 sVREVERSE_CATEGORY_ORDER p399 I00 sVRELATIVE_URLS p400 I00 sVDATE_FORMATS p401 (dp402 sVSITEURL p403 V//wxcafe.net p404 sVCONTENT_CACHING_LAYER p405 Vreader p406 sS'SOCIAL' p407 ((VTwitter p408 Vhttps://twitter.com/wxcafe p409 Vtwitter p410 tp411 (VGithub p412 Vhttps://github.com/wxcafe p413 Vgithub p414 tp415 (VEmail p416 Vmailto://wxcafe@wxcafe.net p417 Venvelope p418 tp419 (VGpg p420 Vhttps://pub.wxcafe.net/wxcafe.asc p421 Vkey p422 tp423 (VIRL p424 Vhttp://leloop.org/where.html p425 Vmap-marker p426 tp427 tp428 sVNEWEST_FIRST_ARCHIVES p429 I01 sVPATH_METADATA p430 g62 sVPDF_STYLE p431 Vtwelvepoint p432 sS'DISPLAY_CATEGORIES_ON_BAR' p433 I01 sVTEMPLATE_PAGES p434 (dp435 sVFEED_DOMAIN p436 g404 sVTYPOGRIFY_IGNORE_TAGS p437 (lp438 sVGZIP_CACHE p439 I01 sVAUTHOR_FEED_RSS p440 Vfeeds/%s.rss.xml p441 sS'TIMEZONE' p442 VEurope/Paris p443 sVDRAFT_URL p444 Vdrafts/{slug}.html p445 sVPAGE_EXCLUDES p446 (lp447 g62 asVAUTHOR_SAVE_AS p448 Vauthor/{slug}.html p449 sVREADERS p450 (dp451 sS'FEED_RSS' p452 Vfeeds/feed.rss.xml p453 sVDRAFT_LANG_URL p454 Vdrafts/{slug}-{lang}.html p455 sVOUTPUT_SOURCES_EXTENSION p456 V.text p457 sVPAGINATION_PATTERNS p458 (lp459 g10 (g188 g189 (I0 V{name}{number}{extension} p460 V{name}{number}{extension} p461 tp462 tp463 Rp464 asVSTATIC_EXCLUDE_SOURCES p465 I01 sVJINJA_FILTERS p466 (dp467 sVARTICLE_SAVE_AS p468 Vposts/{slug}/index.html p469 sVYEAR_ARCHIVE_SAVE_AS p470 g62 sVCSS_FILE p471 Vmain.css p472 sVAUTHOR_URL p473 Vauthor/{slug}.html p474 sVIGNORE_FILES p475 (lp476 V.#* p477 asVSUMMARY_MAX_LENGTH p478 I50 sVSLUG_SUBSTITUTIONS p479 (tsVTHEME_STATIC_PATHS p480 (lp481 Vstatic p482 asS'CATEGORY_FEED_RSS' p483 Vfeeds/feed.rss.%s.xml p484 sVTHEME_STATIC_DIR p485 Vtheme p486 sVLOAD_CONTENT_CACHE p487 I01 sVDRAFT_LANG_SAVE_AS p488 Vdrafts/{slug}-{lang}.html p489 sS'FEED_ALL_RSS' p490 Vfeeds/feed.rss.all.xml p491 sVEXTRA_PATH_METADATA p492 (dp493 sVLOCALE p494 (lp495 g62 asVWRITE_SELECTED p496 (lp497 sVDELETE_OUTPUT_DIRECTORY p498 I00 sVFEED_MAX_ITEMS p499 g62 sVPATH p500 V/srv/www/content p501 sVPAGE_URL p502 Vpages/{slug}/ p503 sVSITENAME p504 VWxcafé p505 sVARTICLE_PERMALINK_STRUCTURE p506 g62 sVARTICLE_URL p507 Vposts/{slug}/ p508 sVMONTH_ARCHIVE_SAVE_AS p509 g62 sVDEFAULT_METADATA p510 (tsVDEFAULT_CATEGORY p511 Vmisc p512 sVPLUGIN_PATHS p513 (lp514 sVPAGINATED_DIRECT_TEMPLATES p515 (Vindex p516 tp517 sVPDF_STYLE_PATH p518 g62 sVSTATIC_SAVE_AS p519 g343 sVTAG_SAVE_AS p520 Vtag/{slug}.html p521 sVPYGMENTS_RST_OPTIONS p522 (dp523 sVAUTHOR_FEED_ATOM p524 Vfeeds/%s.atom.xml p525 sVARTICLE_LANG_SAVE_AS p526 g339 sVPAGE_SAVE_AS p527 Vpages/{slug}/index.html p528 sVMD_EXTENSIONS p529 (lp530 Vcodehilite(linenums=False, guess_lang=True, noclasses=True, pygments_style=monokai) p531 aVsmarty p532 asVOUTPUT_PATH p533 V/srv/www/output p534 sS'FEED_ATOM' p535 Vfeeds/feed.atom.xml p536 sVDEFAULT_STATUS p537 Vpublished p538 ssbsVtitle p539 VNAT p540 stp541 tp542 sV/srv/www/content/update-a-propos-du-blog.md p543 (F1441303347.8733363 (V

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

\u000a
    \u000a
  • \u000a

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

    \u000a
  • \u000a
  • \u000a

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

    \u000a
  • \u000a
\u000a

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

\u000a

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

\u000a

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

\u000a

A plus tard!

p544 (dp545 Vdate p546 g5 (S'\x07\xdc\t\x12\x109\x00\x00\x00\x00' p547 tp548 Rp549 sVcategory p550 g10 (g11 g12 Ntp551 Rp552 (dp553 g16 VNotes p554 sg18 Vnotes p555 sg20 g21 sbsVauthor p556 g10 (g268 g12 Ntp557 Rp558 (dp559 g16 VWxcafe p560 sg18 Vwxcafe p561 sg20 g21 sbsVslug p562 Vupdate-a-propos-du-blog p563 sVtitle p564 VUpdate a propos du blog p565 stp566 tp567 sV/srv/www/content/ssl-starttls.md p568 (F1440203789.102608 (V

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

\u000a

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

\u000a

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

\u000a

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

p569 (dp570 Vdate p571 g5 (S'\x07\xdf\x05\x10\x02\x00\x00\x00\x00\x00' p572 tp573 Rp574 sVcategory p575 g10 (g11 g12 Ntp576 Rp577 (dp578 g16 VNote p579 sg18 Vnote p580 sg20 (dp581 VCATEGORY_URL p582 Vcategory/{slug}/ p583 sVPAGE_ORDER_BY p584 Vbasename p585 sVWITH_FUTURE_DATES p586 I01 sVCATEGORY_SAVE_AS p587 Vcategory/{slug}/index.html p588 sS'LINKS' p589 ((VSource! p590 Vhttps://github.com/wxcafe/blog-source p591 Vcode p592 tp593 (VPublic Git p594 Vhttp://git.wxcafe.net p595 Vgithub-sign p596 tp597 tp598 sVARTICLE_ORDER_BY p599 Vslug p600 sVDEFAULT_LANG p601 Vfr p602 sVCACHE_CONTENT p603 I01 sVPAGE_LANG_SAVE_AS p604 Vpages/{slug}-{lang}.html p605 sVDRAFT_SAVE_AS p606 Vdrafts/{slug}.html p607 sVPAGE_PATHS p608 (lp609 Vpages p610 asVDEFAULT_PAGINATION p611 I10 sVDOCUTILS_SETTINGS p612 (dp613 sVTRANSLATION_FEED_ATOM p614 Vfeeds/all-%s.atom.xml p615 sVJINJA_EXTENSIONS p616 (lp617 sVSTATIC_PATHS p618 (lp619 Vimages p620 asVDAY_ARCHIVE_SAVE_AS p621 g62 sVARTICLE_LANG_URL p622 V{slug}-{lang}.html p623 sVSLUGIFY_SOURCE p624 Vtitle p625 sVSTATIC_URL p626 V{path} p627 sVCATEGORY_FEED_ATOM p628 Vfeeds/feed.%s.xml p629 sVOUTPUT_SOURCES p630 I00 sVDIRECT_TEMPLATES p631 (Vindex p632 Vtags p633 Vcategories p634 Vauthors p635 Varchives p636 tp637 sVPDF_GENERATOR p638 I00 sVSTATIC_EXCLUDES p639 (lp640 sVTAG_URL p641 Vtag/{slug}.html p642 sVARTICLE_PATHS p643 (lp644 g62 asVLOG_FILTER p645 (lp646 sVFILENAME_METADATA p647 V(?P\u005cd{4}-\u005cd{2}-\u005cd{2}).* p648 sVDISPLAY_PAGES_ON_MENU p649 I01 sVPELICAN_CLASS p650 Vpelican.Pelican p651 sVCACHE_PATH p652 V/srv/www/cache p653 sVAUTORELOAD_IGNORE_CACHE p654 I00 sVINTRASITE_LINK_REGEX p655 V[{|](?P.*?)[|}] p656 sVDEFAULT_ORPHANS p657 I0 sVTAG_CLOUD_MAX_ITEMS p658 I100 sS'AUTHOR' p659 Vwxcafé p660 sVDISPLAY_CATEGORIES_ON_MENU p661 I00 sVCHECK_MODIFIED_METHOD p662 Vmtime p663 sVARTICLE_EXCLUDES p664 (lp665 g610 asVDEFAULT_DATE_FORMAT p666 V%a %d %B %Y p667 sVTAG_CLOUD_STEPS p668 I4 sVPLUGINS p669 (lp670 sVTYPOGRIFY p671 I00 sVFEED_ALL_ATOM p672 Vfeeds/feed.atom.all.xml p673 sVEXTRA_TEMPLATES_PATHS p674 (lp675 sVOUTPUT_RETENTION p676 (tsVPAGE_LANG_URL p677 Vpages/{slug}-{lang}.html p678 sVTHEME p679 V/srv/www/themes/bootstrap2 p680 sVUSE_FOLDER_AS_CATEGORY p681 I01 sVDEBUG p682 I00 sVREVERSE_CATEGORY_ORDER p683 I00 sVRELATIVE_URLS p684 I00 sVDATE_FORMATS p685 (dp686 sVSITEURL p687 V//wxcafe.net p688 sVCONTENT_CACHING_LAYER p689 Vreader p690 sS'SOCIAL' p691 ((VTwitter p692 Vhttps://twitter.com/wxcafe p693 Vtwitter p694 tp695 (VGithub p696 Vhttps://github.com/wxcafe p697 Vgithub p698 tp699 (VEmail p700 Vmailto://wxcafe@wxcafe.net p701 Venvelope p702 tp703 (VGpg p704 Vhttps://pub.wxcafe.net/wxcafe.asc p705 Vkey p706 tp707 (VIRL p708 Vhttps://www.openstreetmap.org/relation/105146 p709 Vmap-marker p710 tp711 tp712 sVNEWEST_FIRST_ARCHIVES p713 I01 sVPATH_METADATA p714 g62 sVPDF_STYLE p715 Vtwelvepoint p716 sS'DISPLAY_CATEGORIES_ON_BAR' p717 I01 sVTEMPLATE_PAGES p718 (dp719 sVFEED_DOMAIN p720 g688 sVTYPOGRIFY_IGNORE_TAGS p721 (lp722 sVGZIP_CACHE p723 I01 sVAUTHOR_FEED_RSS p724 Vfeeds/%s.rss.xml p725 sS'TIMEZONE' p726 VEurope/Paris p727 sVDRAFT_URL p728 Vdrafts/{slug}.html p729 sVPAGE_EXCLUDES p730 (lp731 g62 asVAUTHOR_SAVE_AS p732 Vauthor/{slug}.html p733 sVREADERS p734 (dp735 sS'FEED_RSS' p736 Vfeeds/feed.rss.xml p737 sVDRAFT_LANG_URL p738 Vdrafts/{slug}-{lang}.html p739 sVOUTPUT_SOURCES_EXTENSION p740 V.text p741 sVPAGINATION_PATTERNS p742 (lp743 g10 (g188 g189 (I0 V{name}{number}{extension} p744 V{name}{number}{extension} p745 tp746 tp747 Rp748 asVSTATIC_EXCLUDE_SOURCES p749 I01 sVJINJA_FILTERS p750 (dp751 sVARTICLE_SAVE_AS p752 Vposts/{slug}/index.html p753 sVYEAR_ARCHIVE_SAVE_AS p754 g62 sVCSS_FILE p755 Vmain.css p756 sVAUTHOR_URL p757 Vauthor/{slug}.html p758 sVIGNORE_FILES p759 (lp760 V.#* p761 asVSUMMARY_MAX_LENGTH p762 I50 sVSLUG_SUBSTITUTIONS p763 (tsVTHEME_STATIC_PATHS p764 (lp765 Vstatic p766 asS'CATEGORY_FEED_RSS' p767 Vfeeds/feed.rss.%s.xml p768 sVTHEME_STATIC_DIR p769 Vtheme p770 sVLOAD_CONTENT_CACHE p771 I01 sVDRAFT_LANG_SAVE_AS p772 Vdrafts/{slug}-{lang}.html p773 sS'FEED_ALL_RSS' p774 Vfeeds/feed.rss.all.xml p775 sVEXTRA_PATH_METADATA p776 (dp777 sVLOCALE p778 (lp779 g62 asVWRITE_SELECTED p780 (lp781 sVDELETE_OUTPUT_DIRECTORY p782 I00 sVFEED_MAX_ITEMS p783 g62 sVPATH p784 V/srv/www/content p785 sVPAGE_URL p786 Vpages/{slug}/ p787 sVSITENAME p788 VWxcafé p789 sVARTICLE_PERMALINK_STRUCTURE p790 g62 sVARTICLE_URL p791 Vposts/{slug}/ p792 sVMONTH_ARCHIVE_SAVE_AS p793 g62 sVDEFAULT_METADATA p794 (tsVDEFAULT_CATEGORY p795 Vmisc p796 sVPLUGIN_PATHS p797 (lp798 sVPAGINATED_DIRECT_TEMPLATES p799 (Vindex p800 tp801 sVPDF_STYLE_PATH p802 g62 sVSTATIC_SAVE_AS p803 g627 sVTAG_SAVE_AS p804 Vtag/{slug}.html p805 sVPYGMENTS_RST_OPTIONS p806 (dp807 sVAUTHOR_FEED_ATOM p808 Vfeeds/%s.atom.xml p809 sVARTICLE_LANG_SAVE_AS p810 g623 sVPAGE_SAVE_AS p811 Vpages/{slug}/index.html p812 sVMD_EXTENSIONS p813 (lp814 Vcodehilite(linenums=False, guess_lang=True, noclasses=True, pygments_style=monokai) p815 aVsmarty p816 asVOUTPUT_PATH p817 V/srv/www/output p818 sS'FEED_ATOM' p819 Vfeeds/feed.atom.xml p820 sVDEFAULT_STATUS p821 Vpublished p822 ssbsVtitle p823 VSSL - STARTTLS p824 sVslug p825 Vssl-starttls p826 sVauthor p827 g10 (g268 g12 Ntp828 Rp829 (dp830 g16 VWxcafe p831 sg18 Vwxcafe p832 sg20 g581 sbstp833 tp834 sV/srv/www/content/les-systemes-de-fichiers.md p835 (F1441303347.8733363 (V

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

\u000a

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

\u000a

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

\u000a

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

\u000a

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

\u000a

Il convient de bien faire la différence entre le système de fichier et\u000al’arborescence des fichiers. Si l’arborescence des fichiers est en fait\u000aune entité virtuelle englobant la racine / et tous les fichiers et\u000adossiers contenus dedans, le système de fichier permet a votre système\u000aGNU/Linux de distinguer les différents fichiers composants cette\u000aarborescence.

\u000a

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

\u000a
    \u000a
  • \u000a

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

    \u000a
  • \u000a
  • \u000a

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

    \u000a
  • \u000a
  • \u000a

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

    \u000a
  • \u000a
  • \u000a

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

    \u000a
  • \u000a
  • \u000a

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

    \u000a
  • \u000a
  • \u000a

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

    \u000a
  • \u000a
  • \u000a

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

    \u000a
  • \u000a
  • \u000a

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

    \u000a
  • \u000a
\u000a

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

\u000a

Les systèmes de fichiers, s’ils peuvent ne pas sembler primordiaux au\u000afonctionnement du système, sont en fait de première importance, et ce\u000achoix ne devrait pas être laissé au hasard, et être mis a jour\u000arégulièrement (pour éviter les failles de sécurité…)

\u000a

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

p836 (dp837 Vdate p838 g5 (S'\x07\xdc\t\x19\n\x1c\x00\x00\x00\x00' p839 tp840 Rp841 sVcategory p842 g10 (g11 g12 Ntp843 Rp844 (dp845 g16 VTeaching p846 sg18 Vteaching p847 sg20 g21 sbsVauthor p848 g10 (g268 g12 Ntp849 Rp850 (dp851 g16 VWxcafe p852 sg18 Vwxcafe p853 sg20 g21 sbsVslug p854 Vles-systemes-de-fichiers p855 sVtitle p856 VLes systèmes de fichiers p857 stp858 tp859 sV/srv/www/content/dns.md p860 (F1431623308.6978474 (V

Le DNS (Domain Name System) est le service permettant la résolution des noms de\u000adomaines en différentes informations : adresses IPv4, adresses IPv6, certificats\u000aDNSSEC ou IPsec, localisation géographique, ou encore texte. En général, le DNS\u000aest utilisé pour résoudre des noms de domaines en adresses IP, et ainsi pour\u000asimplifier la vie de tous les utilisateurs (je doute que tout le monde retienne\u000ade se connecter a http://173.194.45.66, ou a \u000ahttp://199.16.156.70. Voire même a \u000ahttp://5.39.76.46).

\u000a

Cependant, le DNS est un système qui date de 1984, et les exigences de l’époque\u000aen termes d’expérience utilisateur n’étaient pas forcément aussi importantes que\u000ade nos jours. La configuration des serveurs DNS peut ainsi être assez\u000acontre intuitive.\u000aCela étant dit, comprendre le fonctionnement de DNS et contrôler ses\u000aenregistrements est important.

\u000a

Tout d’abord, une petite explication théorique. Le DNS fonctionne de la même\u000afaçon que le système de fichiers : en arborescence. Cependant, là ou la racine\u000adu FS est /, celle de DNS est ., et là ou il convient d’écrire, par exemple,/usr/ et ou la progression se fait de gauche a droite pour le FS, pour DNS le\u000a. n’est pas obligatoire et la progression se fait de droite a gauche. Par\u000aexemple, le tld(top level domain, domaine de haut niveau) com, et le domaine\u000agoogle.com appartient a com, on écrit donc google.com sans écrire le point\u000aa la fin de façon courante.

\u000a

Le reverse DNS est une variante du DNS “classique” permettant de résoudre les\u000aadresses IP en nom de domaine. Ainsi, 5.39.46.76 a pour domaine wxcafe.net. \u000aCependant, le reverse DNS n’a, par définition, pas de TLD sur lequel se diriger\u000aquand on lui adresse une query. Les “adresses” que l’on query en reverse DNS\u000asont donc constituées de l’adresse IP, dans le sens contraire a l’ordre\u000ahabituel, et du faux domaine .in-addr.arpa\u000aPar exemple, pour connaitre le reverse de 5.39.46.76, il faudra faire dig PTR\u000a76.46.39.5.in-addr.arpa. La réponse sera, évidemment, wxcafe.net

\u000a

Voyons maintenant comment mettre en place son propre serveur DNS. Tout d’abord,\u000aquelques informations. DNS fonctionne sur le port 53 en UDP, et la commande\u000autilisée pour faire des tests DNS est dig. Le DNS fonctionne avec des\u000a“enregistrements”, records en anglais. Par exemple, un record A indique une\u000aadresse IP, un record NS indique un Serveur de nom, etc. dig se base sur ces\u000arecords : par défaut, il ira chercher le(s) record(s) A correspondant(s) au nom\u000ade domaine que vous donnez en argument, mais en précisant un autre type de\u000arecord, vous pouvez obtenir n’importe quelle information : par exemple, dig NS\u000awxcafe.net devrait vous renvoyer

\u000a
; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> NS wxcafe.net\u000a;; global options: +cmd\u000a;; Got answer:\u000a;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13846\u000a;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0\u000a\u000a;; QUESTION SECTION:\u000a;wxcafe.net.            IN  NS\u000a\u000a;; ANSWER SECTION:\u000awxcafe.net.     3600    IN  NS  ns.wxcafe.net.\u000awxcafe.net.     3600    IN  NS  ns.home.wxcafe.net.\u000a\u000a;; Query time: 60 msec\u000a;; SERVER: 10.0.42.1#53(10.0.42.1)\u000a;; WHEN: Tue Dec 10 13:31:18 2013\u000a;; MSG SIZE  rcvd: 67\u000a
\u000a\u000a\u000a

Comme vous pouvez le voir, les serveurs DNS principaux pour \u000awxcafe.net sont ns.wxcafe.net et ns.home.wxcafe.net,\u000aqui sont respectivement des alias pour wxcafe.net et home.wxcafe.net. Ainsi,\u000achacun fait autorité pour lui même, et le problème évident est que le résolveur\u000ane peut résoudre la query si il est renvoyé encore et encore vers le même\u000aserveur. Il convient donc de définir dans le même fichier de configuration\u000al’adresse de ces deux serveurs. Ainsi, le résolveur, au bout de son deuxième\u000aloop, se rendra compte qu’il est en train de faire une boucle infinie et\u000ademandera l’adresse au serveur auquel il est connecté. La première indication de\u000adirection se fait grâce au serveur du TLD.

\u000a

La configuration de bind est assez simple dans le principe, le plus complexe\u000aétant en fait d’écrire les fichiers de zone.\u000aLa configuration de bind sous debian se fait dans le dossier /etc/bind/. Il\u000aexiste 4 fichiers de configuration principaux : named.conf,\u000anamed.conf.default-zones, named.conf.local et named.conf.options. \u000anamed.conf contient les options par défaut de bind, named.conf.default-zones\u000ales déclarations des zones par défaut (auxquelles il vaut mieux ne pas toucher),\u000anamed.conf.local contient les déclarations de vos zones, et\u000anamed.conf.options contient les options que vous rajoutez pour changer le\u000acomportement de bind.

\u000a

Pour commencer, il convient de préciser que nous allons parler ici du cas dans\u000alequel se trouve wxcafe.net: deux domaines dont nous voulons faire l’autorité,\u000adeux serveurs DNS, et un service de résolution récursive limitée a quelques IPs\u000a(notamment mon accès chez moi).

\u000a

Examinons tout d’abord les fichiers de configuration de named.named.conf.local contient les définitions des zones forward et reverse. \u000aSur wxcafe.net, les zones wxcafe.net et 76.46.39.5.in-addr.arpa sont gérées\u000aen master, et les zones home.wxcafe.net et 103.177.67.80.in-addr.arpa sont\u000agérées en slave. Nous n’examinerons ici que les déclarations de zones sur ce\u000aserveur, et pas sur home., car elles sont sensiblement les mêmes. La différence\u000aprincipale étant que l’un héberge en slave les masters de l’autre.\u000aLe fichier named.conf.local sur wxcafe.net contient donc

\u000a
zone "wxcafe.net" {\u000a    type master;\u000a    file "/etc/bind/master/wxcafe.net";\u000a    allow-transfer {\u000a        80.67.177.103;\u000a    };\u000a};\u000a\u000azone "home.wxcafe.net" {\u000a    type slave;\u000a    file "/etc/bind/slave/home.wxcafe.net";\u000a    masters {\u000a        80.67.177.103;\u000a    };\u000a};\u000a\u000azone "46.76.39.5.in-addr.arpa" {\u000a    type master;\u000a    file "/etc/bind/master/46.76.39.5.in-addr.arpa";\u000a    allow-transfer {\u000a        80.67.177.103;\u000a    };\u000a};\u000a\u000azone "103.177.67.80.in-addr.arpa" {\u000a    type slave;\u000a    file "/etc/bind/slave/103.177.67.80.in-addr.arpa";\u000a    masters {\u000a        80.67.177.103;\u000a    };\u000a};\u000a
\u000a\u000a\u000a

Cela devrait être relativement clair. Globalement, les zones master ont un\u000afichier dans /etc/bind/master/, et les slaves un fichier dans\u000a/etc/bind/slave/, les masters autorisent le transfert vers home.wxcafe.net\u000atandis que les slaves déclarent home.wxcafe.net comme master, et le reste est\u000aassez parlant.

\u000a

Voyons maintenant le fichier de zone concernant wxcafe.net, soit\u000a/etc/bind/master/wxcafe.net :

\u000a
$TTL 3600    ; 1 hour\u000a@               IN SOA ns.wxcafe.net. wxcafe.wxcafe.net. (\u000a                        2014011001  ; serial\u000a                        3h          ; refresh  \u000a                        1h          ; retry\u000a                        168h        ; expire\u000a                        300         ; negative response ttl\u000a                        )\u000a\u000a; Name servers\u000a                IN  NS      ns.wxcafe.net.\u000a                IN  NS      ns.home.wxcafe.net.\u000a\u000a; Mail exchangers\u000a                IN  MX  10  wxcafe.net.\u000a                IN  SPF "v=spf1 ip4:5.39.76.46 a -all"\u000a\u000a; Main A/AAAA records\u000a                IN  A       5.39.76.46\u000ans              IN  A       5.39.76.46\u000a\u000a; Aliases\u000adata            IN  CNAME   wxcafe.net.\u000a;        [...]\u000awww             IN  CNAME   wxcafe.net.\u000a\u000a\u000a; home.wxcafe.net. definition\u000a$ORIGIN home.wxcafe.net.\u000a@               IN  NS      ns.home.wxcafe.net.\u000a                IN  NS      ns.wxcafe.net.\u000ans              IN  A       80.67.177.103\u000a                IN  A       80.67.177.103\u000a
\u000a\u000a\u000a

Alors. Expliquons ligne par ligne.
\u000aTout d’abord, le TTL (time to live) est un paramètre définissant le temps\u000apendant lequel les serveurs récursif (qui font un cache des données) doivent\u000acacher ce fichier de zone.
\u000aLe @ est un raccourci pour exprimer le nom de domaine courant. Ici, donc,\u000awxcafe.net.
\u000aMaintenant, nous arrivons a un record important : SOA (Start of Authority). \u000aCe record prend de nombreux arguments, dans l’ordre :
\u000a - Le nameserver autoritaire pour le nom de domaine en question,
\u000a - L’adresse email du responsable de cette zone, avec le premier point\u000a remplacé par un @,

\u000a

puis entre parenthèses :
\u000a - Le numéro de série (“version” du fichier de zone, ici au format\u000a YYYYMMDDNN)
\u000a - La période de refresh, période entre chaque mise a jour du nameserver\u000a authoritaire secondaire,
\u000a - La période de retry, le temps entre chaque essai de mise a jour si le\u000a nameserveur authoritaire primaire est indisponible,
\u000a - La période d’expire, le temps qu’attendra le serveur autoritaire\u000a secondaire avant de supprimer les informations de son cache si le primaire\u000a reste indisponible, et enfin
\u000a - La période de TTL négatif, le temps qu’attendra le serveur secondaire\u000a avant de ne plus offrir les informations de cette zone si le serveur\u000a primaire est injoignable.

\u000a

Bon, tout ceci est peut-être un peu confus, mais ce n’est pas le record le plus\u000aimportant a lire (pour les humains en tout cas). Continuons :

\u000a

NS (nameserver) permet de désigner les différents nameservers faisant autorité\u000apour ce domaine.

\u000a

MX permet d’indiquer ou il convient d’envoyer les emails pour ce domaine. \u000aSPF est un record d’authentification pour les emails.\u000aLes records A désignent l’association entre un nom de domaine et une adresse\u000aIPv4. Les records AAAA font de même pour les IPv6, mais malheureusement ce site\u000an’est pas encore en IPv6.

\u000a

Les CNAME (canonical name) sont en quelque sorte des alias, ils permettent de\u000amettre en place des domaines exactement semblables a d’autre (ce qui permet par\u000aexemple de filtrer ensuite avec les Virtual Hosts d’Apache, pour le web)

\u000a

Enfin, la partie qui suit commence avec une déclaration $ORIGIN, ce qui permet\u000ade changer la valeur du @ et des noms de domaine non complets (qui ne se\u000aterminent pas avec un .). Ainsi, la partie suivant définit les nameservers et\u000al’adresse IP principale de home.wxcafe.net et de ns.home.wxcafe.net. Comme on\u000al’a vu, étant donné que ce nom de domaine est géré par un autre serveur DNS,\u000acela permet de rediriger les requêtes nous parvenant et demandant un domaine se\u000atrouvant sous home.wxcafe.net.

\u000a

Les autres fichiers de zone sont sensiblement similaires, avec les quelques\u000adifférences n’étant en fin de compte que des différences de valeurs (dues au\u000afait que, eh bah, c’est pas les mêmes domaines…).

\u000a

Voila donc une courte explication de ce qu’est le DNS. Bien entendu, tout n’est\u000apas expliqué ici, je ne suis passé que sur ce qui est en place au niveau de\u000awxcafe.net, et encore, rapidement. Si vous voulez en savoir plus, vous pouvez\u000aaller vous renseigner directement a la source : le RFC\u000a1034 et le \u000aRFC 1035. Dans un autre style (bien plus\u000aavancé) le blog de Stéphane Bortzmeyer est interessant\u000aaussi.

p861 (dp862 Vdate p863 g5 (S'\x07\xde\x02\x18\x021\x00\x00\x00\x00' p864 tp865 Rp866 sVcategory p867 g10 (g11 g12 Ntp868 Rp869 (dp870 g16 VTutoriel p871 sg18 Vtutoriel p872 sg20 g293 sbsVtitle p873 VMise en place d'un serveur DNS p874 sVslug p875 Vmise-en-place-dun-serveur-dns p876 sVauthor p877 g10 (g268 g12 Ntp878 Rp879 (dp880 g16 VWxcafe p881 sg18 Vwxcafe p882 sg20 g293 sbstp883 tp884 sV/srv/www/content/docker-ebooks.md p885 (F1440203874.121662 (V

Vous avez peut être déjà entendu parler de Docker. Si\u000ace n’est pas le cas, voila les bases : Docker est un système de containers. Les\u000acontainers sont une forme particulière de virtualisation, ou le kernel n’est pas\u000avirtualisé, mais ou les processus du système hôte sont séparés de ceux des\u000asystèmes invités. Cela est possible depuis longtemps sous FreeBSD avec les Jails,\u000amais n’est devenu possible sous linux que récemment grâce aux cgroups,\u000aqui permettent justement de séparer des groupes de processus. Le principe de\u000aDocker est donc d’avoir une machine hôte sur laquelle s’exécutent plusieurs\u000aconteneurs Dockers, chacun séparé des autres et de l’hôte, mais utilisant tous\u000ale même kernel. Cela pose quelques questions en terme de sécurités, puisque la\u000aséparation est bien plus fine qu’avec de la virtualisation classique. En effet,\u000aici, en trouvant un exploit kernel, un attaquant aurait potentiellement la\u000acapacité de remonter jusqu’à l’hôte, puisqu’il n’est pas vraiment séparé des\u000ainvités.

\u000a

Quoi qu’il en soit, Docker permet donc de virtualiser a moindre coût des\u000asystèmes GNU/Linux. “Mais pourquoi utiliser Docker, dans ce cas”, vous\u000ademandez-vous peut être, “puisque Xen peut faire la même chose, et plus\u000a(notamment, Xen est capable de virtualiser autre chose que GNU/Linux)?”. Et bien\u000ac’est très simple : Docker apporte la simplicité de déploiement d’applications.\u000aLes conteneurs Dockers peuvent être décrit en un fichier, nommé Dockerfile, qui\u000apermet de répliquer un conteneur en quelques minutes sur un autre hôte, en une\u000acommande. Le Docker Hub permet aussi de récupérer\u000arapidement et facilement un grand nombre d’images déjà configurées.

\u000a

Maintenant que nous avons expliqué rapidement ce qu’était Docker, voyons le\u000arapport avec les ebooks et Twitter.

\u000a

Les comptes dits “ebooks” (le nom vient a l’origine de horse_ebooks,\u000avoir ici pourquoi) sont des bots\u000atwitter utilisant des Chaines de Markov,\u000aavec les tweets d’un utilisateur “source” comme corpus, pour produire des tweets\u000aressemblant a ceux de l’utilisateur source. Nous allons voir maintenant comment\u000aen installer un.

\u000a

C’est, comme disent certaines personnes, “fun”.

\u000a

Il existe de nombreuses librairies écrites pour créer ce genre de bots,\u000acependant dans ce cas nous nous concentrerons sur\u000acelle-ci, qui est une lib ruby créée\u000apar @m1sp, qui gère pour nous a la fois l’API\u000atwitter et la génération des messages.

\u000a

Cependant, cela n’explique toujours pas le lien avec Docker. Ce lien est très\u000asimple : nous utilisons un container pour faire tourner les bots. Depuis la\u000aversion 3, la gem twitter_ebooks permet de faire tourner plusieurs bots dans une\u000aseule instance. Cependant, il est toujours plus sûr d’isoler les bots, et les\u000acontainers dockers permettent de les déployer sur n’importe quelle machine\u000a(celleux qui ont déjà tenté de mettre en place une application basée sur ruby\u000asauront le problème que cela pose habituellement). Pour ce faire, j’ai créé un\u000arepo github qui contient toutes les\u000apièces nécessaires pour mettre cela en place : le bot en lui même, les deux \u000aDockerfiles, etc.

\u000a

Le fonctionnement du bot est\u000asimple : après avoir installé la gem twitter_ebooks, vous archivez le corpus de\u000al’utilisateur source avec ebooks archive <username> <filename> (c’est du json)\u000a, puis vous convertissez le json en fichier utilisable par le bot : ebooks\u000aconsume <filename>. Cela fait, démarrer le bot revient a lancer le container :\u000adocker run -d <container name> Pour plus d’informations, allez voir la\u000adocumentation Docker

\u000a

Bien entendu, dans l’idéal il faudrait mettre a jour les corpus de chaque\u000autilisateur régulièrement. Cela est très simple a mettre en place avec un simple\u000ascript cron :

\u000a
00 00 * * *    /usr/local/bin/ebooks archive username /usr/local/ebooks/main/corpus/username.json >> /var/log/ebooks/update.log 2>&1\u000a00 05 * * *    cd /usr/local/ebooks/main/ && /usr/local/bin/ebooks consume corpus/username.json >> /var/log/ebooks/update.log 2>&1\u000a00 10 * * *    docker rm -f bots >/dev/null 2>&1\u000a00 15 * * *    docker rmi bots  > /dev/null 2>&1\u000a00 20 * * *    cd /usr/local/ebooks/main/ && docker build --rm -t bots . >> /var/log/ebooks/build.log 2>&1\u000a00 25 * * *    docker run -d --name bots bots >> /var/log/ebooks/run.log 2>&1\u000a
\u000a\u000a\u000a

Les 5 minutes entre chaque commande sont laissées pour empécher que deux\u000acommandes ne s’executent en même temps.

\u000a

Et voila, vous avez un container Docker qui fait tourner une application en ruby\u000atoute sale, et votre système hôte reste propre. Bien sûr, ce n’est qu’un exemple\u000ades possibilités de Docker : par exemple, on peut aussi faire tourner des\u000aapplications “usuelles”\u000adedans,\u000apuisque l’overhead de Docker est minimal, et beaucoup d’autres applications\u000aexistent.

p886 (dp887 Vdate p888 g5 (S'\x07\xdf\x02\x1c\x0e\x0b\x00\x00\x00\x00' p889 tp890 Rp891 sVcategory p892 g10 (g11 g12 Ntp893 Rp894 (dp895 g16 VNote p896 sg18 Vnote p897 sg20 g581 sbsVtitle p898 VDocker et les ebooks sur Twitter p899 sVslug p900 Vdocker-et-les-ebooks-sur-twitter p901 sVauthor p902 g10 (g268 g12 Ntp903 Rp904 (dp905 g16 VWxcafe p906 sg18 Vwxcafe p907 sg20 g581 sbstp908 tp909 sV/srv/www/content/plan9.md p910 (F1431623308.6938474 (V

Plan 9 from Outer Space est un film de série Z, produit en 1959 par Edward D. \u000aWood. Il est assez connu comme étant l’un des pires films jamais sortis. Rempli\u000ad’erreur de montage, d’effets spéciaux au rabais, et ayant même connu la mort\u000ad’un acteur, il a ainsi atteint le statut de film culte grâce a sa médiocrité.

\u000a

Plan 9 from Bell Labs est un OS venant de Bell Labs (comme son nom l’indique),\u000aet qui a été pensé comme le successeur d’Unix. Il est conçu comme une poursuite\u000ades concepts unixiens jusqu’à leur but naturel. Ainsi, c’est Plan9 qui a\u000aintroduit le concept d’UnionFS, le protocole 9P qui permet d’acceder a des\u000aressources appartenant a d’autres ordinateurs a distance, un support de\u000al’unicode par défaut et sur tout le système (a l’inverse d’Unix, qui fonctionne\u000aa la base en ASCII), un support de ProcFS amélioré, une interface graphique par\u000adéfaut, et d’autres améliorations sur les thèmes de base que propose Unix.

\u000a

Cependant, Plan9 n’a jamais été véritablement utilisé pour quoi que ce soit\u000ad’autre que la recherche en systèmes, et c’est dommage, parce que Plan9 a\u000aquelque chose de très intéressant à proposer. En effet, en ces jours d’intérêt\u000agrandissant pour le klaoude et la délocalisation a la fois du processing et des\u000adonnées, et bien que Plan9 ait été créé bien avant que le terme “cloud\u000acomputing” n’apparaisse pour la première fois, il semble que ce système ait été\u000aconçu pour apporter cette délocalisation tant rêvée.

\u000a

En effet, même si l’on considère que les nouveautés qu’il apporte par rapport a \u000aUnix ne sont pas extraordinaires en soit (alors qu’elles sont déjà\u000aconséquentes), lorsqu’on les prend ensemble, elles font de Plan9 le système\u000ad’exploitation ultime en terme de partage de ressources et de données. \u000aAinsi, le fait que 9P permette de considérer toutes les ressources d’un système\u000adistant comme n’étant qu’une poignée de fichiers permet de le monter comme\u000an’importe quel système de fichier. Le fait que chaque utilisateur puisse accéder\u000aa plusieurs namespaces de façon transparente (et donc de démarrer, arrêter et \u000agérer des processus sur chacun de ces namespaces) et que chaque namespace puisse\u000ainteragir avec les autres, même s’ils sont hétérogènes (c’est a dire provenant\u000ade machines différentes), permet d’utiliser les ressources d’une machine\u000adistante comme si elle était présente localement. Le mécanisme d’UnionFS permet\u000ade rendre tout ça utilisable, en montant plusieurs systèmes de fichiers sur le\u000amême point de montage, en même temps, et de pouvoir ainsi accéder aux fichiers\u000ade plusieurs machines a la fois (ce qui permet une délocalisation des données\u000abien plus poussée que Dropbox ou Google Drive, et ce en kernelspace).

\u000a

Le réseau fait donc partie intégrante de Plan9, et il devient plus difficile de\u000aparler d’ordinateur lorsque le concept même du système est d’être composé de \u000aclusters eux mêmes composés de machines hétérogènes. Le système de fichier\u000avirtuel /net fourni par le kernel de Plan9 permet d’implémenter très facilement\u000adifférents concepts réseaux : en montant le /net d’un ordinateur du réseau local\u000asur celui servant de gateway vers l’internet, on crée un NAT vers cet ordinateur\u000adu réseau local. En montant le /net d’un ordinateur distant sur un ordinateur\u000alocal via le protocole 9P sécurisé, on crée un VPN : les connections locales se\u000afont en utilisant l’accès de l’ordinateur distant, et les connections entre les\u000adeux sont chiffrées.

\u000a

Bref, bien avant les clusters de Raspberry Pi qui utilisent une api python pour\u000apartager leur “puissance” de calcul en userspace, des superordinateurs pour\u000alesquels le noyau Linux s’est doté du support de jusqu’à 4096 CPUs, des OS tels\u000aJoliOS qui promettent une integration du klaoude alors qu’ils ne sont en fait\u000aque des navigateurs web a peine améliorés et des services de stockage en ligne\u000aqui promettent un accès universel a toutes nos données alors qu’ils ne proposent\u000aque de les garder a disposition par le web, Plan9 promettait une technologie de \u000apartage des ressources système et de données, une intégration du réseau dans le\u000asystème particulièrement poussée, un environnement graphique supporté par le\u000abasesystem et non greffé par dessus comme l’a été X11, et de nombreuses autres \u000aaméliorations sur Unix.

\u000a

Malheureusement, il n’a jamais été adopté de façon véritablement significative,\u000aet ce pour une raison très Unixiènne : “worse is better”. En effet, le parc de\u000amachines Unix déjà installées était suffisamment performant et fonctionnel pour\u000aque des solutions soient développées au dessus du système pour remplir les \u000amêmes fonctions que remplit Plan9 via son kernel, tels le nouveau ProcFS de\u000aLinux, FUSE, etc…

p911 (dp912 Vdate p913 g5 (S'\x07\xdd\t\t\x0b\x11\x00\x00\x00\x00' p914 tp915 Rp916 sVcategory p917 g10 (g11 g12 Ntp918 Rp919 (dp920 g16 VOSes p921 sg18 Voses p922 sg20 g293 sbsVtitle p923 VPlan9 from whichever space p924 sVslug p925 Vplan-9-from-whichever-space p926 sVauthor p927 g10 (g268 g12 Ntp928 Rp929 (dp930 g16 VWxcafe p931 sg18 Vwxcafe p932 sg20 g293 sbstp933 tp934 sV/srv/www/content/nuc-hdmi-cec.md p935 (F1440270221.9626822 (V

J’ai récemment récupéré une télé. Ce post ne se centrant pas sur cette télé,\u000apassons rapidement sur ce qui y est lié : ne souhaitant pas “profiter” du\u000apaysage audiovisuel français (ou PAF), et ayant nombre de films et séries acquis\u000atout a fait légalement (hmm hmm) stockés sur mon serveur local, je souhaitais\u000abrancher sur ma télévision un système me permettant de regarder ces films et\u000aséries, et possiblement quelques sources de vidéos en ligne (Youtube, Netflix,\u000aetc…) simplement.

\u000a

Ayant un Raspberry Pi 1 qui trainait, j’ai\u000adécidé d’installer OpenELEC dessus et de voir ce que ça\u000adonnait. Le résultat n’étant pas satisfaisant (a cause des difficultés du RPi\u000aa faire fonctionner tout ça), j’ai décidé d’upgrader le système.

\u000a

J’ai donc acquis un NUC D34010WYK\u000a(attention, les nouveaux modèles ne fonctionnent pas pour ce qui suit), un \u000aadaptateur HDMI-CEC pour celui-ci, et un\u000aSSD mSATA, en me disant que je\u000apourrais sans trop de problème faire tourner Kodi sur un\u000adebian, avec en plus Steam pour faire du streaming depuis mon desktop. L’autre\u000aavantage de tourner sur du Intel, c’est de pouvoir mater Netflix (puisque le\u000aplugin kodi approprié utilise chrome, et ne fonctionne (a ma connaissance) que\u000asur x86).

\u000a

J’ai donc reçu après un certain temps le matériel sus cité, que j’ai avidement\u000amonté, avant de me rendre compte que le manuel de l’adaptateur Pulse-Eight était\u000a[PDF]assez médiocre. J’ai donc\u000acherché plusieurs heures, avant de trouver [DE]ce \u000apost\u000aexpliquant comment brancher l’adaptateur. Je vais donc résumer ici le processus,\u000ace qui devrait rendre la tache a la fois plus simple pour les autres personnes\u000acherchant l’information, et pour moi si je dois remonter ce système.

\u000a

Pour faire simple, le NUC présente trois headers séparés : un dual-USB, un dit\u000a“Front Panel”, et un appelé “Custom Solution Header”. Les trois sont utilisés\u000aici. La première chose a faire est de brancher les fiches grises et rouges sur\u000ale Custom Solution Header: le branchement doit être fait ainsi :

\u000a
Custom Solution\u000a  \u250c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u2510\u000a  \u2502g\u2502 \u2502·\u2502r\u2502·\u2502\u000a  \u251c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u2524\u000a  \u2502·\u2502·\u2502·\u2502·\u2502·\u2502\u000a  \u2514\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2518\u000a\u000a  g \u2794 fiche grise\u000a  r \u2794 fiche rouge\u000a  · \u2794 pin inutilisé\u000a    \u2794 espace vide (sans pin)\u000a
\u000a\u000a\u000a

Une fois cela fait, il faut brancher le Front Panel. Heureusement, c’est plus\u000afacile, puisqu’il n’y a qu’une seule fiche a brancher ici : la orange.

\u000a
  Front Panel\u000a  \u250c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u2510\u000a  \u2502·\u2502·\u2502·\u2502·\u2502·\u2502\u000a  \u251c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u2524\u000a  \u2502 \u2502·\u2502o\u2502·\u2502·\u2502\u000a  \u2514\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2518\u000a\u000a  o \u2794 fiche orange\u000a  · \u2794 pin inutilisé\u000a    \u2794 espace vide (sans pin)\u000a
\u000a\u000a\u000a

Enfin, il faut encore brancher les fiches restantes sur le header dual-USB.\u000aÉtant donné que ce header contient deux fois les pins nécessaires a un\u000abranchement USB, il est possible de brancher les cables de plusieurs façons.

\u000a
   Dual-USB\u000a  \u250c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u252c\u2500\u2510\u000a  \u2502b\u2502B\u2502v\u2502n\u2502·\u2502\u000a  \u251c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u253c\u2500\u2524\u000a  \u2502·\u2502·\u2502·\u2502·\u2502 \u2502\u000a  \u2514\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2534\u2500\u2518\u000a\u000a  b \u2794 fiche bleue\u000a  B \u2794 fiche Blanche\u000a  v \u2794 fiche verte\u000a  n \u2794 fiche noire\u000a  · \u2794 pin inutilisé\u000a    \u2794 espace vide (sans pin)\u000a
\u000a\u000a\u000a

Tous les branchements étant effectués, il faut maintenant remonter la bête\u000a(attention a ne pas déranger les branchements avec les antennes Wifi, par\u000aexemple), la brancher, et vérifier que tout démarre bien. Il faut aussi changer\u000aun paramètre dans le BIOS intel : dans Power\u2794Secondary Power Settings, il faut\u000aque “Deep S4/S5” soit désactivé. Ceci permettant a la connection HDMI-CEC de\u000adémarrer et le NUC.

\u000a

Ne reste plus ensuite qu’a installer un système digne de ce nom dessus!

p936 (dp937 Vdate p938 g5 (S'\x07\xdf\x08\x16\x02+\x00\x00\x00\x00' p939 tp940 Rp941 sVcategory p942 g10 (g11 g12 Ntp943 Rp944 (dp945 g16 VNote p946 sg18 Vnote p947 sg20 (dp948 VCATEGORY_URL p949 Vcategory/{slug}/ p950 sVPAGE_ORDER_BY p951 Vbasename p952 sVWITH_FUTURE_DATES p953 I01 sVCATEGORY_SAVE_AS p954 Vcategory/{slug}/index.html p955 sS'LINKS' p956 ((VSource! p957 Vhttps://github.com/wxcafe/blog-source p958 Vcode p959 tp960 (VPublic Git p961 Vhttp://git.wxcafe.net p962 Vgithub-sign p963 tp964 tp965 sVARTICLE_ORDER_BY p966 Vslug p967 sVDEFAULT_LANG p968 Vfr p969 sVCACHE_CONTENT p970 I01 sVPAGE_LANG_SAVE_AS p971 Vpages/{slug}-{lang}.html p972 sVDRAFT_SAVE_AS p973 Vdrafts/{slug}.html p974 sVPAGE_PATHS p975 (lp976 Vpages p977 asVDEFAULT_PAGINATION p978 I10 sVDOCUTILS_SETTINGS p979 (dp980 sVTRANSLATION_FEED_ATOM p981 Vfeeds/all-%s.atom.xml p982 sVJINJA_EXTENSIONS p983 (lp984 sVSTATIC_PATHS p985 (lp986 Vimages p987 asVDAY_ARCHIVE_SAVE_AS p988 g62 sVARTICLE_LANG_URL p989 V{slug}-{lang}.html p990 sVSLUGIFY_SOURCE p991 Vtitle p992 sVSTATIC_URL p993 V{path} p994 sVCATEGORY_FEED_ATOM p995 Vfeeds/feed.%s.xml p996 sVOUTPUT_SOURCES p997 I00 sVDIRECT_TEMPLATES p998 (Vindex p999 Vtags p1000 Vcategories p1001 Vauthors p1002 Varchives p1003 tp1004 sVPDF_GENERATOR p1005 I00 sVSTATIC_EXCLUDES p1006 (lp1007 sVTAG_URL p1008 Vtag/{slug}.html p1009 sVARTICLE_PATHS p1010 (lp1011 g62 asVLOG_FILTER p1012 (lp1013 sVFILENAME_METADATA p1014 V(?P\u005cd{4}-\u005cd{2}-\u005cd{2}).* p1015 sVDISPLAY_PAGES_ON_MENU p1016 I01 sVPELICAN_CLASS p1017 Vpelican.Pelican p1018 sVCACHE_PATH p1019 V/srv/www/cache p1020 sVAUTORELOAD_IGNORE_CACHE p1021 I00 sVINTRASITE_LINK_REGEX p1022 V[{|](?P.*?)[|}] p1023 sVDEFAULT_ORPHANS p1024 I0 sVTAG_CLOUD_MAX_ITEMS p1025 I100 sS'AUTHOR' p1026 Vwxcafé p1027 sVDISPLAY_CATEGORIES_ON_MENU p1028 I00 sVCHECK_MODIFIED_METHOD p1029 Vmtime p1030 sVARTICLE_EXCLUDES p1031 (lp1032 g977 asVDEFAULT_DATE_FORMAT p1033 V%a %d %B %Y p1034 sVTAG_CLOUD_STEPS p1035 I4 sVPLUGINS p1036 (lp1037 sVTYPOGRIFY p1038 I00 sVFEED_ALL_ATOM p1039 Vfeeds/feed.atom.all.xml p1040 sVEXTRA_TEMPLATES_PATHS p1041 (lp1042 sVOUTPUT_RETENTION p1043 (tsVPAGE_LANG_URL p1044 Vpages/{slug}-{lang}.html p1045 sVTHEME p1046 V/srv/www/themes/bootstrap2 p1047 sVUSE_FOLDER_AS_CATEGORY p1048 I01 sVDEBUG p1049 I00 sVREVERSE_CATEGORY_ORDER p1050 I00 sVRELATIVE_URLS p1051 I00 sVDATE_FORMATS p1052 (dp1053 sVSITEURL p1054 V//wxcafe.net p1055 sVCONTENT_CACHING_LAYER p1056 Vreader p1057 sS'SOCIAL' p1058 ((VTwitter p1059 Vhttps://twitter.com/wxcafe p1060 Vtwitter p1061 tp1062 (VGithub p1063 Vhttps://github.com/wxcafe p1064 Vgithub p1065 tp1066 (VEmail p1067 Vmailto://wxcafe@wxcafe.net p1068 Venvelope p1069 tp1070 (VGpg p1071 Vhttps://pub.wxcafe.net/wxcafe.asc p1072 Vkey p1073 tp1074 (VIRL p1075 Vhttps://www.openstreetmap.org/relation/105146 p1076 Vmap-marker p1077 tp1078 tp1079 sVNEWEST_FIRST_ARCHIVES p1080 I01 sVPATH_METADATA p1081 g62 sVPDF_STYLE p1082 Vtwelvepoint p1083 sS'DISPLAY_CATEGORIES_ON_BAR' p1084 I01 sVTEMPLATE_PAGES p1085 (dp1086 sVFEED_DOMAIN p1087 g1055 sVTYPOGRIFY_IGNORE_TAGS p1088 (lp1089 sVGZIP_CACHE p1090 I01 sVAUTHOR_FEED_RSS p1091 Vfeeds/%s.rss.xml p1092 sS'TIMEZONE' p1093 VEurope/Paris p1094 sVDRAFT_URL p1095 Vdrafts/{slug}.html p1096 sVPAGE_EXCLUDES p1097 (lp1098 g62 asVAUTHOR_SAVE_AS p1099 Vauthor/{slug}.html p1100 sVREADERS p1101 (dp1102 sS'FEED_RSS' p1103 Vfeeds/feed.rss.xml p1104 sVDRAFT_LANG_URL p1105 Vdrafts/{slug}-{lang}.html p1106 sVOUTPUT_SOURCES_EXTENSION p1107 V.text p1108 sVPAGINATION_PATTERNS p1109 (lp1110 g10 (g188 g189 (I0 V{name}{number}{extension} p1111 V{name}{number}{extension} p1112 tp1113 tp1114 Rp1115 asVSTATIC_EXCLUDE_SOURCES p1116 I01 sVJINJA_FILTERS p1117 (dp1118 sVARTICLE_SAVE_AS p1119 Vposts/{slug}/index.html p1120 sVYEAR_ARCHIVE_SAVE_AS p1121 g62 sVCSS_FILE p1122 Vmain.css p1123 sVAUTHOR_URL p1124 Vauthor/{slug}.html p1125 sVIGNORE_FILES p1126 (lp1127 V.#* p1128 asVSUMMARY_MAX_LENGTH p1129 I50 sVSLUG_SUBSTITUTIONS p1130 (tsVTHEME_STATIC_PATHS p1131 (lp1132 Vstatic p1133 asS'CATEGORY_FEED_RSS' p1134 Vfeeds/feed.rss.%s.xml p1135 sVTHEME_STATIC_DIR p1136 Vtheme p1137 sVLOAD_CONTENT_CACHE p1138 I01 sVDRAFT_LANG_SAVE_AS p1139 Vdrafts/{slug}-{lang}.html p1140 sS'FEED_ALL_RSS' p1141 Vfeeds/feed.rss.all.xml p1142 sVEXTRA_PATH_METADATA p1143 (dp1144 sVLOCALE p1145 (lp1146 g62 asVWRITE_SELECTED p1147 (lp1148 sVDELETE_OUTPUT_DIRECTORY p1149 I00 sVFEED_MAX_ITEMS p1150 g62 sVPATH p1151 V/srv/www/content p1152 sVPAGE_URL p1153 Vpages/{slug}/ p1154 sVSITENAME p1155 VWxcafé p1156 sVARTICLE_PERMALINK_STRUCTURE p1157 g62 sVARTICLE_URL p1158 Vposts/{slug}/ p1159 sVMONTH_ARCHIVE_SAVE_AS p1160 g62 sVDEFAULT_METADATA p1161 (tsVDEFAULT_CATEGORY p1162 Vmisc p1163 sVPLUGIN_PATHS p1164 (lp1165 sVPAGINATED_DIRECT_TEMPLATES p1166 (Vindex p1167 tp1168 sVPDF_STYLE_PATH p1169 g62 sVSTATIC_SAVE_AS p1170 g994 sVTAG_SAVE_AS p1171 Vtag/{slug}.html p1172 sVPYGMENTS_RST_OPTIONS p1173 (dp1174 sVAUTHOR_FEED_ATOM p1175 Vfeeds/%s.atom.xml p1176 sVARTICLE_LANG_SAVE_AS p1177 g990 sVPAGE_SAVE_AS p1178 Vpages/{slug}/index.html p1179 sVMD_EXTENSIONS p1180 (lp1181 Vcodehilite(linenums=False, guess_lang=True, noclasses=True, pygments_style=monokai) p1182 aVsmarty p1183 asVOUTPUT_PATH p1184 V/srv/www/output p1185 sS'FEED_ATOM' p1186 Vfeeds/feed.atom.xml p1187 sVDEFAULT_STATUS p1188 Vpublished p1189 ssbsVtitle p1190 Vles NUCs et le HDMI-CEC p1191 sVslug p1192 Vnuc-hdmi-cec p1193 sVauthor p1194 g10 (g268 g12 Ntp1195 Rp1196 (dp1197 g16 VWxcafe p1198 sg18 Vwxcafe p1199 sg20 g948 sbstp1200 tp1201 sV/srv/www/content/opensmtpd.md p1202 (F1431623308.6898475 (V

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

\u000a

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

\u000a

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

\u000a

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

\u000a

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

\u000a
            \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e                    \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u000a            \u2502\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500\u2500\u2500> to filter \u2500\u2500\u2500>\u2502\u2500\u256e        \u2502\u000a  mail in   \u2502\u2502               \u2502                    \u2502 \u2502 amavis \u2502\u000a\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u256f OpenSMTPd  \u256d\u2500\u2500\u2502<\u2500\u2500\u2500 from filter<\u2500\u2500\u2500\u2502<\u256f        \u2502\u000a            \u2502             \u2502  \u2502                    \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a  mail out  \u2502             \u2502  \u2502                    \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u000a<\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502<\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500>\u2502\u2500\u2500\u2500\u2500\u2500> to MDA \u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500> to user's\u000a            \u2502                \u2502                    \u2502 dovecot  \u2502     mailbox\u000a            \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f                    \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a
\u000a\u000a\u000a

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

\u000a

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

\u000a

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

\u000a

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

\u000a

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

\u000a
            \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e                    \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u000a            \u2502\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500> SMTP (10026) \u2500\u2500>\u2502\u2500\u256e         \u2502\u000a  SMTP in   \u2502\u2502              \u2502                    \u2502 \u2502 amavis  \u2502\u000a\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500> 25\u2502\u256f OpenSMTPd \u256d\u2500\u2500\u2502<\u2500\u2500 SMTP (10027) <\u2500\u2500\u2502<\u256f (sign)  \u2502\u000a            \u2502            \u2502  \u2502                    \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a  SMTP out  \u2502            \u2502  \u2502\u000a25 <\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502<\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f  \u2502\u000a            \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a
\u000a\u000a\u000a

Pour les mails sortants; et

\u000a
            \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e                    \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u000a            \u2502\u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500> SMTP (10024) \u2500\u2500>\u2502\u2500\u256e          \u2502\u000a  SMTP in   \u2502\u2502              \u2502                    \u2502 \u2502 amavis   \u2502\u000a\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500> 25\u2502\u256f OpenSMTPd \u256d\u2500\u2500\u2502<\u2500\u2500 SMTP (10025) <\u2500\u2500\u2502<\u256f(filter)  \u2502\u000a            \u2502            \u2502  \u2502                    \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a            \u2502            \u2502  \u2502                    \u256d\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256e\u000a            \u2502            \u2570\u2500>\u2502\u2500\u2500> LMTP (socket) \u2500>\u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500>\u2502\u2500\u2500> to user's\u000a            \u2502               \u2502                    \u2502  dovecot   \u2502     mailbox\u000a            \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f                    \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256f\u000a
\u000a\u000a\u000a

Pour les mails entrants.

\u000a

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

\u000a

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

\u000a

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

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

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

\u000a

/etc/smtpd.conf

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

Expliquons un peu ce fichier de configuration :

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

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

\u000a

/etc/dovecot/dovecot.conf

\u000a
## Dovecot configuration file\u000a\u000a# basic config\u000ainfo_log_path = /var/log/dovecot-info.log\u000alog_path = /var/log/dovecot.log\u000alog_timestamp = "%Y-%m-%d %H:%M:%S "\u000amail_location = maildir:%h/mail\u000a\u000a# authentication\u000apassdb {\u000a    driver = pam\u000a}\u000auserdb {\u000a    driver = passwd\u000a}\u000a\u000a# the protocols we use\u000aprotocols = imap lmtp sieve\u000a\u000a# ssl config\u000assl_cert = </etc/certs/exem.pl.cert\u000assl_key = </etc/certs/exem.pl.key\u000assl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL\u000assl = yes\u000a\u000a## configuring services \u000a# disables imap login without SSL (yes dovecot is dumb that way)\u000aservice imap-login {\u000a    inet_listener imap {\u000a        port=0 \u000a    }\u000a}\u000a\u000aservice lmtp {\u000a    unix_listener lmtp {\u000a        mode = 0666\u000a    }\u000a}\u000a\u000a## configuring protocols\u000a# the dovecot lda, we set it to use sieve\u000aprotocol lda {\u000a    mail_plugins = $mail_plugins sieve\u000a}\u000a\u000aprotocol lmtp {\u000a    postmaster_address =  whoever@exem.pl\u000a    mail_plugins = $mail_plugins sieve\u000a}\u000a\u000aplugin {\u000a    sieve = ~/.dovecot.sieve\u000a    sieve_dir = ~/sieve\u000a}\u000a
\u000a\u000a\u000a

ATTENTION: Sous OpenBSD, remplacez

\u000a
passdb {\u000a    driver = pam\u000a}\u000a
\u000a\u000a\u000a

par

\u000a
passdb {\u000a    driver = bsdauth\u000a}\u000a
\u000a\u000a\u000a

pour identifier les utilisateurs système

\u000a

Ici aussi, voyons comment ce fichier est structuré :

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

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

\u000a

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

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

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

\u000a

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

\u000a

Il nous reste cependant quelques opérations a faire, encore.\u000aTout d’abord, il nous faut générer notre clé DKIM. Pour cela, il existe\u000adifférentes méthodes, j’ai personnellement utilisé opendkim (un\u000atutorial)\u000amais de nombreuses autre méthodes existent.\u000aIl nous reste encore a configurer spamassassin :

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

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

\u000a

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

\u000a

Bon courage pour votre hosting de mail ensuite…

p1203 (dp1204 Vdate p1205 g5 (S'\x07\xde\x0b\x07\r\x04\x00\x00\x00\x00' p1206 tp1207 Rp1208 sVcategory p1209 g10 (g11 g12 Ntp1210 Rp1211 (dp1212 g16 VTutoriel p1213 sg18 Vtutoriel p1214 sg20 g293 sbsVtitle p1215 VOpenSMTPd comme serveur mail sous debian p1216 sVslug p1217 Vopensmtpd-debian p1218 sVauthor p1219 g10 (g268 g12 Ntp1220 Rp1221 (dp1222 g16 VWxcafé p1223 sg18 Vwxcafe p1224 sg20 g293 sbstp1225 tp1226 sV/srv/www/content/update-et-pensees-a-propos-du-raspberry-pi.md p1227 (F1431623308.7538474 (V

Bon.
\u000aJ’ai annoncé il y a environ 20 jours que j’avais pour projet de faire\u000aune Piratebox basée sur un Raspberry Pi, astucieusement nommée\u000aPiRatBox. Il se trouve qu’après de nombreux essais, un problème\u000arécurrent apparait: le Raspberry Pi n’est pas capable de fournir assez\u000ade courant par défaut pour faire fonctionner a la fois un disque dur et\u000aune antenne WiFi.
\u000aAlors, autant il me semble évident qu’avec une\u000aalimentation provenant d’un port USB a 2A (max), je n’avais pas\u000aénormément de chances d’avoir 2A sur chacun des ports host du Raspi,\u000aautant avoir moins de 250 mA sur chacun de ces ports me semble un tout\u000apetit peu exagéré en terme de rentabilité.

\u000a

De même, le fait de ne pas pouvoir désactiver le port Ethernet (ne me\u000aservant a rien) (vous savez, celui qui est monté en USB…), qui\u000aconsomme énormément, est assez louche. Il devrait toujours être possible\u000ade désactiver une device USB, me semble-t-il, au niveau logiciel. La,\u000abien qu’il soit surement possible de la désactiver au niveau du kernel,\u000ail n’est pas simplement possible de la “débrancher”. Ce qui est bien\u000achiant, étant donné le besoin évident de puissance électrique dans\u000alequel on se retrouve.

\u000a

Bon, je dois avouer n’avoir pas testé de lancer les différents services\u000acomposant le système des piratebox sous arch, pour la simple et\u000abonne raison qu’arch utilise systemd et qu’il n’existe pas de wrapper\u000asystemd pour les daemons piratebox, et que j’ai la flemme d’en faire,\u000aparce que systemd est une horreur a utiliser avec les scripts init. Donc\u000anon, j’utiliserai debian. Le problème d’utiliser debian dans ce cas\u000aprécis est que apt/dpkg a une gestion des dépendances dans un sens mais\u000apas dans l’autre, en ce sens que si on installe un package “haut”, c’est\u000aa dire dépendant de plusieurs autres packages, apt/dpkg se charge\u000aefficacement d’installer toutes les dépendances nécessaires, tandis que\u000asi on désinstalle un package “bas”, c’est a dire sur lequel de nombreux\u000aautres packages dépendent, apt/dpkg ne désinstalle pas ces packages\u000a“hauts”, ce qui pose un vrai problème quand on se retrouve sur un\u000aRaspberry Pi, puisqu’il n’y a pas de moyen “facile” de choisir ce qui\u000asera installé sur le système avant l’installation proprement dite\u000a(puisque le moyen “universel” d’installation sur Raspberry Pi est le dd\u000avers la SD qui sert de disque système.)

\u000a

Il y a énormément d’autres critiques que l’ont pourrait faire\u000aconcernant le Raspberry Pi. Son système de démarrage a s’arracher les\u000acheveux, par exemple. En effet, plutôt que de faire comme tout pc\u000anormalement constitué ou la partie calcul démarre, lance le bootloader,\u000acherche le kernel de l’OS qui lui même se lance, initialise le hardware,\u000aetc…, a un système bâtard du au fait que la puce au centre de la carte\u000aest a la base une puce graphique a laquelle on a greffé un c\u0153ur de\u000acalcul (probablement au fond d’une cour d’immeuble, dans les quartiers\u000apauvres de Bratislava, vu la propreté de la greffe…), et le moyen le\u000aplus efficace qu’aient trouvé les personnes ayant implémenté cette\u000aatrocité de gérer le boot est donc de faire démarrer le c\u0153ur graphique\u000aen premier, ce dernier exécute un code propriétaire pour démarrer le\u000ac\u0153ur de calcul, qui a son tour lance le bootloader qui cherche le kernel\u000aetc…

\u000a

Ce qui non seulement complique énormément le boot, non seulement ajoute\u000adu code propriétaire a un projet se disant libre, mais en plus n’estvisiblement pas fait pour être utilisé de cette manière. Le hack,\u000aoui, mais uniquement quand c’est bien réalisé, sinon je dis non.

\u000a

Enfin, le projet que j’avais est toujours en cours de réalisation. Je\u000ale terminerai dès que j’aurai récupéré les outils nécessaires pour\u000amonter mon alimentation personnalisée pour le Raspberry Pi. Et une fois\u000aque cela sera fait, ce Raspi restera une Piratebox pour le reste de sa\u000avie. Les problèmes qu’il m’a posé, qu’il n’aurait pas du me poser, m’ont\u000atrop agacé pour que j’aie envie de le sortir et de jouer avec une fois\u000asa mission remplie.

\u000a

Dommage.

p1228 (dp1229 Vdate p1230 g5 (S'\x07\xdd\x01\x1b\x017\x00\x00\x00\x00' p1231 tp1232 Rp1233 sVcategory p1234 g10 (g11 g12 Ntp1235 Rp1236 (dp1237 g16 VRanting p1238 sg18 Vranting p1239 sg20 g293 sbsVtitle p1240 VUpdate et pensées a propos du Raspberry Pi p1241 sVslug p1242 Vupdate-et-pensees-a-propos-du-raspberry-pi p1243 sVauthor p1244 g10 (g268 g12 Ntp1245 Rp1246 (dp1247 g16 VWxcafe p1248 sg18 Vwxcafe p1249 sg20 g293 sbstp1250 tp1251 sV/srv/www/content/la-programmation-expliquee-simplement.md p1252 (F1441303347.8733363 (V

Salut!
\u000aTout d’abord, je tiens a m’excuser de ne pas avoir eu le temps d’écrire\u000arécement, mais j’ai eu la chance d’avoir un PC a monter, donc j’ai passé\u000apas mal de temps assez occupé.

\u000a

Enfin, après un certain temps a farfouiller au millieu des connecteurs\u000aSATA et a apprendre que, oui, l’alimentation sert aussi pour les disques\u000adurs, je suis de retour pour un court article.
\u000aDu coup, je m’étais dit que j’allais reprendre sur le thème de\u000al’informatique expliquée au grand public, en tentant d’aller un peu plus\u000aloin que la dernière fois sur le thème de la programmation
\u000aCe qu’il faut comprendre, c’est la facon dont fonctionne un ordinateur.\u000aSi a peu près tout le monde sait que “les ordinateurs, ils ne\u000acomprennent que les 1 et les 0!”, peu de gens savent comment cela\u000afonctionne en détail.

\u000a

Si vous êtes sur ce blog, il y a pas mal de chance que vous ayez déjà\u000ades notions de base en informatique. Ainsi, vous savez surement que les\u000aordinateurs fonctionnent avec des programmes, qui sont composés de\u000acode.
\u000aAinsi, il faut comprendre que le code (source) est “compilé” en un\u000afichier “binaire”. Un fichier binaire est un fichier comprenant les\u000ainstructions telles qu\u2019exécutées par le processeur, et donc absolument\u000aillisible pour un humain.

\u000a

La compilation est le processus qui transforme le code source en\u000abinaire executable. Les binaires ont, sous Windows, l’extension .exe,\u000atandis que sous les systèmes UNIX-like, ils n’ont pas d’extension\u000aparticulière.
\u000aCeci étant dit, il faut comprendre que certains langages sont plus\u000aproches que d’autres du langage processeur, les langages les plus\u000aproches sont dits de “bas niveau”. Les langages les plus éloignés sont\u000adonc dits de haut niveau.

\u000a

Par exemple, l’assembleur est l’un des languages de plus bas niveau,\u000atandis que python par exemple est un langage de plus haut niveau. Les\u000alangages de haut niveau sont souvent bien plus simples a comprendre et a\u000aapprendre que les langages de bas niveau

\u000a

Ainsi, en C, un langage de niveau relativement bas, pour afficher\u000a“hello world” sur l’écran, le code nécessaire est :

\u000a
#include \u000avoid main() {\u000aprintf("hello world");\u000areturn 0;\u000a}\u000a
\u000a\u000a\u000a

le même programme en python s’écrit :

\u000a
print "hello world"\u000a
\u000a\u000a\u000a

et n’a pas besoin d’être compilé , puisqu’il peut être intepreté\u000adirectement.

\u000a

Python utilise en effet un système similaire a Java en ayant un\u000ainterpréteur dit “runtime” ou “temps réel”, qui interprète le programme\u000asans le compiler. Java utilise un système légèrement différent, puisque\u000ale code a besoin d’être compilé, mais est interpreté par un interpréteur\u000aet non par le processeur.

\u000a

Cette méthode permet le fameux “code once, run everywhere”, ce qui\u000asignifie que le même code est exécutable sur quasiment tous les systèmes\u000ad’exploitation (en fait, tous ceux sur lesquels l\u2019interpréteur est\u000adisponible.)

\u000a

Voila, je vous laisse sur le fonctionnement de Java et de Python, et je\u000avais me coucher.
\u000aA bientôt!

p1253 (dp1254 Vdate p1255 g5 (S'\x07\xdc\x08\x1b\x00\x16\x00\x00\x00\x00' p1256 tp1257 Rp1258 sVcategory p1259 g10 (g11 g12 Ntp1260 Rp1261 (dp1262 g16 VTeaching p1263 sg18 Vteaching p1264 sg20 g21 sbsVauthor p1265 g10 (g268 g12 Ntp1266 Rp1267 (dp1268 g16 VWxcafe p1269 sg18 Vwxcafe p1270 sg20 g21 sbsVslug p1271 Vla-programmation-expliquee-simplement p1272 sVtitle p1273 VLa programmation expliquée simplement p1274 stp1275 tp1276 sV/srv/www/content/mfsbsd-online.md p1277 (F1431623308.7418475 (V

J’ai récemment eu l’occasion de louer un serveur chez Online.net (filiale de Illiad)\u000aVoulant depuis pas mal de temps gérer un serveur sous FreeBSD (et tester bhyve)\u000aet n’ayant pour différentes raisons pas eu l’occasion de le faire sur mon serveur auto-hebergé ni sur ce serveur ci, \u000aj’ai commencé a chercher comment le faire sur ce serveur.

\u000a

Étant donné que Online ne propose pas directement d’image FreeBSD sur ses serveurs, il m’a fallu\u000achercher un peu plus loin. Il se trouve que ce post sur les forums\u000ad’online explique une procédure, mais celle-ci ne fonctionnait pas pour mon serveur en particulier.

\u000a

J’ai donc cherché un peu sur internet, puis demandé sur irc (#freebsd-fr@freenode),\u000aou l’on m’a dirigé vers mfsbsd, un projet d’installeur\u000aalternatif, minimaliste et simplifié pour FreeBSD.

\u000a

Pour installer FreeBSD sur votre serveur, donc, il vous faudra accéder a une\u000aconsole KVM (dans mon cas personnel, iLO). Cela doit être faisable depuis le\u000apanel Online. Une fois cela fait, lancez une console, puis téléchargez l’image\u000amfsbsd. Dans la console iLO, choisissez de booter sur une image CD/DVD, puis\u000achoisissez l’image mfsbsd. Ensuite, rebootez le serveur. Choisissez de booter\u000asur l’image CD/DVD (F11 puis 1). Une fois ceci fait, un FreeBSD a l’air tout\u000aa fait classique va démarrer. Une fois ceci fait, la partie importante arrive:\u000amfsbsd contient un script d’installation root-on-zfs, nommé logiquement\u000azfsinstall, qui va se charger de tout le travail pour nous.

\u000a

Utilisez donc ce script ainsi :

\u000a
# tout d'abord, wipons le MBR :\u000add < /dev/zero > /dev/da0 count=1\u000a# maintenant, installons le système\u000azfsinstall -g da0 -u ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/ -s 2G -p root -c\u000a
\u000a\u000a\u000a

Avec -g da0 votre disque dur principal, -s 2G la quantité de swap désirée,\u000a-p root le nom du zpool, et -c pour activer la compression. D’autres options\u000asont disponibles, je vous invite a faire un zfsinstall -h si mon setup ne vous\u000aconvient pas.

\u000a

Une fois ceci fait, faites un chroot dans /mnt (ou doit se trouver le nouveau\u000asystème) et éditez /etc/rc.conf :

\u000a
zfs_load="YES"\u000asshd_load="YES\u000ahostname="whatever"\u000aifconfig_igb0="DHCP"\u000a
\u000a\u000a\u000a

Remplacez whatever par votre hostname, et igb0 par le nom de votre interface\u000aphysique connectée a internet. Quittez le chroot, rebootez, et voila, vous avez\u000amaintenant un système FreeBSD tout propre installé sur zfs a découvrir et\u000autiliser!

\u000a

Voila, c’est la fin de ce tutoriel.\u000a(Cela dit, bon courage pour tester bhyve, vu que l’IPv6 chez online est… peu \u000acrédible, disons)

\u000a

Bon sinon sur d’autres sujets, j’ai mis en place des bots twitter : wxcafe_ebooks,\u000apetitefanfare,\u000acapet_ebooks,\u000azengisse,\u000aet kim_ebooks. Ils sont tous basés sur ce\u000acode, qui vient de\u000a@m1sp\u000a(github.com/twitter_ebooks). Donc voila.

\u000a

A plus

p1278 (dp1279 Vdate p1280 g5 (S'\x07\xde\x08\x1c\x0c\x10\x00\x00\x00\x00' p1281 tp1282 Rp1283 sVcategory p1284 g10 (g11 g12 Ntp1285 Rp1286 (dp1287 g16 VTutoriel p1288 sg18 Vtutoriel p1289 sg20 g293 sbsVtitle p1290 VInstaller FreeBSD sur un serveur Online avec MfsBSD p1291 sVslug p1292 Vfreebsd-online-mfsbsd p1293 sVauthor p1294 g10 (g268 g12 Ntp1295 Rp1296 (dp1297 g16 VWxcafe p1298 sg18 Vwxcafe p1299 sg20 g293 sbstp1300 tp1301 sV/srv/www/content/les-differentes-couches-dun-systeme-dexploitation.md p1302 (F1441303347.8733363 (V

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

\u000a

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

\u000a

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

\u000a

Depuis un certain temps, le kernel linux est devenu un kernel modulaire, ce qui\u000asignifie que des modules peuvent être chargé a tout moment en cours\u000ad\u2019exécution, ce qui permet l’utilisation de nouveaux systèmes de\u000afichiers a chaud, ou l’insertion de matériel et l’installation de\u000adrivers sans interrompre l\u2019exécution du système (Windows utilise un\u000asystème de fausse installation de drivers pour le matériel externe, et\u000aun système de pré-installation des drivers pour les périphériques dits\u000a“plug and play”)

\u000a

Après le noyau intervient le système. Or, au tous premiers instants du\u000aboot, les systèmes GNU/Linux utilisent un système permettant de limiter\u000al’utilisation de ressources systèmes si elles ne sont pas nécessaires,\u000aet incorpore ainsi un système dit de “runlevels”

\u000a

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

\u000a

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

\u000a

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

\u000a

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

\u000a

Le runlevel 4 n’est pas officiellement défini, et est censé être\u000aactivable en fonction des besoins de l’utilisateur. Sur la plupart des\u000adistributions grand public, ce runlevel est lié au…

\u000a

Runlevel 5! Multi-user, networking, with working GUI! c’est le système\u000atel que vous le connaissez, avec l’interface graphique et le système de\u000alogin graphique.

\u000a

Le runlevel 6, enfin, est le bien nommé “reboot”, qui reboot la machine\u000aquand il devient le runlevel courant.

\u000a

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

\u000a

Il est possible de changer de runlevel grâce a la commande runlevel\u000a(oui, c’est évident…)

\u000a

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

\u000a

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

\u000a

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

p1303 (dp1304 Vdate p1305 g5 (S'\x07\xdc\t\x06\x17\x1d\x00\x00\x00\x00' p1306 tp1307 Rp1308 sVcategory p1309 g10 (g11 g12 Ntp1310 Rp1311 (dp1312 g16 VTeaching p1313 sg18 Vteaching p1314 sg20 g21 sbsVauthor p1315 g10 (g268 g12 Ntp1316 Rp1317 (dp1318 g16 VWxcafe p1319 sg18 Vwxcafe p1320 sg20 g21 sbsVslug p1321 Vles-differentes-couches-dun-systeme-dexploitation p1322 sVtitle p1323 VLes différentes couches d'un système d'exploitation p1324 stp1325 tp1326 sV/srv/www/content/update.md p1327 (F1440203908.4932795 (V

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

p1328 (dp1329 Vdate p1330 g5 (S'\x07\xdd\x01\x05\x12 \x00\x00\x00\x00' p1331 tp1332 Rp1333 sVcategory p1334 g10 (g11 g12 Ntp1335 Rp1336 (dp1337 g16 VNote p1338 sg18 Vnote p1339 sg20 g581 sbsVtitle p1340 VUpdate p1341 sVslug p1342 Vupdate p1343 sVauthor p1344 g10 (g268 g12 Ntp1345 Rp1346 (dp1347 g16 VWxcafe p1348 sg18 Vwxcafe p1349 sg20 g581 sbstp1350 tp1351 sV/srv/www/content/debuts-presentation-etc.md p1352 (F1441303347.8733363 (V

Bonjour!

\u000a

Je m’appelle Wxcafé, et ça fait pas mal de temps que je sévis sur\u000aTwitter, mais aussi sur IRC (Je traîne pas mal sur\u000airc.freenode.net/##nolife et #debian-fr)

\u000a

J’ai 17 ans, je suis donc étudiant (bac général), je vis a Paris, et je\u000afais partie de ce genre de personne qui sont capables d’investir tout\u000aleur temps et leur énergie a s\u2019intéresser a un sujet en particulier, et\u000aqui ne peuvent pas vivre sans leurs passions, avec une petite différence\u000acependant, qui est que je m\u2019intéresse a plusieurs choses :\u000al’informatique, qui est un champ tellement large qu’on peut passer une\u000avie a apprendre des choses dessus, et plus particulièrement à\u000al’informatique avancée (Noyaux dérivés d’UNIX et de Linux, outils libres\u000a{bien que n’étant pas un barbu intégriste [ceci est un troll assumé. Les\u000atrolls seront a partir de maintenant indiqués avec le tag [tr]] du\u000alibre, je préfère utiliser de l’open-source si c’est possible},\u000aprogrammation en C, python et java, etc…) , mais aussi a\u000al\u2019électronique.

\u000a

Dans un tout autre registre, je m\u2019intéresse aussi\u000abeaucoup aux différents aspects du féminisme et des égalités sexuelles\u000a(anti-homophobie/transphobie/biphobie/etc , anti-sexisme, et cætera) ,\u000aet a la culture dite “geek” en général.

\u000a

Je tenterai de poster ici le plus souvent possible, mais j’ai de gros\u000aproblèmes en terme de régularité de post, donc ne vous inquiétez pas si\u000avous ne voyez rien pendant deux semaines.

\u000a

Merci beaucoup de votre attention, et a bientôt!

p1353 (dp1354 Vdate p1355 g5 (S'\x07\xdc\x08\x12\x14\x1b\x00\x00\x00\x00' p1356 tp1357 Rp1358 sVcategory p1359 g10 (g11 g12 Ntp1360 Rp1361 (dp1362 g16 VNotes p1363 sg18 Vnotes p1364 sg20 g21 sbsVauthor p1365 g10 (g268 g12 Ntp1366 Rp1367 (dp1368 g16 VWxcafe p1369 sg18 Vwxcafe p1370 sg20 g21 sbsVslug p1371 Vdebuts-presentation-etc p1372 sVtitle p1373 VDébuts, présentation, etc... p1374 stp1375 tp1376 sV/srv/www/content/archlinux-made-simple.md p1377 (F1441303347.8733363 (V

Archlinux est réputée être une distribution Linux très complexe a\u000ainstaller et a maintenir.

\u000a

Je vais tenter ici de vous convaincre que ce n’est pas le cas, et\u000aqu’elle peut se monter très intéressante et très instructive a installer\u000atout autant qu’a utiliser.

\u000a

Il convient tout d’abord de rappeler a quels principes obéit Arch:

\u000a
    \u000a
  1. \u000a

    Le KISS : Keep It Simple and Stupid, Archlinux tente de faire des\u000a programmes simples et utilisables par tous. Avec comme base de\u000a simplicité les utilisateurs de LFS… Mais il n’empêche qu’avec un peu\u000a de bonne volonté, la configuration n’est pas si compliquée!

    \u000a
  2. \u000a
  3. \u000a

    La philosophie UNIX : chaque programme est prévu pour ne remplir\u000a qu’une seule tâche. Bien entendu, cela ne concerne que les programmes\u000a conçus pour s\u2019insérer dans la philosophie UNIX, et les installations de\u000a dépendances avec le gestionnaire de paquet d’Arch fonctionnent\u000a superbement bien.

    \u000a
  4. \u000a
\u000a

De plus, posons les bases d’Arch : le gestionnaire de paquets s’appelle\u000apacman, et les commandes de base sont :

\u000a
    \u000a
  • \u000a

    recherche d’un paquet :

    \u000a
    pacman -Ss paquet\u000a
    \u000a\u000a\u000a
  • \u000a
  • \u000a

    installation d’un paquet :

    \u000a
    sudo pacman -S paquet\u000a
    \u000a\u000a\u000a
  • \u000a
  • \u000a

    désinstallation d’un paquet :

    \u000a
    sudo pacman -R paquet\u000a
    \u000a\u000a\u000a
  • \u000a
  • \u000a

    mise a jour de tous les paquets installés :

    \u000a
    sudo pacman -Syu paquet\u000a
    \u000a\u000a\u000a
  • \u000a
\u000a

Archlinux est une distribution dite “rolling release”, ce qui signifie\u000aqu’il n’y a pas de version a proprement dites, et que les paquets se\u000amettent a jour en permanence, sans jamais changer la “version” d’Arch.\u000aIl n’y a d’ailleurs qu’une seule version de l’installeur sur le site,\u000apuisqu’une version plus ancienne n’aurait aucun sens.

\u000a

Arch n’offre pas d’interface graphique par défaut : après avoir installé\u000ale système, vous n’aurez qu’une invite de commande. Heureusement, je\u000avais ici vous guider a travers l’installation d’une interface graphique\u000a(mate, le fork de gnome 2)

\u000a

L’installation d’Arch se fait par le réseau, veillez a avoir une\u000aconnection WiFi ou filaire a proximité avant de suivre ce guide.

\u000a

Ce guide utilise SystemV, alors qu’Arch va prochainement passer sous\u000asystemd. N’ayant pas encore eu le temps d\u2019expérimenter assez avec ce\u000adernier, je ferais un tutoriel pour passer votre Arch a systemd bientôt.

\u000a

Bon, passons a l’explication de l’installation proprement dite :

\u000a

Tout d’abord, téléchargeons l’iso d’arch la plus récente :

\u000a
wget http://mir.archlinux.fr/iso/2012.09.07/archlinux-2012.09.07-dual.iso\u000a
\u000a\u000a\u000a

Ensuite, gravons cette image sur un disque USB :

\u000a
dd if=archlinux-2012.09.07-dual.iso of=/dev/sdX\u000a
\u000a\u000a\u000a

Après reboot de la machine sur l’iso en question et choix de\u000al’architecture, nous sommes accueillis par un shell root.

\u000a

La première chose a faire est de paramétrer le clavier :

\u000a
loadkeys fr\u000a
\u000a\u000a\u000a

Puis nous pouvons passer a l’installation proprement dite.\u000aPartitionnement :

\u000a
cfdisk # cfdisk est suffisamment clair pour ne pas nécessiter d'explications\u000a
\u000a\u000a\u000a

formatage des partitions :

\u000a
mkfs.ext4 /dev/sda1 # partition root\u000a\u000apacman -Syu btrfs-progs && mkfs.btrfs /dev/sda2 # partition home\u000a\u000amkswap /dev/sda3 && swapon /dev/sda3 # partition de swap\u000a
\u000a\u000a\u000a

Montons les partitions nouvellement créées, puis installons le système :

\u000a
mount /dev/sda1 /mnt\u000a\u000amkdir /mnt/home && mount /dev/sda2 /mnt/home\u000a\u000adhclient eth0 # si vous utilisez une connection filaire, sinon voire http://wiki.archlinux.fr/Wifi#Configuration\u000a\u000apacstrap /mnt base base-devel\u000a\u000agenfstab -p /mnt > /mnt/etc/fstab\u000a
\u000a\u000a\u000a

Allons prendre un café le temps que ça charge, puis installons les\u000aquelques paquets nécessaires a notre installation et au premier\u000adémarrage:

\u000a
pacstrap /mnt syslinux btrfs-progs wireless_tools dhclient\u000a
\u000a\u000a\u000a

Maintenant, passons sur notre install toute fraîche d’Arch :

\u000a
arch-chroot /mnt bash\u000a
\u000a\u000a\u000a

configurons les bases :

\u000a
echo HOSTNAME > /etc/hostname\u000a\u000aln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime\u000a\u000adate MMJJhhmmAAAA\u000a\u000ahwclock --systohc\u000a\u000avim /etc/locale.gen # Décommentez les lignes correspondant au français : fr_FR.UTF-8 et fr_FR.ISO-8859-1\u000a\u000aecho  'LANG="fr_FR.UTF-8"' > /etc/locale.conf\u000a\u000alocale-gen\u000a\u000amkinitcpio -p linux\u000a
\u000a\u000a\u000a

Enfin, vérifions que syslinux est correctement configuré :

\u000a
vim /boot/syslinux/syslinux.cfg # il devrait y avoir "append root=/dev/sda1"\u000a
\u000a\u000a\u000a

Si tout est correct, installons syslinux, et paramétrons un mot de passe\u000aroot :

\u000a
syslinux-install_update /dev/sda -mia\u000a\u000apasswd root\u000a
\u000a\u000a\u000a

Et voila, l’installation est terminée! Plus qu’a quitter la session et a\u000aredémarrer l’ordinateur!

\u000a
 exit\u000aumount /mnt/home \u000aumount /mnt\u000areboot\u000a
\u000a\u000a\u000a

Fini!

\u000a

Prenons une petite pause. La partie suivante de ce tutoriel consister en\u000aun paramétrage des principaux services nécessaires a l’utilisation d’un\u000aOS, disons, moyen :

\u000a
    \u000a
  • \u000a

    Installation de MATE, le gestionnaire de bureau (voir\u000ahttp://mate-desktop.org/)

    \u000a
  • \u000a
  • \u000a

    Installation de sudo et de networkmanager pour faire fonctionner les\u000acomposants essentiels du système sans avoir a tout activer a la main a\u000achaque démarrage

    \u000a
  • \u000a
  • \u000a

    Installation de SLiM comme gestionnaire de login graphique, pour\u000aprésenter une interface plus accueillante que la console, et\u000aconfiguration de celui-ci

    \u000a
  • \u000a
  • \u000a

    Installation des principaux logiciels utiles non inclus dans mate ni\u000abase (yaourt, chromium, thunderbird, etc…).

    \u000a
  • \u000a
\u000a

Ce guide est bien sur optionnel, si vous souhaitez utiliser Arch avec un\u000agestionnaire de bureau autre que mate, ou sans, vous pouvez vous arrêter\u000aici.

\u000a

Bon, reprenons.

\u000a

Nous sommes donc sur une demande de mot de passe. Entrez donc le mot de\u000apasse paramétré plus haut pour le root, puis retapez la commande\u000autilisée plus tôt pour vous connecter a internet.

\u000a

Il convient d’ajouter le dépôt de MATE pour installer ce dernier, puis\u000ad’effectuer l’action en question :

\u000a
vim /etc/pacman.conf\u000a
\u000a\u000a\u000a

Ici, ajoutez les lignes suivantes :

\u000a
[mate]\u000aServer = http://repo.mate-desktop.org/archlinux/$arch\u000a
\u000a\u000a\u000a

Installons maintenant les paquets :

\u000a
pacman -Syu mate mate-extras dbus dbus-core alsa networkmanager sudo\u000a
\u000a\u000a\u000a

Ajoutons un compte utilisateur pour utiliser les composants du système\u000asans tout crasher a chaque fois :

\u000a
useradd -g users -G wheel,audio,optical,lp,scanner,log,power,floppy,storage,games,video -m -s /bin/bash *votrenom*\u000apasswd *votrenom*\u000asu *votrenom*\u000a
\u000a\u000a\u000a

Il faut maintenant éditer le fichier \u005c~/.xinitrc pour préciser a X.org\u000ace que l’on veut utiliser :

\u000a
echo "exec ck-launch-session mate-session" > ~/.xinitrc\u000a
\u000a\u000a\u000a

Profitons en pour ajouter les démons système au lancement :

\u000a
vim /etc/rc.conf\u000a
\u000a\u000a\u000a

Ajoutez donc dbus, alsa. hwclock et networkmanager dans la section\u000aDAEMONS (entre les parenthèses, après crond normalement)

\u000a
DAEMONS=(syslog-ng network crond dbus alsa hwclock networkmanager)\u000a
\u000a\u000a\u000a

Pour éviter un reboot, il est ici possible de faire un

\u000a
su\u000a
\u000a\u000a\u000a

Puis un

\u000a
 /etc/rc.d/dbus start && /etc/rc.d/alsa start && /etc/rc.d/networkmanager start\u000a
\u000a\u000a\u000a

Sinon, il est possible de juste redémarrer.
\u000aUne fois cela fait, profitez de ce moment pour vous autoriser vous même\u000aa utiliser sudo. Loggez vous en root, et :

\u000a
 vim /etc/sudoers\u000a
\u000a\u000a\u000a

Décommentez la ligne qui commence par # %wheel ALL=(ALL)
\u000aSauvegardez le fichier, puis, après un su *votrenom*, tentez de faire\u000aun sudo ls /
\u000aNormalement, vous devriez avoir un listing du dossier /
\u000aBon, maintenant, pourquoi ne pas tenter de lancer MATE?
\u000aC’est simple comme bonjour :

\u000a
 startx\u000a
\u000a\u000a\u000a

Et PAF! Voila un MATE desktop flambant neuf a configurer!
\u000aAvant de faire ça, retournez sur un TTY (CTRL+ALT+Fx), loggez vous,\u000apuis installez SLiM (sudo pacman -Syu slim).
\u000aConfigurons le:

\u000a
echo "exec dbus-launch mate-session" > ~/.xinitrc && vim /etc/slim.conf\u000a
\u000a\u000a\u000a

Éditez la ligne\u000a“sessions xfce4,icewm-session,wmaker,blackbox” de facon a\u000ace qu’elle ressemble a “sessions mate-session
\u000aPuis ajoutez slim dans /etc/rc.conf, dans la section DAEMONS.
\u000aNormalement, tout devrait fonctionner!
\u000aAh oui, et pour installer thunderbird, firefox, chromium, etc…

\u000a
sudo pacman -Syu chromium thunderbird xchat firefox rhythmbox pidgin transmission-gtk vlc\u000a
\u000a\u000a\u000a

Voila! Et comme dirait @Spartition, c’est sale, mais qu’est-ce que c’est\u000abon!
\u000aA plus~

p1378 (dp1379 Vdate p1380 g5 (S'\x07\xdc\n\x05\x0e0\x00\x00\x00\x00' p1381 tp1382 Rp1383 sVcategory p1384 g10 (g11 g12 Ntp1385 Rp1386 (dp1387 g16 VOSes p1388 sg18 Voses p1389 sg20 g21 sbsVauthor p1390 g10 (g268 g12 Ntp1391 Rp1392 (dp1393 g16 VWxcafe p1394 sg18 Vwxcafe p1395 sg20 g21 sbsVslug p1396 Varchlinux-made-simple p1397 sVtitle p1398 VArchlinux made simple p1399 stp1400 tp1401 sV/srv/www/content/comment-saurik-a-roote-les-google-glass.md p1402 (F1431623308.7258475 (V

Comme vous avez pu le lire dans les médias, Saurik (Jay Freeman, connu\u000apour avoir développé Cydia, un “app store” alternatif pour les iTrucs),\u000aaprès avoir reçu une paire de Google glass de la part de Google (de\u000afaçon assez évidente…), a trouvé intéressant d’obtenir un accès root\u000asur celles-ci, ce qu’il a accompli très rapidement. Des démentis de la\u000apart de Google et de certains autres sites sont vite arrivés, disant que\u000ales lunettes possédaient un bootloader débloqué et que de fait, le root\u000aétait facile a obtenir : il suffisait de débloquer le bootloader,\u000ad’extraire l’OS, de le rooter hors-fonctionnement, puis de le\u000aréinstaller, rooté, sur les lunettes.

\u000a

Le fait est que de débloquer le bootloader laisse une trace permanente\u000asur les lunettes, et que Saurik n’a pas utilisé cette technique pour\u000arooter sa paire. Voyons comment il a fait :

\u000a

Je tiens tout d’abord a préciser que toutes les informations qui vont\u000asuivre sont extraites de cet article, et plus précisément de la\u000apartie “How does this exploit work”.  Je tente d’apporter ma maigre\u000acontribution a cette explication.

\u000a

Donc, d’après les témoignages des quelques utilisateurs de Glass dans le\u000amonde, il semblerait que ces dernières fonctionnent avec un système\u000ad’exploitation Android, avec une nouvelle interface, mais avec les mêmes\u000aoutils internes: un kernel Linux, des outils userland GNU et une machine\u000avirtuelle Java Dalvik pour les applications.

\u000a

Saurik a donc cherché un exploit connu pour cette version d’android, et\u000al’a appliqué a son problème. L’exploit en question est relativement\u000asimple. Depuis la version 4.0 d’android, le système permet la sauvegarde\u000ades données des différentes applications, une a une, via ADB (Android\u000aDebug Bridge, un protocole USB permettant l’accès a de nombreuses\u000afonctions avancées des machines fonctionnant sous android, dont, entre\u000aautre, un shell, un accès au logs de debugging, etc… Cette\u000afonctionnalité est bien entendu désactivable.) Ce backup est très simple : \u000ail crée un fichier .tgz contenant le dossier de configuration de\u000al’application. Lors de la restauration, le système supprime la\u000aconfiguration existante, puis la remplace par celle dans l’archive gzip.

\u000a

Le problème de sécurité vient du fait que les applications android\u000avoient leurs données stockées dans /data/data/identifiant/, et que\u000a/data/ a pour permissions drwxrwx–x  27  system  system, ce qui\u000asignifie que seul system et les membres du groupe system peuvent lire\u000adessus. Or, le fichier /data/local.prop définit de nombreux paramètres\u000aau démarrage, et notamment un qui permet au système de déterminer s’il\u000afonctionne dans une VM ou sur un véritable appareil. S’il fonctionne sur\u000aune machine virtuelle, il donne les droits root a tout utilisateur se\u000aconnectant via ADB, ce qui est ce que l’on cherche pour l’instant. Le\u000afait que /data/ appartienne a system veut dire que le programme de\u000arestauration doit être setuid pour accéder aux données a l\u2019intérieur qui\u000aappartiennent a root (soit toutes les applications système d’android,\u000adont l’application paramètres, et, dans ce cas précis, l’application de\u000alog système présente sur les google glass de test. Ainsi, nous avons un\u000aprocessus tournant en tant que root, qui va écrire sur une partition qui\u000anous intéresse des données que nous possédons.

\u000a

Cependant, un problème reste : le système de restauration d’Android\u000avérifie les données avant de restaurer, et ne restaure pas les symlinks,\u000ace qui nous empêche d’avoir accès directement a /data/local.prop, le\u000afichier qu’on cherche a modifier. Cela dit, il nous reste une\u000apossiblité. Plaçons un dossier world-writable dans le fichier de backup,\u000aet nous pourrons écrire dedans pendant quelques secondes, le temps que\u000ala restauration se termine et que le système remette les permissions en\u000aplace. Ainsi, nous pouvons créer le fichier\u000a/data/local/com.google.glass.logging/whatev/x, lien vers\u000a/data/local.prop, et nous avons un toujours un processus tournant en\u000atant que root qui est en train d’écrire dans ce dossier.

\u000a

Donc, nous allons lancer deux processus en même temps :

\u000a
    \u000a
  • \u000a

    Le premier tentera en boucle de créer le symlink. Il sera consitué de\u000a la commande suivante, depuis un shell sur les lunettes :

    \u000a
    while ! ln -s /data/local.prop /data/data/com.google.glass.logging/whatev/x 2>/dev/null\u000ado :\u000adone\u000a
    \u000a\u000a\u000a
  • \u000a
  • \u000a

    Le deuxième sera le processus de restauration de notre exploit. Celui\u000a ci, pour une plus grande chance de réussite, devra être suffisamment\u000a lourd : au moins \u005c~50Mo. Il devra contenir whatev/bigfile et whatev/x,\u000a pour qu’il crée whatev, prenne du temps a copier bigfile, puis écrive\u000a dans x après que le symlink soit effectif. La commande sera, depuis\u000a l’ordinateur host :

    \u000a
    adb restore exploit.ab\u000a
    \u000a\u000a\u000a

    Ces commandes vont fonctionner de concert pour nous donner un accès root :
    \u000a- Le processus de restauration va créer le dossier whatev, qui sera\u000a world-readable. Il va commencer a copier le fichier bigfile.
    \u000a- Le processus de symlink va créer le lien\u000a /data/data/com.google.glass.logging/whatev/x, pointant vers\u000a /data/local.prop, puis rendre l’âme proprement.
    \u000a- Le processus de restauration, ayant enfin fini de copier\u000a whatev/bigfile, copiera les contenus que nous voulons dans whatev/x, qui\u000a est lié a /data/local.prop. Comme le processus est setuid root, il ne se\u000a rendra compte de rien, et écrira tout dans /data/local.prop.

    \u000a
  • \u000a
\u000a

And voilà! On a écrit ce que l’on veut dans /data/local.prop, ce qui\u000anous permet de faire croire a android qu’il tourne dans une machine\u000avirtuelle (ce que l’on veut, c’est en fait “ro.kernel.qemu=1”, qui\u000aindique au noyau qu’il tourne dans qemu, un système de VM).

\u000a

Il nous reste a rebooter, depuis l’ordinateur host :

\u000a
adb reboot\u000a
\u000a\u000a\u000a

Puis nous remontons la partitions système en lecture/écriture (r/w),\u000adepuis le host :

\u000a
adb shell "mount -o remount,rw /system"\u000a
\u000a\u000a\u000a

Nous copions le binaire su vers l’appareil :

\u000a
adb push su /system/xbin\u000a
\u000a\u000a\u000a

Nous donnons les bonnes permissions a ce binaire, afin de pouvoir\u000al\u2019exécuter plus tard :

\u000a
adb shell "chmod 6755 /system/xbin/su"\u000a
\u000a\u000a\u000a

Ensuite, nous supprimons le fichier /data/local.prop, pour pouvoir\u000aredémarrer normalement :

\u000a
adb shell "rm /data/local.prop"\u000a
\u000a\u000a\u000a

Enfin, nous redemarrons a nouveau :

\u000a
adb reboot\u000a
\u000a\u000a\u000a

Et voila, une paire de google glass rootée!

\u000a

Il est bon de préciser que cette manipulation n’est possible que parce\u000aque les lunettes tournent sous une ancienne version d’android, et que ce\u000abug a été fixé depuis.

\u000a

Il serait aussi interessant de couvrir les problèmes de vie privée\u000aqu’engendrent les Google Glass, et ce sera fait dans un autre billet.

\u000a

A bientôt!

p1403 (dp1404 Vdate p1405 g5 (S'\x07\xdd\x05\x06\x06\x18\x00\x00\x00\x00' p1406 tp1407 Rp1408 sVcategory p1409 g10 (g11 g12 Ntp1410 Rp1411 (dp1412 g16 VHacking p1413 sg18 Vhacking p1414 sg20 g293 sbsVtitle p1415 VComment Saurik a rooté les Google Glass p1416 sVslug p1417 Vcomment-saurik-a-roote-les-google-glass p1418 sVauthor p1419 g10 (g268 g12 Ntp1420 Rp1421 (dp1422 g16 VWxcafe p1423 sg18 Vwxcafe p1424 sg20 g293 sbstp1425 tp1426 sV/srv/www/content/2013-07-10.12:44:28.md p1427 (F1431623308.7778475 (V

Le chiffrement en tant que concept informatique est traditionnellement associé\u000aau chiffrement de fichiers, c’est a dire au fait de passer d’un fichier en\u000aclair a un fichier chiffré dit cyphertext. Cependant, il ne se limite pas a\u000aça, et peut aussi servir a garantir l’intégrité d’un système d’exploitation, ou\u000abien la confidentialité d’un support de stockage, par exemple. Nous allons ici\u000avoir comment mettre en place un système de ce type sous GNU/Linux. Cet article\u000an’a pas pour but de vous apprendre a mettre en place un système basé sur une\u000aprocédure de boot sécurisée, mais plutôt d’expliquer les concepts qui entrent en\u000ajeu dans l’utilisation du sous-système du noyau Linux dm_crypt et de\u000aprésenter un rapide tutoriel concernant la création d’un support chiffré sur\u000alequel garder vos informations confidentielles (par exemple, votre clé GPG)

\u000a

dm-crypt est un sous-système de device-mapper, qui est lui-même un sous-système\u000adu noyau Linux, et s’appuie sur LUKS, un standard de chiffrement \u000ade disques. Comme son nom l’indique, device-mapper est un système qui a pour but\u000ade mapper des block devices. Pour être plus clair, le kernel considère\u000acomme “block device” tout fichier spécial (en gros, les fichiers disques dans/dev/, les systèmes de fichiers type LVM, les RAID logiciels, et, dans le\u000acas qui nous intéresse, les systèmes de fichier chiffrés). Son mode de\u000afonctionnement est simple : a partir d’un “fichier de périphérique” (trad.\u000aWikipédia), il en “crée” un nouveau, virtuel, ayant des propriétés différentes. \u000aPar exemple, un disque partitionné via LVM apparaîtra comme un seul disque dans\u000a/dev, et device-mapper est requis pour pouvoir en voir les partitions (qui\u000aapparaîtront donc dans /dev/mapper)

\u000a

Ainsi, dans le cas qui nous intéresse ici, device-mapper prend un système de\u000afichier chiffré, crée un périphérique virtuel non chiffré dans /dev/mapper, et\u000adéchiffre a la volée tous les accès disques a ce périphérique non chiffré en les\u000atraduisant sur le système de fichier chiffré, le tout de manière tout a fait\u000atransparente pour les applications utilisant le disque en question. Cela induit\u000abien entendu une baisse de performance relativement significative dans le cas\u000ad’un chiffrement du système de fichier root, mais quasiment insignifiante dans\u000ale cas de chiffrement de partitions de données.

\u000a

D’ailleurs, certain-e-s se demandent peut-être comment le système peut démarrer\u000asi le système de fichier root est chiffré. Dans ce cas précis, la procédure de\u000aboot doit s’appuyer sur une image initrd (l’initrd est un système de\u000afichier minimal qui sert uniquement a initialiser le système. Les kernels de\u000abase de la plupart des distributions GNU/Linux en utilisent un dans tous les\u000acas, pour des raisons de compatibilité) et sur une partition de boot qui elle\u000an’est pas chiffrée. Ainsi, le bootloader de niveau 2 (grub, syslinux,…) charge\u000aen mémoire le kernel depuis la partition de boot, puis ce dernier décompresse et\u000acharge l’initrd en RAM, celui-ci a son tour lance un script permettant de \u000acharger les modules nécessaires a la suite du boot (que ce soit pour un boot \u000asans disque root local, ou bien comme ici avec un système chiffré), puis le \u000asystème de fichier “cible” est remonté sur la racine, et l’initrd est démonté\u000aest la RAM qu’il occupait est libérée, puis la procédure de boot normale reprend\u000adepuis le système de fichier maintenant monté sur la racine.

\u000a

La méthode la plus évidente pour contourner le chiffrement du disque est alors\u000ade remplacer le fichier compressé initrd dans /boot, qui n’est pas chiffrée, par\u000aun autre modifié, copiant par exemple la phrase de passe permettant de\u000adéchiffrer la partition cible. Plusieurs méthodes permettent de se prémunir\u000acontre ce genre d’attaques : l’une des plus simple est de faire un checksum du\u000afichier initrd utilisé et reconnu comme sûr, et de vérifier lors du vrai boot\u000aque l’initrd présente toujours le même checksum. Cela dit, cette méthode a\u000al’inconvénient d’intervenir après les faits, et de nécessiter au moins un accès\u000aa un fichier initrd reconnu comme sûr.
\u000aUne autre approche consisterait a placer le système de fichier /boot sur un\u000apériphérique dédié, protégé en écriture de façon matérielle (par exemple, une\u000acarte SD) ou, de façon encore plus efficace, sur un périphérique chiffré et\u000aprotégé en écriture de façon matérielle. Ainsi, il n’est pas possible pour un\u000aattaquant de modifier ce système de fichier, et l’initrd est alors toujours de\u000aconfiance. Cependant, cela a pour conséquence de rendre la mise a jour de\u000al’initrd et du noyau beaucoup plus difficile qu’elle ne le serait sans.

\u000a

Pour en revenir aux systèmes de fichiers chiffrés, leur gestion est faite par un\u000aprogramme dédié, cryptsetup. Ce dernier était en charge de cryptoloop,\u000al’ancien sous-système de chiffrement du kernel Linux (déprécié depuis), et est\u000amaintenant responsable de l’utilisation userspace de dm-crypt, qui pour sa\u000apart est entièrement kernel-space. Cryptsetup permet ainsi le chiffrement, la\u000amanipulation (montage/démontage/…) et la gestion de clé des systèmes de fichier\u000aLUKS. Cryptsetup est cependant conçu pour être utilisé en tant que root, et les\u000autilisateurs qui veulent monter de systèmes de fichiers chiffrés devront ainsi\u000aobligatoirement être capables de le faire en tant que root.

\u000a

Voyons comment il faudrait procéder pour créer une image disque chiffrée de 1Go :
\u000aTout d’abord, il nous faut créer le fichier qui contiendra l’image. Pour cela,\u000adans une situation réelle ou l’on cherche a chiffrer un disque, il convient \u000ad’utiliser /dev/urandom comme source, pour éviter la détection du système de \u000afichier chiffré sur le disque. \u000aIci, par exemple, nous allons faire :

\u000a
dd bs=1000 count=1000000 if=/dev/urandom of=image.img\u000a
\u000a\u000a\u000a

Maintenant que notre image est créée, nous pouvons la chiffrer :

\u000a
sudo cryptsetup luksFormat image.img\u000a
\u000a\u000a\u000a

cryptsetup va alors nous demander si nous sommes absolument surs de vouloir\u000aformater ce disque (nous allons donc valider en tapant YES), puis une\u000apassphrase. Il convient ici de choisir une passphrase particulièrement sûre,\u000apuisque toute personne ayant accès a la passphrase aura aussi accès au disque et\u000adonc a vos secrets.
\u000aUne fois cela fait, nous allons mapper cette image :

\u000a
sudo cryptsetup luksOpen image.img crypto\u000a
\u000a\u000a\u000a

cryptsetup nous redemande la passphrase, charge pendant quelques secondes,\u000apuis nous redonne le prompt. Que s’est-il passé? En cherchant un peu, nous\u000avoyons qu’il n’y a pas de nouveau disque dans /dev. C’est tout a fait normal. En\u000aeffet, cryptsetup (et par lui, device-mapper et dm-crypt) ne monte pas les\u000asystèmes de fichiers chiffrés, il les mappe, et ça n’a rien a voir. On remarque\u000aqu’est apparu dans /dev/mapper le fichier crypto. Ce fichier est le disque\u000avirtuel qui correspond a notre image. Il se comporte comme toute partition, et \u000apeut donc être monté, formaté, etc (il ne peut cependant pas être partitionné.\u000aIl se comporte en effet comme une partition, et non comme un véritable disque.)\u000aBon, ceci fait, notre disque virtuel n’est pas formaté. Il nous reviens donc de\u000ale faire, pour pouvoir l’utiliser.

\u000a
sudo mkfs.ext4 /dev/mapper/crypto\u000a
\u000a\u000a\u000a

Maintenant que notre disque est formaté, il peut être monté :

\u000a
sudo mount /dev/mapper/crypto /mnt\u000a
\u000a\u000a\u000a

Et voila, nous avons un système de fichier fonctionnel et chiffré! Si vous\u000avoulez vérifier, un mount | grep crypto devrait vous donner le résultat\u000asuivant :

\u000a
/dev/mapper/crypto on /mnt type ext4 (rw,relatime,data=ordered)\u000a
\u000a\u000a\u000a

Vous pouvez maintenant commencer a stocker tous vos secrets sur ce fichier, ils\u000asont (en fonction de votre passphrase) en sécurité.

\u000a

Pour résumer :

\u000a
    \u000a
  • \u000a

    Pour monter vos partitions :

    \u000a
    sudo cryptsetup luksOpen <fichier chiffré> <nom de disque virtuel>\u000asudo mount /dev/mapper/<nom de disque virtuel> <emplacement>\u000a
    \u000a\u000a\u000a
  • \u000a
  • \u000a

    Pour démonter vos partitions :

    \u000a
    sudo umount <emplacement>\u000asudo cryptsetup luksClose <nom de disque virtuel>\u000a
    \u000a\u000a\u000a
  • \u000a
\u000a

Pour simplifier la vie de tous, j’ai créé deux petits scripts vous permettant de\u000acréer et de monter/démonter vos images/disques chiffré-e-s en une seule\u000acommande. Ils se trouvent sur github.

\u000a

Par ailleurs, si vous comptez transferer votre image disque sur un véritable\u000adisque (ou clé usb, ou autre), il est préférable de créer une partition de\u000ataille appropriée et de faire un dd if=votre_image of=/dev/votre_partition\u000apour ce faire.

p1428 (dp1429 Vdate p1430 g5 (S'\x07\xdd\x07\n\x03\x12\x00\x00\x00\x00' p1431 tp1432 Rp1433 sVcategory p1434 g10 (g11 g12 Ntp1435 Rp1436 (dp1437 g16 VTutoriel p1438 sg18 Vtutoriel p1439 sg20 g293 sbsVtitle p1440 VLe chiffrement de partitions avec dm-crypt et device-mapper p1441 sVslug p1442 Vle-chiffrement-de-partition-avec-dm-crypt-et-device-mapper p1443 sVauthor p1444 g10 (g268 g12 Ntp1445 Rp1446 (dp1447 g16 VWxcafe p1448 sg18 Vwxcafe p1449 sg20 g293 sbstp1450 tp1451 sV/srv/www/content/linformatique-a-lecole.md p1452 (F1441303347.8733363 (V

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

\u000a

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

\u000a

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

\u000a

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

\u000a

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

\u000a

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

\u000a

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

p1453 (dp1454 Vdate p1455 g5 (S'\x07\xdc\n\x0f\x14"\x00\x00\x00\x00' p1456 tp1457 Rp1458 sVcategory p1459 g10 (g11 g12 Ntp1460 Rp1461 (dp1462 g16 VRanting p1463 sg18 Vranting p1464 sg20 g21 sbsVauthor p1465 g10 (g268 g12 Ntp1466 Rp1467 (dp1468 g16 VWxcafe p1469 sg18 Vwxcafe p1470 sg20 g21 sbsVslug p1471 Vlinformatique-a-lecole p1472 sVtitle p1473 VL'informatique a l'école p1474 stp1475 tp1476 sV/srv/www/content/gnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere.md p1477 (F1441303347.8733363 (V

GNU/Linux est un vaste et extraordinaire territoire technologique, mais\u000aje ne vais pas m’attarder ici sur les aspects profondément techniques de\u000ace territoire pour faire plutôt une sorte d’introduction a ce qu’est\u000avraiment GNU/Linux, pour les gens n’ayant aucune ou très peu de\u000aconnaissances en informatique.

\u000a

GNU/Linux, que j\u2019abrégerai ici en Linux pour plus de simplicité, est un\u000aSystème d’Exploitation. Un système d’exploitation est, pour simplifier,\u000aun ensemble d’outils informatiques qui vous permettent d’utiliser votre\u000aordinateur, ainsi, Windows est un système d’exploitation. L’abréviation\u000ade système d’exploitation (Operating System en anglais) est OS. Les 4\u000aprincipaux OS existants aujourd’hui sont Windows, Mac OS, GNU/Linux, et\u000aSolaris. Les trois derniers sont issus d’un autre système, plus ancien,\u000anommé UNIX.

\u000a

De ce fait, on pourrait penser que Linux remplace complètement Windows\u000aune fois installé, et comprend une interface graphique, et toutes sortes\u000ad’utilitaires permettant a l’utilisateur d’utiliser le système (sous\u000aWindows, pensez a l’explorateur de fichiers, ou a Internet Explorer.\u000aPour l’interface graphique, pensez a… Pensez que votre système affiche\u000aautre chose que des lignes de commande.) Or non, une fois installé,\u000aLinux en lui même ne vous afficherait aucune interface graphique, et\u000as’il est effectivement livré avec des utilitaires, ils ne sont que des\u000aprogrammes en ligne de commande. Autant les utilisateurs avancés sauront\u000as’en servir, et pourront argumenter que c’est plus efficace ou plus\u000arapide, autant les utilisateurs basiques préfèrent une interface\u000agraphique. Alors comment en obtenir une?

\u000a

Ici, il convient de faire une précision importante. Si il n’existe\u000aqu’une seule version de Windows, ou de Mac OS, il existe en fait\u000aplusieurs centaines de “versions” différentes de Linux. Appelées\u000adistributions, ces dernière sont développées par des groupes\u000acomplètement séparés, et se basent sur le fait que Linux soit\u000aentièrement placé sous licence libre (ce qui leur permet de l’utiliser a\u000aleur guise, a condition que leur travail soit lui aussi placé sous\u000alicence libre). De ce fait, de nombreuses distributions existent et se\u000adéveloppent en parallèle. On peut ainsi citer Debian, qui est l’une\u000ades distributions les plus importantes, ou encore Ubuntu, qui est\u000al’une des plus connues et des plus simples a utiliser.

\u000a

Ainsi, ces distributions intègrent une interface graphique. Cependant,\u000agrâce a la liberté dont bénéficient les développeurs sous Linux, il\u000aexiste de nombreuses interfaces graphiques différentes : Unity, la\u000anouvelle interface d’Ubuntu; GNOME , une interface qui vise a la\u000asimplicité; ou encore KDE, une interface utilisateur ressemblant a\u000aWindows 7.

\u000a

Ainsi, le choix astronomique de distributions Linux a bien un sens :\u000achacune d’entre elle intègre des outils différents. Par exemple, Debian\u000aintègre GNOME 2, qui est l’ancienne version de GNOME, ce qui la rend\u000aparticulièrement stable. Ubuntu intègre Unity, ce qui en fait une\u000adistribution particulièrement intuitive. Linux Mint intègre Cinnamon,\u000aqui est une version dérivée de GNOME 3, ce qui permet encore une autre\u000aexpérience. Et Arch Linux n’intègre pas d’interface graphique du tout,\u000ace qui permet a l’utilisateur de choisir entre les multiples interfaces\u000aexistantes.

\u000a

Ce qu’il est important de retenir de cela, c’est que Linux est un OS\u000acomplètement libre, ce qui signifie que n’importe qui peut modifier et\u000autiliser tout le code de Linux gratuitement et comme il l’entend. Ainsi,\u000aLinux est un OS qui est véritablement créé par des passionnés, pour tous\u000aet toutes. Surtout, il convient de retenir que Linux n’est pas compliqué\u000aa utiliser, ni a installer. Windows et Mac OS ne le sont pas non plus.\u000aCependant, Linux donne la possibilité a l’utilisateur de le rendre\u000aaffreusement complexe, mais aussi de le rendre adapté a ses besoins,\u000aquels que soient ceux ci. Et c’est la que réside l’incroyable puissance\u000ade ce Système d’Exploitation. Il est extraordinairement adaptable.

\u000a

N’hésitez donc pas a le présenter a vos proches, même s’ils ne sont pas\u000atechnophiles. Ils pourraient adorer, et peut être même le devenir :)

\u000a

A bientôt!

p1478 (dp1479 Vdate p1480 g5 (S'\x07\xdc\x08\x16\x14!\x00\x00\x00\x00' p1481 tp1482 Rp1483 sVcategory p1484 g10 (g11 g12 Ntp1485 Rp1486 (dp1487 g16 VTeaching p1488 sg18 Vteaching p1489 sg20 g21 sbsVauthor p1490 g10 (g268 g12 Ntp1491 Rp1492 (dp1493 g16 VWxcafe p1494 sg18 Vwxcafe p1495 sg20 g21 sbsVslug p1496 Vgnulinux-pour-les-non-technophiles-ou-los-libre-pour-votre-grand-mere p1497 sVtitle p1498 VGNU/Linux pour les non technophiles, ou l'OS libre pour votre grand-mère p1499 stp1500 tp1501 sV/srv/www/content/redesign-du-blog.md p1502 (F1440203892.5654566 (V

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

\u000a

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

\u000a

Globalement, un thème est constitué ainsi :

\u000a
thème\u000a\u251c\u2500\u2500 static\u000a\u2502   \u251c\u2500 css\u000a\u2502   \u2502  \u2514\u2500 [css files]\u000a\u2502   \u251c\u2500 img\u000a\u2502   \u2502  \u2514\u2500 [image files]\u000a\u2502   \u2514\u2500 js\u000a\u2502      \u2514\u2500 [javascript files]\u000a\u2514\u2500\u2500 template\u000a    \u251c\u2500 base.html\u000a    \u251c\u2500 index.html\u000a    \u251c\u2500 page.html\u000a    \u251c\u2500 [...]\u000a    \u2514\u2500 article.html\u000a
\u000a\u000a\u000a

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

\u000a

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

\u000a

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

\u000a

En ce qui concerne les points négatifs :

\u000a
    \u000a
  • \u000a

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

    \u000a
  • \u000a
  • \u000a

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

    \u000a
  • \u000a
  • \u000a

    Perte du spam:\u000a Pourquoi c’est dans les points négatifs, ca?

    \u000a
  • \u000a
  • \u000a

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

    \u000a
  • \u000a
\u000a

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

p1503 (dp1504 Vdate p1505 g5 (S'\x07\xdd\x06\x0c\x13\x0e\x00\x00\x00\x00' p1506 tp1507 Rp1508 sVcategory p1509 g10 (g11 g12 Ntp1510 Rp1511 (dp1512 g16 VNote p1513 sg18 Vnote p1514 sg20 g581 sbsVtitle p1515 VRedesign du blog, etc p1516 sVslug p1517 Vredesign-du-blog p1518 sVauthor p1519 g10 (g268 g12 Ntp1520 Rp1521 (dp1522 g16 Vwxcafe p1523 sg18 Vwxcafe p1524 sg20 g581 sbstp1525 tp1526 sV/srv/www/content/hori-vs-pdp.md p1527 (F1433445951.9884226 (V

Si vous avez comme moi une Wii U et Smash 4, vous vous êtes probablement rendus\u000acompte de quelques petits trucs : tout d’abord, Smash est bien plus drôle\u000aa plusieurs. Ensuite, la Wii U peut être contrôlée avec énormément de “choses”\u000a: sans trop réflechir, il y a le Wii U Gamepad, les Wiimotes, les Pro\u000aControllers pour Wii et Wii U, et d’autres. Vous aurez aussi remarqué que le\u000aGamepad n’est pas du tout un moyen de jouer a Smash acceptable, ni les wiimotes.\u000aLes pro controllers fonctionnent, mais ne valent pas les bonnes vieilles\u000amanettes Gamecube.

\u000a

Cela étant, si comme moi vous avez, euh, “ouvert” le mode vWii de votre Wii U,\u000avous avez surement un disque dur/une clé USB connecté au dos de votre Wii U, et\u000adonc pas assez de ports libres pour connecter l’adaptateur GC pour Wii\u000aU\u000aa votre console.

\u000a

Heureusement pour vous, Nintendo a pensé a une solution (et comme d’habitude\u000aavec Nintendo, c’est une solution a moitié satisfaisante…) : les classic\u000acontroller, mais en forme de manettes Gamecube.

\u000a

Nintendo a donc filé ses licences et ses designs a deux boites, qui se sont\u000aempressées de faire des manettes et de ramasser des brouettes d’argent, en\u000afaisant des manettes Gamecube qui se connectent a des Wiimotes.

\u000a

Nous allons ici voir deux modèles, un de chacune des boites en question\u000a: PDP et Hori.

\u000a

Toutes les photos présentes dans cet article sont disponibles en plus grande\u000ataille en cliquant dessus

\u000a

Commençons par le modèle de chez Hori :

\u000a

Hori_face

\u000a

Comme vous pouvez le voir, la manette ressemble beaucoup a une véritable manette\u000ade Gamecube : a part le bouton Turbo et le bouton Home, le reste est\u000aparfaitement identique a une véritable manette Gamecube. A noter que les boutons\u000acentraux (Home, Start, Select, et Turbo) sont en caoutchouc mou et pas en\u000aplastique dur.

\u000a

Hori_dos

\u000a

Nous voyons déjà le premier gros problème de cette manette : les gâchettes ne\u000asont en réalité que des boutons : c’est logique puisque c’est comme ça que les\u000aclassic controller sont faits, mais c’est décevant tout de même

\u000a

Hori_CM

\u000a

On peut voir ici que la qualité de l’assemblage n’est pas extraordinaire, et on\u000aremarque une soudure mal faite a l’emplacement du stick gauche.

\u000a

Hori_Cstick

\u000a

Le stick c n’est pas fixé au reste de la manette.\u000aJ’ai essayé de démonter plus avant les différentes parties de la manette, mais\u000ales câbles n’avaient pas l’air de très bonne qualité, et j’ai préféré abandonner\u000al’idée plutôt que de casser la manette.

\u000a

Hori_coque

\u000a

On peut voir que la coque est complètement vide, et que les gâchettes sont bien\u000aen réalité de simple boutons. Il y aurait presque la place de mettre la carte\u000amère d’une Wiimote entière la dedans…

\u000a
\u000a\u000a

Passons maintenant a la manette PDP.

\u000a

PDP_face

\u000a

Au premier coup d’\u0153il, on remarque que la manette PDP ressemble beaucoup moins\u000aa une manette gamecube. Cependant, la prise en main est exactement la même. On\u000aregrettera tout de même les sticks, pas aussi agréables que ceux de la Gamecube,\u000aet les boutons transparents (mais c’est un problème de goût).

\u000a

PDP_dos

\u000a

Les gâchettes sont des vraies gâchettes! C’est impossible normalement, mais PDP\u000aa été très intelligent sur le coup, comme on va le voir juste après.

\u000a

PDP_CM

\u000a

Comme vous pouvez le voir, la qualité générale est bien meilleure, avec bien\u000amoins de colle, et pas de soudage raté. Toutes les cartes filles sont bien\u000aattachées a la carte mère, et la structure en plastique est renforcée. Mais\u000asurtout, on peut voir deux cartes filles qui sortent de façon étrange de la\u000acarte mère, de façon péremptoire perpendiculaire…

\u000a

PDP_CF

\u000a

Vous l’avez deviné, ces deux “cartes filles” servent en réalité de connecteurs\u000aaux boutons situés sur les gâchettes, qui sont de “vraies” gâchettes en cela\u000aqu’elles sont faites de la même manière que les vraies (avec un ressort, etc)\u000amais qui sont en réalité des boutons (évidemment, puisque cette manette est en\u000afait un classic controller), par opposition aux véritables gâchettes\u000aanalogiques.

\u000a

Quelques photos des gâchettes en question :

\u000a

PDP_G_1

\u000a

PDP_G_2

\u000a

PDP_G_3

\u000a

PDP_G_4

\u000a
\u000a

Vous l’aurez compris, je préfère la version PDP de ces “Fight Pad”, la finition\u000asemble plus solide, les gâchettes sont parfaites, les boutons centraux ne sont\u000apas en caoutchouc cheap, et bien que les sticks soient moins confortables, le\u000areste est parfait. Si vous préférez avoir une manette dont la prise en mains esttotalement identique a celle des manettes Gamecube, cependant, la version\u000aHori vous conviendra probablement mieux, a part les gâchettes, malheureusement.

p1528 (dp1529 Vdate p1530 g5 (S'\x07\xdf\x04\x13\x15;\x00\x00\x00\x00' p1531 tp1532 Rp1533 sVcategory p1534 g10 (g11 g12 Ntp1535 Rp1536 (dp1537 g16 VVidya Games p1538 sg18 Vvidya-games p1539 sg20 (dp1540 VCATEGORY_URL p1541 Vcategory/{slug}/ p1542 sVPAGE_ORDER_BY p1543 Vbasename p1544 sVWITH_FUTURE_DATES p1545 I01 sVCATEGORY_SAVE_AS p1546 Vcategory/{slug}/index.html p1547 sS'LINKS' p1548 ((VSource! p1549 Vhttps://github.com/wxcafe/blog-source p1550 Vcode p1551 tp1552 (VZerobin p1553 Vhttp://paste.wxcafe.net p1554 Vpaste p1555 tp1556 (VPublic Git p1557 Vhttp://git.wxcafe.net p1558 Vgithub-sign p1559 tp1560 tp1561 sVARTICLE_ORDER_BY p1562 Vslug p1563 sVDEFAULT_LANG p1564 Vfr p1565 sVCACHE_CONTENT p1566 I01 sVPAGE_LANG_SAVE_AS p1567 Vpages/{slug}-{lang}.html p1568 sVDRAFT_SAVE_AS p1569 Vdrafts/{slug}.html p1570 sVPAGE_PATHS p1571 (lp1572 Vpages p1573 asVDEFAULT_PAGINATION p1574 I10 sVDOCUTILS_SETTINGS p1575 (dp1576 sVTRANSLATION_FEED_ATOM p1577 Vfeeds/all-%s.atom.xml p1578 sVJINJA_EXTENSIONS p1579 (lp1580 sVSTATIC_PATHS p1581 (lp1582 Vimages p1583 asVDAY_ARCHIVE_SAVE_AS p1584 g62 sVARTICLE_LANG_URL p1585 V{slug}-{lang}.html p1586 sVSLUGIFY_SOURCE p1587 Vtitle p1588 sVSTATIC_URL p1589 V{path} p1590 sVCATEGORY_FEED_ATOM p1591 Vfeeds/feed.%s.xml p1592 sVOUTPUT_SOURCES p1593 I00 sVDIRECT_TEMPLATES p1594 (Vindex p1595 Vtags p1596 Vcategories p1597 Vauthors p1598 Varchives p1599 tp1600 sVPDF_GENERATOR p1601 I00 sVSTATIC_EXCLUDES p1602 (lp1603 sVTAG_URL p1604 Vtag/{slug}.html p1605 sVARTICLE_PATHS p1606 (lp1607 g62 asVLOG_FILTER p1608 (lp1609 sVFILENAME_METADATA p1610 V(?P\u005cd{4}-\u005cd{2}-\u005cd{2}).* p1611 sVDISPLAY_PAGES_ON_MENU p1612 I01 sVPELICAN_CLASS p1613 Vpelican.Pelican p1614 sVCACHE_PATH p1615 V/srv/www/cache p1616 sVAUTORELOAD_IGNORE_CACHE p1617 I00 sVINTRASITE_LINK_REGEX p1618 V[{|](?P.*?)[|}] p1619 sVDEFAULT_ORPHANS p1620 I0 sVTAG_CLOUD_MAX_ITEMS p1621 I100 sS'AUTHOR' p1622 Vwxcafé p1623 sVDISPLAY_CATEGORIES_ON_MENU p1624 I00 sVCHECK_MODIFIED_METHOD p1625 Vmtime p1626 sVARTICLE_EXCLUDES p1627 (lp1628 g1573 asVDEFAULT_DATE_FORMAT p1629 V%a %d %B %Y p1630 sVTAG_CLOUD_STEPS p1631 I4 sVPLUGINS p1632 (lp1633 sVTYPOGRIFY p1634 I00 sVFEED_ALL_ATOM p1635 Vfeeds/feed.atom.all.xml p1636 sVEXTRA_TEMPLATES_PATHS p1637 (lp1638 sVOUTPUT_RETENTION p1639 (tsVPAGE_LANG_URL p1640 Vpages/{slug}-{lang}.html p1641 sVTHEME p1642 V/srv/www/themes/bootstrap2 p1643 sVUSE_FOLDER_AS_CATEGORY p1644 I01 sVDEBUG p1645 I00 sVREVERSE_CATEGORY_ORDER p1646 I00 sVRELATIVE_URLS p1647 I00 sVDATE_FORMATS p1648 (dp1649 sVSITEURL p1650 V//wxcafe.net p1651 sVCONTENT_CACHING_LAYER p1652 Vreader p1653 sS'SOCIAL' p1654 ((VTwitter p1655 Vhttps://twitter.com/wxcafe p1656 Vtwitter p1657 tp1658 (VGithub p1659 Vhttps://github.com/wxcafe p1660 Vgithub p1661 tp1662 (VEmail p1663 Vmailto://wxcafe@wxcafe.net p1664 Venvelope p1665 tp1666 (VGpg p1667 Vhttps://pub.wxcafe.net/wxcafe.asc p1668 Vkey p1669 tp1670 (VIRL p1671 Vhttp://leloop.org/where.html p1672 Vmap-marker p1673 tp1674 tp1675 sVNEWEST_FIRST_ARCHIVES p1676 I01 sVPATH_METADATA p1677 g62 sVPDF_STYLE p1678 Vtwelvepoint p1679 sS'DISPLAY_CATEGORIES_ON_BAR' p1680 I01 sVTEMPLATE_PAGES p1681 (dp1682 sVFEED_DOMAIN p1683 g1651 sVTYPOGRIFY_IGNORE_TAGS p1684 (lp1685 sVGZIP_CACHE p1686 I01 sVAUTHOR_FEED_RSS p1687 Vfeeds/%s.rss.xml p1688 sS'TIMEZONE' p1689 VEurope/Paris p1690 sVDRAFT_URL p1691 Vdrafts/{slug}.html p1692 sVPAGE_EXCLUDES p1693 (lp1694 g62 asVAUTHOR_SAVE_AS p1695 Vauthor/{slug}.html p1696 sVREADERS p1697 (dp1698 sS'FEED_RSS' p1699 Vfeeds/feed.rss.xml p1700 sVDRAFT_LANG_URL p1701 Vdrafts/{slug}-{lang}.html p1702 sVOUTPUT_SOURCES_EXTENSION p1703 V.text p1704 sVPAGINATION_PATTERNS p1705 (lp1706 g10 (g188 g189 (I0 V{name}{number}{extension} p1707 V{name}{number}{extension} p1708 tp1709 tp1710 Rp1711 asVSTATIC_EXCLUDE_SOURCES p1712 I01 sVJINJA_FILTERS p1713 (dp1714 sVARTICLE_SAVE_AS p1715 Vposts/{slug}/index.html p1716 sVYEAR_ARCHIVE_SAVE_AS p1717 g62 sVCSS_FILE p1718 Vmain.css p1719 sVAUTHOR_URL p1720 Vauthor/{slug}.html p1721 sVIGNORE_FILES p1722 (lp1723 V.#* p1724 asVSUMMARY_MAX_LENGTH p1725 I50 sVSLUG_SUBSTITUTIONS p1726 (tsVTHEME_STATIC_PATHS p1727 (lp1728 Vstatic p1729 asS'CATEGORY_FEED_RSS' p1730 Vfeeds/feed.rss.%s.xml p1731 sVTHEME_STATIC_DIR p1732 Vtheme p1733 sVLOAD_CONTENT_CACHE p1734 I01 sVDRAFT_LANG_SAVE_AS p1735 Vdrafts/{slug}-{lang}.html p1736 sS'FEED_ALL_RSS' p1737 Vfeeds/feed.rss.all.xml p1738 sVEXTRA_PATH_METADATA p1739 (dp1740 sVLOCALE p1741 (lp1742 g62 asVWRITE_SELECTED p1743 (lp1744 sVDELETE_OUTPUT_DIRECTORY p1745 I00 sVFEED_MAX_ITEMS p1746 g62 sVPATH p1747 V/srv/www/content p1748 sVPAGE_URL p1749 Vpages/{slug}/ p1750 sVSITENAME p1751 VWxcafé p1752 sVARTICLE_PERMALINK_STRUCTURE p1753 g62 sVARTICLE_URL p1754 Vposts/{slug}/ p1755 sVMONTH_ARCHIVE_SAVE_AS p1756 g62 sVDEFAULT_METADATA p1757 (tsVDEFAULT_CATEGORY p1758 Vmisc p1759 sVPLUGIN_PATHS p1760 (lp1761 sVPAGINATED_DIRECT_TEMPLATES p1762 (Vindex p1763 tp1764 sVPDF_STYLE_PATH p1765 g62 sVSTATIC_SAVE_AS p1766 g1590 sVTAG_SAVE_AS p1767 Vtag/{slug}.html p1768 sVPYGMENTS_RST_OPTIONS p1769 (dp1770 sVAUTHOR_FEED_ATOM p1771 Vfeeds/%s.atom.xml p1772 sVARTICLE_LANG_SAVE_AS p1773 g1586 sVPAGE_SAVE_AS p1774 Vpages/{slug}/index.html p1775 sVMD_EXTENSIONS p1776 (lp1777 Vcodehilite(linenums=False, guess_lang=True, noclasses=True, pygments_style=monokai) p1778 aVsmarty p1779 asVOUTPUT_PATH p1780 V/srv/www/output p1781 sS'FEED_ATOM' p1782 Vfeeds/feed.atom.xml p1783 sVDEFAULT_STATUS p1784 Vpublished p1785 ssbsVtitle p1786 VManettes : Hori vs. PDP p1787 sVslug p1788 Vhori-vs-pdp p1789 sVauthor p1790 g10 (g268 g12 Ntp1791 Rp1792 (dp1793 g16 VWxcafe p1794 sg18 Vwxcafe p1795 sg20 g1540 sbstp1796 tp1797 sV/srv/www/content/mutt-ou-le-client-email-le-meilleur-moins-mauvais.md p1798 (F1431623308.7018473 (V

Les clients mails ont une particularité en commun : ils sont tous\u000atrès mauvais. Cela pour nombre de raisons, mais la principale reste\u000aque leurs interfaces/raccourcis claviers ne sont pas efficaces pour une\u000autilisation a la UNIX
\u000aCependant, un d’entre eux se démarque par sa moins-mauvais-itude, c’est\u000ale relativement bien connu Outlook Express 2003 Mutt!
\u000aMutt est un client mail en ligne de commande, qui, comme le dit sa page\u000ad\u2019accueil, “just sucks less”. Dans les faits, mutt est assez\u000achiant a configurer mais particulièrement pratique a utiliser après.

\u000a

La configuration de mutt se fait dans le fichier .muttrc ou dans\u000a/etc/Muttrc, et il est courant d’utiliser offlineimap en\u000aconjonction avec celui ci, de façon a accéder aux mails même sans accès\u000ainternet (mutt dispose d’un système d’accès IMAP/POP et SMTP, mais ne\u000acrée pas de cache, ce qui empêche la consultation des emails sans\u000aconnexion internet.) La configuration d’offlineimap se fait dans~/.offlineimaprc ou dans rien d’autre en fait, c’est une config\u000apar user. Offlineimap est un petit logiciel en python qui synchronise un\u000adossier en Maildir avec un serveur IMAP, ce qui tombe bien puisque\u000ajustement mutt accepte les dossiers au format Maildir. (De plus, cela va\u000atout a fait dans le sens de la libération des données en cela que vous\u000apossédez vos mails en local.)
\u000aBref, passons aux choses serieuses : le code. Déjà, installez\u000aofflineimap et ce script fait par moi, qui vous permet d’installer\u000amutt avec le patch sidebar, qui crée un listing des dossiers sur la\u000apartie gauche.
\u000aEnsuite, voyons pour la partie configuration :
\u000aMa configuration d’offlineimap :

\u000a
## Config file for offlineimap\u000a## Originally located in ~/.offlineimaprc\u000a## This should not be edited without creating a copy before\u000a## Created by Wxcafe (Clément Hertling)\u000a## Published under CC-BY-SA\u000a\u000a[general]\u000a# List of accounts to be synced, separated by a comma.\u000aaccounts = main\u000a\u000a[Account main]\u000a# Identifier for the local repository; e.g. the maildir to be synced via IMAP.\u000alocalrepository = main-local\u000a# Identifier for the remote repository; i.e. the actual IMAP, usually non-local.\u000aremoterepository = main-remote\u000a# Status cache. Default is plain, which eventually becomes huge and slow.\u000astatus_backend = sqlite              # le type de cache. (plain ou sqlite)\u000a\u000a[Repository main-local]\u000a# Currently, offlineimap only supports maildir and IMAP for local repositories.\u000atype = Maildir                        # le type de stockage (Maildir ou IMAP)\u000a# Where should the mail be placed?\u000alocalfolders = ~/Emails/                # le dossier dans lequel vous\u000a                                        # voulez que vos emails apparaissent\u000a\u000a[Repository main-remote]\u000a# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP.\u000atype = IMAP\u000aremotehost = //placeholderhost//        # le serveur de votre messagerie\u000aremoteuser = //placeholderusername//    # votre nom d'utilisateur\u000aremotepass = //placeholderpassword//    # votre mot de passe\u000acert_fingerprint = //placeholdercert//  # le certificat du serveur (IMAPS only)\u000a
\u000a\u000a\u000a

Ça devrait être assez simple a lire, j’ai tout bien commenté :3
\u000aPuis ma config mutt :

\u000a
## Mutt MUA configuration file\u000a## This file should not be edited without creating a copy\u000a## File Created and edited by Wxcafe (Clément Hertling)\u000a## Published under CC-BY-SA\u000a\u000a# General config for reading (fetched via offlineimap)\u000a\u000aset mbox_type = Maildir\u000a# type de boite mail (voir dans offlineimap, mailbox par defaut)\u000a\u000aset folder = ~/Email/\u000a# dossier root mailbox/imap\u000a\u000aset spoolfile = +INBOX\u000a# dossier d'inbox\u000a\u000aset mbox = +'All Mail'\u000a# dossier ou archiver les emails\u000a\u000aset copy = yes\u000a# yes pour copier les messages dans les differents dossier, no pour...\u000a# enfin voila quoi.\u000a\u000aset header_cache = /.hcache/\u000a# dossier ou sont stockés les headers (pour le cache)\u000a\u000aset record = +Sent\u000a# dossier dans lequel sont stockés les messages envoyés\u000a\u000aset postponed = +Drafts\u000a# dossier dans lequel sont stockés les brouillons\u000a\u000amailboxes = +INBOX +Drafts +Sent +Trash  +All\u005c Mail \u000a# liste des dossiers qui vont apparaitre dans la colonne de gauche\u000a\u000a# General config for sending (using Mutt's native support)\u000a\u000aset smtp_pass = 'password_placeholder'\u000a# votre mot de passe\u000a\u000aset smtp_url = "smtp://username@whatev.org:465/"\u000a# l'url ou envoyer les emails\u000a\u000aset send_charset = "utf-8"\u000a# UTF8, NE PAS CHANGER\u000a\u000aset signature = ".sign"\u000a# vous pouvez mettre votre signature dans .sign\u000a\u000aset sig_on_top = yes\u000a# il est d'usge de mettre no ici. Cependant, je trouve ca plus lisible \u000a# comme ca.\u000a\u000aset ssl_verify_host = no\u000a# mettez yes ici si votre serveur a un certificat configuré correctement\u000a\u000aset hostname = "wxcafe.net"\u000a# mettez l'adresse de votre serveur ici\u000a\u000a# Misc settings\u000a\u000aauto_view text/html\u000a# la façon de voir les emails par défaut.\u000a\u000aset date_format = "%y-%m-%d %T"\u000a# format de date d'envoi/de reception.\u000a\u000aset index_format = "%2C | %Z [%D] %-30.30F (%-4.4c) %s"\u000a# format de l'index (la présentation de l'interface)\u000a# voir http://www.mutt.org/doc/manual/manual-6.html#index_format\u000a\u000aset sort_alias = alias\u000aset reverse_alias = yes \u000aset alias_file = "$HOME/.mutt/aliases"\u000a# liste des alias noms/email. a créer et remplir vous même.\u000a# format : "alias short_name long_email_adress"\u000asource $alias_file\u000a\u000aset beep = no\u000a# ne pas biper. CE SON ME TUE T.T\u000a\u000aset tilde = yes\u000aset sleep_time = 0\u000a# ?\u000a\u000aset sidebar_visible = yes\u000aset sidebar_width = 15\u000a# parametres de la barre coté gauche\u000a\u000aset realname = "Clément Hertling (Wxcafé)"\u000aset from = "wxcafe@wxcafe.net"\u000aset use_from = yes\u000aset certificate_file = "$HOME/.mutt/cacert"\u000a# parametres d'envoi. mettez vos propres infos a la place des miennes...\u000a\u000aset edit_headers = yes\u000a# vous permet de vois les headers des mails. j'aime, donc je laisse.\u000a\u000a# Macros\u000a\u000a# le titre dit tout. index veut dire que la macro est active dans les menus,\u000a# pager qu'elle l'est dans la visionneuse, les deux qu'elle l'est dans les \u000a# deux\u000a# \u005cC represente la touche Control\u000a\u000abind index,pager \u005cCp sidebar-prev\u000a# Control+p -> remonter d'un dossier dans la sidebar\u000a\u000abind index,pager \u005cCn sidebar-next\u000a# Control+n -> descendre d'un dossier dans la sidebar\u000a\u000abind index,pager \u005cCo sidebar-open\u000a# Control+o -> ouvrir le dossier selectionné dans la sidebar\u000a\u000amacro index,pager d "=Trash" "Trash"\u000a# d supprime le message en cours\u000a\u000abind pager   previous-line\u000a# permet de monter d'une ligne avec la touche up, au lieu de changer de message.\u000a\u000abind pager   next-line\u000a# permet de descendre d'une ligne avec la touche down, au lieu de changer de \u000a# message\u000a\u000abind pager j next-line\u000abind pager k previous-line\u000a# raccourcis vim\u000a\u000a# PGP signing commands\u000a\u000aset pgp_decode_command="gpg %?p?--passphrase-fd 0? --no-verbose --batch --output - %f"\u000aset pgp_verify_command="gpg --no-verbose --batch --output - --verify %s %f"\u000aset pgp_decrypt_command="gpg --passphrase-fd 0 --no-verbose --batch --output - %f"\u000aset pgp_sign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --detach-sign --textmode %?a?-u %a? %f"\u000aset pgp_clearsign_command="gpg --no-verbose --batch --output - --passphrase-fd 0 --armor --textmode --clearsign %?a?-u %a? %f"\u000aset pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"\u000aset pgp_encrypt_sign_command="pgpewrap gpg --passphrase-fd 0 --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust --encrypt-to 0x******** -- -r %r -- %f"\u000aset pgp_import_command="gpg --no-verbose --import -v %f"\u000aset pgp_export_command="gpg --no-verbose --export --armor %r"\u000aset pgp_verify_key_command="gpg --no-verbose --batch --fingerprint --check-sigs %r"\u000aset pgp_list_pubring_command="gpg --no-verbose --batch --with-colons --list-keys %r" \u000aset pgp_list_secring_command="gpg --no-verbose --batch --with-colons --list-secret-keys %r" \u000aset pgp_autosign=yes\u000aset pgp_sign_as=0x********\u000a# remplacez 0x******** par votre identifiant PGP!!!!!\u000a\u000aset pgp_replyencrypt=no\u000aset pgp_timeout=7200\u000aset pgp_good_sign="^gpg: Good signature from"\u000a\u000a# si vous ne comptez pas utiliser PGP, commentez toute cette section, depuis\u000a# PGP signing options\u000a\u000a# Palette for use with the Linux console.  Black background.\u000a\u000a# Schéma de couleur Rouge et Noir. Commentez si vous voulez le \u000a# défaut noir et blanc.\u000a# d'autres schémas sont trouvables sur google et autre.\u000a\u000acolor hdrdefault red black\u000acolor quoted brightblack black\u000acolor signature brightblack black\u000acolor attachment red black\u000acolor message brightwhite black\u000acolor error brightred black\u000acolor indicator black red\u000acolor status white black\u000acolor tree white black\u000acolor normal white black\u000acolor markers red black\u000acolor search white black\u000acolor tilde brightmagenta black\u000acolor index red black ~F\u000acolor index red black "~N|~O"\u000a
\u000a\u000a\u000a

Voila, pour plus d’informations vous pouvez aller voir le manuel de mutt\u000a@ http://www.mutt.org/doc/manual/
\u000aJ’espère que cette configuration “toute faite” vous aidera a commencer\u000aa utiliser mutt. Il est tout de fois important de se souvenir\u000aqu’utiliser une configuration toute faire n’aide pas a comprendre un\u000aprogramme ou un système, et que cette façon de faire devrait être\u000aréservée a l’introduction ou a des situations ou il est absolument\u000anécessaire d’avoir rapidement une configuration fonctionnelle (c’est a\u000adire, dans le cas d’un client email, euh… jamais?). Je vous invite\u000adonc a relire les annotations dont sont parsemés les fichiers de\u000aconfiguration en question, et surtout a lire le manuel, a chercher sur\u000aBing Google Yahoo Seeks, et globalement \u000aa tenter de comprendre les configurations en question et a les améliorer!

p1799 (dp1800 Vdate p1801 g5 (S'\x07\xdd\x01\x02\x02\x0c\x00\x00\x00\x00' p1802 tp1803 Rp1804 sVcategory p1805 g10 (g11 g12 Ntp1806 Rp1807 (dp1808 g16 VTutoriel p1809 sg18 Vtutoriel p1810 sg20 g293 sbsVtitle p1811 VMutt ou le client email le meilleur moins mauvais p1812 sVslug p1813 Vmutt-ou-le-client-email-le-meilleur-moins-mauvais p1814 sVauthor p1815 g10 (g268 g12 Ntp1816 Rp1817 (dp1818 g16 VWxcafe p1819 sg18 Vwxcafe p1820 sg20 g293 sbstp1821 tp1822 sV/srv/www/content/sed.md p1823 (F1431623308.6378474 (V

sed est un outil Unix très largement utilisé et très pratique pour manipuler\u000ale texte (ce qui se montre relativement indispensable dans un environnement\u000aUnix, puisque ce système est assez porté sur le texte). Cependant, il assez peu\u000aconnu en détail, et la plupart du temps une seule fonction est utilisée : le\u000aremplacement de texte.
\u000aOr sed a bien plus de possibilités que ça, comme nous allons le voir.

\u000a

Tout d’abord, rappelons les bases : sed est un programme Unix de base, mais\u000aaussi un langage de manipulation de texte dérivé de ed, l’éditeur original.ed est un éditeur de ligne, conçu a l’époque ou les ordinateurs n’étaient pas\u000apersonnels et étaient utilisés avec des téléscripteurs, c’est a dire des\u000amachines dépourvues d’écrans et ne permettant donc pas l’utilisation d’éditeurs\u000adits “visuels”, tels que vim, emacs, et globalement tous les éditeurs ayant un\u000acurseur et affichant plusieurs lignes. sed est donc une évolution de ed, le\u000as signifiant stream, sed est un éditeur de flux, prenant donc avantage du\u000aconcept Unixien de flux de données (voir Flux standards) pour éditer plus d’une ligne a la fois.\u000aEn pratique, sed est principalement utilisé sur des fichiers.

\u000a

sed a quelques options pratique, notamment -s qui permet d’empêcher\u000al’affichage systématique des lignes traitées, ou bien -i (pour GNU sed) qui\u000apermet de rediriger l’output dans le fichier d’input. Cela dit, l’intérêt unique\u000adu programme est son langage de manipulation de texte.

\u000a

ed, et donc sed, utilise un langage basé sur les séparations (en général des\u000a/). Ainsi, la commande de base dans sed est

\u000a
/[regex]/\u000a
\u000a\u000a\u000a

qui permet de ne sélectionner que les lignes qui matchent [regex] (et donc de \u000an’exécuter les commandes qui suivent que sur ces lignes.)

\u000a


\u000aLa commande sed la plus utilisée est bien entendu le s, qui s’utilise de\u000ala façon suivante :

\u000a
s/[old text]/[new text]/[options]\u000a
\u000a\u000a\u000a

qui se propose donc de remplacer (substitute) [old text] (qui peut être une\u000aregex) par [new text] (qui doit être un texte fixe, avec quelques\u000aexceptions), en appliquant [options], la plus connue des options étant g, \u000aqui permet d’appliquer la commande affectée a toutes les occurrences du texte\u000amatché sur la/les lignes concernée-s.
\u000aLes exceptions a la “fixité” de [new text] sont particulièrement\u000aintéressantes. En effet, sed utilise un langage de regex plutôt standard,\u000aexcepté le fait qu’il permet jusqu’à 9 “holding spaces”, qui sont délimités par\u000a\u005c( et \u005c), et qui sont représentées dans le texte de remplacement par \u005c1 à\u000a\u005c9.

\u000a

Par exemple, la commande

\u000a
sed 's/\u005c(hello world\u005c) world/\u005c1/'\u000a
\u000a\u000a\u000a

sur le texte “hello world world” renverrait comme résultat

\u000a
hello world\u000a
\u000a\u000a\u000a

De la même façon, le symbole & dans le texte de remplacement représente le\u000atexte original. Ainsi, la commande

\u000a
sed 's/hello world/& world/'\u000a
\u000a\u000a\u000a

sur le texte “hello world” renverrait comme résultat

\u000a
hello world world\u000a
\u000a\u000a\u000a


\u000a

Une autre commande utile est p, qui sert a afficher le texte présent dans\u000al’espace courant :

\u000a
/[regex]/p\u000a
\u000a\u000a\u000a

sed stocke en effet la ligne sur laquelle il travaille dans un espace mémoire\u000adédié, que j’appelle l’espace courant (pattern space en anglais). La commandep affiche (print) ce qui ce trouve dans cet espace. La /[regex]/ réduit\u000ale pattern space de façon a ce qu’il ne contienne que les lignes matchant, et le p affiche donc ce dernier.

\u000a

Un autre exemple de commande sont c, i et a, qui s’utilisent ainsi :

\u000a
c \u005c\u000a[text]\u000a
\u000a\u000a\u000a

De la même façon, pour le i :

\u000a
i \u005c\u000a[text]\u000a
\u000a\u000a\u000a

Et de même pour a.

\u000a

Ces trois commandes s’utilisent de la même façon pour la bonne raison qu’elles\u000asont très proches. i sert a insérer du texte avant le pattern space. a\u000asert a insérer du texte après le pattern space, et enfin c sert a\u000aremplacer tout le pattern space. Les trois utilisent [text] comme\u000aremplacement ou insert.\u000aAttention, les insertions se font sur la ligne précédant ou suivant le pattern\u000aspace, et non sur la ligne en question.

\u000a

Enfin, dernière commande ne fonctionnant que ligne par ligne, d :\u000a /[regex]/d\u000ad (delete) supprime les contenus du pattern space.

\u000a

sed est un outil puissant, mais complexe. Dans un prochain article, je\u000aparlerai des commandes multilignes et des labels.

p1824 (dp1825 Vdate p1826 g5 (S'\x07\xdd\x08\x12\x169\x00\x00\x00\x00' p1827 tp1828 Rp1829 sVcategory p1830 g10 (g11 g12 Ntp1831 Rp1832 (dp1833 g16 VTutoriel p1834 sg18 Vtutoriel p1835 sg20 g293 sbsVtitle p1836 VSed Basics p1837 sVslug p1838 Vsed-basics p1839 sVauthor p1840 g10 (g268 g12 Ntp1841 Rp1842 (dp1843 g16 VWxcafe p1844 sg18 Vwxcafe p1845 sg20 g293 sbstp1846 tp1847 sV/srv/www/content/pourquoi-je-vais-quitter-linux-pour-passer-a-freebsd.md p1848 (F1431623308.6738474 (V

This is subject to debate, and as most of the actors in this field are\u000anot French-speaker, there is an English version of this text here

\u000a

Bon, voila. J’ai passé le cap. Je suis sous GNU/Linux depuis un certain\u000atemps, maintenant, et depuis un certain temps je remarque des\u000achangements malvenus. Bien entendu, au début, je n’avais pas les\u000aconnaissances nécessaires pour comprendre ne serait-ce que ces\u000amodifications existaient. Et puis certaines sont arrivées avant que je\u000an’ai même idée que quelque chose dans mon système d’exploitation avait\u000acette fonction la. Par exemple, udev, ou policykit/consolekit/. A\u000al’époque, je n’avais aucune idée de la façon dont les disques étaient\u000amontés sur mon système. Le premier système non-Windows que j’ai utilisé\u000afut Ubuntu 9.10 Karmic Koala, et il était encore trop tôt pour que je\u000acherche a démonter le système pour comprendre comment il fonctionnait en\u000aprofondeur. Cependant, avec le temps, les connaissances s’accumulant et\u000amon niveau de compréhension du système s’améliorant, j’ai commencé a\u000aremarquer que certain bouts de l’OS ne collaient pas exactement avec les\u000aautres. Bien sur, je ne saurais dire si cette réalisation s’est faite a\u000acause de la recrudescence de ces bouts d’OS, ou bien juste a cause de ma\u000acompréhension plus poussée. Toujours est-il que ces petits bouts d’OS ne\u000as\u2019adaptant pas au reste du système se faisaient de plus en plus visible.\u000aEt puis, un jour, j’en ai eu marre de voir unity sur ma machine, et j’ai\u000achoisi de passer a Archlinux. C’était avant le passage a systemd. Ce\u000asystème me convenait bien. Si je n’installais pas Gnome, ce que je ne\u000acomptais pas faire, il ne me forçait pas a installer un *kit\u000aquelconque, ni dbus. Oui, udev était toujours la, mais c’était le moins\u000aenvahissant de ceux la.

\u000a

Mais Archlinux est passé a systemd. Attention hein, je ne critique ici\u000ani systemd, ni udev, ni même les kit, et surtout pas Archlinux. Les\u000apremiers sont probablement très efficaces dans leur domaine, et le\u000asecond n’a pas vraiment eu le choix, rapport a la philosophie de la\u000adistribution d’avoir au plus vite les dernières versions de tout.\u000aCependant, systemd, tout comme udev et les kits (bien que ce ne soient\u000apas les seuls a faire ça…) ont un problème très précis, qui n’importe\u000apas a tout le monde, mais qui est très gênant pour ceux a qui il\u000aimporte, et ce problème est que ces systèmes ne respectent absolument\u000apas la philosophie UNIX. La philosophie UNIX, pour rappel, se résume en\u000aces 9 principes :

\u000a
    \u000a
  1. Ce qui est petit est beau
  2. \u000a
  3. Faites en sorte que chaque programme fasse une chose, bien.
  4. \u000a
  5. Faites un prototype aussi vite que possible
  6. \u000a
  7. Choisissez la portabilité plutôt que l’efficacité
  8. \u000a
  9. Stockez les données dans des fichiers textes.
  10. \u000a
  11. Utilisez ce qui existe déjà a votre avantage. [1]
  12. \u000a
  13. Utilisez des scripts shells pour faciliter la portabilité et la\u000a réutilisation.
  14. \u000a
  15. Évitez les UI qui “capturent” l’utilisateur.
  16. \u000a
  17. Faites de chaque programme un filtre.
  18. \u000a
\u000a

Alors bien entendu, un système d’exploitation est fait pour évoluer, et\u000aon pourrait penser qu’UNIX a fait son temps. Cependant, ce n’est pas\u000aexactement la façon dont l’informatique fonctionne. Effectivement, les\u000astandards, les systèmes d’exploitation, les logiciels, tout doit évoluer\u000a- ou mourir - et UNIX ne fait pas exception a la règle. Mais ce n’est\u000apas d’UNIX que nous parlons ici. C’est de la philosophie UNIX. Et\u000acelle-ci n’a pas fait son temps, elle a fait ses preuves. La\u000aphilosophie UNIX, en plus d’être efficace sur le papier, a aussi 44 ans\u000ade tests derrière elle, et fonctionne aussi bien qu’au premier jour.
\u000aLa philosophie UNIX est aussi et surtout une garantie d’utilisabilité\u000aet de simplicité pour les administrateurs systèmes, pour les\u000adéveloppeurs, bref pour tous ceux qui font de l’informatiquesérieusement (je ne dis pas que les autres métiers de l’informatique\u000ane sont pas sérieux, je prend juste ceux-ci comme exemples parce que ce\u000asont ceux qui sont les plus proches du système).

\u000a

Tous OS se doit d’avoir un système standardisé pour faire communiquer\u000ales programmes entre eux. UNIX a un système de pipes, des sortes de\u000afichiers spéciaux permettant d’échanger des informations. C’est\u000aefficace, ça respecte le “tout est fichier”, c’est standard, c’est\u000asimple a comprendre, bref, ça fonctionne parfaitement. Dbus vient\u000aremplacer ça, avec une interface qui n’est explicitement pas faite pour\u000aêtre utilisée a la ligne de commande mais a l’aide d’APIs, et un\u000aprogramme monolithique qui effectue sa tache d’une façon complètement\u000aobscure pour l’utilisateur. Alors bien sur, il l’effectue d’une façon\u000aefficace, cette tache. Oui, ça va plus vite qu’avant. Oui, c’est plus\u000a“rangé”, ça fait moins “fouillis”. Mais c’est moins efficace. C’estbeaucoup moins utilisable pour l’utilisateur final. C’est\u000ahorriblement chiant pour les sysadmins, parce qu’ils ne peuvent plus\u000alire facilement les échanges entre programmes. C’est peu pratique, en\u000afin de compte. Et ça ne respecte pas du tout la philosophie UNIX.
\u000aSystemd prend le même parti de créer une interface unifiée, accessible\u000avia des appels a des APIs uniquement, complètement obscure, extrêmement\u000aabstraite, bien entendu monolithique, et très peu ouverte a la\u000amodification par l’utilisateur final. Alors oui, il parait que ça\u000aaugmente la vitesse de boot. Eh bien, au risque d’en choquer quelques\u000auns, je préfère avoir un système qui boote légèrement plus lentement\u000aet que je puisse modifier facilement, et qui soit ouvert, compréhensible\u000aet distribué. C’est presque comme si les projets freedesktop.org avaient\u000apour but de remplacer la base UNIX de linux en créant un système\u000aconcurrent, bâtard, bâti sur le kernel Linux mais n’employant plus les\u000asystèmes basiques d’UNIX.

\u000a

Le problème est qu’il est facilement visible que la direction prise par\u000ala communauté Linux n’est pas celle du retour sur les systèmes UNIX ni\u000acelle du développement de solutions respectant la philosophie UNIX, mais\u000aremises au gout du jour (?), mais est bien d’accepter et de pousser les\u000achangements apportés par les projets freedesktop.org directement dans le\u000ac\u0153ur du système lui même. Ainsi, Fedora (très près de Red Hat, dont font\u000apartie de nombreux développeurs de ces projets), a déjà adopté tous ces\u000achangements (archlinux aussi, mais pour d’autres raisons…), et on peut\u000acompter sur le fait que les autres distributions l’adopteront un jour ou\u000al’autre.

\u000a

Bon, maintenant que nous avons, si ce n’est démontré la nocivité de ces\u000asystèmes, tout du moins exprimé les raisons qui font qu’ils me\u000adéplaisent, on pourrait penser qu’il suffit de passer a une distribution\u000an’incluant pas systemd, voire a une distribution n’incluant pas du tout\u000ade contenus freedesktop.org, et de vivre avec le fait de ne pas être sur\u000aarchlinux. Cependant, avec un peu de réflexion, on voit que si des\u000adistributions comme archlinux et Fedora ont adopté systemd (et\u000aqu’OpenSUSE est en train de l\u2019intégrer), il est probable que cela\u000adevienne un standard au fil des années, et que seuls survivent systemd\u000aet upstart, le gestionnaire de démarrage d’ubuntu, qui ne changera\u000aprobablement pas (je les vois mal revenir en arrière sur ce point.)\u000aToujours est-il que l’init héritée du System V semble condamnée a mourir\u000asous Linux. Il pourrait être judicieux de passer sous debian squeeze,\u000aqui ne recevra probablement jamais la mise a jour, ou a wheezy, qui ne\u000ala recevra probablement que dans 2/3 ans. Cependant, cette période est\u000atoujours trop courte, et met sur mon système d’exploitation une date\u000ad’expiration, chose qui ne me plait que moyennement. Non, la solution\u000aest de passer sous un système autre, qui ait son propre système d’init\u000a(ou qui ne risque pas de passer sous systemd). Dans ce cas, deux options\u000aprincipales s’ouvrent a moi: OpenSolaris et *BSD. Minix n’est pas\u000avraiment un choix, vu le peu de programmes qu’il permet de faire\u000afonctionner et le fait qu’il ne soit disponible que sur i386, ce qui\u000an’est pas vraiment avantageux au vu de mon système en x86_64. Haiku\u000an’est pas un choix non plus, puisque le but est de rester dans une\u000aoptique UNIX.

\u000a

OpenSolaris est un système d’exploitation tout a fait valable. Je n’ai\u000aen théorie aucun problème sur cet OS, sauf que certains choix de design\u000ane correspondent pas du tout a l’idée que j’ai d’un OS. En effet,\u000aOpenSolaris ressemble assez a Debian dans sa vision du fonctionnement de\u000ases outils, avec des paquets modifiés pour les rendre plus simples a\u000autiliser (fichiers de configuration fournis par défaut, par exemple, et\u000aautres patchs “release-only”), et une tendance a faire des scripts et\u000ades outils installés par défaut pour tout et n’importe quoi. Bref, cela\u000an’est pas le sujet. Il convient aussi de voir qu’avec la récente\u000aacquisition de Sun par Oracle, il est possible que le projet OpenSolaris\u000an’ait pas de très beaux jours devant lui (la page d\u2019accueil du\u000aprojet affiche d’ailleurs un ÉNORME logo Oracle, du meilleur gout.)

\u000a

Il reste donc *BSD. Pourquoi choisir FreeBSD plutôt qu’OpenBSD, NetBSD\u000aou DragonFlyBSD (pour ne citer que les plus connus) ? Et bien c’est\u000asimple : pour aucune raison particulière. OpenBSD et NetBSD ont pour\u000aréputation d’être orientées sécurité, et d’après ce que j’ai pu en voir\u000aDFBSD ressemble aussi au système de l’assistance a l’user a outrance\u000adécris plus haut. Mais la vérité est que je n’ai pas fait suffisamment\u000ade recherches et que FreeBSD ne va me voir arriver que par hasard, parce\u000aqu’entre toutes les BSD ca me semble la plus sympa et la plus agréable a\u000autiliser, plus le fait que le système de ports me convient bien (j’aime\u000apouvoir configurer mes logiciels de façon assez profonde.)

\u000a

Voila, c’est mon avis sur ce “problème” actuel du monde de Linux. Bien\u000aentendu, je continuerai a utiliser Linux, et je ne peux qu\u2019espérer que\u000ales systèmes tels que systemd ou dbus ne disparaissent, ou tout du moins\u000an’apparaissent jamais chez certaines distributions, créant de ce fait un\u000achoix pour les utilisateurs.
\u000a[1]: Je n’ai pas trouvé de traduction satisfaisante a “software leveraging”, mais l’idée est la…*

p1849 (dp1850 Vdate p1851 g5 (S'\x07\xdd\x02\x04\x11)\x00\x00\x00\x00' p1852 tp1853 Rp1854 sVcategory p1855 g10 (g11 g12 Ntp1856 Rp1857 (dp1858 g16 VRanting p1859 sg18 Vranting p1860 sg20 g293 sbsVtitle p1861 VPourquoi je vais quitter linux pour passer a FreeBSD. p1862 sVslug p1863 Vpourquoi-je-vais-quitter-linux-pour-passer-a-freebsd p1864 sVauthor p1865 g10 (g268 g12 Ntp1866 Rp1867 (dp1868 g16 VWxcafe p1869 sg18 Vwxcafe p1870 sg20 g293 sbstp1871 tp1872 sV/srv/www/content/introduction-a-bash-en-tant-que-language-de-programmation.md p1873 (F1441303347.8733363 (V

L\u2019interpréteur de commandes bash (Bourne Again SHell)\u000aest possiblement le shell le plus connu, notamment grâce a son\u000aintégration en tant que shell par défaut dans les distributions Linux\u000ales plus répandues (Debian - Ubuntu, Fedora, OpenSUSE, Mandriva -\u000aMageia, etc…).

\u000a

Cependant, il n’est souvent connu qu’en tant qu\u2019interpréteur de\u000acommande. Alors qu’en réalité, le bash est un langage de programmation\u000a(presque) complet! Ainsi, il intègre les structures de contrôle\u000ahabituelles ( pour mémoire, les structures de contrôle comprennent les\u000aconditions (les ifs), les boucles (les while), et les choix (les case),\u000aentre autres.), et est donc ce que l’on pourrait appeler un langage de\u000ascript, interprété, de la même façon que python, a la difference près\u000aqu’il contient un prompt (un système d’entrée de commande interactif)\u000abien plus complet et développé que python.

\u000a

Cependant, les programmes en bash ne sont executables que dans un\u000aenvironnement de type UNIX, et donc pas sous Windows (cygwin\u000a(cygwin.com) propose ceci dit un système permettant d’utiliser bash sous\u000awindows. Il faut malgré tout convenir que cet environnement est bien\u000aplus compliqué a manipuler, et globalement ne permet pas d’acceder a des\u000aportages de qualité satisfaisante.)

\u000a

Ainsi, il est possible de créer des fichiers .sh, contenant des\u000ainstructions bash mises a la suite (de la même façon qu’un script BATCH\u000aWindows .bat), et faisant appel autant aux commandes internes de bash,\u000aaussi bien que les commandes externes mises en place par les programmes\u000ainstallés sur le système, exactement comme dans une invite de commande.\u000aAinsi, pour appeller firefox, la commande ‘firefox’ lancera le petit\u000apanda roux directement dans la boite magique, tandis qu’un if\u000a[condition] suivi d’un then (quelque chose) lancera le fameux quelque\u000achose suscité si la condition est vérifiée. Un peu comme en C, quoi.

\u000a

De cette façon, et avec quelques informations et connaissances, il est\u000afacile de comprendre le fonctionnement de la programmation en bash.\u000aQuelques exemples commentés:

\u000a
#!/bin/bash \u000a# La ligne du dessus est très importante, c'est elle qui dit a bash quel doit être \u000a# l'interpreteur des commandes écrites dans ce script. Ici, on dit a bash d'interpréter \u000a# lui même les commandes comprises dans ce script. On aurait tout de fois pu lui faire \u000a# executer du python, par exemple, en mettant #!/usr/bin/python a la place.\u000aecho "this is a test of bash as a simple script manager" # echo est une commande d'affichage de message.\u000aecho "what's your name, user?" \u000aread your_name # la commande read permet de demander a l'utilisateur de donner une \u000a# information, stockée dans la variable en paramètre. \u000aecho $your_name "is your name" # echo permet aussi d'afficher la valeur de variables. \u000a# Ici, on renvoie la variable remplie précédemment, suivie d'un message. \u000aexit # cet appel a exit n'est pas obligatoire, mais donne un aspect plus \u000a# propre au code. Il ne quittera pas la session de terminal, cependant.\u000a
\u000a\u000a\u000a

Voila. Ce script bash ne sert pas a grand chose, mais il a le mérite\u000ad’être clair quand aux capacités et a la simplicité du bash en tant que\u000alanguage de programmation. Alors en effet, nous n’avons ici absolument\u000apas utilisé les capacités de bash en lui même, et n’avons fait que le\u000arenvoyer a des programmes externes (sauf read, il est vrai). Voyons\u000amaintenant la syntaxe de bash quand il s’agit d’utiliser les structures\u000ade contrôle:

\u000a
#!/bin/bash \u000aecho "welcome to this second bash program. would you please kindly enter the name of the machine you're running this on?" \u000aread host_name \u000aif [ $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. \u000athen echo "you told the truth!" \u000afi ## le fi est la commande fermant le if, tout comme le EndIf en basic. C'est un peu vieillot, mais important en bash. \u000aif [ $host_name != $HOSTNAME ] ## l'opérateur != est l'inverse de ==, il vérifie donc si les deux variables ne sont pas les mêmes. \u000athen echo "you lied!" \u000afi \u000aexit\u000a
\u000a\u000a\u000a

Voila un petit programme permettant d’apprendre la syntaxe du if en\u000abash. comme vous pouvez le voir, le language est plutôt lite, et la\u000astructure if n’est pas très difficile a prendre en main.

\u000a

Passons maintenant au while:

\u000a
#!/bin/bash\u000aecho "what is your name?"\u000aread name\u000awhile [ 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.\u000ado echo "i love" $name\u000adone\u000aexit\u000a
\u000a\u000a\u000a

Ce petit programme permet d’observer les bases de while (qui est la\u000aboucle de base en bash).

\u000a

Le troisième opérateur de bash est case. Voyons:

\u000a
#!/bin/bash\u000aecho "please enter a number between one and five"\u000aread number\u000acase $number in \u000a1)\u000aecho "the choosen number was one"\u000a;;\u000a2)\u000aecho "the choosen number was two"\u000a;;\u000a3)\u000aecho "the choosen number was three"\u000a;;\u000a4)\u000aecho "the choosen number was four"\u000a;;\u000a5)\u000aecho "the choosen number was five"\u000a;;\u000a*)\u000aecho "this number is not correct"\u000a;; \u000aesac\u000aexit\u000a
\u000a\u000a\u000a

case est un opérateur plus complexe a utiliser a bon escient, et sert a\u000afaire des ifs multiples sans avoir a taper des dizaines de lignes de\u000acode.
\u000a(pour ceux qui auraient du mal avec cet opérateur, il faut comprendre\u000aque le code vérifie chacune des conditions : le 1) est validé si la\u000avaleur de \u005c$number est 1, le 2) est validé si cette valeur est 2, etc..\u000ale *) désigne toutes les valeurs, et est donc validé si aucune autre\u000avaleur n’a précédemment acceptée.

\u000a

Quelques notions manquent ici:
\u000a- les nombres aléatoires sont générés par un appel a la variable\u000a\u005c$RANDOM, qui renvoie un nombre aléatoire entre 0 et 32767 (un entier a\u000a16 bits donc). il est possible de faire des invocations a des nombres\u000aaléatoires plus grands, mais les méthodes permettant de faire cela sont\u000aplus complexes, et je ne les aborderai donc pas ici.
\u000a- comme vous avez pu le constater, les variables sont désignées en tant\u000aque telles par l’utilisation d’un symbole \u005c$ au début de leur nom.\u000aAinsi, echo number renverra “number”, tandis que echo \u005c$number renverra\u000ale résultat de la variable \u005c$number.
\u000aêtre utilisées dans un programme bash.
\u000a- comme vous avez pu le constater, les commandes doivent tenir en\u000athéorie en une ligne. Cependant, le caractère \u005c permet de retourner a\u000ala ligne en faisant considérer a bash qu’il s’agit de la même ligne.

\u000a

Globalement, il faut admettre que bash n’a pas vocation a être un\u000alangage de programmation extrêmement développé. Sans framework\u000agraphique, avec peu de manières d’utiliser de grandes variables, ou\u000aencore une gestion de la mémoire risible, bash n’a rien d’un langage de\u000adéveloppement professionnel.
\u000aCependant, le simple fait qu’il soit considéré comme un langage de\u000aprogrammation a part entière font de lui un langage de script d’une\u000apuissance incontestable, et sa simplicité et sa grande popularité font\u000ade lui un langage de choix pour apprendre la programmation simplement et\u000asans trop se prendre la tête.

\u000a

J’espère que cet article aura été utile a certain-e-s, et je vous\u000asouhaite bonne chance dans votre découverte de la programmation (n’allez\u000apas voir ceux qui font de l’orienté objet, c’est des méchants :3)

p1874 (dp1875 Vdate p1876 g5 (S'\x07\xdc\t\x08\x12\x0f\x00\x00\x00\x00' p1877 tp1878 Rp1879 sVcategory p1880 g10 (g11 g12 Ntp1881 Rp1882 (dp1883 g16 VProgrammation p1884 sg18 Vprogrammation p1885 sg20 g21 sbsVauthor p1886 g10 (g268 g12 Ntp1887 Rp1888 (dp1889 g16 VWxcafe p1890 sg18 Vwxcafe p1891 sg20 g21 sbsVslug p1892 Vintroduction-a-bash-en-tant-que-language-de-programmation p1893 sVtitle p1894 VIntroduction a bash en tant que language de programmation. p1895 stp1896 tp1897 sV/srv/www/content/la-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne.md p1898 (F1441303347.8733363 (V

Aujourd’hui, et depuis 1901 (j’ai révisé mon histoire récemment), il\u000aexiste une loi dite de séparation des églises et de l’état, qui consiste\u000aa faire en sorte que l’état n’ait rien a voir avec les differentes\u000aéglises, pour de sombres histoires d’indépendance et de laïcité.\u000a(principes qui sont aujourd’hui en voie de disparition, mais ce n’est\u000apas le propos qui nous occupe ici). Cela dit, cette bonne idée\u000apolitique, si elle a évité a ses auteurs de nombreux tracas, et leur a\u000asurement permis de conserver une tête en état de fonctionnement bien\u000areliée a leur colonne vertébrale, ne vous interesse que moyennement, et\u000avous voudriez retourner répondre a vos mails sur Gmail et micro-blogguer\u000a(quel mot horrible…) sur twitter?

\u000a

Ça tombe bien, vous abordez justement le sujet véritable de cet article\u000a(non, mon blog n’est pas devenu un histoblog, désolé aux déçus…), a savoir \u000ala centralisation qui se met progressivement en place sur internet depuis\u000aquelques années : Twitter, Google, Facebook, Micro$oft, Apple, tous ces\u000aacteurs du web (et pas que, pour certains…) ont commencé a prendre\u000apour manie de centraliser vos données : pour prendre un exemple simple,\u000asi vous utilisez Gmail (qui depuis quelque temps, lit aussi vos mails\u000apour accorder la publicité, dites adieu a votre vie privée), vous avez\u000aun compte Google Talk, probablement aussi un Google+.

\u000a

L’outil le plus pratique aujourd’hui pour aggreger des flux RSS est\u000aGoogle Reader, et vous l’utilisez aussi probablement. Votre téléphone\u000aest un android? Ah, un Nexus? Vous avez donc toutes les applications\u000agoogle installées, et Chrome mobile comme navigateur par défaut, qui est\u000asynchronisé avec la version qui tourne sur votre PC (via les serveurs de\u000aGoogle, bien sur). \u000aDepuis peu, les recherches sur le moteur de recherche\u000asont elles aussi ajoutées a votre profil, enregistrées a jamais par\u000aGoogle (qui n’est pas touchée, en tant que société américaine, par la\u000a“loi des 10 ans” francaise.). Vous commencez a voir le truc? Non, ne\u000ajetez pas ce telephone, enfin! (je refuse de rembourser tout smartphone\u000aayant été perdu a cause de cet article) J’ai pris ici comme exemple\u000aGoogle, parce que c’est celui qui propose le plus de services, mais\u000aApple avec iCloud, iTunes et son iPhone fait pareil, tout comme M$ avec\u000aWP8 et Skydrive.

\u000a

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

\u000a

Ce qui est, comme vous pouvez le comprendre, relativement\u000aproblématique. (pour ceux qui a ce point se disent “je n’ai rien a\u000acacher, donc je m’en fous si le gouvernement américain sait tout de\u000amoi”, je vous conseille d’aller lire cet article de Jean Marc\u000aManach, plein de bon sens…) Pour éviter cela, vous avez plusieurs\u000apossibilités: utiliser des services concurrents pour tout (Facebook\u000aMail, Skydrive, Twitter et Google Reader par exemple), tout en vous\u000asouvenant que comme ces entreprises sont toutes américaines, le\u000agouvenrnement américain détient tout de même vos informations, et que ca\u000alui prendra juste un peu plus de temps.

\u000a

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

\u000a

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

\u000a

Un serveur peut de plus vous permettre de controller parfaitement \u000atous ces services, sans aucune limitation d’aucune sorte, \u000avoire de vous créer une page web. Bien entendu, il est bien plus \u000autile d’avoir un serveur si vous avez aussi un nom de domaine.\u000aHeureusement, ils sont peu chers et souvent fournis avec le serveur.

\u000a

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

p1899 (dp1900 Vdate p1901 g5 (S'\x07\xdc\x0c\r\x03\x08\x00\x00\x00\x00' p1902 tp1903 Rp1904 sVcategory p1905 g10 (g11 g12 Ntp1906 Rp1907 (dp1908 g16 VRanting p1909 sg18 Vranting p1910 sg20 g21 sbsVauthor p1911 g10 (g268 g12 Ntp1912 Rp1913 (dp1914 g16 VWxcafe p1915 sg18 Vwxcafe p1916 sg20 g21 sbsVslug p1917 Vla-separation-des-eglises-et-de-letat-une-idee-quelle-est-bonne p1918 sVtitle p1919 VLa séparation des églises et de l'état, une idée qu'elle est bonne? p1920 stp1921 tp1922 sV/srv/www/content/ssl.md p1923 (F1440203881.5375795 (V

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

\u000a

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

\u000a

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

\u000a

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

\u000a

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

\u000a

Il serait préférable de faire des redirections automatiques des adresses http\u000avers les adresses https, cependant, étant donné que le certificat est\u000aself-signed, il me semble préférable que l’arrivée sur le site ne commence pas\u000apar une page firefox disant “Something’s Wrong!”, et ces redirections ne seront\u000adonc pas mises en place.

\u000a

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

\u000a

Bon, maintenant que les explications basiques sont faites, voyons\u000al’implémentation :
\u000aPour générer la clé, tout d’abord, il convient d’utiliser les commandes\u000asuivantes:

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

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

\u000a

apache :

\u000a
# /etc/apache2/mods_enabled/ssl.conf\u000a# [...]\u000aSSLProtocol all -SSLv2 -SSLv3\u000aSSLHonorCipherOrder on\u000aSSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \u005c\u000a  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \u005c\u000a  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"\u000a# [...]\u000a# /etc/apache2/sites-enabled/default-ssl\u000a# [...]\u000aSSLEngine on\u000aSSLCertificateFile /etc/certs/example.com.crt\u000aSSLCertificateKeyFile /etc/certs/example.com.key\u000a# [...]\u000a
\u000a\u000a\u000a

nginx :

\u000a
# /etc/nginx/nginx.conf \u000a# [...]\u000assl_protocols TLSv1 TLSv1.1 TLSv1.2;\u000assl_prefer_server_ciphers on;\u000assl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \u005c\u000a  EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \u005c\u000a  EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";\u000a# [...]\u000a# /etc/nginx/sites-enabled/default-ssl\u000a# [...]\u000assl on;\u000assl_certificate /etc/certs/example.com.crt\u000assl_certificate_key /etc/certs/example.com.key\u000a# [...]\u000a
\u000a\u000a\u000a

prosody (jabber) :

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

postfix (email) :

\u000a
# /etc/postfix/main.cf\u000a# [...]\u000asmtpd_tls_cert_file = /etc/certs/example.com.crt\u000asmtpd_tls_key_file = /etc/certs/example.com.key\u000atls_preempt_cipherlist = yes\u000asmtpd_tls_eecdh_grade = strong\u000asmtdp_tls_mandatory_ciphers = high\u000asmtpd_tls_mandatory_exclude_ciphers = aNULL, eNULL, MD5, LOW, 3DES, EXP, PSK, SRP, DSS\u000asmtpd_tls_security_level = encrypt\u000asmtpd_tls_mandatory_protocols = !SSLv2, !SSLv3\u000asmtpd_use_tls = yes\u000a# [...]\u000a
\u000a\u000a\u000a

dovecot (imap) :

\u000a
# /etc/dovecot/dovecot.conf \u000a# [...]\u000assl_cert = </etc/certs/example.com.crt\u000assl_key = </etc/certs/example.com.key\u000assl_cipher_list = HIGH+kEDH:HIGH+kEECDH:HIGH:!PSK:!SRP:!3DES:!aNULL\u000a
\u000a\u000a\u000a

Voila. Pour d’autres protocoles/services, je vous invite a RTFM^W vous reporter\u000aau manuel approprié.

\u000a

Cela étant dit, je conseille a tout le monde d’aller voir la conférence dans le\u000adisclaimer, et tant qu’a faire la conférence du même hacker SSL and the future\u000aof Authenticity qui parle de son\u000aimplémentation d’une technologie “remplaçant” le système de CAs qui existe\u000aactuellement.

p1924 (dp1925 Vdate p1926 g5 (S'\x07\xde\x05\x1e\x08\x19\x00\x00\x00\x00' p1927 tp1928 Rp1929 sVcategory p1930 g10 (g11 g12 Ntp1931 Rp1932 (dp1933 g16 VNote p1934 sg18 Vnote p1935 sg20 g581 sbsVtitle p1936 VSSL ou la sécurité sur l'internet p1937 sVslug p1938 VSSL-ou-la-securite-sur-internet p1939 sVauthor p1940 g10 (g268 g12 Ntp1941 Rp1942 (dp1943 g16 VWxcafe p1944 sg18 Vwxcafe p1945 sg20 g581 sbstp1946 tp1947 sV/srv/www/content/le-quenya-episode-o.md p1948 (F1441303347.8733363 (V

Le Quenya est, pour ceux qui ne connaissent pas (comme moi jusqu\u2019à il y\u000aa peu…), le nom que donnait Tolkien au dialecte principal parlé par\u000ales Elfes dans les différentes \u0153uvres de l’auteur, dont Le Seigneur des\u000aAnneaux, le Hobbit, ou encore le Silmarillion. Il faut se rendre compte\u000aavant de commencer cet article que l’une des \u0153uvres les plus\u000aimpressionnantes de Tolkien, si ce n’est la plus grande, est\u000al’impressionnant travail linguistique passé sur les différentes langues\u000aprésentes dans son \u0153uvre littéraire : L’elfique, qui est donc le quenya,\u000ala langue des nains, qui est appelé le khazalide, etc.

\u000a

En effet, a contrario des “langues” développées dans d’autres \u0153uvres littéraires\u000atelles Eragon ou Harry Potter, où l’auteur-e se contente de lier un mot\u000ade français (ou d’anglais) a un mot de sa “langue”, les langues de\u000al’oeuvre de Tolkien sont des langues complètes. Elles possèdent des\u000aracines logiques, des systèmes de grammaire et de conjugaison propres,\u000aune logique inhérente dans la prononciation ou l’orthographe, et ainsi\u000ade suite.

\u000a

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

\u000a

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

\u000a

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

\u000a

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

p1949 (dp1950 Vdate p1951 g5 (S'\x07\xdc\t\x12\x13\x07\x00\x00\x00\x00' p1952 tp1953 Rp1954 sVcategory p1955 g10 (g11 g12 Ntp1956 Rp1957 (dp1958 g16 VLanguage p1959 sg18 Vlanguage p1960 sg20 g21 sbsVauthor p1961 g10 (g268 g12 Ntp1962 Rp1963 (dp1964 g16 VWxcafe p1965 sg18 Vwxcafe p1966 sg20 g21 sbsVslug p1967 Vle-quenya-episode-o p1968 sVtitle p1969 VLe Quenya - Épisode ø p1970 stp1971 tp1972 sV/srv/www/content/monter-son-propre-serveur-partie-1-le-serveur-et-lapache.md p1973 (F1431623308.6938474 (V

Il y a un certain temps, j’avais parlé du concept du self-hosting. Il\u000as’agit de posséder son propre serveur, et donc, par extension, ses\u000adonnées.

\u000a

Bien entendu, il n’est pas nécessaire pour cela de posséder\u000aphysiquement son propre serveur (encore que ce soit possible, mais ce\u000an’est pas le sujet abordé ici.)
\u000aNous expliquerons ici les étapes nécessaires pour arriver a avoir un\u000aserveur utilisable, du moment ou vous arrivez sur le système fraichement\u000ainstallé, au moment ou vous possédez un serveur avec tous les paquets\u000anécessaires a l’utilisation que l’on veut en faire ici d’installés.\u000aCette partie va consister a paramétrer le système (ici un debian\u000asqueeze. Il est bien sur possible de faire la même chose avec a peu près\u000atoutes les distributions Linux disponibles, tout comme avec les BSD et\u000atous les autres systèmes UNIX, mais je vais ici me limiter a debian 6.0.x\u000asqueeze, parce que c’est une distribution simple a utiliser comme\u000aserveur, stable, et facile a configurer (puisqu’une bonne partie de la\u000aconfiguration est déjà faite et incluse dans le paquet), donc adaptée au\u000abut de cet article, a savoir rendre l’installation simple et\u000acompréhensible).

\u000a

La première chose a faire est bien entendu d’obtenir le serveur en lui\u000amême. Cette partie de la chose ne sera pas traitée dans cet article. Il\u000aexiste en effet un nombre infini d’obtenir un serveur, que ce soit en le\u000alouant chez OVH/1&1/n’importe quel autre hébergeur commercial, en\u000aparticipant a un système d’hébergement collaboratif (je vous laisse\u000achercher), en achetant un serveur et en le faisant fonctionner de chez\u000avous, en utilisant un vieux PC… Bref, les possibilités sont multiples.\u000aDès lors que vous avez accès a un système debian serveur, peu importe sur\u000aquel matériel il fonctionne, et a priori peu importe aussi la manière\u000adont vous y accédez, le résultat est le même (et la procédure aussi…).\u000aDans cet article, nous parlerons de la configuration de base, du moment\u000aou vous avez le serveur vierge dans les mains au moment ou vous\u000ainstallez le serveur http.

\u000a

Dans cet article, lorsque est précisée le type d’IP a utiliser, il\u000aconvient de mettre ce type précisément. Quand le type n’est pas\u000aprécisée, libre a vous de choisir ipv4 ou ipv6.

\u000a

Bref. Commençons au point ou vous avez un accès root a votre serveur,\u000an’ayant soit aucun mot de passe, soit un choisi par l’hébergeur, et ou\u000arien n’est configuré. Connectez vous a celui-ci (ssh root@). Commencez\u000adonc par faire un passwd, pour mettre au plus vite un mot de passe\u000asolide sur le compte root. Continuons en allant vite mettre en place le\u000anom de domaine. Pour cela, votre registrar doit vous fournir une\u000ainterface vous permettant d’éditer l’entrée DNS pour votre nom de\u000adomaine.

\u000a

Cette entrée doit donc pour l’instant ressembler a ca :

\u000a
    <votre nom de domaine>  NS 1 \u000a                            IN MX 1 \u000a                            IN A        <IPv4 de votre serveur>\u000a                            IN AAAA     <IPv6 de votre serveur>\u000a
\u000a\u000a\u000a

Cela vous permet de rediriger tout le trafic se référant a votre nom de\u000adomaine vers votre ip (le fonctionnement exact du DNS est assez\u000acompliqué a expliquer, donc on va dire que c’est de la magie pour\u000al’instant, ca sera peut être le sujet d’un autre article), et d’indiquer\u000aque les mails @votre-nom-de-domai.ne doivent aussi être redirigés vers\u000avotre serveur, ce qui est un bon début. Faisons un petit point sécurité\u000aici : pour accéder a votre serveur, il vous suffit actuellement de taper\u000ale mot de passe root.

\u000a

root est un utilisateur assez répandu, et il est assez simple de\u000abruteforcer le mot de passe. (Relativement assez simple, en fonction\u000adu nombre de caractères, ça prend plus ou moins de temps, et si vous\u000aavez suffisamment de caractères, ça peut prendre un temps assez\u000aconséquent. Cela dit, il vaut mieux être prudent…) Ainsi, nous allons\u000aarrêter d’utiliser root et nous allons commencer a utiliser des couples\u000aclés publiques/privées pour nous connecter au serveur.
\u000aCela se fait en deux temps : tout d’abord, créer un nouvel utilisateur,\u000agrâce auquel nous administrerons le serveur a l’avenir; puis configurer\u000aOpenSSH pour que celui ci n’accepte que les connections par clés et plus\u000acelles sur root.

\u000a

Commençons par ajouter un utilisateur. Si vous êtes sous debian, cela se\u000afait avec adduser, qui est interactif (vous ne devriez pas avoir de\u000aproblème avec, puisqu’il crée tout les dossiers et fichiers nécessaires,\u000aet vous pose toutes les questions utiles pour vous aider.) sinon, vous\u000adevrez utiliser useradd, qui est (en plus d’être très chiant a\u000adistinguer de l’autre, bien plus chiant a utiliser. (adduser est en fait\u000aun simple script permettant l’utilisation d’useradd plus facilement.)

\u000a

Avec adduser, vous pouvez soit utiliser le mode interactif en tapant\u000ajuste adduser <username>, soit utiliser le mode non-interactif\u000aen faisant un adduser --group <username>

\u000a

Avec useradd, vous devrez utiliser la commande suivante : useradd -m\u000a-N -g <username>. Cette commande ajoutera un utilisateur, créera\u000ason dossier principal dans /home/, et l’ajoutera au groupe du même nom\u000aque lui (ce qui est en général nécessaire pour des questions de vie\u000aprivée).

\u000a

Il convient maintenant d’ajouter cet utilisateur aux groupes qu’il sera\u000aamené a administrer: usermod <username> -a -G www-data postfix\u000ausers staff sudo wheel, puis de changer son mot de passe\u000apasswd. Enfin, ajoutons le aux utilisateurs autorisés a utiliser\u000asudo: echo "%sudo ALL=(ALL) ALL" >> /etc/sudoers
\u000aEnfin, changeons d’utilisateur : su. A ce point, vous avec un\u000autilisateur complètement fonctionnel et utilisable pour toutes les\u000ataches d’administration. Si vous devez encore utiliser root, c’est que\u000aquelque chose ne va pas.

\u000a

Vous êtes donc loggés sur le système en tant qu’utilisateur normal. Nous\u000aallons maintenant passer a la phase 2 du plan : désactiver le login ssh\u000aroot et le login ssh par mot de passe.
\u000aTout d’abord, qu’est-ce qu’un login par clé ssh? Il s’agit en fait d’un\u000asystème assez semblable a celui vous permettant de chiffrer vos mail :\u000avous avec une clé publique et une clé privée sur le client, et la clé\u000apublique est aussi sur le serveur. Lorsque vous vous connectez, openssh\u000avérifie que vous possédez la clé privée qui correspond a la clé publique\u000astockée sur le serveur (pour votre utilisateur, bien entendu). Il est\u000aégalement possible d’utiliser plusieurs clés publique pour chaque
\u000autilisateur.

\u000a

Bref, maintenant que nous avons la théorie, passons a la pratique : tout\u000ad’abord, il nous faut générer un couple de clés publique/privée sur le\u000aclient. Openssh fait ça via la commande ssh-keygen -t rsa (le -t\u000arsa précise a ssh que nous voulons un chiffrement rsa, qui est\u000asuffisamment solide pour cette utilisation.) Entrez les informations que\u000assh-keygen vous demande. Trois fichiers devraient maintenant se trouver\u000adans votre dossier .ssh/ : id_rsa, id_rsa.pub, et known_hosts.
\u000aknown_hosts liste les serveurs auxquels vous vous êtes connectés déjà\u000aune fois (pour éviter les attaques MITM, mais bref). Non, ce qui nous\u000aintéresse ici c’est id_rsa et id_rsa.pub . id_rsa contient votre clé\u000aprivée, sauvegardez la sur une clé USB ou notez la sur un bout de\u000apapier, si vous la perdez, vous ne pourrez plus vous connecter au\u000aserveur. (planquez la clé usb/le bout de papier…) id_rsa.pub, quand a\u000alui, contient votre clé publique. Copiez la sur le serveur, avec unscp ~/.ssh/id_rsa.pub <username>@<votre nom de domaine>:~/ , ou\u000aen la copiant a la main, si ça vous amuse.

\u000a

Vous avez maintenant un fichier id_rsa.pub dans votre dossier personnel \u000asur le serveur, il faut le mettre a un endroit ou openssh le reconnaitra.\u000aIl est donc nécessaire de créer le dossier .ssh (mkdir .ssh), puis\u000ade déplacer ce fichier a la bonne place (mv ~/id_rsa.pub ~/.ssh/authorized_keys).\u000aTestez si ça fonctionne : ouvez un autre terminal, et
\u000aconnectez vous a votre serveur (ssh <username>@<votre nom de\u000adomaine>), et il ne devrait pas vous demander de mot de passe.Si\u000ail vous en demande un, NE PASSEZ PAS A LA SUITE. Quelque chose a foiré,\u000adonc vérifiez que vous avez suivi correctement les instruction\u000aci-dessus.

\u000a

Continuons. Il ne nous reste plus qu’a installer le serveur web, et a le\u000aconfigurer:

\u000a
sudo apt-get install \u005c\u000aapache2 apache2.2-common apache2-doc apache2-mpm-prefork \u005c\u000aapache2-utils libexpat1 ssl-cert libapache2-mod-php5 \u005c\u000aphp5 php5-common php5-gd php5-cgi libapache2-mod-fcgid \u005c\u000aapache2-suexec php-pear php-auth php5-mcrypt mcrypt \u005c\u000aphp5-imagick imagemagick libapache2-mod-suphp libruby \u005c\u000alibapache2-mod-ruby\u000a
\u000a\u000a\u000a

(faisons large, on aura besoin de l’excédent plus tard…), puis activons les
\u000amods apache en faisant a2enmod suexec rewrite ssl actions include\u000adav_fs dav auth_digest, et faisons en sorte que ces activations\u000asoient prises en compte par apache via un sudo service apache2\u000arestart

\u000a

Le serveur fonctionne, maintenant, il est necessaire de lui expliquer\u000acomment fonctionner sur notre nom de domaine et ou trouver les fichiers\u000aa envoyer.

\u000a

Pour cela, nous allons faire un simple ln -s /etc/apache2/sites-{available,enabled}/default, car apache est assez\u000asympa pour nous filer un fichier de configuration par défaut. Il nous\u000afaut encore l’éditer, en changeant l’adresse mail au début du document\u000apar la votre, et en changeant AllowOverride none en AllowOverride All,\u000aet enfin redémarrer apache pour qu’il prenne en compte les\u000amodifications, par un sudo service apache2 restart

\u000a

Et maintenant, il vous reste a apprendre le html, parce que ca y est,\u000avotre serveur est fonctionnel! Voila voila. Dans la prochaine partie, on\u000averra l’installation du serveur mail (c’est suffisamment complexe pour\u000aprendre un article seul…)

p1974 (dp1975 Vdate p1976 g5 (S'\x07\xdd\x03\x12\t3\x00\x00\x00\x00' p1977 tp1978 Rp1979 sVcategory p1980 g10 (g11 g12 Ntp1981 Rp1982 (dp1983 g16 VTutoriel p1984 sg18 Vtutoriel p1985 sg20 g293 sbsVtitle p1986 VMonter son propre serveur, partie 1: le serveur et l'apache. p1987 sVslug p1988 Vmonter-son-propre-serveur-partie-1 p1989 sVauthor p1990 g10 (g268 g12 Ntp1991 Rp1992 (dp1993 g16 VWxcafe p1994 sg18 Vwxcafe p1995 sg20 g293 sbstp1996 tp1997 s.