358 lines
13 KiB
Plaintext
358 lines
13 KiB
Plaintext
---
|
|
title: FreeBSD Quickstart Guide for Linux® Users
|
|
authors:
|
|
- author: John Ferrell
|
|
copyright: 2008 The FreeBSD Documentation Project
|
|
releaseinfo: "$FreeBSD$"
|
|
trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
|
|
---
|
|
|
|
= FreeBSD Quickstart Guide for Linux(R) Users
|
|
:doctype: article
|
|
:toc: macro
|
|
:toclevels: 1
|
|
:icons: font
|
|
:sectnums:
|
|
:sectnumlevels: 6
|
|
:source-highlighter: rouge
|
|
:experimental:
|
|
|
|
include::shared/en/urls.adoc[]
|
|
|
|
[.abstract-title]
|
|
Abstract
|
|
|
|
This document is intended to quickly familiarize intermediate to advanced Linux(R) users with the basics of FreeBSD.
|
|
|
|
'''
|
|
|
|
toc::[]
|
|
|
|
[[intro]]
|
|
== Introduction
|
|
|
|
This document highlights some of the technical differences between FreeBSD and Linux(R) so that intermediate to advanced Linux(R) users can quickly familiarize themselves with the basics of FreeBSD.
|
|
|
|
This document assumes that FreeBSD is already installed.
|
|
Refer to the link:{handbook}#bsdinstall[Installing FreeBSD] chapter of the FreeBSD Handbook for help with the installation process.
|
|
|
|
[[shells]]
|
|
== Default Shell
|
|
|
|
Linux(R) users are often surprised to find that Bash is not the default shell in FreeBSD.
|
|
In fact, Bash is not included in the default installation.
|
|
Instead, FreeBSD uses man:tcsh[1] as the default root shell, and the Bourne shell-compatible man:sh[1] as the default user shell.
|
|
man:sh[1] is very similar to Bash but with a much smaller feature-set.
|
|
Generally shell scripts written for man:sh[1] will run in Bash, but the reverse is not always true.
|
|
|
|
However, Bash and other shells are available for installation using the FreeBSD link:{handbook}#ports[Packages and Ports Collection].
|
|
|
|
After installing another shell, use man:chsh[1] to change a user's default shell.
|
|
It is recommended that the `root` user's default shell remain unchanged since shells which are not included in the base distribution are installed to [.filename]#/usr/local/bin#.
|
|
In the event of a problem, the file system where [.filename]#/usr/local/bin# is located may not be mounted.
|
|
In this case, `root` would not have access to its default shell, preventing `root` from logging in and fixing the problem.
|
|
|
|
[[software]]
|
|
== Packages and Ports: Adding Software in FreeBSD
|
|
|
|
FreeBSD provides two methods for installing applications: binary packages and compiled ports.
|
|
Each method has its own benefits:
|
|
|
|
.Binary Packages
|
|
* Faster installation as compared to compiling large applications.
|
|
* Does not require an understanding of how to compile software.
|
|
* No need to install a compiler.
|
|
|
|
.Ports
|
|
* Ability to customize installation options.
|
|
* Custom patches can be applied.
|
|
|
|
If an application installation does not require any customization, installing the package is sufficient.
|
|
Compile the port instead whenever an application requires customization of the default options.
|
|
If needed, a custom package can be compiled from ports using `make package`.
|
|
|
|
A complete list of all available ports and packages can be found https://www.freebsd.org/ports/[here].
|
|
|
|
[[packages]]
|
|
=== Packages
|
|
|
|
Packages are pre-compiled applications, the FreeBSD equivalents of [.filename]#.deb# files on Debian/Ubuntu based systems and [.filename]#.rpm# files on Red Hat/Fedora based systems.
|
|
Packages are installed using `pkg`.
|
|
For example, the following command installs Apache 2.4:
|
|
|
|
[source,shell]
|
|
....
|
|
# pkg install apache24
|
|
....
|
|
|
|
For more information on packages refer to section 5.4 of the FreeBSD Handbook: link:{handbook}#pkgng-intro[Using pkgng for Binary Package Management].
|
|
|
|
[[ports]]
|
|
=== Ports
|
|
|
|
The FreeBSD Ports Collection is a framework of [.filename]#Makefiles# and patches specifically customized for installing applications from source on FreeBSD.
|
|
When installing a port, the system will fetch the source code, apply any required patches, compile the code, and install the application and any required dependencies.
|
|
|
|
The Ports Collection, sometimes referred to as the ports tree, can be installed to [.filename]#/usr/ports# using man:portsnap[8].
|
|
Detailed instructions for installing the Ports Collection can be found in link:{handbook}#ports-using[section 5.5] of the FreeBSD Handbook.
|
|
|
|
To compile a port, change to the port's directory and start the build process. The following example installs Apache 2.4 from the Ports Collection:
|
|
|
|
[source,shell]
|
|
....
|
|
# cd /usr/ports/www/apache24
|
|
# make install clean
|
|
....
|
|
|
|
A benefit of using ports to install software is the ability to customize the installation options.
|
|
This example specifies that the mod_ldap module should also be installed:
|
|
|
|
[source,shell]
|
|
....
|
|
# cd /usr/ports/www/apache24
|
|
# make WITH_LDAP="YES" install clean
|
|
....
|
|
|
|
Refer to link:{handbook}#ports-using[Using the Ports Collection] for more information.
|
|
|
|
[[startup]]
|
|
== System Startup
|
|
|
|
Many Linux(R) distributions use the SysV init system, whereas FreeBSD uses the traditional BSD-style man:init[8].
|
|
Under the BSD-style man:init[8], there are no run-levels and [.filename]#/etc/inittab# does not exist.
|
|
Instead, startup is controlled by man:rc[8] scripts.
|
|
At system boot, [.filename]#/etc/rc# reads [.filename]#/etc/rc.conf# and [.filename]#/etc/defaults/rc.conf# to determine which services are to be started.
|
|
The specified services are then started by running the corresponding service initialization scripts located in [.filename]#/etc/rc.d/# and [.filename]#/usr/local/etc/rc.d/#. These scripts are similar to the scripts located in [.filename]#/etc/init.d/# on Linux(R) systems.
|
|
|
|
The scripts found in [.filename]#/etc/rc.d/# are for applications that are part of the "base" system, such as man:cron[8], man:sshd[8], and man:syslog[3].
|
|
The scripts in [.filename]#/usr/local/etc/rc.d/# are for user-installed applications such as Apache and Squid.
|
|
|
|
Since FreeBSD is developed as a complete operating system, user-installed applications are not considered to be part of the "base" system.
|
|
User-installed applications are generally installed using link:{handbook}#ports-using[Packages or Ports].
|
|
In order to keep them separate from the base system, user-installed applications are installed under [.filename]#/usr/local/#.
|
|
Therefore, user-installed binaries reside in [.filename]#/usr/local/bin/#, configuration files are in [.filename]#/usr/local/etc/#, and so on.
|
|
|
|
Services are enabled by adding an entry for the service in [.filename]#/etc/rc.conf#.
|
|
The system defaults are found in [.filename]#/etc/defaults/rc.conf# and these default settings are overridden by settings in [.filename]#/etc/rc.conf#.
|
|
Refer to man:rc.conf[5] for more information about the available entries.
|
|
When installing additional applications, review the application's install message to determine how to enable any associated services.
|
|
|
|
The following entries in [.filename]#/etc/rc.conf# enable man:sshd[8], enable Apache 2.4, and specify that Apache should be started with SSL.
|
|
|
|
[.programlisting]
|
|
....
|
|
# enable SSHD
|
|
sshd_enable="YES"
|
|
# enable Apache with SSL
|
|
apache24_enable="YES"
|
|
apache24_flags="-DSSL"
|
|
....
|
|
|
|
Once a service has been enabled in [.filename]#/etc/rc.conf#, it can be started without rebooting the system:
|
|
|
|
[source,shell]
|
|
....
|
|
# service sshd start
|
|
# service apache24 start
|
|
....
|
|
|
|
If a service has not been enabled, it can be started from the command line using `onestart`:
|
|
|
|
[source,shell]
|
|
....
|
|
# service sshd onestart
|
|
....
|
|
|
|
[[network]]
|
|
== Network Configuration
|
|
|
|
Instead of a generic _ethX_ identifier that Linux(R) uses to identify a network interface, FreeBSD uses the driver name followed by a number.
|
|
The following output from man:ifconfig[8] shows two Intel(R) Pro 1000 network interfaces ([.filename]#em0# and [.filename]#em1#):
|
|
|
|
[source,shell]
|
|
....
|
|
% 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
|
|
....
|
|
|
|
An IP address can be assigned to an interface using man:ifconfig[8].
|
|
To remain persistent across reboots, the IP configuration must be included in [.filename]#/etc/rc.conf#.
|
|
The following [.filename]#/etc/rc.conf# entries specify the hostname, IP address, and default gateway:
|
|
|
|
[.programlisting]
|
|
....
|
|
hostname="server1.example.com"
|
|
ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0"
|
|
defaultrouter="10.10.10.1"
|
|
....
|
|
|
|
Use the following entries to instead configure an interface for DHCP:
|
|
|
|
[.programlisting]
|
|
....
|
|
hostname="server1.example.com"
|
|
ifconfig_em0="DHCP"
|
|
....
|
|
|
|
[[firewall]]
|
|
== Firewall
|
|
|
|
FreeBSD does not use Linux(R) IPTABLES for its firewall.
|
|
Instead, FreeBSD offers a choice of three kernel level firewalls:
|
|
|
|
* link:{handbook}#firewalls-pf[PF]
|
|
* link:{handbook}#firewalls-ipf[IPFILTER]
|
|
* link:{handbook}#firewalls-ipfw[IPFW]
|
|
|
|
PF is developed by the OpenBSD project and ported to FreeBSD.
|
|
PF was created as a replacement for IPFILTER and its syntax is similar to that of IPFILTER.
|
|
PF can be paired with man:altq[4] to provide QoS features.
|
|
|
|
This sample PF entry allows inbound SSH:
|
|
|
|
[.programlisting]
|
|
....
|
|
pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
|
|
....
|
|
|
|
IPFILTER is the firewall application developed by Darren Reed.
|
|
It is not specific to FreeBSD and has been ported to several operating systems including NetBSD, OpenBSD, SunOS, HP/UX, and Solaris.
|
|
|
|
The IPFILTER syntax to allow inbound SSH is:
|
|
|
|
[.programlisting]
|
|
....
|
|
pass in on $ext_if proto tcp from any to any port = 22
|
|
....
|
|
|
|
IPFW is the firewall developed and maintained by FreeBSD.
|
|
It can be paired with man:dummynet[4] to provide traffic shaping capabilities and simulate different types of network connections.
|
|
|
|
The IPFW syntax to allow inbound SSH would be:
|
|
|
|
[.programlisting]
|
|
....
|
|
ipfw add allow tcp from any to me 22 in via $ext_if
|
|
....
|
|
|
|
[[updates]]
|
|
== Updating FreeBSD
|
|
|
|
There are two methods for updating a FreeBSD system: from source or binary updates.
|
|
|
|
Updating from source is the most involved update method, but offers the greatest amount of flexibility.
|
|
The process involves synchronizing a local copy of the FreeBSD source code with the FreeBSD Subversion servers.
|
|
Once the local source code is up-to-date, a new version of the kernel and userland can be compiled.
|
|
|
|
Binary updates are similar to using `yum` or `apt-get` to update a Linux(R) system.
|
|
In FreeBSD, man:freebsd-update[8] can be used fetch new binary updates and install them.
|
|
These updates can be scheduled using man:cron[8].
|
|
|
|
[NOTE]
|
|
====
|
|
When using man:cron[8] to schedule updates, use `freebsd-update cron` in the man:crontab[1] to reduce the possibility of a large number of machines all pulling updates at the same time:
|
|
|
|
[.programlisting]
|
|
....
|
|
0 3 * * * root /usr/sbin/freebsd-update cron
|
|
....
|
|
|
|
====
|
|
|
|
For more information on source and binary updates, refer to link:{handbook}#updating-upgrading[the chapter on updating] in the FreeBSD Handbook.
|
|
|
|
[[procfs]]
|
|
== procfs: Gone But Not Forgotten
|
|
|
|
In some Linux(R) distributions, one could look at [.filename]#/proc/sys/net/ipv4/ip_forward# to determine if IP forwarding is enabled.
|
|
In FreeBSD, man:sysctl[8] is instead used to view this and other system settings.
|
|
|
|
For example, use the following to determine if IP forwarding is enabled on a FreeBSD system:
|
|
|
|
[source,shell]
|
|
....
|
|
% sysctl net.inet.ip.forwarding
|
|
net.inet.ip.forwarding: 0
|
|
....
|
|
|
|
Use `-a` to list all the system settings:
|
|
|
|
[source,shell]
|
|
....
|
|
% sysctl -a | more
|
|
....
|
|
|
|
If an application requires procfs, add the following entry to [.filename]#/etc/fstab#:
|
|
|
|
[source,shell]
|
|
....
|
|
proc /proc procfs rw,noauto 0 0
|
|
....
|
|
|
|
Including `noauto` will prevent [.filename]#/proc# from being automatically mounted at boot.
|
|
|
|
To mount the file system without rebooting:
|
|
|
|
[source,shell]
|
|
....
|
|
# mount /proc
|
|
....
|
|
|
|
[[commands]]
|
|
== Common Commands
|
|
|
|
Some common command equivalents are as follows:
|
|
|
|
[.informaltable]
|
|
[cols="1,1,1", frame="none", options="header"]
|
|
|===
|
|
| Linux(R) command (Red Hat/Debian)
|
|
| FreeBSD equivalent
|
|
| Purpose
|
|
|
|
|`yum install _package_` / `apt-get install _package_`
|
|
|`pkg install _package_`
|
|
|Install package from remote repository
|
|
|
|
|`rpm -ivh _package_` / `dpkg -i _package_`
|
|
|`pkg add _package_`
|
|
|Install local package
|
|
|
|
|`rpm -qa` / `dpkg -l`
|
|
|`pkg info`
|
|
|List installed packages
|
|
|
|
|`lspci`
|
|
|`pciconf`
|
|
|List PCI devices
|
|
|
|
|`lsmod`
|
|
|`kldstat`
|
|
|List loaded kernel modules
|
|
|
|
|`modprobe`
|
|
|`kldload` / `kldunload`
|
|
|Load/Unload kernel modules
|
|
|
|
|`strace`
|
|
|`truss`
|
|
|Trace system calls
|
|
|===
|
|
|
|
[[conclusion]]
|
|
== Conclusion
|
|
|
|
This document has provided an overview of FreeBSD.
|
|
Refer to the link:{handbook}[FreeBSD Handbook] for more in-depth coverage of these topics as well as the many topics not covered by this document.
|