Project

General

Profile

[MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros

Added by saen acro almost 8 years ago

Manual debugging step by step

There is a manual in WIKI with says there is a some needed packages dependency
https://tvheadend.org/projects/tvheadend/wiki/Building

Following this manual (from wiki) there is no chance to make any package

So here is how to solve this:
(Ubuntu 14.04LTS x86_64 used but possible to be used on newer, even "x86" version)

There is a lot of packages with need to install

First packages from wiki

sudo apt install build-essential git pkg-config libssl-dev bzip2 wget libavahi-client-dev zlib1g-dev libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavresample-dev

so let see is this correct by running

./configure

and result is

surprise nothing happens

so we need package gettext

sudo apt install gettext

again configure command

Again missing essential part

sudo apt install cmake

Again configure

And success, there is a chance to build .DEB, but is it so simple are we miss some?

  checking for cc libiconv ...                      fail
  checking for cc libdvben50221 ...                 fail
  checking for pkg liburiparser  ...                fail (detected <none>)

those maby not 100% needed but lets install it:


libiconv
there is some strange with this library in newer version it is build in in in other library

sudo apt install libiconv-hook-dev

/// this will not solve dependency error message, maby error in configure script


libdvben50221
this is DVB-CI support for hardware CAM module on some devices
solved by instaling dvb-apps

sudo apt install dvb-apps


liburiparser

sudo apt install liburiparser-dev

Let's see with configure

Some will ask about

  checking for cc nvEncodeAPI.h ...                 fail

this is NVENC (nVidia hardware accelerator for transcoding)
I don't use nVidia can't help, there is a separate topic

So let's continue with bulding of .DEB packages.

Next step is to use Autobuild.sh, with will make all automatically. or not.


Again something missing
sudo apt install debhelper libcurl4-gnutls-dev

Crossing fingers an run again Autobuild.sh

If everything is OK,
compilation of FFMPEG X264/5 OGG AAC and some other codecs will be compiled before TVHeadend and finally .DEB files.

If there is no critical errors at the end there is show something as this

dpkg-buildpackage: binary only upload (no source included)
doozer-versioned-artifact:/opt/tvheadend/../tvheadend_4.1-2398~gc38af4c_amd64.deb:deb:application/x-deb:tvheadend_4.1-2398~gc38af4c_amd64.deb
doozer-versioned-artifact:/opt/tvheadend/../tvheadend-dbg_4.1-2398~gc38af4c_amd64.deb:deb:application/x-deb:tvheadend-dbg_4.1-2398~gc38af4c_amd64.deb
doozer-versioned-artifact:/opt/tvheadend/../tvheadend_4.1-2398~gc38af4c_amd64.changes:changes:text/plain:tvheadend_4.1-2398~gc38af4c_amd64.changes


/opt/tvheadend/../

this mean that I'm using /opt/tvheadend/ (source from git)
and files are generated in ../ (upper level) in this case /opt
installation can be done by command
sudo  dpkg -i tvheadend_4.1-2398~gc38af4c_amd64.deb


=====
Edit new dependency libpcre /Perl 5 Compatible Regular Expression Library/
to install it add

Sudo apt instal libpcre2-dev

Warning library is not accessible to all OS versions then use libpcre3-dev


GPU VA hardware acceleration aka Transcoding

  checking for pkg libva >=0.38.0 ...               ok (detected 0.39.0)
  checking for pkg libva-x11 >=0.38.0 ...           ok (detected 0.39.0)
  checking for pkg libva-drm >=0.38.0 ...           ok (detected 0.39.0)

libva-dev
libva-drm1 (libva-drm2)
libva-x11-1 (libva-x11-1)
i965-va-driver-shaders
(Latest Debian probably Ubuntu 20.04 for Intel GPU)

to work hardware need to support VA-API version minimum 0.39.0
ex.

there is a situation when Intel drivers are very buggy but work also
ex:


Short version of all needed packages

sudo apt install build-essential git ccache libpcre2-dev pkg-config libssl-dev bzip2 \
wget libavahi-client-dev zlib1g-dev libavcodec-dev libavutil-dev libavformat-dev \
libswscale-dev libavresample-dev gettext cmake libiconv-hook-dev liburiparser-dev \
debhelper libcurl4-gnutls-dev python-minimal libdvbcsa-dev python-requests

If libpcre2-dev not found use libpcre3-dev

Optional packages for optional features ;)

sudo apt install dvb-apps libva-dev libva-drm1 libva-x11-1

If used Ubuntu 18.04+ libva-drm2 libva-x11-2

To enable SYSTEMD service --enable-libsystemd_daemon on Ubuntu 18.04 and upper, install libsystemd-dev

Keep in mind, this will install ~400+Mb packages.
Some packages will install other packages to satisfy its dependencies


How to clone Github repo to local folder

Usually regular command to clone repo is

git clone https://github.com/tvheadend/tvheadend.git

This will download latest source code (unstable) ready for compilation
but if need stable or other
use command
git clone -b release/4.2 https://github.com/tvheadend/tvheadend.git

command explained
git clone -b <branch> <remote_repo>

branch list can be seen at https://github.com/tvheadend/tvheadend


ARM OpenMax support

Use only on ARM boards

apt install libomxil-bellagio-dev

do not forget to add option
--enable-omx

Python

Autobuild script search for python but it was replaced by python3
solution:

--python=/usr/bin/python3


Automated build script

Currently just clone only latest repo source code and compile it

#!/bin/bash

BASE=$(dirname "$0")
(
  if [ -d "$BASE/tvheadend" ]; then
    cd "$BASE/tvheadend" 
    git pull
  else
    cd "$BASE" 
    git clone https://github.com/tvheadend/tvheadend.git tvheadend # --depth=5 (need version tag workaround else 0.0.0 version)
    cd "$BASE/tvheadend" 
  fi
  time AUTOBUILD_CONFIGURE_EXTRA="--disable-bintray_cache --enable-vaapi --enable-nvenc --disable-hdhomerun_client --disable-hdhomerun_static " ./Autobuild.sh -j$(nproc) # edit only betwin "quotation marks" 
) | tee "$BASE/build.log" 

Use command

./configure --help

to see possible options.


Replies (92)

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

I'm sorry but I need help again!
OK so I installed gperftools so that Google gperftools profiler error has now been solved.

But still tvheadend won't build because it cannot find mmal??

This is the build script I am using:

##!/bin/bash
#
# Name: build.sh
#
# Description: Build script for tvheadend on Ubuntu 20.04 32bit on Raspberry 4 with 4Gb or 8Gb
# Note: Only a couple of miniro changes as noted below to make this build on 64bit 
# Usage:
#    sudo -i
#    ln -s /usr /opt/vc
#    ln -s /usr/bin/python2 /usr/bin/python
#    cd /usr/local/src
#    ./build.sh

#
# Note: the "ln" about is because some raspberry userspace packages are compiled from source during build,
# the files are installed in their "proper" locations in /usr.
# But some third-party scripts expect e.g. /opt/vc/bin/vcgencmd;
# Thus the hack
#    ln -s /usr /opt/vc
#

#
# Also the following needs to be put into /boot/firmware/config.txt
#
#gpu_mem=128
#[pi4]
#dtoverlay=vc4-fkms-v3d,cma-128
#max_framebuffers=2

BASE=$(dirname "$0")

if [ ! -x /usr/bin/python ] ; then
   echo "/usr/bin/python must exist for this to compile" 
   exit 1
fi
if [ ! -d /opt/vc ] ; then
   echo "/opt/vc must exist and be linked to /usr for tvheadend to compile" 
   exit 1
fi

(
  if [ -d "$BASE/tvheadend" ]; then
    cd "$BASE/tvheadend" 
    make distclean
    git pull
  else
    apt-get update
    apt install -y \
        build-essential \
        cmake \
        pkg-config \
        git \
        ccache \
        bzip2 \
        wget \
        gettext \
        debhelper \
        python3 \
        python3-dev \
        python3-pip \
        python3-rpi.gpio \
        python2-minimal \
        python-rpi.gpio \
        dvb-apps \
        libraspberrypi-dev \
        libraspberrypi-bin \
        libraspberrypi0 \
        libssl-dev \
        libavahi-client-dev \
        zlib1g-dev \
        libavcodec-dev \
        libavcodec-extra \
        libavfilter-dev \
        libavfilter-extra \
        libavformat-dev \
        libavutil-dev \
        fdkacc \
        libfdk-aac-dev \
        libfdk-aac1 \
        libswscale-dev \
        libdvbcsa-dev \
        libavresample-dev \
        libiconv-hook-dev \
        libkqueue-dev \
        liburiparser-dev \
        libcurl4-gnutls-dev \
        libpcre2-dev \
        libpcre3-dev \
        libva-dev \
        libva-drm2 \
        libva-x11-2 \
        libsystemd-dev \
        libomxil-bellagio-dev \
        libprotobuf-dev \
        libtcmalloc-minimal4 \
        libgoogle-perftools-dev

# The following my not existing Ubuntu 20.04 64bit (arm64) remove from above as required
#        libkqueue-dev
#        fdkacc
#        libfdk-aac-dev
#        libfdk-aac1

# Cant' find the following for armhf or arm64
#i965-va-driver-shaders

#
# Install rpi-userland libraries / binaries
#
    snap install rpi-userland --edge
    cd "$BASE" 
    git clone -v https://github.com/tvheadend/tvheadend.git tvheadend # --depth=5 (need version tag workaround else 0.0.0 version)
    #git clone -b -v release/4.2 https://github.com/tvheadend/tvheadend.git
    cd "$BASE/tvheadend" 
  fi
  echo "AUTOBUILD_CONFIGURE_EXTRA=\"\${AUTOBUILD_CONFIGURE_EXTRA:-} --arch=armhf\"" > Autobuild/focal-armhf.sh
  echo "DEBDIST=focal" >> Autobuild/focal-armhf.sh
  echo "source Autobuild/debian.sh" >> Autobuild/focal-armhf.sh

  echo "AUTOBUILD_CONFIGURE_EXTRA=\"\${AUTOBUILD_CONFIGURE_EXTRA:-} --arch=arm64\"" > Autobuild/focal-arm64.sh
  echo "DEBDIST=focal" >> Autobuild/focal-arm64.sh
  echo "source Autobuild/debian.sh" >> Autobuild/focal-arm64.sh

  time (
      AUTOBUILD_CONFIGURE_EXTRA="" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --disable-android --enable-pie --enable-avahi --enable-libsystemd_daemon --disable-bintray_cache --enable-libopus --enable-libtheora --enable-libvorbis --enable-libfdkaac --enable-omx" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --disable-libvpx_static --disable-libvpx --disable-libav" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --disable-libtheora_static --disable-libtheora --disable-vaapi --enable-gperftools" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --enable-gtimer_check --enable-slow_memoryinfo --enable-cclang_threadsan --enable-ccdebug" 
    export AUTOBUILD_CONFIGURE_EXTRA
    ./Autobuild.sh -j$(nproc) -t focal-arm64
  )
) 2>&1 | tee "$BASE/build.log" 

These are the features and options that appear in the "build log":

Checking support/features
  checking for cc execinfo.h ...                    ok
  checking for cc -mmmx ...                         fail
  checking for cc -msse2 ...                        fail
  checking for cc -Wunused-result ...               ok
  checking for cc -fstack-protector ...             ok
  checking for cc -fstack-protector-strong ...      ok
  checking for cc -fstack-check ...                 ok
  checking for cc -fPIE ...                         ok
  checking for cc strlcat ...                       fail
  checking for cc strlcpy ...                       fail
  checking for cc fdatasync ...                     ok
  checking for cc getloadavg ...                    ok
  checking for cc atomic32 ...                      ok
  checking for cc atomic64 ...                      ok
  checking for cc atomic_time_t ...                 ok
  checking for cc atomic_ptr ...                    ok
  checking for cc bitops64 ...                      ok
  checking for cc lockowner ...                     ok
  checking for cc qsort_r ...                       ok
  checking for cc stime ...                         fail
  checking for cc gmtoff ...                        ok
  checking for cc recvmmsg ...                      ok
  checking for cc sendmmsg ...                      ok
  checking for cc libiconv ...                      fail
    ^ using build-in glibc iconv routines
  checking for cc ifnames ...                       ok
  checking for cc cclang_threadsan ...              fail
  checking for py module gzip ...                   ok
  checking for pkg-config ...                       ok
  checking for xgettext ...                         ok
  checking for msgmerge ...                         ok
  checking for gzip ...                             ok
  checking for bzip2 ...                            ok
  checking for pkg openssl  ...                     ok (detected 3.0.2)
  checking for cc linux/dvb/version.h ...           ok
  checking for pkg zlib  ...                        ok (detected 1.2.11)
  checking for pkg libpcre2-8  ...                  ok (detected 10.39)
  checking for pkg liburiparser  ...                ok (detected 0.9.6)
  checking for pkg avahi-client  ...                ok (detected 0.8)
  checking for cmake ...                            ok
  checking for cc -lstdc++ ...                      ok
  checking for cc bcm_host.h ...                    ok
  checking for cc OMX_Core.h ...                    ok
  checking for cc sys/inotify.h ...                 ok
  checking for cc inotify_init1 ...                 ok
  checking for cc dvbcsa/dvbcsa.h ...               ok
  checking for cc -ldvbcsa ...                      ok
  fetching dvb-scan files ...                       ok
  checking for cc epoll_create1 ...                 ok
  checking for pkg dbus-1  ...                      ok (detected 1.12.20)
  checking for pkg libsystemd-daemon  ...           fail (detected <none>)
  checking for pkg libsystemd  ...                  ok (detected 249)

Compiler:
  Using C compiler:                        cc
  Using C flags:                           -I/opt/vc/include/IL 
  Using LD flags:                           -ldvbcsa
  Build for arch:                          arm64

Binaries:
  Using PYTHON:                            python
  Using GZIP:                              gzip
  Using BZIP2:                             bzip2

Options:
  pie                                      yes
  ccdebug                                  yes
  cardclient                               yes
  cwc                                      yes
  cccam                                    yes
  capmt                                    yes
  constcw                                  yes
  linuxdvb                                 yes
  satip_server                             yes
  satip_client                             yes
  hdhomerun_client                         yes
  hdhomerun_static                         yes
  iptv                                     yes
  tsfile                                   yes
  dvbscan                                  yes
  timeshift                                yes
  trace                                    yes
  avahi                                    yes
  zlib                                     yes
  libav                                    yes
  ffmpeg_static                            yes
  libx264                                  yes
  libx264_static                           yes
  libx265                                  yes
  libx265_static                           yes
  libvpx                                   no
  libvpx_static                            no
  libtheora                                no
  libtheora_static                         no
  libvorbis                                yes
  libvorbis_static                         yes
  libfdkaac                                yes
  libfdkaac_static                         yes
  libopus                                  yes
  libopus_static                           yes
  nvenc                                    no
  vaapi                                    no
  mmal                                     yes
  omx                                      yes
  inotify                                  yes
  epoll                                    yes
  pcre                                     no
  pcre2                                    yes
  uriparser                                yes
  ccache                                   no
  tvhcsa                                   yes
  bundle                                   no
  pngquant                                 no
  kqueue                                   no
  dbus_1                                   yes
  android                                  no
  gtimer_check                             yes
  slow_memoryinfo                          yes
  libsystemd_daemon                        yes
  pcloud_cache                             yes
  ddci                                     yes
  cclang_threadsan                         yes
  gperftools                               yes
  execinfo                                 yes
  W_unused_result                          yes
  f_stack_protector                        yes
  f_stack_protector_strong                 yes
  f_stack_check                            yes
  f_PIE                                    yes
  fdatasync                                yes
  getloadavg                               yes
  atomic32                                 yes
  atomic64                                 yes
  atomic_time_t                            yes
  atomic_ptr                               yes
  bitops64                                 yes
  lockowner                                yes
  qsort_r                                  yes
  gmtoff                                   yes
  recvmmsg                                 yes
  sendmmsg                                 yes
  ifnames                                  yes
  py_gzip                                  yes
  bin_pkg_config                           yes
  bin_xgettext                             yes
  bin_msgmerge                             yes
  bin_gzip                                 yes
  bin_bzip2                                yes
  ssl                                      yes
  linuxdvbapi                              yes
  linuxdvb_ca                              yes
  upnp                                     yes
  bin_cmake                                yes
  stdcpp                                   yes
  libogg_static                            yes
  omx_rpi                                  yes
  inotify_h                                yes
  inotify_init1                            yes
  dvbcsa                                   yes
  epoll_create1                            yes
  mpegts                                   yes
  mpegts_dvb                               yes

Packages:
  openssl                                  3.0.2
  zlib                                     1.2.11
  libpcre2-8                               10.39
  liburiparser                             0.9.6
  avahi-client                             0.8
  dbus-1                                   1.12.20
  libsystemd                               249

Installation paths:
  Prefix:                                  /usr
  Binaries:                                ${prefix}/bin
  Libraries:                               ${prefix}/lib
  Data files:                              ${prefix}/share
  Man pages:                               /usr/share/man

Final Binary:
  /usr/local/src/tvheadend/build.linux/tvheadend

Tvheadend Data Directory:
  /usr/share/tvheadend

These are the last lines I get before the build fails, it keeps failing on ERROR: mmal not found...

Install the project...
-- Install configuration: "Release" 
-- Installing: /usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/lib/libx265.a
-- Installing: /usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/include/x265.h
-- Installing: /usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/include/x265_config.h
-- Installing: /usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/lib/pkgconfig/x265.pc
-- Installing: /usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/bin/x265
make[4]: Leaving directory '/usr/local/src/tvheadend/build.linux/ffmpeg/x265_3.5/build/linux'
mv /usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/lib/pkgconfig/x265.pc /usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/lib/pkgconfig/x265.pc.old
sed -e 's,-ldl,-ldl -lpthread,g' \
    < /usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/lib/pkgconfig/x265.pc.old \
    > /usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/lib/pkgconfig/x265.pc
cd /usr/local/src/tvheadend/build.linux/ffmpeg/ffmpeg-4.4.1 && FFMPEG_PREFIX=/usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg PKG_CONFIG=/usr/local/src/tvheadend/support/pkg-config.ffmpeg ./configure --prefix=/ffmpeg --enable-static --disable-shared \
    --disable-all \
    --enable-gpl \
    --enable-nonfree \
    --extra-cflags="-I/usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/include -fPIE" \
    --extra-libs="-L/usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/lib -ldl" \
    --pkg-config="/usr/local/src/tvheadend/support/pkg-config.ffmpeg" \
    --enable-openssl \
    --enable-avutil --enable-avcodec --enable-avformat --enable-swscale --enable-avresample --enable-swresample --enable-avfilter \
    --enable-libx264 --enable-libx265 --enable-libvorbis --enable-libfdk-aac --enable-libopus --enable-mmal --enable-omx --enable-omx_rpi --enable-nonfree \
    --enable-protocol=file --enable-protocol=http --enable-protocol=https --enable-protocol=hls --enable-protocol=mmsh --enable-protocol=mmst --enable-protocol=rtmp --enable-protocol=rtmpe --enable-protocol=rtmps --enable-protocol=rtmpt --enable-protocol=rtmpte --enable-protocol=rtmpts --enable-protocol=ffrtmpcrypt --enable-protocol=ffrtmphttp --enable-protocol=rtp --enable-protocol=srtp --enable-protocol=tcp --enable-protocol=udp --enable-protocol=udplite --enable-protocol=unix --enable-protocol=crypto \
    --enable-decoder=mpeg2video --enable-decoder=mp2 --enable-decoder=aac --enable-decoder=vorbis --enable-decoder=ac3 --enable-decoder=eac3 --enable-decoder=aac_latm --enable-decoder=opus --enable-decoder=h264 --enable-decoder=hevc --enable-decoder=theora --enable-decoder=flac --enable-decoder=libvorbis --enable-decoder=h264_mmal \
    --enable-encoder=mpeg2video --enable-encoder=mp2 --enable-encoder=aac --enable-encoder=vorbis --enable-encoder=flac --enable-encoder=libx264 --enable-encoder=libx265 --enable-encoder=libvorbis --enable-encoder=libfdk_aac --enable-encoder=libopus --enable-encoder=h264_omx \
    --enable-demuxer=mpegts --enable-demuxer=matroska --enable-demuxer=hls --enable-demuxer=flv --enable-demuxer=live_flv \
    --enable-muxer=mpegts --enable-muxer=matroska --enable-muxer=mp4 --enable-muxer=ogg \
    --enable-bsf=h264_mp4toannexb --enable-bsf=hevc_mp4toannexb \
    --enable-filter=yadif --enable-filter=format --enable-filter=hwupload --enable-filter=hwdownload --enable-filter=scale --enable-filter=null --enable-filter=aresample --enable-filter=anull \
    --enable-hwaccel=h264_mmal --enable-hwaccel=mpeg2_mmal \
                --disable-programs \
                --disable-doc \
                --disable-htmlpages \
                --disable-manpages \
                --disable-podpages \
                --disable-txtpages
ERROR: mmal not found

If you think configure made a mistake, make sure you are using the latest
version from Git.  If the latest version fails, report the problem to the
[email protected] mailing list or IRC #ffmpeg on irc.libera.chat.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.
make[3]: *** [Makefile.ffmpeg:693: /usr/local/src/tvheadend/build.linux/ffmpeg/ffmpeg-4.4.1/.tvh_build] Error 1
make[3]: Leaving directory '/usr/local/src/tvheadend'
make[2]: *** [Makefile:854: /usr/local/src/tvheadend/build.linux/ffmpeg/build/ffmpeg/lib/libavcodec.a] Error 2
make[2]: Leaving directory '/usr/local/src/tvheadend'
make[1]: *** [debian/rules:15: override_dh_auto_build] Error 2
make[1]: Leaving directory '/usr/local/src/tvheadend'
make: *** [debian/rules:6: build] Error 2
dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2

real    9m11.704s
user    18m58.740s
sys    6m13.291s

I'm not sure why it is looking for mmal?

I followed through on my investigations about rpi-userland and managed to install it on my Ubuntu Pi 4 arm64 using https://gist.github.com/satmandu/c462ab301cbe09bd6e7cf4db7f626727

I was hoping this would allow the build process to "see" that I have mmal because... well I do:

root@ubuntu:/usr/local/src# dpkg -L rpiuserland | grep mmal
/opt/vc/lib/pkgconfig/mmal.pc
/opt/vc/src/hello_pi/hello_mmal_encode
/opt/vc/src/hello_pi/hello_mmal_encode/Makefile
/opt/vc/src/hello_pi/hello_mmal_encode/mmal_encode.c
root@ubuntu:/usr/local/src#

Except unlike the bcm stuff I don't seem to have the mmal library files??
Maybe that's why I am still getting that MMAL not found error?

ubuntu@ubuntu:~$ dpkg -L rpiuserland | grep bcm 
/opt/vc/include/bcm_host.h 
/opt/vc/lib/libbcm_host.so 
/opt/vc/lib/pkgconfig/bcm_host.pc

ubuntu@ubuntu:~$ ls -l /opt/vc/lib/ | grep mmal 
ubuntu@ubuntu:~$ 

Should these files also be in /opt/vc/lib/:
libmmal_components.so
libmmal_core.so
libmmal.so
libmmal_util.so
libmmal_vc_client.so

How do I solve this ---> ERROR: mmal not found

Any help very much appreciated !

Flex

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by saen acro about 2 years ago

mmal is not supported on 64bit userland systems
https://github.com/raspberrypi/userland/issues/688

Maby you need to skip it until Raspberry team solve it.


attach just build.log
there is not SPOOL/Collapse option in Redmine

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

@saen acro

Maybe you are correct. If I add --disable-ffmpeg_static then it DOES build.

I have attached the build log.

These are the build options I use and everything else as before. I left out any mention of mmal and have --enable-omx

time (
    AUTOBUILD_CONFIGURE_EXTRA="" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --disable-android --enable-pie --enable-avahi --enable-libsystemd_daemon --disable-bintray_cache" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --enable-libopus --enable-libvorbis --enable-libfdkaac --enable-omx" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --disable-libvpx_static --disable-libvpx --disable-libav" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --disable-libtheora_static --disable-libtheora --disable-vaapi --enable-gperftools" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --enable-gtimer_check --enable-slow_memoryinfo --enable-cclang_threadsan --enable-ccdebug" 
    export AUTOBUILD_CONFIGURE_EXTRA
    ./Autobuild.sh -j$(nproc) -t focal-arm64
  )

But with these settings I still get:

ERROR: mmal not found

I was hoping there might be a workaround but maybe it's as simple as MMAL is just not currently supported in 64-bit Pi systems as you say.

My current tvheadend build is actually from Michael Marley PPA:
https://launchpad.net/~mamarley/+archive/ubuntu/tvheadend-git

I asked him and he said the build log for his ARMv8 builds shows that OMX acceleration is enabled but MMAL is not.

So then how do I build tvheadend with OMX support and omit the MMAL? I'm not sure now how to turn OFF MMAL.

I tried
--disable-mmal

Except I don't think --disable-mmal is actually a config option at all.

If I try...
--disable-mmal
OR
just do not include any mention of mmal in the config options I still get the build error:

ERROR: mmal not found

How do I tell the build process not to use MMAL but to use OMX?

If I add --disable-ffmpeg_static will I still get OMX support? Is there a way to test that you have OMX support other than looking at the build.log ?

Thanks so much for your support on here.

Flex

build.log (217 KB) build.log

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by saen acro about 2 years ago

why use so big peace of text

time (
    AUTOBUILD_CONFIGURE_EXTRA="" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --disable-android --enable-pie --enable-avahi --enable-libsystemd_daemon --disable-bintray_cache" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --enable-libopus --enable-libvorbis --enable-libfdkaac --enable-omx" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --disable-libvpx_static --disable-libvpx --disable-libav" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --disable-libtheora_static --disable-libtheora --disable-vaapi --enable-gperftools" 
    AUTOBUILD_CONFIGURE_EXTRA="$AUTOBUILD_CONFIGURE_EXTRA --enable-gtimer_check --enable-slow_memoryinfo --enable-cclang_threadsan --enable-ccdebug" 
    export AUTOBUILD_CONFIGURE_EXTRA
    ./Autobuild.sh -j$(nproc) -t focal-arm64
  )

just use

time (
    AUTOBUILD_CONFIGURE_EXTRA="--disable-android --enable-pie --enable-avahi --enable-libsystemd_daemon --disable-bintray_cache \
--enable-libopus --enable-libvorbis --enable-libfdkaac --enable-omx \ 
--disable-libvpx_static --disable-libvpx --disable-libav \
--disable-libtheora_static --disable-libtheora --disable-vaapi --enable-gperftools \
--enable-gtimer_check --enable-slow_memoryinfo --enable-cclang_threadsan --enable-ccdebug" \
./Autobuild.sh -j$(nproc) -t focal-arm64
  )

where "\" is new line of long text line

"export" without "unset" is not good idea

-t focal-arm64

This is useless if used in device directly, this is for cross-compilation.

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

Cheers.

OK I figured out that to enable OpenMAX (omx) and disable MMAL when building on my Pi 4 running Ubuntu I do this in the config options:

Leave this out...
--enable-mmal (there is no --disable-mmal option)

Add in...
--enable-omx --disable-ffmpeg_static

As saen acro said before you also need to add in...
--disable-libav --disable-vaapi

Question, with my Michael Marley tvheadend installation running on my Pi 4 all of these encoders are available:

cat /var/log/syslog | grep encoder
Oct  8 11:23:02 ubuntu tvheadend[285687]: transcode: '&TVHMPEG2VIDEOEncoder' encoder helper registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: transcode: '&TVHH264Encoder' encoder helper registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: transcode: '&TVHHEVCEncoder' encoder helper registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: transcode: '&TVHAACEncoder' encoder helper registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'mpeg2video' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'mp2' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'aac' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'vorbis' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'flac' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'libx264' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'libx265' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'libvpx' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'libvpx-vp9' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'libtheora' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'libvorbis' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'libfdk_aac' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'libopus' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'h264_vaapi' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'hevc_vaapi' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'vp8_vaapi' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'vp9_vaapi' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'h264_nvenc' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'hevc_nvenc' encoder registered
Oct  8 11:23:02 ubuntu tvheadend[285687]: codec: 'h264_omx' encoder registered

But when I build tvheadend on the Pi 4 myself I have to disable vaapi, libtheora or it won't build?

So how come those encoders above register on my Pi 4 in the Michael Marley build? Maybe because that tvheadend was built/cross compiled on an intel CPU?
Will they work on my Pi 4? For instance 'h264_vaapi' or 'libtheora'?

Cheers,

Flex

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by saen acro about 2 years ago

Codecs are mostly part of FFMPEG library

https://tvheadend.org/issues/6177
https://github.com/tvheadend/tvheadend/pull/1460

you can read mmarley log of his build in Launchpad
latest in moment build for ARM64

./configure --build=aarch64-linux-gnu --prefix=/usr --includedir=\${prefix}/include --mandir=\${prefix}/share/man \
--infodir=\${prefix}/share/info --sysconfdir=/etc --localstatedir=/var --disable-silent-rules --libdir=\${prefix}/lib/aarch64-linux-gnu \
--libexecdir=\${prefix}/lib/aarch64-linux-gnu --disable-maintainer-mode --disable-dependency-tracking --prefix=/usr --enable-hdhomerun_client \
--disable-hdhomerun_static --disable-dvbscan --enable-libav --disable-ffmpeg_static --enable-libx264 --disable-libx264_static --enable-libx265 \
--disable-libx265_static --enable-libvpx --disable-libvpx_static --enable-libtheora --disable-libtheora_static --enable-libvorbis \
--disable-libvorbis_static --enable-libfdkaac --disable-libfdkaac_static --enable-libopus --disable-libopus_static --enable-vaapi --enable-nvenc \
--enable-omx --enable-dvbcsa --enable-dvben50221 --enable-libsystemd_daemon --enable-pcre2 --enable-pngquant --enable-ddci --python=/usr/bin/python3

in "About > toggle details" are build environment also.

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

@saen acro
Nice one... that's just what I need because I want to know how to build tvheadend with the same setup MMarley uses.

You mentioned in a previous post that when building tvh on a Pi it is not necessary to do:
ln -s /usr /opt/vc
or
ln -s /usr/bin/python2 /usr/bin/python

In the case of python you can put --python=/usr/bin/python3 in the build config.
How would I put...

ln -s /usr /opt/vc

in the build config?

Something like:
--includedir=/opt/vc
??

Flex

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by saen acro about 2 years ago

Reading this:
https://forums.raspberrypi.com/viewtopic.php?t=107185
I guess you need to read value of export command:

export

and add to it, not in compilation parameters.
as suggested in this forum
http://dev1galaxy.org/viewtopic.php?id=2967
export LD_LIBRARY_PATH=/opt/vc/lib

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

@saen acro
Awesome... I made that change now and it works!

I'm studying MMarleys build log https://launchpadlibrarian.net/627632817/buildlog_ubuntu-jammy-arm64.tvheadend_4.3.0~pre+202210071820-0~built202210071932~git81838dbb6~ubuntu22.04.1_BUILDING.txt.gz

I'm trying to understand why he is able to build with libav support but I cannot? I sent Michael an email I'll let you know what he says. Unless you know?!

His build config has --enable-libav --disable-ffmpeg_static but my build fails unless I do --disable-libav --disable-ffmpeg_static

I installed libva-dev and tried with --enable-libav --disable-ffmpeg_static. I get a lot of errors: "Package libavresample was not found in the pkg-config search path." then it fails but I actually don't think those errors are the reason why it fails but maybe it is?

Maybe the version of libva-dev on MMarleys build system requires libswresample-dev but on Ubuntu Pi 4 libva-dev requires libavresample-dev which is now unavailable to me.

ubuntu@ubuntu:~$ sudo apt install libavresample    
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package libavresample
ubuntu@ubuntu:~$ sudo apt install libavresample-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package libavresample-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'libavresample-dev' has no installation candidate

I'm sure this is not very important but I'm in too deep now to let it go!

Flex

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by saen acro about 2 years ago

His build use Launchpad environment with is Ubuntu 20.04

There is a list of all packages installed (468) compare it to yours

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

As far as I can see I am using the same package list.

I am getting a bunch of libavresample errors but so does MMarleys build. They don't cause his build to fail so when mine fails is probably due to something else:

At the very end I get:

No package 'libavresample' found
Package libavresample was not found in the pkg-config search path.
Perhaps you should add the directory containing `libavresample.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libavresample' found
/usr/bin/ld: /usr/local/src/tvheadend/build.linux/src/transcoding/codec/codecs/libs/libvpx.o: undefined reference to symbol 'vpx_codec_control_'
/usr/bin/ld: /lib/aarch64-linux-gnu/libvpx.so.7: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:713: /usr/local/src/tvheadend/build.linux/tvheadend] Error 1
make[2]: Leaving directory '/usr/local/src/tvheadend'
make[1]: *** [debian/rules:15: override_dh_auto_build] Error 2
make[1]: Leaving directory '/usr/local/src/tvheadend'
make: *** [debian/rules:6: build] Error 2
dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2

real    0m29.349s
user    0m18.436s
sys    0m23.722s

I googled about:

libvpx.so.7: error adding symbols: DSO missing from command line

See page https://github.com/audacity/audacity/issues/3173 talks about differences in the linker you use and compiler flags... so maybe my compiler/linker is different from teh MMarley set up.

MMarley set up:

Compiler:
  Using C compiler:                        cc
  Using C flags:                           -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong -Wformat -Werror=format-security
  Using LD flags:                          -Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now -lhdhomerun -ldvbcsa
  Build for arch:                          aarch64

My set up:

Compiler:
  Using C compiler:                        ccache cc
  Using LD flags:                           -lhdhomerun -ldvbcsa
  Build for arch:                          aarch64

I tried add those flags like this:

AUTOBUILD_CONFIGURE_EXTRA="--enable-hdhomerun_client --disable-hdhomerun_static --enable-dvbscan --enable-dvbcsa --enable-dvben50221 \
        --disable-android --enable-libav --disable-ffmpeg_static --enable-libx264 --disable-libx264_static --enable-libx265 --disable-libx265_static \
        --enable-libvpx --disable-libvpx_static --enable-libtheora --disable-libtheora_static --enable-avahi --enable-pie --enable-nvenc --enable-ccache \
        --enable-gperftools --enable-gtimer_check --disable-bintray_cache --enable-slow_memoryinfo --enable-cclang_threadsan --enable-ccdebug --enable-ddci \
        --enable-libvorbis --disable-libvorbis_static --enable-libfdkaac --disable-libfdkaac_static --enable-libopus --disable-libopus_static \
        --enable-vaapi --enable-nvenc --enable-omx --enable-libsystemd_daemon --enable-pcre2 --enable-pngquant --python=/usr/bin/python3 \
        --cflags=-g -O2 -flto=auto -ffat-lto-objects -flto=auto -ffat-lto-objects -fstack-protector-strong \
        -Wformat -Werror=format-security \
        --ldflags=-Wl,-Bsymbolic-functions -flto=auto -ffat-lto-objects -flto=auto -Wl,-z,relro -Wl,-z,now -lhdhomerun -ldvbcsa" \
        ./Autobuild.sh -j$(nproc)

But my build log still only has these compiler settings..


Compiler:
  Using C compiler:                        ccache cc
  Using C flags:                           -g
  Using LD flags:                          -Wl,-Bsymbolic-functions -lhdhomerun -ldvbcsa
  Build for arch:                          aarch64


And the build still fails as above.

That's annoying.

Flex

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

Yes I have.

ubuntu@ubuntu:~$ sudo apt install libavresample-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package libavresample-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'libavresample-dev' has no installation candidate
ubuntu@ubuntu:~$ sudo apt install libavresample    
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package libavresample

I could be wrong but I don't think that's the reason for the build fail. I think the dependency on libavresample was removed from tvheadend. https://github.com/rpmfusion/tvheadend/blob/master/tvheadend-4.3-libavresample.patch
Although clearly something else is looking for libavresample (maybe the libav package?) I hardly know what I'm talking about!

MMarleys successful build output also has about 100 of these errors:

No package 'libavresample' found
Package libavresample was not found in the pkg-config search path.
Perhaps you should add the directory containing `libavresample.pc'
to the PKG_CONFIG_PATH environment variable

You say MMarley has 486 installed packages. I wasn't able to find that number or anyway how do I get that list of 486?

When I look in:
https://launchpadlibrarian.net/627632817/buildlog_ubuntu-jammy-arm64.tvheadend_4.3.0~pre+202210071820-0~built202210071932~git81838dbb6~ubuntu22.04.1_BUILDING.txt.gz

I went to the section: "Install main build dependencies (apt-based resolver)"

The following NEW packages will be installed:
  autoconf automake autopoint autotools-dev bsdextrautils debhelper debugedit
  dh-autoreconf dh-strip-nondeterminism dwz file fontconfig fontconfig-config
  fonts-dejavu-core gettext gettext-base git git-man groff-base
  intltool-debian libaom3 libarchive-zip-perl libasound2 libasound2-data
  libass9 libasyncns0 libavahi-client-dev libavahi-client3
  libavahi-common-data libavahi-common-dev libavahi-common3 libavcodec-dev
  libavcodec58 libavfilter-dev libavfilter7 libavformat-dev libavformat58
  libavutil-dev libavutil56 libblas3 libbluray2 libbrotli1 libbs2b0 libbsd0
  libcairo-gobject2 libcairo2 libchromaprint1 libcodec2-1.0 libcurl3-gnutls
  libdatrie1 libdav1d5 libdbus-1-3 libdbus-1-dev libdebhelper-perl libdeflate0
  libdrm-amdgpu1 libdrm-common libdrm-nouveau2 libdrm-radeon1 libdrm2
  libdvbcsa-dev libdvbcsa1 libdw1 libedit2 libelf1 liberror-perl libexpat1
  libfdk-aac-dev libfdk-aac2 libffi-dev libfile-stripnondeterminism-perl
  libflac8 libflite1 libfontconfig1 libfreetype6 libfribidi0
  libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-common libgfortran5 libgl1
  libgl1-mesa-dri libglapi-mesa libglib2.0-0 libglvnd0 libglx-mesa0 libglx0
  libgme0 libgraphite2-3 libgsm1 libharfbuzz0b libhdhomerun-dev libhdhomerun4
  libicu70 libimagequant0 libjbig0 libjpeg-turbo8 libjpeg8 liblapack3
  libldap-2.5-0 liblilv-0-0 libllvm13 libmagic-mgc libmagic1 libmd0
  libmp3lame0 libmpdec3 libmpg123-0 libmysofa1 libnghttp2-14 libnorm1 libnuma1
  libogg0 libopenjp2-7 libopenmpt0 libopus-dev libopus0 libpango-1.0-0
  libpangocairo-1.0-0 libpangoft2-1.0-0 libpcre2-16-0 libpcre2-32-0
  libpcre2-dev libpcre2-posix3 libpgm-5.3-0 libpipeline1 libpixman-1-0
  libpocketsphinx3 libpostproc-dev libpostproc55 libpsl5 libpulse0
  libpython3-stdlib libpython3.10-minimal libpython3.10-stdlib librabbitmq4
  librsvg2-2 librtmp1 librubberband2 libsamplerate0 libsasl2-2
  libsasl2-modules-db libsensors-config libsensors5 libserd-0-0
  libset-scalar-perl libshine3 libsigsegv2 libsnappy1v5 libsndfile1
  libsodium23 libsord-0-0 libsoxr0 libspeex1 libsphinxbase3 libsratom-0-0
  libsrt1.4-gnutls libssh-4 libssh-gcrypt-4 libssl-dev libsub-override-perl
  libswresample-dev libswresample3 libswscale-dev libswscale5 libsystemd-dev
  libthai-data libthai0 libtheora0 libtiff5 libtool libtwolame0 libuchardet0
  libudfread0 liburiparser-dev liburiparser1 libva-dev libva-drm2 libva-glx2
  libva-wayland2 libva-x11-2 libva2 libvdpau1 libvidstab1.1 libvorbis0a
  libvorbisenc2 libvorbisfile3 libvpx-dev libvpx7 libvulkan1 libwayland-bin
  libwayland-client0 libwayland-cursor0 libwayland-dev libwayland-egl1
  libwayland-server0 libwebp7 libwebpmux3 libx11-6 libx11-data libx11-xcb1
  libx264-163 libx264-dev libx265-199 libx265-dev libxau6 libxcb-dri2-0
  libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-render0 libxcb-shm0
  libxcb-sync1 libxcb-xfixes0 libxcb1 libxdmcp6 libxext6 libxfixes3 libxml2
  libxrender1 libxshmfence1 libxvidcore4 libxxf86vm1 libzimg2 libzmq5
  libzvbi-common libzvbi0 m4 man-db markdown media-types ocl-icd-libopencl1
  pkg-config pngquant po-debconf python3 python3-all python3-certifi
  python3-chardet python3-distutils python3-idna python3-lib2to3
  python3-minimal python3-pkg-resources python3-requests python3-six
  python3-urllib3 python3.10 python3.10-minimal
  sbuild-build-depends-main-dummy shared-mime-info ucf wget zlib1g-dev

I double checked and I had them all, except for sbuild-build-depends-main-dummy which I was not able to install but I'm guessing it is not really a package?
But that list is not 489 packages. Where did you get 489 from?

Michael told me that another different thing about his PPA build process is his build recipe takes the regular TVHeadend git repository and merges in the "master-debian-lp" branch. I don't know what that means but maybe some of his packages are different from mine?

Flex

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

libavresample-dev is not in apt repository in Ubuntu 22.04 but I tried installing it just now from your link, thank you, https://ubuntu.pkgs.org/20.04/ubuntu-updates-universe-arm64/libavresample-dev_4.2.7-0ubuntu0.1_arm64.deb.html

This idea won't work because I am using Ubuntu 22.04 on which libavresample-dev has been replaced by libswresample.
When I tried to install libavresample-dev from the .deb file there were lots of unmet dependencies because other packages it relies on need to be older versions, e.g: it needed libavutil-dev 7.4.2.7 but I have 7.4.4.2 but that was just one package, lots of other packages are affected! For a while I tried uninstalling some of them and replacing them also with older versions but that will just end up breaking my whole system.

Maybe I could downgrade my OS to Ubuntu 20.04 and then get access to all these older packages from apt. But as I mentioned I don't think that installing libavresample-dev is a show stopper because MMarley doesn't have it either in his Ubuntu 22.04 that successfully builds tvheadend.... also with libav support.

In order to build TVH with libav support I think I could be missing some other package maybe from that list of 489 packages you mentioned in a previous post. How did you get that list of 489 packages?

Cheers,

Flex

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by saen acro about 2 years ago

Read first lines of his log

https://launchpad.net/~mamarley/+archive/ubuntu/tvheadend-git/+build/24532956
RUN: /usr/share/launchpad-buildd/bin/builder-prep 
Kernel version: Linux bos02-arm64-031 5.4.0-126-generic #142-Ubuntu SMP Fri Aug 26 12:15:55 UTC 2022 aarch64
Buildd toolchain package versions: launchpad-buildd_222~591~ubuntu20.04.1 python3-lpbuildd_222~591~ubuntu20.04.1 sbuild_0.79.0-1ubuntu1 git-build-recipe_0.3.6 git_1:2.25.1-1ubuntu3.5 dpkg-dev_1.19.7ubuntu3.2 python3-debian_0.1.36ubuntu1.
Syncing the system clock with the buildd NTP service...
 7 Oct 19:35:23 ntpdate[1807]: adjust time server 10.211.37.1 offset -0.000011 sec
RUN: /usr/share/launchpad-buildd/bin/in-target unpack-chroot --backend=chroot --series=jammy --arch=arm64 PACKAGEBUILD-24532956 --image-type chroot /home/buildd/filecache-default/d7d0133902b8cc1df688a841d4b96e994eeac2e0
Creating target for build PACKAGEBUILD-24532956
RUN: /usr/share/launchpad-buildd/bin/in-target mount-chroot --backend=chroot --series=jammy --arch=arm64 PACKAGEBUILD-24532956
Starting target for build PACKAGEBUILD-24532956
RUN: /usr/share/launchpad-buildd/bin/in-target override-sources-list --backend=chroot --series=jammy --arch=arm64 PACKAGEBUILD-24532956 'deb http://ppa.launchpadcontent.net/mamarley/tvheadend-git/ubuntu jammy main' 'deb http://ftpmaster.internal/ubuntu jammy main restricted universe multiverse' 'deb http://ftpmaster.internal/ubuntu jammy-security main restricted universe multiverse' 'deb http://ftpmaster.internal/ubuntu jammy-updates main restricted universe multiverse' 'deb http://ftpmaster.internal/ubuntu jammy-proposed main restricted universe multiverse'
Overriding sources.list in build-PACKAGEBUILD-24532956
RUN: /usr/share/launchpad-buildd/bin/in-target add-trusted-keys --backend=chroot --series=jammy --arch=arm64 PACKAGEBUILD-24532956
Adding trusted keys to build-PACKAGEBUILD-24532956
pub   rsa1024/26F4EF8440618B66 2009-01-22 [SC]
      Key fingerprint = A0D4 7AB4 E99F F9F9 C0EA  949A 26F4 EF84 4061 8B66
uid                            Launchpad PPA for Michael Marley

RUN: /usr/share/launchpad-buildd/bin/in-target update-debian-chroot --backend=chroot --series=jammy --arch=arm64 PACKAGEBUILD-24532956

This is clear 20.04 it's not 22.04
I guess launchpad have cross-compilation toolchain and build ARM64 packages on AMD64 machine.

Count in log repeats of "Get :" = 468 Packages

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

Thanks for the hint, except:

Get:10 http://ftpmaster.internal/ubuntu jammy/restricted arm64 Packages

How do I figure out what package is in that "Get" and how do I get it?!

Cheers,

Flex

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by saen acro about 2 years ago

Sean Warner wrote:

Thanks for the hint, except:
[...]

How do I figure out what package is in that "Get" and how do I get it?!

Cheers,

Flex

This is Launchpad secret proprietary repo ;)

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Stefan S. about 2 years ago

Hi there,

I'm trying to compile and run TVH on Ubuntu 20.04.5 with following arguments:

./configure --disable-ffmpeg_static --disable-libfdkaac_static --disable-libtheora_static --disable-libopus_static --disable-libvorbis_static --disable-libvpx_static --disable-libx264_static --disable-libx265_static --disable-libfdkaac --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --disable-avahi --disable-dbus_1 --disable-bintray_cache --disable-execinfo --disable-hdhomerun_static --enable-hdhomerun_client --enable-libav --enable-pngquant --enable-trace --enable-vaapi --infodir=/usr/share/info --localstatedir=/var --mandir=/usr/share/man --prefix=/usr --ldflags-ldvbcsa --ldflags-ldhomerun --cc=cc --arch=x86_x64 --platform=linux --python=python3 --sysconfdir=/config

Output result is as follows:

Checking support/features
  checking for cc -mmmx ...                         ok
  checking for cc -msse2 ...                        ok
  checking for cc -Wunused-result ...               ok
  checking for cc -fstack-protector ...             ok
  checking for cc -fstack-protector-strong ...      ok
  checking for cc -fstack-check ...                 ok
  checking for cc -fPIE ...                         ok
  checking for cc strlcat ...                       fail
  checking for cc strlcpy ...                       fail
  checking for cc fdatasync ...                     ok
  checking for cc getloadavg ...                    ok
  checking for cc atomic32 ...                      ok
  checking for cc atomic64 ...                      ok
  checking for cc atomic_time_t ...                 ok
  checking for cc atomic_ptr ...                    ok
  checking for cc bitops64 ...                      ok
  checking for cc lockowner ...                     ok
  checking for cc qsort_r ...                       ok
  checking for cc stime ...                         fail
  checking for cc gmtoff ...                        ok
  checking for cc recvmmsg ...                      ok
  checking for cc sendmmsg ...                      ok
  checking for cc libiconv ...                      fail
    ^ using build-in glibc iconv routines
  checking for cc ifnames ...                       ok
  checking for cc cclang_threadsan ...              fail
  checking for py module gzip ...                   ok
  checking for pkg-config ...                       ok
  checking for xgettext ...                         ok
  checking for msgmerge ...                         ok
  checking for gzip ...                             ok
  checking for bzip2 ...                            ok
  checking for pkg openssl  ...                     ok (detected 1.1.1f)
  checking for cc linux/dvb/version.h ...           ok
  checking for cc libhdhomerun/hdhomerun.h ...      ok
  checking for pkg zlib  ...                        ok (detected 1.2.11)
  checking for pkg libpcre2-8  ...                  ok (detected 10.34)
  checking for pkg liburiparser  ...                ok (detected 0.9.3)
  checking for pkg libavfilter >=6.47.100 ...       ok (detected 7.57.100)
  checking for pkg libswresample >=2.1.100 ...      ok (detected 3.5.100)
  checking for pkg libavresample >=3.0.0 ...        ok (detected 4.0.0)
  checking for pkg libswscale >=4.1.100 ...         ok (detected 5.5.100)
  checking for pkg libavformat >=57.41.100 ...      ok (detected 58.29.100)
  checking for pkg libavcodec >=57.48.101 ...       ok (detected 58.54.100)
  checking for pkg libavutil >=55.28.100 ...        ok (detected 56.31.100)
  checking for pkg libva >=0.38.0 ...               ok (detected 1.7.0)
  checking for pkg libva-drm >=0.38.0 ...           ok (detected 1.7.0)
  checking for cc sys/inotify.h ...                 ok
  checking for cc inotify_init1 ...                 ok
  checking for cc dvbcsa/dvbcsa.h ...               ok
  checking for cc -ldvbcsa ...                      ok
  fetching dvb-scan files ...                       ok
  checking for cc epoll_create1 ...                 ok

Compiler:
  Using C compiler:                        ccache cc
  Using LD flags:                           -lhdhomerun -ldvbcsa
  Build for arch:                          x86_x64

Binaries:
  Using PYTHON:                            python3
  Using GZIP:                              gzip
  Using BZIP2:                             bzip2

Options:
  pie                                      yes
  ccdebug                                  no
  cardclient                               yes
  cwc                                      yes
  cccam                                    yes
  capmt                                    yes
  constcw                                  yes
  linuxdvb                                 yes
  satip_server                             yes
  satip_client                             yes
  hdhomerun_client                         yes
  hdhomerun_static                         no
  iptv                                     yes
  tsfile                                   yes
  dvbscan                                  yes
  timeshift                                yes
  trace                                    yes
  avahi                                    no
  zlib                                     yes
  libav                                    yes
  ffmpeg_static                            no
  libx264                                  yes
  libx264_static                           no
  libx265                                  yes
  libx265_static                           no
  libvpx                                   yes
  libvpx_static                            no
  libtheora                                yes
  libtheora_static                         no
  libvorbis                                yes
  libvorbis_static                         no
  libfdkaac                                no
  libfdkaac_static                         no
  libopus                                  yes
  libopus_static                           no
  nvenc                                    no
  vaapi                                    yes
  mmal                                     no
  omx                                      no
  inotify                                  yes
  epoll                                    yes
  pcre                                     no
  pcre2                                    yes
  uriparser                                yes
  ccache                                   yes
  tvhcsa                                   yes
  bundle                                   no
  pngquant                                 yes
  kqueue                                   no
  dbus_1                                   no
  android                                  no
  gtimer_check                             no
  slow_memoryinfo                          no
  libsystemd_daemon                        no
  pcloud_cache                             yes
  ddci                                     yes
  cclang_threadsan                         no
  gperftools                               no
  execinfo                                 no
  mmx                                      yes
  sse2                                     yes
  W_unused_result                          yes
  f_stack_protector                        yes
  f_stack_protector_strong                 yes
  f_stack_check                            yes
  f_PIE                                    yes
  fdatasync                                yes
  getloadavg                               yes
  atomic32                                 yes
  atomic64                                 yes
  atomic_time_t                            yes
  atomic_ptr                               yes
  bitops64                                 yes
  lockowner                                yes
  qsort_r                                  yes
  gmtoff                                   yes
  recvmmsg                                 yes
  sendmmsg                                 yes
  ifnames                                  yes
  py_gzip                                  yes
  bin_pkg_config                           yes
  bin_xgettext                             yes
  bin_msgmerge                             yes
  bin_gzip                                 yes
  bin_bzip2                                yes
  ssl                                      yes
  linuxdvbapi                              yes
  linuxdvb_ca                              yes
  libhdhomerun                             yes
  upnp                                     yes
  hwaccels                                 yes
  inotify_h                                yes
  inotify_init1                            yes
  dvbcsa                                   yes
  epoll_create1                            yes
  mpegts                                   yes
  mpegts_dvb                               yes

Packages:
  openssl                                  1.1.1f
  zlib                                     1.2.11
  libpcre2-8                               10.34
  liburiparser                             0.9.3
  libavfilter                              7.57.100
  libswresample                            3.5.100
  libavresample                            4.0.0
  libswscale                               5.5.100
  libavformat                              58.29.100
  libavcodec                               58.54.100
  libavutil                                56.31.100
  libva                                    1.7.0
  libva-drm                                1.7.0

Installation paths:
  Prefix:                                  /usr
  Binaries:                                ${prefix}/bin
  Libraries:                               ${prefix}/lib
  Data files:                              ${prefix}/share
  Man pages:                               /usr/share/man

Final Binary:
  /root/tvheadend/build.linux/tvheadend

Tvheadend Data Directory:
  /usr/share/tvheadend

which looks OK in my opinion. When I then do...

make -j$(nproc)

it compiles successfully but afterwards, when trying to run tvheadend binary with -C flag, it aborts:

root@tvheadend-ubuntu:~/tvheadend/build.linux# ./tvheadend -C
2022-10-11 08:08:44.390 [   INFO] main: Log started
2022-10-11 08:08:44.390 [   INFO] http: Starting HTTP server 0.0.0.0:9981
2022-10-11 08:08:44.390 [   INFO] htsp: Starting HTSP server 0.0.0.0:9982
2022-10-11 08:08:44.422 [   INFO] config: loaded
2022-10-11 08:08:44.423 [   INFO] config: scanfile (re)initialization with path <none>
2022-10-11 08:08:44.424 [   INFO] transcode: 'video' context type registered
2022-10-11 08:08:44.424 [   INFO] transcode: 'audio' context type registered
2022-10-11 08:08:44.424 [   INFO] transcode: '&TVHH264Decoder' decoder helper registered
2022-10-11 08:08:44.424 [   INFO] transcode: '&TVHTHEORADecoder' decoder helper registered
2022-10-11 08:08:44.424 [   INFO] transcode: '&TVHAACDecoder' decoder helper registered
2022-10-11 08:08:44.424 [   INFO] transcode: '&TVHVORBISDecoder' decoder helper registered
2022-10-11 08:08:44.424 [   INFO] transcode: '&TVHOPUSDecoder' decoder helper registered
2022-10-11 08:08:44.424 [   INFO] transcode: '&TVHMPEG2VIDEOEncoder' encoder helper registered
2022-10-11 08:08:44.424 [   INFO] transcode: '&TVHH264Encoder' encoder helper registered
2022-10-11 08:08:44.424 [   INFO] transcode: '&TVHHEVCEncoder' encoder helper registered
2022-10-11 08:08:44.424 [   INFO] transcode: '&TVHAACEncoder' encoder helper registered
2022-10-11 08:08:44.427 [   INFO] codec: 'mpeg2video' encoder registered
2022-10-11 08:08:44.428 [   INFO] codec: 'mp2' encoder registered
2022-10-11 08:08:44.428 [   INFO] codec: 'aac' encoder registered
2022-10-11 08:08:44.428 [   INFO] codec: 'vorbis' encoder registered
2022-10-11 08:08:44.428 [   INFO] codec: 'flac' encoder registered
2022-10-11 08:08:44.428 [   INFO] codec: 'libx264' encoder registered
2022-10-11 08:08:44.428 [   INFO] codec: 'libx265' encoder registered
2022-10-11 08:08:44.428 [   INFO] codec: 'libvpx' encoder registered
2022-10-11 08:08:44.429 [   INFO] codec: 'libvpx-vp9' encoder registered
2022-10-11 08:08:44.429 [   INFO] codec: 'libtheora' encoder registered
2022-10-11 08:08:44.429 [   INFO] codec: 'libvorbis' encoder registered
2022-10-11 08:08:44.429 [   INFO] codec: 'libopus' encoder registered
2022-10-11 08:08:44.429 [   INFO] codec: 'h264_vaapi' encoder registered
2022-10-11 08:08:44.429 [   INFO] codec: 'hevc_vaapi' encoder registered
2022-10-11 08:08:44.429 [   INFO] codec: 'vp8_vaapi' encoder registered
2022-10-11 08:08:44.429 [   INFO] codec: 'vp9_vaapi' encoder registered
2022-10-11 08:08:44.429 [  ALERT] profile: no default streaming profile! reinstall data files
Aborted

Any suggestions?

Thanks!

EDIT:
ok, stupid me... I should start the binary with --noacl arg rather than -C :)
Now I can run the binary.

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

Stefan A S.

Hello Stefan can I ask you a favor please?

I am also trying to build tvh. In my case, on Ubuntu server 22.04. If I enable libav it won't build otherwise it does. I think I could missing a specific package.

I see you got it to build with libav support. Could you please do a...

apt list --installed

on your system and post the results here?

Cheers,

Flex

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by saen acro about 2 years ago

Sean Warner wrote:

Stefan A S.

Hello Stefan can I ask you a favor please?

I am also trying to build tvh. In my case, on Ubuntu server 22.04. If I enable libav it won't build otherwise it does. I think I could missing a specific package.

I see you got it to build with libav support. Could you please do a...

[...]

on your system and post the results here?

Cheers,

Flex

He build for:

Build for arch:                          x86_x64

ARM64 is a total different thing


sell RP4 and take "Jaguarboard One Plus" ;)

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

I got it to build with libav support.

I took a hint from the post by Stefan S... THANK YOU.

I was getting this build error: “DSO missing from command line?” I googled and came across this page https://candid.technology/how-to-fix-error-adding-symbols-dso-missing-from-command-line/ giving suggestions about why that error might occur and one of the reasons was in the compile command to "Try switching the library order". So I thought maybe I needed to have the magic --enable-libav LATER in my AUTOBUILD_CONFIGURE_EXTRA="" list just as Stefan S does?

These are all the things I did differently to make it build with libav support:
I changed my config list to these and in this order... basically almost the same as Stefan S:

--disable-ffmpeg_static --disable-libfdkaac_static --disable-libtheora_static --disable-libopus_static --disable-libvorbis_static --disable-libvpx_static --disable-libx264_static --disable-libx265_static --disable-libfdkaac --enable-libopus --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --disable-avahi --disable-dbus_1 --disable-bintray_cache --disable-execinfo --disable-hdhomerun_static --enable-hdhomerun_client --enable-libav --enable-pngquant --enable-trace --enable-vaapi --prefix=/usr --ldflags-ldvbcsa --ldflags-ldhomerun --platform=linux --python=python3

I don't know if these next things made any difference...
I also commented out these two lines at the top of the buildTVH.sh

#export LD_LIBRARY_PATH=/opt/vc/lib
#export PKG_CONFIG_PATH=$HOME/ffmpeg_build/lib/pkgconfig

• And manually made the symbolic link again...
# sudo ln -s /usr /opt/vc

• I had also installed these packages earlier...
libavcodec-dev libswresample-dev libavformat-dev libavfilter-dev

... but the build also failed after installing them so installing them surely didn't make it work?

I have the same support/features now as Stefan S except no -mmx and -msse2 which apparently are Intel processor things. Stefan S has "libavresample"!! So his build output didn't have a million warnings like this:

No package 'libavresample' found
CC              src/input/mpegts/tsdemux.o
Package libavresample was not found in the pkg-config search path.
Perhaps you should add the directory containing `libavresample.pc'
to the PKG_CONFIG_PATH environment variable

Really I think the TVH code should be updated to stop those dependency warnings because libavresample is not needed to make a successful build.

I made a fresh Ubuntu 22.04 install on my Pi 4, updated it and installed my .deb file like this:

sudo apt-get update
sudo dpkg -i tvheadend_4.3-2038~g5f9404117_arm64.deb

It installed fine, I got the Web UI set-up wizard and TVH runs as a systemd service!

In the end maybe it was moving the --enable-libav further down the list of config options that made it build. No idea why. MMarley has his --enable-libav almost at the beginning of the list and his builds. I have also now left out some options I had in before (e.g: --enable-nvenc --enable-omx and a few others) maybe putting them back in will break it again!

Anyway, thank you to @saen acro especially for all your help and patience!

Flex

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by Sean Warner about 2 years ago

By process of elimination I finally discovered why my TVH was not building.
It was this option which I was enabling:

--enable-ccdebug

With that enabled the build fails like this:

/usr/bin/ld: /usr/local/src/tvheadend/build.linux/src/transcoding/codec/codecs/libs/libvpx.o: undefined reference to symbol 'vpx_codec_control_' 
/usr/bin/ld: /lib/aarch64-linux-gnu/libvpx.so.7: error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status 
make[2]: *** [Makefile:713: /usr/local/src/tvheadend/build.linux/tvheadend] Error 1

ccdebug is disabled by default... I don't know if anyone ever enables it. MMarley does not and Stefan S above didn't. I'm not even sure ccdebug exists. I googled lots, there is a mention of it in https://linux-packages.com/aur/package/ccdebug but the AUR is not much use to me building on Ubuntu. Also it doesn't appear to actually be in the AUR https://aur.archlinux.org/ccdebug.git and this mentioned webpage http://ccdebug.sourceforge.net/ doesn't exist! ccdebug is also not mentioned on github and I searched the apt repository for related matches but didn't find anything:

sudo apt-cache search cc
sudo apt-cache search debug

So I'm guessing that --enable-ccdebug is no longer a valid tvheadend build option? If so it should be removed.

It would help if the TVH build options were documented clearly. Someone asked about that here https://tvheadend.org/boards/5/topics/30792 a few years ago but that went nowhere it seems.

If anyone knows about ccdebug please let me know. I'd like to get 100% closure on this!

Cheers,

Flex

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by saen acro about 2 years ago

Sean Warner wrote:

So I'm guessing that --enable-ccdebug is no longer a valid tvheadend build option? If so it should be removed.

It would help if the TVH build options were documented clearly. Someone asked about that here https://tvheadend.org/boards/5/topics/30792 a few years ago but that went nowhere it seems.

If anyone knows about ccdebug please let me know. I'd like to get 100% closure on this!

Cheers,

Flex

Option is compatible with old OS's, and removing is not an option.


Look at this location:
https://github.com/tvheadend/tvheadend/tree/master/Autobuild
and create Jammy Jellyfish equivalent suggestions.
if watch older branches in this location have more OS's


Q. Why people use old OS?
A. Because driver for some devices is unstable or incompatible with newer.

RE: [MANUAL] Building .DEB packages on clean Ubuntu or other Debian distros - Added by D M almost 2 years ago

Can anyone help get this build to succeed? I tried ubuntu and Debian, but it always fails. It always ends with the following.


CC              src/esstream.o
CC              src/streaming.o
CC              src/channels.o
CC              src/subscriptions.o
CC              src/service.o
CC              src/htsp_server.o
CC              src/htsmsg.o
CC              src/htsmsg_binary.o
src/htsmsg_binary.c: In function ‘htsmsg_binary_des0’:
src/htsmsg_binary.c:80:39: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]
   80 |       ((char *)f->_hmf_name)[namelen] = 0;
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
In file included from src/htsmsg_binary.h:22,
                 from src/htsmsg_binary.c:26:
src/htsmsg.h:84:14: note: at offset 0 to object ‘_hmf_name’ with size 0 declared here
   84 |   const char _hmf_name[0];
      |              ^~~~~~~~~
In file included from /usr/include/string.h:495,
                 from src/htsmsg_binary.c:24:
In function ‘memcpy’,
    inlined from ‘htsmsg_binary_des0’ at src/htsmsg_binary.c:98:7:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:34:10: error: writing 16 bytes into a region of size 0 [-Werror=stringop-overflow=]
   34 |   return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from src/htsmsg_binary.h:22,
                 from src/htsmsg_binary.c:26:
src/htsmsg_binary.c: In function ‘htsmsg_binary_des0’:
src/htsmsg.h:84:14: note: at offset 0 to object ‘_hmf_name’ with size 0 declared here
   84 |   const char _hmf_name[0];
      |              ^~~~~~~~~
cc1: all warnings being treated as errors
make[2]: *** [Makefile:715: /home/debian/tvheadend/build.linux/src/htsmsg_binary.o] Error 1
make[2]: Leaving directory '/home/debian/tvheadend'
make[1]: *** [debian/rules:15: override_dh_auto_build] Error 2
make[1]: Leaving directory '/home/debian/tvheadend'
make: *** [debian/rules:6: build] Error 2
dpkg-buildpackage: error: debian/rules build subprocess returned exit status 2

(51-75/92)