So today I get to play around with FreeBSD's ports system [1], aka (Also Known As) a “package manager.”
>
```
PORTS(7) FreeBSD Miscellaneous Information Manual PORTS(7)
```
NAME
**ports**—contributed applications
DESCRIPTION
The FreeBSD Ports Collection offers a simple way for users and administrators to install applications. Each port contains any patches necessary to make the original application source code compile and run on BSD. Compiling an application is as simple as typing make build in the port directory! The Makefile automatically fetches the application source code, either from a local disk or via FTP (File Transfer Protocol), unpacks it on your system, applies the patches, and compiles it. If all goes well, simply type make install to install the application.
Okay. Seems simple enough. Do a search (not much better than a simple grep but it's something) and find the package I need to install.
>
```
SNMP# cd /usr/ports/databases/mysql41-client/
SNMP# make build
===> Vulnerability check disabled, database not found
=> mysql-4.1.13.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from ftp://ftp.easynet.be/mysql/Downloads/MySQL-4.1/.
fetch: ftp://ftp.easynet.be/mysql/Downloads/MySQL-4.1/mysql-4.1.13.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from ftp://ftp.fi.muni.cz/pub/mysql/Downloads/MySQL-4.1/.
fetch: ftp://ftp.fi.muni.cz/pub/mysql/Downloads/MySQL-4.1/mysql-4.1.13.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from http://mysql.mirrors.cybercity.dk/Downloads/MySQL-4.1/.
fetch: http://mysql.mirrors.cybercity.dk/Downloads/MySQL-4.1/mysql-4.1.13.tar.gz: Not Found
=> Attempting to fetch from ftp://ftp.fh-wolfenbuettel.de/pub/database/mysql/Downloads/MySQL-4.1/.
fetch: ftp://ftp.fh-wolfenbuettel.de/pub/database/mysql/Downloads/MySQL-4.1/mysql-4.1.13.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from ftp://ftp.gwdg.de/pub/misc/mysql/Downloads/MySQL-4.1/.
fetch: ftp://ftp.gwdg.de/pub/misc/mysql/Downloads/MySQL-4.1/mysql-4.1.13.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from http://netmirror.org/mirror/mysql.com/Downloads/MySQL-4.1/.
fetch: http://netmirror.org/mirror/mysql.com/Downloads/MySQL-4.1/mysql-4.1.13.tar.gz: Not Found
=> Attempting to fetch from ftp://netmirror.org/mysql.com/Downloads/MySQL-4.1/.
fetch: ftp://netmirror.org/mysql.com/Downloads/MySQL-4.1/mysql-4.1.13.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from http://mirrors.ntua.gr/MySQL/Downloads/MySQL-4.1/.
fetch: http://mirrors.ntua.gr/MySQL/Downloads/MySQL-4.1/mysql-4.1.13.tar.gz: Not Found
=> Attempting to fetch from ftp://ftp.ntua.gr/pub/databases/mysql/Downloads/MySQL-4.1/.
fetch: ftp://ftp.ntua.gr/pub/databases/mysql/Downloads/MySQL-4.1/mysql-4.1.13.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from http://mysql.sote.hu/Downloads/MySQL-4.1/.
fetch: http://mysql.sote.hu/Downloads/MySQL-4.1/mysql-4.1.13.tar.gz: Not Found
=> Attempting to fetch from ftp://ftp.rhnet.is/pub/mysql/Downloads/MySQL-4.1/.
fetch: ftp://ftp.rhnet.is/pub/mysql/Downloads/MySQL-4.1/mysql-4.1.13.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from ftp://mirror.widexs.nl/pub/mysql/Downloads/MySQL-4.1/.
^Cfetch: transfer interrupted
SNMP# cd /usr/ports/databases/mysql50-client/
SNMP# make build
===> Vulnerability check disabled, database not found
=> mysql-5.0.9-beta.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch from ftp://ftp.easynet.be/mysql/Downloads/MySQL-5.0/.
fetch: ftp://ftp.easynet.be/mysql/Downloads/MySQL-5.0/mysql-5.0.9-beta.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from ftp://ftp.fi.muni.cz/pub/mysql/Downloads/MySQL-5.0/.
fetch: ftp://ftp.fi.muni.cz/pub/mysql/Downloads/MySQL-5.0/mysql-5.0.9-beta.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from http://mysql.mirrors.cybercity.dk/Downloads/MySQL-5.0/.
fetch: http://mysql.mirrors.cybercity.dk/Downloads/MySQL-5.0/mysql-5.0.9-beta.tar.gz: Not Found
=> Attempting to fetch from ftp://ftp.fh-wolfenbuettel.de/pub/database/mysql/Downloads/MySQL-5.0/.
fetch: ftp://ftp.fh-wolfenbuettel.de/pub/database/mysql/Downloads/MySQL-5.0/mysql-5.0.9-beta.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from ftp://ftp.gwdg.de/pub/misc/mysql/Downloads/MySQL-5.0/.
fetch: ftp://ftp.gwdg.de/pub/misc/mysql/Downloads/MySQL-5.0/mysql-5.0.9-beta.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from http://netmirror.org/mirror/mysql.com/Downloads/MySQL-5.0/.
fetch: http://netmirror.org/mirror/mysql.com/Downloads/MySQL-5.0/mysql-5.0.9-beta.tar.gz: Not Found
=> Attempting to fetch from ftp://netmirror.org/mysql.com/Downloads/MySQL-5.0/.
fetch: ftp://netmirror.org/mysql.com/Downloads/MySQL-5.0/mysql-5.0.9-beta.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from http://mirrors.ntua.gr/MySQL/Downloads/MySQL-5.0/.
fetch: http://mirrors.ntua.gr/MySQL/Downloads/MySQL-5.0/mysql-5.0.9-beta.tar.gz: Not Found
=> Attempting to fetch from ftp://ftp.ntua.gr/pub/databases/mysql/Downloads/MySQL-5.0/.
fetch: ftp://ftp.ntua.gr/pub/databases/mysql/Downloads/MySQL-5.0/mysql-5.0.9-beta.tar.gz: File unavailable (e.g., file not found, no access)
=> Attempting to fetch from http://mysql.sote.hu/Downloads/MySQL-5.0/.
fetch: http://mysql.sote.hu/Downloads/MySQL-5.0/mysql-5.0.9-beta.tar.gz: Not Found
=> Attempting to fetch from ftp://ftp.rhnet.is/pub/mysql/Downloads/MySQL-5.0/.
^Cfetch: transfer interrupted
SNMP#
```
Okay, so how exactly is this better than getting the tarballs?