====== Install Synchronet on a Raspberry Pi ======

Here are step-by-step instructions on building and installing Synchronet on a [[http://www.raspberrypi.org|Raspberry Pi]] running either [[http://www.raspbian.org/|Raspbian]] or [[https://www.raspberrypi.com/software/|Raspberry Pi OS 32-bit]].

**Note:** While Raspbian and the 32-bit version of Raspberry Pi OS are virtually identical, the 64-bit version of Raspberry Pi OS is a significant departure from Raspbian. These instructions are untested on the 64-bit version.

{{:howto:rpi.png?100|}}
===== Prerequisites =====

These instructions were created using a Raspberry Pi 3 Model B running //Raspbian Stretch//, kernel version 4.4:

  $ uname -a
  Linux raspberrypi 4.4.21-v7+ #911 SMP Thu Sep 15 14:22:38 BST 2016 armv7l GNU/Linux
  
These instructions have recently been confirmed using a Raspberry Pi 3 Model B running //Raspbian Stretch Light//, kernel version 4.14:

  $ uname -a
  Linux raspberrypi 4.14.71-v7+ #1145 SMP Fri Sep 21 15:38:35 BST 2018 armv7l GNU/Linux
  
These instructions have recently been confirmed using a Raspberry Pi 4 running Raspberry Pi OS, kernel version 6.1.0:
  $ uname -a
  Linux raspberrypi 6.1.0-rpi7-rpi-v8 #1 SMP PREEMPT Debian 1:6.1.63-1+rpt1 (2023-11-24) aarch64 GNU/Linux
===== Instructions =====

Get to a Terminal/command prompt (e.g. login via SSH or run the Terminal application from the PIXEL desktop).

Login as your preferred user account to run the BBS software (e.g. the default user ''pi'', or create the user ''sbbs'' using the Linux ''adduser'' utility and then run ''su sbbs'' to login as the user ''sbbs'').

These instructions install Synchronet (source code, executables, configuration, and data files) into a sub-directory named ''sbbs'' off of the home directory of the current user (e.g. ''~/sbbs''). So if the current user is "pi", that would expand to ''/home/pi/sbbs''. If you wish to install into a different directory (e.g. ''/sbbs'' instead of ''~/sbbs''), then change the following commands as you see fit, but that is not recommended.

Install all the [[install:nix:prerequisites]] for Debian/Ubuntu for version 23.00 upwards then follow the instructions below:
**Note: If using an Rpi4 use a 64 bit Raspberry Pi OS and download arm64 instead of armhf.**
^ # ^ Command                                  ^ Description ^
| 1 | mkdir ~/deb_packages                 | Create a directory to store some packages for manual installation |
| 2 | cd ~/deb_packages                    | Change the current working directory to the newly-created directory |
| 3 | wget http://archive.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-6_armhf.deb or \\ wget http://archive.debian.org/debian/pool/main/libf/libffi/libffi6_3.2.1-6_arm64.deb | Download libffi6 |
| 4 | wget http://archive.debian.org/debian/pool/main/m/mozjs/libmozjs185-1.0_1.8.5-1.0.0+dfsg-6_armhf.deb or\\ wget http://archive.debian.org/debian/pool/main/m/mozjs/libmozjs185-1.0_1.8.5-1.0.0+dfsg-6_arm64.deb | Download libmozjs185-1.0 |
| 5 | wget http://archive.debian.org/debian/pool/main/m/mozjs/libmozjs185-dev_1.8.5-1.0.0+dfsg-6_armhf.deb or\\ wget http://archive.debian.org/debian/pool/main/m/mozjs/libmozjs185-dev_1.8.5-1.0.0+dfsg-6_arm64.deb | Download libmozjs185-dev |
| 6 | sudo apt install ./lib*.deb | Install libs and dependencies|
| 7 | mkdir ~/sbbs                         | Create the directory where Synchronet will be built and run from |
| 8 | cd ~/sbbs                            | Change the current working directory to the newly-created directory |
| 9 | wget [[https://gitlab.synchro.net/sbbs/sbbs/-/raw/master/install/install-sbbs.mk]] | [[install:nix:Fetch makefile]] |
|10 | make -f install-sbbs.mk SYMLINK=1 | Build it (will likely take quite a while) \\ JSINCLUDE=/usr/include/js JSLIB=mozjs185 is no longer needed|
|11 | export SBBSCTRL=~/sbbs/ctrl          | See [[config:env]] for details on setting this environment variable persistently |
|12 | ~/sbbs/exec/[[util:scfg]]            | Configure your BBS, see ''[[config:sbbs.ini]]'' for more Synchronet server settings |

Now you are ready to either run ''sbbs'' with interactive sysop console:

  $ ~/sbbs/exec/sbbs
  
or see [[systemd|this how-to]] for instructions on how to run ''sbbs'' as a daemon using systemd.

**Note**:\\
This will create 32-bit ARM binaries (executables):
  $ file -L sbbs
  sbbs: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0
  
Although it [[https://www.tal.org/tutorials/raspberry-pi3-build-64-bit-kernel|is possible]] to create 64-bit ARM binaries for the Raspberry Pi 3/3+ through cross-compilation, this is not supported by the Raspberry Pi foundation and thus not covered here.

====== DOSEMU On Raspberry Pi 4 with 64 Bit OS ======

You will need to add the DosEMU2 Launchpad PPA to your system.

First, add the public key

  $ sudo curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xebe1b5ded2ad45d6'|gpg --dearmor > /etc/apt/trusted.gpg.d/ubuntu-dosemu2-ppa.gpg

This step seems to be a challenge for some people so you may have to break it into a couple of steps

  $   curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xebe1b5ded2ad45d6' | gpg --dearmor > /tmp/dosemupgp.txt
  $   sudo mv /tmp/dosemupgp.txt /etc/apt/trusted.gpg.d/ubuntu-dosemu2-ppa.gpg
  
Second, create a source file

  $ sudo echo "deb https://ppa.launchpadcontent.net/dosemu2/ppa/ubuntu kinetic main" > /etc/apt/sources.list.d/dosemu2
  
Next, run apt update to make sure there are no issues

  $ sudo apt update
  
Then install the DosEMU2 files

  $ apt install dosemu2
  
A number of packages will be installed.

Finally, download Nelgin's dosemu2 configurations. Untar the file and follow the readme. You should be left with a working DosEMU2

  $ wget https://www.endofthelinebbs.com/dosemu2.tar.gz
  $ tar xf dosemu2.tar.gz


===== See Also =====
  * [[:howto:|How-To index]]
  * [[:install:nix|UNIX Installation]]
  * [[:config:nix|Configuring Synchronet for Unix/Linux]]
  * [[:monitor:syslog|Synchronet Daemon (UNIX)]]
  * [[:howto:systemd|Start Synchronet BBS (daemonized) from Systemd]]

{{tag>linux raspberry-pi}}
