#!/bin/bash PROJECT_DIR=~/pantalaimon-build TMP_DIR="${PROJECT_DIR}/tmp" OLM_DIR="${PROJECT_DIR}/olm" PANTALAIMON_DIR="${PROJECT_DIR}/pantalaimon" PYTHON_VERSION_MINOR="3.8" PYTHON_VERSION_PATCH="12" PYTHON_VERSION="${PYTHON_VERSION_MINOR}.${PYTHON_VERSION_PATCH}" PYTHON_DIR="${PROJECT_DIR}/python" PYTHON_SRC_DIR="${TMP_DIR}/Python-${PYTHON_VERSION}" PYTHON="${PYTHON_DIR}/bin/python${PYTHON_VERSION_MINOR}" PIP="${PYTHON_DIR}/bin/pip3" mkdir -p "${PROJECT_DIR}" mkdir -p "${TMP_DIR}" PACKAGES="make cmake build-essential zlibc python3-venv libffi-dev ppa-purge libssl-dev libsqlite3-dev zlib1g-dev rustc cargo libgirepository1.0-dev libdbus-1-dev libcairo2-dev" echo "Remounting RootFS writable..." sudo mount -o remount,rw / echo "Installing dependencies..." sudo apt update sudo apt install -y ${PACKAGES} OLMCK=${OLM_DIR}/usr/local/lib/libolm.so if test -f ${OLMCK}; then echo "olm found, skipping..." else cd "${TMP_DIR}" echo "Downloading Olm..." wget -qO- "https://gitlab.matrix.org/matrix-org/olm/-/archive/master/olm-master.tar.gz" | tar -xz echo "Building olm..." cd olm-master cmake . -Bbuild cmake --build build cd build make install DESTDIR="${OLM_DIR}" fi if test -f ${PYTHON}; then echo "python found, skipping..." else echo "Downloading Python..." cd "${TMP_DIR}" wget -qO- "https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz" | tar -xz echo "Installing python..." cd "${PYTHON_SRC_DIR}" #./configure --prefix="${PYTHON_DIR}" --with-openssl=${OPENSSL_DIR} --enable-shared ./configure --prefix="${PYTHON_DIR}" --enable-shared make make install fi LD_LIBRARY_PATH=${PYTHON_DIR}/lib:${OLM_DIR}/usr/local/lib:${LD_LIBRARY_PATH} export LD_LIBRARY_PATH echo "Updating setuptools..." ${PIP} install --upgrade setuptools ${PIP} install --upgrade pip ${PIP} install --upgrade wheel echo "Installing PyInstaller..." ${PIP} install --upgrade pyinstaller # dirty hack to work around pyinstaller locating the bootloader when building for armhf ln -s ${PYTHON_DIR}/lib/python3.7/site-packages/PyInstaller/bootloader/Linux-32bit-unknown ${PYTHON_DIR}/lib/python3.7/site-packages/PyInstaller/bootloader/Linux-32bit-arm # NOTE: Newer versions of cryptography require rustc+cargo to build. While the # new version builds fine with rust on arm64 it fails on armhf echo "Installing cryptography..." export CRYPTOGRAPHY_ALLOW_OPENSSL_102="yes" ${PIP} install cryptography==3.2.1 echo "Installing pycairo..." ${PIP} install pycairo==1.19.1 echo "Installing pygobject..." PYGOBJECT_WITHOUT_PYCAIRO=1 ${PIP} install --no-build-isolation pygobject==3.38 echo "Installing Pantalaimon..." CFLAGS=-I${OLM_DIR}/usr/local/include LDFLAGS=-L${OLM_DIR}/usr/local/lib ${PIP} install --upgrade pantalaimon[ui] echo "Bundling Pantalaimon..." cd ${PROJECT_DIR} ${PYTHON_DIR}/bin/pyinstaller --onefile ${PYTHON_DIR}/bin/pantalaimon ${PYTHON_DIR}/bin/pyinstaller --onefile ${PYTHON_DIR}/bin/panctl echo "Cleaning up, reverting changes to RootFS..." sudo apt autoremove -y ${PACKAGES} sudo apt clean