Local Peer to peer ppa

Question:

I’m wondering if there is already a peer to peer ppa solution or just a peer to peer apt/deb solution to minimize access to ppa.launchpadcontent.net . To clarify this would be behind a firewall and just a LAN solution.

Due to the recent DDOS attacks my normal pool of test servers/laptops were in various states of ppa packages. I was also contributing to the ppa requests though very minimally by leaving automated patching requests to ppa running.

What I’ve Tried:

I was able to get a server updated and then disabled all ppas for all machines. I then wrote some ansible scripts with apt for my own custom internal WAN server/laptop patching for these deb updates missing from ppa. This is clearly a temp solution and also just my very small part in minimizing ppa requests.

Any thoughts ? I’m thinking @popey would have some suggestions ?

I think apt-cacher-ng might be of interest …

3 Likes

Fittingly enough, that link returns error 504, at present. :weary_face:
So let’s put the APT cache to good use:

apt show apt-cacher-ng

If you have the *.deb package cached on one machine, you can copy that deb package to another machine and have your default package manager on that machine use it to install the relevant software.

For example …

sudo apt install ./package_name.deb
2 Likes

That’s not how apt works. It expects package names and not actual .deb files. You can, however, install the latter with dpkg:

sudo dpkg -i /path/to/package.deb

But that won’t resolve dependencies, since that’s what APT does, so you’ll usually need to follow that up with:

apt -f install

Actually, it absolutely is how apt works. Indeed, it’s a very useful feature of apt.

If you pass apt install the path to an appropriate .deb file, it will not only install the deb, but will also fetch and install the dependencies required too. Something your dpkg command alone will not do. It saves the extra apt command you’re running there.

For (extreme) example, I download the steam deb from valve, and install it with apt, which results in apt pulling in all the graphical dependencies required to fulfil my request.

ubuntu@ubuntu:~$ wget https://repo.steampowered.com/steam/archive/stable/steam_latest.deb
--2026-05-05 23:05:53--  https://repo.steampowered.com/steam/archive/stable/steam_latest.deb
Resolving repo.steampowered.com (repo.steampowered.com)... 34.126.228.17, 2600:1900:8010:1da0::
Connecting to repo.steampowered.com (repo.steampowered.com)|34.126.228.17|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 20297688 (19M) [application/octet-stream]
Saving to: ‘steam_latest.deb’

steam_latest.deb                         100%[==================================================================================>]  19.36M  9.93MB/s    in 1.9s

2026-05-05 23:05:56 (9.93 MB/s) - ‘steam_latest.deb’ saved [20297688/20297688]

ubuntu@ubuntu:~$ sudo apt install ./steam_latest.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'steam-launcher' instead of './steam_latest.deb'
The following additional packages will be installed:
  adwaita-icon-theme alsa-topology-conf alsa-ucm-conf apparmor at-spi2-common at-spi2-core bubblewrap cpp cpp-13 cpp-13-x86-64-linux-gnu cpp-x86-64-linux-gnu
  dconf-gsettings-backend dconf-service fontconfig fontconfig-config fonts-dejavu-core fonts-dejavu-mono fonts-liberation fonts-liberation-sans-narrow gcc-13-base
  gcc-14-base:i386 gsettings-desktop-schemas gstreamer1.0-gl gstreamer1.0-plugins-base gtk-update-icon-cache hicolor-icon-theme humanity-icon-theme i965-va-driver
  i965-va-driver:i386 intel-media-va-driver intel-media-va-driver:i386 libadwaita-1-0 libaom3 libaom3:i386 libapparmor1 libapparmor1:i386 libasound2-data
  libasound2-plugins libasound2-plugins:i386 libasound2t64 libasound2t64:i386 libasyncns0 libasyncns0:i386 libatk-bridge2.0-0t64 libatk-bridge2.0-0t64:i386
  libatk1.0-0t64 libatk1.0-0t64:i386 libatomic1:i386 libatspi2.0-0t64 libatspi2.0-0t64:i386 libauthen-sasl-perl libavahi-client3 libavahi-client3:i386
  libavahi-common-data libavahi-common-data:i386 libavahi-common3 libavahi-common3:i386 libavcodec60 libavcodec60:i386 libavutil58 libavutil58:i386 libblkid1:i386
  libbrotli1:i386 libbsd0:i386 libbz2-1.0:i386 libc6:i386 libcairo-gobject2 libcairo-gobject2:i386 libcairo-script-interpreter2 libcairo2 libcairo2:i386 libcap2
  libcap2:i386 libcap2-bin libcdparanoia0 libclone-perl libcodec2-1.2 libcodec2-1.2:i386 libcolord2 libcolord2:i386 libcom-err2:i386 libcrypt1:i386 libcups2t64
  libcups2t64:i386 libdata-dump-perl libdatrie1 libdatrie1:i386 libdav1d7 libdav1d7:i386 libdb5.3t64:i386 libdbus-1-3:i386 libdconf1 libdecor-0-0
  libdecor-0-0:i386 libdecor-0-plugin-1-gtk libdecor-0-plugin-1-gtk:i386 libdeflate0 libdeflate0:i386 libdrm-amdgpu1 libdrm-amdgpu1:i386 libdrm-intel1
  libdrm-intel1:i386 libdrm2:i386 libedit2:i386 libegl-mesa0 libegl-mesa0:i386 libegl1 libegl1:i386 libelf1t64:i386 libencode-locale-perl libepoxy0 libepoxy0:i386
  libexpat1:i386 libffi8:i386 libfile-basedir-perl libfile-desktopentry-perl libfile-listing-perl libfile-mimeinfo-perl libflac12t64 libflac12t64:i386
  libfont-afm-perl libfontconfig1 libfontconfig1:i386 libfreetype6 libfreetype6:i386 libfribidi0:i386 libgbm1 libgbm1:i386 libgcc-s1:i386 libgcrypt20:i386
  libgdk-pixbuf-2.0-0 libgdk-pixbuf-2.0-0:i386 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgl1 libgl1:i386 libgl1-mesa-dri libgl1-mesa-dri:i386 libgles2
  libglib2.0-0t64:i386 libglvnd0 libglvnd0:i386 libglx-mesa0 libglx-mesa0:i386 libglx0 libglx0:i386 libgmp10:i386 libgnutls30t64:i386 libgomp1 libgomp1:i386
  libgpg-error0:i386 libgraphene-1.0-0 libgraphite2-3 libgraphite2-3:i386 libgsm1 libgsm1:i386 libgssapi-krb5-2:i386 libgstreamer-gl1.0-0
  libgstreamer-plugins-base1.0-0 libgtk-3-0t64 libgtk-3-0t64:i386 libgtk-3-bin libgtk-3-common libgtk-4-1 libgtk-4-bin libgtk-4-common libgtk-4-media-gstreamer
  libharfbuzz0b libharfbuzz0b:i386 libhogweed6t64:i386 libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl
  libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libhwy1t64 libice6 libicu74:i386 libidn2-0:i386
  libigdgmm12 libigdgmm12:i386 libio-html-perl libio-socket-ssl-perl libio-stringy-perl libipc-system-simple-perl libisl23 libjack-jackd2-0 libjack-jackd2-0:i386
  libjbig0 libjbig0:i386 libjpeg-turbo8 libjpeg-turbo8:i386 libjpeg8 libjpeg8:i386 libjxl0.7 libk5crypto3:i386 libkeyutils1:i386 libkrb5-3:i386
  libkrb5support0:i386 liblcms2-2 liblcms2-2:i386 liblerc4 libllvm20 libllvm20:i386 liblwp-mediatypes-perl liblwp-protocol-https-perl liblz4-1:i386 liblzma5:i386
  libmailtools-perl libmd0:i386 libmount1:i386 libmp3lame0 libmp3lame0:i386 libmpc3 libmpg123-0t64 libmpg123-0t64:i386 libnet-dbus-perl libnet-http-perl
  libnet-smtp-ssl-perl libnet-ssleay-perl libnettle8t64:i386 libnm0 libnm0:i386 libnss-systemd libnuma1:i386 libogg0 libogg0:i386 libopenjp2-7 libopenjp2-7:i386
  libopus0 libopus0:i386 liborc-0.4-0t64 libp11-kit0:i386 libpam-cap libpam-systemd libpango-1.0-0 libpango-1.0-0:i386 libpangocairo-1.0-0
  libpangocairo-1.0-0:i386 libpangoft2-1.0-0 libpangoft2-1.0-0:i386 libpciaccess0 libpciaccess0:i386 libpcre2-8-0:i386 libpipewire-0.3-0t64 libpipewire-0.3-common
  libpixman-1-0 libpixman-1-0:i386 libpng16-16t64:i386 libpolkit-agent-1-0 libpolkit-gobject-1-0 libpulse0 libpulse0:i386 librav1e0 librsvg2-2 librsvg2-2:i386
  librsvg2-common librsvg2-common:i386 libsamplerate0 libsamplerate0:i386 libsdl2-2.0-0 libsdl2-2.0-0:i386 libselinux1:i386 libsensors5:i386 libsharpyuv0
  libsharpyuv0:i386 libshine3 libshine3:i386 libsm6 libsnappy1v5 libsnappy1v5:i386 libsndfile1 libsndfile1:i386 libsoxr0 libsoxr0:i386 libspa-0.2-modules
  libspeex1 libspeex1:i386 libspeexdsp1 libspeexdsp1:i386 libssl3t64 libssl3t64:i386 libstdc++6:i386 libsvtav1enc1d1 libsvtav1enc1d1:i386 libswresample4
  libswresample4:i386 libsystemd-shared libsystemd0 libsystemd0:i386 libtasn1-6:i386 libthai-data libthai0 libthai0:i386 libtheora0 libtheora0:i386
  libtie-ixhash-perl libtiff6 libtiff6:i386 libtimedate-perl libtinfo6:i386 libtry-tiny-perl libtwolame0 libtwolame0:i386 libudev1 libudev1:i386
  libunistring5:i386 liburi-perl libusb-1.0-0:i386 libva-drm2 libva-drm2:i386 libva-glx2 libva-glx2:i386 libva-x11-2 libva-x11-2:i386 libva2 libva2:i386 libvdpau1
  libvdpau1:i386 libvisual-0.4-0 libvorbis0a libvorbis0a:i386 libvorbisenc2 libvorbisenc2:i386 libvpl2 libvpx9 libvpx9:i386 libvulkan1 libvulkan1:i386
  libwayland-client0 libwayland-client0:i386 libwayland-cursor0 libwayland-cursor0:i386 libwayland-egl1 libwayland-egl1:i386 libwebp7 libwebp7:i386 libwebpmux3
  libwebpmux3:i386 libwebrtc-audio-processing1 libwww-perl libwww-robotrules-perl libx11-6:i386 libx11-protocol-perl libx11-xcb1 libx11-xcb1:i386 libx264-164
  libx264-164:i386 libx265-199 libx265-199:i386 libxau6:i386 libxaw7 libxcb-dri2-0 libxcb-dri2-0:i386 libxcb-dri3-0 libxcb-dri3-0:i386 libxcb-glx0
  libxcb-glx0:i386 libxcb-present0 libxcb-present0:i386 libxcb-randr0 libxcb-randr0:i386 libxcb-render0 libxcb-render0:i386 libxcb-shape0 libxcb-shm0
  libxcb-shm0:i386 libxcb-sync1 libxcb-sync1:i386 libxcb-xfixes0 libxcb-xfixes0:i386 libxcb1:i386 libxcomposite1 libxcomposite1:i386 libxcursor1 libxcursor1:i386
  libxdamage1 libxdamage1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3 libxfixes3:i386 libxft2 libxi6 libxi6:i386 libxinerama1 libxinerama1:i386
  libxkbcommon0:i386 libxkbfile1 libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxml2:i386 libxmu6 libxpm4 libxrandr2 libxrandr2:i386 libxrender1
  libxrender1:i386 libxshmfence1 libxshmfence1:i386 libxss1 libxss1:i386 libxt6t64 libxtst6 libxv1 libxvidcore4 libxvidcore4:i386 libxxf86dga1 libxxf86vm1
  libxxf86vm1:i386 libzstd1:i386 libzvbi-common libzvbi0t64 libzvbi0t64:i386 mesa-libgallium mesa-libgallium:i386 mesa-va-drivers mesa-va-drivers:i386
  mesa-vdpau-drivers mesa-vdpau-drivers:i386 mesa-vulkan-drivers mesa-vulkan-drivers:i386 ocl-icd-libopencl1 ocl-icd-libopencl1:i386 openssl perl-openssl-defaults
  pkexec polkitd session-migration steam-libs steam-libs:i386 steam-libs-i386:i386 systemd systemd-dev systemd-resolved systemd-sysv systemd-timesyncd ubuntu-mono
  udev va-driver-all va-driver-all:i386 vdpau-driver-all vdpau-driver-all:i386 x11-common x11-utils x11-xserver-utils xbitmaps xdg-desktop-portal
  xdg-desktop-portal-gtk xdg-utils xterm zenity zenity-common zlib1g:i386
Suggested packages:
  apparmor-profiles-extra apparmor-utils cpp-doc gcc-13-locales cpp-13-doc gvfs i965-va-driver-shaders i965-va-driver-shaders:i386 alsa-utils libdigest-hmac-perl
  libgssapi-perl libcuda1 libnvcuvid1 libnvidia-encode1 libcuda1:i386 libnvcuvid1:i386 libnvidia-encode1:i386 glibc-doc:i386 locales:i386 libnss-nis:i386
  libnss-nisplus:i386 colord colord:i386 cups-common cups-common:i386 rng-tools:i386 low-memory-monitor:i386 gnutls-bin:i386 krb5-doc:i386 krb5-user:i386
  libvisual-0.4-plugins gvfs:i386 libio-compress-brotli-perl jackd2 jackd2:i386 liblcms2-utils liblcms2-utils:i386 libcrypt-ssleay-perl opus-tools opus-tools:i386
  pipewire pulseaudio pulseaudio:i386 librsvg2-bin librsvg2-bin:i386 lm-sensors:i386 speex speex:i386 libsub-name-perl libbusiness-isbn-perl libregexp-ipv6-perl
  libauthen-ntlm-perl libunicode-map8-perl libunicode-string-perl xml-twig-tools opencl-icd opencl-icd:i386 debhelper polkitd-pkla libudev0 nvidia-driver-libs
  nvidia-vulkan-icd gtk2-engines-pixbuf:i386 libgtk2.0-0:i386 libudev0:i386 nvidia-driver-libs:i386 nvidia-vulkan-icd:i386 pipewire:i386 systemd-container
  systemd-homed systemd-userdbd systemd-boot libqrencode4 libtss2-rc0 libvdpau-va-gl1 libvdpau-va-gl1:i386 mesa-utils nickle cairo-5c xorg-docs-core
  accountsservice evince xdg-desktop-portal-gnome xfonts-cyrillic
Recommended packages:
  luit luit | x11-utils
The following NEW packages will be installed:
  adwaita-icon-theme alsa-topology-conf alsa-ucm-conf at-spi2-common at-spi2-core bubblewrap cpp cpp-13 cpp-13-x86-64-linux-gnu cpp-x86-64-linux-gnu
  dconf-gsettings-backend dconf-service fontconfig fontconfig-config fonts-dejavu-core fonts-dejavu-mono fonts-liberation fonts-liberation-sans-narrow gcc-13-base
  gcc-14-base:i386 gsettings-desktop-schemas gstreamer1.0-gl gstreamer1.0-plugins-base gtk-update-icon-cache hicolor-icon-theme humanity-icon-theme i965-va-driver
  i965-va-driver:i386 intel-media-va-driver intel-media-va-driver:i386 libadwaita-1-0 libaom3 libaom3:i386 libapparmor1:i386 libasound2-data libasound2-plugins
  libasound2-plugins:i386 libasound2t64 libasound2t64:i386 libasyncns0 libasyncns0:i386 libatk-bridge2.0-0t64 libatk-bridge2.0-0t64:i386 libatk1.0-0t64
  libatk1.0-0t64:i386 libatomic1:i386 libatspi2.0-0t64 libatspi2.0-0t64:i386 libauthen-sasl-perl libavahi-client3 libavahi-client3:i386 libavahi-common-data
  libavahi-common-data:i386 libavahi-common3 libavahi-common3:i386 libavcodec60 libavcodec60:i386 libavutil58 libavutil58:i386 libblkid1:i386 libbrotli1:i386
  libbsd0:i386 libbz2-1.0:i386 libc6:i386 libcairo-gobject2 libcairo-gobject2:i386 libcairo-script-interpreter2 libcairo2 libcairo2:i386 libcap2:i386
  libcdparanoia0 libclone-perl libcodec2-1.2 libcodec2-1.2:i386 libcolord2 libcolord2:i386 libcom-err2:i386 libcrypt1:i386 libcups2t64 libcups2t64:i386
  libdata-dump-perl libdatrie1 libdatrie1:i386 libdav1d7 libdav1d7:i386 libdb5.3t64:i386 libdbus-1-3:i386 libdconf1 libdecor-0-0 libdecor-0-0:i386
  libdecor-0-plugin-1-gtk libdecor-0-plugin-1-gtk:i386 libdeflate0 libdeflate0:i386 libdrm-amdgpu1 libdrm-amdgpu1:i386 libdrm-intel1 libdrm-intel1:i386
  libdrm2:i386 libedit2:i386 libegl-mesa0 libegl-mesa0:i386 libegl1 libegl1:i386 libelf1t64:i386 libencode-locale-perl libepoxy0 libepoxy0:i386 libexpat1:i386
  libffi8:i386 libfile-basedir-perl libfile-desktopentry-perl libfile-listing-perl libfile-mimeinfo-perl libflac12t64 libflac12t64:i386 libfont-afm-perl
  libfontconfig1 libfontconfig1:i386 libfreetype6 libfreetype6:i386 libfribidi0:i386 libgbm1 libgbm1:i386 libgcc-s1:i386 libgcrypt20:i386 libgdk-pixbuf-2.0-0
  libgdk-pixbuf-2.0-0:i386 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common libgl1 libgl1:i386 libgl1-mesa-dri libgl1-mesa-dri:i386 libgles2 libglib2.0-0t64:i386
  libglvnd0 libglvnd0:i386 libglx-mesa0 libglx-mesa0:i386 libglx0 libglx0:i386 libgmp10:i386 libgnutls30t64:i386 libgomp1 libgomp1:i386 libgpg-error0:i386
  libgraphene-1.0-0 libgraphite2-3 libgraphite2-3:i386 libgsm1 libgsm1:i386 libgssapi-krb5-2:i386 libgstreamer-gl1.0-0 libgstreamer-plugins-base1.0-0
  libgtk-3-0t64 libgtk-3-0t64:i386 libgtk-3-bin libgtk-3-common libgtk-4-1 libgtk-4-bin libgtk-4-common libgtk-4-media-gstreamer libharfbuzz0b libharfbuzz0b:i386
  libhogweed6t64:i386 libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl libhttp-daemon-perl
  libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libhwy1t64 libice6 libicu74:i386 libidn2-0:i386 libigdgmm12 libigdgmm12:i386 libio-html-perl
  libio-socket-ssl-perl libio-stringy-perl libipc-system-simple-perl libisl23 libjack-jackd2-0 libjack-jackd2-0:i386 libjbig0 libjbig0:i386 libjpeg-turbo8
  libjpeg-turbo8:i386 libjpeg8 libjpeg8:i386 libjxl0.7 libk5crypto3:i386 libkeyutils1:i386 libkrb5-3:i386 libkrb5support0:i386 liblcms2-2 liblcms2-2:i386 liblerc4
  libllvm20 libllvm20:i386 liblwp-mediatypes-perl liblwp-protocol-https-perl liblz4-1:i386 liblzma5:i386 libmailtools-perl libmd0:i386 libmount1:i386 libmp3lame0
  libmp3lame0:i386 libmpc3 libmpg123-0t64 libmpg123-0t64:i386 libnet-dbus-perl libnet-http-perl libnet-smtp-ssl-perl libnet-ssleay-perl libnettle8t64:i386 libnm0
  libnm0:i386 libnuma1:i386 libogg0 libogg0:i386 libopenjp2-7 libopenjp2-7:i386 libopus0 libopus0:i386 liborc-0.4-0t64 libp11-kit0:i386 libpango-1.0-0
  libpango-1.0-0:i386 libpangocairo-1.0-0 libpangocairo-1.0-0:i386 libpangoft2-1.0-0 libpangoft2-1.0-0:i386 libpciaccess0 libpciaccess0:i386 libpcre2-8-0:i386
  libpipewire-0.3-0t64 libpipewire-0.3-common libpixman-1-0 libpixman-1-0:i386 libpng16-16t64:i386 libpulse0 libpulse0:i386 librav1e0 librsvg2-2 librsvg2-2:i386
  librsvg2-common librsvg2-common:i386 libsamplerate0 libsamplerate0:i386 libsdl2-2.0-0 libsdl2-2.0-0:i386 libselinux1:i386 libsensors5:i386 libsharpyuv0
  libsharpyuv0:i386 libshine3 libshine3:i386 libsm6 libsnappy1v5 libsnappy1v5:i386 libsndfile1 libsndfile1:i386 libsoxr0 libsoxr0:i386 libspa-0.2-modules
  libspeex1 libspeex1:i386 libspeexdsp1 libspeexdsp1:i386 libssl3t64:i386 libstdc++6:i386 libsvtav1enc1d1 libsvtav1enc1d1:i386 libswresample4 libswresample4:i386
  libsystemd0:i386 libtasn1-6:i386 libthai-data libthai0 libthai0:i386 libtheora0 libtheora0:i386 libtie-ixhash-perl libtiff6 libtiff6:i386 libtimedate-perl
  libtinfo6:i386 libtry-tiny-perl libtwolame0 libtwolame0:i386 libudev1:i386 libunistring5:i386 liburi-perl libusb-1.0-0:i386 libva-drm2 libva-drm2:i386
  libva-glx2 libva-glx2:i386 libva-x11-2 libva-x11-2:i386 libva2 libva2:i386 libvdpau1 libvdpau1:i386 libvisual-0.4-0 libvorbis0a libvorbis0a:i386 libvorbisenc2
  libvorbisenc2:i386 libvpl2 libvpx9 libvpx9:i386 libvulkan1 libvulkan1:i386 libwayland-client0 libwayland-client0:i386 libwayland-cursor0 libwayland-cursor0:i386
  libwayland-egl1 libwayland-egl1:i386 libwebp7 libwebp7:i386 libwebpmux3 libwebpmux3:i386 libwebrtc-audio-processing1 libwww-perl libwww-robotrules-perl
  libx11-6:i386 libx11-protocol-perl libx11-xcb1 libx11-xcb1:i386 libx264-164 libx264-164:i386 libx265-199 libx265-199:i386 libxau6:i386 libxaw7 libxcb-dri2-0
  libxcb-dri2-0:i386 libxcb-dri3-0 libxcb-dri3-0:i386 libxcb-glx0 libxcb-glx0:i386 libxcb-present0 libxcb-present0:i386 libxcb-randr0 libxcb-randr0:i386
  libxcb-render0 libxcb-render0:i386 libxcb-shape0 libxcb-shm0 libxcb-shm0:i386 libxcb-sync1 libxcb-sync1:i386 libxcb-xfixes0 libxcb-xfixes0:i386 libxcb1:i386
  libxcomposite1 libxcomposite1:i386 libxcursor1 libxcursor1:i386 libxdamage1 libxdamage1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3 libxfixes3:i386 libxft2
  libxi6 libxi6:i386 libxinerama1 libxinerama1:i386 libxkbcommon0:i386 libxkbfile1 libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxml2:i386
  libxmu6 libxpm4 libxrandr2 libxrandr2:i386 libxrender1 libxrender1:i386 libxshmfence1 libxshmfence1:i386 libxss1 libxss1:i386 libxt6t64 libxtst6 libxv1
  libxvidcore4 libxvidcore4:i386 libxxf86dga1 libxxf86vm1 libxxf86vm1:i386 libzstd1:i386 libzvbi-common libzvbi0t64 libzvbi0t64:i386 mesa-libgallium
  mesa-libgallium:i386 mesa-va-drivers mesa-va-drivers:i386 mesa-vdpau-drivers mesa-vdpau-drivers:i386 mesa-vulkan-drivers mesa-vulkan-drivers:i386
  ocl-icd-libopencl1 ocl-icd-libopencl1:i386 perl-openssl-defaults pkexec session-migration steam-launcher steam-libs steam-libs:i386 steam-libs-i386:i386
  ubuntu-mono va-driver-all va-driver-all:i386 vdpau-driver-all vdpau-driver-all:i386 x11-common x11-utils x11-xserver-utils xbitmaps xdg-desktop-portal
  xdg-desktop-portal-gtk xdg-utils xterm zenity zenity-common zlib1g:i386
The following packages will be upgraded:
  apparmor libapparmor1 libcap2 libcap2-bin libnss-systemd libpam-cap libpam-systemd libpolkit-agent-1-0 libpolkit-gobject-1-0 libssl3t64 libsystemd-shared
  libsystemd0 libudev1 openssl polkitd systemd systemd-dev systemd-resolved systemd-sysv systemd-timesyncd udev
21 upgraded, 440 newly installed, 0 to remove and 50 not upgraded.
Need to get 287 MB/308 MB of archives.
After this operation, 1121 MB of additional disk space will be used.
Do you want to continue? [Y/n]
2 Likes

That’s not what my testing showed:

$ sudo apt install ./mupdf-tools_1.23.10+ds1-1ubuntu0.1\~esm1_amd64.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'mupdf-tools' instead of './mupdf-tools_1.23.10+ds1-1ubuntu0.1~esm1_amd64.deb'
The following NEW packages will be installed:
  mupdf-tools
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/49,3 MB of archives.
After this operation, 88,5 MB of additional disk space will be used.
Selecting previously unselected package mupdf-tools.
(Reading database ... 598325 files and directories currently installed.)
Preparing to unpack .../mupdf-tools_1.23.10+ds1-1ubuntu0.1~esm1_amd64.deb ...
Unpacking mupdf-tools (1.23.10+ds1-1ubuntu0.1~esm1) ...
Setting up mupdf-tools (1.23.10+ds1-1ubuntu0.1~esm1) ...
Processing triggers for man-db (2.12.0-4build2) ...
Scanning processes...
Scanning processor microcode...
Scanning linux images...

Running kernel seems to be up-to-date.

The processor microcode seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.

Note the line that says:

Note, selecting 'mupdf-tools' instead of './mupdf-tools_1.23.10+ds1-1ubuntu0.1~esm1_amd64.deb'

That file was taken from /var/cache/apt/archives.

And this is what apt-get(8) says on the matter:

install
           install is followed by one or more packages desired for installation or
           upgrading. Each package is a package name, not a fully qualified filename
           (for instance, in a Debian system, apt-utils would be the argument
           provided, not apt-utils_2.8.3_amd64.deb).

How do you know apt took it from /var/cache/apt/archives and not from the folder you pointed it at?

You can prove that by removing the files from /var/cache/apt/archives, remove the installed package, and doing the install command again.

Also, you gave us the command line options for apt-get, not apt.

Using your package as an example, I downloaded a random deb, and used apt to install it. There’s nothing in /var/cache/apt/archives, it’s using the deb I gave it.

ubuntu@ubuntu:~$ ls -l mupdf-tools_1.23.10+ds1-1build3_amd64.deb
-rw-r--r-- 1 ubuntu ubuntu 49338050 Apr 15  2024 mupdf-tools_1.23.10+ds1-1build3_amd64.deb
ubuntu@ubuntu:~$ ls -l /var/cache/apt/archives
total 1
-rw-r----- 1 root root 0 Mar 21 13:14 lock
drwx------ 2 _apt root 2 May  5 23:03 partial
ubuntu@ubuntu:~$ sudo apt install ./mupdf-tools_1.23.10+ds1-1build3_amd64.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'mupdf-tools' instead of './mupdf-tools_1.23.10+ds1-1build3_amd64.deb'
The following additional packages will be installed:
  libfreetype6 libgraphite2-3 libgumbo2 libharfbuzz0b libjbig2dec0 libjpeg-turbo8 libjpeg8 libmujs3 libopenjp2-7
The following NEW packages will be installed:
  libfreetype6 libgraphite2-3 libgumbo2 libharfbuzz0b libjbig2dec0 libjpeg-turbo8 libjpeg8 libmujs3 libopenjp2-7 mupdf-tools
0 upgraded, 10 newly installed, 0 to remove and 71 not upgraded.
Need to get 50.9 MB of archives.
After this operation, 92.7 MB of additional disk space will be used.
Do you want to continue? [Y/n]

The line you quoted doesn’t mean what you assume it means:

Note, selecting 'mupdf-tools' instead of './mupdf-tools_1.23.10+ds1-1build3_amd64.deb'

It’s just informing you of the actual package name that will be used for dependency calculations, and what it will show up as once installed. i.e. when you install it, then use apt or dpkg to list installed packages, you will see mupdf-tools not mupdf-tools_1.23.10+ds1-1build3_amd64.deb in the output.

Similarly in my output above, it says:

Note, selecting 'steam-launcher' instead of './steam_latest.deb'

Because the package name is steam-launcher, while the filename is steam_latest.deb (exactly as it came from the valve website).

Here it is post-install:

ubuntu@ubuntu:~$ dpkg -l steam-launcher
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-====================================================
ii  steam-launcher 1:1.0.0.85   amd64        Launcher for the Steam software distribution service

Installed as steam-launcher, as discovered from the steam_latest.deb file. Here’s proof it was manually installed - by apt - just as if it had been installed with dpkg.

ubuntu@ubuntu:~$ apt-cache policy steam-launcher
steam-launcher:
  Installed: 1:1.0.0.85
  Candidate: 1:1.0.0.85
  Version table:
 *** 1:1.0.0.85 100
        100 /var/lib/dpkg/status

Indeed you can even rename the .deb file to anything you like, and you’ll see the same kind of thing:

ubuntu@ubuntu:~$ mv mupdf-tools_1.23.10+ds1-1build3_amd64.deb foo_bar_baz_nonsense_nobody_cares.deb
ubuntu@ubuntu:~$ sudo apt install ./foo_bar_baz_nonsense_nobody_cares.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'mupdf-tools' instead of './foo_bar_baz_nonsense_nobody_cares.deb'
The following additional packages will be installed:
  libfreetype6 libgraphite2-3 libgumbo2 libharfbuzz0b libjbig2dec0 libjpeg-turbo8 libjpeg8 libmujs3 libopenjp2-7
The following NEW packages will be installed:
  libfreetype6 libgraphite2-3 libgumbo2 libharfbuzz0b libjbig2dec0 libjpeg-turbo8 libjpeg8 libmujs3 libopenjp2-7 mupdf-tools
0 upgraded, 10 newly installed, 0 to remove and 71 not upgraded.
Need to get 50.9 MB of archives.
After this operation, 92.7 MB of additional disk space will be used.
Do you want to continue? [Y/n]
1 Like

I meant to say:

cd /var/cache/apt/archives
sudo apt install ./...

:wink:

And I know it just took the file to find the best suited package from the cache:

sudo apt install ./mupdf-tools_1.23.10+ds1-1ubuntu0.1\~esm1_amd64.deb
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'mupdf-tools' instead of './mupdf-tools_1.23.10+ds1-1ubuntu0.1~esm1_amd64.deb'
The following NEW packages will be installed:
  mupdf-tools
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 49,3 MB of archives.
After this operation, 88,5 MB of additional disk space will be used.
Get:1 https://esm.ubuntu.com/apps/ubuntu noble-apps-security/main amd64 mupdf-tools amd64 1.23.10+ds1-1ubuntu0.1~esm1 [49,3 MB]
Fetched 49,3 MB in 9s (5.387 kB/s)

See how it downloads the file from the archive.

I think you’re colossally missing the point, perhaps intentionally.

Fact is, you can point apt at a local deb, and have it, and the depdencies installed, just as @ericmarceau suggested in his post.

A bit uncalled for, but you’re right; I did miss that while focusing on the file not actually being installed. :innocent:

I’ll just drop this here (though I think it has been discontinued due to the protocol limitations described on the page, so it is more for historical/informational reasons)

https://wiki.debian.org/DebTorrent

2 Likes

Wow that’s cool. I never knew debtorrent existed. Ah back when bandwidth was expensive….