From 879cb28b9eba1b0ecaa60a43a0ec53070ea8f1e6 Mon Sep 17 00:00:00 2001 From: Kristjan Komlosi Date: Sat, 22 Jun 2019 00:05:35 +0200 Subject: [PATCH] Documented Python and module installation process. --- docs/build.md | 86 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 69 insertions(+), 17 deletions(-) diff --git a/docs/build.md b/docs/build.md index 619e7d2..c606205 100644 --- a/docs/build.md +++ b/docs/build.md @@ -1,17 +1,18 @@ # TeraHz build guide -The recommended way of getting TeraHz is the official SD card image provided -under the releases tab in the GitHub repository. Installing TeraHz from source -is a time consuming and painful process, even more so if you don't know what -you're doing, and whatever you end up building __will not be officially +The recommended way of getting TeraHz is the official Raspberry Pi SD card image +provided under the releases tab in the GitHub repository. Installing TeraHz from +source is a time consuming and painful process, even more so if you don't know +what you're doing, and whatever you end up building __will not be officially supported__ (unless you're a core developer). With this warning out of the way, let's begin. ## Getting the latest sources -The most reliable way to get working source code is by cloning the official GitHub -repository and checking out the `development-working` tag. This tag marks the latest -confirmed working commit. Building from the master branch is somewhat risky, and -building from development branches is straight up stupid if you're not a developer. +The most reliable way to get working source code is by cloning the official +GitHub repository and checking out the `development-working` tag. This tag marks +the latest confirmed working commit. Building from the master branch is somewhat +risky, and building from development branches is straight up stupid if you're +not a developer. After cloning and checking out, check the documentation for module dependencies and the required version of python in the `docs/dependencies.md` file. @@ -20,15 +21,66 @@ and the required version of python in the `docs/dependencies.md` file. This step depends a lot on the platform you're using. TeraHz was developed with Raspberry Pi and Raspbian in mind. If you're familiar with Raspbian enough, you'll know that the latest version of Python available is `3.5`, which is too -obsolete to run TeraHz and the required modules consistently. +obsolete to run TeraHz and the required modules consistently. This leaves us +with compiling Python from source. __This step is guaranteed to be slow, +overnight compiling with something like tmux is recommended.__ -After messing with Debian arm64 packages in the early development days I determined -that the most reliable way of getting Python on Raspbian is compiling it from source. -This part of the installation will take the largest portion of time, as compiling -anything complex on the Raspberry is painfully slow. +### Pre-requirements +Installing python without most C libraries will lead to a rather minimalistic +Python install, missing a lot of important modules. To prevent this, update +the system packages. After that, reboot. -If you're running an OS that provides a recent version of Python, great! You won't -have to waste so much time waiting for the build process to finish. +``` +sudo apt update +sudo apt full-upgrade +sudo reboot +``` -The Python version TeraHz works best on is `3.6.8`. To install it, download the -gzipped tarball from the official Python website, and decompress it. +Install the required build tools, libraries and their headers. + +``` +sudo apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev +``` + +### Compiling +Compiling Python from source is, in fact pretty easy, just time-consuming. I'll +advise you again to use a terminal multiplexer like `tmux` to start the build +process, detach the terminal session overnight and reattach it some time later +to check on it. + +Python 3.6.8 can be downloaded in many forms, but you'll be using the most basic +of them all: a gzipped tarball. Download and decompress it, the cd into its +directory. + +``` +wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz +tar -xzf Python-3.6.8.tgz +cd Python-3.6.8 +``` + +Python's build process is pretty classic, a `.configure` script and a Makefile. +Using the `-j` option with Make can reduce the compile time significantly. Go +with as many threads as you have cores: `-j 4` works great on the Pi 3 B/B+. + +``` +./configure +make -j4 +``` + +When the compilation ends, install your freshly built version of python. + +``` +sudo make altinstall +``` + +Altinstall means that the new version of Python will be installed beside the +existing version, and all related commands will use the full naming scheme: +think `python3.6` or `pip3.6` instead of the shorter `python3` or `pip3`. + +### Modules +Another painfully slow part is the installation of all the required modules needed +by TeraHz. Luckily, `pip3.6` takes care of the entire installation process. You might also want to run this command through a terminal multiplexer overnight, as it takes a few hours to complete. + +``` +pip3.6 install smbus pyserial flask pandas +```