Tags

arm arpaname bin_sh blocage blosxom bsd bsdfrance cblog certification chroot cluster dg834 dhcp diffusion dns dnsmasq domU dovecot fail-over fail2ban firefox fossil freebsd ftp git guruplug install ipv6 jail kernel kimsufi lex libre linutop liste makefile mikrotik ml150 mohawk nanojail netbook netbsd nginx ntp ntp.org openbsd openntpd openrd opensmtpd openwrt orke pkgng poudriere privee proxy pxe python rc.conf rescue reverse rmll route rrdcgi sendmail serial sieve sjail sl2009 ssd sshd symon unbound update usb var_empty vimperator world xen yacc zfs

Powered by

blOg
maRkdown
awK
shEll

02/10/2015

[ freebsd rc.conf ]

201510021800 freebsd rc.conf

Configurer FreeBSD

Pour autant que je me souvienne, la configuration d'un système FreeBSD s'est toujours faite en éditant un unique fichier: /etc/rc.conf.

Nom de la machine, configuration des interfaces réseau, type de clavier, listes des services à démarrer, tout y est, tout y passe.

Pourtant, depuis l'importation du système NetBSD 1.5 RC il y a plus de 14 ans, il était possible de séparer la configuration dans différents fichiers au sein du répertoire /etc/rc.conf.d/.

532 	load_rc_config()
533 	{
534 	        _command=$1
535 	        if [ -z "$_command" ]; then
536 	                err 3 'USAGE: load_rc_config command'
537 	        fi
538
539 	        . /etc/rc.conf
540 	        if [ -f /etc/rc.conf.d/"$_command" ]; then
541 	                . /etc/rc.conf.d/"$_command"
542 	        fi
543 	}

Les afficionados des systèmes de contrôle de version (rcs, cvs, subversion, git, mercurial ...) et/ou des gestionnaires de configuration (puppet, chef, ansible, salt ...) y verront je pense un certain intéret:

La configuration d'un portable pourrait se faire comme suit:

/etc/rc.conf.d/hostname
hostname="n150.bsdsx.fr"

/etc/rc.conf.d/network
wlans_ath0="wlan0"
ifconfig_wlan0="WPA DHCP"

/etc/rc.conf.d/ntpd
ntpd_enable="YES"

/etc/rc.conf.d/powerd
powerd_enable="YES"

/etc/rc.conf.d/sendmail
sendmail_enable="NONE"

/etc/rc.conf.d/syscons
keymap="fr.iso.acc.kbd"

Mais depuis la révision 270392, il est possible de découper la configuration d'un service encore plus finement:

1292 	if [ -f /etc/rc.conf.d/"$_name" ]; then
1293 	        debug "Sourcing /etc/rc.conf.d/$_name"
1294 	        . /etc/rc.conf.d/"$_name"
1295 	elif [ -d /etc/rc.conf.d/"$_name" ] ; then
1296 	        local _rc
1297 	        for _rc in /etc/rc.conf.d/"$_name"/* ; do
1298 	                if [ -f "$_rc" ] ; then
1299 	                        debug "Sourcing $_rc"
1300 	                        . "$_rc"
1301 	                fi
1302 	        done
1303 	fi

La configuration d'un serveur pourrait se faire comme suit:

/etc/rc.conf.d/hostname
hostname="n150.bsdsx.fr"

/etc/rc.conf.d/ntpd
ntpd_enable="YES"

/etc/rc.conf.d/sendmail
sendmail_enable="NONE"

/etc/rc.conf.d/syscons
keymap="fr.iso.acc.kbd"

/etc/rc.conf.d/routing
defaultrouter="192.0.2.1"
ipv6_defaultrouter="2001:db8:0:dead:beef::1"

/etc/rc.conf.d/ipfw/ipfw
firewall_enable="YES"
firewall_type="/etc/rc.conf.d/ipfw/rules"

/etc/rc.conf.d/ipfw/log
firewall_logging="YES"
firewall_logif="YES"

/etc/rc.conf.d/network/cloned
cloned_interfaces="lo1 lo2"

/etc/rc.conf.d/network/bce0
ifconfig_bce0="inet 192.0.2.2 netmask 255.255.255.0"
ifconfig_bce0_ipv6="inet6 2001:db8:0:dead:beef::2 prefixlen 64"

/etc/rc.conf.d/network/lo1
ifconfig_lo1="inet 172.16.0.1 netmask 255.255.0.0"

/etc/rc.conf.d/network/lo2
ifconfig_lo2_ipv6="inet6 2001:db8:1337::1 prefixlen 64"

/etc/rc.conf.d/sshd/sshd
sshd_enable="YES"

/etc/rc.conf.d/sshd/flags
sshd_flags="-o UsePAM=no -o AllowGroups=wheel -o PermitRootLogin=without-password -o ListenAddress=localhost"

Et oui, attention aux routes par défaut, c'est bien dans routing et pas dans network.


Lien vers ce billet