How to install bmon – Bandwidth Monitor on CentOS


bmon is a monitoring and debugging tool to capture networking related statistics and prepare them visually in a human friendly way. It features various output methods including an interactive curses user interface and a programmable text output for scripting.

If your server hasn’t git, follow guide: How to install Git on Centos Linux

I install bmon on CentOS 7 64bits.

Step 1:

git clone https://github.com/tgraf/bmon.git
[root@tutorialspots ~]# git clone https://github.com/tgraf/bmon.git
Cloning into 'bmon'...
remote: Counting objects: 683, done.
remote: Total 683 (delta 0), reused 1 (delta 0), pack-reused 682
Receiving objects: 100% (683/683), 855.84 KiB | 62.00 KiB/s, done.
Resolving deltas: 100% (379/379), done.

Step 2:

cd bmon

Step 3:

yum install make libconfuse-devel libnl3-devel libnl-route3-devel ncurses-devel
[root@tutorialspots bmon]# yum install make libconfuse-devel libnl3-devel libnl-route3-d
evel ncurses-devel
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
base                                                     | 3.6 kB     00:00
epel/x86_64/metalink                                     |  10 kB     00:03
epel                                                     | 4.3 kB     00:00
extras                                                   | 3.4 kB     00:00
mariadb                                                  | 2.9 kB     00:00
nodesource                                               | 2.5 kB     00:00
remi-safe                                                | 2.9 kB     00:00
updates                                                  | 3.4 kB     00:00
(1/10): base/7/x86_64/group_gz                             | 156 kB   00:04
(2/10): epel/x86_64/group_gz                               | 170 kB   00:05
(3/10): epel/x86_64/updateinfo                             | 833 kB   00:21
(4/10): nodesource/x86_64/primary_db                       |  44 kB   00:00
(5/10): mariadb/primary_db                                 |  21 kB   00:01
(6/10): remi-safe/primary_db                               | 1.1 MB   00:02
(7/10): extras/7/x86_64/primary_db                         | 112 kB   00:03
(8/10): updates/7/x86_64/primary_db                        | 2.7 MB   00:47
(9/10): epel/x86_64/primary_db                             | 4.8 MB   01:21
(10/10): base/7/x86_64/primary_db                          | 5.7 MB   03:03
Determining fastest mirrors
 * base: mirrors.greenmountainaccess.net
 * epel: mirror.math.princeton.edu
 * extras: mirrors.greenmountainaccess.net
 * remi-safe: remi.mirror.wearetriple.com
 * updates: mirrors.greenmountainaccess.net
Package 1:make-3.82-23.el7.x86_64 already installed and latest version
No package libnl-route3-devel available.
Resolving Dependencies
--> Running transaction check
---> Package libconfuse-devel.x86_64 0:2.7-7.el7 will be installed
--> Processing Dependency: libconfuse = 2.7-7.el7 for package: libconfuse-devel-
2.7-7.el7.x86_64
--> Processing Dependency: libconfuse.so.0()(64bit) for package: libconfuse-deve
l-2.7-7.el7.x86_64
---> Package libnl3-devel.x86_64 0:3.2.28-4.el7 will be installed
--> Processing Dependency: libnl3-cli = 3.2.28-4.el7 for package: libnl3-devel-3
.2.28-4.el7.x86_64
--> Processing Dependency: libnl3 = 3.2.28-4.el7 for package: libnl3-devel-3.2.2
8-4.el7.x86_64
---> Package ncurses-devel.x86_64 0:5.9-13.20130511.el7 will be updated
---> Package ncurses-devel.x86_64 0:5.9-14.20130511.el7_4 will be an update
--> Processing Dependency: ncurses-libs(x86-64) = 5.9-14.20130511.el7_4 for pack
age: ncurses-devel-5.9-14.20130511.el7_4.x86_64
--> Running transaction check
---> Package libconfuse.x86_64 0:2.7-7.el7 will be installed
---> Package libnl3.x86_64 0:3.2.28-3.el7_3 will be updated
---> Package libnl3.x86_64 0:3.2.28-4.el7 will be an update
---> Package libnl3-cli.x86_64 0:3.2.28-3.el7_3 will be updated
---> Package libnl3-cli.x86_64 0:3.2.28-4.el7 will be an update
---> Package ncurses-libs.x86_64 0:5.9-13.20130511.el7 will be updated
--> Processing Dependency: ncurses-libs(x86-64) = 5.9-13.20130511.el7 for packag
e: ncurses-5.9-13.20130511.el7.x86_64
---> Package ncurses-libs.x86_64 0:5.9-14.20130511.el7_4 will be an update
--> Processing Dependency: ncurses-base = 5.9-14.20130511.el7_4 for package: ncu
rses-libs-5.9-14.20130511.el7_4.x86_64
--> Running transaction check
---> Package ncurses.x86_64 0:5.9-13.20130511.el7 will be updated
---> Package ncurses.x86_64 0:5.9-14.20130511.el7_4 will be an update
---> Package ncurses-base.noarch 0:5.9-13.20130511.el7 will be updated
---> Package ncurses-base.noarch 0:5.9-14.20130511.el7_4 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package              Arch       Version                      Repository   Size
================================================================================
Installing:
 libconfuse-devel     x86_64     2.7-7.el7                    epel         17 k
 libnl3-devel         x86_64     3.2.28-4.el7                 base         71 k
Updating:
 ncurses-devel        x86_64     5.9-14.20130511.el7_4        updates     712 k
Installing for dependencies:
 libconfuse           x86_64     2.7-7.el7                    epel         80 k
Updating for dependencies:
 libnl3               x86_64     3.2.28-4.el7                 base        278 k
 libnl3-cli           x86_64     3.2.28-4.el7                 base        160 k
 ncurses              x86_64     5.9-14.20130511.el7_4        updates     304 k
 ncurses-base         noarch     5.9-14.20130511.el7_4        updates      68 k
 ncurses-libs         x86_64     5.9-14.20130511.el7_4        updates     316 k

Transaction Summary
================================================================================
Install  2 Packages (+1 Dependent package)
Upgrade  1 Package  (+5 Dependent packages)

Total download size: 2.0 M
Is this ok [y/d/N]: y
Downloading packages:
No Presto metadata available for base
updates/7/x86_64/prestodelta                               | 265 kB   00:15
Delta RPMs reduced 1.4 M of updates to 346 k (75% saved)
(1/9): libconfuse-2.7-7.el7.x86_64.rpm                     |  80 kB   00:01
(2/9): libconfuse-devel-2.7-7.el7.x86_64.rpm               |  17 kB   00:00
(3/9): ncurses-base-5.9-13.20130511.el7_5.9-14.20130511.el |  43 kB   00:02
/usr/share/doc/ncurses-base-5.9/README: No such file or directory
cannot reconstruct rpm from disk files
(4/9): ncurses-devel-5.9-13.20130511.el7_5.9-14.20130511.e | 137 kB   00:03
(5/9): ncurses-libs-5.9-13.20130511.el7_5.9-14.20130511.el |  77 kB   00:05
(6/9): ncurses-5.9-13.20130511.el7_5.9-14.20130511.el7_4.x |  89 kB   00:06
/usr/share/doc/ncurses-5.9/ANNOUNCE: No such file or directory
cannot reconstruct rpm from disk files
(7/9): libnl3-devel-3.2.28-4.el7.x86_64.rpm                |  71 kB   00:03
(8/9): libnl3-cli-3.2.28-4.el7.x86_64.rpm                  | 160 kB   00:07
(9/9): libnl3-3.2.28-4.el7.x86_64.rpm                      | 278 kB   00:16
Some delta RPMs failed to download or rebuild. Retrying..
(1/2): ncurses-base-5.9-14.20130511.el7_4.noarch.rpm       |  68 kB   00:04
(2/2): ncurses-5.9-14.20130511.el7_4.x86_64.rpm            | 304 kB   00:26
--------------------------------------------------------------------------------
Total                                               29 kB/s | 1.3 MB  00:45
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Updating   : libnl3-3.2.28-4.el7.x86_64                                  1/15
  Updating   : libnl3-cli-3.2.28-4.el7.x86_64                              2/15
  Updating   : ncurses-base-5.9-14.20130511.el7_4.noarch                   3/15
  Updating   : ncurses-libs-5.9-14.20130511.el7_4.x86_64                   4/15
  Installing : libconfuse-2.7-7.el7.x86_64                                 5/15
  Installing : libconfuse-devel-2.7-7.el7.x86_64                           6/15
  Updating   : ncurses-5.9-14.20130511.el7_4.x86_64                        7/15
  Updating   : ncurses-devel-5.9-14.20130511.el7_4.x86_64                  8/15
  Installing : libnl3-devel-3.2.28-4.el7.x86_64                            9/15
  Cleanup    : ncurses-devel-5.9-13.20130511.el7.x86_64                   10/15
  Cleanup    : libnl3-cli-3.2.28-3.el7_3.x86_64                           11/15
  Cleanup    : ncurses-5.9-13.20130511.el7.x86_64                         12/15
  Cleanup    : ncurses-libs-5.9-13.20130511.el7.x86_64                    13/15
  Cleanup    : ncurses-base-5.9-13.20130511.el7.noarch                    14/15
  Cleanup    : libnl3-3.2.28-3.el7_3.x86_64                               15/15
  Verifying  : ncurses-5.9-14.20130511.el7_4.x86_64                        1/15
  Verifying  : libnl3-devel-3.2.28-4.el7.x86_64                            2/15
  Verifying  : libconfuse-devel-2.7-7.el7.x86_64                           3/15
  Verifying  : ncurses-devel-5.9-14.20130511.el7_4.x86_64                  4/15
  Verifying  : ncurses-libs-5.9-14.20130511.el7_4.x86_64                   5/15
  Verifying  : libnl3-3.2.28-4.el7.x86_64                                  6/15
  Verifying  : libnl3-cli-3.2.28-4.el7.x86_64                              7/15
  Verifying  : libconfuse-2.7-7.el7.x86_64                                 8/15
  Verifying  : ncurses-base-5.9-14.20130511.el7_4.noarch                   9/15
  Verifying  : ncurses-devel-5.9-13.20130511.el7.x86_64                   10/15
  Verifying  : ncurses-5.9-13.20130511.el7.x86_64                         11/15
  Verifying  : libnl3-cli-3.2.28-3.el7_3.x86_64                           12/15
  Verifying  : ncurses-libs-5.9-13.20130511.el7.x86_64                    13/15
  Verifying  : libnl3-3.2.28-3.el7_3.x86_64                               14/15
  Verifying  : ncurses-base-5.9-13.20130511.el7.noarch                    15/15

Installed:
  libconfuse-devel.x86_64 0:2.7-7.el7     libnl3-devel.x86_64 0:3.2.28-4.el7

Dependency Installed:
  libconfuse.x86_64 0:2.7-7.el7

Updated:
  ncurses-devel.x86_64 0:5.9-14.20130511.el7_4

Dependency Updated:
  libnl3.x86_64 0:3.2.28-4.el7
  libnl3-cli.x86_64 0:3.2.28-4.el7
  ncurses.x86_64 0:5.9-14.20130511.el7_4
  ncurses-base.noarch 0:5.9-14.20130511.el7_4
  ncurses-libs.x86_64 0:5.9-14.20130511.el7_4

Complete!

Step 4:

./autogen.sh
[root@tutorialspots bmon]# ./autogen.sh
configure.ac:29: installing 'build-aux/config.guess'
configure.ac:29: installing 'build-aux/config.sub'
configure.ac:32: installing 'build-aux/install-sh'
configure.ac:32: installing 'build-aux/missing'
src/Makefile.am: installing 'build-aux/depcomp'

Step 5:

./configure
[root@vultr bmon]# ./configure
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking dependency style of gcc... gcc3
checking for library containing strerror... none required
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ISO C89... (cached) none needed
checking dependency style of gcc... (cached) gcc3
checking for gcc option to accept ISO C99... -std=gnu99
checking for gcc -std=gnu99 option to accept ISO Standard C... (cached) -std=gnu
99
checking how to run the C preprocessor... gcc -std=gnu99 -E
checking whether make sets $(MAKE)... (cached) yes
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking whether time.h and sys/time.h may both be included... yes
checking for dirent.h that defines DIR... yes
checking for library containing opendir... none required
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for size_t... yes
checking return type of signal handlers... void
checking for pid_t... yes
checking vfork.h usability... no
checking vfork.h presence... no
checking for vfork.h... no
checking for fork... yes
checking for vfork... yes
checking for working fork... yes
checking for working vfork... (cached) yes
checking getopt.h usability... yes
checking getopt.h presence... yes
checking for getopt.h... yes
checking ncurses/ncurses.h usability... yes
checking ncurses/ncurses.h presence... yes
checking for ncurses/ncurses.h... yes
checking ncurses.h usability... yes
checking ncurses.h presence... yes
checking for ncurses.h... yes
checking curses.h usability... yes
checking curses.h presence... yes
checking for curses.h... yes
checking dirent.h usability... yes
checking dirent.h presence... yes
checking for dirent.h... yes
checking sys/utsname.h usability... yes
checking sys/utsname.h presence... yes
checking for sys/utsname.h... yes
checking sys/sockio.h usability... no
checking sys/sockio.h presence... no
checking for sys/sockio.h... no
checking netinet6/in6.h usability... no
checking netinet6/in6.h presence... no
checking for netinet6/in6.h... no
checking fcntl.h usability... yes
checking fcntl.h presence... yes
checking for fcntl.h... yes
checking netdb.h usability... yes
checking netdb.h presence... yes
checking for netdb.h... yes
checking netinet/in.h usability... yes
checking netinet/in.h presence... yes
checking for netinet/in.h... yes
checking sysctl/ioctl.h usability... no
checking sysctl/ioctl.h presence... no
checking for sysctl/ioctl.h... no
checking sys/param.h usability... yes
checking sys/param.h presence... yes
checking for sys/param.h... yes
checking sys/socket.h usability... yes
checking sys/socket.h presence... yes
checking for sys/socket.h... yes
checking for suseconds_t... yes
checking for atexit... yes
checking for clock_gettime... yes
checking for memset... yes
checking for pow... no
checking for socket... yes
checking for strcasecmp... yes
checking for strchr... yes
checking for strdup... yes
checking for strerror... yes
checking for strncasecmp... yes
checking for strstr... yes
checking for strtol... yes
checking for uname... yes
checking for getdate... yes
checking for pkg-config... /usr/bin/pkg-config
checking for NcursesW wide-character library... yes
checking for working ncursesw/curses.h... yes
checking for working ncursesw.h... no
checking for working ncurses.h... yes
checking pkg-config is at least version 0.9.0... yes
checking for CONFUSE... yes
checking for LIBNL... yes
checking for LIBNL_ROUTE... yes
checking for pow in -lm... yes
checking for clock_gettime in -lrt... yes
checking for initscr in -lncurses... yes
checking for redrawwin in -lncurses... yes
checking for use_default_colors in -lncurses... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating include/Makefile
config.status: creating src/Makefile
config.status: creating man/Makefile
config.status: creating examples/Makefile
config.status: creating include/bmon/defs.h
config.status: executing depfiles commands

Step 6:

make
[root@tutorialspots bmon]# make
Making all in src
make[1]: Entering directory `/root/bmon/src'
  CC       bmon-utils.o
  CC       bmon-unit.o
  CC       bmon-conf.o
  CC       bmon-input.o
  CC       bmon-output.o
  CC       bmon-group.o
  CC       bmon-element.o
  CC       bmon-attr.o
  CC       bmon-element_cfg.o
  CC       bmon-history.o
  CC       bmon-graph.o
  CC       bmon-bmon.o
  CC       bmon-module.o
  CC       bmon-in_netlink.o
  CC       bmon-in_null.o
  CC       bmon-in_dummy.o
  CC       bmon-in_proc.o
  CC       bmon-in_sysctl.o
  CC       bmon-out_null.o
  CC       bmon-out_format.o
  CC       bmon-out_ascii.o
  CC       bmon-out_curses.o
  CCLD     bmon
make[1]: Leaving directory `/root/bmon/src'
Making all in man
make[1]: Entering directory `/root/bmon/man'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/root/bmon/man'
Making all in include
make[1]: Entering directory `/root/bmon/include'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/root/bmon/include'
Making all in examples
make[1]: Entering directory `/root/bmon/examples'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/root/bmon/examples'
make[1]: Entering directory `/root/bmon'
make[1]: Nothing to be done for `all-am'.
make[1]: Leaving directory `/root/bmon'

Step 7

make install
[root@vultrtutorialspots bmon]# make install
Making install in src
make[1]: Entering directory `/root/bmon/src'
make[2]: Entering directory `/root/bmon/src'
 /usr/bin/mkdir -p '/usr/local/bin'
  /usr/bin/install -c bmon '/usr/local/bin'
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/root/bmon/src'
make[1]: Leaving directory `/root/bmon/src'
Making install in man
make[1]: Entering directory `/root/bmon/man'
make[2]: Entering directory `/root/bmon/man'
make[2]: Nothing to be done for `install-exec-am'.
 /usr/bin/mkdir -p '/usr/local/share/man/man8'
 /usr/bin/install -c -m 644 bmon.8 '/usr/local/share/man/man8'
make[2]: Leaving directory `/root/bmon/man'
make[1]: Leaving directory `/root/bmon/man'
Making install in include
make[1]: Entering directory `/root/bmon/include'
make[2]: Entering directory `/root/bmon/include'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/root/bmon/include'
make[1]: Leaving directory `/root/bmon/include'
Making install in examples
make[1]: Entering directory `/root/bmon/examples'
make[2]: Entering directory `/root/bmon/examples'
make[2]: Nothing to be done for `install-exec-am'.
 /usr/bin/mkdir -p '/usr/local/share/doc/bmon/examples'
 /usr/bin/install -c -m 644 bmon.conf '/usr/local/share/doc/bmon/examples'
make[2]: Leaving directory `/root/bmon/examples'
make[1]: Leaving directory `/root/bmon/examples'
make[1]: Entering directory `/root/bmon'
make[2]: Entering directory `/root/bmon'
make[2]: Nothing to be done for `install-exec-am'.
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/root/bmon'
make[1]: Leaving directory `/root/bmon'

Now we can use bmon:

bmon

bmon

Leave a Reply