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.


  1. air gaped, off-line
    https://en.wikipedia.org/wiki/Air_gap_(networking) ↩︎ ↩︎

  • Atemu@lemmy.ml
    link
    fedilink
    arrow-up
    4
    arrow-down
    1
    ·
    8 days ago

    If this is for a user programs rather than system components that must be managed by apt, you could use Nix.

    By its nature, it keeps track of all dependencies in a queryable format and Nix stores are actually quite portable; you can just

    nix copy /nix/store/6gd9yardd6qk9dkgdbmh1vnac0vmkh7d-ripgrep-14.1.1/ --to /mnt/USB-drive/
    

    and that will copy that store path aswell as any dependency (including transitive deps) to e.g. a USB drive.

    You’d then do the inverse in the target environment to do the opposite:

    nix copy /nix/store/6gd9yardd6qk9dkgdbmh1vnac0vmkh7d-ripgrep-14.1.1/ --from /mnt/USB-drive/
    

    And then /nix/store/6gd9yardd6qk9dkgdbmh1vnac0vmkh7d-ripgrep-14.1.1/ aswell as its entire runtime dependency tree would exist in the air-gapped system.

    Because Nix store paths are hermetic, that’s all you need to execute e.g. /nix/store/6gd9yardd6qk9dkgdbmh1vnac0vmkh7d-ripgrep-14.1.1/bin/rg.

    You’d obviously just adjust your $PATH accordingly rather than typing all of that out and typically would install this into what Nix refers to as a profile so that you have one path to add to your $PATH rather than one for each package.

    I used a single package here but you could build an entire environment of many packages to your liking and it’d be the exact same as far as Nix is concerned; it’s all store paths.

    You do need /nix/ to exist and be writeable in the target environment for this to work though.

    • SpongeB0B@programming.devOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      edit-2
      8 days ago

      🤩 Woo I didn’t know nix. It seem a better way to handle package !!! but so if I have already apt that handle my packages, is it compatible to use both on the same system !?

      Nix stores all packages in isolation from each other; as a result there are no /bin, /sbin, /lib or /usr directories and all packages are kept in /nix/store instead.

      • Laser@feddit.org
        link
        fedilink
        arrow-up
        2
        ·
        7 days ago

        Yes, nix complements your system’s package manager, but doesn’t replace it

          • Atemu@lemmy.ml
            link
            fedilink
            arrow-up
            1
            ·
            4 days ago

            Installing it offline could prove to be quite a challenge. If you don’t actually need Nix (the package manager) to work on your target system though, you could just not install Nix and use i.e. a static Nix binary to do the store path copying.