====== Unix/Linux Prerequisites ======

===== Building =====
You probably need or want to build Synchronet for your Unix/Linux system from [[dev:source|source code]] and you will need the following prerequisites installed first:

==== Required ====

^ Required Component ^ Files ^ Debian Package ^ Red Hat Package ^ FreeBSD Port/Package ^
| [[http://www.gnu.org/software/make/|GNU make]] | ''[[:install:nix:make|gmake]]'' or ''make'' | [[http://packages.debian.org/stable/make|make]] | make | devel/gmake |
| [[http://gcc.gnu.org/|GNU C/C++ Compiler]] or [[https://clang.llvm.org/|Clang C/C++ Compiler]] | ''gcc'' and ''g++'' or ''clang'' and ''clang++'' | [[http://packages.debian.org/stable/g++|g++]]  | gcc | Part of system |
| System C library header files |''errno.h'' | [[http://packages.debian.org/stable/linux-libc-dev|linux-libc-dev]]  | glibc-headers | Part of system |
| [[http://libarchive.org|libarchive]] | ''libarchive.so'' and ''archive.h'' | [[https://packages.debian.org/stable/libarchive-dev|libarchive-dev]] | libarchive-devel | Part of system |
| [[http://www.gnu.org/software/ncurses/|ncurses library and headers]]  | ''libncurses.so'' and ''ncurses.h'' or ''curses.h'' | [[http://packages.debian.org/stable/libncursesw5-dev|libncursesw5-dev]] | ncurses-devel | Part of system |
| [[http://www.mozilla.org/projects/nspr/|Netscape Portable Runtime Library]]       | ''libnspr4.so'' and ''nspr.h'' | [[http://packages.debian.org/stable/libnspr4-dev|libnspr4-dev]] | nspr-devel | devel/nspr |
| [[http://www.perl.org|Perl]] | ''perl'' | [[https://packages.debian.org/stable/perl|perl]] | | lang/perl5.14 (version subject to change) |
| [[http://www.python.org|Python]] | ''python'' | [[https://packages.debian.org/stable/python3|python3]] | python | lang/python |
| [[http://github.com/pkgconf/pkgconf/|pkgconf]] | ''pkg-config'' | [[https://packages.debian.org/stable/pkg-config|pkg-config]] |pkgconfig| devel/pkgconf |
| unzip | ''unzip'' | [[https://packages.debian.org/stable/zip|zip]] | unzip | archivers/unzip |
| patch (for non-x86 platforms)| patch | [[https://packages.stable.org/stable/patch|patch]] | patch | | 


==== Recommended ====
It's possible to build Synchronet, but potentially more difficult, if you don't have the following components on your system:

^ Recommended Component                            ^ Files ^ Debian Package ^ FreeBSD port/package ^ Alternative ^
| [[https://git-scm.com/|Git]]             | ''git'' | [[https://packages.debian.org/stable/git|git]]  | ''devel/git''           | ''ftp'', ''wget'', ''curl'' |
| Capabilities Library (Linux)            | ''libcap.so'' and ''sys/capability.h'' | [[http://packages.debian.org/stable/libcap2-dev|libcap-dev]]  | Not available | ''[[howto:linux_non-root|setcap]]'' |
| GNU Debugger | ''gdb'' | [[http://packages.debian.org/stable/gdb|gdb]] | Part of system | |
| systemd library (for systemd integration) | ''libsystemd.so'' and headers | [[https://packages.debian.org/stable/libsystemd-dev|libsystemd-dev]] | N/A | |
| MQTT library | ''libmosquitto.so'' and headers | [[https://packages.debian.org/stable/libmosquitto-dev|libmosquitto-dev]] | net/mosquitto | |
| [[http://x.org|Xorg]] | ''Xlib.so'' and headers | [[http://packages.debian.org/stable/xorg-dev|xorg-dev]] | ''x11/xorg'' | |
| [[http://libSDL.org|SDL 2]] | ''libsdl.so'' and headers | [[http://packages.debian.org/stable/libsdl2-dev|libsdl2-dev]] | ''devel/sdl2'' | |
| [[http://www.gtk.org|GTK+]] | libraries and headers | [[http://packages.debian.org/stable/libgtk-3-dev|libgtk-3-dev]] | ''x11-toolkits/gtk30'' | |
| [[https://glade.gnome.org/|GTK+ User Interface Builder (GLADE)]] | libraries and headers | [[http://packages.debian.org/stable/libglade2-dev|libglade2-dev]] | devel/libglade2 | |
| [[https://www.gnu.org/software/wget/|GNU Wget]] | ''wget'' | [[https://packages.debian.org/stable/wget|wget]] | ''ftp/wget'' | |
===== 3rd Party Programs =====

Some 3rd party executables may be utilized while running a Synchronet BBS:

==== Optional ====
^ Optional Component                      ^ Files                  ^ Debian Package ^ FreeBSD port/package ^ Comments ^
| [[http://www.ohse.de/uwe/software/lrzsz.html|lrzsz]]             | ''rz'' and ''sz''      | [[http://packages.debian.org/stable/lrzsz|lrzsz]] | comms/lrzsz | Use [[util:sexyz]] instead |
| [[http://www.columbia.edu/kermit/gkermit.html|G-Kermit]] | ''gkermit''            | [[http://packages.debian.org/stable/gkermit|gkermit]] | comms/gkermit | |
| Network tools                             | ''netstat'', ''ifconfig'' | [[http://packages.debian.org/stable/net-tools|net-tools]] | | [[https://packages.debian.org/stable/iproute2|iproute2]] package contains newer/alternative tools (e.g. ''ss'', ''ip'') |


===== Install =====

==== Debian/Ubuntu Linux ====

The following shell command-line/script file((made executable with chmod +x)) can be used to install the required and recommended packages on **Debian**-based Linux distros (e.g. **Ubuntu**):

<file sh install-sbbs-deps.sh>
  sudo apt install build-essential perl zip git gdb libarchive-dev libncursesw5-dev libnspr4-dev libmosquitto-dev libsystemd-dev libcap-dev xorg-dev libsdl2-dev libgtk-3-dev libglade2-dev python3 python-is-python3 lrzsz gkermit
</file>
==== CentOS 7 ====

To be able to use Mosquitto for MQTT, you will need to add the EPEL repo. Execute the following command as root:

  yum -y install epel-release
  
Now install the development tools:

  yum group install "Development Tools"
  
and finally the rest of the prerequisite packages

  yum install libarchive-devel nspr-devel ncurses-devel libcap-devel systemd-devel xorg-x11-server-devel SDL-devel lrzsz gkermit mosquitto-devel
  
(this is a work in progress)
  
==== MacOS ====

After installing [[http://brew.sh|Homebrew]]:
  
  brew install pkgconf nspr libarchive sdl2

==== Arch Linux ====
Do not install the autoconf2-13 package otherwise the configure scripts will fail to run. This may be applicable to other versions of Linux.
===== See Also =====
  * [[:dev:Dependencies]]
  * [[:install:nix:|Installation for UNIX Instructions]]
