← Back to issue list

Multi-base charm uses same LXC container for different bases

View original Github issue

Metadata

Project
charmcraft
Number
#2058
Type
issue
State
closed
Author
carlcsaposs-canonical
Labels
Created
Updated
Closed

Current evaluation

Superseded by upstream issue canonical/craft-application#600. The LXC container reuse bug causing rebuild slowdowns for multi-base charms is deferred to craft-application and craft-providers for resolution.

Suggested action:

No scores available.

Issue body

### Bug Description When packing a charm with ```yaml platforms: ubuntu@20.04:amd64: ubuntu@22.04:amd64: ``` charmcraft uses the same LXC container for both platforms. This means that if you pack the 20.04 charm, then the 22.04 charm, and then the 20.04 charm, the 3rd pack will be slow because the container from the 1st pack was overriden #### Expected behavior charmcraft uses different LXC containers for each platform. (In aforementioned example) the 3rd pack is fast because it reuses the container from the 1st pack ### To Reproduce ``` git clone https://github.com/canonical/mysql-router-operator cd mysql-router-operator git checkout f12c6bb4b8b49f238bf9d1874f453fa8950b2cb8 charmcraft pack -v lxc --project charmcraft ls ``` ``` $ lxc --project charmcraft ls +---------------------------------------------------------------+---------+------+------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +---------------------------------------------------------------+---------+------+------+-----------+-----------+ | base-instance-charmcraft-buildd-base-v7--20d64a5acd5c317c9c8d | STOPPED | | | CONTAINER | 0 | +---------------------------------------------------------------+---------+------+------+-----------+-----------+ | base-instance-charmcraft-buildd-base-v7--910533fdd664bd2cdbe9 | STOPPED | | | CONTAINER | 0 | +---------------------------------------------------------------+---------+------+------+-----------+-----------+ | charmcraft-mysql-router-on-amd64-for-amd64-2393879 | STOPPED | | | CONTAINER | 0 | +---------------------------------------------------------------+---------+------+------+-----------+-----------+ ``` ### Environment Ubuntu 22.04 ``` $ snap list Name Version Rev Tracking Publisher Notes charmcraft 3.2.2.post133+g455880a4 5682 3.x/edge canonical✓ classic core18 20240920 2846 latest/stable canonical✓ base core20 20240911 2434 latest/stable canonical✓ base core22 20241119 1722 latest/stable canonical✓ base core24 20240920 609 latest/stable canonical✓ base juju 3.6.1 29241 3/stable canonical✓ - lxd 5.0.4-497fe1e 31333 5.0/stable/… canonical✓ - microk8s v1.29.11 7435 1.29-strict/stable canonical✓ - snapcraft 8.5.1 13181 latest/stable canonical✓ classic snapd 2.66.1 23258 latest/stable canonical✓ snapd ``` ### charmcraft.yaml ```yaml # Copyright 2022 Canonical Ltd. # See LICENSE file for licensing details. type: charm platforms: ubuntu@20.04:amd64: ubuntu@22.04:amd64: ubuntu@22.04:arm64: # Files implicitly created by charmcraft without a part: # - dispatch (https://github.com/canonical/charmcraft/pull/1898) # - manifest.yaml # (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/services/package.py#L259) # Files implicitly copied/"primed" by charmcraft without a part: # - actions.yaml, config.yaml, metadata.yaml # (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/services/package.py#L290-L293 # https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/services/package.py#L156-L157) parts: # "poetry-deps" part name is a magic constant # https://github.com/canonical/craft-parts/pull/901 poetry-deps: plugin: nil build-packages: - curl override-build: | python3 -m pip install --upgrade pip==24.3.1 # renovate: charmcraft-pip-latest curl -sSL https://install.python-poetry.org | python3 - --version 1.8.4 # renovate: charmcraft-poetry-latest ln -sf "$HOME/.local/bin/poetry" /usr/local/bin/poetry # "charm-poetry" part name is arbitrary; use for consistency # Avoid using "charm" part name since that has special meaning to charmcraft charm-poetry: # By default, the `poetry` plugin creates/primes these directories: # - lib, src # (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/parts/plugins/_poetry.py#L76-L78) # - venv # (https://github.com/canonical/charmcraft/blob/9ff19c328e23b50cc06f04e8a5ad4835740badf4/charmcraft/parts/plugins/_poetry.py#L95 # https://github.com/canonical/craft-parts/blob/afb0d652eb330b6aaad4f40fbd6e5357d358de47/craft_parts/plugins/base.py#L270) plugin: poetry source: . after: - poetry-deps poetry-export-extra-args: ['--only', 'main,charm-libs'] build-snaps: - rustup build-packages: - libffi-dev - libssl-dev - pkg-config override-build: | rustup default stable craftctl default # Include requirements.txt in *.charm artifact for easier debugging cp requirements.txt "$CRAFT_PART_INSTALL/requirements.txt" # "files" part name is arbitrary; use for consistency files: plugin: dump source: . build-packages: - git override-build: | # Workaround to add unique identifier (git hash) to charm version while specification # DA053 - Charm versioning # (https://docs.google.com/document/d/1Jv1jhWLl8ejK3iJn7Q3VbCIM9GIhp8926bgXpdtx-Sg/edit?pli=1) # is pending review. python3 -c 'import pathlib; import shutil; import subprocess; git_hash=subprocess.run(["git", "describe", "--always", "--dirty"], capture_output=True, check=True, encoding="utf-8").stdout; file = pathlib.Path("charm_version"); shutil.copy(file, pathlib.Path("charm_version.backup")); version = file.read_text().strip(); file.write_text(f"{version}+{git_hash}")' craftctl default prime: - LICENSE - charm_version - workload_version - templates ``` ### Relevant log output ```shell Starting charmcraft, version 3.2.2.post133+g455880a4 Logging execution to '/home/ubuntu/.local/state/charmcraft/log/charmcraft-20241220-092903.384319.log' Launching managed ubuntu 20.04 instance... Creating new instance from remote Creating new base instance from remote Creating new instance from base instance Starting instance Starting charmcraft, version 3.2.2.post133+g455880a4 [...] Packing... Packing charm mysql-router_ubuntu@20.04:amd64.charm Packed mysql-router_ubuntu@20.04:amd64.charm Launching managed ubuntu 22.04 instance... Starting instance Creating instance from base instance Starting instance Starting charmcraft, version 3.2.2.post133+g455880a4 [...] Packing... Packing charm mysql-router_ubuntu@22.04:amd64.charm Packed mysql-router_ubuntu@22.04:amd64.charm ```

Evaluation history

Date Model Scores Action Summary
qwen3.6-35b-a3b-mtp-q6 Superseded by upstream issue canonical/craft-application#600. The LXC container reuse bug causing rebuild slowdowns for multi-base charms is deferred to craft-application and craft-providers for resolution.
qwen/qwen3.6-35b-a3b Closed and superseded by upstream issues in craft-providers and craft-application. Maintainers confirmed the container reuse causes unnecessary rebuilds and redirected resolution to craft-application#600.
qwen/qwen3.6-35b-a3b Superseded by upstream tracking in craft-application issue #600. Charmcraft incorrectly reuses LXC containers across different bases, causing slow rebuilds. The fix will be addressed in the upstream dependency.
qwen3.6-35b-a3b-mtp-q6 Superseded by upstream issues in craft-providers and craft-application. The LXC container reuse bug causing slow rebuilds was tracked upstream, with resolution deferred to craft-application#600.
qwen3.6-35b-a3b-mtp-q6 Superseded. The LXC container reuse bug was identified as an upstream defect in craft-providers and craft-application. Resolution was redirected to canonical/craft-application#600.

Update history

No update history recorded yet.

Related issues

Issue Project State Summary Similarity
#1789 Unable to build multi-base subordinate charms on 24.04 charmcraft closed Reported build failures for multi-base subordinate charms under charmcraft 3's new syntax. Closed after a user identified PR #2054 as the resolution for configuring multiple bases.
71%