FreeBSD: The Power to
Serve
A Network Tutorial/How-To Guide
for the FreeBSD OS

by Nick Rogness


Now that you have FreeBSD installed, lets go over how to enable and disable services that come with the system. That will lead us nicely into the next section. In order to turn on and off these services, we will need to do some configuration of the system. Let's do it!

FreeBSD Config Files

Compared to most Unices, FreeBSD has a pretty nice way of setting things up quickly. It has 1 main configuration file that starts every service up when you boot your system (This is not entirely true but will hold for this section). This file is called rc.conf and it resides in /etc. Let's take a look:

	> vi /etc/rc.conf

You should see a bunch of lines like the following:

	gateway_enable="YES"
	network_interfaces="xl0 lo0"
	firewall_enable="YES"
	firewall_type="OPEN"
	ifconfig_xl0="inet 10.0.0.10 netmask 255.255.255.0"

These are options that are set at boot time. An important concept to understand is that this file is for options that are different from the defaults. That is, you only need to put options in here if you wish to override the defaults. So how do you know what the defaults are? There is a default rc.conf located at /etc/defaults/rc.conf. This default rc.conf file not only has the default boot options for services, it also contains general descriptions for the options. I STRONGLY suggest you look through this file. The rc.conf man page is also very valueable as it gives you all the information about rc.conf, including the full options.

Turning on options is now a snap. Let's look at a couple of examples for adding and changing options for rc.conf.

Example 1 => Changing the default gateway

Your gateway address gets set when you first install FreeBSD. So if you wanted to change it, you would edit /etc/rc.conf :

	# vi /etc/rc.conf
and change:
	defaultrouter="10.0.0.1"
to:
	defaultrouter="10.0.21.2"
What you just did is change the default gateway from 10.0.0.1 to 10.0.21.2. Save and exit the file.

Keep in mind that these options are set at boot time. They are not changed automatically when you save the file. In order for your change to take affect you would have to reboot your FreeBSD machine.

And yes, you can change your default gateway without rebooting, but that comes later.

Example 2 => Activating a firewall

Suppose you wanted to turn a firewall on to play with or secure your network. You would add the following options to /etc/rc.conf:

	firewall_enable="YES"
	firewall_type="OPEN"
This turns on the ipfw firewall within the kernel. Like before, it does not become active until you reboot. Setting firewall_type="OPEN" just means to keep the firewall open to all packets. You want to add that until you actually configure the firewall or you will be not be able to do anything on the network as the default is to DENY all packets. Firewalling will be covered later.

As you can see, its pretty easy to turn basic system services on and off by working with /etc/rc.conf. We will visit /etc/rc.conf through the rest of this Tutorial.

FreeBSD Ports

I went over how to turn on and off system services (ie, Programs that come with the system) above. FreeBSD has another collection of addon programs which you can choose from and install onto your system. These 3rd-party programs are known as the Ports Collection. There are currently 6000+ programs you can install on your system. If you chose to install the "Ports Collection" when you installed FreeBSD, you should have the ports collection on your system. If you did not choose to install the ports during the install process...don't worry...you can still get them. First let's explain what the ports are.

All the ports collection is is a categorized skeleton structure of how to retrieve, compile, and install a program on your system. This skeleton is installed in /usr/ports. Within /usr/ports lies the ports Categories. Lets have a look:


	> cd /usr/ports
	> ls
	INDEX           audio           editors         mail            sysutils
	LEGAL           benchmarks      emulators       math            textproc
	Makefile        biology         ftp             mbone           vietnamese
	Mk              cad             games           misc            www
	README          chinese         german          net             x11
	README.html     comms           graphics        news            x11-clocks
	Templates       converters      irc             palm            x11-fm
	Tools           databases       japanese        print           x11-fonts
	YEAR2000        deskutils       java            russian         x11-servers
	archivers       devel           korean          security        x11-toolkits
	astro           distfiles       lang            shells          x11-wm
These are the Categories. Actually they are directories. For example, the "games" directory contains all the ports that deal with games, the "databases" directory contains all the ports that deal with databases. You get the idea. How do you know which ports are what? You can find out a several of ways. The easiest way is to look inside the port directory for a file called pkg-descr or DESCR. WIthin this file will be a brief description of what the port is. Let's looks at one.
	Let's look in Math Categories:

	# cd /usr/ports/math
	# ls
	Makefile        femlab          libranlib       pspp            umfpack
	PDL             fftpack         linalg          py-gnuplot      vtk
	R-a4            fftw            linpack         py-scientific   wingz
	R-letter        freefem         metis           pygist          wmcalc
	README.html     fudgit          netcdf          rcalc           xgfe
	Scilab          geg             ngraph          rng             xgraph
	abs             glove           ntl             sc              xldlas
	add             gnumeric        numpy           siag            xlispstat
	apc             gnuplot         octave          simpack         xmgr
	blas            gnuplot+        oleo            slsc            xplot
	calc            grace           p5-MatrixReal   snns            xspread
	calctool        grpn            p5-Set-IntSpan  spin            xwpl
	concorde        gsl             pari            ss
	dcdflib         hexcalc         parmetis        superlu
	eispack         lapack          pkg             topaz
	eval            libneural       plplot          umatrix

	Hmm, what is 'spin'?  Let's find out:

	# cd spin
	# cat pkg-descr
	Spin is an efficient on-the-fly verification system
	(a `model checker') for asynchronous concurrent systems,
	such as data communication protocols, distributed operating
	systems, database systems, etc.
	It can be used to prove both safety and liveness properties,
	including all correctness requirements expressible in linear
	time temporal logic.
	Spin uses a high level language to specify systems descriptions,
	called PROMELA (PROcess MEta LAnguage).
	#
Now we know what the spin program is. There is also an online ports listing at the bottom of this page at www.freebsd.org.

Now let's actually install spin !

	Let's make sure we're in the right place to install 'spin':
	# pwd
	/usr/ports/math/spin

	Good, Let's install it now:

	# make install
What your FreeBSD system does at this point is:
	1) Download the source tarball (The actual source code for spin) from the internet
	2) Place the tarball in /usr/ports/distfiles
	3) Extract the tarball in the 'work' directory in the current directory (ie, /usr/ports/math/spin/work)
	4) apply any source code patches that are needed for your system to run this program
	5) if you need other ports to compile or run this port (dependancies), repeat steps 1-6
	6) compile dependancies and this port
	7) Install dependancies and this port
All ports related files usually get installed in /usr/local. This includes your compiled program, config files, libraries, etc. So its usually safe to say that everything in /usr/local is anything you've added to your system that is not part of the base FreeBSD system. The 'make' process takes care of worrying about dependancies you may need to compile/run your port.

Uninstalling ports is just as easy. Let's uninstall the 'spin' port we just installed above.

	Let's make sure we're in the right place to uninstall 'spin':
	# pwd
	/usr/ports/math/spin

	Good, Let's uninstall it now:

	# make deinstall
This will remove spin from your system.

So that's the famous Ports collection. Very powerful and easy to use. There are other ways of installing 3rd party programs. You can get precompiled binaries (aka FreeBSD packages) as well. This is usually another way to get the program you want without actually compiling it. You can also manually download the source code compile and install it yourself without ever using the ports or packages.

The FreeBSD GUI

FreeBSD also comes with a GUI called sysinstall. You can use this GUI to do a lot of the main configuration of the system as well as:

	-Upgrading the System (aka Binary Upgrade)
	-Add System distribution sets (add on system software, not ports)
	-Partition and label newly added hard drives 
	-Configure a mouse
	-Configure some system startup services (like we did above in the Config section)
	-Install FreeBSD packages (packages not ports)
	- and so on and etc.
Sysinstall is a nice little GUI that can do a lot of things, but not all things. It's worth mentioning because I wanted to follow up on the question I posed earlier: What if I didn't install the ports collection during the install process. You can now use sysinstall to install the ports skeleton framework.

	# /stand/sysinstall

	A window will pop up.  Select:

		"Do post-install configuration of FreeBSD"

	then select:

		"Install additional distribution sets"

	then hit the space bar to put an "X" in the line at says:

		"The FreeBSD Ports Collection"

	hit [ENTER] button. Now choose where you want to install it from.
Once this gets done you can exit out of sysinstall and you should now have a complete ports skeleton framework in /usr/ports!

You might have recognized sysinstall...you used it when you installed FreeBSD for the first time! I would recommend running through the menus as I will not be going into great detail simply because it's a GUI.

Getting Help

If you are looking for help on a problem there are a few resources you can use for free:

Mailing lists
News Groups
Web Resources

The mailling lists are a valuable resource of information. If you really want to learn and you're new to FreeBSD, I would recommend subscribing to freebsd-questions@freebsd.org. It's a pretty high volume mailling list but you can learn quite a bit just from watching the messages and responses. Don't be afraid to ask a question on that list. Everyone has to start somewhere. If you're new to FreeBSD, I would shy away from the other technical lists until you're comfortable. Also freebsd-newbies may be OK too.

There is also a few companies that offer tech support for FreeBSD for a small fee. Information for them can be found at www.freebsd.org website.