Hi,
I have an air gaped[1] device. ( Devuan )
How do you manage to install packages/software on off-line[1:1] device ?
I’ve heard of apt-offline
but it seem to bug and I don’t know if it’s still maintained (last release two years ago)
of course I’ve tried manually but the dependencies relations are too crazy to do that fully manually
Dependence tree (not complete even) to install for example apt-offline
├── Depends
│ ├── Depends
│ │ ├── Depends
│ │ │ ├── Depends
│ │ │ │ └── python3-dbg_3.9.2-3_amd64.deb
│ │ │ ├── libcurl4-gnutls-dev_7.74.0-1.3+deb11u14_amd64.deb
│ │ │ ├── python3-pycurl-dbg_7.43.0.6-5_amd64.deb
│ │ │ └── python-pycurl-doc_7.43.0.6-5_all.deb
│ │ ├── python3-httplib2_0.18.1-3_all.deb
│ │ └── python3-pycurl_7.43.0.6-5_amd64.deb
│ ├── iso-codes_4.6.0-1_all.deb
│ ├── python3-pysimplesoap_1.16.2-3_all.deb
│ └── python-apt-common_2.2.1_all.deb
├── python3-apt_2.2.1_amd64.deb
└── python3-debianbts_3.1.0_all.deb
Any ideas ?
Thanks.
air gaped, off-line
https://en.wikipedia.org/wiki/Air_gap_(networking) ↩︎ ↩︎
I’d just mirror the whole repo. All of Debian main for a single architecture is less than a terabyte. I imagine yours is similar.
and then I guess it can even be trimmed somewhat. delete the development packages, look through and filter the unneeded larger ones, …
Yes, that’s what I use to using
apt-mirror
. It also works great for any other apt repo.
If an appimage is available you could probably just move it across on a USB drive.
indeed
.appimage
are an amazing thing as they do not require any special runtime or installation process !
I guess I will have to do my own.appimage
of software that do not provide them
You might want to consider using Docker. You can build an image on your normal machine, export it as a file onto a USB stick, and then transfer it to your air-gapped machine, import it there. Then running it is just
docker run --rm my_image
You can do this for a whole bunch of programs in one image, or a separate image for each one.
I do it manually, but I don’t have a lot of dependencies. Download the main package, install it, check the error message for the package it needs, download the new package, install the main package again… For python stuff pip download will also get the dependencies. Maybe you can use the Debian website since it lists the package dependencies and allows you to download from the website the deb files. You can probably automate with a bash script some stuff.
I found this, maybe it is a suitable solution? https://unix.stackexchange.com/a/408348
Thank you very much @connaisseur@feddit.org
I have tried
apt-get -o Dir::Cache::archives="/to/path" install --download-only apt-offline
But it downloaded only the .deb of apt-offline and not all the dependence tree. Most probably because this machine have them already.
now, remain to force to download also all the dependency tree even if already installed…
You could setup a new, empty VM and use it as a download only machine for packages, although it makes the process a bit more complicated.
Yes, but it’s not reliable. because even if you use a bare linux vm to download the packages and dependency, you never know if the online will have already a dependence that the offline system do not have.
no, the only way is to force the dw of the already downloaded package.
Switch to a distro lineage whose package manager builds in the necessary facilities? Someone’s already mentioned Nix, and Gentoo has the
--fetchonly
switch for Portage which will download (but not install) everything required for a specified package including dependencies, so you can copy all of the files to an external drive at once.