I'm here because $JOB {defense industry} requires the use of a Memory Safe Language in certain projects. RUST is that language of choice
The problem with lots of these types of suggestions and Ideas and things I have read (found via GOOGLE) is this:
a) It is a partial solution
b) Rust and things have changed and I have to do things with other syntaxes
c) One thing i read, suggested using [registry] but it is no longer supported
what I would really like is this command sequence with these invented command line options:
Step 1: Run this "invented command"
TOOLNAME --mirror-crates-only \
--whitelist LIST_OF_CRATES.txt \
--mirror_dir_name SOME_DIRNAME
WHERE:
step 2: Run this command:
```TOOLNAME --mirror-tools-only --version 1.88.0 --version --1.89.0 \
--TARGET <name> --TARGET <name>
--mirror_dir_name SOME_DIRNAME
WHERE:
- I need to be able to specify multiple targets for the "rustup" part
- Examples include: ARM64, RiscV32bit, CortexM series, X86 Linux - etc.
- I need to be able to specify the version of RUST to mirror
step 3: Is on me - I transport "SOME_DIRNAME" into my closed environment.
Giving the IT group a TARGZ does not help. Why? Because everything that is in that directory must be hand inspected {Security requirement} and viewed by a human eyeball.
====
The remaining steps are in /on an "AIR GAPPED" network. No internet access.
The ONLY way things are put on this network is via "sneaker.net" + CDROM images.
Bringing source code in is an easy process, bringing a pre-built binary in raises way to many questions. ie: I'm doing embedded, so bring the source of "bindgen" into the room and build it is an easy task for me, - bringing a prebuilt binary oh hell no. That is not happening.
What is also very problematic is: "redhat" - installs "rustc" in very different place (a very non-rust-type location, ie: /usr/bin/rustc) and distributes other rust things in other random places.. GRR!!!
Step 4: In that closed environment, I can "ping" any SERVERNAME.local
Meaning: Think "old school" lan-party in a conference room with no internet connection but all machines can talk to each other over the local lan. "DNS" works for the "SERVERNAME.local" domain.
Other key things: On this issolated network, I would expect HTTP(not S) - if HTTPS is required, expect a self-signed certificate , and we would use GIT + SSH-KEYS for all GIT access so we can script/automate things.
Step 5: On that CARGO_SERVERNAME.local machine I run:
TOOLNAME --server --datadirectory SOME_DIRNAME
That server should be able to serve out all the files that where in that SOME_DIRNAME
Step 6: A simple means to explain to my users (10 to 20) - how to configure 'cargo' related so that it will connect to ONLY "SERVERNAME.local" - and nothing else
NOTE: We do not need to publish to that SERVERNAME.local - instead, we would "git clone/push/commit" - to some GITLAB (or GERRIT) server on that ".local" domain. Why? We would need to perform our own set of code reviews - and GITLAB/GERRIT etc - would provide that solution rather simply and within our current "approved development process".
step: 4/5/6 - could be emulated on linux with the tool: "unshare -n" which will shut down the network interfaces, see: unshare(1) - Linux manual page for more details.
My test environment is on my laptop using a VMWARE linux image - when I need to drop the the network to emulate the closed air-gapped room, I click and disable the VM network or re-enable it as needed.
But yea thats what I am dealing with.
And it is not a simple process.
Panamax has MANY of the features I need but it is missing the last little bit that makes it possible.
Yea, and I am facing the "i am very new to rust" problems.