====== Building FreeSwitch from source under De{bi,vu}an ====== FreeSwitch does not let just anyone download its "open source" software any more. You need to have a [[https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Installation/HOWTO-Create-a-SignalWire-Personal-Access-Token_67240087/|Personal Access Token]]. Once you have a PAT, you can [[https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Installation/Linux/Debian_67240088/|use it]] to fetch the FreeSwitch GPG keyring, and set up apt authentication:wget -O /usr/share/keyrings/signalwire-freeswitch-repo.gpg https://signalwire:pat_xxxxx12345xxxxx@freeswitch.signalwire.com/repo/deb/debian-release/signalwire-freeswitch-repo.gpg echo "machine freeswitch.signalwire.com login signalwire password pat_xxxxx12345xxxxx" >/etc/apt/auth.conf.d/freeswitch.conf chown root: /etc/apt/auth.conf.d/freeswitch.conf chmod 600 /etc/apt/auth.conf.d/freeswitch.conf You also need to include a reference to the GPG key in sources.list:deb [signed-by=/usr/share/keyrings/signalwire-freeswitch-repo.gpg] https://freeswitch.signalwire.com/repo/deb/debian-release/ buster main deb-src [signed-by=/usr/share/keyrings/signalwire-freeswitch-repo.gpg] https://freeswitch.signalwire.com/repo/deb/debian-release/ buster main **Then** you can finally start getting the source code... ===== Preparing the tools ===== # apt build-dep freeswitch Reading package lists... Done Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: libsamplerate0 linux-image-4.19.0-14-amd64 linux-image-4.19.0-17-amd64 linux-image-4.19.0-9-amd64 Use 'apt autoremove' to remove them. The following packages will be REMOVED: libjack-jackd2-0 The following NEW packages will be installed: bison ca-certificates-java default-jdk default-jdk-headless default-jre default-jre-headless dh-python doxygen flite1-dev gdal-data gir1.2-freedesktop gir1.2-gdkpixbuf-2.0 gir1.2-glib-2.0 gir1.2-rsvg-2.0 git git-man icu-devtools imagemagick-6-common java-common ladspa-sdk libaec0 libarmadillo9 libarpack2 libasound2-dev libavcodec-dev libavformat-dev libavresample-dev libavresample4 libavutil-dev libbison-dev libblas3 libblkid-dev libbroadvoice-dev libbsd-dev libbz2-dev libcairo-script-interpreter2 libcairo2-dev libcharls2 libclang1-6.0 libcodec2-dev libcurl4-openssl-dev libdap25 libdapclient6v5 libdapserver7v5 libdb-dev libdb5.3-dev libdc1394-22 libdc1394-22-dev libde265-0 libdjvulibre-dev libdjvulibre-text libdjvulibre21 libedit-dev libepsilon1 liberror-perl libeudev-dev libevent-2.1-6 libevent-core-2.1-6 libevent-pthreads-2.1-6 libexif-dev libexif12 libexpat1-dev libfabric1 libffi-dev libfftw3-double3 libflac-dev libfontconfig1-dev libfreetype6-dev libfreexl1 libfyba0 libgd3 libgdal20 libgdbm-compat-dev libgdbm-dev libgdcm2-dev libgdcm2.8 libgdk-pixbuf2.0-dev libgeos-3.7.1 libgeos-c1v5 libgeotiff2 libgfortran5 libgif7 libgirepository-1.0-1 libgl2ps1.4 libglib2.0-bin libglib2.0-dev libglib2.0-dev-bin libgmp-dev libgmpxx4ldbl libgnutls-dane0 libgnutls-openssl27 libgnutls28-dev libgnutlsxx28 libgphoto2-6 libgphoto2-dev libgphoto2-port12 libhashkit-dev libhashkit2 libhdf4-0-alt libhdf5-103 libhdf5-openmpi-103 libheif1 libhiredis-dev libhiredis0.14 libhwloc-plugins libhwloc5 libibverbs1 libice-dev libicu-dev libidn2-dev libilbc-dev libilbc1 libilmbase-dev libilmbase23 libjack-dev libjack0 libjbig-dev libjpeg-dev libjpeg62-turbo-dev libjsoncpp1 libkmlbase1 libkmlconvenience1 libkmldom1 libkmlengine1 libkmlregionator1 libkmlxsd1 liblapack3 liblcms2-dev libldap2-dev libldns-dev liblept5 libllvm6.0 liblqr-1-0 liblqr-1-0-dev libltdl-dev liblzma-dev liblzo2-2 libmagickcore-6-arch-config libmagickcore-6-headers libmagickcore-6.q16-6 libmagickcore-6.q16-6-extra libmagickcore-6.q16-dev libmagickcore-dev libmagickwand-6.q16-6 libmariadb-dev libmemcached-dev libminizip1 libmono-2.0-dev libmono-corlib4.5-cil libmono-microsoft-csharp4.0-cil libmono-security4.0-cil libmono-system-configuration4.0-cil libmono-system-core4.0-cil libmono-system-numerics4.0-cil libmono-system-security4.0-cil libmono-system-xml4.0-cil libmono-system4.0-cil libmonosgen-2.0-1 libmonosgen-2.0-dev libmount-dev libmp3lame-dev libmpg123-dev libnetcdf-c++4 libnetcdf13 libnl-3-200 libnl-route-3-200 libnspr4 libnss3 libogdi3.2 libogg-dev libopencore-amrnb-dev libopencv-calib3d-dev libopencv-calib3d3.2 libopencv-contrib-dev libopencv-contrib3.2 libopencv-core-dev libopencv-core3.2 libopencv-dev libopencv-features2d-dev libopencv-features2d3.2 libopencv-flann-dev libopencv-flann3.2 libopencv-highgui-dev libopencv-highgui3.2 libopencv-imgcodecs-dev libopencv-imgcodecs3.2 libopencv-imgproc-dev libopencv-imgproc3.2 libopencv-ml-dev libopencv-ml3.2 libopencv-objdetect-dev libopencv-objdetect3.2 libopencv-photo-dev libopencv-photo3.2 libopencv-shape-dev libopencv-shape3.2 libopencv-stitching-dev libopencv-stitching3.2 libopencv-superres-dev libopencv-superres3.2 libopencv-ts-dev libopencv-video-dev libopencv-video3.2 libopencv-videoio-dev libopencv-videoio3.2 libopencv-videostab-dev libopencv-videostab3.2 libopencv-viz-dev libopencv-viz3.2 libopencv3.2-java libopencv3.2-jni libopenexr-dev libopenexr23 libopenjp2-7-dev libopenmpi3 libopus-dev libopusfile-dev libopusfile0 libout123-0 libp11-kit-dev libpci-dev libpcre16-3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libpcsclite1 libperl-dev libpixman-1-dev libpmix2 libpng-dev libpoppler82 libportaudiocpp0 libpq-dev libproj13 libpsm-infinipath1 libpsm2-2 libpthread-stubs0-dev libpython-all-dev libpython-dev libpython2-dev libpython2.7 libpython2.7-dev libpython3-dev libpython3.7-dev libqhull7 librabbitmq-dev librabbitmq4 libraw1394-11 libraw1394-dev librdmacm1 librsvg2-dev libsasl2-dev libselinux1-dev libsensors4-dev libsepol1-dev libshout3-dev libsilk-dev libsm-dev libsndfile1-dev libsnmp-dev libsocket++1 libsofia-sip-ua-dev libsoundtouch-dev libspandsp3-dev libspatialite7 libspeex-dev libspeexdsp-dev libsqlite3-dev libssl-dev libsuperlu5 libswresample-dev libswscale-dev libsz2 libtasn1-6-dev libtbb-dev libtbb2 libtcl8.6 libtesseract4 libtheora-dev libtiff-dev libtiff5-dev libtiffxx5 libtk8.6 libtool-bin libtpl-dev libudev-dev libunbound8 liburiparser1 libusb-1.0-0 libv8-6.1 libv8-6.1-dev libvlc-dev libvlc5 libvlccore9 libvorbis-dev libvtk6.3 libwmf-dev libwmf0.2-7 libwrap0-dev libx11-dev libxau-dev libxcb-render0-dev libxcb-shm0-dev libxcb1-dev libxdmcp-dev libxerces-c3.2 libxext-dev libxft2 libxml2-dev libxpm4 libxrender-dev libxss1 libxt-dev libxt6 libyaml-dev mono-4.0-gac mono-gac mono-mcs mono-runtime mono-runtime-common mono-runtime-sgen nettle-dev ocl-icd-libopencl1 odbcinst odbcinst1debian2 openjdk-11-jdk openjdk-11-jdk-headless openjdk-11-jre openjdk-11-jre-headless pkg-config portaudio19-dev proj-data python-all python-all-dev python-dev python2-dev python2.7-dev python3-dev python3-distutils python3-lib2to3 python3.7-dev unixodbc-dev uuid-dev x11proto-core-dev x11proto-dev x11proto-xext-dev xorg-sgml-doctools xtrans-dev yasm zlib1g-dev 0 upgraded, 350 newly installed, 1 to remove and 0 not upgraded. Need to get 579 MB of archives. After this operation, 1,535 MB of additional disk space will be used. Do you want to continue? [Y/n] Incidentally, what the devil is FreeSwitch (a telephony system) doing installing stuff for OpenCV (a computer vision library)? ===== Building the package ===== When you first run **dpkg-buildpackage -b -uc -us** you'll probably find that it terminates with an error message: **checking for libks >= 1.8.2... configure: error: You need to either install libks or disable mod_verto in modules.conf** Hm, so much for **build-dep** installing everything you need to be able to build the package... Even more mysterious: **libks** is installed: **State: installed (1.7.0-75~buster-75), upgrade available (1.8.2-79~buster-79)** Huh? Why isn't it upgraded? Running **aptitude upgrade** now wants to upgrade 143 packages, of which 141 have names starting with **freeswitch**, one is **libfreeswitch1** and one is **libks**. Weird. After this, **dpkg-buildpackage -b -uc -us** spends a long time doing something which looks pretty much like you'd expect it to (assuming you've compiled things in the past). There are an interesting number of messages during the build process along the lines of:dpkg-shlibdeps: warning: package could avoid a useless dependency if debian/freeswitch-mod-lua/usr/lib/freeswitch/mod/mod_lua.so was not linked against libcrypto.so.1.1 (it uses none of the library's symbols) This possibly also indicates why a binary installation of FreeSwitch brings in such an astonishing number of additional packages... Finally, after 25 minutes, the build process finished with:dh_shlibdeps: Aborting due to earlier error make: *** [debian/rules:43: binary] Error 255 dpkg-buildpackage: error: fakeroot debian/rules binary subprocess returned exit status 2 Oh, very helpful. What __was__ the "earlier error" I wonder? A repeat run of **dpkg-buildpackage -b -uc -us** (which presumably has to do far less work, since everything buildable has already been built, and therefore might show the error message where you can see it, rather than several hundred lines up your scroll buffer) still takes 6 minutes to do whatever it wants to, and this time ends with the message:mv: cannot move './debian/libesl-perl/usr/lib/debug' to './debian/libesl-perl-dbg/usr/lib/debug': Directory not empty make[1]: *** [debian/rules:98: override_dh_strip] Error 1 make[1]: Leaving directory '/home/antony/freeswitch-1.10.9~release~21~a615e85afc~buster' make: *** [debian/rules:43: binary] Error 2 Huh. So, starting again from scratch (delete the source tree, download it again, re-build) but this time **tee**ing the output to a file results half an hour later in a 5 Mbyte text file, containing the significant line:dpkg-shlibdeps: error: no dependency information found for /usr/lib/x86_64-linux-gnu/libsystemd.so.0 (used by debian/freeswitch/usr/bin/fs_epmd) After installing **libsystemd0** (which __is__ available in Devuan), the package builds. Or, should I say, package**s**: it actually creates 347 of them! Still, at least it builds now. ===== Changing the version "number" ===== It took me quite some time to work out how to change the version number of the packages being built. The version I started from was downloaded as **freeswitch-1.10.9~release~21~a615e85afc~buster** and this was building packages with the version **1.10.9~release~21~a615e85afc~buster-1~buster+1** After looking for and in various files which might contain the string **buster+1** I eventually discovered that the version to build is simply taken from the first version listed in the **debian/changelog** file. This came as something of a surprise to me. The first version listed was:freeswitch (1.10.9~release~21~a615e85afc~buster-1~buster+1) stable; urgency=medium I added some lines to the top of the file, starting with:freeswitch (1.10.9~release~21~enhancedMWI) stable; urgency=medium and then build process then created packages with version **1.10.9~release~21~enhancedMWI**. However, this changes the version of the **packages** being built, but strangely does not change the version reported by FreeSwitch once it is running:# fs_cli -x "version" FreeSWITCH Version 1.10.9-release-21-a615e85afc~64bit (-release-21-a615e85afc 64bit) That is my next objective... ---- [[.:|Go up]]\\ Return to [[:|main index]].