Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature request - offline/airgap installation #478

Open
maaaaz opened this issue Apr 8, 2024 · 2 comments
Open

Feature request - offline/airgap installation #478

maaaaz opened this issue Apr 8, 2024 · 2 comments
Labels
enhancement New feature or request

Comments

@maaaaz
Copy link

maaaaz commented Apr 8, 2024

Hello there,

Thank you very much for this awesome project !

As you may imagine, a lot of forensics examination can only happen from offline workstations, where a pip install mvt is not feasible because of no Internet connection.

Could you provide, for instance on Github releases (and/or PyPi), a zip of all the wheels needed to install mvt on offline system ?
It would be really appreciated !

FYI, I managed to create such a zip following these instructions, specifically:

$ git clone https://github.com/mvt-project/mvt.git
$ cd mvt

$ pip wheel . -w wheels
Processing /sec/root/mvt
  Preparing metadata (setup.py) ... done
Collecting adb-shell>=0.4.3 (from mvt==2.5.0)
  Using cached adb_shell-0.4.4-py3-none-any.whl
Collecting appdirs>=1.4.4 (from mvt==2.5.0)
  Using cached appdirs-1.4.4-py2.py3-none-any.whl.metadata (9.0 kB)
Collecting click>=8.1.3 (from mvt==2.5.0)
  Using cached click-8.1.7-py3-none-any.whl.metadata (3.0 kB)
Collecting cryptography>=38.0.1 (from mvt==2.5.0)
  Using cached cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl.metadata (5.3 kB)
Collecting iOSbackup>=0.9.923 (from mvt==2.5.0)
  Using cached iOSbackup-0.9.925-py3-none-any.whl.metadata (20 kB)
Collecting libusb1>=3.0.0 (from mvt==2.5.0)
  Using cached libusb1-3.1.0-py3-none-any.whl.metadata (15 kB)
Collecting packaging>=21.3 (from mvt==2.5.0)
  Using cached packaging-24.0-py3-none-any.whl.metadata (3.2 kB)
Collecting pyahocorasick>=2.0.0 (from mvt==2.5.0)
  Using cached pyahocorasick-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (13 kB)
Collecting pyyaml>=6.0 (from mvt==2.5.0)
  Using cached PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.1 kB)
Collecting requests>=2.28.1 (from mvt==2.5.0)
  Using cached requests-2.31.0-py3-none-any.whl.metadata (4.6 kB)
Collecting rich>=12.6.0 (from mvt==2.5.0)
  Using cached rich-13.7.1-py3-none-any.whl.metadata (18 kB)
Collecting simplejson>=3.17.6 (from mvt==2.5.0)
  Using cached simplejson-3.19.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.1 kB)
Collecting tld>=0.12.6 (from mvt==2.5.0)
  Using cached tld-0.13-py2.py3-none-any.whl.metadata (9.4 kB)
Collecting pyasn1 (from adb-shell>=0.4.3->mvt==2.5.0)
  Using cached pyasn1-0.6.0-py2.py3-none-any.whl.metadata (8.3 kB)
Collecting rsa (from adb-shell>=0.4.3->mvt==2.5.0)
  Using cached rsa-4.9-py3-none-any.whl.metadata (4.2 kB)
Collecting cffi>=1.12 (from cryptography>=38.0.1->mvt==2.5.0)
  Using cached cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.5 kB)
Collecting NSKeyedUnArchiver (from iOSbackup>=0.9.923->mvt==2.5.0)
  Using cached NSKeyedUnArchiver-1.5-py3-none-any.whl.metadata (2.1 kB)
Collecting pycryptodome (from iOSbackup>=0.9.923->mvt==2.5.0)
  Using cached pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.4 kB)
Collecting charset-normalizer<4,>=2 (from requests>=2.28.1->mvt==2.5.0)
  Using cached charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (33 kB)
Collecting idna<4,>=2.5 (from requests>=2.28.1->mvt==2.5.0)
  Using cached idna-3.6-py3-none-any.whl.metadata (9.9 kB)
Collecting urllib3<3,>=1.21.1 (from requests>=2.28.1->mvt==2.5.0)
  Using cached urllib3-2.2.1-py3-none-any.whl.metadata (6.4 kB)
Collecting certifi>=2017.4.17 (from requests>=2.28.1->mvt==2.5.0)
  Using cached certifi-2024.2.2-py3-none-any.whl.metadata (2.2 kB)
Collecting markdown-it-py>=2.2.0 (from rich>=12.6.0->mvt==2.5.0)
  Using cached markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB)
Collecting pygments<3.0.0,>=2.13.0 (from rich>=12.6.0->mvt==2.5.0)
  Using cached pygments-2.17.2-py3-none-any.whl.metadata (2.6 kB)
Collecting pycparser (from cffi>=1.12->cryptography>=38.0.1->mvt==2.5.0)
  Using cached pycparser-2.22-py3-none-any.whl.metadata (943 bytes)
Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=12.6.0->mvt==2.5.0)
  Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)
Using cached appdirs-1.4.4-py2.py3-none-any.whl (9.6 kB)
Using cached click-8.1.7-py3-none-any.whl (97 kB)
Using cached cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl (4.6 MB)
Using cached iOSbackup-0.9.925-py3-none-any.whl (18 kB)
Using cached libusb1-3.1.0-py3-none-any.whl (62 kB)
Using cached packaging-24.0-py3-none-any.whl (53 kB)
Using cached pyahocorasick-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (118 kB)
Using cached PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (757 kB)
Using cached requests-2.31.0-py3-none-any.whl (62 kB)
Using cached rich-13.7.1-py3-none-any.whl (240 kB)
Using cached simplejson-3.19.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (144 kB)
Using cached tld-0.13-py2.py3-none-any.whl (263 kB)
Using cached certifi-2024.2.2-py3-none-any.whl (163 kB)
Using cached cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (464 kB)
Using cached charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (140 kB)
Using cached idna-3.6-py3-none-any.whl (61 kB)
Using cached markdown_it_py-3.0.0-py3-none-any.whl (87 kB)
Using cached pygments-2.17.2-py3-none-any.whl (1.2 MB)
Using cached urllib3-2.2.1-py3-none-any.whl (121 kB)
Using cached NSKeyedUnArchiver-1.5-py3-none-any.whl (3.5 kB)
Using cached pyasn1-0.6.0-py2.py3-none-any.whl (85 kB)
Using cached pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
Using cached rsa-4.9-py3-none-any.whl (34 kB)
Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Using cached pycparser-2.22-py3-none-any.whl (117 kB)
Saved ./wheels/adb_shell-0.4.4-py3-none-any.whl
Saved ./wheels/appdirs-1.4.4-py2.py3-none-any.whl
Saved ./wheels/click-8.1.7-py3-none-any.whl
Saved ./wheels/cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl
Saved ./wheels/iOSbackup-0.9.925-py3-none-any.whl
Saved ./wheels/libusb1-3.1.0-py3-none-any.whl
Saved ./wheels/packaging-24.0-py3-none-any.whl
Saved ./wheels/pyahocorasick-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Saved ./wheels/PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Saved ./wheels/requests-2.31.0-py3-none-any.whl
Saved ./wheels/rich-13.7.1-py3-none-any.whl
Saved ./wheels/simplejson-3.19.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Saved ./wheels/tld-0.13-py2.py3-none-any.whl
Saved ./wheels/certifi-2024.2.2-py3-none-any.whl
Saved ./wheels/cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Saved ./wheels/charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Saved ./wheels/idna-3.6-py3-none-any.whl
Saved ./wheels/markdown_it_py-3.0.0-py3-none-any.whl
Saved ./wheels/pygments-2.17.2-py3-none-any.whl
Saved ./wheels/urllib3-2.2.1-py3-none-any.whl
Saved ./wheels/NSKeyedUnArchiver-1.5-py3-none-any.whl
Saved ./wheels/pyasn1-0.6.0-py2.py3-none-any.whl
Saved ./wheels/pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Saved ./wheels/rsa-4.9-py3-none-any.whl
Saved ./wheels/mdurl-0.1.2-py3-none-any.whl
Saved ./wheels/pycparser-2.22-py3-none-any.whl
Building wheels for collected packages: mvt
  Building wheel for mvt (setup.py) ... done
  Created wheel for mvt: filename=mvt-2.5.0-py3-none-any.whl size=220928 sha256=0f8e7a9cf37bf9bb3a6fe3d7cdf2384d8b9cd33f125b80acc52f50c0f1104601
  Stored in directory: /tmp/pip-ephem-wheel-cache-y7rok20w/wheels/b9/0e/b4/c1c8db6ef65d0d69d234c7806007d903c804cbf7fb166cc31a
Successfully built mvt

If you zip the wheels folder, you have all dependencies gathered for offline installation, which you can do like this:

$ unzip wheels.zip

$ du -sh wheels/
83M     wheels/

$ cd wheels

$  pip install *.whl
Processing ./NSKeyedUnArchiver-1.5-py3-none-any.whl
Processing ./PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Processing ./adb_shell-0.4.4-py3-none-any.whl
Processing ./appdirs-1.4.4-py2.py3-none-any.whl
Processing ./certifi-2024.2.2-py3-none-any.whl
Processing ./cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Processing ./charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Processing ./click-8.1.7-py3-none-any.whl
Processing ./cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl
Processing ./iOSbackup-0.9.925-py3-none-any.whl
Processing ./idna-3.6-py3-none-any.whl
Processing ./libusb1-3.1.0-py3-none-any.whl
Processing ./markdown_it_py-3.0.0-py3-none-any.whl
Processing ./mdurl-0.1.2-py3-none-any.whl
Processing ./mvt-2.5.0-py3-none-any.whl
Processing ./packaging-24.0-py3-none-any.whl
Processing ./pyahocorasick-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Processing ./pyasn1-0.6.0-py2.py3-none-any.whl
Processing ./pycparser-2.22-py3-none-any.whl
Processing ./pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Processing ./pygments-2.17.2-py3-none-any.whl
Processing ./requests-2.31.0-py3-none-any.whl
Processing ./rich-13.7.1-py3-none-any.whl
Processing ./rsa-4.9-py3-none-any.whl
Processing ./simplejson-3.19.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Processing ./tld-0.13-py2.py3-none-any.whl
Processing ./urllib3-2.2.1-py3-none-any.whl
Installing collected packages: libusb1, appdirs, urllib3, tld, simplejson, PyYAML, pygments, pycryptodome, pycparser, pyasn1, pyahocorasick, packaging, NSKeyedUnArchiver, mdurl, idna, click, charset-normalizer, certifi, rsa, requests, markdown-it-py, iOSbackup, cffi, rich, cryptography, adb-shell, mvt
Successfully installed NSKeyedUnArchiver-1.5 PyYAML-6.0.1 adb-shell-0.4.4 appdirs-1.4.4 certifi-2024.2.2 cffi-1.16.0 charset-normalizer-3.3.2 click-8.1.7 cryptography-42.0.5 iOSbackup-0.9.925 idna-3.6 libusb1-3.1.0 markdown-it-py-3.0.0 mdurl-0.1.2 mvt-2.5.0 packaging-24.0 pyahocorasick-2.1.0 pyasn1-0.6.0 pycparser-2.22 pycryptodome-3.20.0 pygments-2.17.2 requests-2.31.0 rich-13.7.1 rsa-4.9 simplejson-3.19.2 tld-0.13 urllib3-2.2.1

Cheers!

@roaree
Copy link
Contributor

roaree commented Apr 9, 2024

Would like to learn more on the workflow here - would an offline docker image (.tar archive) also suffice for your use case? How are you loading the zip file onto the airgapped machine? I'd prefer not to maintain another install path if possible, but it sounds like airgapped installation could be something we might want to support in general.

@maaaaz
Copy link
Author

maaaaz commented Apr 9, 2024

Hello @roaree,

I don't know anything about Docker but it might be a solution for Docker aficionados, if and only if using a Docker pre-made image does not need an Internet connection to work.

The zip file is loaded with a USB thumb drive on the airgapped machine.

Cheers !

@roaree roaree added the enhancement New feature or request label Apr 16, 2024
@roaree roaree changed the title Please provide an all-in-one offline wheel zip ! Feature request - offline/airgap installation Apr 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants