On Aug 31, 2014, at 7:32 PM, Jake Turner wrote: > > Hi Borja, > > Have you’ve been able to write up a guide to installing NFSen on FreeBSD yet? > :)
I had to recall some steps, as my nfsen installations have been runnning for a long time. I am verifying this as I am writing it on a freshly installed 10-STABLE amd64. The trick is to install everything you need from ports, except for nfsen and nfdump. Once you have the necessary ports installled in place, just compile and install nfdump and nfsen from the original sources. In my case I use PHP as a fast-cgi module (php-fpm) and nginx as a web server, but doing the same with Apache is easy. WARNING, though: the config files I am going to include are not meant at all to be exposed to the world. I focused on making it work, so unless you verify them very well you should not use them in an exposed server at all. Installing the dependencies is easy. You need: - Perl. I had problems with Perl crashing in the past. 5.18 is working fine for me. (/usr/ports/lang/perl5.18). I am not using threaded Perl nor perl_malloc. Not that I have verified anything regarding perl_malloc, but I remember the threaded Perl was somewhat unstable on FreeBSD. - rrdtool (/usr/ports/databases/rrdtool). It will install all the dependencies it needs. In the past I used to have the following options in /etc/make.conf in order to avoid installing plenty of X11 dependencies but I think they are mostly useless now. WITHOUT_X11=1 WITH_X11=0 USE_X11="NO" I disable the use of mmap in rrdtool because mmap has (or had) performance problems on ZFS and I use ZFS extensively. But - The mentioned modules, Mail::Header and Mail::Internet are easy to install: /usr/ports/mail/p5-Mail-Tools. Same with Socket6: Make sure you install Socket6. /usr/ports/net/p5-Socket6. Compiling nfdump: You need autoconf (/usr/ports/devel/autoconf), just make install. Configure works. However, as FreeBSD doesn't put /usr/local/{lib,include} as a default path for building tools, it won't detect rrd. Just use the --with-rrdpath configure option. In my case, this configure command does the trick: ./configure --enable-nfprofile --enable-sflow --with-rrdpath=/usr/local That done, make and make install, as usual. It should work. As far as I have tried, Clang (the built-in compiler in FreeBSD 10) works. Now, the nfsen, webserver and PHP part. Some of the decisions are due to personal preference. Anyway, I always recommend to run PHP as a FastCGI program, never as a linked module. That way you have an easy way to control the maximum number of PHP scripts running in parallel and you can avoid some nasty overload situations. I use nginx as a web server. Just cd /usr/ports/www/nginx and built by default, unless you want to add some specific module. In the past I used Apache, again with PHP as a FastCGI backend. PHP: I am using PHP 5.4 (Currently /usr/ports/lang/php5). Make sure to select the "FPM" option with make config, and just make install. PHP extensions (/usr/ports/lang/php5-extensions). Enable the sockets option in make config, and, in case you plan to use MySQL for plugins such as Nfsight, MySQL. WARNING: IF YOU INTEND TO USE MYSQL, BETTER INSTALL YOUR FAVOURITE MYSQL VERSION *BEFORE* COMPILING THE PHP EXTENSIONS. OTHERWISE A MYSQL VERSION WILL BE CHOSEN BY THE PORT DEPENDENCES. Now let's install nfsen. You need two directories. One for the base system (which includes the nfsen programs and the data) and another one for the www infrastructure. I use to do it on /usr/local/nfsen and /var/www/nfsen. Extract nfsen. You will find a "etc" directory with a sample configuration file (nfsen-dist.conf). Just copy it to nfsen.conf and customize what you need. You want to set up the base (BASEDIR) and www (HTMLDIR). Also, pay attention to the user ids it needs. By default it will have two users: "netflow" and "www". "www" is created by the nginx install, but you need to create "netflow". I created it using "adduser", locked out user, group netflow as well, and make it a member of the "www" group. Use nologin as the shell, and you can lock out the account after using it, although maybe you will want it to have some use if you intend to run some cron scripts. So, just cd to the nfsen sources and "./install.pl etc/nfsen.conf". That should do the trick unless something is missing. It will complain if the "netflow" user is not a member of the "www" group, for instance. Now, the last part, making nfsight and php work. Warning: I am not an expert on the nuances of WWW servers and I find the subject rather boring, so, as this is intended to be in an isolated network, I just made it work. So, WARNING: USING THIS STUPID CONFIGURATION IN A PUBLIC FACING SERVER CAN BE INDEED DANGEROUS, USE AT YOUR OWN RISK. This part is more WWW/PHP trickery than nfsen actually. That said, if you can suggest an enhancement I will be very grateful. The relevant sections to make it work are these: (remember I have my WWW root directory on /var/www). This should do the trick of sending the PHP requests to the FastCGI backend. /usr/local/etc/nginx/nginx.conf (...) http { (blah blah) server { (blah blah) location / { root /var/www; location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name; fastcgi_read_timeout 300; include fastcgi_params; } With everything in place you can test the configuration. - Start nfsen (/usr/local/nfsen/bin/nfsen start). It will complain about symbol clashes but it will work. (Subroutine AbuseWhois::sockaddr_in6 redefined at /usr/local/lib/perl5/5.18/Exporter.pm line 66. at /usr/local/nfsen/libexec/AbuseWhois.pm line 42. To make sure it really started, run /usr/local/nfsen/bin/nfsen status. It will give the same warnings about redefined symbols, but it will confirm it is working: NfSen version: 1.3.6p1 NfSen status: Collector for (peer1 peer2) port 9996 is running [2626]. Collector for (upstream1) port 9995 is running [2629]. nfsen daemon: pid: [2631] is running. - Start php-fpm and nginx. If you haven't enabled them on rc.conf, just /usr/local/etc/rc.d/php-fpm onestart and /usr/local/etc/rc.d/nginx onestart) I think this is pretty complete (I have gone through the installation on an empty machine to make sure). The hurdles on FreeBSD are mainly the assumption that some packages installed by default on Linux are present everywhere (such as p5-Socket6), and anyway web servers are somewhat capricious pieces of software :) One warning: in the past at least I had problems to define Netflow sources *unless* I specified a color for their channel on the nfsen.conf file. So, this works, %sources = ( 'upstream1' => { 'port' => '9995', 'col' => '#0000ff', 'type' => 'netflow' }, ); but defining a source without a color does not. Let me know if it works or you have any problem. I've been running NfSen on FreeBSD for years, I am currently using both Sflow and Netflow, and I even run several different instances on the same server, just defining different BASEDIR and HTMLDIR directories. Cheers, Borja. ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ Nfsen-discuss mailing list Nfsen-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/nfsen-discuss