Installing L4T .deb packages over a Debian base system

Dear Experts,

I have a new Jetson Nano which is running OK with the standard Ubuntu image - but I’d prefer to run Debian.

I see that (all?) of the Nvidia customisation is in the form of a set of .deb packages. I’m also aware that in the past people have installed Debian on the TX1 (seehttps://wiki.debian.org/InstallingDebianOn/NVIDIA/Jetson-TX1). So I’m hoping that I could install install Debian and then install the L4T .deb packages. (I don’t need all of the Nvidia extras, mostly just OpenGL and related things.)

Has anyone here tried to do this? Is anyone aware of any major obstacles that I’m likely to encounter?

Thanks, Phil.

@nvidiadev1

Debian packages are usually not portable across Debian flavors, unfortunately. It really depends on the individual package. In any case, apply_binaries.sh in the BSP package can apply Nvidia’s software to non-Ubuntu rootfs by extracting the .deb packages instead of installing them.

YMMV. It’ll probably take quite a few hacks and OTA updates will likely be impossible. It’s explicitly not supported by Nvidia. You’re likely to be more successful with an Ubuntu Base rootfs. Still… even that is explicitly not supported.

Why do you want Debian? Depending on why you want it, it’s likely easier to modify the provided rootfs to your liking.

Thanks for the reply. Every other computer I have runs Debian (OK, I also have a Mac…) so I’d prefer to use it here too.

I have succeeded in booting Debian as follows:

  • Debootstrap (i.e. create a basic filesystem) on a USB flash drive.
  • Add a section to /boot/extlinux/extlinux.conf that uses that partition.
  • Reboot into Debian running on the Nvidia/Ubuntu kernel.

This has functional ethernet, USB and console.
So, to add e.g. the L4T graphics libraries (etc.) I think I have the choice of (a) apt-get install from within Debian, or (b) run apply_binaries.sh.
How far do you think I’ll get before I hit a wall ?!
(I’d like functional OpenGL ES + EGL Device; I don’t need X or Weston, or video or cuda. I might experiment with Vulkan later.)

@nvidiadev1

I don’t think the packages will install without modification. Last I checked some of them have scripts that check for a valid l4t rootfs before they succeed. You can try extracting, modifying, and repackaging them, but it’s probably easier to just extract them directly onto the rootfs using apply_binaries.sh and crossing your fingers.

You can also try to mock around whatever check there is. I would guess it’s something in /etc/ from the l4t rootfs to your own. More likely to suceed is the apply_binaries.sh, but I’ve never tried this on a debian rootfs. YMMV and i’d recommend reading the script first to see whether it’ll work with your specific rootfs. In any case, it’s unlikely that you’ll be able to get OTA updates working and if you do it’s likely they may break your system at some point. This means running without sometimes important securtiy updates which i wouldn’t recommend.

If you’re coming from Debian and wish a more stripped-down or custom experience, the vast majority of the packages names are the same so you can just apt-get install / remove / purge what you want.

I’ve had some success:
As mentioned above I debootstrapped onto a flash drive and got a basically-functional Debian system using the Nvidia/Ubuntu kernel.
I then tried the apply_binaries.sh script. It needs qemu installed. It fails due to unmet dependencies. But those can be installed by booting into the Debian system and installing things. After a few iterations I was left with two problems:

  • Something depends on libjpeg-turbo8, but the Debian package is named or versioned differently in some way. I worked around that by downloading and installing the Ubuntu 18.04 package; that installs fine on Debian because it only depends on libc.
  • The nvidia-l4t-init package wants to install /etc/systemd/sleep.conf, but the Debian systemd provides the same file. The magic to avoid that is “dpkg-divert --package nvidia-l4t-init --divert /etc/systemd/sleep.conf.distrib --rename /etc/systemd/sleep.conf”.

I am now able to boot into Debian and the prebuilt Nvidia graphics demos (for egldevice) work! Yay!

On Ubuntu at least it’s sudo apt install qemu-user-static.

Nice! Glad it works for you without too much fuss! Maybe update this thread if you find anything that doesn’t work?