## Miscellaneous ### System Information You'll find everything you need in `/var/run/dmesg.boot` or in the output of `sysctl -a`. Some examples: ```bash # 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](http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-ipfw.html) 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](http://www.hanynet.com/comparison.html) 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](http://community.zenoss.org/docs/DOC-9132) to get this working. ### [Mounting XFS](http://www.freebsd.org/doc/handbook/filesystems-linux.html) 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"](http://www.freebsd.org/doc/handbook/ports-using.html) section of the manual if you forgot to install the tree. To update, just run `portsnap update`. ### Installing stuff As root, ```bash # 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](http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/packages-using.html). pkg_add -r vim ### [Searching ports](http://www.freebsd.org/ports/searching.html) cd /usr/ports make search name= ## NFS Exports Here's [the pertinent page](http://www.freebsd.org/doc/handbook/network-nfs.html) 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"](http://www.freebsd.org/doc/handbook/filesystems-zfs.html#AEN27881) 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](http://en.wikipedia.org/wiki/RAID_5_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](http://en.wikipedia.org/wiki/Adaptive_replacement_cache). Its device name is `da16` zpool add data cache da16 Finally, [the ZFS tuning guide](http://wiki.freebsd.org/ZFSTuningGuide) is a must-read. There's also a longer, [evil version](http://www.solarisinternals.com/wiki/index.php/ZFS_Evil_Tuning_Guide). ### 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](http://docs.oracle.com/cd/E19963-01/html/821-1448/gbchy.html) # 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: * [Dedup or not dedup](http://constantin.glez.de/blog/2011/07/zfs-dedupe-or-not-dedupe) * [Dedup versus compression](http://www.edugeek.net/forums/nix/49844-zfs-deduplication-dedup-vs-compression.html) * [Oracle blog post on testing compression](https://blogs.oracle.com/observatory/entry/zfs_compression_a_win_win) ### [Snapshots and Clones](http://blog.allanglesit.com/2011/04/zfs-snapshot-management/) 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](http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-nfs.html). 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: * [ZFS and NFS on FreeBSD](http://misc.allbsd.de/Vortrag/EuroBSDCon_2007//Pawel_Jakub_Dawidek/eurobsdcon07_zfs.pdf) * [NFS section of the FreeBSD manual](http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-nfs.html) ### RC See all the `rcvar`s for each service with this ```bash grep rcvar /usr/local/etc/rc.d/* ``` This is the stuff that would go into `/etc/rc.conf` (e.g. `nginx_enable="YES"`) ### Other Resources * [ZFS Best Practices Guide](http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide) [^1]: (http://www.freebsd.org/doc/handbook/disks-naming.html)