FreeBSD Notes
[TOC]
Miscellaneous
System Information
You’ll find everything you need in /var/run/dmesg.boot
or in the
output of sysctl -a
. Some examples:
# Memory
grep memory /var/run/dmesg.boot
# No. of CPUs
grep CPU /var/run/dmesg.boot
Kernel Modules
*kldstat*
shows all loaded modules. *kldload*
loads a
module, *kldunload*
unloads a module.
Firewall
I used the venerable IPFW. In /etc/rc.conf
enable the firewall and
provide a script:
firewall_enable="YES"
firewall_script="/opt/firewall"
Then reboot. I used my own simple script at
git://git.example.com/it.firewall.ipfw
. However, given that this is
exactly what OS X 10.6 (and below) use for a firewall, you’ll find
either WaterRoof or NoobProof
pretty awesome for some complicated rules. You’ll have to modify their
outputs to script format.
Listing Disks
Can do one of the following
# For SCSI disks [1]
cat /var/run/dmesg.boot | grep da
# or
gpart show
SNMP
You’ll need to install
bsnmp to get this working.
Mounting XFS
kldload xfs
mount -t xfs -o ro /dev/da15p1 /mnt
If you get an “Operation not permitted” error, check your filesystem.
For XFS, these packages might be helpful
pkg_add -r xfs xfsprogs xfsinfo
The backspace ‘problem’ in vim
echo 'set backspace+=start,eol,indent' >> ~/.vimrc
A note on /etc/rc.conf
If you screw up this file, you’re screwed in turn. A single missing
quote and you’ll boot into a read-only system. Be careful, and use
sysinstall
if you can.
The Ports Tree
See the “Obtaining the Ports
Collection”
section of the manual if you forgot to install the tree. To update, just
run portsnap update
.
Installing stuff
As root,
# Update ports tree and system packages
portsnap fetch extract update
freebsd-update fetch
freebsd-update install
# This installs pkg
pkg install bash \
bash-completion \
chromium \
inconsolata-ttf \
numix-theme
rsync \
sudo \
tree \
vim \
xfce \
xorg \
git \
# Get the kernel source for VirtualBox Guest Additions if applicable
# Configure proxy in ~/.subversion/servers if needed
svnlite checkout http://svn.freebsd.org/base/head /usr/src
svnlite up /usr/src
cd /usr/src
make clean
No packages matching xxx available in the repository
rm /var/db/pkg/repo-*
pkg upgrade
Installing mkfile
Quicker alternative to ye olde dd
:
cd /usr/ports/sysutils/mkfile; make install clean
Installing Binaries
Use the packages system.
pkg_add -r vim
Searching ports
cd /usr/ports
make search name=<package>
NFS Exports
Here’s the pertinent
page from the
FreeBSD manual that describes how to set these up.
- Make sure that you issue
/etc/rc.d/mountd onereload
and observe
the output of/var/log/messages
for any errors. - You should then verify your mounts by issuing
showmount -e
ZFS
You will need to increase kmem
to prevent panics. Check vm.kmem_size
and vm.kmem_size_max
using:
sysctl -a
If the values look appropriate, skip the “Loader
Tunables”
section of the manual.
Now start ZFS with:
echo 'zfs_enable="YES"' >> /etc/rc.conf
/etc/rc.d/zfs start
Creating a zpool
I had twelve 3TB disks I wanted in a RAID6. Sun calls it “RAIDZ2”, since
it averts the RAID write
hole. I wanted to call
my pool “data”:
zpool create data raidz2 da1 da2 da3 da4 da5 da6 da7 da8 da9 da10 da11 da12
I also had a 256GB solid-state cache drive to speed up performance using
ARC. Its
device name is da16
zpool add data cache da16
Finally, the ZFS tuning guide
is a must-read. There’s also a longer, evil
version.
Using an existing pool
I had to reinstall FreeBSD after some XFS weirdness. I was able to get
my old pool back with
zpool import
This scans all drives and lists any available pools. Then actually
import the pool with
zpool import data
Migrating ZFS pools
# On the old server, export the pool ("zpool export -f data" to force)
zpool export data
# You've now moved the disks to a new server and are on it right now
# Scan for zpools
zpool import
# Import the zpool (use "-f" if necessary)
zpool import -f data
It’s magical: zpool will also tell you the host that the drives were on,
which ones are missing, etc.
Creating Filesystems
It’s possible to mount and use zpools. But you will miss out on awesome
things that ZFS is known for. So create a filesystem:
zfs create data/users
# Set compression on
zfs set compression=gzip data/users
You may want to think twice before you set compression and
deduplication. They take a heavy toll on memory and performance. Here
are some resources:
Snapshots and Clones
Using date +%Y-%m-%dT%k:%M:%S
for a nice ISO-8601 formatted date:
# Take a snapshot
zfs snapshot tank/data@2012-09-09T18:06:49
# DIsplay snapshots
zfs list -t snapshot
NFS
ZFS is awesome with NFS. Here, I share a filesystem with my trusted
network, after setting up my NFS server according to the FreeBSD
manual.
zfs sharenfs='-network 10.212.8.0 -mask 255.255.255.0 -maproot root' tank/home
Export data is not written to /etc/exports
(as you would expect) but
to /etc/zfs/exports
. Check your mounts with the usual:
[root@lucifer ~]# showmount -e
Exports list on localhost:
/tank/home 10.212.8.0
Unlike traditional NFS, you don’t have to restart mountd
every time
you redefine your mount points.
Here are further resources:
RC
See all the rcvar
s for each service with this
grep rcvar /usr/local/etc/rc.d/*
This is the stuff that would go into /etc/rc.conf
(e.g. nginx_enable="YES"
)