FreeBSD: poudriere cross compiling (ARM)

Poudriere permet de réaliser du cross compiling et donc de compiler des cibles d'une autre architecture. Nous allons ici prendre l'exemple d'une architecture amd64 cross-compilant vers ARM6 pour un Raspberry PI 2.

Préparation de la jail poudrière

Tout d'abord on va télécharger une image RPI2 viable depuis le miroir FreeBSD puis la décompresser

fetch http://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/11.0/FreeBSD-11.0-RELEASE-arm-armv6-RPI2.img.xz
unxz FreeBSD-11.0-RELEASE-arm-armv6-RPI2.img.xz

On va ensuite la rendre disponible au niveau filesystem grâce à l'utilitaire mdconfig

mdconfig -a -t vnode -f FreeBSD-11.0-RELEASE-arm-armv6-RPI2.img
mount /dev/md0s2a /mnt

On va maintenant supprimer le flag pour le firstboot (inutile ici nous serons dans une jail de build) et créer le répertoire /usr/local/bin pour poudriere

rm /mnt/firstboot
mkdir -p /mnt/usr/local/bin

L'image est maintenant prête on va créer l'archive pour poudriere:

tar -cpf /tmp/FreeBSD-11.0-RELEASE-arm-armv6-RPI2.tar .

Nous pouvons maintenant créer la jail

poudriere jail -c -j 11-arm6 -m tar=/tmp/FreeBSD-11.0-RELEASE-arm-armv6-RPI2.tar -a arm.armv6 -v 11.0-RELEASE

Support de la compilation ARM

Tout d'abord on va avoir besoin de qemu-user-static pour réaliser cette cross compilation. Il a 2 avantages:

  • Il n'a pas de dépendances particulières
  • Le binaire étant statique il va permettre à poudrière de s'éxecuter correctement sans devoir copier des librairies dynamiques supplémentaires dans la jail
pkg install qemu-user-static

Ajoutez maintenant l'émulateur ARM aux interpréteurs utilisables par poudriere

binmiscctl add armv6 --interpreter "/usr/local/bin/qemu-arm-static"
      --magic
      "\x7f\x45\x4c\x46\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00"
      --mask
      "\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff"
      --size 20 --set-enabled

Cross-compiling !

L'environnement est prêt, il ne reste plus qu'à lancer la compilation, par exemple de zsh

poudriere bulk -j 11-arm6 -p default shells/zsh
 [00:00:00] ====>> Cross-building ports for arm.armv6 on amd64 requires QEMU
 [00:00:00] ====>> Creating the reference jail... done
 [00:00:00] ====>> Mounting system devices for 11-arm6-default
 [00:00:00] ====>> Mounting ports/packages/distfiles
 [00:00:00] ====>> Using packages from previously failed build
 [00:00:00] ====>> Mounting packages from: /usr/local/poudriere/data/packages/11-arm6-default
 [00:00:00] ====>> Copying /var/db/ports from: /usr/local/etc/poudriere.d/11-arm6-options
 [00:00:00] ====>> Raising MAX_EXECUTION_TIME and NOHANG_TIME for QEMU
 [00:00:00] ====>> Copying latest version of the emulator from: /usr/local/bin/qemu-arm-static
 /etc/resolv.conf -> /usr/local/poudriere/data/.m/11-arm6-default/ref/etc/resolv.conf
 [00:00:00] ====>> Starting jail 11-arm6-default
 [00:00:01] ====>> Logs: /usr/local/poudriere/data/logs/bulk/11-arm6-default/2017-01-13_22h51m51s
 [00:00:01] ====>> Loading MOVED
 [00:00:02] ====>> Calculating ports order and dependencies
 [00:00:32] ====>> Sanity checking the repository
 [00:00:32] ====>> Checking packages for incremental rebuild needed
 [00:00:32] ====>> Deleting stale symlinks
 [00:00:32] ====>> Deleting empty directories
 [00:00:32] ====>> Cleaning the build queue
 [00:00:33] ====>> Recording filesystem state for prepkg... done
 [00:00:33] ====>> Building 36 packages using 2 builders
 [00:00:33] ====>> Starting/Cloning builders
 [00:00:35] ====>> Hit CTRL+t at any time to see build progress and stats
 [00:00:35] ====>> [01][00:00:00] Starting build of ports-mgmt/pkg

Votre jail de cross compilation est maintenant opérationnelle, vous pouvez compiler sur un vrai CPU et ne plus attendre des jours que votre Raspberry PI compile X11.

Installer et utiliser powerline sur Archlinux et FreeBSD

Powerline est un excellent module qui peut se greffer sur votre shell favori, sur vim et sur tmux. Il permet d'ajouter une couche dynamique intéressante sur les outils précédents en ajoutant de la colorisation et des états à votre shell, tmux ou vim. vim powerline

Installation

Sur votre Archlinux installez les paquets suivants:

pacman -S powerline powerline-vim powerline-fonts

Note: si votre Archlinux est un serveur (ce que je ne recommande pas), n'installez pas les fonts Sur FreeBSD installez les paquets suivants:

pkg install py27-powerline-status powerline-fonts py27-psutils

Note: si votre FreeBSD utilise une version de python par défaut différence, par exemple Python 3.5, changez les noms de paquets par py35-powerline-status et py35-psutils. Si votre FreeBSD est un serveur vous n'avez pas besoin des fonts.

Intégration tmux

tmux est un excellent remplaçant au vénérable screen. Il supporte très bien powerline. Pour activer le support powerline dans tmux, éditez le fichier tmux.conf(~/.tmux.conf pour votre utilisateur uniquement, en global: /etc/tmux.conf sous Linux, /usr/local/etc/tmux.conf sous FreeBSD) et ajoutez la ligne suivante.

Archlinux

source /usr/lib/python3.6/site-packages/powerline/bindings/tmux/powerline.conf

FreeBSD

source /usr/local/lib/python2.7/site-packages/powerline/bindings/tmux/powerline.conf

Note: la version de Python est peut être à changer dans ce chemin, sous FreeBSD cela dépend de la version de Python par défaut sur votre repository, sous Archlinux il se peut que cela devienne Python 3.6 ou plus lorsqu'il sortira. Lancez maintenant un nouveau tmux ou lancez la commande suivante dans un nouveau tmux (après avoir appuyé sur CTRL+B)

:source-file

Résultat:tmux powerlineIntégration ZSH

Pour intégrer powerline sur ZSH il vous faudra simplement sourcer powerline dans le fichier ~/.zshrc de l'utilisateur concerné Sous Archlinux

source /usr/lib/python3.6/site-packages/powerline/bindings/zsh/powerline.zsh

Sous FreeBSD

source /usr/local/lib/python2.7/site-packages/powerline/bindings/zsh/powerline.zsh

Résultat sur un shell local:

powerline-zsh-local

Intégration BASH

Pour bash c'est la même chose, sourcez powerline dans le fichier ~/.bashrc de votre utilisateur: Sous Archlinux:

source /usr/lib/python3.6/site-packages/powerline/bindings/bash/powerline.sh

Sous FreeBSD:

source /usr/local/lib/python2.7/site-packages/powerline/bindings/bash/powerline.sh

Résultat sur un shell distant, en SSH:powerline-bash-ssh

Intégration VIM

Enfin il nous reste à l'implémenter dans vim éditez le fichier ~/.vimrc si vous souhaitez l'activer pour votre utilisateur ou /etc/vim/vimrc (/usr/local/etc/vim/vimrc sous FreeBSD) si vous souhaitez les modifications en global. Ajoutez les lignes suivantes:

set laststatus=2
set t_Co=256

Si vous utilisez un vim compilé pour Python 3, ajoutez la ligne suivante:

let g:powerline_pycmd="py3"

Enfin, uniquement sous FreeBSD vous devrez ajouter la ligne suivante dans votre vimrc:

set rtp+=/usr/local/lib/python2.7/site-packages/powerline/bindings/vim/

Créer son serveur minetest sous FreeBSD

Minetest est un clone libre de Minecraft rédigé en C++ utilisant le moteur Irrlicht. Il dispose d'une partie cliente et d'une partie serveur.

La partie serveur de Minetest utilise des fichiers et une base SQLite pour héberger ses données (notamment la carte).

Installation

L'installation du serveur minetest se fait en deux temps, il faut installer d'une part le moteur Minetest (APIs, fonctionnalités...) et d'autre part la partie intelligente du jeu. Les options par défaut des packages FreeBSD officiels ne sont pas satisfaisantes pour faire un serveur, nous utiliserons les ports.

Dans un premier temps installez le port games/minetest avec les options suivantes:

Minetest options

cd /usr/ports/games/minetest/
make install

Puis installez le port games/minetest_game (à vous de choisir si vous voulez la documentation ou non)

cd /usr/ports/games/minetest_game/
make install

Configuration

La configuration du serveur Minetest s'effectue au niveau du fichier /usr/local/etc/minetest.conf.

Changez tout d'abord le nom d'utilisateur du superutilisateur du serveur. C'est lui qui pourra donner les droits à d'autres utilisateurs. Une fois en jeu n'oubliez pas de changer son mot de passe via le menu dédié !

name = superminetest

On va ensuite changer quelques options administratives, le nom du serveur, son adresse, l'URL web et le message de connexion

server_name = Minetest UnixExperience (FR)
server_address = minetest.unix-experience.fr
server_url = http://mintest.unix-experience.fr
motd = Welcome to UnixExperience Minetest Server

Passons maintenant à la configuration réseau. Vous pouvez changer le port et optionellement l'adresse d'écoute, si vous disposez de plusieurs interfaces réseau (autrement le serveur écoute sur toutes les interfaces). Vous pouvez également modifier la limite de joueurs connectés.

port = 30000
bind_address = 8.8.9.34
max_users = 100

Si vous souhaitez que votre serveur s'annonce sur la liste de serveurs publique, spécifiez l'option suivante:

server_announce = 1

Passons maintenant à la configuration du mode de jeu du serveur.

L'option creative_mode permet d'active le mode créatif. Si elle est à false, vous serez en mode survie.

Vous pouvez également activer/désactiver les dommages et le JcJ.

creative_mode = false
enable_damage = true
enable_pvp = false

Le cycle jour/nuit et saisons est personnalisable, il suffit de faire varier les options time_speed et year_days:

time_speed = 72
year_days = 365

Pour savoir comment calculer la durée réelle en secondes d'une journée en jeu voici la formule:

1 jour en jeu = 86400/time_speed secondes

Enfin, si vous souhaitez rendre votre serveur un peu plus autonome, vous pouvez donner des droits par défaut à vos joueurs (ici: interagir, casser, aller vite et voler)

default_privs = interact, shout, fast, fly

Modding

Le modding permet d'ajouter des fonctionnalités à vos serveurs Minetest. L'avantage de Minetest par rapport à Minecraft est la possibilité quasi infinie de modder côté serveur, permettant aux clients de bénéficier d'un ensemble de fonctionnalités très larges et de textures et modèles personnalisés sans rien installer sur le client.

Pour installer un mod, extrayez le dans le répertoire /usr/local/share/minetest/games/minetest_game/mods puis activez le en ajoutant la ligne suivante dans le fichier world.mt de votre monde présent par défaut dans /var/db/minetest/world (remplacez homedecor_modpack par le nom du répertoire extrait)

load_mod_homedecor_modpack = true

Conclusion

Vous savez désormais comment installer et configurer un serveur minetest avec des mods sous FreeBSD, il est temps de terraformer !

Compiler une application Android avec Jenkins sous FreeBSD

Jenkins est un outil d'intégration continue permettant de compiler et valider des applications. Il s'intègre avec diverses applications, que ce soit JAVA, C/C++ ou bien d'autres langages. Nous allons ici étudier la compilation d'une application Android sous FreeBSD, celle-ci nécessitant un peu de tuning.

Prérequis

Installez tout d'abord les paquets jenkins, gradle, apache-ant et linux_base-c6 et bash

pkg install jenkins gradle linux_base-c6 bash apache-ant

Configuration du système

Créez ensuite un lien symbolique pour bash dans /bin

ln -s /usr/local/bin/bash /bin/bash

Configuration du SDK Android

Téléchargez ensuite le SDK Android ici et extrayez le dans /usr/local

cd /usr/local
tar xvzf android-sdk_r24.0.2-linux.tgz

Lancez la commande suivante afin de visualiser les SDK dont vous avez besoin:

/usr/local/android-sdk-linux/tools/android list sdk -u

Puis téléchargez les composants qui vous intéressent (ici toutes les API de Android 4.0 à 5.0)

/usr/local/android-sdk-linux/tools/android update sdk --filter 1,2,4,5,6,7,8,9,10,11,34,35,36,37,38,39,40,41,42 -u

Téléchargez maintenant les outils de compilation Android, puisque le SDK Android ne reconnait pas encore FreeBSD et copiez les dans le répertoire dédié du SDK (changez la version dans le répertoire final par celle que vous avez)

https://dl-ssl.google.com/android/repository/build-tools_r21.1-linux.zip
unzip build-tools_r21.1-linux.zip
cp -R android-5.0/* /usr/local/android-sdk-linux/build-tools/21.1.2/

Enfin changez les droits sur le SDK Android afin d'autoriser jenkins à utiliser tous les outils.

chown -R jenkins:jenkins /usr/local/android-sdk-linux

Configuration de Jenkins

Lancez maintenant le service Jenkins et connectez vous à l'URL http://jenkins.instance:8180

service jenkins start

Créez ensuite un nouveau projet en mode FreeStyle, configurez votre repository source et les options de compilation suivantes: Jenkins AndroidCelles ci vont configurer le fichier local.properties pour gradle, mettre à jour le projet si nécessaire puis appeler ANT afin d'effectuer le build android.

Conclusion

Vous pouvez désormais compiler vos applications Android avec FreeBSD. Veuillez noter que la configuration reste très proche sous Linux, à l'exception de la couche émulation.

Sources

https://wiki.jenkins-ci.org/display/JENKINS/Building+an+Android+app+and+test+project http://zewaren.net/site/?q=node/125

[Serveur Dédié] Serveur Mail

Introduction

Dans cette article nous allons voir la mise en place d’un serveur mail utilisant OpenSMTPD comme service SMTP et Dovecot en tant que service IMAP ainsi que Roundcube comme webmail.

OpenSMTPD a été vu dans un précédent article.

Dovecot est un service permettant la mise en place de serveur imap ou pop3. Dovecot a été vu sur ce site sur ce lien.

Nous allons présenter la configuration de OpenSMTPD ainsi que celle de Dovecot puis nous détaillerons les modifications qui on été nécessaires au fonctionnement des deux services ainsi que son utilisation d’un point de vue utilisateur via le déploiement de Roundcube sur un serveur web Nginx hébergé  par FreeBSD 9.2. Continuer à lire

ZFS: remplacement de disque à chaud

ZFS permet de remplacement automatiquement des disques à chaud. Cela permet par exemple d'étendre la capacité du pool ZFS ou encore de remplacer un disque défectueux, ou encore de changer de technologie de disque (passage sur un SSD, sur une autre technologie d'IO virtuelles...) Nous allons ici partir du principe que notre serveur possède un slot de libre (sur une VM c'est plus simple, il suffit d'ajouter le disque à chaud). Nous insérons un disque de données vierge de capacité égale (ou supérieure) dans ce slot. Il est reconnu par le système en mode hotplug (SATA, SCSI, Virtio...). Afin de remplacer le disque, il suffit de taper la commande:

zfs replace mypool ada2 /dev/ada3

Bien sur vous pouvez choisir de changer de technologie de disque (ici une migration d'un disque ATA vers un disque virtio:

zfs replace mypool ada2 /dev/vtbd0

Vous pourrez ensuite vérifier l'état de la récupération avec:

zpool status

S'il y a un nombre suffisant de données, vous verrez le pool passer en mode resilvering. Cela signifie qu'il copie les données du premier disque vers le second. Voilà, vous savez désormais comment remplacer un disque dans un pool ZFS Dans mon cas cela a permis de passer d'une technologie SATA en mode writethough à des disques Virtio en mode DirectSync, améliorant sensiblement les performances d'écriture.

Installer Gitlab sous FreeBSD

Introduction

Gitlab est un puissant outil permettant de monter une infrastructure de type github sur son infrastructure. Gitlab peut se connecter à un annuaire LDAP d'entreprise afin que les utilisateurs soient automatiquement reconnus. En terme de fonctionnalités, Gitlab permet de créer des repositories git, forker, créer des branches, faire des commits sur HTTP(S), partager des projets entre plusieurs utilisateurs... Nous allons ici voir comment installer Gitlab sur un serveur FreeBSD.

Prérequis

Afin d'utiliser Gitlab il vous faudra installer les packages suivants:

pkg install git icu libxml2 libxslt postfix python27 logrotate py27-docutils rubygem-bundler rubygem-passenger sudo gmake rubygem-rake

Bases de données

Afin d'utiliser Gitlab il vous faudra deux bases de données, une base Redis et une base MySQL/PostgreSQL. Nous utiliserons ici une base PostgreSQL 9.2 existante. Vous pouvez installer PostgreSQL et Redis sur le serveur, néanmoins nous utiliserons un serveur externe.

Installation et configuration de Redis

On installe le paquet Redis, on active le service et on le lance:

pkg install redis
echo "redis_enable=\"yes\"" > /etc/rc.confservice redis start

Création de la base et de l'utilisateur PostgreSQL

Le service de base de données PostgreSQL est considéré comme prêt, on va ajouter une base de données et un utilisateur:

su - pgsql
createdb gitlab
psql gitlab
CREATE USER gitlab WITH PASSWORD 'dbpwd';
GRANT ALL PRIVILEGES ON DATABASE gitlab TO gitlab;
\q

Préparation de l'environnement

Nous aurons besoin d'un utilisateur et d'un groupe dédié:

pw addgroup git
pw adduser git -g git -m -d /usr/local/www/gitlab -c "GitLab"
ln -s /usr/local/bin/git /usr/bin/git

Gitlab-shell

Installation

On va installer le shell gitlab, permettant d'interface gitlab avec git. On se connecte en utilisateur git et on clone les sources:

su - git
git clone https://github.com/gitlabhq/gitlab-shell.git
git checkout v1.9.4

Configuration

Toujours en utilisateur git, on copie la configuration d'example

cp config.yml.example config.yml

Il faut modifier ici trois éléments:

  • Changez tout d'abord l'URL de votre site (gitlab_url)
  • Remplacez les chemins en /home/git par /usr/local/www/gitlab
  • Configurez redis en paramétrant le chemin du binaire (/usr/local/bin/redis-cli) et l'adresse de votre serveur Redis

Enfin lancez la commande /usr/local/www/gitlab/gitlab-shell/bin/install.

Gitlab

Installation

En utilisateur git on clone le repository gitlab et on se place sur la version en cours

su - git
git clone https://github.com/gitlabhq/gitlabhq.git gitlab
git checkout 6-8-stable

Configuration

En utilisateur git, copiez la configuration de gitlab et éditez la

cp config/gitlab.yml.example config/gitlab.yml

Tout d'abord modifiez le nom du serveur web, l'hôte et le port:

host: gitlab.unix-experience.fr
port: 443
https: true

Ensuite l'adresse mail de notification et de support:

email_from: gitlab@unix-experience.fr
support_email: support@unix-experience.fr

Modifiez le chemin de git:

bin_path: /usr/local/bin/git

Modifiez tous les chemins contenant /home/git par /usr/local/www/gitlab/ Copiez ensuite la configuration d'unicorn et modifiez également les chemins. *

cp config/initializers/rack_attack.rb.example config/initializers/rack_attack.rb

Ajoutez également la ligne listen suivante:

listen "/usr/local/www/gitlab/gitlab/tmp/sockets/gitlab.socket"

Enfin copiez et modifiez la configuration de base de données:

cp config/database.yml.postgresql config/database.yml
vi config/database.yml

On va ensuite procéder à l'installation d'une gem et de notre base de données.

gem install charlock_holmes --version '0.6.9.4'
bundle install --deployment --without development test mysql aws

Enfin, en utilisateur git, toujours dans le répertoire d'installation de gitlab, on termine l'installation en préparant les assets.

bundle exec rake assets:precompile RAILS_ENV=production

Script init

Gitlab utilise un service qui s'exécute sur la machine. On va copier le script init dans le rc.d de FreeBSD et le lancer

cp lib/support/init.d/gitlab /usr/local/etc/rc.d/gitlab
chmod +x /usr/local/etc/rc.d/gitlab
service gitlab start

Configuration Apache

Après avoir installé rubygem-passenger (dans la liste de prérequis), vous devrez compiler le module pour Apache. Lancez simplement la commande suivante:

/usr/local/lib/ruby/gems/1.9/gems/passenger-4.0.41/bin/passenger-install-apache2-module

Sélectionnez ruby et validez, puis attendez que la compilation se termine. Ajoutez ensuite les lignes suivantes dans votre configuration Apache:

LoadModule passenger_module /usr/local/lib/ruby/gems/1.9/gems/passenger-4.0.41/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
        PassengerRoot /usr/local/lib/ruby/gems/1.9/gems/passenger-4.0.41
        PassengerDefaultRuby /usr/local/bin/ruby19
</IfModule

Workaround: Problème avec la librairie underscore

Si votre Gitlab rencontre un erreur (en 6.8 c'est le cas), lorsque vous vous connectez en interface web, vérifiez les logs de l'application dans /usr/local/www/gitlab/gitlab/log/production.log. Si vous rencontrez l'erreur suivante:

couldn't find file 'underscore'

Editez le fichier /usr/local/www/gitlab/gitlab/app/assets/javascripts/application.js.coffee et supprimez la ligne concernant underscore

Conclusion

Vous avez désormais en votre possession un Gitlab opérationnel, permettant d'ajouter une valeur ajoutée à votre entité, en offrant un service de qualité de type github, tout en gardant la main-mise sur les données.

Source

Afin de rédiger cet article je me suis basé sur le tutoriel suivant et l'ai modifié afin de moderniser l'installation de gitlab. https://github.com/chadliu23/Installation-guide-for-GitLab6-on-Freebsd

Migration de configuration pkg

Suite à une récente mise à jour de pkgng (la version 1.2), l'ancien format de déclaration des repositories a été retiré. Pour rappel, pour utiliser les paquets relatifs à un repository, il fallait éditer le fichier /usr/local/etc/pkg.conf et ajouter une ligne comme celle-ci:

packagesite: http://repository.unix-experience.fr/FreeBSD/9.1/packages

Désormais il faut procéder utiliser deux éléments:

  • Un enregistrement SRV pour votre repository
  • Un fichier de configuration du repository spécifique

Pour l'enregistrement SRV, il vous faudra l'enregistrement suivant:

_http._tcp.repository.unix-experience.fr 10 10 80 repository.unix-experience.fr

Pour la configuration, vous devrez tout d'abord créer un répertoire dédié à la configuration des repos:

mkdir -p /usr/local/etc/pkg/repos/

Et créer un fichier de configuration pour votre repo (par exemple /usr/local/etc/pkg/repos/myrepo.conf):

MYREPO: {
  url: "pkg+http://repository.unix-experience.fr/FreeBSD/9.1/packages",
  mirror_type: "srv",
  signature_type: "none",
  fingerprints: "/usr/share/keys/pkg",
  enabled: yes
}

Vous avez désormais un fichier de repository opérationnel.

Les miroirs pkgng de FreeBSD sont désormais disponibles

La version 10.0 de FreeBSD offrira à ce dernier un tournant dans son système de gestion de paquets binaires. Les anciens outils pkg_* seront retirés pour être remplacés définitevement par pkgng.

Depuis l'introduction de pkgng, il n'existait pas de miroir permettant de télécharger et installer ces paquets. C'est désormais chose faite. L'équipe FreeBSD a annoncé la possibilité d'utiliser des miroirs permettant de télécharger les paquets sous forme binaire.

Fonctionnement du miroir

A contrario de la plupart des miroirs Linux, FreeBSD (pkg_*) et OpenBSD, pkgng ne se base pas sur un enregistrement DNS de type A.

L'équipe de développement a considéré qu'il était plus intéressant d'utiliser des enregistrements SRV pour gérer les miroirs de pkg, permettant de gérer la priorité de chacun des serveurs.

Ainsi, lorsque pkg voudra accéder à http://pkg.FreeBSD.org/${ABI}/latest il résolvera l'enregistrement _http._tcp.pkg.freebsd.org et se connectera à l'un des miroirs priotaires:

_http._tcp.pkg.freebsd.org. 60  IN  SRV 10 10 80 pkg1.nyi.freebsd.org.
_http._tcp.pkg.freebsd.org. 60  IN  SRV 10 10 80 pkg0.bme.freebsd.org.
_http._tcp.pkg.freebsd.org. 60  IN  SRV 10 10 80 pkg0.isc.freebsd.org.

On notera que le TTL de l'enregistrement est de 60 secondes, afin de répartir la charge suivant les besoins.

Versions supportées

Les miroirs supportent toutes les versions actuellement supportées par l'équipe de FreeBSD (8.3, 8.4, 9.1, 9.2, 10.0 et 11).

Passer à pkgng

8.X series

Pour passer à pkgng sur les versions 8.3 et 8.4, il faudra passer par les ports:

cd /usr/ports/ports-mgmt/pkg
make install clean
echo WITH_PKGNG=yes >> /etc/make.conf
pkg2ng

9.X series

Les versions 9 (à partir de 9.1) embarquent un alias permettant d'installer pkg facilement:

pkg
echo WITH_PKGNG=yes >> /etc/make.conf
pkg2ng

10.X series et supérieures

pkgng est embarqué par défaut

Utiliser pkgng

Rechercher un paquet

pkg search <nom>

Installer un paquet

pkg install <nom>

Supprimer un paquet

pkg remove <nom>

Supprimer des dépendances obsolètes

pkg autoremove

Mettre à jour la liste des paquets locaux

pkg update

Mettre à jour les paquets installés

pkg upgrade

Liste des paquets installés

pkg info

Verrouiller/Déverrouiller un paquet

Cette fonction permet d'empêcher la modification (mise à jour/suppression) d'un paquet installé. Cela est très utile dans le cas d'un environnement de développement, par exemple.

pkg lock <nom>
pkg unlock

Audit de paquets

Cette fonction permet, à partir d'une base de données d'audit, de définir quels sont les paquets vulnérables sur le système.

pkg audit

Conclusion

Les miroirs binaires étant désormais disponibles, une nouvelle étape est franchie pour FreeBSD. La prochaine étape est un système de signature de paquets simple et robuste.

Pour les utilisateurs de Linux qui voulaient essayer FreeBSD mais étaient réticents à cause de la compilation, vous n'avez plus de raisons de ne pas essayer FreeBSD !

Shibboleth (IdP): installation et retour d’expérience

Shibboleth est un système de fédération d'identités. Il permet d'authentifier des utilisateurs faisant partie d'établissements/entreprises différentes sur des applications mutualisées.

Peu présent et utile dans le secteur privé, Shibboleth est une référence en terme d'authentification dans le secteur public, au sein du ministère de l'enseignement supérieur et de la recherche. Renater, fournisseur d'accès à Internet réservé aux établissement d'enseignement supérieur et de recherche, est l'un des organismes qui l'utilise le plus.

Shibboleth est composé de plusieurs briques, notamment le Service Provider (SP, fournisseur de services) et dans notre cas le fournisseur d'identité (Identity Provider, IdP)

Installation

Pré-requis

Avant de pouvoir installer et utiliser shibboleth, il vous faudra installer JDK 6 et Tomcat 7.

Si vous utilisez Debian tapez simplement:

apt-get install openjdk-6-jdk tomcat7

Si vous utilisez FreeBSD, compilez le port www/tomcat

cd /usr/ports/www/tomcat7
make install clean

ou installez le package depuis votre repo pkgng préféré

pkg install tomcat

Installation de Shibboleth

Téléchargement de l'archive

On télécharge tout d'abord le dernier Shibboleth puis on l'extrait

wget http://shibboleth.net/downloads/identity-provider/latest/shibboleth-identityprovider-2.4.0-bin.tar.gz
tar xvzf shibboleth-identityprovider-2.4.0-bin.tar.gz

Configuration de la variable JAVA_HOME

Pour pouvoir installer Shibboleth nous allons avoir besoin de spécifier la variable d'environnement JAVA_HOME.

Pour Debian, tapez la commande suivante:

export JAVA_HOME="/usr/lib/jvm/java-6-openjdk-amd64/jre"

Pour FreeBSD:

  • si vous utilisez csh:
setenv JAVA_HOME "/usr/local/openjdk6/jre/"
  • si vous utilisez sh, bash ou encore zsh:
export JAVA_HOME="/usr/local/openjdk6/jre/"

Lancement de l'installeur

Pour finir nous lançons l'installation:

cd shibboleth-identityprovider-2.4.0
./install.sh

Lors de l'installation le chemin d'installation, le nom du serveur (adresse DNS du CAS/SSO) et un mot de passe vous seront demandés:

Where should the Shibboleth Identity Provider software be installed? [/opt/shibboleth-idp]
What is the fully qualified hostname of the Shibboleth Identity Provider server? [idp.example.org]
A keystore is about to be generated for you. Please enter a password that will be used to protect it.

Une fois l'installation terminée, on copie le fichier WAR de l'application java dans le répertoire d'applications tomcat.

Pour Debian:

cp /opt/shibboleth-idp/war/idp.war /usr/share/tomcat7/webapps/

Pour FreeBSD:

cp /opt/shibboleth-idp/war/idp.war /usr/local/apache-tomcat-7.0/webapps/

Il faut ensuite changer les droits des répertoires de logs et de méta-données.

Pour Debian:

chown -R tomcat7 /opt/shibboleth-idp/logs
chown -R tomcat7 /opt/shibboleth-idp/metadata

Pour FreeBSD:

chown -R www /opt/shibboleth-idp/logs
chown -R www /opt/shibboleth-idp/metadata

Pour finir, on va ajouter quelques librairies JAVA à tomcat afin que Shibboleth fonctionne correctement. Vous trouverez ces fichiers dans le répertoire où vous avez extrait l'installeur de Shibboleth.

Pour Debian:

cp endorsed/*.jar /usr/share/tomcat7/endorsed/

Pour FreeBSD:

cp endorsed/*.jar /usr/local/apache-tomcat-7.0/endorsed/

Lancement du service

On peut désormais lancer Tomcat.

Sous Debian:

service tomcat7 start

Sous FreeBSD:

service tomcat start

Pour vérifier que tout fonctionne, connectez vous à l'adresse http://idp.example.org:8080/idp/profile/Status. Si la page affiche ok c'est que l'application est correctement déployée.

Enfin, vérifiez que le portail SSO de Shibboleth fonctionne en allant à l'URL http://idp.example.org:8080/idp/Authn/UserPassword

Designer le SSO

Le premier axe d'amélioration est la personnalisation du design du SSO. Pour cela c'est très simple, il suffit d'aller dans le répertoire webapps/idp/ de votre tomcat et de personnaliser les fichiers login.jsp et login.css, correspondant à la page de login. Vous n'avez pas besoin de redémarrer tomcat à chaque modification, à contrario des fichiers de configuration de Shibboleth.

Conclusion

Nous avons ici fait la partie la plus simple, à savoir l'installation de Shibboleth. Le plus compliqué reste la configuration de l'IdP lui-même. Vous trouverez dans les sources ci-dessous la documentation Renater, extrêmement complète permettant de comprendre les différents éléments à configurer pour Shibboleth (partez de la partie 4)

J'ai également essayé d'installer Shibboleth avec Jetty 8 (Shibboleth ne supporte que Jetty >= 7) mais je n'ai pas réussi, ni sur Debian, ni sur FreeBSD. Jetty nécessite d'intégrer des fichiers de configuration supplémentaires et des librairies Tomcat pour faire fonctionner Shibboleth, il reste donc plus pertinent d'utiliser Tomcat 7.

Par ailleurs, j'ai fortement apprécié le déploiement sur cette version de Tomcat 7. J'utilise peu Tomcat et ma précédente expérience avec Tomcat 6 n'avait pas été convaincante.

Même si vous n'utilisez pas la fédération d'identité, Shibboleth peut très bien être utilisé en tant que serveur CAS/SSO (dans mon cas il est branché sur 2 OpenLDAP). Si vous suivez la documentation Renater vous devriez sans problème arriver à faire fonctionner cette partie et pouvoir commencer à l'intégrer sur vos services web.

Sources

https://wiki.shibboleth.net/confluence/display/SHIB2/IdPInstall https://www.switch.ch/aai/docs/shibboleth/SWITCH/latest/idp/deployment/#shibboleth-idp-configuration https://services.renater.fr/federation/docs/installation/idp_decembre2012

FreeBSD 9.2 est sorti

FreeBSD 9.2 est sorti le 30 septembre 2013.

Ce release fait suite à la version LTS 9.1 de FreeBSD et embarque un ensemble de nouveautés très intéressantes:

  • Mise à jour du driver e1000, amélioration de performances
  • Intégration de virtio dans le kernel GENERIC (x86 et amd64), permettant d'utiliser les drivers dédiés à KVM et améliorant les performances
  • Ajout du support de la commande TRIM pour les SSD
  • Ajout du support de la compression LZ4 sur les volumes ZFS, bien plus performante que LZO
  • Suppression du driver firewire du kernel GENERIC
  • Amélioration des temps de démarrage, notamment au niveau du bootloader
  • Le bootloader a été mis à jour avec un nouveau logo aux couleurs de FreeBSD
  • Amélioration des performances I/O via les unmapped I/O

freebsd9.2-bootVous trouverez l'ensemble des notes concernant ce release ici.

Pour mettre à jour votre système, il suffit de procéder de la manière suivante:

freebsd-update fetch
freebsd-update -r 9.2-RELEASE upgrade
freebsd-update install
reboot
freebsd-update install

Si vous notez des dysfonctionnement sur certains ports, n'hésitez pas à les recompiler/réinstaller. Il est recommandé d'utiliser portmaster afin de recompiler tous les ports pour cette nouvelle version de FreeBSD.

portmaster -a

Monter sa poudrière pour forger son repository FreeBSD

Poudrière est un excellent outil disponible à la fois sur FreeBSD et DragonFlyBSD permettant de forger un repository pour FreeBSD/DragonFlyBSD afin de déployer rapidement un parc de serveurs ou de clients FreeBSD (en le couplant à Puppet vous serez à même de déployer très vite).

Prérequis

Poudrière requiert un pool ZFS, même si ce n'est pas obligatoire c'est fortement conseillé.

Installation

Rien de plus simple:

cd /usr/ports/ports-mgmt/poudriere
make install clean

Configuration

On va tout d'abord créer un répertoire et y monter notre pool ZFS:

mkdir /poudriere
zpool create -m /poudriere poudriere /dev/ada1

On va maintenant configurer poudriere. Ouvrez le fichier /usr/local/etc/poudriere.conf

ZPOOL=zpool
ZROOTFS=/poudriere
FREEBSD_HOST=ftp://ftp.freebsd.org
RESOLV_CONF=/etc/resolv.conf
BASEFS=/usr/local/poudriere
USE_PORTLINT=no
USE_TMPFS=yes
DISTFILES_CACHE=/usr/ports/distfiles
PARALLEL_JOBS=1
export HTTP_PROXY=http://myproxy:3128
export HTTPS_PROXY=http://myproxy:3128
export FTP_PROXY=http://myproxy:3128

Détaillons ces options:

  • ZPOOL: le nom de votre pool ZFS
  • ZROOTFS: la racine de votre pool
  • FREEBSD_HOST: l'hôte à partir duquel télécharger les ports et la distribution
  • RESOLV_CONF: le fichier de configuration du client DNS utilisé par poudrière
  • BASEFS: le répertoire où poudrière va mettre ses jails et ports
  • USE_PORTLINT: si vous souhaitez utiliser le nettoyage des ports passer la variable à yes
  • USE_TMPFS: demander à poudriere d'utiliser un TMPFS pour la compilation
  • DISTFILES_CACHE: permet de mettre en place un répertoire partagé entre les ports et les jails.
  • PARALLEL_JOBS: le nombre de tâches parallèles. Si le paramètres n'est pas indiqué, il s'agit du nombre de cœurs de processeur.

Nous aurons besoin d'un arbre de ports dédié. On demande à poudrière de le récupérer.

poudriere ports -c -p default

On va maintenant créer la jail correspondant à notre besoin:

poudriere jail -c -j "11_1" -v "11.1-RELEASE" -a amd64

Dans l'exemple ci-dessus, cela créée la jail 11_1, correspondant à FreeBSD 11.1 pour l'architecture amd64. (attention je ne recommande pas de mettre des . dans le nom de la jail, cela a des effets indésirables) Pour utiliser le format de packages pkg (devenu le seul, exécutez les lignes suivantes (11_1 correspond au nom de votre jail):

mkdir /usr/local/etc/poudriere.d
echo "WITH_PKGNG=yes" > /usr/local/etc/poudriere.d/11_1-make.conf

Il faut maintenant définir une liste de ports à forger. Ouvrez un fichier (par exemple dans /usr/local/etc/poudriere.d/11_1-ports) et insérez une liste de ports

shells/zsh
ports-mgmt/portmaster

Ensuite on va demander à poudriere de nous montrer les options de compilation afin de les sélectionner:

poudriere options -f /usr/local/etc/poudriere.d/11_1-ports -j 11_1 -p default

Enfin on lance la génération des ports:

poudriere bulk -f /usr/local/etc/poudriere.d/11_1-ports -j 11_1 -p default

Vous devriez avoir un résultat similaire:

fbsd91-tests# poudriere bulk -f /usr/local/etc/poudriere.d/11_1-ports -j 11_1 -p default   
====>> Creating the reference jail... done
====>> Mounting system devices for 11_1-default
====>> Mounting ports/packages/distfiles
====>> Mounting packages from: /usr/local/poudriere/data/packages/11_1-default
====>> Mounting /var/db/ports from: /usr/local/etc/poudriere.d/11_1-options
====>> Logs: /usr/local/poudriere/data/logs/bulk/11_1-default/2013-08-01_22h06m39s
/etc/resolv.conf -> /usr/local/poudriere/data/build/11_1-default/ref/etc/resolv.conf
====>> Starting jail 11_1-default
====>> Calculating ports order and dependencies
====>> Sanity checking the repository
====>> Deleting stale symlinks
====>> Deleting empty directories
====>> Cleaning the build queue
====>> Building 3 packages using 3 builders
====>> Starting/Cloning builders
====>> Hit CTRL+t at any time to see build progress and stats
====>> [01] Starting build of converters/libiconv
====>> [02] Starting build of ports-mgmt/portmaster
====>> [02] Finished build of ports-mgmt/portmaster: Success
====>> [01] Finished build of converters/libiconv: Success
====>> [01] Starting build of shells/zsh
====>> [01] Finished build of shells/zsh: Success
====>> Stopping 3 builders
====>> Preparing INDEX
====>> Generating INDEX... done
====>> Compressing INDEX-9... done
====>> Cleaning up
====>> Umounting file systems
====>> Built ports: ports-mgmt/portmaster converters/libiconv shells/zsh
====>> [11_1-default] 3 packages built, 0 failures, 0 ignored, 0 skipped
====>> Logs: /usr/local/poudriere/data/logs/bulk/11_1-default/2013-08-01_22h06m39s

Vous devriez voir apparaître l'arborescence de vos packages dans /usr/local/poudriere/data/packages/11_1-default (nom de la jail et de l'arbre de ports):

fbsd91-tests# ls -al /usr/local/poudriere/data/packages/11_1-default
total 13
drwxr-xr-x  8 root  wheel    9 Aug  1 22:09 .
drwxr-xr-x  3 root  wheel    3 Aug  1 22:06 ..
drwxr-xr-x  2 root  wheel    5 Aug  1 22:09 All
-rw-r--r--  1 root  wheel  348 Aug  1 22:09 INDEX-9.bz2
drwxr-xr-x  2 root  wheel    5 Aug  1 22:09 Latest
drwxr-xr-x  2 root  wheel    3 Aug  1 22:07 converters
drwxr-xr-x  2 root  wheel    3 Aug  1 22:07 devel
drwxr-xr-x  2 root  wheel    3 Aug  1 22:06 ports-mgmt
drwxr-xr-x  2 root  wheel    3 Aug  1 22:09 shells

Mettre à jour l'arbre et les packages

Il faudra régulièrement mettre à jour l'arbre de ports et forger de nouveau les paquets ayant été mis à jour. Pour se faire, il suffit de lancer simplement les commandes suivantes:

poudriere ports -u -p default
poudriere bulk -f /usr/local/etc/poudriere.d/11.1-ports -j 11_1 -p default

Vous avez désormais une forge de paquets et un repository FreeBSD.

Configuration côté client

Nous allons maintenant configurer notre client pour aller chercher ses packages sur le repository FreeBSD (il vous faudra un serveur http/ftp). Tout d'abord créez le répertoire /usr/local/etc/pkg/repos/ s'il n'existe pas Ouvrez le fichier /usr/local/etc/pkg/repos/local.conf

myrepo: {
    url: "pkg+http://freebsdrepo.lan/pub/FreeBSD/11.1",
    mirror_type: "http",
    signature_type: "none",
    fingerprints: "/usr/share/keys/pkg",
    enabled: yes,
}

puis tapez les commandes suivantes afin d'installer les paquets que nous avons forgé avec poudrière:

pkg update
pkg install zsh portmaster

C'est tout ! Source 1 Source 2 Source 3