Une forge sous NetBSD
Installation des packages
Installation de pkgin
D'abord on installe le package pkgin en lui même via la méthode binaire "traditionnelle" NetBSD
$ export PKG_PATH=ftp://ftp.fr.NetBSD.org/pub/pkgsrc/packages/NetBSD/amd64/5.0/All
$ pkg_add -v pkgin
Il faut ensuite modifier le fichier /usr/pkg/etc/pkgin/repositories.conf pour y ajouter la ligne
ftp://ftp.fr.NetBSD.org/pub/pkgsrc/packages/NetBSD/amd64/5.0/All
Puis mettre à jour la liste des packages binaire disponibles
$ pkgin update
Installation des autres composants
Les composants dont on aura besoin sont les suivant :
- git : scmgit
- postgresql : postgresql84-server
- le connecteur postgresql pour ruby : ruby18-postgres-pr
- le binding imagemagick pour ruby : ruby18-RMagick
- le serveur web ruby : thin
On installe donc tout ça
$ pkgin install scmgit postgresql84-server ruby18-postgres-pr ruby18-RMagick thin
Quelques minutes plus tard tout est arrivé et installé
Installation des gems
Il faudra ensuite installer les Ruby On Rails via les gem
$ gem install rail -v=2.2.2
Récupération de redmine
Exemple pour la version 0.8.6 ici :
$ ftp http://rubyforge.org/frs/download.php/66633/redmine-0.8.6.tar.gz
Maintenant que tout est près passons à la configuration
Configuration
Ajouts des utilisateurs
Nous allons faire tourner chaque processus avec des utilisateurs différents :
redmine:redmine pour le serveur web thin git:git pour le daemon git
$ groupadd _redmine
$ groupadd _git
$ useradd -m -g _redmine _redmine
$ useradd -m -g _git _git
Préparation du serveur postgresql
D'abord on copie le script d'init de postgresql dans /etc/rc.d/ pour qu'il puisse être activé au démarrage :
$ cp /usr/pkg/share/examples/rc.d/pgsql /etc/rc.d/pgsql
$ echo "pgsql=YES" >> /etc/rc.conf
Puis on initialise la base :
$ /etc/rc.d/pgsql initdb -E unicode
Enfin on démarre le serveur
$ /etc/rc.d/pgsql start
On crée ensuite la base qui va bien
$ createuser -I -E -P -S -R -D redmine
Renseigner le mot de passe
$ createdb -T template0 -O redmine -E UTF8
Postgresql est maintenant utilisable
Configuration de redmine
$ tar xvfz redmine-0.8.6.tar.gz
$ mv redmine-0.8.6 redmine # non obligatoire
$ cd redmine
Configuration de la base de production redmine
$ cp config/database.yml.example config/database.yml
Il faut modifier ensuite ce fichier pour correspondre à :
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: mon_pwd
On initialise la base redmine :
$ RAILS_ENV=production rake db:migrate
Et on insère les données par défaut :
$ RAILS_ENV=production rake redmine:load_default_data
Afin que redmine puisse fonctionner, l'utilisateur dans lequel va tourner le serveur thin doit pouvoir accéder à certains répertoires :
$ mkdir tmp public/plugin_assets
$ sudo chown -R _redmine:_redmine files log tmp public/plugin_assets
$ sudo chmod -R 755 files log tmp public/plugin_assets
Configuration du serveur thin
Notez que ici redmine est installé dans /home/_redmine
Il faut simplement créer un script rcng pour démarrer automatiquement thin : /etc/rc.d/thin
#!/bin/sh
#
# PROVIDE: thin
# REQUIRE: DAEMON
. /etc/rc.subr
name="thin"
rcvar=$name
command="/usr/pkg/bin/$name"
stop_cmd="/usr/pkg/bin/thin -c /home/_redmine/redmine -e production stop"
command_args="-c /home/_redmine/redmine -e production -d -u _redmine -g _redmine start"
load_rc_config $name
run_rc_command $1
Puis l'activer
$ chmod 755 /etc/rc.d/thin
$ echo "thin=YES" >> /etc/rc.conf
$ /etc/rc.d/thin start
Un serveur thin tourne maintenant sur le port 3000 du serveur
le daemon git
On considère ici que les dépots git se trouveront dans /home/_git/depots Tout comme pour thin il faut simplement créer un script rcng
#!/bin/sh
#
# PROVIDE: gitdaemon
# REQUIRE: DAEMON
. /etc/rc.subr
name="git-daemon"
rcvar=$name
pidfile="/var/run/$name.pid"
command="/usr/pkg/libexec/git-core/git-daemon"
command_args="--detach --base-path=/home/_git/depot --user=_git --group=_git --pid-file=$pidfile"
load_rc_config $name
run_rc_command $1
Puis l'activer
$ chmod 755 /etc/rc.d/gitdaemon
$ echo "gitdaemon=YES" >> /etc/rc.conf
$ /etc/rc.d/gitdaemon start
Déposer les dépots git dans /home/_git/depots et ils seront automatiquement disponibles, par exemple :
Pour un depot /home/_git/depots/CBlog.git :
$ git clone git://monbeauserveur/CBlog.git
Pour plus d'information ici UnixGarden est ton ami : là et là
Conclusion
La forge est maintenant opérationnelle, pour y accéder : http://monbeauserveur:3000 .
UPDATE :
rhaamo vient de rajouter le support de mercurial
CBlog bientôt une release donc un ports
Une nouvelle fonctionnalité vient de faire son apparition dans CBlog : la possibilité de pouvoir désactiver les commentaires via un simple "Comments: false" dans l'entête d'un message (à la demande de rhaamo - oui il y a au moins deux utilisateurs de CBlog :)).
En fait c'est encore mieux que ça, un nouveau champs Posts.nb.allow_comments est disponible dans le HDF (datafile) du coup vous pouvez faire ce que vous voulez avec dans votre template, il correspond au contenu de l'entête Comments:. Dans le template d'exemple si il est égale à false, il n'affiche pas le formulaire de commentaires.
Il me reste deux fonctionnalités à implémenter pour faire une release 1.0 :
- la gestion de page statiques.
- la gestion d'une page d'erreur pour afficher les problèmes plutot que le stderr.
Bien sûr il reste toujours du nettoyage a faire pour rendre plus propre et robuste le code, de la documentation :)
En ce qui concerne CPlanet il n'y a plus que du nettoyage car je ne vois pour le moment aucun besoin de rajouter de fonctionnalitées.
Dans tous les cas dès la release venue, un joli ports FreeBSD fera son entrée.
Toute contribution est la bienvenue, surtout que pour le moment le code n'a été testé que sous FreeBSD.
Du nouveau sous le capot
Depuis quelques temps déjà je me suis mis à essayer de faire du C pour de vrai. Pour cela il me fallait un vrai projet, alors je me suis dit tiens un planet BSD pour les BSDistes actifs francophone ça sera pas mal, du coup j'ai codé CPlanet. Ce qui m'a fait découvir une bibliothèque vraiment choupi s'il en ait pour faire du Web en C : clearsilver.
Résultat : planet.etoilebsd.net
CPlanet est donc un aggrégateur de flux rss et atom (merci libmrss) qui génère un site statique. Il utilise un fichier de conf vraiment simplissime. C'est la solution pour qui souhaite mettre en place un planet sans contrainte, puisque celui-ci n'utilise aucun langage de script, ni de base de données, juste un tout petit binaire.
Tout ça m'a bien motivé alors vlati pas que je me dis que blosxom c'est sympa, mais ça fait pas tout ce que je veux et en plus ça m'oblige à ajouter des lib perl de partout pour les plugins. Je ressors donc mon plus beau vim, mon petit clearsilver tout choupi qui ne me quitte plus et je me lance. Cerise sur le gâteau, je découvre discount, une jolie lib pour transformer du texte en html en suivant la syntaxe markdown.
Resultat : un moteur de blog en C (sous la forme d'un cgi) qui ne nécessite donc pas de langage de script, qui ne nécessite pas non plus de base de donnée toute bloatée. Il reprend le format de post de bloxsom si vous l'utilisiez avec les plugins tags et markdown.
CBlog est bien sûr libre sous license BSD.
Ce blog est donc maintenant propulsé par CBlog version de développement j'ai changé mes rewrite rules afin que le minimum de liens soit cassé.
Et non pour le mauvaise langue ce n'est pas à cause de cblog que mon site de sera pas disponible pendant 15 jours à compter de samedi, c'est pour cause de vacances et de coupure de machine.
EDIT CPlanet et CBlog sont écologiques !!! comme ils ne sont pas plein de bloat de partout, ils vous font économiser du CPU donc des Watts, alors il n'y a aucune raison de ne pas les utiliser.
PS: si vous avez des flux pour le planet à proposer je suis preneur à noter que si les gens sur le planet doivent être francophone, leurs posts n'ont pas besoin de l'être.
Colorize la vie
Blosxom est très sympathique, très simple à utiliser, dispose de plein de plugin bien foutu, mais j'avais quand même un reproche à lui faire : impossible de trouver un plugin de colorisation syntaxique.
Bref je me dis que ça doit pas être trop compliqué à faire, alors je sors mon plus beau vim et je m'apprête à en code un moi même.
Un petit tour sur le CPAN et je trouve deux projet permettant de mettre des belle couleurs sur du texte :
Je choisis le second car Text::VimColor fait des appels système à vim ce qui ne me plait pas. Ensuite je jette un oeil sur la doc développeur de blosxom, et je me rends vite compte que c'est très très simple de faire de nouveau plugin.
Pour la rédaction j'utilise Markdown, celui-ci génère des blocs de code html entre les balises <pre><code>...</code></pre>, Il ne me reste plus qu'a récupérer le contenu de ces balises, positionner un marqueur pour le choix du langage, et à passer le tout dans la Syntax::Highlight::Engine::Kate, puis de le remettre dans la page d'origine.
Ce qui donne colorize le marquer à mettre en début de bloc est [_langage_], la liste des langages est disponibles dans la doc de Syntax::Highlight::Engine::Kate


