pull/1/head
Yax 5 years ago
parent 0538f61b5a
commit ac45ac1b6c

110
.gitignore vendored

@ -1,104 +1,8 @@
# Byte-compiled / optimized / DLL files _site
__pycache__/ *.pyc
*.py[cod] __pycache__
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage .coverage
.coverage.* htmlcov
.cache *.sw?
nosetests.xml .DS_Store
coverage.xml venv
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/

@ -1,25 +0,0 @@
BSD 2-Clause License
Copyright (c) 2019, Yax
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

@ -0,0 +1,22 @@
The MIT License (MIT)
=====================
Copyright (c) 2018 Sunaina Pai
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

@ -0,0 +1,75 @@
site:
./makesite.py
serve: site
cd _site && python -m SimpleHTTPServer 2> /dev/null || python3 -m http.server
venv2:
virtualenv ~/.venv/makesite
echo . ~/.venv/makesite/bin/activate > venv
. ./venv && pip install commonmark coverage
venv: FORCE
python3 -m venv ~/.venv/makesite
echo . ~/.venv/makesite/bin/activate > venv
. ./venv && pip install commonmark coverage
test: FORCE
. ./venv && python -m unittest -bv
coverage:
. ./venv && coverage run --branch --source=. -m unittest discover -bv; :
. ./venv && coverage report -m
. ./venv && coverage html
clean:
find . -name "__pycache__" -exec rm -r {} +
find . -name "*.pyc" -exec rm {} +
rm -rf .coverage htmlcov
REV = cat /tmp/rev.txt
example:
#
# Remove existing output directories.
rm -rf _site /tmp/_site
#
# Create params.json for makesite-demo.
echo '{ "base_path": "/makesite-demo", "site_url":' \
'"https://tmug.github.io/makesite-demo" }' > params.json
#
# Generate the website.
. ./venv && ./makesite.py
rm params.json
#
# Get current commit ID.
git rev-parse --short HEAD > /tmp/rev.txt
#
# Write a README for makesite-demo repository.
echo makesite.py demo > _site/README.md
echo ================ >> _site/README.md
echo This is the HTML/CSS source of an example static >> _site/README.md
echo website auto-generated with [sunainapai/makesite][makesite] >> _site/README.md
echo "([$$($(REV))][commit])". >> _site/README.md
echo >> _site/README.md
echo Visit "<https://tmug.github.io/makesite-demo>" to >> _site/README.md
echo view the example website. >> _site/README.md
echo >> _site/README.md
echo [makesite]: https://github.com/sunainapai/makesite >> _site/README.md
echo [commit]: https://github.com/sunainapai/makesite/commit/$$($(REV)) >> _site/README.md
echo [demo]: https://tmug.github.io/makesite-demo >> _site/README.md
#
# Publish makesite-demo.
mv _site /tmp
cd /tmp/_site && git init
cd /tmp/_site && git config user.name Makesite
cd /tmp/_site && git config user.email makesite@example.com
cd /tmp/_site && git add .
cd /tmp/_site && git commit -m "Auto-generated with sunainapai/makesite - $$($(REV))"
cd /tmp/_site && git remote add origin https://github.com/tmug/makesite-demo.git
cd /tmp/_site && git log
cd /tmp/_site && git push -f origin master
loc:
grep -vE '^[[:space:]]*#|^[[:space:]]*$$|^[[:space:]]*"""' makesite.py | wc -l
FORCE:

@ -0,0 +1,413 @@
makesite.py
===========
Take full control of your static website/blog generation by writing your
own simple, lightweight, and magic-free static site generator in
Python. That's right! Reinvent the wheel, fellas!
[![View Source][SOURCE-BADGE]](makesite.py)
[![View Demo][DEMO-BADGE]](https://tmug.github.io/makesite-demo)
[![MIT License][LICENSE-BADGE]](LICENSE.md)
[SOURCE-BADGE]: https://img.shields.io/badge/view-source-brightgreen.svg
[DEMO-BADGE]: https://img.shields.io/badge/view-demo-brightgreen.svg
[LICENSE-BADGE]: https://img.shields.io/badge/license-MIT-blue.svg
Contents
--------
* [Introduction](#introduction)
* [But Why?](#but-why)
* [Get Started](#get-started)
* [The Code](#the-code)
* [Layout](#layout)
* [Content](#content)
* [Credits](#credits)
* [License](#license)
* [Support](#support)
Introduction
------------
This repository contains the source code of an example website
containing two static blogs and a few static pages. The website can be
generated by running [makesite.py](makesite.py). The output looks like
[this](https://tmug.github.io/makesite-demo). That's it!
So go ahead, fork this repository, replace the [content](content) with
your own, and generate your static website. It's that simple!
You are [free](LICENSE.md) to copy, use, and modify this project for
your blog or website, so go ahead and fork this repository and make it
your own project. Change the [layout](layout) if you wish to, improve
the [stylesheet](static/css/style.css) to suit your taste, enhance
[makesite.py](makesite.py) if you need to, and develop your website/blog
just the way you want it.
But Why?
--------
For fun and profit! Okay, maybe not for profit, but hopefully for fun.
Have you used a popular static site generator like Jekyll to generate
your blog? I have too. It is simple and great. But then did you yearn
to use something even simpler to generate your blog? Do you like Python?
Perhaps the thought of writing your own static site generator crossed
your mind but you thought it would be too much work? If you answered
"yes" to these questions, then this project is for you.
With [makesite.py](makesite.py), you are in full control. There is no
hidden magic! There is no need to read any documentation to understand
how it works. There is no need to learn how to write configuration files
to produce some desired effect.
With [makesite.py](makesite.py):
- The code is the documentation.
- The code is the configuration.
Everything is laid out as plain and simple Python code for you to read
and enhance. It is less than 130 lines of code (excluding comments,
docstrings, and blank lines). It gets you off the ground pretty quickly.
You only need to execute `makesite.py`.
You can develop a decent website/blog within a few minutes and then you
can begin tinkering with the [source code](makesite.py), the
[layout](layout), and the [stylesheet](static/css/style.css) to
customize the look and feel of your website to your satisfaction.
Get Started
-----------
This section provides some quick steps to get you off the ground as
quickly as possible.
1. For a quick demo on your local system, just enter this command:
make serve
If you don't have `make` but have Python 3.x, enter this command:
python3 makesite.py
cd _site
python3 -m http.server
Note: In some environments, you may need to use `python` instead of
`python3` to invoke Python 3.x.
If you only have Python 2.7, enter this command:
python makesite.py
cd _site
python -m SimpleHTTPServer
Then visit http://localhost:8000/. It should look like
[this](https://tmug.github.io/makesite-demo).
Note: You can run [makesite.py](makesite.py) with Python 2.7 or
Python 3.x.
2. You may see a few `Cannot render Markdown` warning messages in the
output of the previous command. This is due to the fact that an
example [blog](content/blog) in this project has a few posts written
in Markdown. To render them correctly, install the `commonmark`
package with this command:
pip install commonmark
Then try the previous step again.
3. For an Internet-facing website, you would be hosting the static
website/blog on a hosting service and/or with a web server such as
Apache HTTP Server, Nginx, etc. You probably only need to generate
the static files and know where the static files are and move them
to your hosting location.
If you have the `make` command, enter this command to generate your
website:
make site
If you don't have `make` but have `python3`, enter this command:
python3 makesite.py
Note: In some environments, you may need to use `python` instead of
`python3` to invoke Python 3.x.
If you only have `python`, enter this command:
python makesite.py
The `_site` directory contains the entire generated website. The
content of this directory may be copied to your website hosting
location.
The Code
--------
Now that you know how to generate the static website that comes with
this project, it is time to see what [makesite.py](makesite.py) does.
You probably don't really need to read the entire section. The source
code is pretty self-explanatory but just in case, you need a detailed
overview of what it does, here are the details:
1. The `main()` function is the starting point of website generation.
It calls the other functions necessary to get the website generation
done.
2. First it creates a fresh new `_site` directory from scratch. All
files in the [static directory](static) are copied to this
directory. Later the static website is generated and written to this
directory.
3. Then it creates a `params` dictionary with some default parameters.
This dictionary is passed around to other functions. These other
functions would pick values from this dictionary to populate
placeholders in the layout template files.
Let us take the `subtitle` parameter for example. It is set
to our example website's fictitious brand name: "Lorem Ipsum". We
want each page to include this brand name as a suffix in the title.
For example, the [about page](https://tmug.github.io/makesite-demo/about/)
has "About - Lorem Ipsum" in its title. Now take a look at the
[page layout template](layout/page.html) that is used as the layout
for all pages in the static website. This layout file uses the
`{{ subtitle }}` syntax to denote that it is a placeholder that
should be populated while rendering the template.
Another interesting thing to note is that a content file can
override these parameters by defining its own parameters in the
content header. For example, take a look at the content file for
the [home page](content/_index.html). In its content header, i.e.,
the HTML comments at the top with key-value pairs, it defines a new
parameter named `title` and overrides the `subtitle` parameter.
We will discuss the syntax for placeholders and content headers
later. It is quite simple.
4. It then loads all the layout templates. There are 6 of them in this
project.
- [layout/page.html](layout/page.html): It contains the base
template that applies to all pages. It begins with
`<!DOCTYPE html>` and `<html>`, and ends with `</html>`. The
`{{ content }}` placeholder in this template is replaced with
the actual content of the page. For example, for the about page,
the `{{ content }}` placeholder is replaced with the the entire
content from [content/about.html](content/about.html). This is
done with the `make_pages()` calls further down in the code.
- [layout/post.html](layout/post.html): It contains the template
for the blog posts. Note that it does not begin with `<!DOCTYPE
html>` and does not contain the `<html>` and `</html>` tags.
This is not a complete standalone template. This template
defines only a small portion of the blog post pages that are
specific to blog posts. It contains the HTML code and the
placeholders to display the title, publication date, and author
of blog posts.
This template must be combined with the
[page layout template](layout/page.html) to create the final
standalone template. To do so, we replace the `{{ content }}`
placeholder in the [page layout template](layout/page.html) with
the HTML code in the [post layout template](layout/post.html) to
get a final standalone template. This is done with the
`render()` calls further down in the code.
The resulting standalone template still has a `{{ content }}`
placeholder from the [post layout template](layout/post.html)
template. This `{{ content }}` placeholder is then replaced
with the actual content from the [blog posts](content/blog).
- [layout/list.html](layout/list.html): It contains the template
for the blog listing page, the page that lists all the posts in
a blog in reverse chronological order. This template does not do
much except provide a title at the top and an RSS link at the
bottom. The `{{ content }}` placeholder is populated with the
list of blog posts in reverse chronological order.
Just like the [post layout template](layout/post.html) , this
template must be combined with the
[page layout template](layout/page.html) to arrive at the final
standalone template.
- [layout/item.html](layout/item.html): It contains the template
for each blog post item in the blog listing page. The
`make_list()` function renders each blog post item with this
template and inserts them into the
[list layout template](layout/list.html) to create the blog
listing page.
- [layout/feed.xml](layout/feed.xml): It contains the XML template
for RSS feeds. The `{{ content }}` placeholder is populated with
the list of feed items.
- [layout/item.xml](layout/item.xml): It contains the XML template for
each blog post item to be included in the RSS feed. The
`make_list()` function renders each blog post item with this
template and inserts them into the
[layout/feed.xml](layout/feed.xml) template to create the
complete RSS feed.
5. After loading all the layout templates, it makes a `render()` call
to combine the [post layout template](layout/post.html) with the
[page layout template](layout/page.html) to form the final
standalone post template.
Similarly, it combines the [list layout template](layout/list.html)
template with the [page layout template](layout/page.html) to form
the final list template.
6. Then it makes two `make_pages()` calls to render the home page and a
couple of other site pages: the [contact page](content/contact.html)
and the [about page](content/about.html).
7. Then it makes two more `make_pages()` calls to render two blogs: one
that is named simply [blog](content/blog) and another that is named
[news](content/news).
Note that the `make_pages()` call accepts three positional
arguments:
- Path to content source files provided as a glob pattern.
- Output path template as a string.
- Layout template code as a string.
These three positional arguments are then followed by keyword
arguments. These keyword arguments are used as template parameters
in the output path template and the layout template to replace the
placeholders with their corresponding values.
As described in point 2 above, a content file can override these
parameters in its content header.
8. Then it makes two `make_list()` calls to render the blog listing
pages for the two blogs. These calls are very similar to the
`make_pages()` calls. There are only two things that are different
about the `make_list()` calls:
- There is no point in reading the same blog posts again that were
read by `make_pages()`, so instead of passing the path to
content source files, we feed a chronologically reverse-sorted
index of blog posts returned by `make_pages()` to `make_list()`.
- There is an additional argument to pass the
[item layout template](layout/item.html) as a string.
9. Finally it makes two more `make_list()` calls to generate the RSS
feeds for the two blogs. There is nothing different about these
calls than the previous ones except that we use the feed XML
templates here to generate RSS feeds.
To recap quickly, we create a `_site` directory to write the static site
generated, define some default parameters, load all the layout
templates, and then call `make_pages()` to render pages and blog posts
with these templates, call `make_list()` to render blog listing pages
and RSS feeds. That's all!
Take a look at how the `make_pages()` and `make_list()` functions are
implemented. They are very simple with less than 20 lines of code each.
Once you are comfortable with this code, you can begin modifying it to
add more blogs or reduce them. For example, you probably don't need a
news blog, so you may delete the `make_pages()` and `make_list()` calls
for `'news'` along with its content at [content/news](content/news).
Layout
------
In this project, the layout template files are located in the [layout
directory](layout). But they don't necessarily have to be there. You can
place the layout files wherever you want and update
[makesite.py](makesite.py) accordingly.
The source code of [makesite.py](makesite.py) that comes with this
project understands the notion of placeholders in the layout templates.
The template placeholders have the following syntax:
{{ <key> }}
Any whitespace before `{{`, around `<key>`, and after `}}` is ignored.
The `<key>` should be a valid Python identifier. Here is an example of
template placeholder:
{{ title }}
This is a very simple template mechanism that is implemented already in
the [makesite.py](makesite.py). For a simple website or blog, this
should be sufficient. If you need a more sophisticated template engine
such as [Jinja2](http://jinja.pocoo.org/) or
[Cheetah](https://pythonhosted.org/Cheetah/), you need to modify
[makesite.py](makesite.py) to add support for it.
Content
-------
In this project, the content files are located in the [content
directory](content). Most of the content files are written in HTML.
However, the content files for the blog named [blog](content/blog) are
written in Markdown.
The notion of headers in the content files is supported by
[makesite.py](makesite.py). Each content file may begin with one or more
consecutive HTML comments that contain headers. Each header has the
following syntax:
<!-- <key>: <value> -->
Any whitespace before, after, and around the `<!--`, `<key>`, `:`,
`<value>`, and `-->` tokens are ignored. Here are some example headers:
<!-- title: About -->
<!-- subtitle: Lorem Ipsum -->
<!-- author: Admin -->
It looks for the headers at the top of every content file. As soon as
some non-header text is encountered, the rest of the content from that
point is not checked for headers.
By default, placeholders in content files are not populated during
rendering. This behaviour is chosen so that you can write content freely
without having to worry about makesite interfering with the content,
i.e., you can write something like `{{ title }}` in the content and
makesite would leave it intact by default.
However if you do want to populate the placeholders in a content file,
you need to specify a parameter named `render` with value of `yes`. This
can be done in two ways:
- Specify the parameter in a header in the content file in the
following manner:
<!-- render: yes -->
- Specify the parameter as a keyword argument in `make_pages` call.
For example:
blog_posts = make_pages('content/blog/*.md',
'_site/blog/{{ slug }}/index.html',
post_layout, blog='blog', render='yes',
**params)
Credits
-------
Thanks to:
- [Susam Pal](https://github.com/susam) for the initial documentation
and the initial unit tests.
- [Keith Gaughan](https://github.com/kgaughan) for an improved
single-pass rendering of templates.
License
-------
This is free and open source software. You can use, copy, modify,
merge, publish, distribute, sublicense, and/or sell copies of it,
under the terms of the [MIT License](LICENSE.md).
This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
express or implied. See the [MIT License](LICENSE.md) for details.
Support
-------
To report bugs, suggest improvements, or ask questions, please visit
<https://github.com/sunainapai/makesite/issues>.

@ -0,0 +1,28 @@
<!-- title: Lorem Ipsum -->
<!-- subtitle: Dolor Sit -->
<h1>Lorem Ipsum</h1>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc nibh
tellus, vehicula ut maximus sed, fringilla a justo. Nunc vitae efficitur
nisl. Ut sapien erat, pretium et commodo nec, rutrum bibendum magna. Sed
ut massa massa. Etiam euismod neque lacus, id tincidunt risus iaculis a.
Aliquam porta venenatis bibendum. Nam id varius nulla. Sed vitae purus
ac odio ornare vestibulum vitae tempor arcu. Nunc non venenatis purus.
Duis a augue at nulla congue egestas. Morbi mattis felis sit amet tortor
euismod, fringilla viverra est elementum.
</p>
<p>
Suspendisse vestibulum sed massa eu tincidunt. Pellentesque cursus, nisl
at gravida suscipit, odio quam placerat mi, in iaculis nunc risus eu
sapien. Suspendisse potenti. Nullam fermentum, tellus vel faucibus
dictum, arcu ante rutrum nisi, ut iaculis eros felis a lectus. Etiam vel
maximus nulla, sed mattis lectus. Aliquam commodo est massa, at
vestibulum diam commodo vehicula. Nullam et tristique tortor. Praesent
luctus, leo id mattis mattis, ex dui dapibus dolor, nec ultrices turpis
nibh in sem. In efficitur, velit ut bibendum interdum, libero turpis
mattis odio, non pharetra metus leo nec arcu. Maecenas auctor laoreet
maximus. Donec metus massa, scelerisque a lacinia et, viverra eget
metus. Aenean vitae tellus vehicula, mattis metus in, facilisis purus.
In purus erat, fringilla ut diam et, convallis convallis nunc. Morbi
sagittis interdum ipsum sit amet fringilla.
</p>

@ -0,0 +1,23 @@
<!-- title: About -->
<h1>About</h1>
<p>
Quisque quam nisl, egestas nec convallis vitae, fringilla nec mauris.
Sed et cursus lacus, a pharetra ex. Pellentesque rhoncus malesuada elit
at sodales. In ut elit lectus. Phasellus et hendrerit odio, ac hendrerit
ante. Pellentesque habitant morbi tristique senectus et netus et
malesuada fames ac turpis egestas. Quisque sem nibh, auctor vel dictum
eu, pharetra sit amet nunc. Integer suscipit suscipit dapibus.
Suspendisse vulputate sed mauris eget tempus. Etiam rhoncus, leo nec
cursus elementum, massa lorem fermentum nisi, non convallis nisl dolor
vel ipsum.
</p>
<p>
Aliquam imperdiet vel purus sed facilisis. Mauris condimentum vel nulla
ac tempor. In non venenatis arcu. Nam in sapien purus. Suspendisse
faucibus, erat et fringilla vestibulum, ligula nisi porta odio, ut
tristique dui ante eu nisi. Mauris vitae vulputate lorem. Proin tortor
nisl, vehicula sed justo sed, volutpat bibendum purus. Phasellus luctus
fringilla augue ac sodales. Aenean ac nisi sit amet neque pulvinar
tincidunt ut nec ipsum. Aliquam purus tellus, dignissim a augue
placerat, aliquet semper turpis. Fusce id lacinia quam, vel porta quam.
</p>

@ -0,0 +1,10 @@
---
layout: post
title: Premier billet
category: Humeur
---
Bien que je navigue quotidiennement sur la Toile depuis des années je n'avais
jamais envisagé de démarrer un blog. <!-- more --> Mais la récession m'ayant donné un coup
de pouce, je devrais avoir du temps ; aussi j'ai ouvert cet espace sur un coup
de tête. Il ne me reste plus qu'à définir ce que je veux en faire ;-)

@ -0,0 +1,40 @@
---
layout: post
title: Mobilité quand tu nous tiens
category: Mobilité
---
Poussé par un engouement certain pour les netbooks et une lecture enthousiaste
de l'actualité de ce marché (merci [Blogeee](http://www.blogeee.net/) pour la
qualité de vos articles) je me suis lancé et j'ai acheté un Asus 1000HE blanc :
très très bel objet.... Maryse ;-) <!-- more --> Il est très bien fini, le touchpad est
le plus agréable que j'ai pu tester sur un portable, le clavier est
suffisamment espacé (j'ai d'ailleurs retrouvé ma vitesse de frappe habituelle
sans problème) et il est agréable à la frappe. Bref je n'ai que des
compliments sur la qualité du matériel.
Il me restait à valider si je pourrais en avoir une utilisation polyvalente et
ne pas être bloqué par la petite taille d'écran ou de faibles performances.
Hé bien après deux semaines d'utilisation, je suis toujours enthousiaste :-)
L'autonomie annoncée tient ses promesses : plus de 5 heures 30 à fond les
manettes et c'est la première fois que j'utilise réellement un portable en
nomade toute une journée sans loucher sur l'indicateur de batterie. Du coup,
cela booste son utilisation, on l'emmène un peu partout car il est léger et
autonome.
C'est vrai qu'on scrolle beaucoup dès qu'il faut lire des PDF, des docs
OpenOffice ou naviguer sur Internet (merci Firefox pour le plein écran avec F11
cela arrange la sauce) mais c'est supportable. Ma première impulsion a été de
virer Windows XP et d'installer Ubuntu Netbook Remix et c'est un vrai bonheur.
L'interface a été bien pensée, le bureau devient un méga-lanceur de toutes
les applications regroupées par catégorie. C'est beau, bien pensé et sous le
capot c'est mon système fétiche. Néanmoins, à refaire je conserverais XP et
je partirais sur un dual-boot. Il y a suffisamment de disque pour se le
permettre et on a de temps en temps besoin d'un Windows pour des applications
spécifiques (upgrader un TomTom par exemple). Je reverrais cela dans la durée.
Mais pour l'instant mon Ubuntu est pleinement opérationnel, bien configuré et
toutes les fonctions de l'asus sont correctement gérées. J'ai même installé
une JVM et Eclipse pour voir ce que cela pouvait donner sur ce genre de machine :
ben c'est pas pire qu'avec un Celeron 2 années en arrière :-)
Que du bonheur on vous dit :-)

@ -0,0 +1,9 @@
---
layout: post
title: Karmic Koala
category: GNU/Linux
---
J-1 avant la sortie de [Ubuntu 9.10](http://www.ubuntu.com/). Comme beaucoup de
monde je l'attends avec impatience pour ses nouveautés et pour résoudre
quelques problèmes de la 9.04.

@ -0,0 +1,23 @@
---
layout: post
title: Karmic est dans la place
category: GNU/Linux
---
J'ai installé Karmic Koala Desktop 64 bits sur mon Toshiba Portégé M800 en
dual-boot avec Vista 32 bits. <!-- more --> J'ai d'abord restauré le MBR avec le "Vista
Recovery Disk'" afin de bénéficier de l'installation de Grub 2. Puis j'ai
supprimé ma partition ext3 et j'ai créé une nouvelle partition ext4 pour
Karmic.
L'installation n'a pas posé de problème. Par contre, le démarrage prenait
plus d'une minute et le réseau ne fonctionnait pas : ni le port réseau ni le
Wifi ne sont reconnus. C'est d'autant plus bizarre que tout fonctionnait avec la
9.04. Heureusement la communauté Ubuntu est large et très active : le
problème vient du kernel 2.6.31-14 et d'une incompatibilité avec
[ACPI](http://fr.wikipedia.org/wiki/ACPI) ; une modification des paramètres de
boot dans Grub (rajout de acpi=off) contourne le problème : ça boote en moins
de 30 secondes et le réseau fonctionne. Le revers de la médaille est la perte
de la gestion de l'énergie ; donc aucun indicateur du niveau de la batterie.
C'est embêtant pour un laptop ;-) Mais je suis sûr qu'une mise à jour rapide
du kernel va résoudre le problème.

@ -0,0 +1,19 @@
---
layout: post
title: Ubuntu 9.10 Kernel
category: GNU/Linux
---
L'incompatibilité du kernel 2.6.31-14 avec ACPI est un problème connu depuis
août mais sa résolution n'a pas pu être intégrée à la version finale de
Ubuntu 9.10. <!-- more --> Le bug peut-être suivi sur [https://bugs.launchpad.net/ubuntu/+sou
rce/linux/+bug/418933](https://bugs.launchpad.net/ubuntu/+source/linux/+bug/4189
33)
Une solution éprouvée consiste à revenir un peu en arrière et installer le
kernel 2.6.31-12 disponible ici : [http://people.canonical.com/~apw/lp386468-kar
mic/](http://people.canonical.com/%7Eapw/lp386468-karmic/).
C'est ce que j'ai fait : j'ai installé la version 64 bits et cela résoud tous
mes soucis : la gestion de l'énergie est de retour (en enlevant le param
acpi=off de Grub bien sûr) et le réseau fonctionne.

@ -0,0 +1,9 @@
---
layout: post
title: Mon bureau
category: GNU/Linux
---
Juste pour le fun, un snapshot de mon bureau.<!-- more -->
![Mon bureau](/images/00x/mydesktop.jpg)

@ -0,0 +1,42 @@
---
layout: post
title: SFR 3G et Ubuntu 9.10 Karmic
categories: GNU/Linux Mobilité
---
J'ai une clef 3G SFR obtenue pour 1 euro grâce au Pacte SFR (merci à eux) et
j'ai voulu valider qu'elle pouvait fonctionner avec Ubuntu pour le jour où ce
serait nécessaire. <!-- more --> J'ai donc fait le tour de Google et sélectionné parmi ce
qui a été discuté par beaucoup de gens compétents ayant fait la manip avec
des versions précédentes ou d'autres distrib les bonnes étapes pour Karmic.
D'abord il faut installer le paquet usb-modeswitch fourni dans les dépôts
standards (version actuelle 1.0.2-1) :
``` shell
sudo apt-get install usb-modeswitch
```
Ensuite, on branche la clef 3G et on constate qu'elle monte comme un
périphérique de stockage et non pas comme un périphérique de communication.
C'est là  que la usb-modeswitch intervient... Cette commande doit être
lancée à chaque branchement de la clef :
``` shell
sudo usb_modeswitch --default-vendor 0x19d2 --default-product 0x2000
--target-vendor 0X19d2 --target-product 0x0052 -s 8 --message-endpoint 0x01
--message-content 55534243123456782000000080000c85010101180101010101000000000000
```
On peut créer notre connexion mobile à large bande en n'oubliant pas
spécifier le point d'accès slsfr au lieu de websfr et de spécifier
manuellement le DNS 172.20.2.39.
Sur ma configuration c'est suffisant pour se connecter sur le réseau 3G de SFR :-)
Voici les threads du forum Ubuntu où j'ai pioché les infos :
- [http://forum.ubuntu-fr.org/viewtopic.php?id=316220](http://forum.ubuntu-
fr.org/viewtopic.php?id=316220)
- [http://forum.ubuntu-fr.org/viewtopic.php?id=193486](http://forum.ubuntu-
fr.org/viewtopic.php?id=193486)

@ -0,0 +1,26 @@
---
layout: post
title: Voix sur IP avec SIP
categories: Mobilité
---
J'utilise Skype occasionnellement depuis 2 ans pour des appels de PC à PC mais
aussi de PC à téléphone fixe ainsi qu'en mode conférence et bon jour...
mauvais jour ça marche pas mal.<!-- more -->
Néanmoins j'ai eu envie de tester le standard SIP et j'ai choisi l'opérateur
IPPI. J'ai opté pour une formule sans abonnement avec un crédit que je
recharge au fur et à mesure des besoins par Paypal. Le processus d'inscription
est limpide et l'interface du site très sympathique à mon goût. Dans la même
veine, la page "Mon compte" est très claire et rappelle la configuration, les
appels reçus et passés, le crédit restant et j'en passe.
En une petite heure, j'avais créé mon compte, configuré le client SIP de mon téléphone Nokia E61i, configuré le
client Ekiga sous Ubuntu et testé les appels dans les 2 sens en me référant
essentiellement à la documentation fournie sur le site IPPI.
Bilan : concernant la qualité, les coupures et tout ce qui fait le sel de la
voix sur IP il me faudra quelques semaines de tests pour me faire une opinion
mais les premiers tests sont très concluants. J'ai beaucoup apprécié la
présentation du numéro quand j'appelle, c'est quelque chose qui n'existe pas
avec Skype (sauf erreur de ma part).

@ -0,0 +1,79 @@
---
layout: post
title: Nouvelle année, nouvelle distrib
category: Archlinux
---
Comme j'ai toujours beaucoup de temps libre, je l'ai passé sur la planète
Linux ces dernières semaines<!-- more --> : quelques révisions de base, des lectures de
blogs (issus de [Planet Libre](http://www.planet-libre.org/) en autre).
La lecture de l'excellent blog de [Frédéric
Bezier](http://frederic.bezies.free.fr/blog) et de certains articles tendance
comme " [Ubuntu which directions are you
heading?](http://www.dedoimedo.com/computers/ubuntu-direction.html) " m'ont
donné envie de m'orienter vers une "rolling release" distrib pour :
* rajouter du fun : Ubuntu marche trop bien "out of the box"
* mettre les mains dans le cambouis
* vérifier sur la durée si le concept est valide : on reste à jour et on ne
réinstalle pas tous les 6 mois. Pour ce dernier point il est un peu tôt pour
répondre :-)
Ma machine est un portable Toshiba Portégé M800, core 2 Duo, chipset vidéo et
Wifi signés Intel, disque de 250 Go en dual boot avec Windows 7.
![Gentoo](https://assets.gentoo.org/tyrian/site-logo.svg)
J'ai commencé une install de Gentoo sous VirtuaBox sous
Ubuntu pendant 1/2 journée pour appréhender les concepts puis je me suis
lancé : suppression des partitions et installation grandeur nature. En 2
grosses journées j'avais un environnement Gnome fonctionnel et une grande
fierté (c'est moi qui l'ai compilé).
Ce que j'ai apprécié :
* ça fait cliché forcément mais... c'est la force de la Gentoo : les options de
compilations fines pour mon processeur, la richesse des fameuses options USE
pour désactiver certaines fonctionalités / dépendances des paquets.
* me traîner dans le cambouis : ça m'a permis de me remettre à jour sur la
config d'un serveur X post-an 2000 (ben oui j'avais pas fait ça depuis des
années), d'un serveur Pulse Audio, de recompiler 10 fois mon kernel pour
affiner / rajouter des options.
Ce que je n'ai pas trouvé génial :
* là aussi c'est cliché : les temps de compilation (attends tu vas voir,
j'installes... attends reviens ça compile).
* la fraîcheur relative des paquets : bien sûr il y a les overlays, ces extra-
repository mais ça mène souvent à des conflits.
Je pense que la gentoo est géniale pour faire vivre une install stable
(serveur ou desktop) mais pas adaptée à un forcené comme moi qui installe un
truc nouveau tous les jours et le vire 3 jours après.
![Arch](http://www.archlinux.fr/commun/images/titlelogo.png)
J'ai donc basculé après quelques jours de Gentoo sur
Archlinux : toujours le concept de la "rolling release" qu'on n'installe qu'une
fois mais avec paquets binaires. De plus la communauté anglophone et française
semble très active.
Ce que j'ai apprécié :
* la facilité d'installation : 1 petite journée pour installer, rapatrier mes
données, et configurer le système au poil. Tout fonctionne : virtual box,
bluetooth, dropbox...
* la grande cohérence de l'environnement Gnome installé (j'avais eu des soucis
de polkit avec la Gentoo)
* les gestionnaires de paquets ont des noms rigolos (pacman et yaourt) mais g
èrent-ils vraiment bien les dépendances et la cohérence du système. Et bien
pour l'instant la réponse est OUI.
* la gestion très fine des dépendances : c'est la 1ère distrib ou j'installe
tout gnome et je peux ensuite désinstaller epiphany / evolution sans tout
casser.
* la vitesse de démarrage : très similaire à Ubuntu.
Ce que je n'ai pas trouvé génial :
* pour le moment je suis sous le charme :-)

@ -0,0 +1,8 @@
---
layout: post
title: Tchao Mano
category: Humeur
---
Mano Solo nous a quitté ! Cela me touche beaucoup c'était un artiste que
j'admirais pour son courage et dont j'aimais la musique.

@ -0,0 +1,47 @@
---
layout: post
title: Transports en commun et développement personnel
category: Mobilité
---
La semaine prochaine sera un gros changement de rythme, je commence un nouveau
job à Marseille. Et, chose qui ne m'est pas arrivé depuis mes années
d'étudiant, je n'utiliserais pas ma voiture mais le train... <!-- more --> parce que c'est
enfin possible. Je m'en réjouis car après des années à passer le trajet en
écoutant seulement la radio, j'ai enfin l'opportunité de mettre ce temps à
profit au lieu de le subir. Je pense flux RSS, Podcasts et eBooks.
Pour les flux RSS, c'est rôdé depuis longtemps, j'ai un peu étoffé mes
abonnements et je consommerais depuis mon Nokia E61i avec Opera Mini / Google
Reader.
Pour la musique et les podcasts j'ai d'abord eu le stigmate du consommateur en
période de soldes : j'ai envisagé investir dans un lecteur mp3/mp4. A la
réflexion, ce sont des frais en plus, un 2ème appareil à recharger le soir,
une synchronisation avec l'ordinateur quotidienne, un certain nombre
d'inconvénients. J'ai alors regardé ce Nokia E61i sous Symbian 3 acheté
d'occasion l'année dernière : il n'est certes pas tendance au regard de la
marée iPhone / Android qui déferle, mais il répond à 100% de mes besoins :
- gérer les couriels de mon compte Gmail en Imap (avec Profimail qui fournit un
logiciel de grande qualité pour un prix raisonnable),
- naviguer sur des sites pas trop complexes (merci Opera Mini ),
- envoyer des SMS avec un vrai clavier AZERTY.
Et je me suis dit que je ne l'avais pas encore poussé dans ses retranchements.
Après quelques heures de recherche, j'ai rajouté :
* un excellent lecteur audio sous licence GPL qui lit les formats mp3 et ogg :
OggPlay
* une grande découverte pour moi malgré que ce soit sorti depuis un bout de
temps : un vrai logiciel de gestion de podcasts, Nokia Podcasting, capable de
gérer les abonnements et les téléchargements par Wifi de manière autonome..
un vrai bijou.
* le classique des lecteurs d'eBooks MobiReader qui fait bien son travail : on
peut jouer sur la taille des polices, lire en plein écran (important vu sa
taille modeste). Ce que je cherche maintenant c'est une manière de convertir
quelques PDF au format LRC depuis GNU/Linux bien sûr :-) si quelqu'un a une
bonne technique merci de me laisser un commentaire :-)
Je pense être paré, il me reste à alimenter mes nouveaux logiciels avec du
bon contenu pour transformer ces temps de transport en temps profitable.

@ -0,0 +1,29 @@
---
layout: post
title: Grub Gfx … j'aurais aimé être un artiste
category: GNU/Linux
---
Je ne suis pas un graphiste, loin de là et me familiariser avec The Gimp et Inkscape fait partie de ma TODO
liste. Un exercice pratique a consisté à personnaliser un splash screen pour
Grub. <!-- more --> J'ai d'abord installé [grub-gfx](http://wiki.archlinux.org/index.php
/Grub-gfx) puis j'ai récupéré ce splash screen minimaliste et sympathique sur
le site [schultz-net](http://www.schultz-net.dk/grub.html).
![Grub](http://www.schultz-net.dk/images/grub/black.gif)
Le but que je me suis fixé est d'ajouter le logo Toshiba en bas à droite. Je suis parti du [logo
Toshiba](http://fr.wikipedia.org/wiki/Fichier:Toshiba_logo.svg) disponible au
format [SVG](http://fr.wikipedia.org/wiki/Svg) sur Wikipedia. Je l'ai chargé
dans Inkscape et je l'ai exporté en bitmap à la taille désirée. Puis j'ai
fait mon assemblage sous Gimp. Enfin j'ai réduit le nombre de couleurs à 14
comme l'impose Gfx par le menu "Image" / "Mode" / "Couleurs indexées" avant de
sauvegarder en XPM.
![My Grub image](/images/01x/my_grub_image.jpg)
Rien de bien sorcier mais je pars de très loin sur le sujet "graphisme"  :-)
Je suis assez content du résultat et surtout je me suis bien amusé.
Pour les possesseurs d'un Toshiba interessés par ce splash screen il est
téléchargeable [ici](/documents/my_grub_image.xpm).

@ -0,0 +1,29 @@
---
layout: post
title: Les trajets, premier bilan
category: Mobilité
---
Après une semaine à utiliser le train pour mes trajets professionnels il est
temps de faire un premier bilan.<!-- more -->
Sur le plan personnel, c'est très agréable ; j'enchaîne des bonnes journées
mais je ne ressens pas la fatigue nerveuse liée aux embouteillages marseillais
; je pratique la marche rapide (pour attraper les correspondances) et mon corps
me dit merci :-)
Sur le plan technique, j'ai fait le bon choix. Un netbook aurait été trop
encombrant et pas toujours utilisable ; un lecteur MP4 n'aurait pas fait plus
que mon vieux Nokia E61i. Le matin, j'écoute plutôt les podcasts... en fin de
parcours, je gère mes emails perso. Le soir, je fais un premier tri des news
grâce à Google Reader, j'active le suivi pour les articles qui vont
déclencher une action (bookmark delicious, recherche approfondie) plus tard
dans la soirée et je lis un peu de l'eBook.
J'ai dû renoncer à Nokia Podcasting, c'est fonctionnel mais la mise à jour
par Wifi prend trop de temps et vide la batterie alors qu'un soir sur deux je
dois plutôt la recharger. Je suis donc revenu à une solution plus classique de
synchronisation avec mon laptop par le biais de [gPodder](http://gpodder.org/)
sur ma distrib Archlinux. Gpodder peut mémoriser la destination de la synchro,
en l'occurrence la carte SD du téléphone quand je connecte par USB. Ca ne
prend donc que quelques secondes, rien de pénible.

@ -0,0 +1,19 @@
---
layout: post
title: Grosse mise à jour de ArchLinux
category: Archlinux
---
Je viens de faire la plus grosse mise à jour de
[ArchLinux](http://archlinux.fr/) depuis ma récente installation : 105 paquets<!-- more -->
et pas des moindres, puisqu'on trouve le serveur Xorg, une partie de Gnome,
beaucoup de librairies et de daemons, le dernier Firefox.
Ca s'est téléchargé (476 Mo compressés) et installé tranquillement ; j'ai
redémarré et tout fonctionne au poil. Je suis conforté dans le choix d'une
rolling-release qui permet de rester à jour rapidement, sans attendre un
changement de version semestrielle. Ce n'est pas un choix adéquat pour tout un
chacun car il faut aimer metttre les mains dans le cambouis de temps en temps,
ce n'est pas adapté au monde de l'entreprise où l'on veut maîtriser les mise
à jour mais ça reste un terrain de jeu fabuleux pour les linuxiens qui ne
veulent pas du clef en main.

@ -0,0 +1,29 @@
---
layout: post
title: Clonage NTFS
category: GNU/Linux
---
La vie est pleine d'imprévus :-) Je change de job après un mois et je vais
rebasculer sur Ms Windows du moins professionnellement (sic!). Je vais utiliser
pour un temps mon laptop Toshiba avec son Windows 7 en dual boot avec ArchLinux.<!-- more -->
Je ne mets plus les pieds côté Ms Windows depuis 6 mois excepté pour jouer à
quelques [FPS](http://fr.wikipedia.org/wiki/First-person_shooter) avec mon fils.
Mais il y aura un certain nombre de logiciels d'entreprise à installer Je me
suis donc posé le problème de faire une sauvegarde de ma partition Windows 7
en vue de la restaurer dans quelques semaines dans son état initial.
Mon premier réflexe à été celui d'un Ouinedozien de base,comme penserait
[Eglantine](http://eelo.lgm.free.fr/) : j'ai appelé un copain IT et je lui ai
demandé quelle version de Norton Ghost gère Windows 7. Mon second réflexe a
été de chercher des alternatives gratuites sur Google. J'ai repéré deux
logiciels freeware pour Windows qui nécessitaient d'utiliser bartPE pour créer
un CD-Room bootable. Pourquoi pas même si c'est pas super simple... puis j'ai
orienté mes recherches sur des alternatives du monde Libre. J'ai quand même un
Linux en dual boot cela devrait faciliter les choses.
Quelques clics plus tard je tombais sur cet [article](http://guides-
info.org/linux/admin/cloner.php) détaillant les méthodes d'archivage / clonage
/ restauration depuis Linux. NTFSClone semble tout indiqué pour ce que je veux
faire et il fait partie du repository Extra d'ArchLinux. A l'heure où j'écris
ce billet, ntfsclone sauvegarde ma partition NTFS sur un disque externe USB.

@ -0,0 +1,31 @@
---
layout: post
title: Apple Store, London
category: Humeur
---
J'ai l'opportunité de  découvrir Londres ce week-end après une semaine où
le tourisme s'est limité à quelques pubs et quelques restaurants. <!-- more -->J'ai bien
sûr une liste de "famous places" à découvrir (Picadilly, Westminster,
Buckingham, London Bridge) et une destination plus "computing oriented" : l'
[Apple Store de Regent Street](http://www.apple.com/uk/retail/regentstreet/).
En effet, je suis un big fan de Linux mais j'ai aussi un iMac qui est la machine
familiale pour tous les aspects multimédia. Excepté iTunes que je trouve
complexe, j'adore iPhoto et iMovie... mon utilisation personnelle de Mac OSX se
cantonne d'ailleurs principalement à ces deux applications... je sais on peut
faire beaucoup plus ;-) Mais c'est la machine chouchou du reste de la maison,
simple à utiliser, jamais de surprise du style *"Attends je recompile la
dernière version du lecteur DVD et on pourra mettre le film"*.
Bref, Apple fait de beaux produits et je  voulais voir ce temple dédié. Je
n'ai pas été déçu plutôt estomaqué même : 2 niveaux d'une grande beauté
où le verre prédomine, des dizaines de mac à disposition, et des clients qui
font la queue pour les essayer, des vendeurs qui butinent un peu partout pour
dispenser des explications. Tout un côté est dédié aux tests des casques de
qualité et aux stations d'accueil pour iPods et iPhones et il est aussi pris
d'assaut. Au fond un auditoire suivait la démonstration sur grand écran du
fonctionnement de base de Snow Leopard.
On est loin du logiciel libre mais voir l'emphase de toute une communauté de
passionnés ça fait plaisir à voir.

@ -0,0 +1,32 @@
---
layout: post
title: Ubuntu est au détour du chemin
category: GNU/Linux
---
Aujourd'hui grande victoire : je pensais ne pas couper à un retour sous XP
professionnellement mais deux voies se sont ouvertes<!-- more --> :
- Virtualiser GNU/Linux dans Ms Windows
- Virtualiser Ms Windows dans GNU/Linux
La solution 1 est la la plus prisée : Ms Windows est l'environnement de
développement et de déploiement et GNU/Linux est une autre cible de
déploiement.
La solution 2 est moins répandue car il faut trouver des alternatives /
solutions à certains logiciels propriétaires obligatoires imposés. Je suis
néanmoins parti dans cette voie car la vie n'est rien sans le *fun* ;-)
Au niveau du choix, deux distributions étaient plus évidentes : **Fedora** et
**Ubuntu.** Car elles reconnaissent le matériel *out-of-the-box*,
l'environnement est pré-configuré et parce que les problèmes cités sont
connus pour avoir été résolus. C'est à dire que que c'est probablement
possible sur d'autres distributions mais vu le temps qui m'est imparti, il vaut
mieux tirer parti de l'expérience d'une communauté. J'ai donc choisi
**Ubuntu** car j'ai pratiqué quelques mois.
Il me faudra résoudre sous quelques jours le support de Juniper Connect sous
Linux 64 bits, l'émulation de XP 64 bits et la connexion à messagerie
instantanée d'entreprise de Microsoft (mais non pas MSN... l'autre... la
sérieuse). Cela sera l'occasion d'un autre billet.

@ -0,0 +1,62 @@
---
layout: post
title: Renaissance de PC et switch d'utilisatrice
category: GNU/Linux
---
J'ai été amené récemment à dépanner ma voisine qui avait des problèmes
avec du vieux matériel : un Pentium II à 266 Mhz avec 256 Mo de mémoire et 40
Go de disque dur et une version de Windows Me. <!-- more -->Certains sites Web ne
s'affichaient pas correctement, ma voisine désirait configurer Outlook pour
s'abstenir du WebMail et se plaignait de ne pouvoir installer aucun nouveau
logiciel car la version minimale supportée est XP. Nous avons effectué les
mises à jour du système et il y en avait un certain nombre, concernant
essentiellement Internet Explorer, ce qui est tout à l'honneur de Microsoft.
Mais aucune chance d'installer un navigateur plus récent qu'IE 6 sur un
système obsolète depuis longtemps. Nous avons essayé d'installer Firefox mais
pas de version pour Windows Me... système en fin de vie, plus de nouveaux
logiciels. Nous étions dans l'impasse !
J'ai fait une présentation de ma distribution Arch Linux sur mon portable en
apportant toutes les réserves possibles : une version existait forcément pour
son matériel mais graphiquement ce serait différent... probablement moins
beau. Et il faudrait s'adapter mais on retrouverait les mêmes concepts et on
pourrait avoir un navigateur aux normes actuelles pour surfer sur les sites
actuels en sécurité, un logiciel de mail et des équivalents aux applications
bureautiques. C'est la première fois à vrai dire que je prêche GNU/Linux pour
quelqu'un qui n'a jamais connu que Ms Windows ; c'est un pari risqué mais je
sentais beaucoup de curiosité de la part de mon interlocutrice, ses questions
étaient pertinentes et elle m'avait prouvé par le passé qu'elle abordait les
problèmes avec son ordinateur de manière très rationnelle. Nous nous sommes
donc lancés ; nous avons fait toutes les sauvegardes de données nécessaires
et j'ai embarqué la machine pour le week-end.
Néanmoins, trouver une distribution francisée qui fonctionne sur ce genre de
matériel n'est pas une mince affaire. Bon nombre de versions légères de
distributions majeures s'avèrent ne plus fonctionner sur un PII : enfin elles
tournent mais ce n'est pas exploitable... trop lent. Après plusieurs tests
infructueux je suis tombé sur la pépite : [Slitaz](http://www.slitaz.org/)
Une distribution suisse super légère mais sans compromis au niveau de la
couverture des applications fournies. Le logiciel de mail
[Sylpheed](http://sylpheed.sraoss.jp/en/) ne dépayse pas et il gère le
protocol IMAP. Pour la lecture des documents Word,
[Abiword](http://www.abisource.com/) est parfait, et
[GNUmeric](http://projects.gnome.org/gnumeric/) a pu relire sans problèmes les
documents Excel 97 sauvegardés. En renfort et au cas où, j'ai installé
[OpenOffice](http://fr.openoffice.org/) mais le lancement est vraiment lent. Il
sera utilisé occasionnellement pour visualiser les documents PowerPoint
humoristiques envoyées par les copines :-) Pour le Web, Slitaz est fourni avec
une mouture 3.x de Firefox ; c'est un peu lent au démarrage mais cela reste
très correct.
Le premier ressenti de ma voisine au lancement fut "Oh c'est beau !". Et c'est
vrai que la distrib a un look sympa et cohérent. Et puis quand on passe de
Windows Me à Slitaz, on a gagné 10 ans d'ergonomie sans changer de matériel.
Quand à la machine c'est une nouvelle naissance, elle démarre vite, toutes les
applications se lancent sans pop-up d'erreur. Après 1 heure de revue du
système j'ai laissé ma voisine découvrir par elle-même. Depuis, j'ai eu
quelques courriels de questions auxquelles il a été aisé de répondre... tout
fonctionne de son point de vue à elle. Nous referons un point dans quelques
temps et nous en profiterons pour finaliser certains détails : gravure,
installation des pilotes pour une imprimante HP Deskjet.

@ -0,0 +1,25 @@
---
layout: post
title: Renaissance et longévité
category: GNU/Linux
---
Presque un mois plus tard nous avons fait un bilan de l'utilisation de Slitaz.
Le ressenti de l'utilisateur est bon<!-- more -->, elle trouve la machine plus réactive,
effectue toutes les tâches habituelles : emails, bureautique, musique. Je
m'attelle à l'installation de l'imprimante HP Deskjet 610 : installation de
CUPS. Je fais un  détour par
[google](http://forum.slitaz.org/index.php/discussion/comment/1986/) car le port
LPT1 n'est pas détecté par défaut. Et je remplace la version de PDF Viewer
par celle qui gère l'impression (Slitaz propose les deux paquets). L'impression
depuis AbiWord et Open Office fonctionne sans surprise. La gestion de
l'impression n'est pas présente dans le paquet Firefox pour alléger le binaire
je présume. Qu'à cela ne tienne Opera sera la solution de repli pour les fois
où elle désirera imprimer des pages Web. Le bilan est très positif.
[Slitaz](http://www.slitaz.org/) est une belle distribution basée sur LXDE,
très légère avec un choix de paquets en accord avec l'objectif de performance
mais sans concession à l'ergonomie ; elle redonne une seconde jeunesse aux
vénérables PC. Elle est passée en version 3.0 récemment. Les derniers
articles que j'ai pu lire la classent régulièrement dans le top 3 des
distributions GNU/Linux légères.

@ -0,0 +1,27 @@
---
layout: post
title: Cygwin et Console, un duo de choc
category: GNU/Linux
---
Pour ceux qui ont besoin d'un shell avancé ou moins polémiquement parlant ;-)
qui passent la journée à se connecter sur des machines UNIX <!-- more -->depuis leur
machine de développement, on finit par se mélanger les pinceaux entre dir et
ls, type et cat ou find et grep. Vous me direz que je n'ai qu'à coder sur Linux
ou sur MacOS ;-) mais on n'a pas toujours le choix dans le milieu professionnel.
Alors la solution passe par l'excellent projet
[Cygwin](http://fr.wikipedia.org/wiki/Cygwin) qui apporte
une implémentation POSIX pour Ms Windows permettant d'installer tous les
outils que nous aimons utiliser. Ils est même possible d'installer un serveur
X ; néanmoins je ne suis pas allé jusque là, un mode console me suffit.
Par contre, le Cygwin/Shell ne permet pas d'ouvrir d'onglets et on est vite
submergé de consoles. Une solution consiste à installer le projet
[Console2](http://sourceforge.net/projects/console/) lui aussi sous license GPL
qui apporte le support des onglets à Ms Windows.  Les programmeurs ont eu
du génie en offrant la possibilité de configurer le shell à lancer par
Console : un rapide remplacement par cygwin.bat et on a une gestion par onglets
de Cygwin/Shell... et beaucoup plus que cela une gestion uniforme des consoles
locales ou distantes par SSH.
Un bon point pour la productivité !

@ -0,0 +1,43 @@
---
layout: post
title: Nouvel hébergeur
category: Hébergement
---
Bien que je ne sois pas très prolixe, j'aime beaucoup ce blog, c'est un espace
qui m'aide à fixer mes idées, à détailler certaines manips et je l'espère,
à communiquer mon engouement pour la Technologie, le logiciel Libre et
GNU/Linux en particulier. <!-- more -->Au départ, je ne voulais pas y consacrer trop
d'énergie et pouvoir tout stopper quand l'engouement serait passé ; c'est
pourquoi [Blogger](http://www.blogger.com) était une bonne solution clef en
main : pas d'investissement en temps ou en argent. Mais l'engouement n'est pas
passé et je me suis encore plus immergé dans certains cercles qui m'ont
sensibilisé à des sujets sensibles comme la liberté des utilisateurs et le
respect de la vie privé, des sujets que je prenais plutôt à la légère
auparavant misant sur la bonne nature des hommes et des entreprises et l'idée
assez  naïve que ce Web que j'ai vu naître ne craignait rien, que
l'équilibre des puissances en jeu garantissait à jamais une indépendance et
une **L**iberté.
Mais le monde a changé comme dirait le
[Pistolero](http://fr.wikipedia.org/wiki/Le_Pistolero) et aujourd'hui des
sociétés comme [Facebook piétinent ces
libertés](http://blog.hugoroy.eu/2010/04/24/pourquoi-je-nutiliserai-plus-
facebook/) et pourraient devenir le seul Web possible demain. Il faut donc
prendre conscience et se poser la question : *à qui est-ce que je confie mes
données ?* J'ai encore une bonne dose de confiance dans Google qui ne change
pas les règles tous les 6 mois ; c'est peut-être aussi un peu de naïveté et
beaucoup d'admiration pour tout ce qu'ils ont apportés à l'Internet. L'avenir
dira si je me gourre...  En tout cas, je n'avais pas de problème avec Blogger
mais l'idée de maîtriser toute la chaîne à fait son chemin et j'étais
prêt.J'ai donc cherché... et trouvé un hébergeur 100% français :
[O2Switch](http://www.o2switch.fr/). Ce n'est pas du nationalisme forcené (pour
ceux qui me connaissent je suis loin de ça :-) )  mais ça s'inscrit dans une
logique de contrôle et de protection de ses données. La deuxième étape fût
d'installer et de configurer [WordPress](http://wordpress.org/) sur lequel
j'écris ce premier billet. Je n'ai aucune connaissance de WordPress c'est donc
un apprentissage interessant pour moi: l'import des données de Blogger s'est
bien passé, tout est en place.
Yaka comme dirait quelqu'un que je connais.

@ -0,0 +1,31 @@
---
layout: post
title: Soutenir Firefox
category: Mozilla
---
J'utilise Firefox depuis la version 0.5. Je me souviens de la version 1.5 comme
d'une victoire, voir un projet qu'on soutient humblement comme utilisateur
arriver à maturité<!-- more --> et devenir de plus en plus populaire et reconnu pour ses
qualités est très agréable. Comme beaucoup, j'ai essayé Chrome à sa sortie
fin 2008, me suis extasié sur sa rapidité puis je suis retourné vers mon
renard préféré. Depuis Chrome a mis les bouchées doubles et c'est un acteur
incontournable du monde des navigateurs. Il est tentant de faire la bascule pour
gagner un peu de vitesse. Mais ce qui est en jeu c'est peut-être l'avenir de
Firefox... lire l'excellent article de Framasoft  " [Chrome m'a
tuer"](http://www.framablog.org/index.php/post/2010/05/16/google-chrome-vs-
mozilla-firefox). Cela peut sembler alarmiste mais c'est un futur possible :-(.
Et la Fondation Mozilla ce n'est pas Google même si Chromium est open-source.
Le vrai choix des  utilisateurs de FireFox est donc le suivant : **écouter les
sirènes et basculer à Chrome pour des perfs** ou **s'accrocher à Firefox donc
militer** en acceptant de perdre un peu de confort **** mais en misant sur
l'avenir. Firefox a prouvé qu'il savait s'adapter et évoluer pour rendre le
meilleur service. Son point faible aujourd'hui est la vitesse d'exécution mais
il est certain que sa communauté travaille d'arrache-pied pour renverser la
vapeur !
En attendant, voici quelques trucs tirer le meilleur parti de Firefox 3.6 :-) :
- améliorer la vitesse en tripatouillant quelques réglages
- gagner de l'espace (quand on a  un écran  1280x800) : extension Hide MenuBar
- fusionner la barre d'addresse et la zone de recherche : extension OmniBar

@ -0,0 +1,15 @@
---
layout: post
title: Le logiciel libre, comment ça marche ?
category: Humeur
---
L'[APRIL](http://www.april.org/) a produit un fabuleux poster qui explique
simplement ce qu'est le Logiciel Libre<!-- more --> (le cycle de vie et les intervenants).
C'est un bon support pour l'expliquer aussi bien à des programmeurs qu'à des
utilisateurs. Il est fourni sous triple license [licence Art
libre](http://artlibre.org/licence/lal), [Creative Commons By
Sa](http://creativecommons.org/licenses/by-sa/2.0/fr/) et
[GFDL](http://www.gnu.org/copyleft/fdl.html) et dans différents formats.
![Logiciel libre](/images/02x/logiciel_libre_comment_ca_marche.png)

@ -0,0 +1,35 @@
---
layout: post
title: Découvrir LaTeX
category: GNU/Linux
---
Dans la série *"Apprenons quelque chose de neuf",* j'ai investi quelques heures
à me familiariser avec [LaTeX](http://fr.wikipedia.org/wiki/LaTeX).<!-- more --> J'avoue
avoir toujours été intimidé par sa complexité apparente et je ne voyais pas
l'intérêt par rapport à n'importe quel traitement de texte
[WYSIWYG](http://fr.wikipedia.org/wiki/WYSIWYG). Pratiquement, je me suis
attelé à la réécriture de mon CV : c'est un document d'une seule page, un
peu court pour tirer gros avantage du temps passé à définir la forme du
document mais intéressant pour sa complexité.
Pour apprendre la syntaxe, je suis parti de la documentation du site
[lestuteurs](http://www.tuteurs.ens.fr/logiciels/latex/) où j'ai trouvé
l'essentiel. Pour quelques problème mineurs j'ai trouvé la solution sur
[StackOverFlow](http://stackoverflow.com/) en googlant :-) Au niveau des outils
je suis resté simple : pas d'éditeur dédié à la composition LaTeX, GEdit
avec le greffon LaTeX pour lancer la compilation et la visualisation DVI / PDF
en un clic fait l'affaire. Au préalable il faut bien sûr [installer les
paquets LaTeX](http://wiki.archlinux.org/index.php/LaTeX) sous ArchLinux.
En 2 demi-journées je suis arrivé à migrer mon CV depuis OpenOffice. Le
résultat est très plaisant :
- la mise en forme est plus aérée grâce à la mise en forme au pixel près quel'on peut appliquer au document,
- la fonte par défaut est très agréable,
- la génération en PDF est parfaite.
Rajouter du contenu est rapide car la mise en forme est en place ; c'est le gros
atout de LaTeX et j'imagine facilement le temps gagné sur des rapport quand le
travail de mise en forme est effectué. Le terme *"système logiciel de
composition de documents"* prend tout son sens.

@ -0,0 +1,22 @@
---
layout: post
title: Rythme estival
category: Hébergement
---
Cela fait quelques semaines que je n'ai rien publié, la faute à une surcharge
de travail et à l'arrivée de l'été <!-- more -->qui ne donne pas tellement envie d'être
connecté en soirée ;-)
Néanmoins, à temps perdu, j'essaie de faire des petites choses intéressantes :
* installation d'une Debian Lenny virtualisée pour peaufiner l'installation s'un
serveur Postfix / Dovecot,
* authentification avec CAcert,
* enregistrement d'un nom de domaine sur CO.CC
Vous l'aurez deviné je me prépare à devenir auto-hébergeur :-)  Ce qui me
manque encore c'est une machine physique peu gourmande et économe qui pourra
rester allumé 24/24. Je m'oriente du côté des nettops mais c'est plutôt
cher. Peut-être qu'un netbook d'occasion en 7 ou 8 pouces ferait l'affaire...
En tout cas c'est très fun !

@ -0,0 +1,55 @@
---
layout: post
title: Auto-hébergement, le grand saut
category: Hébergement
---
Cela fait bien deux mois que ça me trottait en tête :-) Et bien c'est
opérationnel. <!-- more -->Si j'avais des dizaines de visites par heure ça ne tiendrait pas
la route mais ce n'est pas le cas et cela ne devrait pas se produire. Je ne fais
pas de publicité et je reste discret sur les sites autour du Libre. Ce blog est
devenu un compagnon où je peux coucher par écrit ce qui me passe dans la tête
et parler de mes dernières réalisations.
**Le matériel**
J'ai acquis sur [PriceMinister](http://www.priceminister.com/) un modeste
netbook MSI U100X basé sur un processeur Atom N270  à 1,66 Ghz avec 1 Go de
mémoire et 80 Go de disque dur. La batterie est défectueuse ce qui n'est pas
un souci pour l'utilisation en poste fixe et cela m'a servi d'argument pour
négocier le prix :D Il est pré-installé avec Suse Enterprise Linux que j'ai
remplacé par une Debian Lenny : installation minimale sans couche graphique
depuis une clef USB. Je ne m'étalerais pas sur l'install de Debian qui s'est
déroulée sans surprise. J'ai rajouté [OpenSSH](http://www.openssh.com/) pour
permettre l'administration à distance et j'ai pu placer le netbook dans son
placard... euh je veux dire son rack climatisé bien sûr ;-) Je n'ai pas
d'écho négatif sur ce genre de matériel pour une utilisation 24/24, j'espère
que ça ne lâchera pas au bout de quelques mois, je me suis dit que la faible
dissipation de chaleur de l'Atom était un atout.
**La configuration réseau**
J'ai réservé le nom de domaine madyanne.co.cc sur [CO.CC](http://www.co.cc/).
C'est gratuit pour un usage personnel. Depuis son compte CO.CC on peut définir
des alias (des enregistrements CNAME) pour faire correspondre à un sous-domaine
un autre nom DNS. C'est par ce moyen que geek.madyanne.co.cc est balancé sur le
nom [DynDNS](http://fr.wikipedia.org/wiki/DynDNS) de la SFR box. Il ne reste
plus qu'à définir les règles NAT pour ouvrir le port HTTP et le rediriger
vers le serveur Debian. Le fait de ne pas avoir d'adresse IP fixe n'est
absolument pas bloquant pour s'auto-héberger :)
**La configuration logicielle**
J'aurais pu installer le serveur Web [hyper-léger et hyper-performant à la
mode](http://nginx.org/) mais je suis resté classique avec
[Apache](http://httpd.apache.org/). L'installation de
[WordPress](http://wordpress.org/) 3.0 est simple, il ne faut pas oublier
d'installer [mySQL](http://fr.wikipedia.org/wiki/MySQL) auparavant et de créer
une base de donnée. Concernant l'import du blog je ne sais pas si je l'ai fait
dans les règles de l'art. Je suis passé par l'export en XML puis par la
fonction d'import sur le WordPress cible qui nécessite d'installer un plug-in.
Cela semble ok pour le contenu, le thème a été installé séparément. En
quelques heures on installe un serveur de blog opérationnel.
Ce qui m'a pris beaucoup plus de temps c'est l'installation de mon serveur de
mail :-) mais ce sera l'occasion d'un autre billet.

@ -0,0 +1,37 @@
---
layout: post
title: Piwik, une alternative à Google Analytics
category: Hébergement
---
[Piwik](http://piwik.org/) est une alternative crédible sous licence GPL à
Google Analytics. <!-- more -->Cerise sur le gateau, il requiert [LAMP](http://www.google.fr/
url?sa=t&source=web&cd=1&ved=0CBUQFjAA&url=http%3A%2F%2Ffr.wikipedia.org%2Fwiki%
2FLAMP&ei=U3xVTK-PL9_Q4wbZnYmnBQ&usg=AFQjCNHmQzZpoG3qGXQq9bp6HXe09cNoOA&sig2=ZbX
bao85XawqcsmE_cIWiQ) ce qui permet de l'héberger sans effort sur la même
machine que  WordPress et il s'inscrit parfaitement dans ma démarche de
contrôler l'accès à mes données. Le projet est  jeune et actif, une version
majeure 0.8 est sortie cette semaine et la version 1.0  est [planifiée en
détail](http://dev.piwik.org/trac/wiki/Piwik-Vision-Roadmap) pour le deuxième
semestre.
L'installation prend vraiment 5 minutes. On extrait l'archive à l'endroit
souhaité de son *public HTML* (/var/www pour Apache 2 sous Debian) et on se
connecte à son URL. Un installeur pas à pas va créer la base de donnée
nécessaire et recueillir en quelques écrans les informations nécessaires sur
le site à surveiller. En finalité on a quelques lignes de JSP à insérer dans
son site. Il faut un endroit stratégique ;-) partagé par toutes pages. Pour
WordPress ce sera dans le fichier footer.php sous wp-content (c'est très bien
décrit dans la documentation). Piwik est traduit en plusieurs langues dont le
français, ce qui a son importance.
A l'usage on retrouve un tableau de bord personnalisable avec des widgets pour
afficher les statistiques des visites (nombre, provenance géographique,
navigateur utilisé). Il y a tellement de possibilités que je n'ai pas encore
tout exploré. On peut créer des rapports de synthèse et depuis la version 0.8
exporter en PDF. De l'utilisation personnelle et simpliste que j'en ai, on peut
aller beaucoup plus loin dans le cadre d'une utilisation professionnelle où on
doit fournir du reporting multi-sites régulièrement.
[<img title="piwik" src="images/02x/piwik.jpg" alt="" width="448"
height="280" /> ](/images/02x/piwik.jpg)

@ -0,0 +1,68 @@
---
layout: post
title: Un peu de sécurité Apache
category: Hébergement
---
Ce matin j'ai découvert une longue liste d'erreurs 404 dans les logs suggérant
qu'on recherche activement une faille<!-- more --> :
Requests with error response codes
404 Not Found
//PMA/config/config.inc.php?p=phpinfo();: 1 Time(s)
//phpMyAdmin/config/config.inc.php?p=phpinfo();: 1 Time(s)
//phpmyadmin/config/config.inc.php?p=phpinfo();: 1 Time(s)
//pma/config/config.inc.php?p=phpinfo();: 1 Time(s)
/PMA2005/scripts/setup.php: 1 Time(s)
/admin/phpmyadmin/scripts/setup.php: 1 Time(s)
/admin/pma/scripts/setup.php: 1 Time(s)
/admin/scripts/setup.php: 1 Time(s)
/db/scripts/setup.php: 1 Time(s)
/dbadmin/scripts/setup.php: 1 Time(s)
/myadmin/scripts/setup.php: 1 Time(s)
/mysql-admin/scripts/setup.php: 1 Time(s)
/mysql/scripts/setup.php: 1 Time(s)
/mysqladmin/scripts/setup.php: 2 Time(s)
/mysqlmanager/scripts/setup.php: 1 Time(s)
/p/m/a/scripts/setup.php: 1 Time(s)
/php-my-admin/scripts/setup.php: 2 Time(s)
/php-myadmin/scripts/setup.php: 1 Time(s)
/phpMyAdmin-2.2.3/scripts/setup.php: 1 Time(s)
/phpMyAdmin-2.2.6/scripts/setup.php: 1 Time(s)
/phpMyAdmin-2.5.1/scripts/setup.php: 1 Time(s)
/phpMyAdmin-2.5.4/scripts/setup.php: 1 Time(s)
/phpMyAdmin-2.5.5-pl1/scripts/setup.php: 1 Time(s)
...
/pma/scripts/setup.php: 1 Time(s)
/pma2005/scripts/setup.php: 1 Time(s)
/robots.txt: 1 Time(s)
/scripts/setup.php: 1 Time(s)
/sqlmanager/scripts/setup.php: 1 Time(s)
/sqlweb/scripts/setup.php: 1 Time(s)
/typo3/phpmyadmin/scripts/setup.php: 1 Time(s)
/w00tw00t.at.blackhats.romanian.anti-sec:): 1 Time(s)
/web/phpMyAdmin/scripts/setup.php: 1 Time(s)
/web/scripts/setup.php: 1 Time(s)
/webadmin/scripts/setup.php: 1 Time(s)
/webdb/scripts/setup.php: 1 Time(s)
/websql/scripts/setup.php: 2 Time(s)
/xampp/phpmyadmin/scripts/setup.php: 1 Time(s)
Non je n'épluche pas les logs du serveur en guise de petit-déjeuner,
[logwatch](http://www.logwatch.org/) m'envoie un compte-rendu des entrées
pertinentes :-) A priori je ne crains pas grand chose sauf s'ils trouvent une
faille dans WordPress et me vident ce blog mais j'ai un système de sauvegarde
en place basé sur [Rsync](http://fr.wikipedia.org/wiki/Rsync). J'ai néanmoins
rajouté un peu de sécurité Apache :
- autoriser à redéfinir la sécurité globale à chaque niveau en passant le
paramètre AllowOverride à All dans /etc/apache2/sites-available/&lt;ma
definition de site&gt;
- ajout d'un fichier.htaccess à la racine html pour refuser tout le monde ( deny
from all )
- ajout d'un fichier.htaccess au niveau de Piwik pour refuser tout accès depuis
l'Internet ( allow from 192.168.0.0/255.255.0.0, deny from all )
Comment tester que ces règles sont appliquées ? on peut  utiliser un proxy
Web ou bien tester depuis son téléphone avec le réseau 3G de son opérateur  :
-)

@ -0,0 +1,81 @@
---
layout: post
title: Installation d'un serveur de courrier
category: Hébergement
---
Je vais détailler l'installation d'un serveur
[Postfix](http://fr.wikipedia.org/wiki/Postfix) /
[Dovecot](http://fr.wikipedia.org/wiki/Dovecot) sous Debian. <!-- more -->Le serveur
[SMTP](http://fr.wikipedia.org/wiki/SMTP) installé par défaut est
[Exim](http://fr.wikipedia.org/wiki/Exim) mais je l'ai remplacé par Postfix que
je connais un peu (rien de personnel contre Exim qui fait sûrement très bien
son travail). Je veux gérer mon courrier depuis Thunderbird et utiliser le
protocole [IMAP](http://fr.wikipedia.org/wiki/IMAP) pour laisser les messages
sur le serveur. D'abord on installe avec apt-get qui s'occupera de la
désinstallation d'Exim.
apt-get install postfix dovecot
Mon gros souci est bien sûr la sécurité : se faire pirater son courrier n'est
pas une pensée agréable mais envisager qu'on utilise son serveur de courrier
pour spammer l'est encore moins. Il faut donc envisager une authentification
SMTP, des mots de passe robustes et un cryptage des données SSL. On peut
générer soi-même son certificat mais on aura des soucis avec les applications
clientes car il ne sera pas authentifiée par une autorité reconnue. La plupart
de ces autorités font payer ce service. Un compromis que j'ai jugé acceptable
consiste à requérir les services de [CAcert](http://www.cacert.org) qui permet
de signer des clefs que vous aurez générées, sous réserve de prouver que
vous êtes détenteur du domaine (rien de méchant il suffit de confirmer un
courrier sur une adresse de ce domaine).
Quand on reçoit le certificat on l'installe sous etc/ssl/certs/dovecot.pem et
on installe la clef privée sous etc/ssl/private/dovecot.pem. Il faut ensuite
adapter la configuration de Dovecot sous /etc/dovecot/dovecot.conf :
ssl_disable = no
ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem
disable_plaintext_auth = yes
auth default {
mechanisms = cram-md5
socket listen {
client {
# Assuming the default Postfix $queue_directory setting
path = /var/spool/postfix/private/auth
mode = 0660
# Assuming the default Postfix user and group
user = postfix
group = postfix
}
}
passdb passwd-file {
args = /etc/dovecot/cram-md5.pwd
}
}
L'authentification CRAM-MD5 peut-être préférée à LOGIN, elle permet de
gérer les comptes indépendamment des comptes UNIX. Sa configuration est
détaillée  [ici](http://wiki.dovecot.org/HowTo/CRAM-MD5?action=show&redirect
=CRAM-MD5).
Pour Postfix on se simplifie grandement la vie en s'appuyant sur Dovecot pour
l'autentification. Voici les paramètres clés de /etc/postfix/main.cf :
smtpd_tls_cert_file=/etc/sl/certs/dovecot.pem
smtpd_tls_key_file=/etc/ssl/private/dovecot.pem
smtpd_use_tls=yes
myhostname = "le nom DNS de mon serveur"
relayhost = "le serveur SMTP de mon fournisseur"
mynetworks = 192.0.0.0/8, 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
smtpd_sasl_type = dovecot
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination
Il ne faut pas oublier de mettre en place les règles NAT pour ouvrir le port 25
et 143 vers l'extérieur et de redémarrer les services :
/etc/init.d/dovecot restart
/etc/init.d/postfix restart

@ -0,0 +1,20 @@
---
layout: post
title: Hello Moto Droid
categories: Android Mobilité
---
Après deux ans de bons et loyaux services j'ai remisé mon Nokia E61i pour un
téléphone plus récent. <!-- more -->J'ai hésité entre le Nokia N900 et un smartphone
sous Android. Finalement le côté prototype d'essai du N900 m'a refroidi, je ne
peux pas changer tous les ans et c'est Android qui a gagné la mise, mon choix
s'est arrêté sur un Motorola Milestone (Droid pour les States). En tant que
téléphone, j'ai apprécié la continuité avec mon Nokia E, un téléphone
lourd qui tient dans la main, pèse dans la poche et propose un clavier
physique... car j'ai ou plutôt avais quelques inquiétudes sur mon aptitude à
utiliser le clavier tactile. Finalement j'utilise les deux mais je privilégie
le clavier physique pour les SMS et les emails pour le lien avec l'écriture, la
composition qu'il m'inspire  :-) Le système Android a été une vraie
découverte, appréciée pour l'ergonomie et la logique d'ensemble. Par contre
le Market est un vrai foutoir ! Néanmoins, en se documentant sur des sites qui
conseillent les meilleures applications on arrive à trouver ce qu'on cherche.

@ -0,0 +1,24 @@
---
layout: post
title: Restauration du firmware original du routeur D-Link
category: Matériel
---
La semaine dernière, j'ai  crashé  mon routeur D-Link DIR-300 que j'avais
mis à jour vers [OpenWrt](http://openwrt.org/) l'année dernière. <!-- more -->Je crois que
j'ai abusé des paramètres Wifi avancés pour ajuster notamment la force du
signal. J'ai saisi cette occasion pour revenir au firmware original qui fait
certes moins de choses mais qui est beaucoup plus léger. OpenWrt fonctionne sur
ce modèle mais il utilise quasiment 90% de la mémoire et ça se ressent en
manipulant l'interface d'administration et probablement sur le fonctionnement
quand il faut monter en charge. J'ai trouvé un excellent tutorial pour revenir
au firmware d'origine sur le blog de [kaillasse91](http://kaillasse91.free.fr
/DIR-300_OpenWrt_Restauration_firmware_original.html). Il s'appuie sur le blog
de [shadowandy](http://www.shadowandy.net/2007/10/flashing-dir-300-back-to-
original-firmware.htm) mais en corrigeant certaines erreurs et en détaillant
les manipulations pour Ubuntu. J'ai pu l'appliquer sans problème à ArchLinux :
-) Il faut installer le paquet **tftp-hpa** qui fournit le serveur
[tftp](http://fr.wikipedia.org/wiki/TFTP) et installer **Putty** avec un coup de
yaourt car le client Telnet par défaut ne semble pas permettre le CRTL-C pour
prendre la main au démarrage du routeur. Ensuite c'est comme une recette de
cuisine :D

@ -0,0 +1,19 @@
---
layout: post
title: Passage à Slitaz 3.0
category: GNU/Linux
---
Un titre alternatif serait "Suite des tribulations de ma voisine avec son
Pentium II". <!-- more -->Le disque dur de 20 Go a rendu l'âme le week-end dernier.  Par
chance, on lui a donné une machine de la même époque mais avec une carte
mère hors-service. J'ai sorti les tournevis et nous avons récupéré un disque
dur... de 20 Go (le standard de l'époque), une barrette mémoire de 128 Mo ce
qui nous permet d'atteindre 384 Mo et un lecteur DVD-ROM. Ma voisine a beaucoup
apprécié son passage à GNU/Linux, j'ai donc réinstallé
[Slitaz](http://www.slitaz.org/fr) 3.0, dernière version stable sortie fin du
mois de mars. C'est toujours aussi léger, on a senti de suite le bénéfice des
128 Mo supplémentaires. Elle se retrouve avec une machine opérationnelle pour
le Web, parce que IE fourni avec Windows 98 c'est plus ça ;-) et une
logithèque de belle taille pour la bureautique et la musique, ses deux
activités principales.

@ -0,0 +1,35 @@
---
layout: post
title: Applications Android
category: Android
---
Après quelques semaines d'utilisation je peux établir une liste des
applications que j'utilise réellement sur mon Milestone.<!-- more -->
* TweetDeck, un bon client Twitter. J'en ai essayé beaucoup, la plupart sont
très bons mais TweetDeck a le petit + qui fait la différence pour moi, il
supporte Google Buzz.
* gReader Pro, lecteur de flux pour Google Reader. A part des petits soucis de
synchro qui sont progressivement résolus, c'est le must pour lire ses flux RSS.
* Tâches d'Astrid, un GTD open source qui s'interface avec Remember The Milk,
Producteev (que je ne connaissais pas) et le plus appauvri Google Task.
L'interface va a l'essentiel, on trouve des fonctions avancées si on les
cherche, c'est très bien pensé.
* Dolphin Browser HD, un navigateur plus rapide, une mise en page des colonnes de
texte automatique quand on zoome. Il est pas mal mais les barres latérales
surgissent souvent quand  on veut juste se déplacer sur  la page. J'espère
trouver encore mieux... des suggestions ?
* Les gadgets qui simplifient la vie : APNDroid pour couper l'Internet Mobile d'un
clic, NetCounter pour surveiller son trafic sur le mois,  No Lock pour
désactiver le verrouillage, Quick Settings pour régler vite certains réglages
* Le multimédia : RadioMee (beaucoup de radios), Radio France (idéal pour les
podcasts de Radio France), Shazam (classique !), Pic Say Pro (il m'a tellement
amusé que je l'ai acheté), Canal + (si quelqu'un connaît une autre
application qui permet de regarder plus que iTélé ;-) ) et AlloCiné (belle
application bien réalisée)
* Les informations : News Republic (intéressant car on peut se promener par sujet
d'actualité), Marianne 2
* Les jeux : on n'est pas sur iPhone mais la qualité arrive :-) Angry Birds
(+++), Frozen Bubble, Alchemy (permet de faire des associations marrantes pour
créer de nouveaux éléments) et Bubble Blast II.

@ -0,0 +1,27 @@
---
layout: post
title: Fais rôter ton Droid
category: Android
---
A défaut d'écrire un article orignal je me suis lâché sur le titre ;-)
Jusqu'à maintenant  je ne voyais pas trop d'intérêt  à "rooter" Android<!-- more --> 
à part pour épater les gens en montrant un shell avec un #.  Mais on ne peut
pas installer d'applications sur la SD avec Android 2.1 et la mémoire du
Milestone n'est pas énorme. Alors il devient intéressant de pouvoir
désinstaller des applications systèmes... à chacun de juger ce qui est
inutile, me concernant j'ai viré MotoNav,  Facebook, Email (qui fait doublon
avec GMail), Gesture, l'Aide, l'interface simplifiée pour le Dock, le Portail
Motorola et l'Agenda d'Entreprise.
D'abord j'ai rooté (pas beau ce terme mais je n'ai pas trouvé mieux) le
Milestone sans problème en suivant le [tutorial d'Android France](http :
//android-france.fr/2010/05/31/motorola-milestone-root-android-2-1/). Ensuite
j'ai fait le fainéant en achetant la version Pro de Titanium Backup qui permet
de faire des sauvegardes sur SD et sur DropBox et désinstaller ce qu'on veut !
A manier avec Parcimonie si elle traîne dans les parages...
Le bilan est positif, j'ai récupéré beaucoup de place et j'ai pu installer la
grosse bêta de Firefox qui plantouille encore partout pour voir l'avancement du
projet. Et je crois que la batterie tient plus longtemps... impression ?
Peut-être pas j'ai viré deux services d'arrière-plan.

@ -0,0 +1,22 @@
---
layout: post
title: Envie de vitesse
category: Archlinux
---
Après presque une année avec Archlinux j'ai eu envie de booster un peu mon
pingouin : rien à reprocher à Gnome mais un OS opérationnel en moins de 2
minutes serait sympa.<!-- more -->
D'abord j'ai optimisé le temps de boot grâce aux recommandations du [Wiki
d'Arch](http://wiki.archlinux.org/index.php/Improve_Boot_Performance). Ensuite,
j'ai remplacé Gnome par [OpenBox](http://openbox.org/) couplé avec
[Tint2](http://code.google.com/p/tint2/) pour avoir une barre de tâches
minimaliste et une systray. La configuration d'OpenBox est simple, un fichier
autostart.sh déclare ce qu'il faut lancer au démarrage. Le package MenuMaker
permet de générer un menu complet, qu'on peut ensuite facilement épurer avec
un éditeur de texte.
Au final j'ai divisé le temps de boot par 2 et je suis authentifié tellement
vite (merci [Slim](http://slim.berlios.de/) ) que le Wifi n'est pas encore
connecté... le comble ;-)

@ -0,0 +1,33 @@
---
layout: post
title: Vidéo pour PSP avec ffmpeg
category: GNU/Linux
---
La Jackson-mania n'est pas prête de s'éteindre ;-) Mon fils m'a demandé
d'installer des clips Youtube de Michael sur sa PSP. <!-- more -->Pour télécharger du
YouTube il n'y a que l'embarras du choix : de l'extension Firefox à l'outil en
ligne de commande. Mon choix s'est porté sur ClipGrab qui permet de choisir la
qualité de vidéo désirée.
[<img class="alignnone size-medium wp-image-288" title="clipgrab"
src="/images/03x/clipgrab-300x176.png" alt="" width="300" height="176" />
](/images/03x/clipgrab.png)
Pour convertir au format PSP j'avais utilisé PSPVC disponible sur
[AUR](http://aur.archlinux.org/index.php?setlang=fr) mais il ne fonctionne plus
depuis le passage d'Arch à Python2. J'ai donc fouillé du côté des forums
pour voir ce qu'on pouvait faire avec les 2 ténors de la conversion vidéo sur
GNU/Linux : mencoder et ffmpeg. La [documentation Ubuntu](http://doc.ubuntu-
fr.org/ffmpeg) pour ffmpeg apporte l'essentiel de la solution à part une
coquille sur un paramètre et le nom des librairies h264 qu'il faut adapter. La
commande ultime est donc :
``` shell
ffmpeg -i [input_file] -r 29.97 -vcodec libx264 -s 640x480 -aspect 16:9 -flags +loop -cmp
+chroma -deblockalpha 0 -deblockbeta 0 -b 768k -maxrate 1500k -bufsize 4M -bt 256k
-refs 1 -bf 3 -coder 1 -me_method umh -me_range 16 -subq 7
-partitions parti4x4+parti8x8+partp8x8+partb8x8 -g 250 -keyint_min 25 -level 30
-qmin 10 -qmax 51 -qcomp 0.6 -trellis 2 -sc_threshold 40 -i_qfactor 0.71 -acodec aac
-ab 112k -ar 48000 -ac 2 -s 480x272 -aspect 4:3 -strict experimental [output_file.MP4]
```

@ -0,0 +1,30 @@
---
layout: post
title: Problème de résolution avec Xorg
category: GNU/Linux
---
Il arrive que la résolution native de mon écran 1280x800 ne soit pas reconnue
au démarrage. X démarre en 1024x768.<!-- more --> Il y a plusieurs façons de résoudre le
problème : on peut créer un fichier de configuration Xorg.conf ou bien
rajouter le mode dynamiquement. J'ai privilégié la seconde option. La commande
gtf permet de calculer les bons paramètres en fonction d'une résolution et
d'un taux de rafraîchissement :
``` shell
$ gtf 1280 800 60
# 1280x800 @ 60.00 Hz (GTF) hsync: 49.68 kHz; pclk: 83.46 MHz
Modeline "1280x800_60.00"  83.46  1280 1344 1480 1680  800 801 804 828  -HSync +Vsync
```
Le résultat peut être passé à la commande xrandr pour ajouter le mode
dynamiquement. Voici le script complet à exécuter au démarrage :
``` shell
xrandr --newmode "1280x800_60.00"  83.46  1280 1344 1480 1680  800 801 804 828  -HSync +Vsync
xrandr --addmode LVDS1 "1280x800_60.00"
xrandr --output LVDS1 --mode "1280x800_60.00"
```
Le nom de l'écran de sortie (LVDS1 dans mon cas) est donné par xrandr qui
résume la configuration.

@ -0,0 +1,24 @@
---
layout: post
title: Tiny Tiny RSS
categories: Android GNU/Linux Hébergement
---
J'ai découvert récemment une alternative à Google Reader : [Tiny Tiny
RSS](http://tt-rss.org/). <!-- more -->L'avantage par rapport à un simple client de flux
c'est d'avoir un serveur qui actualise les flux périodiquement et qui offre une
interface Web pour la consultation. J'ai pu installer facilement Tiny Tiny RSS
sur mon hébergement [O2Switch](http://www.o2switch.fr/). Basé sur PHP et MySQL
l'installation chez un hébergeur ne pose pas de souci. Le point délicat est la
synchronisation des flux. Le Wiki de Tiny Tiny propose trois solutions. Dans le
cas d'un hébergement, on ne peut généralement pas installer le daemon mais on
peut lancer le rapatriement des flux par une commande sous Cron.
Mon utilisation au quotidien alterne l'utilisation Desktop et Mobile ; par
chance un projet cousin [ttrss-reader-fork](http://code.google.com/p/ttrss-
reader-fork/) propose une application cliente pour Android qui se connecte à un
serveur Tiny Tiny RSS. C'est une application de qualité sous licence GPL dont
le développeur Nils Braden est très actif. J'ai posé un bug jeudi dernier, il
était corrigé moins de 2 jours après :-)
![Image TT-RSS](/images/04x/CAP201012251832.jpg)

@ -0,0 +1,37 @@
---
layout: post
title: SyncML
categories: Android GNU/Linux Hébergement
---
Il y a un point qui me gênait depuis mon passage à Android c'est d'avoir
confié tous mes contacts à Google. <!-- more -->J'ai confiance dans la société... ce
n'est pas Facebook ;-) mais on n'est pas à l'abri d'un piratage de compte. J'ai
donc voulu reprendre la main sur  ces données (je sais c'est un peu tard elles
sont en cache sur leurs serveurs pour longtemps :D).
Une solution possible est l'installation de la déclinaison OpenSource de
[Funambol](http://www.funambol.com/) et du client Android Funambol Sync. On
désactive la synchronisation des contacts Google et on configure la la
synchronisation vers le serveur Funambol.
![Auth](/images/04x/CAP201012281347.jpg)
![L'authentification](/images/04x/CAP2010122813471.jpg)
![La synchro Gmail](/images/04x/CAP201012281348.jpg)
Funambol fournit différents clients pour les mobiles et les desktops. J'ai
testé avec succès le client pour MacOSX qui permet de synchroniser le carnet
d'adresses.
C'est viable mais Funambol est écrit en JAVA. C'est lourd et difficile à
héberger chez un fournisseur classique. C'est vrai qu'il permet de synchroniser
toutes sortes de données (agenda, emails, fichiers) mais mon besoin se
réduisant aux contacts, j'ai cherché une alternative écrite en PHP. En
fouillant j'ai trouvé un serveur [SyncML](http://fr.wikipedia.org/wiki/SyncML)
basé sur PHP et MySQL : il s'agit de [Mooha](http://code.google.com/p/mooha/)
qui existe en version standalone et en tant que module pour Drupal.
Je l'ai déployé chez mon hébergeur favori [O2Switch](http://www.o2switch.fr/)
avec succès. La solution finale est donc hétérogène, à l'image du Libre :
un serveur SyncML Mooha et des applications clientes Funambol. Mais elle remplit
le cahier des charges initial ce qui est le plus important  :-)

@ -0,0 +1,19 @@
---
layout: post
title: Nouvelle année et bonnes résolutions
category: Humeur
---
Je vais essayer de placer cette nouvelle année sous le signe de la cohérence
et du partage. <!-- more -->Cohérence avec moi-même d'abord : plus d'harmonie entre mes
idées et mes actions :)- Sans devenir un barbu intraitable, je partage une
large part des idées véhiculées par le Libre : nécessité de préserver
l'indépendance de son informatique, de contrôler l'utilisation de ses
données. J'irais même jusqu'à voir le Libre comme un microcosme du monde
réel. Dans cet optique, il est temps que je sois plus actif, plus participatif
afin d'apporter ma pierre à l'édifice. Dans l'immédiat je me forme à la
maintenance de paquets AUR, j'ai repéré un projet intéressant qui ne fait pas
encore partie du dépôt. A court/moyen terme, j'ai un projet de développement
à taille humaine qui ira dans le sens du contrôle de ses données avec un
tiers serveur qu'on peut héberger facilement et une application cliente
Android.

@ -0,0 +1,29 @@
---
layout: post
title: Alternatives à phpMyAdmin
category: Archlinux
tag: planet
---
Je me suis intéressé aux alternatives à
[phpMyAdmin](http://www.phpmyadmin.net/), l'outil phare d'administration mySQL<!-- more -->,
fourni par la plupart des hébergeurs car écrit en PHP. C'est une référence
et à part une interface vieillisante on ne peut pas lui reprocher grand chose.
Néanmoins j'ai testé deux autres projets écrits en PHP qui méritent le
détour.
Tout d'abord [Adminer](http://www.adminer.org/) permet l'administration de mySQL :
gestion des schémas, des tables, des indexes et des données. Au travers de
modules PHP, d'autres bases sont supportées (PostgreSQL, SQLite, MS SQL,
Oracle) avec j'imagine une liste de fonctionnalités communes à n'importe
quelle base relationnelle.
Ensuite [Chive](http://www.chive-project.com/) est un  jeune projet qui mise
beaucoup sur la qualité de l'interface graphique à grand renfort d'AJAX. Les
fonctionnalités couvrent les besoins classiques d'administration et rajoutent
une interface agréable avec par exemple de la coloration syntaxique dans
l'éditeur de requête. Étonnamment Chive n'était pas encore proposé
ArchLinux. Comme je suis intéressé par la création et la maintenance de
paquets [AUR](http://aur.archlinux.org) j'ai saisi l'occasion de me former avec
le projet Chive et de rendre disponible la dernière version 0.4.0 à la
communauté Arch.

@ -0,0 +1,21 @@
---
layout: post
title: Sortie de Chive 0.4.1
category: Archlinux
---
Une version mineure de [Chive](http://www.chive-project.com/), l'outil
d'administration mySQL, est sortie la semaine dernière<!-- more --> ; elle corrige un
certains nombre de bugs. Voici le change log officiel.
Chive 0.4.1 is out, a minor bug-fix release for the 0.4 series.
Bug-Fixes in this release:
- FileImport broken
- Explain not working with groupby
- no server infos without selecting a schema first
- class HttpRequest conflict with pecl http module
- get error after login of version 0.4.0
- it is better to use class CJSON instead of json_encode/json_decode
J'ai mis à jour le [paquet AUR](http://aur.archlinux.org/packages.php?ID=45734)
correspondant pour Archlinux :-)

@ -0,0 +1,31 @@
---
layout: post
title: Retour en auto-hébergement
category: Hébergement
---
Le virus de l'auto-hébergement m'a repris. Je n'ai pas (encore) de matériel
dédié <!-- more -->; je suis très intéressé par les plug computer à basse consommation,
on verra quand le budget sera là :-) En attendant j'ai redonné vie à moindre
coût à un ancestral portable équipé d'un céléron. C'est un compromis
acceptable, j'espère qu'il tiendra quelques mois en 24/24 ;-)
Tant qu'à rapatrier ses services il aurait été dommage de ne pas repenser
tous les choix techniques, en tenant compte des performances du futur serveur
qui seront probablement modestes (low-watt => low-perf).
Le système est donc une Debian Squeeze. Fi de l'originalité ce qui compte
c'est l'éthique de cette distribution, sa stabilité et son adaptation aux
matériels récents et anciens ainsi que son énorme logithèque. Pour le
serveur HTTP j'ai choisi [Nginx](http://wiki.nginx.org/NginxFr), parce que j'ai
lu quelques articles à son propos, que c'est beaucoup plus léger. La
documentation est encore légère mais on trouve des bons blogs pour le reste
(comme installer et configurer [php-fm avec
Nginx](http://blog.nicolargo.com/2011/01/installation-automatique-de-nginx-php-
fpm-memcached-sous-debian.html) ).
La pièce principale de mes services et aussi la plus publique est bien sûr ce
blog qui a été migré vers [PluXml](http://pluxml.org/). J'en parlerais plus
en détail dans le prochain article.

@ -0,0 +1,39 @@
---
layout: post
title: PluXml, le moteur de blog qui carbure à XML
categories: Blog Hébergement
---
Le titre de ce billet est un clin dœil au site officiel de
[PluXml](http://pluxml.org/). J'ai profité de mon retour en auto-hébergement
pour changer de moteur de blog<!-- more -->. Pourquoi ? Pour voir autre chose
essentiellement... je n'ai jamais eu de souci avec WordPress, j'ai passé 3 ou 4
mises à jour en automatique sans souci (en croisant les doigts), je faisais une
sauvegarde hebdomadaire de la base.
Deux points m'ont accroché quand j'ai entendu parler de PluXml. D'abord, la
possibilité de s'affranchir de la base de données (stocker ses fichiers à
plat c'est rassurant, ça simplifie les sauvegardes). Ensuite, un moteur
rustique redonne le goût de l'effort (tu veux un plugin ? va tweaker ton thème
à coup de JavaScript et de PHP) ; sans oublier de se rafraîchir en HTML pour
écrire des billets car l'éditeur est sans fioriture.
La migration m'a demandé une grosse journée d'effort. Un script wp2pluxml fait
l'essentiel du travail, ensuite j'ai ajusté les tags à la main. Bon pour être
franc, c'était jouable car j'avais une cinquantaine d'articles. J'ai vu une
moulinette de conversion pour ceux qui viennent de DotClear sur le [Wiki de
PluXml](http://wiki.pluxml.org).
Au final les données du blog sont réparties dans quelque répertoires :
articles, commentaires, médias. Si on ne surcharge pas trop son thème, on
obtient un blog plus léger qu'avec WordPress et plus réactif sur des machines
légères. Bien sûr on n'a pas la diversité des plugins de WordPress mais
c'est aussi l'occasion de faire le point sur ce qui est vraiment nécessaire.
Pour ma part, quand j'ai eu fait le lien avec
[Gravatar](http://fr.gravatar.com/) et enrichi mon thème avec
[SHJS](http://shjs.sourceforge.net/) j'avais l'essentiel.
Je pense que le plus gros travail consiste à migrer sous PluXml. Si on décide
de repartir vers un autre moteur de blog un jour, les données seront faciles à
traiter (pas de meta informations obscures dans tous les sens) et il sera aisé
d'écrire des moulinettes de conversion si elles n'existent pas déjà.

@ -0,0 +1,46 @@
---
layout: post
title: Gnome 3, une belle rupture
category: GNU/Linux
---
Depuis plusieurs semaines l'actu déborde de comparatifs entre
[Gnome](http://gnome3.org/) 3 et [Unity](http://unity.ubuntu.com/)<!-- more --> et de retours
d'expérience (souvent négatifs) envers ces deux évolutions majeures.
Utilisateur d'[Archlinux](http://archlinux.fr/) je n'ai pas considéré Unity
mais je me suis intéressé à Gnome 3. J'ai noté deux doléances : les super-
productifs qui gèrent quasiment tout au clavier et qui ont dû mal à recréer
le même niveau d'optimisation et ceux qui apprécient la nouvelle ergonomie qui
met un coup de jeune mais qui ont l'impression d'avoir une version inachevée
car ils ont perdu la plupart des applets Gnome ainsi que certaines possibilités
de personnalisation visuelle.
Franchement on sent l'interface pensée pour les ordinateurs mais aussi pour les
tablettes ; on a donc simplifié, retiré certaines personnalisations et le
résultat reste à l'appréciation de chacun. Je l'utilise occasionnellement
depuis trois semaines et je m'y suis à peu près habitué. Néanmoins deux
aspects me semblent rédhibitoires pour un usage professionnel :
- Ne pas voir l'ensemble des tâches ouvertes libère une place appréciable sur
mon 13''3 mais dans le cadre d'un usage professionnel avec beaucoup
d'applications lancés simultanément ça peut gêner, même si l'affichage des
vignettes en un éclair avec une touche est attrayant.
- Ne pas voir la systray est gênant car le système de notification n'est pas
encore implémenté par toutes les applications et il est furtif.
Le premier point a peu de chance de changer car c'est le plus gros changement
ergonomique : passer d'une application à l'autre différemment et supprimer le
concept de minimisation des fenêtres. Quant au second point il évoluera au fur
et à mesure que les applications seront mises à jour et peut-être qu'une
extension permettra de rendre visible la systray quand une notification n'est
pas consommée (si cela existe déjà merci de m'en faire part).
En conclusion, je dirais que l'évolution de Gnome est sympathique et rend plus
attrayant le pingouin ; cela peut séduire des habitués de Ms Windows et MacOSX
et je crois qu'il était important de faire un bond en avant côté ergonomie.
Dans le cadre personnel je vais continuer à l'utiliser pour voir comment cela
va évoluer. Pour des usages professionnels et pour ceux qui ne refusent cette
refonte ergonomique, les projets [XFCE](http://www.xfce.org/) et
[LXDE](http://lxde.org/) gagnent en intérêt : au delà de proposer des
environnement plus légers et plus rapides que Gnome ou KDE ils proposent une
alternative Desktop classique (certains taquins diraient "old school").

@ -0,0 +1,29 @@
---
layout: post
title: Personnalisation de Gnome 3
categories: GNU/Linux Archlinux
---
Pour faire suite à l'article précédent, j'ai effectué des recherches sur la
personnalisation de Gnome 3. <!-- more -->Le fait est que c'est très flexible et accessible
à beaucoup de personnes car l'interface est basée sur JavaScript et CSS.
L'idée n'est pas de modifier l'installation elle-même mais d'écrire des
extensions dans son répertoire local.local/share/gnome-shell/extensions.
L'inconnue c'est la pérennité de ces bouts de JavaScript qui s'appuient sur
les API de Gnome 3 au fil des versions.
L'article de référence que je vous recommande est sur le [blog de Finnbarr P.
Murphy](http://blog.fpmurphy.com/2011/05/more-gnome-shell-customization.html).
L'auteur va très loin, du rajout d'un menu d'application discret sur le panel
au déplacement des icônes de la systray vers le panel... exactement ce que je
cherchais pour ne plus rater les notifications de Choqok, Empathy et Dropbox.
[<img src="/images/04x/systray2panel.jpg" alt="déplacer les apps systray
vers le panel" width="600" style="margin: 0px 20px" />
](/images/04x/systray2panel.jpg)
Je vous conseille aussi la lecture des trucs et astuces Gnome 3 parus sur [Tux-
Planet](http://www.tux-planet.fr/toutes-les-astuces-pour-gnome-shell/) et la
page Gnome 3 sur le [Wiki
d'Archlinux](https://wiki.archlinux.org/index.php/GNOME_3) qui est enrichie
régulièrement.

@ -0,0 +1,12 @@
---
layout: post
title: Sortie de Chive 0.4.2
category: Archlinux
---
[Chive](https://launchpad.net/chive), l'outil d'administration MySQL est passé
en version 0.4.2 <!-- more -->; c'est une version mineure qui corrige beaucoup de bugs et
ajoute la possibilité d ['intégrer Chive à des outils
externes](https://blueprints.launchpad.net/chive/+spec/direct-auth). J'ai mis à
jour le [paquet AUR](http://aur.archlinux.org/packages.php?ID=45734) pour
Archlinux.

@ -0,0 +1,20 @@
---
layout: post
title: Beau cadeau pour la fête des pères
category: Matériel
---
J'avais envie de changer de souris
depuis un petit bout de temps <!-- more -->avec deux critères en tête : une forme moins
bondée qui ne casse pas le poignet et un modèle filaire. Hé bien je dois
être difficile en matière de mulot car aucune souris ne m'a satisfait sur une
dizaine de modèles en exposition au magasin. Deux modèles Cyborg étaient sur
les rayons mais pas exposés. Néanmoins, la forme ne me déplaisait pas.
N'étant pas *gamer* je ne savais rien sur les produits Cyborg... un peu de
recherche sur le Net pour découvrir ce qui se cachait derrière ce look
futuriste et j'étais séduit par les possibilités d'adaptation à sa
morphologie (ajout de poids, ajustement de la longueur). Je suis reparti avec
une souris Cyborg R.A.T. 5 après avoir vérifié rapidement qu'elle
fonctionnerait sur nos OS alternatifs.
![Cyborg](/images/05x/cyborg-rat5.jpg)

@ -0,0 +1,57 @@
---
layout: post
title: Support des souris Cyborg
categories: GNU/Linux Matériel
tag: planet
---
On trouve de l'information contradictoire et pas très à jour sur le support
des souris Cyborg sous GNU/Linux. Je résume donc ce que j'ai mis en oeuvre pour
le support du modèle R.A.T. 5 sous ArchLinux. <!-- more -->D'abord il faut indiquer ses
caractéristiques pour Xorg. j'ai rajouté un fichier 10-cyborg-rat-mouse.conf
dans **/etc/X11/xorg.conf.d**.
Section "InputClass"
Identifier "Mouse Remap"
MatchProduct "Saitek Cyborg R.A.T.5 Mouse"
MatchDevicePath "/dev/input/event*"
Option "ButtonMapping" "1 2 3 4 5 6 7 2 9 10 11 12 0 0 0 16 17 18 19 20 21"
EndSection
La souris a été pensée pour les jeux sous Ms Windows pour lequel un CD
spécifique permet de définir des macros pour automatiser certaines actions. Un
bouton mode à 3 couleurs permet de passer d'un jeu de macros à un autre. Dans
chaque mode, on peut définir le rôle de la molette arrière, des 2 boutons sur
le côté gauche. Je crois que le bouton rouge rajoute de la précision lors des
visées dans les FPS.
Même si on n'est pas joueur il serait dommage ne pas profiter de ces boutons
supplémentaires pour se configurer des actions spécifiques. Sous Arch on peut
installer les paquets AUR xbindkeys et xmacro. Le premier permet d'associer des
commandes aux boutons tandis que le second permet de capturer (avec xmacrorec2)
et d'envoyer des keystrokes (xmacroplay). D'emblée on constate que le bouton
mode n'est pas reconnu et que le bouton arrière gauche est assimilé au bouton
de la molette principale. Je ne sais pas si c'est une limitation de xmacro ou si
la reconnaissance de la souris sous X est perfectible. Néanmoins, cela nous
donne 2 boutons et une molette supplémentaires à configurer. Pour cela, il
faut lancer xbindkeys au démarrage (le rajouter dans gnome-session-properties
fait l'affaire), et créer un fichier de configuration **~/.xbindkeysrc**.
A titre d'exemple, voici le fichier.xbindkeysrc que j'utilise actuellement :
#Ctrl-PgDn (move to previous tab): Thumbwheel right
"echo -e 'KeyStrPress Control_L\nKeyStrPress Page_Down\nKeyStrRelease Page_Down\nKeyStrRelease
Control_L' | xmacroplay :0"
m:0x0 + b:10
#Ctrl-PgUp (shift to next tab): Thumbwheel left
"echo -e 'KeyStrPress Control_L\nKeyStrPress Page_Up\nKeyStrRelease Page_Up\nKeyStrRelease
Control_L' | xmacroplay :0"
m:0x0 + b:11
#Alt-F4 (close application)): Red "Snipe" button
"echo -e 'KeyStrPress Alt_L\nKeyStrPress F4\nKeyStrRelease F4\nKeyStrRelease Alt_L'
| xmacroplay :0"
m:0x0 + b:12
#Ctrl-W (close window): Front thumb button
"echo -e 'KeyStrPress Control_L\nKeyStrPress w\nKeyStrRelease w\nKeyStrRelease Control_L'
| xmacroplay :0"
m:0x0 + b:9

@ -0,0 +1,18 @@
---
layout: post
title: Le vertige
category: Humeur
---
Je ne voyais jusqu'ici que des avantages à Archlinux et à son mode de mise à
jour quasi temps réel. <!-- more -->C'est fabuleux d'avoir les dernières nouveautés en
quelques jours. Mais si je n'ai eu aucun problème sérieux lors des mises à
jour, les changements actuels (passage à Gnome 3, deux changements de version
majeure de Firefox en 2 mois) donnent un peu le vertige. Pour Gnome 3, c'est une
révolution des habitudes que j'apprécie ; par contre on essuie un peu les
plâtres au niveau stabilité et j'ai installé XFCE en parallèle pour
l'utilisation dans le cadre du travail. Dès sa sortie j'ai adoré Firefox 4 et
les optimisations de performance qui l'accompagnent mais à peine ai-je refait
fonctionner toutes mes extensions que la version 5 est là. Du coup, c'est une
période un peu instable où l'on passe plus de temps à bidouiller sa machine
qu'à l'utiliser... mais après tout c'est qui nous plait :-)

@ -0,0 +1,10 @@
---
layout: post
title: Chive 0.5.1
category: Archlinux
---
[Chive](https://launchpad.net/chive), l'outil d'administration MySQL est passé
en version 0.5.1. <!-- more -->La liste des changements est accessible sur [leur
site](https://launchpad.net/chive/+announcements). Le [paquet
AUR](http://aur.archlinux.org/packages.php?ID=45734) pour Archlinux est à jour.

@ -0,0 +1,37 @@
---
layout: post
title: Switcher dans le monde de l'entreprise
category: GNU/Linux
tag: planet
---
Dans beaucoup d'entreprises il
est interdit de s'écarter de l'OS officiellement supporté, dans d'autres c'est
toléré mais généralement sans filet (ne comptez pas sur le [support
IT](http://fr.wikipedia.org/wiki/Services_d%27assistance) ) <!-- more -->; celles où règne
le libre choix sont rares. J'ai eu la chance de travailler pour l'une d'entre
elles ces derniers 18 mois. Ce qui rend le switch difficile ce sont les
applications sans alternative. Heureusement elles sont de moins en moins
nombreuses. Les clefs [RSA SecurID](http://www.youtube.com/watch?v=bI6IKsCs8WY)
ont longtemps été un problème insurmontable plus spécialement sous 64 bits
mais ce n'est plus le cas. La messagerie d'entreprise Exchange est accessible
depuis un bail grâce à un connecteur pour Evolution. Quant à la messagerie
instantanée d'entreprise Communicator, le [plugin
SIPE](http://sipe.sourceforge.net/) pour Pidgin permet d'accéder à la fonction
tchat (pour la communication voix il faudra convaincre vos interlocuteurs que
Skype ou n'importe quel service
[SIP](http://fr.wikipedia.org/wiki/Session_Initiation_Protocol) est bien
supérieur). Pour les cas récalcitrant ou des applications "maison" pour
Microsoft Windows il reste la possibilité d'utiliser
[Wine](http://www.winehq.org/). Ce n'est pas ma tasse de thé je préfère
cloisonner les choses et dans ce cas utiliser périodiquement une machine
virtuelle. Pour gagner énormément de temps, on peut convertir sa machine
physique en machine virtuelle VMware en deux coups de cuillère à pot en
utilisant l'outil gracieusement mis à disposition : [VMware vCenter
Converter](http://www.vmware.com/fr/products/datacenter-
virtualization/converter).
![Chat sans filet](/images/05x/chat-sans-filet.jpg)
Au final on réalise que les barrières qui empêchent GNU/Linux de dépasser la
barre des 1% de part de marché sur le Desktop ne sont pas techniques.

@ -0,0 +1,16 @@
---
layout: post
title: Bonne rentrée à tous
category: Hébergement
---
La fièvre [Minecraft](http://www.minecraft.net/) a atteint mon fils et quelques
uns de ses copains depuis deux mois. Il est amusant de voir qu'un jeu avec des
graphismes *old-school* provoque autant d'engouement.<!-- more --> Comme quoi c'est l'aspect
ludique qui prime... plutôt rassurant en ces temps où la poudre aux yeux est
souvent auto-suffisante. Du coup, j'héberge un modeste serveur Minecraft pour
leur permettre de s'ébattre sur la même carte. Inutile de détailler
l'installation sur une Debian c'est très bien documenté. Il est juste dommage
que ce soit du JAVA, c'est assez lourd pour mon céléron.
![Adventure update](/images/05x/adventure_update.tb.png)

@ -0,0 +1,35 @@
---
layout: post
title: Surveiller son blog
categories: Hébergement Blog
tag: planet
---
Quand on héberge son blog à la maison se pose la question de savoir s'il est
bien accessible de l'extérieur <!-- more -->car un problème de
[DNS](http://fr.wikipedia.org/wiki/Domain_Name_System), une mauvaise
configuration de la box de son fournisseur ou bien un coup de mou de celle-ci
peuvent rendre le site inaccessible sans qu'on le sache. La première chose est
d'avoir un test périodique lancé depuis l'Internet qui nous prévient en cas
de problème. Plusieurs sites proposent cela gratuitement. Pour ma part
j'utilise [UptimeRobot](http://www.uptimerobot.com) mais il y en a d'autres. Le
point crucial c'est d'être notifié, ce qui suppose qu'on utilise une adresse
de courriel extérieure à son serveur ou Twitter.
![Surveullance](/images/05x/horse-monitoring.tb.jpg)
Il est aussi important de valider que le contenu est correct. Pour cela
j'utilise un [vérificateur de liens](http://www.brokenlinkcheck.com/) en ligne.
Il peut y avoir des liens cassés car les ressources pointées n'existent plus
ou bien parce qu'on a mal défini son lien vers des ressources locales et cela
ne fonctionne pas depuis l'Internet. En fait, il est important de se mettre dans
les même conditions quand on accède à son blog depuis le réseau local donc
d'avoir une résolution du nom de domaine qui nous permet d'accéder au blog
avec la même URL. La résolution
[DNS](http://fr.wikipedia.org/wiki/Domain_Name_System) nous pointera sur
l'adresse extérieure de la box ADSL mais la résolution
[NAT](http://fr.wikipedia.org/wiki/Network_address_translation) ne sera pas
effectuée car on vient du réseau local et non pas de l'Internet.
Il faut donc modifier la résolution des noms pour le réseau local ;
différentes possibilités s'offrent à nous :

@ -0,0 +1,17 @@
---
layout: post
title: Le moteur de blog PluXml évolue
category: Blog
---
La version 5.1.3 de [PluXml](http://pluxml.org/) est sortie ! Elle contient un
joli [lot de corrections et
d'évolutions](http://telechargements.pluxml.org/changelog) <!-- more -->dont je n'ai pas
fait le tour complet (mais j'apprécie le repli de la zone chapô lors de la
création d'un article et la re-génération des miniatures dans la gestion des
médias). La mise à jour s'est passée sans problème :
- on sauvegarde le répertoire data qui contient les articles, les médias et les
commentaires,
- on extrait la nouvelle archive en écrasant les fichiers existants,
- on se connecte au blog et on accepte la mise à jour.

@ -0,0 +1,38 @@
---
layout: post
title: Installation de Gnome 3.2, au secours !
category: Archlinux
---
Enfin la sortie de Gnome 3.2 ! Je m'en fais une joie depuis 1 semaine. <!-- more -->J'ai
résisté à la tentation de passer sous testing et j'ai attendu son arrivée
dans le dépôt stable. La mise à jour est énorme : j'installe, je relance
et... je n'ai que le fond d'écran sous GDM. Vu le peu de configuration
utilisateur je n'hésite pas à supprimer tous les répertoires de paramètres :
.gnome2,.config. Rien n'y fait. Je soupçonne une blague de GDM. Je le supprime
et je démarre directement avec startx. Raté je n'ai toujours que le fond
d'écran. Bon faisons propre me dis-je ! je supprime tous les paquets Gnome, je
traque tous les fichiers affilié à Gnome ou GDM qui pourraient rester dans le
système. Puis je réinstalle tout en [suivant le Wiki à la
lettre](https://wiki.archlinux.org/index.php/GNOME_3). J'arrive au même
problème. J'analyse les logs, l'occasion de corriger des problèmes annexes
(conflit de network manager, dépendances bluetooth manquantes) puis je pense
avoir identifié le problème lié à ma carte graphique ou à X je ne sais pas
trop :
Error:org.freedesktop.ColorManager.Failed:
failed to obtain org.freedesktop.color-manager.create-device auth
C'est étonnant puisque la 3.0 a fonctionné des mois. Je force Gnome en mode
fallback et effectivement ça démarre. Au passage le mode fallback n'est pas
qu'une version limitée graphiquement, il a son lot de défauts spécifiques
(pas de support du microphone USB par exemple). Là j'en suis à ma deuxième
soirée *"je répare mon Gnome"* et je commence à être à court d'idée. Je
relance, un peu désespéré, la machine sous le kernel 3.0 (j'utilisais le
2.6.32-LTS) et Gnome démarre en mode normal. Je n'ai pas encore d'explication,
mes paramètres de kernel sont identiques... j'espère trouver une explication
plus tard.
Pour l'instant c'est la découverte de la 3.2... Empathy se lance mais je ne
peux pas créer de compte :-( Bon on verra demain soir... à chaque jour son
défi ;-)

@ -0,0 +1,44 @@
---
layout: post
title: Bilan de 6 mois d'auto-hébergement
category: Hébergement
tag: planet
---
Revenu à l'auto-hébergement depuis 6 mois, il est temps de faire un bilan.<!-- more -->
D'abord le domaine est passé de rognac.co.cc à madyanne.fr car [Google a exclu
co.cc](http://www.generation-nt.com/google-spam-phishing-domaine-co-cc-
desindexe-actualite-1229651.html) de son moteur de recherche. Je ne cours pas
après la popularité mais de là à devenir invisible... J'ai donc acheté un
domaine chez [Gandi](http://www.gandi.net/) et j'ai profité du pack Mail offert
pour leur confier mon adresse principale. Suite à de multiples soucis d'ADSL,
j'estime que le mail est trop critique pour être auto-hébergé.
Les principaux attraits de l'auto-hébergement sont :
* la mise à disposition de ses services quand on est mobilité,
* la liberté de faire tourner des services atypiques (hors du cadre LAMP ) qui
exigeraient un serveur dédié en hébergement classique,
* le contrôle de ses données,
* l'apprentissage de l'administration système.
Aujourd'hui j'héberge [PluXml](http://pluxml.org/) (moteur de blog),
[Piwik](http://fr.piwik.org/) (statistiques sur la fréquentation du blog),
[Tiny Tiny RSS](http://tt-rss.org/redmine/) (lecteur de flux RSS),
[Prosody](http://prosody.im/) (Jabber), [Subsonic](http://www.subsonic.org)
(streaming audio), [Shaarli](http://sebsauvage.net/wiki/doku.php?id=php:shaarli)
(partage des favoris), [Minecraft](http://www.minecraft.net/) (limité à 5
utilisateurs simultanés) et ses
[Mods](http://fr.wikipedia.org/wiki/Mod_%28jeu_vid%C3%A9o%29), [Mozilla
Sync](http://docs.services.mozilla.com/howtos/run-sync.html) (synchronisation
Firefox).
Au niveau administration j'apprends peu à peu. Je fais tourner
[logwatch](http://www.debianhelp.co.uk/logwatch1.htm) pour recevoir une analyse
journalière des logs par mail et depuis récemment
[fail2ban](http://www.fail2ban.org) qui scrute les logs et ajoute dynamiquement
des règles au firewall pour bannir des adresses qui tentent des accès non
autorisés. Je suis suffisamment en confiance pour avoir placé le serveur en
pseudo [DMZ](http://fr.wikipedia.org/wiki/Zone_d%C3%A9militaris%C3%A9e_%28inform
atique%29) (car j'ai un plan d'adressage unique) et autoriser un accès SSH à
distance. Bon j'ai aussi un système de sauvegarde à jour en cas de pépin ;-)

@ -0,0 +1,20 @@
---
layout: post
title: Gnome 3 pour un usage professionnel ?
category: Archlinux
---
Depuis que ma machine ArchLinux / Gnome 3 est devenue ma machine de travail
principale, j'ai un peu la nostalgie de Gnome 2. <!-- more -->J'ai greffé une barre de
tâches [Tint2](http://code.google.com/p/tint2/), activé l'extension qui
rajoute le menu des applications. Bref on se débrouille pour améliorer sa
productivité ! Je suis curieux de voir [la couche MGSE de Linux
Mint](http://blog.linuxmint.com/?p=1851) qui va sortir sous peu. Si ça comble
les manques de Gnome 3 on peut rêver d'un portage AUR sur Arch. De toute
façon, revenir en arrière ne me semble pas une bonne idée : le [fork
Mate](https://github.com/Perberos/Mate-Desktop-Environment) va introduire son
lot de bugs et il n'a pas vocation à évoluer. Je reste attaché à Gnome, mes
expériences XFCE et LXDE ont été passagères. Mais je vais changer de machine
sous peu et je pèse le choix entre Archlinux avec un Gnome 3 "amélioré" et
une Debian, ce qui laisserait plusieurs mois à Gnome 3 pour grandir et combler
ses lacunes. A cogiter...

@ -0,0 +1,16 @@
---
layout: post
title: Chive a mûri
category: Archlinux
---
[Chive](http://www.chive-project.com/), l'outil d'administration MySQL est
sorti en version 1.0, preuve qu'il atteint une maturité certaine au yeux de ses
développeurs. <!-- more -->Beaucoup de bugs ont été corrigé depuis la version 0.5 et des
nouvelles fonctionnalités ont vu le jour comme le support des commandes de
maintenance de table et l'affichage du temps de calcul des requêtes. Pour ne
rien gâter, c'est l'interface d'administration la plus conviviale de sa
catégorie (merci
[Ajax](http://fr.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML) ). Le
paquet [AUR](http://aur.archlinux.org/packages.php?ID=45734) est disponible pour
[Archlinux](http://archlinux.fr/).

@ -0,0 +1,21 @@
---
layout: post
title: La version Noël de Tiny Tiny RSS
category: Hébergement
---
L'excellent [logiciel d'aggrégation de flux RSS](http://tt-rss.org)
est sorti en version 1.5.8.1 peu avant Noël. <!-- more -->Quelques bugs sont
corrigés et la version mobile "classic", classée obsolète depuis quelques
versions, a été enlevé. C'est facheux car si elle ne brillait pas par son
look and feel, elle apportait le même niveau de fonctionalités que la version
Web standard. En lot de consolation, on a la version mobile "tout court", qui a
certes un super look *à la iphone* mais aucune fonctionalité avancée. On peut
juste ouvrir les flux un par par un avec un superbe effet de glissement vers la
droite, aucune possibilité de marquer une catégorie entière comme lue, pas
d'entrée "tous les articiles". je suppose que l'équipe mise sur les
applications mobiles pour Android et iPhone et fait le minimum sur la version
Web mobile. Donc méfiance si vous utilisez la version mobile classic, il vaut
mieux rester sur Tiny Tiny RSS 1.5.6.
![Avertissement](/images/06x/signal_sncf_avertissement.tb.jpg)

@ -0,0 +1,85 @@
---
layout: post
title: Installation de Jenkins CI
category: Développement
tag: planet
excerpt: L'intégration continue s'inscrit dans la méthodologie Agile ; Son objectif est de garantir que le projet est stable tout au long du développement
---
<img src="/images/06x/jenkins-logo.png" alt="Jenkins CI" title="Jenkins
CI" style="float:left; margin: 0px 20px" checked="true" /> L'intégration
continue s'inscrit dans [la méthodologie
Agile](http://fr.wikipedia.org/wiki/M%C3%A9thode_agile) ; Son objectif est de
garantir que le projet est stable tout au long du développement et qu'on peut
livrer le projet à tout moment. Cela implique que les développeurs ne publient
que des fonctionnalités ou des micro-fonctionnalités complètes (dans le sens
entièrement implémentées et utilisables) dans le dépôt de sources et qu'on
peut à tout moment construire le projet dans son intégralité et le déployer,
généralement sur des environnements de tests pour que l'Assurance Qualité
puisse tester tout au long du cycle de développement, ou bien en tant que
version intermédiaire planifiée (milestone, alpha, beta).
Ici je vais décrire l'installation du logiciel d'intégration continue [Jenkins
CI](http://jenkins-ci.org/) dans le conteneur de Servlet
[Tomcat](http://tomcat.apache.org/) sous Ubuntu Server 10.4. D'abord on installe
Tomcat 6 avec le système de paquets :
``` shell
sudo apt-get install tomcat6
```
Ensuite on installe manuellement le WAR de Jenkins CI :
``` shell
# move to tomcat webapps dir
cd /var/lib/tomcat6/webapps
sudo wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war
```
Si Tomcat était lancé, Jenkins va être déployé et disponible en quelques
secondes. Sinon démarrez Tomcat :
``` shell
sudo /etc/init.d/tomcat6 start
```
Jenkins est accessible ici : [http://&lt;nom du
serveur&gt;:8080/jenkins](http://localhost:8080/jenkins)
Par défaut la sécurité n'est pas activée et tout le monde peut accéder et
administrer Jenkins. Nous allons remédier à cela en modifiant les paramètres
de sécurité dans la partie administration qu'on accède en cliquant sur le
lien *[Administrer Jenkins](http://localhost:8080/jenkins/manage)* puis *[Configurer le système](http://localhost:8080/jenkins/configure)*.
![Sécurité](/images/06x/jenkins-security.png)
Après enregistrement, un bouton *S'identifier* fait son apparition dans la
bannière en haut à droite. Jenkins a délégué à Tomcat la gestion des
utilisateurs, il faut donc créer, au minimum, un administrateur Jenkins. Editez
le fichier /var/lib/tomcat6/conf/tomcat-users.xml avec votre éditeur favori et
ajoutez le rôle 'admin' et un administrateur, par exemple :
```
<role rolename="admin">
<user username="jenkins" password="jenkins" roles="admin">
```
Ensuite redémarrez Tomcat pour prendre en compte la création de l'utilisateur
et identifiez-vous à Jenkins en tant qu'administrateur. Attention,
l'utilisateur anonyme a encore accès à tout. Si votre intégration continue
tourne sur un serveur publique, vous voudrez probablement que l'utilisateur
anonyme n'ait aucune visibilité sur les projets. Modifions à nouveau la
sécurité ; on choisit la sécurité basée sur une matrice de droits, et on
rajoute l'utilisateur **jenkins** avec tous les droits cochés.
![Matrice de sécurité](/images/06x/jenkins-matrix.png)
Si vous avez joué de malchance et que vous n'avez pas affecté de droit à
l'administrateur avant de sauver, vous ne pouvez plus accéder à Jenkins :-)
Heureusement les développeurs ont prévu le coup et il faut réinitialiser la
sécurité en suivant [cette procédure du Wiki](https://wiki.jenkins-
ci.org/display/JENKINS/Disable+security).
A ce stade Jenkins est opérationnel avec une sécurité basique qui suffira
dans beaucoup de cas, prêt à gérer des projets, ce qui fera l'occasion d'un
prochain article.

@ -0,0 +1,83 @@
---
layout: post
title: Quelle distribution 'Gnome 2' choisir en 2012 ?
category: Humeur
tag: planet
---
Le titre est un peu provoc mais c'est une vraie question [que je me posais
déjà en Novembre
dernier](http://blogduyax.madyanne.fr/index.php?article60/gnome-3-pour-un-usage-
professionnel). Comment retrouver un niveau de productivité correct après
l'ouragan Gnome 3 / Unity dans le cadre professionnel<!-- more --> avec du matos récent (en
l'occurrence un core i7 avec de la RAM à gogo et une carte NVIDIA Optimus
achetés en décembre) ? J'ai posé deux contraintes : **une stabilité des
paquets sur 1 an** (hors mise à jour de Mozilla et patchs de sécurité bien
sûr) et **une distribution proche de Debian**. Pour ces raisons j'ai écarté
Archlinux, bien ce que soit mon coup de coeur depuis 2 ans.
<img xmlns="http://www.w3.org/1999/xhtml" src="images/06x/gnome-
logo.png" alt="Gnome logo" title="Gnome logo" style="margin: 0px 20px; float:
right; width: 118px; height: 160px;" checked="true" align="right" /> Mon grand
espoir était d'utiliser une [Debian](http://www.debian.org/) stable, ce qui
m'aurait laissé encore 1 an de tranquillité sous Gnome 2. Mais j'ai déchanté
! Après installation à partir des beaux DVD "Squeeze" récemment reçus j'ai
réalisé que la version stable embarque un kernel 2.6.32, trop ancien pour
gérer le chipset Wifi et que les versions de Mozilla sont vraiment anciennes.
Les [backports officiels](http://backports-master.debian.org/) n'ont pas aidé
à résoudre ces points. La perspective de *tweaker* manuellement la
distribution m'a effleuré. J'ai plutôt modifié les dépôts pour passer en
Testing. Ce que j'ai gagné c'est le passage à Gnome 3 et une gestion du Wifi
boiteuse. De plus Testing évolue continuellement. L'objectif initial n'étant
pas de passer à une pseudo-rolling release, j'ai quitté Debian avec quelques
regrets.
Sur le coup, mon raisonnement fut "tant qu'à faire une croix sur Gnome 2,
autant installer une distribution récente". Ce fut donc Ubuntu 11.10 avec Unity
ou Gnome 3. Bon Gnome 3 je connais, je l'ai utilisé presque 1 an à la maison.
C'est mignon, bien pensé mais pas adapté à mon usage où je papillonne toute
la journée parmi une vingtaine d'applications lancées. Du coup, j'ai donné sa
chance à Unity et j'ai tenu 2 semaines :-) Mais le bilan n'est pas si négatif.
J'ai beaucoup apprécié l'espace gagné sur l'écran grâce à la barre de menu
unique (comme dans le monde des pommes). Ce qui me déplait fortement c'est la
difficulté à trouver une application dans le panel. Quelle idée marketing
tordue de mixer les applications installées et celles disponibles dans l'Ubuntu
store!!! On peut contourner le problème en rajoutant le [Classic Menu
Indicator](http://www.webupd8.org/2011/06/use-classic-menu-in-unity-
classicmenu.html) mais le problème de basculement parmi une vingtaine
d'applications lancées reste entier.
Las j'ai transformé mon Ubuntu en Xubuntu. Ce que je peux dire sur XFCE a été
lu ou dit ailleurs : avec des efforts de personnalisation on arrive à recréer
un Gnome 2-like (en moins beau, moins bien intégré). On a une vraie barre des
tâches qui peut regrouper intelligemment les applications lancées et le menu
n'est pas une porte ouverte sur une boutique d'applications. Par contre le
gestionnaire de fichier Thunar est moins bien que Nautilus (notamment il manque
la gestion des onglets) et **on a le goût amer d'avoir quelque chose de presque
aussi bien qu'en... 2010** ;-) L'année 2010 c'est Ubuntu 10.04 juste avant que
Canonical n'entame le grand chantier Unity et que l'équipe Gnome ne démarre sa
révolution pour ouvrir Gnome aux tablettes et aux netbooks (en oubliant les
gens qui utilisent leur machine pour travailler). Bref 2010 c'est l'avant
dernière version "Gnome 2" sortie par Canonical dans [une version LTS maintenue
jusqu'en avril 2013](http://doc.ubuntu-fr.org/lucid). D'un coup il y a eu
déclic ! Serait-il possible que cette version avec un support étendu soit
capable de gérer mon matériel acheté en fin d'année 2011 ?
Et bien la réponse est positive, avec quelques ajustements mineurs :
* l'activation des dépôts officiels "lucid-backports" et "lucid-proposed" pour
passer au plus récent kernel proposé en 2.6.x, à savoir le 2.6.38-13 (si
nécessaire on peut aller jusqu'au 3.0.0-15) et bénéficier de Firefox 9.
* l'ajout du dépôt Ubuntuzilla pour bénéficier de Thunderbird 9 car la version
3.x fournie par défaut ne propose pas l'extension Lightning.
* La désactivation du driver Nouveau (encore expérimental en 10.04) -
blacklisté dans /etc/modprobe.d/blacklist.conf - l'utilisation de la carte
Intel est bien suffisante pour mon usage.
Tous les outils que j'utilise quotidiennement pour le travail fonctionnent
parfaitement (Eclipse, JAVA, VMWare Player, Skype), l'environnement de bureau
est un bonheur retrouvé. Pour info, Ubuntu 10.04 démarre et s'arrête 2 fois
plus vite qu'une version 11.10. Que fait Canonical depuis 3 versions ? - ah oui
ils focalisent sur l'environnement de bureau :-( Après un mois d'errements,
j'ai enfin l'impression d'avoir la distribution qu'il me faut pour cette
machine. J'aurais pu intituler cet article "Retour vers le futur".

@ -0,0 +1,106 @@
---
layout: post
title: Surveiller sa ligne ADSL avec Munin
category: Hébergement
tag: planet
---
Je me suis intéressé à la supervisition de ma box ADSL afin de grapher la
bande passante montante et descendante ainsi que les valeurs de bruit et
d'atténuation<!-- more -->, ceci dans le but de vérifier la stabilité des valeurs dans le
temps et de corréler des impressions de dégradation avec des mesures
concrètes.
La première étape nécessite de trouver un protocole fournissant les
informations nécessaires. Etant abonné Orange je suis équipé d'une livebox 2
qui fournit un service [HTTP](http://fr.wikipedia.org/wiki/HTTP) et un service
[TELNET](http://fr.wikipedia.org/wiki/TELNET). Sur l'ancienne génération le
mot de passe du compte root était connu et on pouvait tirer les informations
nécessaires depuis le service TELNET. De ce que j'ai lu dans les forums, le mot
de passe est inconnu sur la nouvelle génération et la seule option reste
l'interface HTTP, pas vraiment le protocole idéal pour de la supervision. Fort
heureusement, un script PERL pour piloter la box a été écrit par
[teebeenator](http://www.forum-orange.com/forums/profile.php?id=29572) et
sympathiquement fourni à la communauté des utilisateurs. Ce script est
téléchargeable [ici](http://www.forum-
orange.com/forums/viewtopic.php?id=32420).
<img style="width: 305px; height: 80px;" alt="Munin" src="/images/06x/munin-logo.png" align="right" /> La deuxième étape consiste à choisir un
outil de supervision capable de collecter des valeurs et de créer des graphes,
un outil de la famille [MRTG](http://fr.wikipedia.org/wiki/MRTG) : après un
test de [Cacti](http://www.cacti.net/) qui est un bon outil mais que j'ai jugé
trop complexe par rapport à mon besoin initial, mon choix s'est porté sur
[Munin](http://munin-monitoring.org/) : un outil simple (voire rustique) écrit
en PERL, aucune interface graphique d'administration, une interface Web 1.0
(sans JavaScript) qui présente des graphes à la journée, consolidés à la
semaine, au mois et à l'année générés statiquement en tant qu'images
bitmap. L'installation est triviale et correctement documéntée pour Debian sur
[le Wiki de Munin](http://munin-monitoring.org/wiki/Documentation). Dans mon
cas, je déploie sur mon petit serveur Debian Squeeze et j'utilise
[NginX](http://fr.wikipedia.org/wiki/Nginx) en tant que serveur HTTP. Faire un
lien symbolique de /var/www/... vers le répertoire www de Munin
(/var/cache/munin/www) est suffisant pour lier le serveur Web à Munin.
La troisième et dernière étape consiste à étendre Munin en créant des
plugins. D'abord on collecte les données, c'est réalisé par un shell script
qui appelle le script PERL de teebeenator et qui sauve les donnée dans un
fichier texte. Cette collecte est réalisée toutes les 5 minutes grâce à
CRON.
``` shell
perl livebox.pl --user=admin --pass=<VotreMotDePasse>
-page=infosys_main -v 2>/dev/null | html2text >/adsl_stats.txt
```
Je sauve les données dans un fichier texte car 3 plugins Munin vont les
consommer :
* un plugin qui graphe la bande passante descendante (download) en kb/s
* un plugin qui graphe la bande passante montante (upload) en kb/s
* un plugin qui graphe le bruit montant / descendant ainsi que l'atténuation
montante / descendante en dB.
Un plugin est un exécutable (Bash, Perl, Python, ce que vous préférez) qui
doit répondre à deux types de requêtes :
- avec l'argument 'config' il renvoie la configuration du graphe : titre, les
unités, le libellé de chaque variable graphée
- sans argument il renvoie une nouvelle valeur pour chaque variable du graphe.
Voici shell script du plugin adsl_download qui collecte la valeur de la bande
passante descendante :
``` shell
if [ $# = 1 ]; then
echo "graph_title Bandwidth - Download"
echo "graph_category ADSL"
echo "graph_vlabel kb/s"
echo "down.label download"
else
grep "bit descendant maximum" adsl_stats.txt | cut -s -d: -f2
| sed 's/\s*\([0-9]\+\).*/down.value \1/'
fi
```
L'enregistrement du plugin auprès de Munin est très simple :
- on rajoute l'exécutable ou un lien symbolique dans /etc/munin/plugins
- on configure les droits d'exécutions dans /etc/munin/plugin-conf.d/munin-node
Mes plugins s'appellent adsl_download, adsl_upload et adsl_noise, j'ai donc
rajouté la section suivante à /etc/munin/plugin-conf.d/munin-node :
```
[adsl*]
user root
```
Le séquenceur de Munin appelle chaque plugin toutes les 5 minutes.
Voici le genre de graphe qu'on obtient :
![ADSL Download](/images/06x/download.png)
L'ensemble des fichiers qui composent les plugins sont disponibles [dans cette
archive](/documents/munin.zip).

@ -0,0 +1,128 @@
---
layout: post
title: Gérer un projet de développement avec Jenkins CI
category: Développement
tag: planet
excerpt: Faisant suite à l'article décrivant l'installation de Jenkins CI, nous allons voir comment gérer un projet
---
<img style="width: 96px; height: 96px;" alt="Jenkins CI logo"
src="/images/06x/jenkins-logo.png" align="left" /> Faisant suite à
[l'article décrivant l'installation de Jenkins
CI](http://blogduyax.madyanne.fr/index.php?article63/installation-de-jenkins-
ci), nous allons voir comment gérer un projet en reprenant la configuration
déployée sous Tomcat avec Ubuntu 10.04 serveur. Pour rappel, [Jenkins
CI](http://fr.wikipedia.org/wiki/Jenkins_%28informatique%29) permet de mettre en
place une intégration continue afin de traquer d'éventuelles régressions d'un
projet logiciel pendant le cycle de développement. En pratique, il sait
accéder à la plupart des gestionnaires de sources et s'interface avec la
plupart des système de build. Son rôle principal consiste à recompiler le
projet périodiquement, dérouler les tests unitaires et produire des
notifications si quelque chose va de travers.
Mon projet d'exemple est représentatif de mes activités de ces derniers mois :
le développement d'un logiciel écrit en Java qui utilise le système de build
[Apache Maven](http://fr.wikipedia.org/wiki/Apache_Maven) pour construire le
projet. D'abord il faut installer Maven
``` shell
$ apt-get install maven2
```
Maven est géré nativement par Jenkins (sans l'ajout de plugin). On accède à
la configuration de l'outil Maven depuis la page d'administration globale :
![Configure Maven tool](/images/06x/configure-maven-tool.png)
A l'exécution, Jenkins cherche les données relatives à Maven dans
/usr/share/tomcat6 car il s'exécute dans le conteneur de servlet Tomcat en tant
qu'application Web. Si le projet nécessite un fichier de configuration Maven
particulier, il faut le copier dans **/usr/share/tomcat6/.m2/settings.xml** et
il faut s'assurer que l'utilisateur tomcat6 possède tous les droits sur le
répertoire.m2.
Maintenant, nous sommes prêts à créer un nouveau Projet. Les projets de type
Maven ont leur propre type de projet :
![New Project](/images/06x/new-project.png)
Peu d'informations sont nécessaires pour définir un projet de type Maven :
* l'interaction avec le gestionnaire de sources,
* le chemin du fichier POM.XML qui contient la description du build Maven,
* les "goals" de compilation du projet.
Dans mon exemple, le gestionnaire de source est Subversion (SVN pour les
proches) et il est supporté en standard, de même que CVS. La liste est
restreinte mais ne paniquez pas, une quantité de plugins permettent de
supporter à peu près tout ce qui existe (Bazaar, GIT, ClearCase,
Mercurial,...). Cerise sur le gâteau la gestion des plugins n'est pas
bidouillesque. Les plugins sont supportés officiellement, listés et
installables depuis l'interface d'administration de Jenkins.
Configurer SVN pour le projet se borne à définir l'URL du projet et configurer
l'authentification.
![Configure SVN](/images/06x/configure-repository.png)
Une section Maven définit les "goals" à exécuter et le chemin du fichier de
build POM.XML. Les "goals" 'clean' 'install' sont les cibles classiques pour
nettoyer puis reconstruire tout le projet.
![Maven Goals](/images/06x/maven-goals.png)
Le build peut être déclenché de plusieurs manières: manuellement ou
automatiquement. Dans ce dernier cas, ce peut être sur changement des sources
dans le gestionnaire de sources, indirectement dans le cas de multi-projets
ayant des dépendances (où l'on recompile le projet B chaque fois que le projet
A est construit). Il y a d'autres cas plus spécifiques, voire très
particuliers :-) gérés par des plugins.
Dans notre exemple je reste simple et je définis un déclenchement de build du
projet sur modification du gestionnaire de source. De manière similaire à
l'outil CRON, on peut définir le mot-clef '@hourly' qui signifie qu'une fois
par heure Jenkins regarde si quelque chose à changé sur SVN (c'est à dire si
un développeur a publié du nouveau code).
![Trigger Build](/images/06x/trigger-build.png)
Dans le cas de mon projet dont la compilation prend une vingtaine de minutes
c'est une valeur sensée. Quand l'intégration continue est présentée aux
développeurs, il prennent rapidement leur marque par rapport au fait que le
projet est vérifié chaque début d'heure et ils évitent quelques pièges :
* morceler des 'commits' qui ne compilent pas (ce qui est une mauvaise pratique en
soi) et pire, publier un peu avant l'heure entière ce qui augmente le risque de
casser le build de l'intégration continue pendant la prochaine heure,
* publier en fin d'heure, ce qui limite les chances de rattraper le coup en cas de
problème inattendu.
Le dernier point restant à voir pour boucler l'exemple, c'est la notification
des développeurs quand l'intégration continue échoue. Là aussi on peut
élaborer un système complexe, toute une catégorie de plugins existe pour
s'interfacer avec des systèmes existants (SCM, Messengers) ou rester basique et
envoyer une notification par email.
![Notification](/images/06x/notify-build-errors.png)
Jenkins CI conserve un certain nombre de builds et il affiche une météo du
build en fonction de la stabilité des derniers résultats. En cas d'erreur, il
envoie les parties pertinentes. Si cela ne suffit pas à identifier la cause de
l'erreur, toutes les traces de console sont conservées et attachées à chaques
build.
Jenkins CI peut être mis en œuvre en moins d'une journée sur un projet simple
et ainsi apporter les bénéfices d'une intégration continue à une équipe de
développeurs et de testeurs. Mais l'outil est d'une telle richesse qu'il peut
apporter beaucoup plus :
* support de projets complexes par une architecture maître/esclave pour
déléguer la construction de sous-parties du projet,
* support de langages / systèmes de builds / gestionnaires de sources très
étendu,
* déclenchement de tâches post-build pour générer des rapports (analyse de la
qualité du code, couverture du code par des tests), déployer les versions
produites automatiquement.
Né du fork de Hudson l'année dernière (suite à un différent avec Oracle),
Jenkins CI est un projet open source (sous licence MIT) en plein essor, ce que
confirme le rythme régulier des sorties et l'activité de son forum.

@ -0,0 +1,51 @@
---
layout: post
title: Mes applications pour Blackberry
category: Mobilité
---
Après une longue période sous Android j'ai migré vers Blackberry.<!-- more --> Certes,
Android est ce qui s'approche le plus d'un OS libre (on peut même le
[degoogler](http://blogduyax.madyanne.fr/index.php?article41/syncml) ) mais j'ai
eu envie de découvrir autre chose : d'abord un système non tactile, ça peut
sembler à un retour en arrière mais ça me correspond bien (ça me rappelle
mon Nokia E61), une vraie bouffée d'air frais même après une période à
subir les erreurs de jeunesse d'Android. On dit souvent "terminal Blackberry" et
j'ai compris ce terme à l'utilisation : on est plus face à un téléphone
ultra-communiquant qu'une tablette avec option téléphone. C'est d'ailleurs mon
principal grief contre l'Android d'aujourd'hui : qu'on ait laissé autant de
liberté aux applications de dégrader le système voire le planter. Bon
attention, ce n'est pas un article pro-blackberry Mais j'apprécie la cohérence
de son système (même s'il est rustique), sa stabilité et son autonomie
(grâce à la technologie Push). Le point faible est bien sûr le nombre
d'applications disponibles, ce qui devrait s'améliorer les mois à venir.
Néanmoins, si on a des besoins limités et orientés professionnel on trouve
son bonheur. Voici la sélection des applications qui me sont indispensables :
* Imo Instant Messenger : comme Meebo c'est un service Web 2.0 qui permet de
créer un compte unique chez eux pour accéder à ses comptes Jabber, Skype, et
autres. Mais il permet aussi de se connecter individuellement à ses comptes
multi-protocoles et il propose une application pour Blackberry, officiellement
en bêta mais qui fonctionne très bien et n'inonde pas de publicité. Vu la
pauvreté des clients Jabber dans le BlackBerry Store c'est une aubaine.
* BBSSH : un fabuleux client SSH sous licence GPL.
* mProductive : une applications commerciale de gestion du temps qui centralise
intelligemment les évènements du calendrier, les tâches et les mémos. Après
avoir testé toutes celles du BB Store en essai gratuit je me suis résolu à
investir 5$ dans mProductive Lite et je ne le regrette pas, je l'utilise
quotidiennement.
* Poynt : un classique qui permet de trouver des points d'intérêt proches de
vous (restaurants, pharmacies...)
* FidMe : un autre classique qui existe pour d'autres plateformes, permettant de
stocker vos cartes de fidélité.
* France 24 : une des rares applications permettant de visionner le journal TV. On
la trouve sur le BB Store.
Si vous avez quelques perles à partager n'hésitez pas à laisser un
commentaire.
Je rassure ceux qui me connaissent je nage toujours dans l'Android : j'ai
installé une pre-Cyanogen 9 sur une tablette Nook et Cyanogen 7.1 sur un
Motorola Defy la semaine dernière :-)

@ -0,0 +1,26 @@
---
layout: post
title: Chive passe en version 1.1
category: Archlinux
tag: planet
---
Le gestionnaire de base MySQL alternative crédible et sexy à phpMyAdmin, le
bien nommé [Chive](http://www.chive-project.com/) est sorti en version 1.1.<!-- more -->
C'est une version considérée majeure par ses développeurs qui apporte deux
fonctionnalités :
* la première passe inaperçue pour l'utilisateur lambda que je suis : la
possibilité d'empaqueter Chive en tant qu' archive Phar. C'est utile à ceux
qui déploient Chive le temps d'un développement sur un serveur Web tiers - qui
a dit "squat moderne" ;-) - car on ne déploie qu'une archive et PHP l'exécute
sans l'extraire.
* la seconde est le remplacement de l'éditeur de code SQL "maison" par l'éditeur
ACE, projet soutenu par la fondation Mozilla. C'est un changement qui sera
bénéfique pour le produit en terme de maintenabilité et de qualité du code.
Rajoutez à ces deux changements quelques correctifs et on obtient le
millésimé 1.1 de ce beau projet. J'ai mis à jour le paquet
[AUR](http://en.wikipedia.org/wiki/Arch_Linux#Arch_User_Repository) pour la
distribution [ArchLinux](http://www.archlinux.org/).

@ -0,0 +1,35 @@
---
layout: post
title: Ranger son cartable
category: Humeur
tag: planet
---
Les vacances approchent ! Avant d'aller construire des châteaux de sable, c'est
le bon moment pour mettre de l'ordre dans ses dossiers, faire le point sur
l'année professionnelle écoulée et... tenir à jour son curriculum vitae.<!-- more --> [La
dernière fois que je m'étais prêté à
l'exercice](http://blogduyax.madyanne.fr/index.php?article25/decouvrir-latex)
avait été l'occasion de me familiariser avec LaTeX, d'apprécier la clarté du
langage et la qualité du rendu en PDF avec pdflatex. J'ai décidé de continuer
sur la même voie, avec l'objectif de produire une mise en page moins austère
à défaut de pouvoir rajeunir le candidat ;-)
<img src="/images/06x/trollface_cv.png" width="50%" height="50%" alt="CV
de Jean Code" style="float:left; margin: 0px 20px;" /> En cherchant des idées
de mise en forme j'ai découvert [moderncv](http://www.ctan.org/pkg/moderncv),
une classe de document LaTeX qui permet de structurer le document par des
commandes supplémentaires (définir les données personnelles, définir une
entrée d'expérience,...) et choisir une mise en forme (casual, classic) en
fonction des goûts.
J'ai utilisé la version 1.0 sortie cette année avec Tex 2012. Sous Fedora 17,
ma nouvelle distribution, les paquets Tex sont anciens. J'ai tenté
l'installation expérimentale de Tex 2012 évoquée sur le Wiki de Fedora mais
elle semble incomplète. Le mieux c'est de se référer à [la distribution Tex
Live](http://www.tug.org/texlive/) et d'utiliser [l'installateur
léger](http://www.tug.org/texlive/acquire-netinstall.html) qui télécharge et
installe Tex depuis le réseau.
Pour inspirer ceux qui se veulent se lancer sans partir de zéro, le CV complet
de Jean Code est téléchargeable [ici](/documents/moderncv.zip).

@ -0,0 +1,12 @@
---
layout: post
title: Bonne rentrée
category: Humeur
---
Le blog n'est pas mort même si son auteur passe beaucoup de temps à regarder
la série Walking Dead ces dernières semaines ;-)<!-- more --> Comme chaque année, entre
les vacances et la rentrée, GNU/Linux est passé en priorité basse. Mais
l'envie reste intacte et un récent changement professionnel (oui encore) me
permet d'explorer de nouveaux usages et d'utiliser de nouveaux projets libres
qui devraient inspirer des articles les semaines à venir.

@ -0,0 +1,37 @@
---
layout: post
title: Compilation de Tuxboot sur Fedora 17
category: GNU/Linux
tag: planet
---
Tuxboot est un fork de Unetbootin qui permet de créer une version USB de
**Clonezilla live** et **GParted live**, <!-- more -->ainsi que DRBL live et Tux2live. C'est
l'outil recommandé par Clonezilla pour créer une clef USB Clonezilla Live. Ils
fournissent des paquets pour Debian et les sources. Etant sur Fedora 17, j'ai
opté pour la compilation à partir des sources :
* Récupérer les sources sur le site de Tuxboot (http://tuxboot.org) :
tuxboot-0.4.src.tar.gz
* Installer les outils de développement QT nécessaires à la compilation : yum
install qt-devel
* Installer les paquets 7z recommandés pour l'exécution : yum install p7zip
p7zip-plugins
* Décompresser l'archive dans un répertoire de travail : tar xvf
tuxboot-0.4.src.tar.gz
* Suivre la procédure du fichier INSTALL fourni en adaptant les noms des
exécutables pour Fedora
Voici le source du fichier INSTALL
``` shell
cp tuxboot.pro tuxboot-pro.bak
sed -i '/^RESOURCES/d' tuxboot.pro
lupdate-qt4 tuxboot.pro
lrelease-qt4 tuxboot.pro
qmake-qt4 "DEFINES += NOSTATIC CLONEZILLA" "RESOURCES -= tuxboot.qrc"
make
mv tuxboot-pro.bak tuxboot.pro
```
Si la compilation se passe bien, l'exécutable tuxboot est créé.

@ -0,0 +1,50 @@
---
layout: post
title: Eclipse Juno sous GNU/Linux
category: Développement
tag: planet
---
La dernière version d'Eclipse, sortie en juin dernier, a pour nom de code
**Juno**. Eclipse c'est un [IDE](http://fr.wikipedia.org/wiki/Environnement_de_d
%C3%A9veloppement_int%C3%A9gr%C3%A9) pour le développement Java <!-- more -->bâti sur une
plateforme ouverte, extensible à au possible par le biais de plugins. Du coup,
Eclipse est livré sous licence EPL (Eclipse Public License), une licence
reconnue libre par la FSF mais moins contraignante que la GPL avec laquelle est
est incompatible d'ailleurs, afin de permettre à des éditeurs de bâtir des
logiciels propriétaires (ou privateurs selon les termes de Richard Stallman) en
s'appuyant sur sa plateforme.
Selon sa distribution (Debian-based, Fedora, Arch ou autre), on peut utiliser le
système de paquets pour installer Eclipse mais je trouve préférable
d'installer manuellement en téléchargeant depuis [le site
officiel](http://www.eclipse.org/) car la plateforme est décomposée en un
certain nombre de sous-projets et différents assemblages peuvent téléchargés
depuis le site (Eclipse for Java EE, Eclipse for Java, Eclipse Classic). En
installant manuellement on s'évitera les problèmes de mise à jour non
maîtrisés et les problèmes de dépendances manquantes entre sous-projets.
Après avoir démarré Juno, deux éléments visuels m'ont choqué : le
dégradé de la barre d'outil et la taille de fonte excessive de certains
titres.
![Juno](/images/07x/eclipse-ui.png)
Personnaliser l'apparence d'Eclipse a toujours été un peu casse-tête. Le menu
apparence dans les préférences regorge d'options pour modifier l'apparence des
différents éditeurs de code (Java, XML,...) mais rien pour certains aspects
globaux comme ceux qui dérangent justement.
Dans ce cas, la solution vient d'une extension qui permet de modifier la CSS
définissant ces aspects de l'interface. Pour cela, il faut installer le plugin
**E4 CSS Editor** depuis le site suivant : [http://download.eclipse.org/e4/updat
es/0.12](http://download.eclipse.org/e4/updates/0.12).
![CSS](/images/07x/css-editor.png)
Une fois l'éditeur CSS installé, il s'active quand on ouvre l'option
Préférences / Apparence dans le menu Windows. Pour diminuer la fonte et
harmoniser le style de la barre d'outils avec le reste de l'interface, il faut
appliquer la modification suivante (la version modifiée est à droite) :
![Diff](/images/07x/css-diff.png)

@ -0,0 +1,118 @@
---
layout: post
title: Installer SABnzbd derrière Nginx
category: Hébergement
---
[SABnzbd](http://sabnzbd.org/), comme son nom ne l'indique pas vraiment, est un
lecteur de news binaires. <!-- more -->Il permet de récupérer des fichiers depuis
[Usenet](http://fr.wikipedia.org/wiki/Usenet). C'est une application serveur,
qu'on héberge derrière un serveur Web, et qui offre une interface de gestion
depuis un navigateur. Il faut bien sûr l'associer à un compte chez un
fournisseur Usenet. Je ne détaille pas plus l'utilisation de l'outil, le site
officiel est suffisamment documenté, mais plutôt son installation dans le
cadre de l'auto-hébergement avec le serveur Web Nginx en frontal et non pas le
traditionnel Apache.
Depuis [la page de téléchargement](http://sabnzbd.org/download/) on peut
télécharger les sources Python. Les manipulations suivantes sont réalisées
sur une Debian 6 avec Python, Nginx et OpenSSH installés.
``` shell
# on installe sous /srv
cd /srv
wget http://sourceforge.net/projects/sabnzbdplus/files/sabnzbdplus/0.7.6/
SABnzbd-0.7.6-src.tar.gz/download -O SABnzbd-0.7.6-src.tar.gz
tar xvf SABnzbd-0.7.6-src.tar.gz && rm -f SABnzbd-0.7.6-src.tar.gz
# on crée un lien symbolique /srv/sabnzbd pour gérer aisément les futures mises à jour
ln -s SABnzbd-0.7.6 sabnzbd
```
L'étape suivante consiste à démarrer SABnzbd pour définir sa configuration
générale et **aussi restreindre l'adresse d'écoute** à l'interface localhost
(127.0.0.1) pour forcer le passage par Nginx et son authentification que nous
allons mettre en place par la suite. On peut automatiser le démarrage en
rajoutant un script sabnzbd sous /etc/init.d tel que celui-ci :
``` shell
### BEGIN INIT INFO
# Provides: sabnzd
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $all
# Should-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start/stop Sabnzbd
# Description: Start/stop Sabnzbd
### END INIT INFO
PATH=/sbin:/bin:/usr/sbin:/usr/bin
. /lib/lsb/init-functions
if [ "$#" -ne 1 ]; then
log_failure_msg "Usage: /etc/init.d/sabnzd" \
"{start|stop}"
exit 2
fi
case "$1" in
start)
python /srv/sabnzbd/SABnzbd.py -d -f /root/.sabnzbd/sabnzbd.ini
exit $?
;;
stop)
/usr/bin/wget -q --delete-after "http://localhost:7777/sabnzbd/api?mode=shutdown
&apikey;=24be83f61210daad59aa0e90223ccd4f"
exit $?
;;
*)
log_failure_msg "Usage: /etc/init.d/sabnzbd" \
"{start|stop}"
exit 2
;;
esac
log_failure_msg "Unexpected failure, please file a bug."
exit 1
```
On active ce script sous Debian avec update-rc.d sabnzbd defaults. Finalement on
configure Nginx comme proxy. Je me suis borné à un accès HTTP protégé par
une authentification utilisateur / mot de passe mais HTTPS est recommandé.
``` nginx
server {
listen 80;
server_name www.yourserver.yourdomain;
root /var/www/www;
access_log /var/log/nginx/www.access.log;
error_log /var/log/nginx/www.error.log;
location /sabnzbd {
auth_basic "Restricted area";
auth_basic_user_file /var/www/htpasswd;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:7777/sabnzbd;
}
}
```
Pour la création du fichier d'authentification **htpasswd** je vous renvoie à
la [FAQ de Nginx](http://wiki.nginx.org/Faq#How_do_I_generate_an_htpasswd_file_w
ithout_having_Apache_tools_installed.3F) car plusieurs méthodes sont possibles.
Gare à sécuriser son accès et à le placer hors des répertoires servis par
Nginx. A ce stade SABnzbd fonctionne à moitié :-) En effet SABnzbd ne va pas
servir toutes les ressources (HTML / CSS) et il faut les lier statiquement à
Nginx.
``` shell
# on lie les ressources statiques du thème Plush
mkdir -p /var/www/www/sabnzbd
ln -s /srv/sabnzbd/interfaces/Plush/templates/static /var/www/www/sabnzbd/static
ln -s /srv/sabnzbd/interfaces/Config/templates/staticcfg /var/www/www/sabnzbd/staticcfg
```

@ -0,0 +1,28 @@
---
layout: post
title: Bilan de l'année 2012
category: Humeur
tag: planet
---
L'année a été bien remplie ! Au niveau de mon implication dans le logiciel
Libre, je n'ai pas réalisé tout ce que j'avais en tête, par manque de temps,
mais je me suis vraiment fait plaisir.<!-- more --> Après un premier semestre où j'avais
carte blanche pour le choix des outils de l'équipe et où j'ai mis en place le
serveur de développement (Debian, Subversion, Redmine, Jenkins, Sonar), j'ai
intégré une nouvelle société avec une double casquette développeur Java /
admin système GNU/Linux qui m'amène à mettre en place des solutions de Haute
Disponibilité.
<img src="/images/07x/calendar.png" style="float:left; margin: 0px 20px;"
/> Sinon ma belle découverte de l'année c'est Fedora que j'utilise au travail et
à la maison depuis 6 mois. Alors que j'ai surtout utilisé des distributions
basées sur Debian hormis ArchLinux par le passé, j'ai été enchanté par le
spin XFCE de Fedora 17. Mon portable relativement récent est correctement
géré *"out of the box"*, les dépôts Fedora sont plutôt complets et
généralement on trouve une version RPM des logiciels moins libres. L'outil de
gestion de paquets Yum est bluffant par sa rapidité grâce à un système de
téléchargement différentiel qui permet d'économiser de la bande passante.
Vivement Fedora 18 :-)
Bonnes fêtes de fin d'année à tous !

@ -0,0 +1,81 @@
---
layout: post
title: Marre des aquariums
category: Humeur
tag: planet
---
Deux expériences récentes m'ont conforté dans l'importance de supporter le
Libre et rappelé que la bataille ne se joue pas que dans la sphère
professionnelle, bien au contraire.<!-- more -->
Par confort (et la faiénantise n'est jamais loin), j'avais acheté un boitier
multimédia il y a 3 ans à l'époque ou le Media Player de mon fournisseur
Internet montrait ses limites à streamer certains formats vidéo du PC à la
TV. Le boitier a bien rempli son rôle, on l'allume en même temps que la TV, il
démarre en 3s et il décode quasiment tout. Simple comme un téléphone à
compote ;-) Seulement deux ans plus tard, on est passé de "il décode quasiment
tout" à "il décode pas mal de trucs". Confiant, je saute sur mon panda roux
pour naviguer sur la toile, me disant qu'il existe probablement des mise à jour
de firmware chez le constructeur ou mieux un firmwware alternatif développé
par des passionnés qui rajoute des fonctionnalités. Et bien choux blanc ! Le
constructeur préfère sortir des nouveaux modèles que rallonger la durée de
vie des anciens. Rien d'étrange à cela, il s'agit d'une société commerciale
dont l'objectif premier est de réaliser du chiffre d'affaire. Quant aux
passionnés, ils existent certainement mais soit le boitier multimédia est
très bien verrouillé, soit le challenge attire moins les foules que craquer la
dernière console à la mode. Au final, je me retrouve avec un boitier
multimédia en fin de vie car son logiciel n'a pas évolué depuis 2010.
Sanction méritée ! J'ai clairement manqué de nez en choississant un
constructeur qui ne déverrouille pas ses firmware, qui n'anime pas une
communauté de passionnés de ses produits. A refaire aujourd'hui, je miserai
sur un mini PC avec une GeeXboX ou un truc du genre, en tout cas une solution
plus pérenne où le logiciel n'est pas fermé.
La deuxième expérience ou plutôt désillusion concerne la nouvelle console
portable de Sony. C'est Noël et l'unique cadeau que désire mon fils c'est une
Vita. C'est cher mais toute la famille met la main à la poche et on achète le
fantasme. La console est offerte avec deux jeux. Première chose qui me fait
tiquer, pas de jeu dans le carton mais deux coupons pour les télécharger sur
le Store. Adieu donc la possibilité de les revendre à la boutique d'occasion
du coin quand on en sera lassé afin d'acheter un autre titre. Etant moi-même
un joueur occasionnel sur PC avec un compte Steam je digère l'info : on (et je
m'inclus) a tué le marché de l'occasion PC, celui des consoles va suivre et
nous crèverons avec nos identifiants en emportant nos téléchargements dans la
tombe (je vous renvoie à la chanson 'Société Anonyme' d'Eddy Mitchell). En
bon parent, nous suivons les règles établies : j'ai un compte principal car je
suis majeur et je crée un compte secondaire pour un enfant de 10 ans qui est
associé à la console. Et là, la blague commence. On peut autoriser de jouer
un titre interdit aux -18 ans dont on a la cartouche par l'application contrôle
parental de la console, mais on ne peut pas télécharger depuis le Store un des
deux jeux offerts interdit aux -12 ans. Pour cela il n'y a aucun paramètre. On
pourrait s'attendre à un système de notification du compte principal qui
pourrait approuver ou non, après tout ils ont nos emails, en plus de nos âges
et nos adresses :-( Mais visiblement, Sony s'est protégé à fond et a nivelé
par le bas en mettant en place une politique de sécurité dure et identique
pour tous les continents. Donc au final que fait-on ? Et bien on ment en
conséquence de cause. On crée un autre compte secondaire en augmentant l'âge
de son enfant afin qu'il puisse jouer à son jeu. Le constructeur de la console
est tranquille, il a rempli son devoir de garde chiourme et c'est le parent qui
prend la décision de tricher pour biaiser le système de protection mal pensé.
Que faut-il en conclure ? Et bien plusieurs choses je crois:
* Qu'il n'y a pas que des OS de la banquise chez moi. Par facilité, par manque
d'alternative et parce que, comme le disait récemment Cyrille on ne peut pas
imposer de force nos idées à nos proches, on fait entrer des objets connectés
non libres du 21ème siècle dans la maison.
* Avec le sourire et en tendant la carte bleue nous sommes en train de nous
enfermer volontairement dans des beaux aquariums multicolores, où nager est un
plaisir des yeux jusqu'à ce qu'on s'écrase le nez sur la vitre. C'est le point
le plus inquiétant pour moi : la multiplication des Store auquels on se soumet
avec la satisfaction imbécile d'appartenir à son siècle et de participer au
progrès.
* A chacun de balayer devant sa porte. Pour ma part, je vais engager l'année avec
l'esprit des deux dernières années : en restreignant les besoins artificiels,
en réfléchissant d'abord à l'adéquation entre le besoin et l'objet lors d'un
achat ainsi qu'à la pérennité de la solution. La sphère familiale et ludique
ne doit pas être sous-estimée c'est là que se jouent maintenant les batailles
qui définiront nos libertés demain.

@ -0,0 +1,55 @@
---
layout: post
title: Mise à jour de Fedora 17 vers Fedora 18
category: GNU/Linux
tag: planet
---
15 Janvier 2013 : c'est la sortie officielle de la Fedora 18, très attendue car
sa sortie fût décalée plusieurs fois, ce qui est à l'honneur des
développeurs<!-- more --> : sortir quand le niveau de qualité est atteint malgré le fait
qu'on soit une distribution mainstream très attendue. Je vous renvoie à
[l'article très complet posté par Renault sur LinuxFR pour la liste des
nouveautés.](http://linuxfr.org/news/sortie-de-fedora-18-alias-spherical-cow).
Moi je faire un retour d'expérience rapide sur une mise à jour réussie depuis
le Spin XFCE de Fedora 17.
[FedUp](http://fedoraproject.org/wiki/FedUp) est le nouvel outil pour gérer
les mises à jour de Fedora 17 et ultérieur. Voici les étapes que j'ai suivi
pour mettre à jour ma distribution :
* s'assurer que le système est à jour : yum upgrade. Puis redémarrer la machine
si le Kernel a été mis à jour.
* installer FedUp : yum --enablerepo=updates-testing install fedup
* désactiver tous les dépôts tiers définis tels que RPM Fusion. En ligne de
commande, cela consiste à rajouter enabled=0 aux fichiers.repo que l'on trouve
sous /etc/yum.repos.d.
* se déconnecter graphiquement et lancer FedUp en tant que root ou avec sudo
depuis un VTY : fedup-cli --network 18 --debuglog fedupdebug.log
* s'armer de patience, les téléchargements des paquets F18 commencent. Quand
c'est terminé, FedUp demande de redémarrer la machine. C'est au redémarrage
que le processus de mise à jour est effectué. Je ne sais pas exactement
combien de temps cela prend, j'ai dormi ;-)
Si tout se passe bien, on se retrouve avec une Fedora 18 opérationnelle. La
commande **uname -r** indique qu'on est passé en kernel 3.7.2-201.fc18.x86_64.4
Pour être complet, on peut aussi mettre à jour Grub 2 manuellement [comme
indiqué sur la page Wiki de FedUp](http://fedoraproject.org/wiki/FedUp#How_Can_
I_Upgrade_My_System_with_FedUp.3F).
**[EDIT]** J'ai remarqué que le nouveau pare-feu ne fonctionnait plus même
après l'installation des paquets firewall-config et firewall-applet. Le service
démarre, on peut modifier la configuration mais elle n'est pas prise en compte.
Il semble qu'un coup de **yum -y distro-sync** finalise la mise à jour en
supprimant les paquets obsolètes. Le pare-feu est opérationnel au
redémarrage. Ce nouveau pare-feu mériterait d'ailleurs un article : plus
simple et plus clair à configurer, gestion de 2 configurations (la courante et
la stockée).
Certains paquets obsolètes peuvent rester. Les [conseils de
llaumgui](http://www.llaumgui.com/post/fedora-17-in-da-place) restent
d'actualité.
J'ai aussi eu un problème avec la gestion de l'énergie interceptée par
systemd avant XFCE. C'est résolu [dans ce
post.](http://comments.gmane.org/gmane.linux.redhat.fedora.general/423516)

@ -0,0 +1,57 @@
---
layout: post
title: Migration du blog sous Pelican
categories: Blog Hébergement
tag: planet
---
Et oui, un de plus à migrer son blog sous [Pelican](http://docs.getpelican.com) !<!-- more -->
J'ai lu plusieurs récits de migration depuis trois mois, ce qui dénote un
engouement certain pour ce moteur de blog par... essentiellement des développeurs.
La perspective de gérer ses articles comme du code, avec un
article par fichier, de construire le blog avec une commande 'make' et
publier dans un gestionnaire de source nous ramène en terrain familier.
Les points suivants ont achevé de me convaincre :
* l'écriture dans une syntaxe simplifiée (un markup langage) ; j'ai opté pour
[Markdown](http://daringfireball.net/projects/markdown/). Je peux commencer
l'écriture d'un article depuis n'importe quel équipement, même l'application mémo
de mon téléphone.
* la possibilité de tout gérer depuis un terminal en mode texte, de
l'écriture d'un article à sa publication. Ce qui me permet de travailler
facilement depuis n'importe où avec une connexion SSH sur mon serveur
* La génération de pages statiques. Adieu PHP, on peut héberger encore plus
facilement.
En fait c'est le prolongement du raisonnement qui m'avait fait passer de
WordPress à [PluXml](http://www.pluxml.org).
L'import depuis PluXml est faisable par l'import RSS mais la conversion en Markdown est
approximative. J'ai donc écrit un outil de migration dédié en langage Python. Ce
qu'il apporte c'est une mise en forme plus fidèle lors de la conversion en
Markdown, une gestion des catégories **et des tags**. Il ne couvre peut-être
pas tous les cas mais il m'a permis de migrer mes articles sans retouche
manuelle. Cet outil est disponible sur mon compte GitHub :
[PluXml2Pelican](http://github.com/kianby/pelican)
Pour les thèmes c'est selon les goûts de chacun. Pelican fournit un langage de
templating Python [Jinja 2](http://jinja.pocoo.org).
A chacun de voir s'il veut un thème simple ou un thème plus dynamique avec du
JavaScript. Quelques thèmes d'exemple sont fournis sur
[GitHub](http://github.com/getpelican/pelican-themes). Pour ma part, Je suis parti d'un thème
basé sur [Bootstrap](http://twitter.github.com/bootstrap), le kit CSS qui permet
facilement de faire du Responsive Design afin d'avoir un site qui s'adapte à
tous les périphériques Web (ordinateurs de bureau, tablettes, téléphones) et je
l'ai adapté à ma sauce.
En résumé, Pelican est un très beau projet. Sous le capot, on trouve un outil
bien pensé, dans l'esprit du langage Python. Il est possible de développer des
plugins qui effectueront des actions à différentes phases de la génération des
pages HTML. Le seul point manquant, c'est le support des commentaires.
Normal pour un outil qui génère des pages statiques. La solution proposée consiste
à déléguer cette tâche à Disqus, un service Web privé. Cela ne me convient pas du tout,
je me suis auto-hébergé pour garder la main sur mes données. J'ai gardé les
commentaires de tous les articles et je cogite à une solution alternative....
En attendant, j'ai ouvert un email pour le blog qu'on peut utiliser pour
échanger : <i class="icon-envelope"></i> blogduyax at madyanne.fr

@ -0,0 +1,260 @@
---
layout: post
title: Haute Disponibilité avec Corosync et Pacemaker
category: Cluster
tag: planet
---
La Haute Disponibilité désigne toutes les techniques permettant d'améliorer
la disponibilité d'un système ou de services et d'augmenter la tolérance aux pannes<!-- more --> :
la redondance matérielle, les clusters, la réplications des données à chaud
physiquement (RAID 1 et RAID 5) ou logiciellement (Snapshots, DRBD), les scénarios
de crise (mode dégradés, plan de secours). Dans une grande entreprise, cela
peut donner lieu à un poste à responsabilité à plein temps. Mon activité professionnelle
m'a amené à mettre en oeuvre une facette de cette problématique : un cluster
actif / passif qui assure la disponibilité d'un service applicatif.
Pour GNU/Linux, j'ai expérimenté deux logiciels permettant de gérer une infrastructure
de cluster :
* Heartbeat qui a fait ses preuves mais qui est limité : pas de cluster à plus de 2 noeuds,
pas de gestion très fine des ressources et des règles pour basculer d'un noeud sur l'autre.
* [Corosync](http://www.corosync.org) et [Pacemaker](http://clusterlabs.org/wiki/Main_Page) :
c'est le choix de la distribution Red Hat et celui que je vais détailler dans la suite de cet article.
J'ai monté une maquette assez représentative composée de deux machines virtuelles Debian Wheezy
(en version presque finale) avec 4 interfaces réseaux chacune qui font tourner un service Apache
qu'on accède par une adresse IP gérée par le cluster.
Voici un diagramme réseau de la maquette :
![maquette](/images/2013/maquette-cluster.png)
Les interfaces eth0 et eth1 font partie d'une agrégation logique de liens et
servent au cluster pour vérifier l'état des autres noeuds. Elles constituent un
réseau privé avec l'autre noeud dans le réseau 10.20.13.0/255.255.255.252.
Les interfaces eth2 et eth3 font partie d'une autre agrégation logique,
elles fournissent le service à l'extérieur dans le réseau 192.168.1.0/24.
L'agrégation logique (appelé aussi bonding) fournit une redondance supplémentaire. Si
l'adaptateur réseau eth0 grille, le trafic transite encore grâce à eth1. On
peut la configurer en mode actif/passif ou bien en mode load-balancing.
Voici la configuration des interfaces sur la machine vm-node1 dans **/etc/network/interfaces/** :
auto bond0
iface bond0 inet static
address 10.20.13.1
netmask 255.255.255.252
bond_mode active-backup
bond_miimon 100
bond_downdelay 200
bond_updelay 200
slaves eth0 eth1
auto bond1
iface bond1 inet static
address 192.168.1.61
netmask 255.255.255.0
gateway 192.168.1.1
bond_mode active-backup
bond_miimon 100
bond_downdelay 200
bond_updelay 200
slaves eth2 eth3
et la configuration du bonding dans **/etc/modprobe.d/bonding** :
alias bond0 bonding
alias bond1 bonding
La configuration réseau de la machine vm-node2 est symétrique avec bond0 en
10.20.13.2 et bond1 en 192.168.1.62.
Quand la configuration réseau est ok, on peut s'occuper du cluster. D'abord il faut installer
Corosync et Pacemaker, c'est trivial sous Debian :
apt-get install corosync pacemaker
Ensuite il faut configurer Corosync. Il gère l'infrastructure de cluster, c'est à dire l'état des noeuds et
leur fonctionnement en groupe. Pour cela, on doit générer une clef d'authenfication qui sera partagée par tous
les noeuds du cluster. L'utilitaire **corosync-keygen** permet de générer cette clef à partir d'entrées clavier
pseudo-aléatoires qu'il faut ensuite sécuriser et copier sur les autres noeuds.
``` shell
# génération de la clef depuis vm-node1
corosync-keygen
mv authkey /etc/corosync/authkey
chown root:root /etc/corosync/authkey
chmod 400 /etc/corosync/authkey
# copie de la clef sur vm-node2
scp /etc/corosync/authkey root@10.20.13.2:/etc/corosync/authkey
```
Corosync propose le concept d'anneaux de connexion pour assurer la communication entre noeuds. Dans le cadre de
la maquette je définis deux anneaux : **ring0**, l'anneau de communication par défaut qui utilise le réseau privé et
**ring1** un anneau de secours qui transite par l'intermédiaire des commutateurs (ou switchs) avec le reste du trafic.
C'est une sécurité de plus pour le cas improbable où les deux liens eth0 et eth1 soient cassés. Corosync
permet de définir les anneaux en terme de réseau IP / masque réseau plutôt que de définir les adresses IP.
C'est appréciable car le même fichier de configuration peut être déployé sur tous les noeuds sans rien changer.
totem {
version: 2
# How long before declaring a token lost (ms)
token: 3000
# How many token retransmits before forming a new configuration
token_retransmits_before_loss_const: 10
# How long to wait for join messages in the membership protocol (ms)
join: 60
# How long to wait for consensus to be achieved before starting
#a new round of membership configuration (ms)
consensus: 3600
# Turn off the virtual synchrony filter
vsftype: none
# Number of messages that may be sent by one processor on receipt of the token
max_messages: 20
# Limit generated nodeids to 31-bits (positive signed integers)
clear_node_high_bit: yes
# Disable encryption
secauth: off
# How many threads to use for encryption/decryption
threads: 0
# Optionally assign a fixed node id (integer)
# nodeid: 1234
# This specifies the mode of redundant ring, which may be none, active, or passive.
rrp_mode: passive
interface {
ringnumber: 0
bindnetaddr: 10.20.13.0
mcastaddr: 226.94.1.1
mcastport: 5405
}
interface {
ringnumber: 1
bindnetaddr: 192.168.1.0
mcastaddr: 226.94.1.1
mcastport: 5407
}
}
amf {
mode: disabled
}
service {
# Load the Pacemaker Cluster Resource Manager
ver: 0
name: pacemaker
}
aisexec {
user: root
group: root
}
logging {
fileline: off
to_stderr: yes
to_logfile: no
to_syslog: yes
syslog_facility: daemon
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
tags: enter|leave|trace1|trace2|trace3|trace4|trace6
}
}
A ce stade, l'infrastructure de cluster est en place mais elle ne gère aucune ressource. Ca c'est le
rôle de Pacemaker.
On impose les contraintes de fonctionnement suivantes :
1. les ressources (le service Apache et l'adresse IP du cluster) tournent sur le serveur vm-node1 dans le cas normal.
2. le service Apache et l'adresse IP du cluster doivent tourner sur le même serveur sinon notre service est injoignable.
3. si le service Apache se crashe sur le serveur primaire, on bascule sur le serveur secondaire.
4. si le serveur primaire ne joint plus la passerelle Internet, on bascule sur le serveur secondaire.
Pacemaker fournit quelques utilitaires en mode texte pour interagir.
* **crm** permet de gérer tout l'aspect configuration.
* **crm_mon** affiche l'état du cluster.
D'abord on définit la configuration globale. On désactive le **STONITH** (Shoot The Other Node In The Head) et
le **quorum**. Le Stonith est la possibilité de *tuer* l'autre noeud s'il ne répond plus par l'infra de cluster.
C'est faisable sur des vrais serveurs par [IPMI](http://fr.wikipedia.org/wiki/IPMI) par exemple.
Quant au quorum, il n'a pas de sens sur un cluster à moins de 3 noeuds.
property stonith-enabled=false
property no-quorum-policy=ignore
On peut maintenant définir notre première ressource : l'adresse IP du cluster attaché au noeud actif.
primitive vip ocf:heartbeat:IPaddr2 params ip=192.168.1.60 cidr_netmask=24 nic="bond1" op monitor interval="10s"
Puis la ressource Apache, le service critique qu'on veut fournir dans cette maquette :
primitive httpd ocf:heartbeat:apache params configfile="/etc/apache2/apache2.conf" statusurl="http://localhost/server-status" op start timeout="60s" op stop timeout="60s" op monitor timeout="20s"
Le démarrage et l'arrêt d'Apache sont maintenant gérés par le cluster. Il faut fonc enlever le démarrage
automatique du service. Sous Debian c'est avec update-rc.d :
update-rc.d -f remove apache2
Vous remarquerez qu'on va plus loin que la définition d'une ressource Apache. L'attribut **statusurl** permet à
Pacemaker d'utiliser la page de statut d'Apache pour décider d'une bascule. Il ne faut donc pas oublier de
configurer cette URL dans Apache pour que cela fonctionne :
``` apache
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
```
Comme on a construit la configuration pas à pas, **crm_mon** remonte peut-être des erreurs sur certaines
ressources car elle n'étaient pas opérationnelles. Il y a un compteur d'échec qui lève un message d'avertissement.
on peut remettre ce compteur à zéro comme ceci pour la ressource http :
crm resource cleanup httpd
A ce stade on a une adresse de cluster et une ressource HTTP, mais pas forcément sur le même noeud.
la ressource **vip** va basculer si le noeud tombe. La ressource **httpd** va basculer si le noeud tombe
ou si le service apache tombe (surveillance par l'URL /server-status).
C'est sympa mais pas très utile :-) On va aller plus loin et forcer les deux ressources à tourner sur le
même noeud C'est faisable grâce au concept de la colocation :
colocation httpd-with-vip inf: httpd vip
Et on voudrait que dans le cas normal, les ressources tournent sur vm-node1, notre noeud primaire :
location preferred-node vip 100: vm-node1
Enfin, on rajoute une condition de bascule. Si le noeud ne joint plus la passerelle Internet, on veut basculer les
ressources sur l'autre noeud Pour cela on définit une ressource de type *ping* qui tourne sur tous les noeuds
(grâce au concept de ressource clonée). Puis on rajoute une règle de location pour basculer si le noeud actif
ne voit plus la passerelle.
primitive ping-gateway ocf:pacemaker:ping params host_list="192.168.1.1" multiplier="1000" op monitor interval="10s"
clone cloned-ping-gateway ping-gateway
location vip-needs-gateway vip rule -inf: not_defined pingd or pingd lte 0
Voilà notre maquette est opérationnelle.

@ -0,0 +1,99 @@
---
layout: post
title: Enfin le silence
category: GNU/Linux
tag: planet
---
J'ai effectué la mise à jour de mon *véloce serveur* <i class="icon-smile"></i>
(un Dell latitude D610 sous Céléron) vers Debian Wheezy.<!-- more --> Ca s'est plutôt bien passé
en suivant [les conseils de Nicolargo](http://blog.nicolargo.com/2013/05/de-squeeze-a-wheezy.html).
J'ai seulement eu quelques problèmes avec l'interpréteur PERL, je me suis retrouvé
avec un mix : l'interpréteur 5.16.3 de Wheezy et d'anciens modules PERL.
Peut-être que j'avais installé ces librairies manuellement, je ne me souviens
pas trop. Ca c'est résolu avec un ménage à la mano des modules obsolètes et une
réinstallation propre avec CPAN. Désormais, tout est fonctionnel !
Jusqu'à aujourd'hui je limitais la charge processeur la nuit en stoppant
certains services pour éviter la nuisance sonore, typiquement, le serveur
Minecraft en JAVA qui consomme 3% de CPU quand personne n'est connecté.
J'utilise depuis longtemps le paquet **cpufrequtils** qui permet de moduler la
fréquence du processeur par un module du noyau selon une politique **on demand**
qui fait varier la fréquence du Celeron entre 800 Mhz et 1,6 Ghz. Mais j'ai
réalisé que malgré une charge minimale, la machine était souvent bruyante à cause du
ventilateur. Il devrait être régulé en fonction de la fréquence du
processeur, or ce n'est pas le cas.
En faisant des recherches sur le sujet, on
apprend que la partie régulation du processeur est souvent réalisée par ACPI,
une norme répandue de contrôle de la gestion de l'énergie par l'OS grâce à un
support ACPI dans le BIOS mais que la gestion du ventilateur n'est pas souvent
incluse. Cela va dépendre de l'implémentation ACPI d'un constructeur à l'autre.
[La documentation
ArchLinux](https://wiki.archlinux.org/index.php/Fan_Speed_Control) décrit
certaines méthodes qui vont dépendre du matériel et j'ai découvert **i8kmon** pour
mon petit Dell. Ca tourne en daemon dans le système et ça régule la vitesse du
ventilateur proportiennellement à la vitesse du processeur. Pour la
configuration, j'ai utilisé les seuils proposés dans le [post de ce
forum](http://forum.tinycorelinux.net/index.php?topic=10736.0) :
Fichier **/etc/i8kmon** :
```
# Kernel I8K status file
set config(proc_i8k) /proc/i8k
# Kernel APM status file
set config(proc_apm) /proc/apm
# Kernel ACPI status file
set config(proc_acpi) /proc/acpi/ac_adapter/0/status
# External program to control the fans
set config(i8kfan) /usr/bin/i8kfan
# Applet geometry, override with --geometry option
set config(geometry) {}
# Run as daemon, override with --daemon option
set config(daemon) 1
# Automatic fan control, override with --auto option
set config(auto) 1
# Report status on stdout, override with --verbose option
set config(verbose) 0
# Status check timeout (seconds), override with --timeout option
set config(timeout) 5
# Temperature display unit (C/F), override with --unit option
set config(unit) C
# Temperature threshold at which the temperature is displayed in red
set config(t_high) 80
# Minimum expected fan speed
set config(min_speed) 1800
# Temperature thresholds: {fan_speeds low_ac high_ac low_batt high_batt}
# These were tested on the I8000. If you have a different Dell laptop model
# you should check the BIOS temperature monitoring and set the appropriate
# thresholds here. In doubt start with low values and gradually rise them
# until the fans are not always on when the cpu is idle.
set config(0) { {- 0} -1 52 -1 52}
set config(1) { {- 1} 44 60 44 60}
set config(2) { {- 2} 60 80 60 80}
set config(3) { {- 2} 70 128 75 128}
```
Fichier **/etc/default/i8kmon**
```
# Change to one to enable i8kmon
ENABLED = 1
```
Le résultat est au rendez-vous. Quand la CPU est basse, le volume sonore de la
machine est inaudible. Il reste à vérifier que les seuils sont adaptés et que
le processeur ne fond pas dans les prochaines semaines <i class="icon-smile"></i>

@ -0,0 +1,74 @@
---
layout: post
title: Ma vie de sysadmin en semi-pro (1)
category: GNU/Linux
tag: planet
---
Par goût personnel et par nécessité professionnelle, je rajoute progressivement le rôle
d'administrateur système à mon métier de base qui est le développement de logiciels.<!-- more --> Doté de
bonnes bases UNIX et réseau, je découvre petit à petit les bon outils et les bonnes pratiques
pour faire le job, le simplifier voire l'automatiser. Et parfois j'enverrais volontiers une
caisse de bières à l'auteur d'un outil qui m'a sauvé plusieurs heures fastidieuses :-)
Dans cette série d'articles *ma vie de sysadmin en semi-pro* je parlerais épisodiquement de mes
avancées et de mes découvertes dans le domaine de l'administration système.
Tout d'abord la console est ta seule amie. Sur ton PC de bureau, la console est un choix. Dans
le monde des serveurs c'est un passage obligé car ils sont rarement installés avec une interface
graphique et on les accède généralement par SSH. Les outils de base sont connus mais il faut
apprendre à les maîtriser.
Ce qui propulse la console c'est un shell UNIX compatible Bourne Shell. Il y a plusieurs variantes :
le Bourne Shell d'origine (sh), le Bourne Again Shell (bash), Korn Shell (ksh), Z Shell (zsh). Des
experts sont capables de discuter de tel avantage de zsh par rapport à ksh. A mon niveau, maîtriser
**sh** et **Bash** qui est le choix par défaut d'un grand nombre de systèmes GNU/Linux est le choix
de la raison. On trouve beaucoup de littérature sur le sujet (le Bourne Shell existe depuis 1978 et
le Bourne Again Shell depuis 1989 ), ma référence est le guide **Advanced Bash-Scripting Guide** sur
[le site du Linux Document Project](http://www.tldp.org/guides.html). Ensuite il est bien sûr
important de connaître les programmes en ligne de commande nécessaires pour les tâches de tous les
jours : grep, find, locate, chmod, chown, cp, mv, mkdir, rm, rmdir, touch, top, kill, ps ... la
liste est loin d'être exhaustive.
Un autre élément important est éditeur de texte en mode console. Il doit être polyvalent, léger,
capable de traiter des fichiers de centaines de milliers de lignes. Deux candidats se détachent du
peloton : **Vim** et **Emacs**. Les deux sont beaucoup plus que de simples éditeurs de texte. Ayant
des rudiments de **Vi** depuis 20 ans, je me suis lancé à corps perdu dans l'apprentissage des
fonctions avancées de **Vim** Que du bonheur ! Voici quelques liens :
* [Vim FAQ](https://github.com/chrisbra/vim_faq)
* [Vimcasts - Vim podcasts](http://vimcasts.org)
* [Vundle - Vim Plugin manager](https://github.com/gmarik/vundle)
Quand on passe beaucoup de temps sur la console, on est à l'affut des manières de la rendre plus
attractive et plus puissante
* Le prompt du shell par défaut est minimaliste. Pourquoi ne pas l'enrichir avec des informations
utiles comme la charge processeur ou les infos de gestion de version (SVN, GIT) du répertoire
courant ? C'est ce que propose [le projet
LiquidPrompt](https://github.com/nojhan/liquidprompt).
* Le choix des couleurs est important quand on passe beaucoup d'heures devant une console. Je ne
parle pas de choisir une palette *cool* mais bien de préserver sa vue. J'ai fait le choix [du
schéma de couleur Solarized](https://github.com/altercation/solarized). Ca peut sembler un peu
pâlot au début mais je me suis vité habitué et je l'utilise dans chaque programme où c'est
possible. Dans le même registre, j'utilise [le projet RedShift](https://launchpad.net/redshift)
pour gérer la température des couleurs en fonction de l'heure de la journée et de votre
emplacement géographique. Les deux premiers jours, on a l'impression que la luminosité est trop
basse, ensuite on trouve cela normal. Et on se sent agressé quand on utilise une autre machine
que la sienne.
* On se retrouve vite à ouvrir quantité de terminaux et à jongler entre eux. J'ai utilisé
[Terminator](http://www.tenshu.net/p/terminator.html) un temps puis j'ai pris confiance et j'ai
eu besoin de multiplier les terminaux depuis une même session SSH et de lancer des traitements
qui tournent en tâche de fond. Du coup, j'ai pris le temps d'apprendre
[Tmux](http://tmux.sourceforge.net) et c'est un très bon investissement ! Un bon article pour
démarrer est [accessible
ici](http://blog.hawkhost.com/2010/06/28/tmux-the-terminal-multiplexer).
* Quand on *provisionne* des serveurs régulièrement, il est intéressant de déployer sa
configuration du shell, de l'éditeur de texte, ses outils afin de retrouver son environnement et
ses habitudes. On peut installer ses fichiers manuellement depuis un point central [comme son
GitHub](https://github.com/kianby/dotfiles), ou mieux on peut carrément automatiser cette partie
en utilisant un outil comme [Fabric](https://github.com/fabric/fabric).
Le choix des outils présentés dans cet articles est personnel. Ce qui est intéressant, c'est la
puissance de la console dans une utilisation quotidienne, la pléthore d'outils et le sentiment de
maîtrise de ce qu'on fait.

@ -0,0 +1,55 @@
---
layout: post
title: La rentrée 2013
category: Humeur
tag: planet
---
Le blog n'est pas abandonné ! C'est drôle, j'ai annoncé la même chose il y a
un an après la période d'inactivité qui accompagne l'été.<!-- more --> Ce n'est pas un blog
d'humeurs ou d'actualité mais plutôt un bloc-note de mes expérimentations autour
de GNU/Linux et du Libre. Donc pour écrire, il me faut un sujet que j'ai approfondi,
mis en oeuvre, à raconter. J'ai écrit très peu de billets depuis l'année dernière
mais je suis satisfait de leur qualité : distribution Fedora, migration du blog
sous Pelican, administration système. On va tenter de rester sur la même voie
cette année...
Pour ceux qui lisent le blog directement depuis le site, vous avez peut-être
constaté de légers changements dans le thème graphique du blog. Quand [j'ai
migré le blog depuis PluXml vers Pelican](migration-du-blog-sous-pelican.html),
j'ai utilisé Bootstrap pour rapidement refaire un thème similaire à ce que
j'avais. Dernièrement j'ai réalisé que les pages HTML du blog sont plutôt
lourdes. Bootstrap est une librairie CSS / JS qui fait beaucoup de choses mais
qui pèse avec, en plus, une dépendance à JQuery. Ca ne cadre pas avec la philosophie
d'un blog statique qui se résume, pour moi, en plusieurs critères :
* possibilité de gérer les sources avec un gestionnaire de version : GIT
dans mon cas
* possibilité d'éditer les articles simplement. C'est le cas avec un
langage de markup qui simplifie HTML. Pelican propose RST et Markdown
pour lequel j'ai une préférence même s'il est plus limité.
* ouverture vers n'importe quel éditeur de texte : j'utilise VIM, GEdit, le
bloc-note de mon téléphone.
* contrôle fin du code HTML généré : c'est le cas par un contrôle totale des
CSS et des templates Jinja utilisés par Pelican pour générer les pages.
Donc l'idée d'avoir un thème CSS léger avec le minimum de JavaScript a fait son
chemin. La dernière contrainte c'était d'avoir un zeste de *responsive design*
pour basculer la barre latérale de droite en fin de page quand la largeur de l'écran
n'est pas suffisante (sur téléphone ou tablette). J'aurais pu l'écrire *from
scratch* en passant vraiment beaucoup de temps ou en ayant un vrai talent de Web
designer comme mon confrère [Badele](http://blog.jesuislibre.org) mais j'ai préféré
chercher une alternative à Bootstrap qui réponde à ces critères. Et j'ai trouvé la
perle rare : [Pure](http://purecss.io), un module CSS qui se concentre sur
l'essentiel tout en étant **HTML5-ready** et **responsive design**. C'est très
récent, développé par Yahoo (l'équipe qui s'occupe du fameux framework
Yui). La documentation est de très bonne qualité, le positionnement est clair :
ne pas *refaire* Bootstrap, rester léger. La documentation sur les bonnes
pratiques pour étendre la CSS est exemplaire. Ah j'oubliais... c'est sous licence
BSD :-)
Enfin, la dernière évolution sur le blog, c'est la migration des commentaires de l'époque PluXml
et à nouveau un formulaire pour soumettre des commentaires sur les articles.
Bonne rentrée.

@ -0,0 +1,47 @@
---
layout: post
title: De l'auto-hébergement au serveur dédié
category: Hébergement
tag: planet
---
Après deux ans en auto-hébergement j'envisage de louer un serveur dédié
physique ou virtuel (les fameux VPS)<!-- more --> pour plusieurs raisons :
- l'augmentation du prix de l'électricité : mon antique portable consomme quand même 90W,
- la baisse du prix des serveurs dédiés,
- l'avantage d'avoir une bande passante non limitée par son upload ADSL pour les services proposés à l'extérieur.
J'ai regardé du côté de Dédibox et de OVH, on peut
avoir son propre petit serveur qui consommera moins de 10W, c'est
toujours ça pour l'environnement. Au niveau des besoins, il y a d'un côté
l'hébergement du blog et de mes outils collaboratifs et de l'autre le
serveur Minecraft. Le serveur Minecraft, c'est pas green IT du tout : du
JAVA, de la CPU à fond, beaucoup de RAM. Prendre un serveur couvrant les deux
besoins m'obligerait à choisir une machine puissante et assez coûteuse
alors que la mode Minecraft peut passer d'ici quelques mois. J'ai donc
décidé de séparer les hébergements :
- un serveur dédié (physique ou virtuel) peu puissant pour le blog et tout ce qui me passe par la tête : un pied à terre sur la Toile,
- un serveur Minecraft mutualisé loué au mois chez un hébergeur spécialisé dans
le serveur de jeux.
Étonnamment je ne devrais pas éclater mon budget que je me suis fixé en dessous
de 10 euros TTC par mois car j'ai découvert, gràce à mon fils tout un monde que
je ne connaissais pas : celui des hébergeurs à prix cassé de serveurs de jeux
clef en main où l'on choisit la capacité en nombre de joueurs simultanés (slots),
où tout s'administre en 3 clics avec une interface d'administration Web, sans
engagement de longue durée. Sans volonté de faire de la pub, il s'agit des
hébergeurs du style de Myriapulse, Verygames, OMGServ. Pour quatre joueurs on
peut louer quelque chose entre 1 et 4 euros par mois. C'est un domaine où la
compétition semble encore plus rude que dans l'hébergement classique.
Pour l'autre serveur (le mien), j'attends de voir les nouvelles offres que OVH
devrait dévoiler cette semaine avant de fixer mon choix. J'ai raté le coche du
Kimsufi 2013 à 5 euros et des brouettes sorti cet été je crois. Depuis OVH a
gelé les locations et revoit en profondeur toutes ses offres pour mieux
adresser les différents marchés de sa clientèle (du particulier fauché au grand
compte) en étant rentable et en situation de monter en charge. Si le serveur
physique est inaccessible, je me rabattrais sur une offre VPS chez OVH ou
ailleurs, ce qui compte c'est d'avoir la latitude d'installer tout ce qu'on
veut dessus.

@ -0,0 +1,84 @@
---
layout: post
title: Ma vie de sysadmin en semi-pro (2)
categories: GNU/Linux BSD
tag: planet
---
Il y a deux logiciels que j'utilise quotidiennent dans mon activité de sysadmin
à temps partiel<!-- more --> :
* [Nas4Free](http://www.nas4free.org)
* [Proxmox](http://www.proxmox.com)
Le premier est une distribution NAS sous FreeBSD qui permet de mettre en place
facilement un serveur de stockage. Si on l'installe sur un vrai serveur avec
plusieurs disques dur, il pourra gérer du Raid 0 (agrégation des disques),
du Raid 1 (miroir d'un disque sur l'autre) voire du Raid 5 avec au moins 4 disques
pour améliorer la tolérance aux pannes. Ce qu'il apporte ensuite, c'est une
facilité de configuration par une interface Web et le support d'un large nombre
de protocoles : Samba, NFS, FTP, Rsync et d'autres plus rares. Comme tout bon logiciel,
on l'installe, on prend le temps de le configurer puis on l'oublie car ça fait le job !
Je l'ai mis en place pour sauvegarder quelques machines en nocturne par Rsync.
C'est de la sauvegarde miroir (pas assez de capacité disque pour faire des sauvegardes tournantes)
avec une copie différentielle de ce qui a changé depuis la veille. Pour GNU/Linux, le programme
rsync de toute distribution qui se respecte combiné avec un CRON fait l'affaire.
Pour Ms Windows, il a fallu tester quelques clients rsync avant de trouver celui qui n'est pas
bogué et qui supporte les noms de fichiers avec accents :
c'est [cwRsync](https://www.itefix.no/i2/content/cwrsync-free-edition). Une tâche programmée
avec Ms Windows permet de lancer la sauvegarde en nocturne. Il est de bon ton de prévoir l'envoi
d'un email avec un compte-rendu de la sauvegarde, pour se rassurer sur le bon fonctionnement et
avoir une trace des fichiers synchronisés. J'ai dégoté le programme [blat](http://www.blat.net)
pour l'envoi d'email facile depuis un batch, il y en a sûrement plein d'autres. Voici un
script batch assez proche de celui que j'utilise :
``` bat
REM ================================================================
REM Synchroniser les changements
REM ================================================================
SET SOURCE=(REPERTOIRE SOURCE)
SET IPNAS=(IP DU NAS4FREE)
SET NOMRSYNC=(NOM DU PARTAGE RSYNC)
rsync --recursive --stats --verbose --size-only --chmod=ugo=rwX --compress --delete
--delete-excluded --force --links --backup --backup-dir=backup
--exclude-from=exclude.txt "%SOURCE%" %IPNAS%::%NOMRSYNC% >rsync.log 2>rsync.err
copy rsync.err+mail.txt+rsync.log rsync.mail
REM ================================================================
REM Envoi de l'email
REM ================================================================
SET FROM=(EXPEDITEUR DE L'EMAIL)
SET TO=(DESTINATAIRE DE L'EMAIL)
SET SMTP=(SERVEUR SMTP)
SET USER=(COMPTE UTILISATEUR)
SET PWD=(MOT DE PASSE)
blat rsync.mail -f %FROM% -to %TO% -server %SMTP% -u %USER% -pw %PWD% -subject "Nightly backup"
```
Une autre utilisation de mon instance Nas4Free est de servir un volume réseau iScsi qui sert
de stockage partagé à un cluster Ms Windows virtualisé qui sert à des tests. Ce qui m'amène au
second logiciel : **Proxmox**. Il s'agit d'une solution de virtualisation du style de VMware ESX
qui tourne sur un serveur dédié, s'administre par une interface Web. En fonction des besoins,
on peut créer des machines virtuelles car Proxmox est un hyperviseur KVM ou bien créer des
containers openvz.
* Les containers sont indépendants comme une machine virtuelle mais c'est réalisé par isolation
des processus et isolation de la mémoire, une sorte de *super Chroot*. Ca ne s'applique donc
qu'aux système GNU/Linux avec la contrainte de ne pas pouvoir choisir le kernel ni le
modifier en rajoutant des modules. Si on n'a pas ces contraintes, les containers sont la
solution privilégiée car ils sont très légers.
* La création de machines virtuelles GNU/Linux ou Ms Windows est la solution pour tous les
autres cas.
Grâce à cette gestion mixte Containers / KVM, un hyperviseur Proxmox qui tourne sur un serveur
récent peut réellement monter en charge. Les formats de VM sont ceux de KVM, il est aisé de convertir
une machine virtuelle VMware ou VirtualBox vers Proxmox. L'interface d'administration est sobre
et fonctionnelle. Elle permet la gestion des machines, leur configuration, la visualisation de
la charge (processeur, mémoire, réseau) par machine ou globale. Une console (qui nécessite le
support de JAVA dans le navigateur Web) peut être démarrée pour prendre le contrôle d'une machine.
Proxmox est sous licence AGPL et une société propose un support pour une souscription annuelle
raisonnable. Je ne l'ai pas expérimenté mais il est possible de mettre en cluster plusieurs instances
de Proxmox ce qui apporte la possibilité de migrer facilement des machines virtuelle ou des containers
d'une instance Proxmox vers une autre.

@ -0,0 +1,39 @@
---
layout: post
title: Bilan de l'hébergement
category: Hébergement
tag: planet
---
C'est fait ! j'ai lâché l'auto-hébergement pour un hébergement chez OVH avec
l'offre VPS (Virtual Private Server) de base<!-- more -->, un container OpenVz dédié,
hébergé à Roubaix sur lequel j'ai choisi d'installer Debian Wheezy. Je gagne de
la bande passante et une bonne qualité de service. L'objectif reste le même,
avoir un serveur dédié à bidouiller qui me fournit quelques services :
- l'hébergement de ce blog,
- une instance de Shaarli pour les favoris [merci SEB Sauvage](http://sebsauvage.net/wiki/doku.php?id=php:shaarli),
- un lecteur de flux RSS : [Tiny Tiny RSS](http://tt-rss.org)
C'est le minimum vital que j'ai réinstallé depuis la migration de mon ancien
serveur auto-hébergé. J'ai encore beaucoup à faire pour automatiser certaines
tâches d'administration, puis pour étoffer les services : faire mon évaluation
annuelle de OwnCloud par exemple.
Au niveau budget je suis en dessous des 100 euros par an : 72 euros pour la
location du VPS, 14 euros pour le domaine et les boites email chez Gandi et 12
euros pour la location du modeste serveur Minecraft chez Nitroserv. Soit un
budget de **8 euros par mois**.
C'est une passion qui reste raisonnable :-)
Au niveau des distributions GNU/Linux, j'ai stabilisé mes usages :
- ArchLinux, ma distrib de coeur à la maison pour sa fraîcheur de paquets, sa
logithèque énorme, sa stabilité qui peut en remontrer à beaucoup d'autres
distributions classiques (qui ne fonctionnent pas en mode *rolling-release*),
- Debian (parfois CentOS) sur les serveurs personnels et professionnels que je
suis amené à installer,
- Fedora sur mon poste professionnel, la distribution *incubateur* de RedHat :
une bonne distribution, pas trop mouvante pour un poste de développement

@ -0,0 +1,50 @@
---
layout: post
title: Mes extensions Firefox
category: Mozilla
tag: planet
---
Malgré quelques tests de la concurrence, je reste fidèle à Firefox depuis la
version 0.5. Il y a eu des hauts et des bas<!-- more -->, je pense notamment à l'époque où
sa consommation mémoire était excessive. Aujourd'hui, c'est, pour moi, le
meilleur navigateur avec une feuille de route claire pour assoir et préserver
les standards ouverts du Web.
**Recherche**
- [Add to Search
Bar](https://addons.mozilla.org/en-US/firefox/addon/add-to-search-bar) :
ajouter facilement le formulaire de recherche d'un site aux moteurs de
recherche.
- [Quick Search
Bar](https://addons.mozilla.org/en-us/firefox/addon/quicksearch) : présenter
la barre de recherche sous forme de liste d'icônes pour changer facilement de
moteur.
**Lecture**
- [Reader](https://addons.mozilla.org/en-US/firefox/addon/reader) : formater la
page en cours pour la lecture avec une visibilité optimale.
**Protection de la vie privée**
- [Ghostery](https://addons.mozilla.org/en-US/firefox/addon/ghostery) : bloquer
les mouchards Web.
- [HTTPS Everywhere](https://www.eff.org/https-everywhere) : forcer
l'utilisation de HTTPS au lieu de HTTP.
- [ProfilePassword](https://freeshell.de/~kaosmos/profilepassword-en.html) : protéger l'accès au profile par un mot de passe au lancement de Firefox.
Utile en environnement professionnel où son navigateur est synchronisé avec son Firefox personnel.
- [Self-Destructing Cookies](https://addons.mozilla.org/en-US/firefox/addon/self-destructing-cookies) : suppression des cookies à la fermeture des onglets.
**Développement Web**
- [FireBreak](https://addons.mozilla.org/en-US/firefox/addon/firebreak) :
tester les *responsive design* avec différentes résolutions.
- [More Display Resolutions](https://addons.mozilla.org/ja/firefox/addon/more-display-resolutions) : idem que le précédent.
- [FireBug](https://getfirebug.com) : l'outil de référence pour le
développement Web, débogueur JavaScript, inspecteur CSS / HTML.
- [YSlow](https://addons.mozilla.org/en-US/firefox/addon/yslow) : un plugin pour FireBug orienté analyse de performance des pages Web.
- [View Dependencies](https://addons.mozilla.org/en-US/firefox/addon/view-dependencies) : ajout d'un onglet aux propriétés d'un site Web pour lister les dépendances
CSS / JS de la page.
- [Dust-me selectors](https://addons.mozilla.org/en-US/firefox/addon/dust-me-selectors) : analyse des sélecteurs CSS utilisés sur la page.

@ -0,0 +1,199 @@
---
layout: post
title: Installation de Horde Groupware
categories: Hébergement Mobilité Debian
tag: planet
---
Je remets en place progressivement les outils nécessaires sur mon serveur
Debian. Je me suis posé à nouveau la problématique de la synchronisation des
contacts et du calendrier entre mes appareils,<!-- more --> c'est à dire mon ordinateur
portable sous ArchLinux avec le logiciel de courrier *Thunderbird* et son
module de gestion de calendrier *Lightning*, mon antique téléphone BlackBerry
Bold 9780. Un accès Web à mon calendrier et mes contacts depuis n'importe
quelle machine quand je suis en déplacement serait un plus.
Le téléphone supporte la synchronisation Google de facto et SyncML en
installant le client [Funambol](http://www.funambol.com). Je n'ai trouvé aucune
possibilité gratuite pour faire de la synchronisation CardDAV, CalDAV ou
ActiveSync. SyncML reste ma meilleure option. On peut installer le client
Funambol du BlackBerry Store mais il fait plus que nécessaire car il
s'interface avec le serveur Funambol ou bien on peut installer une version plus
ancienne qui suffit pour la synchro des contacts, du calendrier et des tâches
depuis [ce lien](http://www.memotoo.com/how-to-sync-your-blackberry-phone.php).
Côté ordinateur, Lightning supporte nativement le protocole CalDav et le carnet
d'adresse peut être synchronisé avec CardDAV en installant le [module
complémentaire pour Sogo](http://www.sogo.nu/english/downloads/frontends.html).
<img src="/images/2014/logo-horde.jpg" style="float:left; margin: 0px 20px;"/>A
l'époque de mon Motorola Droid, j'avais déjà utilisé le client Funambol pour
synchroniser mes données avec
[eGroupware](http://www.egroupware.org/community_edition) et je m'étais
intéressé à *Horde*. Ce dernier semblait plus difficile à installer,
l'interface Web était peu conviviale et j'avais mis en place eGroupware que
j'avais utilisé 1 an avec satisfaction. J'ai su qu'une version 5 de Horde était
sortie dans l'année et j'ai décidé de l'évaluer. Horde supporte SyncML,
CardDAV, CalDav et son interface graphique a été rajeunie.
Ma cible de déploiement est mon serveur privé virtuel avec
l'environnement technique suivant :
- Distribution Debian Wheezy
- Serveur Web NginX
L'installation est plus complexe que la moyenne mais avec un bon tuto on s'en
sort. Horde est modulaire : un Framework et des applications. Moi j'ai besoin
de Kronolith (la gestion du calendrier) et de Turba (la gestion des contacts).
J'ai décliné l'installation par le système de paquets car généralement cela
tire le serveur Apache alors que j'utilise NginX et j'ai opté pour PEAR,
l'outil d'installation PHP que ne connaissais pas. De ma compréhension, c'est
l'équivalent de CPAN pour PERL ou d'APT pour Debian. Horde publie ses
composants pour l'infrastructure PEAR [sur ce serveur](http://pear.horde.org).
L'installation de PEAR sur Debian est galette.
apt-get install php-pear
Puis, on enregistre le canal Horde sur Pear et on installe les composants
nécessaires :
``` shell
mkdir -p /var/www/horde
cd /var/www/horde
pear channel-discover pear.horde.org
pear install horde/horde_role
pear run-scripts horde/horde_role
pear install -a -B horde/horde
pear install horde/turba
pear install horde/kronolith
pear install horde/mnemo
pear install horde/Horde_SyncMl
```
Dans le cas de NginX sur Debian, il faut ajuster les permissions du répertoire.
chown -R www-data:www-data /var/www/horde
Et il faut créer les fichiers de configuration de chaque application à partir
des modèles fournis :
``` shell
cd /var/www/horde/config
for f in *.dist; do cp $f `basename $f .dist`; done
cd /var/www/horde/kronolith/config
for f in *.dist; do cp $f `basename $f .dist`; done
cd /var/www/horde/turba/config
for f in *.dist; do cp $f `basename $f .dist`; done
cd /var/www/horde/nag/config
for f in *.dist; do cp $f `basename $f .dist`; done
cd /var/www/horde/mnemo/config
for f in *.dist; do cp $f `basename $f .dist`; done
```
Il reste à configurer NginX. Je force l'utilisation de HTTPS en redirigeant les
requêtes HTTP vers la version sécurisée du site.
``` nginx
server {
listen 80;
server_name groupware.exemple.fr;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl;
server_name groupware.exemple.fr;
root /var/www/horde;
index index.php;
ssl_certificate /etc/ssl/exemple.fr.cert;
ssl_certificate_key /etc/ssl/exemple.fr.key;
access_log /var/log/nginx/horde-access.log;
error_log /var/log/nginx/horde-error.log;
location / {
try_files $uri $uri/ /rampage.php?$args;
}
location ~ \.php {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param PHP_VALUE "cgi.fix_pathinfo=1";
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
```
Horde propose le choix entre plusieurs bases de données J'utilise déjà MySQL,
j'ai donc créé une nouvelle base pour Horde en utilisant les outils
en ligne de commande de MySQL.
mysql -u root -p
mysql> CREATE DATABASE horde;
mysql> GRANT ALL ON horde.* TO horde@localhost IDENTIFIED BY 'horde';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
A la première connexion Web, il n'y a pas d'authentification, on est connecté
en tant qu'administrateur sans mot de passe.
#### 1ère étape : définir la base de donnée.
1. Aller dans le menu Administration / Configuration
<img src="/images/2014/horde-config.png"/>
2. Cliquer sur le composant Horde (horde)
<img src="/images/2014/horde-application.png"/>
3. Configurer la base de donnée dans l'onglet Database
<img src="/images/2014/horde-database.png"/>
#### 2ème étape : créer un utilisateur avec les droits d'administration.
1. Aller dans le menu Administration / Utilisateur
<img src="/images/2014/horde-user.png"/>
2. Créer un nouvel utilisateur
<img src="/images/2014/horde-adduser.png"/>
3. Retourner dans le menu Administration / Configuration et rajouter
l'utilisateur nouvellement créé dans les admins de l'onglet
Authentification.
<img src="/images/2014/horde-setadmin.png"/>
4. Il est conseillé de tester le nouvel utilisateur en se déconnectant et en se
reconnectant. Si cela fonctionne, on peut enlever l'utilisateur
Administrator de la liste des admins.
#### 3ème étape : finaliser l'installation des applications
Dans le menu Administration / Configuration, tous les composants installés
apparaîssent. Les boutons *mettre à jour toutes les configurations* et *mettre
à jour les schémas de la base* doivent être cliqués pour finaliser l'installation.
#### Conclusion
L'URL CalDAV pour s'inscrire au calendrier se trouve dans les propriétés du
calendrier de l'application Agenda, dans l'onglet *inscription*. De manière
similaire, l'URL CardDAV se trouve dans les propriétés du carnet d'adresses.
Quant à l'URL SyncML, c'est un point d'entrée unique pour la synchronisation de
toutes les applications ; dans notre exemple ce serait
http://groupware.exemple.fr/rpc.php.
J'ai mis en place Horde depuis 1 semaine avec une synchronisation SyncML par
Funambol sur mon téléphone et une synchronisation CardDAV et CalDAV depuis
Thunderbird. J'ai lu que SyncML n'était pas très bon pour gérer les conflits de
synchronisation mais je n'ai pas rencontré de souci. L'évaluation se passe très
bien pour l'instant.

@ -0,0 +1,85 @@
---
layout: post
title: SMTP Relay avec qmail sur Debian Wheezy
category: Debian
tag: planet
---
J'ai cherché une alternative plus simple qu'Exim et Postfix pour que mes
serveurs Debian puissent envoyer des emails d'alerte.<!-- more --> C'est une fonctionnalité
utile si on installe fail2ban ou logwatch. Je n'ai pas besoin de gérer des
utilisateurs ou de recevoir des emails, juste d'en envoyer en utilisant le
serveur SMTP du FAI comme relais. J'ai trouvé
[**qmail**](http://en.wikipedia.org/wiki/Qmail) en faisant quelques recherches,
un antique MTA dont la dernière version stable 1.0.3 date de 1998 (gasp !) mais
qui est toujours disponible dans les dépôts Debian.
Avant de lancer l'installation, il faut s'assurer que le hostname du serveur
est un FQDN, c'est à dire un nom DNS complet. Si ce n'est pas le cas, qmail
refuse de s'installer. Si le serveur n'a pas de nom DNS, on peut mettre
n'importe quel domaine, ça ne gêne dans la configuration que nous allons mettre
en place. On peut modifier le hostname de manière persistente en deux étapes :
1. éditer le fichier /etc/hostname
2. forcer sa mise à jour avec la commande /etc/init.d/hostname.sh
L'installation de qmail désinstalle Postfix ou Exim4 car un seul MTA peut
s'approprier le port 25.
apt-get install qmail qmail-run
Il s'agit d'un service local, on ne veut surtout pas ouvrir le port 25 sur
Internet. On peut forcer qmail à n'écouter que sur l'interface loopback en
modifiant le script de démarrage. Ce n'est pas l'idéal mais vu la fréquence de
mise à jour de qmail, on ne craint pas trop de voir cette modification écrasée.
Il faut remplacer *0* par *127.0.0.1* dans le fichier
**/etc/qmail/qmail-smtpd/run**.
Voici la version modifiée :
``` shell
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/lib/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/lib/qmail/control/me`
if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi
if [ ! -f /var/lib/qmail/control/rcpthosts ]; then
echo "No /var/lib/qmail/control/rcpthosts!"
echo "Refusing to start SMTP listener because it'll create an open relay"
exit 1
fi
exec softlimit -m 7000000 \
tcpserver -v -R -l "$LOCAL" -x /etc/qmail/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 127.0.0.1 smtp qmail-smtpd 2>&1
```
On modifie la configuration pour envoyer des emails en utilisant le serveur
SMTP Orange en tant que root@orange.fr si on est l'utilisateur root. On
remplace le contenu du fichier **/etc/qmail/defaulthost** avec ceci :
orange.fr
On supprime le contenu du fichier **/etc/qmail/defaultdomain** et on configure
le relais dans le fichier **/etc/qmail/smtproutes** :
smtp.orange.fr <utilisateur> <mot de passe>
Pour tester on relance qmail :
qmailctl stop
qmailctl start
Et on tente l'envoi d'un email avec la commande mail :
mail -s "Hello" someone@somewhere.fr
Ceci est un test
^D
Le fichier de log **/var/log/qmail/current** permet de vérifier l'état de l'envoi.

@ -0,0 +1,165 @@
---
layout: post
title: Haute Disponibilité avec Redis
category: Cluster
tag: planet
---
[Redis](http://redis.io/) est une base de donnée de type clef-valeur. On la
range dans la grande famille plutôt hétérogène des bases **NoSQL** <!-- more -->qui, pour
rappel, signifie plutôt *Not Only SQL* que *No SQL*. Ceci dit, dans le cas de
Redis, on est vraiment dans le *No SQL at all*. La base permet de stocker par
clef des chaînes, des listes de chaînes, des *hashtable*. Elle permet de
stocker des valeurs avec une date d'expiration au delà de laquelle la donnée
disparaît. Idéal pour gérer des données cache et c'est d'ailleurs
l'utilisation principale de Redis. On peut aussi facilement implémenter
producteur / consommateur entre plusieurs clients d'une base Redis. L'ensemble
des commandes supportées par Redis est parfaitement documenté
[ici](http://redis.io/commands).
La base est orientée performance et évolutivité :
- écrite en C, facilement portable car le code n'a pas de dépendance particulière,
- stockage des données en mémoire avec différents mécanismes optionnels pour conserver une copie sur disque,
- réplication possible d'une base maître vers un grand nombre de bases esclaves. On peut écrire dans la base maître et seulement lire dans les bases esclaves.
Ce qui fait (aussi) le succès de Redis, c'est que le coeur est en C et qu'il
existe des [clients pour la plupart des langages](http://redis.io/clients).
Pour l'instant, j'ai utilisé Jedis pour JAVA et redis-py pour Python. Enfin,
un client en ligne de commande permet d'interagir avec la base sans écrire de
code.
La dernière version stable est Redis 2.8.8. Quant à la version 3.0 à venir,
encore en phase de bêta, elle embarque des fonctionnalités de répartition des
données dans des configuration de type cluster, ce qu'on appelle en langue de
Shakespeare le **sharding**. Dans le futur, elle embarquera aussi des
fonctionnalités de Haute Disponibilité pour basculer les données lorsqu'un
noeud du cluster s'écroule.
En attendant ce futur, la version actuelle apporte une solution de cluster
actif/passif basée sur la réplication maître / esclave surveillée par des
sentinelles chargées de promouvoir un Redis esclave en maître en cas de
défaillance.
Je me suis intéressé à monter une configuration avec seulement 2 machines sous
Debian qui peut fonctionner si l'une des machines tombe et automatiquement
réintégrer le cluster quand elle redevient opérationnelle, sans impact pour
les clients Redis. Ce n'est pas si trivial et je me suis heurté à quelques
difficultés avant d'arriver à une configuration opérationnelle.
Comme dans la plupart des architectures clusterisées, un quorum (nombre
minimal de votants) est nécessaire pour élire un nouveau maître. La valeur
minimum possible est 1, signifiant qu'une sentinelle a besoin qu'au moins 1
autre sentinelle soit d'accord avec elle pour déclarer qu'un Redis maître est
défaillant. Il faut au minimum 2 sentinelles opérationnelles quel que soit
l'état du cluster donc sur chaque machine on va installer un Redis et 2
sentinelles.
Au début de mes expérimentations, j'attribuais un port différent aux
sentinelles pour les exécuter sans conflit sur la même machine mais j'avais
des problème d'indécision des sentinelles pour élire un nouveau noeud. Je
crois que toutes les sentinelles ne communiquaient pas. La situation s'est
arrangée quand j'ai configuré toutes mes sentinelles pour écouter sur le port
standard 26379. Pour que ce soit possible, j'ai attaché mes sentinelles à des
adresses IP différentes en déclarant une sous-interface sur chaque machine.
+++ +++
| Sentinelle 1 | | | Sentinelle 1 | |
++ | ++ |
| REDIS | Sentinelle 2 | | REDIS | Sentinelle 2 |
++ ++
| Eth0 | Eth0:1 | | Eth0 | Eth0:1 |
| 192.168.0.51 | 10.25.14.1 | | 192.168.0.52 | 10.25.14.2 |
+++ +++
Machine A Machine B
Voici la configuration réseau de la machine A (/etc/network/interfaces) :
iface eth0 inet static
address 192.168.0.51
netmask 255.255.255.0
iface eth0:1 inet static
address 10.25.14.1
netmask 255.255.255.0
La configuration des serveurs Redis est identique sur chaque machine :
port 6379
loglevel warning
logfile "/var/log/redis.log"
maxmemory-policy noeviction
appendonly yes
appendfsync always
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-rewrite-incremental-fsync yes
Ce n'est pas le sujet de l'article mais je vous conseille de jeter un oeil à
la documentation pour les paramètres liés à l'AOF et au APPEND qui vont
réduire les risques de perte de données en configurant des écritures sur
disque. C'est peut-être inintéressant dans le cas d'une utilisation de Redis
comme cache mais ça le devient dans le cas d'une utilisation plus classique
comme base de données.
Quand les deux serveurs Redis sont démarrés, on peut initier le rôle initial
d'esclave de la machine B depuis le client Redis avec la commande :
slaveof 192.168.0.51 6379
Par la suite, les sentinelles se chargent de décider quel rôle est joué en
fonction de la disponibilité des machines.
Voici la configuration de la sentinelle 1 sur la machine A :
port 26379
bind 192.168.0.51
# master configuration
sentinel monitor master 192.168.0.51 6379 1
sentinel down-after-milliseconds master 3000
sentinel failover-timeout master 10000
sentinel parallel-syncs master 4
Et celle de la sentinelle 2, également sur la machine A :
port 26379
bind 10.25.14.1
# master configuration
sentinel monitor master 192.168.0.51 6379 1
sentinel down-after-milliseconds master 3000
sentinel failover-timeout master 10000
sentinel parallel-syncs master 4
La configuration des sentinelles de la machine B est identique à part les
directives **bind** pour attacher les services aux adresses 192.168.0.52 et
10.25.14.2.
Avec cette configuration, on a suffisamment de sentinelles pour basculer le
rôle d'une machine à l'autre dans cas extrème où la machine A est
injoignable par le réseau ou bien mise hors tension.
Je n'ai pas détaillé le code client mais il y a une étape avant de récupérer
une connexion valide à la base Redis : s'adresser au *pool* de sentinelles
pour obtenir l'adresse du maître et ensuite ouvrir une connexion vers celui-
ci. Dans le cas d'une bascule du cluster, la connexion est cassée et il faut à
nouveau s'adresser aux sentinelles pour récupérer l'adresse du Redis maître.
Voici un exemple typique de code en Python :
``` python
from redis.sentinel import Sentinel
sentinel = Sentinel(
[('192.168.0.51', 26379), ('192.168.0.52', 6379)], socket_timeout=0.1)
print("Master %s %d" % sentinel.discover_master('master'))
```
Je suis le projet Redis depuis un bout de temps avec intérêt car il offre beaucoup d'applications possibles dans des architectures distribuées multi-langages.

@ -0,0 +1,43 @@
---
layout: post
title: Gnome 3, attendez moi les jeunes !
category: GNU/Linux
tag: planet
---
Ma dernière tentative d'utiliser Gnome en environnement professionnel date de
[fin 2011](gnome-3-pour-un-usage-professionnel.html). Le changement avait été
trop brutal et déclenché [mon passage à XFCE](quelle-distribution-gnome-2
-choisir-en-2012.html)<!-- more --> où je suis resté depuis, que ce soit sous Arch à la
maison ou au bureau sous Fedora. En 2 ans, les développeurs de Gnome ont
sacrément amélioré leur bijou :
- meilleures performances, cohésion de l'interface, raffinements
- ergonomiques et esthétiques à tous les étages, ouverture grâce aux
- extensions pour rajouter les fonctionnalités manquantes (ou écartées).
Par curiosité, j'ai testé quelques jours la version 3.12 à la
maison sous Arch en mixant les usages et j'ai réalisé que je m'y faisais très
bien. L'absence de barre de tâches ne me choque plus et je m'en sors même dans
des usages *professionnels* avec beaucoup d'application ouvertes. Alors qu'est
-ce qui a changé ? Certes l'interface est cohérente et agréable, la recherche
d'applications est plus rapide qu'à l'époque, on configure sans problème
l'utilisation multi-moniteur, c'est plus stable ... Cool mais rien de vraiment
déterminant ! En fait, ce qui a réellement changé c'est que *le vieil
utilisateur* que je suis a enfin digéré la rupture Gnome 2 / Gnome 3 et sauté
le pas vers cette nouvelle interface. Il est possible que la confrontation aux
interfaces pour mobile (Android, BB 10) ait accéléré l'acceptation d'un
nouveau type d'interface sur le bureau.
J'ai aussi basculé ma Fedora XFCE Spin vers Gnome au bureau et les quelques
jours d'utilisation sont positifs. Mon image d'utilisateur Linux avec une
interface archaïque et des terminaux plein les écrans s'écorne... J'ai
toujours des terminaux mais avec une interface moderne et sexy à faire saliver
les utilisateurs de Windows 7 et tousser ceux de Windows 8
(**troll inside**).
Plus sérieusement, comme d'autres j'ai douté de la
révolution Gnome en 2011 et c'est un beau projet que je retrouve 2 ans après.
Je ne renie pas XFCE, idéal pour les configurations plus légères que je suis
amené à installer mais je suis **enfin reconcilié** avec Gnome.

@ -0,0 +1,208 @@
---
layout: post
title: Supervisor, gestion de processus
category: GNU/Linux
tag: planet
excerpt: "Quand il s'agit de déployer des programmes de son cru sur un serveur
GNU/Linux, on réalise généralement deux actions : l'écriture d'un script de démarrage et arrêt du programme, la *démon-isation* du programme"
---
Quand il s'agit de déployer des programmes de son cru sur un serveur
GNU/Linux, on réalise généralement deux actions :
- l'écriture d'un script de démarrage et arrêt du programme
- la *démon-isation* du programme
Le premier point n'est pas complexe mais il peut être contraignant. Si on
envisage de déployer sur Debian, Ubuntu et Fedora, il faut prévoir trois
scripts différents : un pour les scripts à la saucce Sys V, un pour Upstart
et un autre pour systemd. L'avantage c'est qu'on peut gérer finement les
dépendances à d'autres services.
Le second point consiste à veiller à ne pas bloquer le script d'init en
lançant le programme. On peut le gérer dans le code de notre programme en
prévoyant deux modes de lancement de notre programme : *daemon* et
interactif. Python, par exemple, propose [la librairie
daemonize](https://pypi.python.org/pypi/daemonize) pour réaliser cela. JAVA
propose des outils comme JAVA Service Wrapper pour gérer le lancement et
garantir l'arrêt du processus. On peut aussi le gérer de manière externe au
code, de manière rustique avec un
[nohup](https://en.wikipedia.org/wiki/Nohup), auquel cas il faut gérer
l'arrêt fiable du processus en manipulant son PID.
Voici un exemple de script d'init à la sauce Debian pour un programme
JAVA :
``` shell
### BEGIN INIT INFO
# Provides: monprog
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Start/stop monprog
### END INIT INFO
BOOT_LOG=/var/log/monprog-boot.log
PID_FILE=/opt/monprog/pid
start_java () {
nohup java -cp "/opt/monprog/lib/*" fr.yax.monprog.Main >$BOOT_LOG 2>&1 &
echo $! > $PID_FILE
echo "Monprog started ..."
}
do_start () {
echo "Starting Monprog ..."
if [ ! -f $PID_FILE ]; then
start_java
else
PID=$(cat $PID_FILE)
if [ -d /proc/$PID ]; then
echo "Monprog is already running ..."
else
start_java
fi
fi
}
do_stop() {
echo "Stopping Monprog ..."
if [ -f $PID_FILE ]; then
PID =$(cat $PID_FILE);
kill $PID 2>/dev/null
echo "Monprog stopped ..."
rm -f $PID_FILE
else
echo "Monprog seems not running ..."
fi
}
case $1 in
start)
do_start
;;
stop)
do_stop
;;
restart)
do_stop
sleep 1
do_start
;;
esac
```
C'est perfectible. Il faudrait tenter l'arrêt avec un signal moins violent
que SIGKILL de façon à l'intercepter dans le code et faire un arrêt propre.
Si cette méthode ne fonctionne pas au bout de plusieurs secondes, le script d'init pourrait alors opter pour un arrêt radical.
Cette méthode fonctionne bien mais elle nécessite une connaissance système
pour écrire et maintenir les scripts en fonction des déploiements cible. Si
on veut donner la possibilité à un utilisateur standard (non *root*) de
démarrer ou arrêter un programme, il faut aussi maîtriser un peu la gestion
des droits UNIX (avec sudo par exemple).
Une alternative simple pour la plupart des systèmes UNIX (GNU/Linux, FreeBSD,
Solaris et Mac OS X) est le [programme Supervisor](http://supervisord.org).
C'est écrit en Python (comme la plupart des programmes de qualité ! **Troll
inside** ) et de même que MongoDB permet au développeur de reprendre la main
au DBA sur l'administration de base de donnée, Supervisor permet au
développeur de reprendre un peu la main à l'admin sys sur le déploiement de
ses applications.
Supervisor est fourni sur la plupart des distributions. On peut l'installer
avec le système de paquet de sa distribution ou bien opter pour une
installation à partir de PIP, l'installeur de programmes Python. Ce dernier
permet d'obtenir la version la plus récente de Supervisor.
Supervisor est composé de deux parties :
- un service **Supervisord**
- un client en mode console : **Supervisorctl**
Le client permet d'interagir avec les programmes gérés : démarrer, stopper.
Une interface RPC permet aussi de piloter Supervisord programmatiquement ; je
n'ai pas encore testé cet aspect.
La configuration principale est dans un fichier supervisord.conf qui décrit la
connexion du client supervisorctl (section unix_http_server), la config RPC
(section rpcinterface) et le répertoire des configuration des programmes à
gérer (section includes).
Voici une configuration type :
#### /etc/supervisor/supervisord.conf
[unix_http_server]
file=/var/run//supervisor.sock ; (the path to the socket file)
chmod=0770 ; sockef file mode (default 0700)
chown=root:supervisor
[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisorrpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run//supervisor.sock
[include]
files = /etc/supervisor/conf.d/*.conf
Les droits sur la socket UNIX sont important. En donnant l'accès à ROOT et au
groupe supervisor, on peut facilement donner l'accès à supervisorctl en
ajoutant un utilisateur dans le groupe supervisor. Attention donner l'accès à
supervisorctl c'est donner le droit de stopper n'importe quel programme géré
par supervisor. C'est un privilège important.
Le reste de la configuration consiste à créer des configurations
additionnelles décrivant des programmes à lancer simplement :
- par défaut un programme démarre en même temps que le service donc au
démarrage du serveur. C'est configurable.
- on peut définir si un programme doit être relancé automatiquement et définir sous quelle condition, par exemple en fonction du code de sortie du programme.
- on peut opter pour l'envoi d'un signal au programme afin de demander au programme de s'arrêter proprement plutôt que de forcer un arrêt brutal.
- on peut regrouper des programmes pour manipuler des
groupes, faire des démarrages groupés et des arrêts groupés. C'est utile si on a beaucoup de programmes.
- au sein d'un groupe on peut définir des
priorités pour ordonner le lancement des programmes du groupe.
Voici un exemple qui définit un groupe mesprogrammes composé de 2 programmes correspondant au même binaire.
#### /etc/supervisor/conf.d/mesprogrammes.conf
[group:mesprogrammes]
programs=monprog1,monprog2
[program:monprog1]
directory=/opt/monprogram
command=/usr/bin/java -DrunDir=/opt/monprog -cp "lib/*" fr.yax.monprog.Main --port 1234
stopsignal=INT
priority=500
[program:monprog2]
directory=/opt/monprogram
command=/usr/bin/java -DrunDir=/opt/monprog -cp "lib/*" fr.yax.monprog.Main --port 1235
stopsignal=INT
priority=501
Dans cet exemple, on envoie un signal SIGINT à monprog pour lui demander un arrêt propre. Voici un snippet de code JAVA pour intercepter le signal :
#### Interception d'un signal SIGINT en JAVA
``` java
// register a shutdown hook
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
logger.info("Shutting down has been requested");
stopCleanly();
}
});
```
En conclusion, **Supervisor** est un bon outil de gestion de programmes :
fiable, facile à installer et à configurer. En complément d'un outil de
déploiement comme [Fabric](http://www.fabfile.org) un développeur peut
facilement automatiser le déploiement de son programme sur une ou plusieurs
machines cibles.

@ -0,0 +1,26 @@
---
layout: post
title: En vacances
category: Humeur
tag: planet
---
Bon, il ne faut pas se mentir, la saison chaude en Provence ça ne booste pas la
productivité.<!-- more --> On assure l'essentiel mais l'activité de blogging en a fait les
frais. C'est une demi excuse. L'autre moitié de l'excuse c'est que j'ai
*mollement* codé ces dernières semaines un petit projet de gestion des
commentaires d'un blog statique, un projet qui me tient à coeur depuis plus
d'un an. C'est un petit projet mais j'ai pris le temps de la réflexion et
savouré le codage dans mon [langage fétiche](https://www.python.org). Je
termine la documentation pour pouvoir le publier décemment sous GitHub et je
consacrerais bientôt un article dessus.
Pour me relaxer, j'ai travaillé un peu la cosmétique du site :
- mise à jour de [Pelican](http://docs.getpelican.com/en/3.4.0) en version 3.4
- mise à jour des librairies CSS: [Pure](http://purecss.io) en version 0.5.0, [Font Awesome](http://fortawesome.github.io/Font-Awesome) en version 4.1.0
- *subtiles retouches* de quelques détails visuels
Bon été à tous
<img src="/images/2014/apero.jpg"/>

@ -0,0 +1,133 @@
---
layout: post
title: Pecosys, les commentaires avec Pelican
categories: Hébergement Blog
tag: planet
---
Pecosys est le projet évoqué dans mon dernier billet pour gérer des
commentaires avec un blog statique<!-- more --> créé avec
[Pelican](http://docs.getpelican.com/en/3.4.0). J'ai publié [l'ensemble des
sources sur mon GitHub](https://github.com/kianby/pecosys) sous licence GPL.
Avant d'expliquer à quoi ça sert, une présentation des types de moteurs de
blog s'impose.
#### Petite intro sur les blog statiques
Les moteurs de blog classiques comme Wordpress ou Dotclear stockent leurs
données (articles, commentaires) dans une base de données et ils utilisent une
logique côté serveur pour produire les pages HTML. Au fil des ans, ces moteurs
ont rajouté beaucoup de fonctionnalités (par l'utilisation de plugins) et on
les appelle désormais des CMS (Content Management System) car ils peuvent
servir à bâtir tout type de site Web, en facilitant le travail de publication
et de collaboration aux rédacteurs qui n'ont plus besoin d'être des gens
techniques.
PluXml est un moteur un peu à part, plus léger que les CMS cités ci-dessus,
qui n'utilise pas de base de données mais stocke les données dans des fichiers
XML. C'est un pas dans la direction des blogs statiques dans la mesure où cela
permet de mettre son blog dans un gestionnaire de sources (comme GIT) et
conserver une traçabilité des changements. Cela facilite aussi la migration du
blog.
Pelican et Jekyll sont des vrais blogs statiques. Ils n'utilisent pas de
langage serveur comme PHP ou Ruby, il ne stockent pas leurs données dans une
base de données. Les articles sont écrits dans un langage Markup comme
[Markdown](http://daringfireball.net/projects/markdown) et la construction du
site (le build) est réalisé hors ligne. Il génère les pages à base de HTML,
CSS et éventuellement un zeste de JavaScript. Ces pages sont transférées vers
le serveur HTTP hébergeant le site... et hop le site est à jour.
Alors pourquoi s'embêter à gérer un site statique alors qu'un Wordpress
s'installe en 5 minutes ?
Cela dépend de tout un chacun mais j'y suis venu pour les raisons suivantes :
- Les articles sont écrits dans un format simpliste (pour ma part c'est Markdown), la présentation est clairement séparée du contenu. C'est lors du build qu'on génère le code HTML en fonction de *templates* et de CSS personnalisés par nos soins. Le code HTML généré par Pelican est propre et léger. Le jour où j'ai migré de WordPress à PluXml, j'ai été horrifié par le code HTML de WordPress.
- Le contenu du blog est un ensemble de fichier au format texte, idéal à gérer avec un gestionnaire de sources afin de garder trace des modifications. Un gestionnaire de sources devient aussi un moyen d'automatiser la mise à jour du site. On écrit et on teste sur sa machine de dev, on publie sous GIT et il suffit que le serveur rafraîchisse sa version du site quand une modification a été effectuée.
#### La problématique des commentaires
Pas de logique serveur, juste un ensemble de pages HTML avec un peu
d'interactivité grâce à JavaScript. Comment gérer les commentaires avec un
site statique ? La solution proposée par Pelican c'est l'utilisation des
services de la société Disqus. Un peu de JavaScript embarqué au bon endroit et
vos pages sont agrémentées d'un formulaire pour poster des commentaires qui
envoie les données chez Disqus et l'affichage de la page dans le navigateur
client par l'usage de JavaScript, envoie des requêtes à Disqus pour rapatrier
les commentaires approuvées et les ajouter à la page HTML qui vient de votre
serveur.
Est-ce que vous sentez venir l'objection ?
D'abord on met en place une belle mécanique,très pure, où l'on contrôle le
contenu, l'affichage, puis on confie la partie sensible (les données
utilisateur) à une société commerciale, qui ne demande rien en retour et qui
propose sûrement un service aux petits oignons pour approuver les
commentaires... mais qui garde les données. Comment une société comme Disqus
monétise ses services ? Je ne sais pas, peu importe. Que se passe-t-il si la
société dépose le bilan ? Là j'ai la réponse. L'ensemble des commentaires est
perdu : une bonne partie de la richesse d'un blog, ce qui fait son histoire.
Dommage non ?
#### L'approche Pecosys
Pecosys est un serveur de commentaires écrit en Python que vous hébergez sur le même serveur que votre blog. Il reçoit les commentaires à approuver depuis le blog par le biais d'un formulaire sur le blog. Pour cela, les *templates* de Pelican ont été adaptés afin de rajouter ce formulaire en bas de chaque article.
Le lien entre le blog statique et le serveur Pecosys est réalisé par grâce au serveur Web. Dans le cas de NginX, il est trivial d'associer une URL à un programme Python. Dans le cas d'Apache, c'est faisable facilement en utilisant le module Proxy. Bref, le serveur Pecosys est d'abord un serveur HTTP sur lequel on poste les commentaires entrés par un formulaire classique de création de commentaires.
Quand un commentaire est reçu, le serveur va faire deux trucs : sauvegarder le commentaire et le soumettre à l'administrateur du blog.
La sauvegarde se fait grâce à GIT. Ah j'avais pas encore parlé de GIT :-) On suppose qu'on est dans une architecture centralisée où le blog est modifié depuis une machine de développeur et poussé (au sens GIT: PUSH) vers un *bare repository*. Dans mon cas, cette référence centrale des sources est sous BitBucket car ils acceptent la création de dépôts privés gratuitement et que je ne veux pas publier les adresses emails de tous ceux qui ont laissé un commentaire sur le blog. Souvenez-vous les commentaires font désormais partie des sources du blog, on verra comment plus loin.
Donc, pour résumer :
- j'écris mes articles sur ma machine de dev perso, je publie dans GIT et je pousse mes modifications au GIT centralisé de BitBucket (au sens GIT: ORIGIN).
- mon serveur vérifie périodiquement si le dépôt BitBucket a été modifié et si c'est le cas, il rapatrie les sources du blog et reconstruit le site grâce à sa mécanique Pelican installée localement.
- Pecosys a sa propre version du blog (au sens GIT: CLONE) maintenue à jour de BitBucket.
Donc quand Pecosys reçoit un nouveau commentaire, il met à jour sa version du
blog (la branche MASTER) et il crée une nouvelle branche XYZ pour ce
commentaire. il sauve ce commentaire dans les sources du blog (au format
Markdown) et il committe la branche XYZ.
Ensuite, le serveur va le communiquer à l'administrateur du blog par email.
Cela suppose qu'un email dédié est utilisé par Pecosys (pourquoi pas
blog@mydomain.com) et qu'il connaît l'email de l'administrateur du blog (vous
!). Cet email contient le commentaire et demande une réponse.
L'administrateur du blog (toujours vous) doit répondre à cet email. Une
réponse sans commentaire revient à approuver le commentaire et va lancer sa
publication. Une réponse avec un commentaire "NO" (désolé pour l'originalité)
signifie qu'on refuse le commentaire.
En fonction de cette réponse, le serveur Pecosys qui vérifie sa boite de
réception régulièrement, va traiter le commentaire :
- un refus du commentaire revient à supprimer la branche GIT XYZ
- une approbation du commentaire ramène les modifications de la branche XYZ sur la branche MASTER (au sens GIT: MERGE) et pousse les modifications sur le GIT distant (dans mon cas BitBucket)
Dans les deux cas, un email de confirmation de l'action réalisée est envoyé à
l'administrateur du blog.
A ce stade, la branche de référence BitBucket est à jour donc le serveur va
ramener ses modifications, reconstruire le site et par là même
publier le commentaire.
Si vous avez bien suivi et je sais que c'est un peu touffu et compliqué, vous
vous demandez comment les commentaires (ces fichiers en Markdown) sont générés
en HTML. Et bien, pas le biais d'un plugin Pelican nommé **CaCause**, en
hommage au projet de base initié il y a un an avec [Bruno
Adele](http://www.jesuislibre.org) et [Nahir
Mohamed](https://github.com/nadley) dont Pecosys est une reprise des idées
principales mais avec une réalisation différente par son dialogue basé sur
l'email et son utilisation *forcenée* de GIT.
Je teste Pecosys depuis deux semaines sur ce site et je suis prêt à donner un
coup de main à quiconque veut se lancer. Sur GitHub, j'ai publié les sources
du serveur mais aussi une version allégée de ce site (sans les commentaires)
qui contient donc mes *templates* avec le formulaire et les sources du plugin.
En attendant je retourne à mon farniente estival :-)
<img src="/images/2014/lemon.jpg"/>

@ -0,0 +1,128 @@
---
layout: post
title: Emuler la Raspbian avec Qemu
categories: Debian Matériel Virtualisation
tag: planet
excerpt: "Je m'intéresse de plus en plus au Raspberry et je
franchirai peut-être le pas de l'achat dans quelque temps"
---
<img src="/images/2014/rasplogo.png" alt="Raspberry logo" style="margin: 0px
20px; float:left;" />Je m'intéresse de plus en plus au Raspberry et je
franchirai peut-être le pas de l'achat dans quelque temps. J'ai voulu voir à
quoi ressemble sa distribution principale Raspbian (basée sur Debian) en
l'émulant sous Qemu. Je me suis basé sur [le tutorial pointé par beaucoup de
gens dans les forums](http://xecdesign.com/qemu-emulating-raspberry-pi-the-
easy-way/) et j'ai effectué des recherches annexes pour résoudre
certains problèmes : taille des partitions, gestion de la souris sous Qemu. Ce
qui suit est le résultat de mes manipulations pour émuler Raspbian avec Qemu
depuis une distribution GNU/Linux 64 bits.
En pré-requis, on suppose que Qemu est installé sur le système hôte. On
vérifie que le processeur ARM du Raspberry est supporté par Qemu avec la
commande suivante :
``` shell
$ qemu-system-arm -cpu ?
```
Le résultat liste les types de processeur supportés. On s'assure que **arm1176** est mentionné.
### Installation de base
On se crée un répertoire de travail dans lequel on va télécharger les fichiers nécessaires :
- le noyau Linux [depuis ce lien](http://xecdesign.com/downloads/linux-qemu/kernel-qemu)
- l'image de la Raspbian [depuis le site officiel](http://www.raspberrypi.org/downloads)
La modification d'un fichier est nécessaire pour que la distribution
fonctionne avec Qemu. On effectue donc un premier démarrage particulier avec
BASH en processus INIT pour la réaliser.
``` shell
$ qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw init=/bin/bash" -hda 2014-06-20-wheezy-raspbian.img
```
Quand Qemu a démarré BASH on modifie le fichier /etc/ld.so.preload
$ nano /etc/ld.so.preload
On commente la première ligne du fichier :
#/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so
On sauvegarde (CTRL-X avec nano) et on arrête l'émulation
exit
A ce stade, l'émulation Raspbian sous Qemu est fonctionnelle et on peut faire un vrai démarrage avec la commande :
$ qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda 2014-06-20-wheezy-raspbian.img
### Elargir la partition
Il ne reste pas beaucoup d'espace disque sur la partition root. On peut
élargir la partition, sinon on ne pourra même pas mettre à jour Raspbian avec
apt-get. Cela nécessite plusieurs étapes.
D'abord on élargit le disque avec l'utilitaire qemu-resize.
$ qemu-img resize 2014-06-20-wheezy-raspbian.img +2G
Ensuite on démarre la Raspbian avec Qemu
``` shell
$ qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda 2014-06-20-wheezy-raspbian.img
```
On se connecte au Raspberry avec l'utilisateur **pi** et le mot de passe
**raspberry**. Attention si on se connecte depuis la fenêtre Qemu, le clavier
est probablement configuré en QWERTY.
On lancer l'utilitaire **fdisk** pour modifier les partitions
$ fdisk /dev/sda
- supprimer la partition 2 qui commence à l'offset 122880 : commande **d** puis indiquer la partition **2**
- recréer une partition 2 qui commence à l'offset 122880 et utilise la totalité du disque : commande **n**
- sauvegarder les modifications : commande **w**
- arrêter le système avec la commande **reboot**.
On démarre à nouveau la Raspbian avec Qemu et on lance la commande resize2fs
pour élargir la partition 2 :
$ resize2fs /dev/sda2
$ reboot
### Augmenter la résolution sous X
Par défaut, on a une résolution en 640x480 quand on lance LXDE avec
**startx**. On peut monter en 800x600 en créant un fichier *xorg.conf*.
# sudo nano /etc/X11/xorg.conf
Ajouter ces lignes dans le fichier :
Section "Screen"
Identifier "Default Screen"
SubSection "Display"
Depth 16
Modes "800x600" "640x480"
EndSubSection
EndSection
Sauvegarde et redémarrer X pour voir le résultat.
### Déplacements erratiques de la souris
J'ai été confronté à ce problème lié à la configuration de Qemu. La souris se
fige ou certaines portions de l'écrans deviennent inaccessibles. je l'ai
résolu en lançant Qemu ainsi :
qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -usbdevice tablet -display sdl -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" -hda 2014-06-20-wheezy-raspbian.img
Notez le paramètre *-usbdevice tablet* et *-display sdl*.
### Conclusion
L'émulation Qemu permet de se faire une bonne idée de la distribution. Bien sûr, ce n'est pas complètement fonctionnel car certains périphériques spécifiques au Raspberry ne sont pas présent (je pense aux entrées / sortie, au port HDMI) mais cela permet déjà beaucoup.

@ -0,0 +1,149 @@
---
layout: post
title: Installation de Shinken
category: GNU/Linux
tag: planet
---
Dans la série "ma vie de sysadmin en semi-pro", je me suis frotté à la mise
en place d'une supervision de type Nagios.<!-- more --> Mon besoin est la surveillance de
quelques serveurs et services critiques et la remontée d'alertes en cas de
souci. Nagios est la référence dans le domaine avec des centaines de greffons
pour surveiller la plupart des applications existantes et la possiblité de
créer ses propres greffons pour ses applications spécifiques. Par goût de la
démarcation (mais pas seulement), j'ai opté pour
[Shinken](https://fr.wikipedia.org/wiki/Shinken_%28logiciel%29), un
*fork* de Nagios qui a plusieurs avantages à mes yeux :
- c'était une branche expérimentale de Nagios qui aurait dû succéder au Nagios actuel dont les critiques disent que le noyau n'évolue pas assez vite par rapport aux demandes des utilisateurs,
- son architecture est saluée pour sa capacité de montée en charge (distribuée, balance de charge),
- c'est écrit en Python et la compatibilité est totale avec les greffons Nagios.
La supervision en général et Nagios en particulier est un vaste sujet et des
IT administrant des milliers de serveurs et de services ont beaucoup plus de
légitimité que moi pour en parler. Je vais me borner à décrire les étapes
d'une installation sans problème sur un serveur Debian Wheezy.
### Installation de Shinken
Ce qui suit s'inspire directement du [10 minutes Shinken installation guide](https://shinken.readthedocs.org/en/latest/02_gettingstarted/installations/shinken-installation.html) avec quelques adaptations pour Debian Wheezy.
Installation des paquets Debian nécessaires :
$ apt-get install python-cherrypy3 python-pip \
python-pycurl nagios-plugins
Création d'un utilisateur **shinken** dédié :
$ adduser shinken
Et finalement installation de shinken lui-même avec le programme PIP (je suppose que Python et PIP 2.x sont installés sur votre Debian) :
$ pip install shinken
C'est aussi simple que cela. On a installé le moteur de Shinken mais aucune
interface graphique. Je découvre petit à petit mais l'interface est une
composante optionnelle et plusieurs sont proposées. J'ai choisi
d'installer **webui**, celle recommandée qui apporte de la visualisation (la
configuration se fait en modifiant des fichiers et en redémarrant les
services Shinken).
### Installation de Webui
Shinken propose son propre gestionnaire de greffons avec le programme **shinken**.
$ shinken --init
$ shinken install webui
$ shinken install auth-cfg-password
Webui nécessite un stockage en base pour stocker les préférences
utilisateurs. On peut se limiter à SQLite, j'ai choisir MongoDB (la base
NoSQL) qui me sert à d'autres usages.
$ apt-get install mongodb python-pymongo
$ shinken install mod-mongodb
Editer */etc/shinken/modules/webui.cfg* et rajouter les modules dépendants :
modules auth-cfg-password,mongodb
Editer */etc/shinken/brokers/broker-master.cfg* et rajouter le module webui :
modules webui
Il reste à définir les contacts (personnes) du système dans
*/etc/shinken/contacts*. Par défaut, un administrateur est défini dans
*/etc/shinken/contacts/admin.cfg*, son mot de passe est utilisé pour
l'interface Webui.
Deux commandes servent régulièrement quand on modifie la configuration.
Vérifier que la configuration est syntaxiquement correcte :
$ service shinken check
Redémarrer les services Shinken :
$ service shinken restart
Si tout est correct, on peut se connecter sur Webui depuis un navigateur à l'adresse :
http://<SERVER>:7767
### les objets supervisés
Nagios introduit la notion de *host* et de *service* pour désigner les
machines et les services s'exécutant sur ces machines. La configuration de
Shinken après installation est minimale :
- les notifications par email sont activées et seront utilisées si [votre serveur peut envoyer des emails](http://blogduyax.madyanne.fr/smtp-relay-avec-qmail-sur-debian-wheezy.html)
- la machine locale est elle-même supervisée de manière générique, je crois que le seul indicateur c'est le Ping pour vérifier qu'elle est accessible.
On va enrichir tout cela en installant un agent SNMP sur le serveur Shinken ce qui permet de surveiller, entre autre, l'utilisation CPU, RAM, occupation des disques.
On installe un agent SNMP sur la machine locale avec le paquet **snmpd** qui, par défaut, n'est accessible que par localhost :
$ apt-get install snmpd
On rajoute le greffon linux-snmp dans Shinken :
$ shinken install linux-snmp
On corrige deux soucis de l'installation sous Debian :
le script **check_icmp** doit avoir les droits setuid :
$ chmod u+s /usr/lib/nagios/plugins/check_icmp
Le module PERL **utils.pm** est mal référencé par les greffons Nagios ; on le
fait pointer sur celui de notre installation de PERL dans */usr/share/perl5*
/usr/share/perl5$ ln -s /usr/lib/nagios/plugins/utils.pm
On peut modifier la configuration du *host* **localhost** en éditant le fichier */etc/shinken/hosts/localhost.cfg* :
define host{
use linux-snmp
contact_groups admins
host_name localhost
address 127.0.0.1
}
On vérifie la configuration et on redémarre Shinken :
$ service shinken check
$ service shinken restart
Si la configuration est correcte, la machine locale avec ses services CPU,
Mémoire apparaît désormais dans Webui. La fréquence du *polling*, les
notifications, tout est configurable finement par *host* , par groupe de
*host*, par service. La documentation est riche et bien détaillée.
Dans le cas de GNU/Linux, la supervision par SNMP apporte les indicateurs de
base d'un serveur. Pour avoir plus, on peut donner l'accès SSH au superviseur
Shinken sur les serveurs ou on peut installer NRPE (Nagios Remote Plugin
Executer). Je préfère NRPE car on ne demande pas l'accès total au serveur à
superviser. L'installation de [NRPE est bien décrite dans cet
article](http://xmodulo.com/2014/03/nagios-remote-plugin-executor-nrpe-
linux.html). Pour finir, beaucoup de resources Nagios sont disponibles sur
le site [Nagios Exchange](http://exchange.nagios.org).

@ -0,0 +1,39 @@
---
layout: post
title: Du nouveau sur Pecosys
categories: Hébergement Blog
tag: planet
---
Pecosys est le gestionnaire de commentaires pour les blog statiques créés avec
[Pelican](http://docs.getpelican.com/en/3.4.0) présenté [dans ce
billet](http://blogduyax.madyanne.fr/pecosys-les-commentaires-avec-pelican.html) en
août dernier.<!-- more --> Pour rappel, il s'agit de proposer une alternative aux systèmes
décentralisés sur des sites tiers comme Disqus et de conserver ces données qui
font partie de l'Histoire d'un blog dans les sources du blog.
La présentation du projet a eu un petit succès d'estime. Je suis conscient que
le public ciblé est réduit : du barbu (ou pas) qui écrit ses articles en
Markdown, le construit en HTML statique gràce à Pelican et versionne les
sources dans GIT. Sachant que Pecosys demande quelques connaissances système
pour s'installer et qu'il est écrit en Python, on touche les gens qui ont un
serveur dédié (physique ou virtuel) à la maison ou chez un hébergeur et qui
aiment se faire plaisir (ou mal selon le point de vue)..
Pecosys est en fonction sur ce blog depuis 3 mois. Il y a eu beaucoup de
corrections de bugs (désolé pour les commentaires perdus, ça ne devrait plus
arriver grâce aux logs étendus de NginX) et quelques nouveautés livrées et
installées tout récemment :
- Le support multi-langue dans la communication entre Pecosys et
l'administrateur du blog. Pour l'instant, le français et l'anglais sont
proposés.
- Une communication plus humaine entre Pecosys et l'administrateur du blog
avec des emails moins télégraphiques.
- La possibilité pour les lecteurs de s'abonner par email au flux de
commentaire d'un article et de se désabonner quand ils le souhaitent.
- La possibilité de relancer la *génération Pelican* du blog à chaque publication d'un
commentaire.
L'ensemble des sources et une documentation plus technique est publié [sur mon
GitHub.](https://github.com/kianby/pecosys)

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save