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

OpenBSD 5.5 est sorti

Comme tous les 6 mois une nouvelle version d'OpenBSD est publiée.

OpenBSD est un système d'exploitation orienté sécurité et réseau, dont les principaux avantages sont la stabilité, grâce aux audits sur le code source, mais également l'ensemble très large de fonctionnalités réseau qu'il fournit.

Mises à jour

Améliorations sur l'installeur

L'installeur d'OpenBSD gère désormais l'installation automatisée (autoinstall). Cette installation automatisée permet de déployer ou mettre à jour rapidement OpenBSD par le réseau en spécifiant un fichier de réponses. Ce fichier est distribué via un serveur HTTP dont l'adresse est renseignée dans l'option next-server du DHCP. Cette installation est possible à la fois en installation par le réseau (netboot) et par le CD-ROM.

time_t 64 bits

Le problème actuel de la variable time_t est qu'elle est codée sur 32 bits dans tous les systèmes UNIX. Le 19 janvier 2038 à 3h14 et 7 secondes cette variable atteindra sa valeur limite, causant des problèmes graves, avec la réinitialisation de celle-ci à zéro.

L'équipe d'OpenBSD a fait un énorme travail afin de convertir le type de variables en 64 bits, de corriger tous les programmes inclus dans la distribution et patcher/auditer les différents ports.

Packet Filter

  • Packet Filter inclut désormais un nouveau système de queue afin de gérer la qualité de service.
  • Le paramètre received-on peut désormais prendre pour valeur any afin de correspondre à toutes les interfaces, excepté celles de loopback.
  • La politique de blocage par défaut dans le pf.conf de base est désormais un block return.

Sécurité

  • OpenBSD ne garantissait pas la sécurité par la signature cryptographique des paquets. C'est désormais chose faite, les paquets et la distribution sont désormais signés via l'outil signify.
  • relayd gère désormais la fonction Perfect Forward Secrecy de TLS avec ECDHE (courbe elliptique Diffie-Hellman). Cette option est désormais activée par défaut.
  • Le générateur de nombres aléatoires est désormais initialisé par le bootloader.
  • Le protecteur de la pile du noyau est également initialisé par le bootloader.

Réseau

  • Prise en charge de VxLAN
  • Amélioration de la gestion du déchargement des sommes de contrôles TCP/UDP/ICMP (checksum offload)
  • Activation de la prise en charge de domaines de routage IPv6 (ping6, traceroute6…)
  • tcpdump peut désormais détecter des sommes de contrôle incorrectes sur ICMP et ICMPv6
  • Diverses améliorations sur dhclient et dhcpd.

Performances

  • Les relations entre le cache des tampons et le démon de swap ont été améliorées.

Logiciels

Voici une liste non exhaustive de logiciels inclus dans OpenBSD 5.5

  • Gnome 3.10.2
  • KDE 4.11.5
  • PostgreSQL 9.3.2
  • Postfix 2.11
  • PHP 5.4.24
  • Firefox 26
  • OpenSSH 6.6
  • OpenSMTPd 5.4.2

Pilotes

  • Gestion des cartes réseau virtuelles VMware VMXNET3
  • Gestion des contrôleurs SCSI VMware Paravirtual
  • Gestion des contrôleurs SCSI virtio
  • Gestion des périphériques de nombres aléatoires virtio
  • Gestion des trackpad Broadcom présents dans les Macbook récents
  • KMS gère désormais les sorties DisplayPort
  • Ajout du système de fichiers tmpfs
  • Plusieurs améliorations sur la couche FUSE.

Plateformes matérielles

  • alpha : gestion multi-processeur
  • aviion : gestion des processeurs AViiON
  • armv7 remplace la prise en charge de l'architecture Beagle.

LibreSSL et HeartBleed

Malgré la sortie de cette version 5.5 et le fork de la bibliothèque OpenSSL en LibreSSL, orchestré par l'équipe d'OpenBSD afin de nettoyer et auditer le code d'OpenSSL, le processus de sortie de la version 5.5 n'a pas permis de patcher la faille avant création de la distribution. Il faut ainsi patcher la libssl d'OpenBSD après mise à niveau/installation.

Mettre à jour OpenBSD en 5.5

Pour passer en 5.5, il vous faudra au préalable OpenBSD 5.4. Réalisez ensuite la liste d'actions suivantes:

  • Booter sur le CD d'installation OpenBSD 5.5 (ou en PXE) et sélectionnez upgrade
  • Rebooter
  • Monter le CD d'installation dans le système à jour (mount /dev/cd0a /mnt)
  • Mergez les fichiers de configuration
sysmerge -Ss /mnt/5.5/amd64/etc55.tar.gz
  • Enfin nettoyez le système des fichiers inutiles
rm -f /usr/libexec/identd
rm -f /usr/lib/libcompat.a /usr/lib/libcompat_p.a
rm -f /usr/include/{re_comp,regexp,sgtty,sys/timeb}.h
rm -f /usr/share/man/man3/{re_comp,re_exec,rexec,regexp}.3
rm -f /usr/share/man/man3/{cuserid,ftime,gtty,setrgid,setruid,stty}.3
rm -f /etc/rc.d/popa3d
rm -f /usr/bin/{crunchgen,nawk}
rm -f /usr/sbin/{iopctl,popa3d}
rm -f /usr/share/man/man8/{iopctl,popa3d}.8
rm -rf /usr/X11R6/include/freetype2/freetype
rm -f /usr/X11R6/include/ft2build.h
rm -f /usr/mdec/installboot
rm -f /usr/share/man/man8/{amd64,i386}/installboot.8
rm -f /var/account/acct
rm -f /var/games/tetris.scores

mv /etc/nsd.conf /var/nsd/etc/nsd.conf
cd /usr/sbin && rm nsd-notify nsd-patch nsd-xfer nsd-zonec nsdc
cd /usr/share/man/man8 && rm nsd-notify.8 nsd-patch.8 nsd-xfer.8 \
   nsd-zonec.8 nsdc.8
chown _nsd /var/nsd/db/nsd.db
printf '\nremote-control:\n\tcontrol-enable: yes\n' >> /var/nsd/etc/nsd.conf

Problèmes de login

Après la mise à jour d'OpenBSD, si votre shell est ZSH vous serez déconnecté après authentification. Pour résoudre ce souci, passez en single (tapez boot -s dans le bootloader), montez le / en lecture-écriture, lancez le réseau et mettez à jour zsh

mount -rw /
sh /etc/netstart
export PKG_PATH="http://ftp.openbsd.org/pub/OpenBSD/5.5/packages/amd64/"
pkg_add -u zsh

VI: raccourcis essentiels

VI est un éditeur de texte très puissant. Il est intégré de base dans toutes les distributions Linux et BSD

Pour certains il s'agit d'un éditeur compliqué réservé aux barbus. Pour d'autres c'est l'éditeur de choix.

Vous trouverez ci-dessous les raccourcis essentiels de VI classés par thématique.

Edition

i : insertion, permet d'éditer la ligne à partir du caractère courant

I : active l'insertion au début de la ligne courante

a : append, active l'édition à partir du caractère suivant

A : active l'édition à partir de la fin de la ligne courante

o : ajoute une ligne vide en dessous et active l'édition

O : ajoute une ligne vide au dessus et active l'édition

Echap : désactive l'édition

Couper/Copier/Coller

dd : coupe la ligne en cours (et la supprime)

dXd : coupe X lignes à partir de la ligne courante

d$ : coupe la fin de ligne à partir du caractère courant

x : coupe le caractère courant

MAJ+S : coupe la ligne en cours et active l'insertion

yy : copie la ligne courante

yXy : copie X lignes à partir de la ligne courante

p : colle les lignes coupées/copiées

Déplacements

:X : se déplacer à la ligne X du fichier

:$ : se déplacer à la fin du fichier

:0 : se déplacer au début du fichier

w : se déplacer au mot suivant

b : se déplacer au mot précédent

$ : se déplacer à la fin de la ligne courante

0 : se déplacer au début de la ligne courante

j : se déplacer à la ligne suivante

k : se déplacer à la ligne précédente

Recherche/Substitution

/ : recherche le patern dans le fichier (début → fin)

/ : répète la recherche précédente

? : comme / mais de la fin → début

:%s///g : remplace le patern dans l'ensemble du fichier par replace

:%s : répète la substitution précédente

Enregistrer/Quitter

:q : quitter vi

:q! : quitter vi sans enregistrer

:w : enregistrer le fichier

:wq / 😡 : enregistrer le fichier et quitter

:wq! / :x! : forcer l'enregistrement et quitter

Inclassables

u : défaire (undo)

. : répéter l'action précédente

OpenSMTPD, Premiers pas

Nous utilisons tous des services de messagerie en ligne tel que Gmail, Outlook, Yahoo… Mais si vous vouliez prendre le contrôle de vos mails? comment faire?

Comparons la technologie Exchange de Microsoft avec ses CAL’s et ses licences et son budget ou les technologies open-source comme Sendmail, Postfix ou dans notre cas OpenSMTPD.

OpenSMTPD

Afin d’avoir un service aussi-complet que Gmail il faudra mettre en place plusieurs briques et OpenSMTPD en fait partie. OpenSMTPD est  un service SMTP libre utilisant le-dit protocole comme défini dans la RFC 5321. Il permet d’échanger des e-mails avec d’autres systèmes utilisant ce protocole comme Sendmail, Postfix, etc…

OpenSMTPD est un service « jeune » qui a voulu reprendre la simplicité de compréhension et de configuration du firewall Packet Filter d’OpenBSD. Ce service est implémenté depuis OpenBSD 4.6 dans la branche « unstable » et depuis OpenBSD 5.3 en tant que stable.

Ici nous utilisons la version 5.4.1 d’OpenSMTPD.

Le MAN est la première phase de l’approche pour utiliser ce service, il fournit les premières étapes pour un déploiement propre.

smtpd is not enabled by default.In order to use it as the system
mailer, ensure the mail queue is empty, then stop sendmail(8):

# /etc/rc.d/sendmail stop
Modify the current mailwrapper(8) settings by editing /etc/mailer.conf:
           sendmail        /usr/sbin/smtpctl
           send-mail       /usr/sbin/smtpctl
           mailq           /usr/sbin/smtpctl
           makemap         /usr/libexec/smtpd/makemap
           newaliases      /usr/libexec/smtpd/makemap

Disable the sendmail clientmqueue entry in crontab(1).

Rebuild the aliases database, and enable the daemon:

# newaliases
# echo "sendmail_flags=NO" >> /etc/rc.conf.local
# echo "smtpd_flags=" >> /etc/rc.conf.local
# /etc/rc.d/smtpd start

Maintenant que le paramétrage du service au niveau du système est fait nous allons passer à la configuration du fichier « smtpd.conf ».

listen on all

table aliases db:/etc/mail/aliases.db

# Uncomment the following to accept external mail for domain "example.org"
#
# accept from any for domain "example.org" alias <aliases> deliver to mbox
accept from any for domain "dev.unix-experience.fr" alias <aliases> deliver to maildir
accept for local alias <aliases> deliver to maildir
accept from local for any relay

Le service est à présent configuré, il nous reste à accepter les connexions externes sur le port 25 avec Packet Filter (CF plus loin) et à redémarrer le service smtpd avec la commande /etc/rc.d/smtpd restart.

Pour vérifier votre configuration Opensmtpd comme pour PF il existe la commande smtpd -n.

Pour lancer smtpd en mode debug lancer la commande smtpd -dv.

Configurez maintenant Packet Filter (rappel: fichier /etc/pf.conf)

 pass in proto tcp to self port smtp

Vérifiez maintenant la syntaxe et chargez le jeux de règles:

#Pour verifier la syntaxe 
pfctl -nf /etc/pf.conf

#Pour charger les nouvelles regles
pfctl -f /etc/pf.conf

Pour conclure cette partie, réalisons un test:

telnet dev.unix-experience.fr 25
Connected to dev.unix-experience.fr.
Escape character is '^]'.
220 hermes.my.domain ESMTP OpenSMTPD

Allons un peux plus loin dans notre configuration et renforçons la sécurité:

Chiffrement TLS

#Macro
pki dev.unix-experience.fr certificate "/etc/mail/certs/pcn0.crt"
pki dev.unix-experience.fr key  "/etc/mail/certs/pcn0.key"
##Configuration
listen on pcn0 port 25 tls-require pki dev.unix-experience.fr auth-optional hostname "dev.unix-experience.fr"

Accordons une analyse de cette ligne de configuration du fichier smtpd.conf

listen on pcn0 port 25 : le service écoutera sur l’interface pcn0 sur le port 25 ( si le paramètre « all » est actif, le service écoutera sur toutes les interfaces)

tls-require : Force les clients à établir une connexion sécurisée avant d’être autorisés à dialoguer au SMTP, l’option tls seule peux suffire mais tls-require renforce globalement en forçant les clients à établir une connectrion sécurisé avant d’être autorisé à démarrer une transaction SMTP. Cette option nécessite l’utilisation et la création de certificats.
Il est utile de noter que si nous ne créons qu’un certificat et sa clé et non le CA ainsi que le DH le service utilisera  ces paramètres par défaut.

pki dev.unix-experience.fr Nous spécifions les certificats par l’instruction pki qui nous permet de spécifier l’emplacement du certificat ainsi que de sa clé. « dev.unix-experience.fr » correspond à l’argument hostname comme spécifié dans le man de smtpd.conf.

Ce mécanisme est similaire au macro de Packet filter et doivent donc être déclaré en amont de la configuration

hostname Hermes : permet de spécifier un nom pour la bannière smtpd.

Test d’envoi

Nous allons à présent réaliser un test d’envoi de mail via la commande

mail, en ayant lancé smtpd en mode debug, ainsi nous pourrons comprendre les interactions par les logs.

echo "Ceci est un message de test" |mail -v -s "TEST MAIL" root@localhost
<<< 220 hermes.my.domain ESMTP OpenSMTPD
>>> EHLO localhost
<<< 250-hermes.my.domain Hello localhost [local], pleased to meet you
<<< 250-8BITMIME
<<< 250-ENHANCEDSTATUSCODES
<<< 250-SIZE 36700160
<<< 250 HELP
>>> MAIL FROM: <root@hermes.my.domain>
<<< 250 Ok
>>> RCPT TO: <root@localhost>
<<< 250 Recipient ok
>>> DATA
<<< 354 Enter mail, end with "." on a line by itself
>>> .
<<< 250 e636d771 Message accepted for delivery
>>> QUIT
<<< 221 Bye

Ceci est le détail des interactions qui ont eu lieu pendant la communication avec le serveur SMTP. On y retrouve les champs du destinataire et de l’émetteur.

Si on regarde les logs de plus près, nous pouvons observer que le service est extrêmement verbeux:

smtp-in: New session 000000001f305e85 from host 0@localhost [local]
debug: aliases_get: returned 1 aliases
debug: 0x12ad371d0000: end of message, msgflags=0x0000
smtp-in: Accepted message e636d771 on session 000000001f305e85: from=<root@hermes.my.domain>, to=<root@localhost>, size=245, ndest=1, proto=ESMTP
debug: scheduler: evp:e636d771a30c37cc scheduled (mda)
debug: lka: userinfo <getpwnam>:unixexperience
smtp-in: Closing session 000000001f305e85
debug: mda: new session 000000002962b8f8 for user "unixexperience" evpid e636d771a30c37cc
debug: smtp: 0x12ad371d0000: deleting session: done
debug: mda: no more envelope for "unixexperience"
debug: mda: got message fd 3 for session 000000002962b8f8 evpid e636d771a30c37cc
debug: mda: querying mda fd for session 000000002962b8f8 evpid e636d771a30c37cc
debug: smtpd: forking mda for session 000000002962b8f8: "/home/unixexperience/Maildir" as unixexperience
debug: mda: got mda fd 4 for session 000000002962b8f8 evpid e636d771a30c37cc
debug: mda: end-of-file for session 000000002962b8f8 evpid e636d771a30c37cc
debug: mda: all data sent for session 000000002962b8f8 evpid e636d771a30c37cc
debug: smtpd: mda process done for session 000000002962b8f8: exited okay
delivery: Ok for e636d771a30c37cc: from=<root@hermes.my.domain>, to=<root@localhost>, user=unixexperience, method=maildir, delay=1s, stat=Delivered
debug: mda: session 000000002962b8f8 done
debug: mda: user "unixexperience" becomes runnable
debug: mda: all done for user "unixexperience"

Nous pouvons alors décrire les étapes de réception du mail par dans un premier par le MTA qui à rechercher un alias liant le destinataire (root@localhost), une fois identifié comme l’utilisateur « unixexperience », le MTA transmet le message au MDA interne de opensmtpd en  attribuant alors l' »evpid » que l’on peux interprété comme « enveloppe identifer » au MDA.

Ensuite une session interne s’initialise ou le message va être délivré dans l’emplacement Maildir correspond à l’utilisateur unixexperience.

Configuration d’un relais

Nous pouvons considérer vouloir faire relayer nos mails par notre service SMTP dans le cadre où les ports ou la destination de notre SMTP est bloquée à notre emplacement géographique ou tout simplement pour en faire un relais Nous allons donc ajouter une règle qui relaiera nos mails via GMAIL.

Voici à quoi ressemble notre fichier smtpd.conf:

pki dev.unix-experience.fr certificate "/etc/mail/certs/pcn0.crt"
pki dev.unix-experience.fr key  "/etc/mail/certs/pcn0.key"

listen on pcn0 port 25 tls-require pki dev.unix-experience.fr auth-optional hostname "dev.unix-experience.fr"
listen on pcn0 port 465 smtps pki dev.unix-experience.fr auth-optional  hostname "dev.unix-experience.fr"

table secrets db:/etc/mail/secrets.db
table aliases db:/etc/mail/aliases.db

# Uncomment the following to accept external mail for domain "example.org"http://www.unix-experience.fr/wp-admin/post.php?post=2889&action=edit&message=10
#
# accept from any for domain "example.org" alias <aliases> deliver to mbox
accept from local for any relay via tls+ auth://label@smtp.gmail.com:587 auth <secrets>

Pour arriver à cette configuration nous avons dû réaliser plusieurs actions.

touch "label IDGOOGLE@gmail.com:PASSWD" >> /etc/mail/secrets
makemap /etc/mail/secrets
chmod 640 /etc/mail/secrets* 
chown root:_smtpd /etc/mail/secrets*

Nous avons donc crée un fichier contenant les informations d’identification pour utiliser le relais de google. Ensuite nous avons créé le fichier « secrets.db » qui sera utilisé par smtpd et restreint les permissions sur ce fichier ainsi que son propriétaire et le groupe auxquels il appartient pour que ceux-ci puissent être lisible par le daemon d’OpenSMTPD. Nous avons renseigné ce fichier sous cette forme dans « smtpd.conf ».

table secrets db:/etc/mail/secrets.db

Maintenant la régle du relai:

accept from local for any relay via tls+auth://label@smtp.gmail.com:587 auth <secrets>

accept from local for any  : Nous acceptons les envoie de mail localement pour n’importe quel destination.

relay via tls+auth://label@smtp.gmail.com:587 auth <secrets> : Nous relayons via une authentification TLS en utilisant les information d’authentification correspondant à l’étiquette label sur le smtp de Gmail sur le port 587 en utilisant la table secrets.

Conclusion

Nous reprendrons OpenSMTPD dans un article consacré à la mise en place d’un serveur mail complet avec la technologie de virtualisation libvirt.

Ce qu’il faut retenir de OpenSMTPD:

– Produit en cours de développement- Ajout de nouvelles fonctionnalités dans le futur
– Facilité de compréhension de la configuration

Ce qui est valable aujourd’hui pour son utilisation ne le sera sans doute plus demain.

Source:

Merci à la Mailing List d’OpenSMTPD pour m’avoir éclaircit sur le fonctionnement des étiquettes ainsi qu’une relecture de l’article.

http://www.opensmtpd.org/fr/list.html

http://www.openbsd.org/cgi-bin/man.cgi?query=smtpd&sektion=8

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.

Monter une AP Wi-Fi avec OpenBSD

Suite à un récent achat de matériel afin de me débarrasser de ma livebox qui plante trop souvent, j'ai choisi de faire mon propre routeur ADSL.

Pour faire un routeur, rien ne vaut un OS de qualité: OpenBSD. Au niveau hardware, j'ai choisi une board Alix 2d13 et une carte mini PCI Wi-Fi Atheros DNMA92 et ses antennes.

Nous allons voir dans ce tutoriel comment configurer OpenBSD afin de transformer notre routeur en borne Wi-Fi.

IMG_20131105_203131

Initialisation sur la board

Si vous comptez utiliser une board Alix, voici (rapidement) comment installer OpenBSD et se connecter en série à l'équipement.

Insérez la carte compact flash dans un lecteur compatible (interne ou USB) puis montez le lecteur sur une machine virtuelle en 32bits (i386), en tant que disque dur. (Sur libvirt il suffit de spécifier /dev/sdX comme chemin de disque dur, /dev/sdX étant le lecteur compact flash).

Installez ensuite OpenBSD comme d'habitude, à l'exception près qu'il faudra activer com0 a 38400 baux et ne pas configurer d'interfaces réseau.

Une fois l'installation terminée, éteignez la machine lancez un sync dans votre terminal et retirez la carte compact flash du lecteur. Insérez la ensuite sur la board et alimentez la.

Si tout se passe bien OpenBSD bootera comme sur un serveur classique.

Configuration du réseau

Nous allons ici bridger toutes les interfaces réseau afin de faire fonctionner le système comme un switch.

Configuration Ethernet

La board Alix 2d13 dispose de 3 interfaces Ethernet. Nous aurons uniquement besoin de les allumer.

echo "up" > /etc/netstart vr0echo "up" > /etc/netstart vr1
echo "up" > /etc/netstart vr2
sh /etc/netstart vr0
sh /etc/netstart vr1
sh /etc/netstart vr2

Configuration Wi-Fi

Passons à la configuration de l'interface Wi-Fi.

Ouvrez le fichier /etc/hostname.athn0 et indiquez la configuration suivante:

nwid "monSSID"
wpa
wpaprotos wpa2
wpakey maclefdelamortquitue
media autoselect mediaopt hostap
up
chan 1

Précisons:

  • nwid: il s'agit de votre SSID
  • wpa & wpaprotos: on active le chiffrement WPA. Si vous ne spécifiez pas wpaprotos WPA et WPA2 seront disponibles
  • wpakey: votre clef WPA
  • media autoselect mediaopt hostap: configure la carte Wi-Fi en mode AP et sélectionne automatiquement les options 802.11a/b/g
  • chan: le canal de transmission Wi-Fi. Sélectionnez un canal qui soit 1, 6 ou 11, étant peu utilisé par les AP/box de vos voisins.

J'ai remarqué qu'il fallait mettre le canal en dernier, après avoir allumé la carte Wi-Fi, autrement celle-ci n'émet pas. Cela doit dépendre des pilotes.

Enfin lancez l'interface:

sh /etc/netstart athn0

Configuration de l'interface de loopback

Dans un souci de détail, nous allons créer une interface de loopback qui aura l'adresse IP de notre AP. Cette IP aurait pu être spécifiée sur une interface Ethernet ou Wi-Fi mais la solution serait moins élégante.

echo "inet 10.0.0.1 255.255.255.0 NONE" > /etc/hostname.vether0
echo "description Bridge-WiFi" >> /etc/hostname.vether0
sh /etc/netstart vether0

Configuration du bridge

Pour finir on va créer notre bridge. Ouvrez le fichier /etc/hostname.bridge0

up
add vether0
add vr0
add vr1
add vr2
add athn0

et lancez l'interface

sh /etc/netstart bridge0

Note: si votre équipement est branché sur un commutateur supportant le spanning-tree, ajoutez les options stp dans le fichier /etc/hostname.bridge0

Conclusion

Si tout s'est bien passé, vous devriez voir apparaître le SSID que vous avez configuré. Ce tutoriel ne permet pas de distribuer des adresses IP, si vous le souhaitez, configurez (subnet et interfaces d'écoute) et lancez le démon dhcpd.