Use v4l2loopback on AWS EC2 - amazon-web-services

I have been trying to set up v4l2loopback on an EC2 instance and get the error - modprobe: FATAL: Module v4l2loopback not found in directory /lib/modules/5.4.0-1041-aws on sudo modprobe v4l2loopback.
Trying to load videodev using sudo modprobe videodev also returns the same module not found error.
I tried installing Linux headers for this but to no success. Any leads?

kernels for cloud VMs are most often stripped of anything unnecessary in a cloud environment for space (and implicitly speed) reasons (and put in a share of security reasons as well).
now most virtualized hardware that is running in some unknown datacenter has absolutely no requirement for hardware drivers (apart from the small set of drivers to run the "virtual hardware").
Also audio and multimedia applications are exceedingly rare under these circumstances - thus the image vendors strip away audio drivers and the v4l2 framework.
in order to use the v4l2loopback module, you need a kernel that comes with the v4l2-framework.
since the vendored images lack it, you need to configure and compile such a kernel yourself (and make sure it persists).
just installing the kernel-headers is not enough.
here's an excerpt of the relevant info of the kernel-configuration that should give you a v4l2loopback-compatible kernel:
CONFIG_MEDIA_SUPPORT=y
# CONFIG_MEDIA_SUPPORT_FILTER is not set
# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
#
# Media device types
#
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_PLATFORM_SUPPORT=y
CONFIG_MEDIA_TEST_SUPPORT=y
# end of Media device types
#
# Media core support
#
CONFIG_VIDEO_DEV=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_DVB_CORE=y
# end of Media core support
#
# Video4Linux options
#
CONFIG_VIDEO_V4L2=y
CONFIG_VIDEO_V4L2_I2C=y
# CONFIG_VIDEO_V4L2_SUBDEV_API is not set
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
# end of Video4Linux options

Related

Failure to "opam init", how to manually specify index.tar.gz?

I cannot opam init:
$ opam init --verbose
[NOTE] Will configure from built-in defaults.
Checking for available remotes: rsync and local, git, mercurial.
- you won't be able to use darcs repositories unless you install the darcs command on your system.
<><> Fetching repository information ><><><><><><><><><><><><><><><><><><><><><>
[ERROR] Could not update repository "default": OpamDownload.Download_fail(_, "Curl failed: \"/usr/bin/curl --write-out %{http_code}\\\\n --retry 3 --retry-delay 2
--user-agent opam/2.0.7 -L -o /tmp/opam-1697-6d07ae/index.tar.gz.part https://opam.ocaml.org/index.tar.gz\" exited with code 28")
[ERROR] Initial download of repository failed
However, I've manually downloaded index.tar.gz. How to manually specify index.tar.gz to opam init?
System info:
$ uname -a
CYGWIN_NT-10.0-19043 xxx 3.4.5-1.x86_64 2023-01-19 19:09 UTC x86_64 Cygwin
P.S. I'm trying to build one project using OCaml, but it turned out that it is very tricky: either OCaml complains about compatibility (is not a compiled interface for this version of OCaml followed by It seems to be for an older version of OCaml; does it mean that OCaml is not backward compatible?), either opam init fails, either <whatever>.
Your error message indicates that you either have network problems or very poor connection. Also, you opam version is very old, so it might not handle bad networks very well, I would suggest your installing a newer version of opam (at least 2.1.x), or, if it is possible, switching to docker or a virtual machine.
Answering your original question: I don't think there is a way (at least officially supported to specify your own downloaded index). Also, if you have trouble with downloading the index it most likely means that you will have more trouble in the future with your network when opam will start downloading actual packages.

"RunTime Error: Failed to load audio" for mp3 file (waveform, torchaudio)

No matter how I import my audio file (through uploading it on google colab, importing it through google drive), I keep getting the same error. Could it be a path issue, and if so, how could I go about fixing it? When I run an "iPython.display", it displays the audio and I'm able to play it, but I'm not sure why torchaudio cannot load it.
Thanks in advance :)
waveform, sample_rate = torchaudio.load("Default-20220816-113844.mp3")
waveform = waveform.to(device)
if sample_rate != bundle.sample_rate:
waveform = torchaudio.functional.resample(waveform, sample_rate, bundle.sample_rate)
Assuming ("Default-20220816-113844.mp3") is not being found because of the path
On Colab to find the path click on the "..." (that appears on the right hand side of objects in the file browser when you hover over them) and choose COPY PATH to copy the complete path, the value will be copied without quotation marks.
At the time of the question is posted, Google Colab has pytorch==1.12 and torchaudio==0.12 pre-installed, so I assume you are getting the error with these versions.
Starting from TorchAudio 0.12, mp3 decoding requires FFmpeg.
When "sox_io" backend is used, first it tries to load audio using libsox, and when it fails, it further tries to load it with FFmpeg.
In Google Colab, you can run the following command to install the supported version.
!add-apt-repository -y ppa:savoury1/ffmpeg4
!apt-get -qq install -y ffmpeg
See also: https://pytorch.org/audio/0.12.1/tutorials/streaming_api_tutorial.html

How to build OCaml in M1 Mac with Zarith on it?

I am trying to do code generation with Isabelle/HOL in an M1 Mac computer. A recurring issue to achieve this relates to OCaml's library Zarith. I've asked in their mailing list and their answer was that "the problem is
ultimately to build OCaml (with Zarith) on it". Unfortunately, I do not understand what the verb "build" means in that sentence. OCaml is in that computer as the report on the end of this question indicates. The computer has Zarith on it (version 1.12). However, as they say, there is an issue with Zarith in that system. The evidence that I have for this comes from two observations:
When I run utop and do #require "zarith";; the answer is:
Cannot load required shared library dllzarith.
Reason: /.../.opam/ocaml-base-compiler.4.12.0/lib/stublibs/dllzarith.so: dlopen(/.../.opam/ocaml-base-compiler.4.12.0/lib/stublibs/dllzarith.so, 0x000A): symbol not found in flat namespace '___gmpn_add_n'.
When opening an .ml file in Visual Studio Code with commands with types such as Z.t where Z represents Zarith, VSC complains with Unbound module Z ocamllsp.
The question is then, how do I make this computer find the Zarith files it needs to work properly?
% opam config report
# opam config report
# opam-version 2.0.8
# self-upgrade no
# system arch=arm64 os=macos os-distribution=homebrew os-version=12.0.1
# solver builtin-mccs+glpk
# install-criteria -removed,-count[version-lag,request],-count[version-lag,changed],-changed
# upgrade-criteria -removed,-count[version-lag,solution],-new
# jobs 7
# repositories 1 (http) (default repo at 8818dcc3)
# pinned 0
# current-switch ocaml-base-compiler.4.12.0

How can I access to HDFS file system in the latest Tensorflow 2.6.0?

I recently upgraded the tensorflow version used in my program to the recently released 2.6.0, but I ran into a trouble.
import tensorflow as tf
pattern = 'hdfs://mypath'
print(tf.io.gfile.glob(pattern))
The above API throws an exception in version 2.6:
tensorflow.python.framework.errors_impl.UnimplementedError: File system scheme'hdfs' not implemented (file:xxxxx)
Then I checked the relevant implementation code and found that the official recommendation is to use tensorflow/io to access hdfs, and the environment variable TF_USE_MODULAR_FILESYSTEM is provided to use legacy access support. Since my code is more complex and difficult to refactor in a short time, I tried to use this environment variable, but it still failed.
In general, my questions are:
In the latest version of tensorflow, if "tfio" is not used, how can I still access the HDFS file?
If "tfio" must be used, what is the equivalent code call to tf.io.gfile.glob?
TL.DR. Install tensorflow-io and import it.
After some tossing, I found a solution (it may be the official recommended way):
Since v2.6.0, Tensorflow no longer provides HDFS, GCS and other file system support in the framework, but transfers these support to the Tensorflow/IO project.
Therefore, in future versions, to have the support of HDFS, GCS and other file systems, you only need to install tensorflow-io and import it to the training program:
$ pip install tensorflow-io
$ cat test.py
import tensorflow as tf
import tensorflow_io as tfio
print(tf.io.gfile.glob('hdfs://...'))
$ CLASSPATH=$(${HADOOP_HOME}/bin/hadoop classpath --glob) python test.py
It will load libtensorflow_io.so and libtensorflow_io_plugins.so, which contains the implementation and registration logic of each extras file system:
# tensorflow_io/python/ops/__init__.py
core_ops = LazyLoader("core_ops", "libtensorflow_io.so")
try:
plugin_ops = _load_library("libtensorflow_io_plugins.so", "fs")
except NotImplementedError as e:
warnings.warn("unable to load libtensorflow_io_plugins.so: {}".format(e))
# Note: load libtensorflow_io.so imperatively in case of statically linking
try:
core_ops = _load_library("libtensorflow_io.so")
plugin_ops = _load_library("libtensorflow_io.so", "fs")
except NotImplementedError as e:
warnings.warn("file system plugins are not loaded: {}".format(e))
Ref:
Remove hdfs as support has been moved to modular file systems
Remove AWS files as s3 support is now in modular file system
SIG IO Meeting Notes

MacPorts: "Error: clang-4.0 has been replaced by clang-8.0; please install that instead" but I have clang-8.0 already installed

I am getting the same error when trying to install many ports with MacPorts, e.g. gtk2:
~ sudo port install gtk2
Password:
---> Computing dependencies for gtk2
The following dependencies will be installed:
clang-4.0
clang-5.0
graphite2
harfbuzz
ld64
ld64-latest
libmacho-headers
libomp
llvm-5.0
pango
perl5
xar
xorg-libXcomposite
xorg-libXcursor
xorg-libXdamage
xorg-libXinerama
xorg-libXrandr
xorg-util-macros
Continue? [Y/n]:
---> Configuring clang-4.0
Error: clang-4.0 has been replaced by clang-8.0; please install that instead.
Error: Failed to configure clang-4.0: obsolete port
Error: See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_llvm-4.0/clang-4.0/main.log for details.
Error: Follow https://guide.macports.org/#project.tickets to report a bug.
Error: Processing of port gtk2 failed
The installation here suggests to install clang-4.0, among others, to which I can only answer "Continue".
However, it then fails claiming that very same port is "obsolete". Suggesting to install 8.0 instead.
However, I already have it installed by MacPorts:
~ clang -v
clang version 8.0.0 (tags/RELEASE_800/final)
Target: x86_64-apple-darwin12.6.0
Thread model: posix
InstalledDir: /opt/local/bin
➜ ~ which clang
/opt/local/bin/clang
What is wrong here and why do MacPorts insist on installing an obsolete port dependency?
UPDATE1. Some troubleshooting attempts...
➜ ~ port installed|grep llvm
cctools #921_2+llvm37 (active)
llvm-3.7 #3.7.1_4 (active)
llvm_select #2_0 (active)
➜ ~
UPDATE2.
~ sudo port uninstall lldb-4.0
Warning: no such port: lldb-4.0, skipping uninstall
➜ ~ sudo port uninstall clang-4.0
➜ ~ sudo port uninstall clang_select
---> Deactivating clang_select #2_0
---> Cleaning clang_select
---> Uninstalling clang_select #2_0
---> Cleaning clang_select
➜ ~
However, clang-8.0 is installed and working:
~ clang -v
clang version 8.0.0 (tags/RELEASE_800/final)
Target: x86_64-apple-darwin12.6.0
Thread model: posix
InstalledDir: /opt/local/bin
➜ ~ clang
clang-8: error: no input files
➜ ~
Then why isn't it found by the MacPorts?
➜ ~ sudo port install gtk2
---> Computing dependencies for gtk2
The following dependencies will be installed:
clang-4.0
...
Can I configure it to be found in /opt/local/bin instead of trying to install the old clang-4.0?
UPDATE3.
My config directories:
➜ ~ ls /opt/local/etc/macports
archive_sites.conf macports.conf.default sources.conf variants.conf.default
archive_sites.conf.default pubkeys.conf sources.conf.default
macports.conf pubkeys.conf.default variants.conf
➜ ~
➜ ~ less /opt/local/etc/macports/macports.conf
# MacPorts system-wide configuration file.
# Commented-out values are defaults unless otherwise noted.
# Directory under which MacPorts should install ports. This must be
# where MacPorts itself is installed.
prefix /opt/local
# User to run operations as when MacPorts drops privileges.
#macportsuser macports
# Directory for MacPorts working data.
portdbpath /opt/local/var/macports
# Colon-delimited list of directories to search for external tools
# (make(1), pkg-config(1), etc.). While installing ports, MacPorts uses
# this list for PATH. Changing this setting is intended for advanced
# users only and is unsupported.
#binpath /opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
# Directory containing Xcode Tools. By default, MacPorts determines this
# using xcode-select(1).
#developer_dir /Applications/Xcode.app/Contents/Developer
# Location of PackageMaker. Defaults to
# "${developer_dir}/Applications/Utilities/PackageMaker.app" with Xcode
# 4.2 and earlier and "/Applications/PackageMaker.app" with 4.3 and later.
#packagemaker_path /Applications/PackageMaker.app
# Directory for application bundles installed by ports.
applications_dir /Applications/MacPorts
# Directory for frameworks installed by ports.
frameworks_dir /opt/local/Library/Frameworks
# Location of the MacPorts sources list.
sources_conf /opt/local/etc/macports/sources.conf
# Location of the MacPorts global variants definition file. Optional.
variants_conf /opt/local/etc/macports/variants.conf
# When MacPorts should build ports from source.
# - ifneeded: Download binary archives if available; build from source
# otherwise.
# - always: Always build from source; never try fetching archives.
# - never: Never build from source; try fetching archives and abort if
# unavailable.
#buildfromsource ifneeded
# Type of archive to use for port images. Supported types are cpgz,
# cpio, tar, tbz, tbz2, tgz, tlz, txz, xar, zip.
#portarchivetype tbz2
# Apply transparent filesystem compression to files on activation.
# Requires bsdtar with support for --hfsCompression in binpath, which can be
# provided by installing the libarchive port. This will work with HFS+ or APFS
# volumes only and will be ignored on other filesystems.
#hfscompression yes
# CPU architecture to target. Supported values are "ppc", "ppc64",
# "i386", and "x86_64". Defaults to:
# - OS X 10.5 and earlier: "ppc" on PowerPC, otherwise "i386".
# - OS X 10.6 and later: "x86_64" on Intel 64, otherwise "i386".
#build_arch i386
# Space-delimited list of CPU architectures to target when building
# universal. Defaults to "i386 ppc" on Mac OS X 10.5 and earlier,
# "x86_64 i386" on Mac OS X 10.6 through macOS 10.13, and "x86_64" on
# macOS 10.14 and later (the 10.14 SDK is not universal).
#universal_archs x86_64 i386
# Use ccache, a compiler cache for C, C++, Objective-C, and
# Objective-C++. (See http://ccache.samba.org.) The "ccache" executable
# must exist in one of the directories in binpath.
#configureccache no
# Directory for ccache's cached compiler output.
#ccache_dir /opt/local/var/macports/build/.ccache
# Maximum size of files stored in ccache's cache. Append "G", "M", or
# "K" for gigabytes, megabytes, or kilobytes.
# Use distcc, a distributed compiler for C, C++, Objective-C, and
# Objective-C++. (See http://distcc.org.) The "distcc" executable must
# exist in one of the directories in binpath.
#configuredistcc no
# Use pipes rather than temporary files for communication between the
# various stages of C, C++, Objective-C, and Objective-C++ compilation.
#configurepipe yes
# Lowered scheduling priority to use for commands run during configure,
# build, and destroot. Accepted values are 0 (normal priority) through
# 20 (lowest priority).
#buildnicevalue 0
# Number of simultaneous make(1) jobs to use when building ports. If set
# to 0, the number of jobs will be the lesser of:
# - number of automatically-detected CPU cores
# - gigabytes of physical memory + 1
#buildmakejobs 0
# umask value to use when a port installs its files.
#destroot_umask 022
# Automatically execute "clean" after "install" of ports.
#portautoclean yes
# Keep logs after successful installations.
#keeplogs no
# The rsync server for fetching MacPorts base during selfupdate. This
# setting is NOT used when downloading ports trees; ports trees are
# configured using the file referenced by sources_conf. See
# https://trac.macports.org/wiki/Mirrors#MacPortsSource for a list of
# available servers.
#rsync_server rsync.macports.org
# Location of MacPorts base sources on rsync_server. If this references
# a .tar file, a signed .rmd160 file must exist in the same directory
# and will be used to verify its integrity. See
# https://trac.macports.org/wiki/Mirrors#MacPortsSource to find the
# correct rsync_dir for a particular rsync_server.
#rsync_dir macports/release/tarballs/base.tar
# Options to pass to rsync when fetching MacPorts base and the ports tree.
#rsync_options -rtzvl --delete-after
# Type of generated StartupItems.
# - launchd: Create StartupItems for use with launchd.
# - default: Create StartupItems for launchd on OS X and none on
# other platforms.
# - none: Disable creation of StartupItems.
# This setting only applies when building ports from source.
#startupitem_type default
# Create system-level symlinks to generated StartupItems. If set to
# "no", symlinks will not be created; otherwise, symlinks will be placed
# in /Library/LaunchDaemons or /Library/LaunchAgents as appropriate.
# This setting only applies when building ports from source.
#startupitem_install yes
# Whether to allow ports to automatically load their StartupItems.
# If set to "no", StartupItems will never be loaded unless the user
# explicitly requests it. If set to "yes" (the default), some ports may
# automatically load their StartupItems when they are activated.
#startupitem_autostart yes
# Extra environment variables to keep. MacPorts sanitizes its
# environment while processing ports, keeping:
# - DISPLAY
# - DYLD_FALLBACK_FRAMEWORK_PATH, DYLD_FALLBACK_LIBRARY_PATH,
# DYLD_FRAMEWORK_PATH, DYLD_INSERT_LIBRARIES, DYLD_LIBRARY_PATH
# - JAVA_HOME
# - ARCHIVE_SITE_LOCAL, MASTER_SITE_LOCAL, PATCH_SITE_LOCAL
# - PORTSRC
# - ALL_PROXY, FTP_PROXY, http_proxy, HTTPS_PROXY, NO_PROXY, RSYNC_PROXY
# - GROUP, USER
# - COLUMNS, LINES
# Variables listed in extra_env are added to this list. This has no
# default value; setting it is intended for advanced users and is
# unsupported. (Note that sudo(8) sanitizes its environment on OS X 10.5
# and later, so it may have to be configured to pass the desired
# variables to MacPorts.)
#extra_env KEEP_THIS THIS_TOO
# Override proxy-related environment variables. By default, MacPorts
# takes proxy settings from the environment, from the proxy_* options
# below, and from Network Preferences, in that order. If this is set to
# "yes", MacPorts uses proxy_*, then Network Preferences, then the
# environment. (Note that Network Preferences does not have a setting
# for rsync proxies. Also note that sudo(8) sanitizes its environment on
# OS X 10.5 and later, so it may have to be configured to pass desired
# variables to MacPorts.)
#proxy_override_env no
# Proxies. These have no default values. The analogous environment
# variables are "http_proxy", "HTTPS_PROXY", "FTP_PROXY", and
# "RSYNC_PROXY".
#proxy_http proxy1:12345
#proxy_https proxy2:67890
#proxy_ftp proxy3:02139
#proxy_rsync proxy4:11377
# Comma-delimited list of hosts that MacPorts should not access through
# the HTTP, HTTPS, and FTP proxies. This does not apply to rsync, and it
# has no default value.
#proxy_skip host1, host2, host3
# Space-delimited lists of glob patterns matched against download hosts
# that MacPorts should not use and that MacPorts should prefer, respectively,
# overriding the usual ping time checks. These have no default values.
#host_blacklist badhost1 badhost2
#preferred_hosts preferredhost1 preferredhost2 *.de.*.macports.org
# Whether MacPorts should automatically run rev-upgrade after upgrading
# ports.
#revupgrade_autorun yes
# Whether rev-upgrade should automatically rebuild ports with broken
# linking or merely report the breakage. Supported values are "report"
# and "rebuild".
#revupgrade_mode rebuild
# Space-delimited list of files and directories to delete after the
# unarchive stage and before creating a pkg. Paths are interpreted
# relative to prefix, and there is no default value. This is useful for
# removing unnecessary files and directories prior to pkg or mpkg
# deployment.
#pkg_post_unarchive_deletions include share/doc share/man
# Whether the user interface should ask interactive questions
#ui_interactive yes
# Added to support C++11 following https://trac.macports.org/wiki/LibcxxOnOlderSystems
cxx_stdlib libc++
buildfromsource always
(END)
I have finally solved this puzzle, thanks to a hint from a MacPorts mailing list user. He suggested to
port install <port> configure.compiler=macports-clang-8.0
that did not work for me though, because my clang8 was in /usr/bin, while if I understand correctly, MacPorts look for their own packages rather than ones installed from elsewhere,
even after I manually symlinked it to /opt/local/bin/clang.
Then I read this comment:
We kept 3.4, 3.7, and 5.0 as stepping stones. I hope I thought that through fully...I think that’s the minimal amount needed.
It then occurred to me that I can try clang-3.7 as "stepping stone", installed it, and thereafter was able to install the other ports with
port install <port> configure.compiler=macports-clang-3.7
In particular, I was also able to install clang-5.0 that way:
port install clang-5.0 configure.compiler=macports-clang-3.7
And now that I have the more recent stepping stone in the chain, the problem seems fixed with no more annoying fallbacks
to obsolete ports!
Further sources
Quote from comment to my ticket referring to the problem:
https://trac.macports.org/ticket/58747#comment:1
MacPorts base 2.5.4 still has clang 4.0 in its list of compilers, even though the port has been made obsolete: ​https://github.com/macports/macports-base/blob/v2.5.4/src/port1.0/portconfigure.tcl#L604
It points to the code line 604:
lappend compilers macports-clang-5.0 macports-clang-4.0
from where it appears that one of clang-4.0 or 5.0 is required. This could be the reason why it insists on installing one of these ports, defaulting to the obsolete 4.0.
I presume a fix should include adding more ports to this list, e.g. clang-3.7 that is not obsolete (with hopefully no plans to change it).
Which is currently proposed in
Relevant Github PR https://github.com/macports/macports-base/pull/137
Please add your voice to get it merged!
This is an obsoletion message. Since you already have the replacement, just uninstall clang-4.0, llvm-4.0, and lldb-4.0 and you will be fine.