---
title: Guide rapide pour débuter avec FreeBSD à l'attention des utilisateurs de Linux®
authors:
  - author: John Ferrell
copyright: 2008 The FreeBSD Documentation Project
releaseinfo: "$FreeBSD$" 
trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
---

= Guide rapide pour débuter avec FreeBSD à l'attention des utilisateurs de Linux(R)
:doctype: article
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
:toc-title: Table des matières
:part-signifier: Partie
:chapter-signifier: Chapitre
:appendix-caption: Annexe
:table-caption: Tableau
:example-caption: Exemple

include::shared/fr/urls.adoc[]

[.abstract-title]
Résumé

Ce document a pour but de familiariser rapidement les utilisateurs de Linux(R) de niveau intermédiaire à avancé avec les fondamentaux de FreeBSD.

Version française de Frederic Culot `<culot@freebsd.org>`.

'''

toc::[]

[[intro]]
== Introduction

Ce document met en évidence les différences entre FreeBSD et Linux(R) de telle sorte que les utilisateurs de Linux(R) d'un niveau intermédiaire jusqu'à avancé puissent se familiariser rapidement avec les fondamentaux de FreeBSD. Il s'agit ici simplement d'une courte introduction technique qui n'a pas pour objectif d'expliciter les différences "philosophiques" entre les deux systèmes d'exploitation.

Ce document part du principe que vous avez déjà installé FreeBSD. Si vous n'avez pas installé FreeBSD ou que vous avez besoin d'aide pour mener à terme le processus d'installation, vous pouvez vous référer au chapitre link:{handbook}#install[Installer FreeBSD] du Manuel de Référence FreeBSD.

[[shells]]
== Interpréteurs de commandes: Pas de Bash?

Ceux qui ont l'habitude de Linux(R) sont souvent surpris de voir que Bash n'est pas l'interpréteur de commandes par défaut de FreeBSD. En fait, Bash n'est même pas présent dans l'installation par défaut. À la place, FreeBSD utilise man:tcsh[1] comme interpréteur par défaut. Cependant, Bash ainsi que vos autres interpréteurs de commandes favoris sont disponibles dans les <<SOFTWARE, Paquetages et logiciels portés>> de FreeBSD.

Si vous installez d'autres interpréteurs de commandes vous pouvez utiliser man:chsh[1] pour définir un interpréteur par défaut pour un utilisateur. Il est cependant recommandé de ne pas modifier l'interpréteur de commandes par défaut de `root`. La raison en est que les interpréteurs de commandes qui ne sont pas inclus dans la distribution de base sont normalement installés dans [.filename]#/usr/local/bin# ou [.filename]#/usr/bin#. Dans le cas d'un problème les systèmes de fichiers contenant [.filename]#/usr/local/bin# et [.filename]#/usr/bin# peuvent ne pas être montés. Dans ce cas `root` n'aurait pas accès à son interpréteur de commandes par défaut, ce qui empêcherait `root` de pouvoir se connecter. Pour cette raison un second compte `root`, le compte `toor`, a été créé pour l'utilisation avec des interpréteurs de commandes qui ne sont pas ceux par défaut. Vous pouvez consulter les questions fréquemment posées sur la sécurité concernant le link:{faq}#TOOR-ACCOUNT[compte toor] pour plus d'information.

[[software]]
== Paquetages et logiciels portés: ajouter des logiciels sous FreeBSD

En plus de la traditionnelle méthode UNIX(R) d'installation de logiciels (télécharger les sources, extraire, éditer le code source, et compiler), FreeBSD offre deux autres méthodes pour installer des applications: les paquetages et les logiciels portés. Une liste complète de tous les logiciels portés et paquetages disponibles se trouve http://www.freebsd.org/ports/[ici].

[[packages]]
=== Paquetages

Les paquetages sont des applications pré-compilées, les équivalents FreeBSD des fichiers [.filename]#.deb# pour les systèmes basés sur Debian/Ubuntu et des fichiers [.filename]#.rpm# pour les systèmes basés sur Red Hat/Fedora. Par exemple, la commande suivante installe Apache 2.2:

[source,bash]
....
# pkg_add /tmp/apache-2.2.6_2.tbz
....

Utiliser l'option `-r` indique à man:pkg[add] de télécharger automatiquement le paquetage et de l'installer, ainsi que toutes ses dépendances:

[source,bash]
....
# pkg_add -r apache22
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/Latest/apache22.tbz... Done.
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/expat-2.0.0_1.tbz... Done.
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/perl-5.8.8_1.tbz... Done.
[snip]

To run apache www server from startup, add apache22_enable="YES"
in your /etc/rc.conf. Extra options can be found in startup script.
....

[NOTE]
====
Si vous utilisez une version RELEASE de FreeBSD (6.2, 6.3, 7.0, etc., généralement installée depuis un CD-ROM) `pkg_add -r` téléchargera les paquetages compilés spécifiquement pour cette version. Ces paquetages peuvent _ne pas_ être la version la plus récente de l'application. Vous pouvez utiliser la variable `PACKAGESITE` pour surcharger ce comportement par défaut. Par exemple, assignez link:ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/[ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6-stable/Latest/] à `PACKAGESITE` pour télécharger les paquetages les plus récents construits pour les versions 6.X.
====

Pour plus d'information concernant les paquetages vous pouvez vous référer à la section 4.4 du Manuel FreeBSD: link:{handbook}#packages-using[Utiliser le système des logiciels pré-compilés].

[[ports]]
=== Les logiciels portés

Le catalogue des logiciels portés est la seconde méthode proposée par FreeBSD pour installer des applications. Le catalogue des logiciels portés a pour architecture un ensemble de [.filename]#Makefiles# et de fichiers correctifs spécifiquement adaptés pour pouvoir installer depuis les sources des applications diverses sur FreeBSD. Lors de l'installation d'un logiciel porté le système téléchargera le code source, appliquera tous les correctifs nécessaires, compilera le code, et installera l'application (et fera de même pour toutes ses dépendances).

Le catalogue des logiciels portés, parfois appelée l'arbre des ports (ports tree en anglais), peut être trouvé dans [.filename]#/usr/ports#. Nous partons ici du principe que le catalogue des logiciels portés a été installé pendant le processus d'installation de FreeBSD. Si le catalogue des logiciels portés n'a pas été installé, il peut être ajoutée à partir des disques d'installation en utilisant man:sysinstall[8], ou bien récupéré depuis les serveurs FreeBSD en utilisant man:csup[1] ou man:portsnap[8]. Des instructions détaillées concernant l'installation du catalogue des logiciels portés peuvent être consultées dans la link:{handbook}#ports-using[section 4.5.1] du Manuel.

Installer un logiciel porté est aussi simple (en général) que de se déplacer dans le répertoire du logiciel porté et de lancer le processus de compilation. L'exemple suivant installe Apache 2.2 depuis le catalogue des logiciels portés:

[source,bash]
....
# cd /usr/ports/www/apache22
# make install clean
....

Un des avantages majeurs d'utiliser les logiciels portés pour installer des logiciels est de pouvoir adapter les options d'installation. Par exemple, lors de l'installation d' Apache 2.2 depuis une version portée, il vous est possible d'activer mod_ldap en fixant la variable `WITH_LDAP` de man:make[1]:

[source,bash]
....
# cd /usr/ports/www/apache22
# make WITH_LDAP="YES" install clean
....

Vous pouvez vous référer à la section 4.5 du Manuel FreeBSD, link:{handbook}#ports-using[Utiliser le catalogue des logiciels portés], pour obtenir plus d'information concernant le catalogue des logiciels portés.

[[which]]
=== Logiciel porté ou paquetage, lequel devrais-je utiliser?

Les paquetages sont simplement des logiciels portés pré-compilés, donc il s'agit vraiment de choisir entre une installation depuis les sources (logiciels portés) ou une installation utilisant des binaires pré-compilés. Chaque méthode présente ses avantages:

.Les paquetages (binaires)
* Installation plus rapide (compiler de grosses applications peut prendre du temps).
* Inutile de comprendre comment compiler un logiciel.
* Inutile d'installer des compilateurs sur votre système.

.Les logiciels portés (sources)
* Possibilité d'adapter les options d'installation (les paquetages sont normalement compilés avec les options standards alors qu'avec les logiciels portés vous pouvez adapter diverses options comme la compilation de modules additionnels ou le changement de l'emplacement par défaut).
* Vous pouvez appliquer vos propres fichiers correctifs si vous le souhaitez.

Si vous n'avez pas de besoins particuliers, les paquetages seront probablement tout à fait adaptés à votre situation. S'il vous arrivait d'avoir des besoins spécifiques, les logiciels portés seraient plus appropriés (et n'oubliez pas que si vous devez effectuer des adaptations mais que vous préférez les paquetages, vous pouvez toujours compiler un paquetage personnalisé en utilisant make`package` et en copiant le paquetage sur d'autres serveurs).

[[startup]]
== Démarrage Système: où sont les niveaux d'exécution (run-levels)?

Linux(R) utilise le système d'initialisation SysV alors que FreeBSD utilise le style traditionnel BSD avec man:init[8]. Avec man:init[8] il n'existe pas de niveaux d'exécution et pas de [.filename]#/etc/inittab#, mais à la place le démarrage est contrôlé par l'utilitaire man:rc[8]. Le script [.filename]#/etc/rc# lit [.filename]#/etc/defaults/rc.conf# et [.filename]#/etc/rc.conf# pour déterminer quels services doivent être démarrés. Les services déclarés sont alors démarrés en lançant les scripts d'initialisation du service considéré que l'on trouve dans [.filename]#/etc/rc.d/# et [.filename]#/usr/local/etc/rc.d/#. Ces scripts sont similaires aux scripts que l'on trouve dans [.filename]#/etc/init.d/# sur les systèmes Linux(R).

****
_Pourquoi existe-t-il deux emplacements distincts pour les scripts d'initialisation de services ?_ Les scripts que l'on trouve dans [.filename]#/etc/rc.d/# sont pour les applications qui font partie du système de base (man:cron[8], man:sshd[8], man:syslog[3], et d'autres). Les scripts dans [.filename]#/usr/local/etc/rc.d/# sont pour les applications installées par les utilisateurs telles que Apache, Squid, etc.

Quelle est la différence entre le système de "base" et les applications installées par l'utilisateur? FreeBSD est développé comme un système d'exploitation complet. En d'autres termes, le noyau, les bibliothèques système, et les utilitaires présents dans l'espace utilisateur (tels que man:ls[1], man:cat[1], man:cp[1], etc.) sont développés et distribués conjointement. C'est à cela que l'on fait référence en parlant de système de "base". Les applications installées par l'utilisateur sont des applications qui ne font pas partie du système de "base", telles que Apache, X11, Mozilla Firefox, etc. Ces applications sont généralement installées en utilisant le <<SOFTWARE, Catalogue des logiciels portés et les paquetages>> de FreeBSD. Afin de les conserver à l'écart du système de "base", les applications installées par l'utilisateur sont normalement placées dans [.filename]#/usr/local/#. Ainsi les binaires installés par l'utilisateur se trouvent dans [.filename]#/usr/local/bin/#, les fichiers de configuration dans [.filename]#/usr/local/etc/#, et ainsi de suite.
****

Les services sont activés en spécifiant `NomDuService_enable="YES"` dans [.filename]#/etc/rc.conf# (man:rc.conf[5]). Pour vous faire une idée, vous pouvez consulter les valeurs par défaut du système dans [.filename]#/etc/defaults/rc.conf#, ces valeurs par défaut sont surchargées par celles trouvées dans [.filename]#/etc/rc.conf#. De plus, lors de l'installation de logiciels additionnels, veillez à consulter leur documentation pour déterminer de quelle manière sont activés les services associés, le cas échéant.

Le bout de code suivant extrait de [.filename]#/etc/rc.conf# active man:sshd[8] et Apache 2.2. Il spécifie également que Apache devrait être lancé avec SSL.

[.programlisting]
....
# enable SSHD
sshd_enable="YES"
# enable Apache with SSL
apache22_enable="YES"
apache22_flags="-DSSL"
....

Dès lors qu'un service a été activé dans [.filename]#/etc/rc.conf#, ce service peut être démarré depuis la ligne de commande (sans avoir à redémarrer le système):

[source,bash]
....
# /etc/rc.d/sshd start
....

Si un service n'a pas été activé il peut être démarré depuis la ligne de commande en utilisant `forcestart`:

[source,bash]
....
# /etc/rc.d/sshd forcestart
....

[[network]]
== Configuration Réseau

[[interfaces]]
=== Interfaces Réseau

À la place d'un identifiant générique _ethX_ que Linux(R) utilise pour identifier une interface réseau, FreeBSD utilise le nom du pilote suivi d'un nombre en tant qu'identifiant. La sortie suivante de man:ifconfig[8] montre deux interfaces réseau Intel(R) Pro 1000 ([.filename]#em0# et [.filename]#em1#):

[source,bash]
....
% ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=b<RXCSUM,TXCSUM,VLAN_MTU>
        inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255
        ether 00:50:56:a7:70:b2
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active
em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        options=b<RXCSUM,TXCSUM,VLAN_MTU>
        inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255
        ether 00:50:56:a7:03:2b
        media: Ethernet autoselect (1000baseTX <full-duplex>)
        status: active
....

[[ipaddress]]
=== Configuration IP

Une adresse IP peut être assignée à une interface en utilisant man:ifconfig[8]. Cependant, pour assurer la persistence même après un redémarrage, la configuration IP doit être enregistrée dans [.filename]#/etc/rc.conf#. Dans l'exemple suivant sont spécifiés le nom de la machine, l'adresse IP, et la passerelle par défaut:

[.programlisting]
....
hostname="server1.example.com"
ifconfig_em0="inet 10.10.10.100  netmask 255.255.255.0"
defaultrouter="10.10.10.1"
....

Utilisez ceci pour configurer une interface pour DHCP:

[.programlisting]
....
hostname="server1.example.com"
ifconfig_em0="DHCP"
....

[[firewall]]
== Pare-feu

Tout comme IPTABLES pour Linux(R), FreeBSD offre également un pare-feu au niveau du noyau; en fait FreeBSD offre trois pare-feux distincts:

* link:{handbook}#firewalls-ipfw[IPFIREWALL]
* link:{handbook}#firewalls-ipf[IPFILTER]
* link:{handbook}#firewalls-pf[PF]

IPFIREWALL ou IPFW (la commande pour gérer un jeu de règles IPFW est man:ipfw[8]) est le pare-feu développé et maintenu par les développeurs FreeBSD. IPFW peut être couplé avec man:dummynet[4] pour fournir des possibilités de régulation du trafic et simuler différents types de connections réseau.

Voici un exemple de règle IPFW pour autoriser SSH en entrée:

[.programlisting]
....
ipfw add allow tcp from any to me 22 in via $ext_if
....

IPFILTER est le pare-feu applicatif développé par Darren Reed. Celui-ci n'est pas spécifique à FreeBSD et a été porté sur de nombreux systèmes d'exploitation tels que NetBSD, OpenBSD, SunOS, HP/UX, et Solaris.

Voici un exemple de règle IPFILTER pour autoriser SSH en entrée:

[.programlisting]
....
pass in on $ext_if proto tcp from any to any port = 22
....

Le dernier pare-feu, PF, est développé par le projet OpenBSD. PF a été créé pour remplacer IPFILTER, ce qui fait que la syntaxe de PF est très similaire à celle de IPFILTER. PF peut être couplé avec man:altq[4] pour fournir des possibilités de QoS.

Voici un exemple de règle PF pour autoriser SSH en entrée:

[.programlisting]
....
pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
....

[[updates]]
== Mettre à jour FreeBSD

Il existe trois méthodes différentes pour mettre à jour un système FreeBSD: à partir des sources, les mises à jour binaires, et les disques d'installation.

Mettre à jour depuis les sources est la méthode la plus compliquée mais elle offre la plus grande flexibilité. Le processus implique de synchroniser une copie locale du code source de FreeBSD avec les serveurs CVS (Concurrent Versioning System - Système de gestion de Versions Concurrentes) de FreeBSD. Une fois que le code source local est à jour vous pouvez compiler les nouvelles versions du noyau et du système de base. Pour plus d'informations concernant les mises à jour depuis les sources vous pouvez consulter link:{handbook}#updating-upgrading[le chapitre sur la mise à jour] du manuel FreeBSD.

Les mises à jour binaires ressemblent aux commandes `yum` ou `apt-get` utilisées pour mettre à jour un système Linux(R). La commande man:freebsd-update[8] téléchargera les nouvelles mises à jour et les installera. Les mises à jour peuvent être programmées par l'intermédiaire de man:cron[8].

[NOTE]
====
Si vous utilisez man:cron[8] pour programmer vos mises à jour, assurez-vous d'utiliser la commande `freebsd-update cron` dans votre man:crontab[1] pour réduire le nombre de machines récupérant les mises à jour au même moment.

[.programlisting]
....
0 3 * * * root /usr/sbin/freebsd-update cron
....

====

La dernière méthode, qui permet de mettre à jour en utilisant les disques d'installation, est simple: démarrez depuis les disques d'installation et sélectionnez l'option de mise à jour.

[[procfs]]
== procfs: disparu mais pas oublié

Avec Linux(R), il vous est peut-être arrivé de consulter [.filename]#/proc/sys/net/ipv4/ip_forward# pour déterminer si le routage IP était activé. Avec FreeBSD vous devriez utiliser man:sysctl[8] pour voir ce réglage ainsi que d'autres réglages système parce que man:procfs[5] a été abandonné dans les versions actuelles de FreeBSD (notez que `sysctl` est disponible aussi sous Linux(R)).

Dans l'exemple du routage IP voici ce que vous utiliseriez pour déterminer si le routage IP est activé sur votre système FreeBSD:

[source,bash]
....
% sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0
....

L'option `-a` est utilisée pour lister tous les réglages du système:

[source,bash]
....
% sysctl -a
kern.ostype: FreeBSD
kern.osrelease: 6.2-RELEASE-p9
kern.osrevision: 199506
kern.version: FreeBSD 6.2-RELEASE-p9 0: Thu Nov 29 04:07:33 UTC 2007
    root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC

kern.maxvnodes: 17517
kern.maxproc: 1988
kern.maxfiles: 3976
kern.argmax: 262144
kern.securelevel: -1
kern.hostname: server1
kern.hostid: 0
kern.clockrate: { hz = 1000, tick = 1000, profhz = 666, stathz = 133 }
kern.posix1version: 200112
...
....

[NOTE]
====
Certaines de ces valeurs `sysctl` sont uniquement accessibles en lecture.
====

procfs est parfois nécessaire comme pour faire fonctionner de vieux logiciels, pour examiner des appels système en utilisant man:truss[1], et pour la link:{handbook}#linuxemu[Compatibilité Binaire avec Linux(R)] (celle-ci utilise cependant son propre procfs, man:linprocfs[5]). Si vous avez besoin de monter procfs vous pouvez ajouter la ligne suivante dans [.filename]#/etc/fstab#:

[source,bash]
....
proc                /proc           procfs  rw,noauto       0       0
....

[NOTE]
====
`noauto` fera en sorte que [.filename]#/proc# ne soit pas monté automatiquement lors du démarrage.
====

Et ensuite montez procfs avec:

[source,bash]
....
# mount /proc
....

[[commands]]
== Commandes Usuelles

[[packageCommands]]
=== Gestion des Paquetages

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Commande Linux(R) (Red Hat/Debian)
| Equivalent FreeBSD
| Rôle

|`yum install paquetage` / `apt-get install paquetage`
|`pkg_add -r paquetage`
|Installation de _paquetage_ depuis un dépôt distant

|`rpm -ivh paquetage` / `dpkg -i paquetage`
|`pkg_add -v paquetage`
|Installation de _paquetage_

|`rpm -qa` / `dpkg -l`
|`pkg_info`
|Lister les paquetages installés
|===

[[systemCommands]]
=== Gestion Système

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| Commande Linux(R)
| Equivalent FreeBSD
| Rôle

|`lspci`
|`pciconf`
|Lister les périphériques PCI

|`lsmod`
|`kldstat`
|Lister les modules noyau chargés

|`modprobe`
|`kldload` / `kldunload`
|Charger/Décharger les modules noyau

|`strace`
|`truss`
|Examiner les appels système
|===

[[conclusion]]
== Conclusion

Nous esperons que ce document vous a fourni suffisamment d'informations pour que vous puissiez faire vos premiers pas avec FreeBSD. Vous pouvez consulter link:{handbook}[le Manuel FreeBSD] pour une couverture plus complète des sujets abordés ici ainsi que de tous les autres sujets non abordés dans ce document.
