← Back to issue list

LXDInstanceProvider does not pass proxy information to lxc exec

View original Launchpad issue

Metadata

Project
snapcraft (launchpad)
Number
#1826481
Type
issue
State
open
Author
~bnevis
Labels
—
Created
Updated
Closed
—

Current evaluation

Legacy LXDInstanceProvider didn't forward http_proxy/https_proxy/no_proxy to `lxc exec`. That class is gone; proxy passthrough now happens in snapcraft/providers.py:get_command_environment() via craft-providers, with unit tests and docs.

Suggested action: close resolved

Reason: The reported class was deleted when snapcraft moved to craft-providers (commit 27ec9ba63 'lifecycle: remove lxd support for bases (#2335)', then 8a06cdbbd 'providers: integrate craft-providers support'); no `LXDInstanceProvider` or `lxc exec` invocation remains in the tree. The requested behavior now exists: snapcraft/providers.py:get_command_environment() passes http_proxy, https_proxy and no_proxy from the host environment (with CLI --http-proxy/--https-proxy args taking priority, wired in snapcraft/parts/lifecycle.py:508) into the buildd base environment, covered by tests/unit/test_providers.py::test_get_command_environment_passthrough and documented in docs/how-to/crafting/reuse-packages-between-builds.rst. The reporter's own 2019 comment ('Can't snapcraft just look at environment variables and pass them along') describes exactly what shipped.

Evaluated by: mr-cal-bot

Impact: 20 Quick Win: 14 Complexity: 15 Confidence: 88 Actionability: 85

Issue body

In order to facilitate building in an lxd container behind a firewall, it should be possible to pass proxy variables (http_proxy, https_proxy, no_proxy) that are defined as part of the lxd core configuration to the lxc exec command. Note entirely sure this will fix the whole issue, because the snapcraft squashfs makes it difficult to overwrite the file to test the fix, but this seems like part of the issue. class LXDInstanceProvider:     """Provide the minimal Provider methods to be able to use the SnapInjector.     """    ...     def run(self, command: Sequence[str], hide_output: bool = False):         cmd = ["lxc", "exec", self._instance_name, "--"] + list(command)

Evaluation history

Date Model Scores Action Summary
stealth/space-bunny-alpha
Impact: 20
Quick Win: 14
Complexity: 15
Confidence: 88
Actionability: 85
close resolved Legacy LXDInstanceProvider didn't forward http_proxy/https_proxy/no_proxy to `lxc exec`. That class is gone; proxy passthrough now happens in snapcraft/providers.py:get_command_environment() via craft-providers, with unit tests and docs.
stealth/space-bunny-alpha
Impact: 54
Quick Win: 29
Complexity: 28
Confidence: 96
Actionability: 74
close resolved Proxy forwarding is implemented: the legacy LXDInstanceProvider was replaced by craft-providers, and current LXD build environments inherit http_proxy, https_proxy, and no_proxy.
stealth/space-bunny-alpha
Impact: 22
Quick Win: 16
Complexity: 8
Confidence: 82
Actionability: 80
close resolved Legacy LXDInstanceProvider did not forward proxy env vars to `lxc exec`. That provider class was deleted when snapcraft moved to craft-providers; proxy passthrough (http_proxy/https_proxy/no_proxy) is now handled in providers.py and unit-tested.
stealth/space-bunny-alpha
Impact: 42
Quick Win: 20
Complexity: 25
Confidence: 90
Actionability: 65
close resolved Legacy LXDInstanceProvider proxy forwarding is obsolete: its execution path was removed, and current LXD builds through craft-providers explicitly forward HTTP(S) proxy configuration.
stealth/space-bunny-alpha
Impact: 30
Quick Win: 10
Complexity: 25
Confidence: 42
Actionability: 45
needs triage LXD-based build execution does not explicitly forward the LXD instance's configured proxy variables; the suggested --env option needs verification.
qwen/qwen3.8-27b
Impact: 25
Quick Win: 18
Staleness: 95
Complexity: 30
Confidence: 70
Support Request: 20
close stale Request to pass proxy env vars (http_proxy, https_proxy, no_proxy) to lxc exec in LXDInstanceProvider for builds behind firewalls. Class no longer exists in current codebase; LXD legacy support was removed.
qwen/qwen3.6-35b-a3b
Staleness: 98
Complexity: 20
Confidence: 90
Support Request: 15
close stale LXDInstanceProvider fails to pass proxy environment variables to lxc exec, blocking builds behind firewalls. Issue has been inactive for nearly 7 years with no maintainer response or labels.
qwen/qwen3.6-35b-a3b
Staleness: 95
Complexity: 20
Confidence: 90
Support Request: 10
close stale Feature request to pass proxy variables to lxc exec in LXDInstanceProvider. Unlabeled, no comments, inactive for over 6 years.
qwen3.6-35b-a3b-mtp-q6
Staleness: 98
Complexity: 15
Confidence: 90
Support Request: 10
close stale Feature request to pass LXD proxy environment variables to lxc exec in LXDInstanceProvider. Unaddressed for over 7 years with no maintainer interaction or labels.

Update history

Date Change
created

Related work

  • Superseded By: craft-providers#528 (confidence 70%)

    Upstream issue 'LXD containers are not injected http(s)_proxy variables...', closed because the injection was upstreamed from snapcraft to craft-providers/craft-application.

  • Likely Fixed By: snapcraft#3906 (confidence 60%)

    Commit 716a0474f 'providers: pass http-proxy and https-proxy to craft-providers (#3906)', following 917d5e76a (#3927) which moved get_command_environment() to providers.py.

  • Caused By: snapcraft#2335 (confidence 55%)

    Commit 27ec9ba63 removed the legacy LXDInstanceProvider code path referenced in the report.

Related issues

Issue Project State Summary Similarity
#528 LXD containers are not injected http(s)_proxy variables if those are set to the host craft-providers closed Proxy injection was moved upstream to craft-application and shipped in version 2.0, resolving LXD builds behind host HTTP(S) proxies.
71%