# run everything as root, it will make it easier
sudo su
# requirements
apt-get install -y curl wget gnupg2
# source the ubuntu release
source /etc/os-release
# add the podman repository
sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
# add the GPG key
wget -nv https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key -O- | apt-key add -
apt-get update
apt-get install -y podmanYou should be able to follow this guide for the most part (maybe not hello world) https://nvidia.github.io/container-wiki/toolkit/jetson.html
You most likely need these packages installed
sudo apt-get install -y libnvidia-container-tools libnvidia-container0 nvidia-container-runtime nvidia-container-runtime-hook nvidia-docker2This command should print something:
sudo docker info | grep nvidia
# Runtimes: io.containerd.runc.v2 nvidia runcYou also need to configure podman in order to have the correct runtime(s) available.
In order to do this you can edit the file in /usr/share/containers/containers.conf
Under the [engine.runtimes] section simply uncomment crun:
crun = [
"/usr/bin/crun",
]And add the nvidia runtime
nvidia = [
"/usr/bin/nvidia-container-runtime",
]Have a look at containers.conf for an example config
podman-compose has commands to setup unit files for the services you wish to start on boot.
podman-compose systemd -a create-unit
podman-compose systemd -a register # for each service you wish to runpodman-compose@.service will look for ~/.config/containers/compose/projects/*.env files and automatically add a service for each file that exist there.
The .env files are very simple, they just tell the service which files to use
COMPOSE_PROJECT_DIR=/home/xavier/podman/homepage
COMPOSE_FILE=homepage.yaml
COMPOSE_PATH_SEPARATOR=:
COMPOSE_PROJECT_NAME=homepage
# You need to run this for each service you wish to run on boot
systemctl --user enable podman-compose@homepage
systemctl --user start podman-compose@homepageI still haven't figured out how to have podman rootless working with runtime nvidia so the jellyfin-jetson container has to be ran as root, while the standard jellyfin image doesn't have to be.
sudo apt-get install cockpitUpdate and install nodejs (nodejs 10 has been in EOL since April 2021)
# requirements
sudo apt-get install -y ca-certificates curl gnupg
# add nodesource GPG key
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
# add the nodejs repository
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
# install nodejs
sudo apt-get update
sudo apt-get install -y nodejsNow you can build cockpit-podman from source
# requirements
sudo apti-get install -y gettext nodejs make
# clone the cockpit-podman repo
git clone https://github.com/cockpit-project/cockpit-podman
# apply the patch from the repo (patches/cockpit-podman.patch)
patch -p1 < cockpit-podman.patch
# build it
cd cockpit-podman
makesystemctl enable cockpit
systemctl start cockpitJellyfin's patched ffmpeg has no hardware codec support on Jetson boards.
You need jellyfin-ffmpeg-jetson, you can follow its build and installation guide:
Install requirements
sudo apt-get install -y cuda nvidia-l4t-jetson-multimedia-api cmakeBuild jellyfin-ffmpeg-jetson
git clone https://github.com/mguzzina/jellyfin-ffmpeg-jetson.giti -b v7.1.3-1-jetson
cd jellyfin-ffmpeg-jetson
mkdir dist
./build r35.3.1 arm64-native distYou should find a .deb file in the dist directory.
Build jellyfin-packaging-jetson
git clone https://github.com/mguzzina/jellyfin-packaging-jetson.git
cd jellyfin-packaging-jetson
cp <path-to-ffmpeg-deb> ./debs
./build.py 10.11.5 docker jetson --localThis will build a docker image similar to the official debian one, except with added nvmpi support.
Since the jetson addition is not officially supported, you should really have the double option of standard image and nvmpi one. In jellyfin/ you can find a jellyfin.yaml and a jellyfin-jetson.yaml as well as the two respective unit files in units/.