minio/FreeBSD.md
nomadlogic 4d1b3d5e9a docs: FreeBSD minio source intructions (#1421)
* Modifications of documentation for using and building minio server on FreeBSD.

- update example of enabling compression to use lz4 vs gzip and provide
  explanation of benefits of lz4

- provide walkthrough of building minio server on FreeBSD with binary
  golang and gmake

* Fixing markdown syntax for code blocks so we render correctly.

* typo fix

* reword compression enablement docs for easier reading
2016-04-29 13:35:20 -07:00

4.6 KiB

Minio with ZFS backend - FreeBSD

This example assumes that you have a FreeBSD 10.x running

Step 1

As root on the FreeBSD edit /etc/rc.conf

zfs_enable="YES"

Start ZFS service

# service zfs start
# dd if=/dev/zero of=/zfs bs=1M count=4000

Configure a loopback device on the /zfs file.

# mdconfig -a -t vnode -f /zfs

Create zfs pool

# zpool create minio-example /dev/md0
# df /minio-example
Filesystem    512-blocks Used   Avail Capacity  Mounted on
minio-example    7872440   38 7872402     0%    /minio-example

Verify if it is writable

# touch /minio-example/testfile
# ls -l /minio-example/testfile
-rw-r--r--  1 root  wheel  0 Apr 26 00:51 /minio-example/testfile

Now you have successfully created a ZFS pool for futher reading please refer to ZFS Quickstart Guide

However, this pool is not taking advantage of any ZFS features, so let's create a ZFS filesytem on this pool with compression enabled. ZFS supports many compression algorithms: lzjb, gzip, zle, lz4. LZ4 is often the most performant algorithm in terms of compression of data versus system overhead.

# zfs create minio-example/compressed-objects
# zfs set compression=lz4 minio-example/compressed-objects

To keep monitoring your pool use

# zpool status
  pool: minio-example
 state: ONLINE
  scan: none requested
config:

	NAME        STATE     READ WRITE CKSUM
	minio-example  ONLINE       0     0     0
	  md0       ONLINE       0     0     0

errors: No known data errors

Step 2

Now start minio server on the /minio-example/compressed-objects, change the permissions such that this directory is accessibly by a normal user

# chown -R minio-user:minio-user /minio-example/compressed-objects

Now login as minio-user and start minio server.

$ curl https://dl.minio.io/server/minio/release/freebsd-amd64/minio > minio
$ chmod 755 minio
$ ./minio server /minio-example/compressed-objects

AccessKey: X3RU3Q6B4T20TYB281W5  SecretKey: bvp0DF8c+6MzL60UxFqOZGlA5Z8UPfIAATUQuzLS  Region: us-east-1

Minio Object Storage:
    http://159.203.234.49:9000
    http://10.12.0.5:9000
    http://127.0.0.1:9000

Minio Browser:
    http://159.203.234.49:9000
    http://10.12.0.5:9000
    http://127.0.0.1:9000

To configure Minio Client:
    $ wget https://dl.minio.io/client/mc/release/freebsd-amd64/mc
    $ chmod 755 mc
    $ ./mc config host add myminio http://localhost:9000 X3RU3Q6B4T20TYB281W5 bvp0DF8c+6MzL60UxFqOZGlA5Z8UPfIAATUQuzLS

Point your browser to http://localhost:9000 and login with the credentials displayed on the command line.

Now you have a S3 compatible server running on top of your ZFS backend which transparently provides disk level compression for your uploaded objects.

Thanks for using Minio, awaiting feedback :-)

Building Minio Server From Source

It is possible to build the minio server from source on FreeBSD. To do this we will used the golang distribution provided by the FreeBSD pkg infrastructure.

First we will need to install golang as well as GNU make:

$ sudo pkg install go gmake
Updating FreeBSD repository catalogue..
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 1 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
        go: 1.6.2,1
        gmake: 4.1_2

        The process will require 261 MiB more space.
        40 MiB to be downloaded.

        Proceed with this action? [y/N]: y
        Fetching go-1.6.2,1.txz: 100%   40 MiB  10.4MB/s    00:04
        Fetching gmake-4.1_2.txz: 100%  363 KiB 372.2kB/s    00:01
        Checking integrity... done (0 conflicting)
        [1/2] Installing go-1.6.2,1...
        [1/2] Extracting go-1.6.2,1: 100%
        [2/2] Installing gmake-4.1_2...
        [2/2] Extracting gmake-4.1_2: 100%

Next we need to configure our environment for golang. Insert the following lines into your ~/.profile file, and be sure to source the file before proceeding to the next step:

GOPATH=$HOME/golang; export GOPATH
GOROOT=/usr/local/go/; export GOROOT

Now we can proceed with the normal build process of minio server as found here. The only caveat is we need to specify gmake (GNU make) when building minio server as the current Makefile is not BSD make compatible:

$ mkdir -p $GOPATH/src/github.com/minio
$ cd $GOPATH/src/github.com/minio
$ git clone <paste saved URL for personal forked minio repo>
$ cd minio
$ gmake

From here you can start the server as you would with a precompiled minio server build.