Skip to content

Split apt cache into separate non-launch layer#9

Open
dmikusa wants to merge 1 commit into
mainfrom
split-layers
Open

Split apt cache into separate non-launch layer#9
dmikusa wants to merge 1 commit into
mainfrom
split-layers

Conversation

@dmikusa

@dmikusa dmikusa commented Jul 3, 2026

Copy link
Copy Markdown

Cached .deb files and apt-get update package lists were ending up in the final image because they lived inside the apt layer (which has launch = true). See #6.

This splits them into a separate apt-cache layer with launch = false, build = false, cache = true, so the lifecycle restores them between builds but never exports them to the OCI image. Move APT_CACHE_DIR, APT_STATE_DIR, sources, and keys into a new apt-cache layer with launch=false so cached .deb files and package lists from apt-get update are excluded from the final image.

The apt layer retains only the extracted packages (dpkg -x output) and environment variable configuration, which is what actually needs to be present at launch time.

Supersedes #6

Move APT_CACHE_DIR, APT_STATE_DIR, sources, and keys into a new
apt-cache layer with launch=false so cached .deb files and package
lists from apt-get update are excluded from the final image.

The apt layer retains only the extracted packages (dpkg -x output)
and environment variable configuration, which is what actually needs
to be present at launch time.
@dmikusa dmikusa requested a review from a team as a code owner July 3, 2026 04:27
@dmikusa

dmikusa commented Jul 3, 2026

Copy link
Copy Markdown
Author

Testing:

  1. Initial Build
[builder] -----> Detected Aptfile changes, flushing cache
[builder] -----> Updating apt caches
[builder]        Get:1 http://ports.ubuntu.com/ubuntu-ports noble InRelease [256 kB]
[builder]        Get:2 http://ports.ubuntu.com/ubuntu-ports noble-updates InRelease [126 kB]
[builder]        Get:3 http://ports.ubuntu.com/ubuntu-ports noble-security InRelease [126 kB]
[builder]        Get:4 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 Packages [1776 kB]
[builder]        Get:5 http://ports.ubuntu.com/ubuntu-ports noble/multiverse arm64 Packages [274 kB]
[builder]        Get:6 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 Packages [19.0 MB]
[builder]        Get:7 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 Packages [1368 kB]
[builder]        Get:8 http://ports.ubuntu.com/ubuntu-ports noble-updates/multiverse arm64 Packages [80.1 kB]
[builder]        Get:9 http://ports.ubuntu.com/ubuntu-ports noble-updates/universe arm64 Packages [2112 kB]
[builder]        Get:10 http://ports.ubuntu.com/ubuntu-ports noble-security/main arm64 Packages [1055 kB]
[builder]        Get:11 http://ports.ubuntu.com/ubuntu-ports noble-security/universe arm64 Packages [1533 kB]
[builder]        Get:12 http://ports.ubuntu.com/ubuntu-ports noble-security/multiverse arm64 Packages [75.6 kB]
[builder]        Fetched 27.8 MB in 2s (12.9 MB/s)
[builder]        Reading package lists...
[builder] -----> Fetching .debs for mysql-client
[builder]        Reading package lists...
[builder]        Building dependency tree...
[builder]        The following additional packages will be installed:
[builder]          libbsd0 libedit2 mysql-client-8.0 mysql-client-core-8.0 mysql-common
[builder]        The following NEW packages will be installed:
[builder]          libbsd0 libedit2 mysql-client mysql-client-8.0 mysql-client-core-8.0
[builder]          mysql-common
[builder]        0 upgraded, 6 newly installed, 0 to remove and 5 not upgraded.
[builder]        Need to get 2985 kB of archives.
[builder]        After this operation, 62.3 MB of additional disk space will be used.
[builder]        Get:1 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 libbsd0 arm64 0.12.1-1build1.1 [41.0 kB]
[builder]        Get:2 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 libedit2 arm64 3.1-20230828-1build1 [97.5 kB]
[builder]        Get:3 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 mysql-client-core-8.0 arm64 8.0.46-0ubuntu0.24.04.3 [2807 kB]
[builder]        Get:4 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 mysql-common all 5.8+1.1.0build1 [6746 B]
[builder]        Get:5 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 mysql-client-8.0 arm64 8.0.46-0ubuntu0.24.04.3 [22.4 kB]
[builder]        Get:6 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 mysql-client all 8.0.46-0ubuntu0.24.04.3 [9414 B]
[builder]        Fetched 2985 kB in 0s (7767 kB/s)
[builder]        Download complete and in download only mode
[builder] -----> Installing apt packages with dpkg
[builder]        libbsd0_0.12.1-1build1.1_arm64.deb
[builder]        libedit2_3.1-20230828-1build1_arm64.deb
[builder]        mysql-client-8.0_8.0.46-0ubuntu0.24.04.3_arm64.deb
[builder]        mysql-client-core-8.0_8.0.46-0ubuntu0.24.04.3_arm64.deb
[builder]        mysql-client_8.0.46-0ubuntu0.24.04.3_all.deb
[builder]        mysql-common_5.8+1.1.0build1_all.deb
[builder] -----> Writing environment variables
[builder]        PATH=/layers/paketo-buildpacks_apt/apt/usr/bin:/layers/paketo-buildpacks_apt/apt/usr/sbin:/layers/paketo-buildpacks_apt/apt/usr/local/bin:/layers/paketo-buildpacks_apt/apt/usr/local/sbin
[builder]        LD_LIBRARY_PATH=/layers/paketo-buildpacks_apt/apt/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib:/layers/paketo-buildpacks_apt/apt/usr/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib:/layers/paketo-buildpacks_apt/apt/usr/local/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib
[builder]        LIBRARY_PATH=/layers/paketo-buildpacks_apt/apt/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib:/layers/paketo-buildpacks_apt/apt/usr/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib:/layers/paketo-buildpacks_apt/apt/usr/local/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib
[builder]        INCLUDE_PATH=/layers/paketo-buildpacks_apt/apt/usr/include:/layers/paketo-buildpacks_apt/apt/usr/include/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/include/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/include:/layers/paketo-buildpacks_apt/apt/usr/local/include/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/include/x86_64-linux-gnu
[builder]        CPATH=$INCLUDE_PATH
[builder]        CPPPATH=$INCLUDE_PATH
[builder]        PKG_CONFIG_PATH=/layers/paketo-buildpacks_apt/apt/usr/lib/aarch64-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/lib/x86_64-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/lib/i386-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/lib/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/local/lib/aarch64-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/local/lib/x86_64-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/local/lib/i386-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/local/lib/pkgconfig
[builder] -----> Rewrite package-config files
[builder]        Elapsed time: 4282ms
  1. Rebuild, no change to Aptfile
[builder] -----> Aptfile and stack look the same, reusing cache
[builder]        Elapsed time: 6ms
  1. Rebuild, with changes to Aptfile
[builder] -----> Detected Aptfile changes, flushing cache
[builder] -----> Updating apt caches
[builder]        Get:1 http://ports.ubuntu.com/ubuntu-ports noble InRelease [256 kB]
[builder]        Get:2 http://ports.ubuntu.com/ubuntu-ports noble-updates InRelease [126 kB]
[builder]        Get:3 http://ports.ubuntu.com/ubuntu-ports noble-security InRelease [126 kB]
[builder]        Get:4 http://ports.ubuntu.com/ubuntu-ports noble/multiverse arm64 Packages [274 kB]
[builder]        Get:5 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 Packages [1776 kB]
[builder]        Get:6 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 Packages [19.0 MB]
[builder]        Get:7 http://ports.ubuntu.com/ubuntu-ports noble-updates/universe arm64 Packages [2112 kB]
[builder]        Get:8 http://ports.ubuntu.com/ubuntu-ports noble-updates/multiverse arm64 Packages [80.1 kB]
[builder]        Get:9 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 Packages [1368 kB]
[builder]        Get:10 http://ports.ubuntu.com/ubuntu-ports noble-security/multiverse arm64 Packages [75.6 kB]
[builder]        Get:11 http://ports.ubuntu.com/ubuntu-ports noble-security/main arm64 Packages [1055 kB]
[builder]        Get:12 http://ports.ubuntu.com/ubuntu-ports noble-security/universe arm64 Packages [1533 kB]
[builder]        Fetched 27.8 MB in 2s (12.3 MB/s)
[builder]        Reading package lists...
[builder] -----> Fetching .debs for mysql-client
[builder]        Reading package lists...
[builder]        Building dependency tree...
[builder]        The following additional packages will be installed:
[builder]          libbsd0 libedit2 mysql-client-8.0 mysql-client-core-8.0 mysql-common
[builder]        The following NEW packages will be installed:
[builder]          libbsd0 libedit2 mysql-client mysql-client-8.0 mysql-client-core-8.0
[builder]          mysql-common
[builder]        0 upgraded, 6 newly installed, 0 to remove and 5 not upgraded.
[builder]        Need to get 2985 kB of archives.
[builder]        After this operation, 62.3 MB of additional disk space will be used.
[builder]        Get:1 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 libbsd0 arm64 0.12.1-1build1.1 [41.0 kB]
[builder]        Get:2 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 libedit2 arm64 3.1-20230828-1build1 [97.5 kB]
[builder]        Get:3 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 mysql-client-core-8.0 arm64 8.0.46-0ubuntu0.24.04.3 [2807 kB]
[builder]        Get:4 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 mysql-common all 5.8+1.1.0build1 [6746 B]
[builder]        Get:5 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 mysql-client-8.0 arm64 8.0.46-0ubuntu0.24.04.3 [22.4 kB]
[builder]        Get:6 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 mysql-client all 8.0.46-0ubuntu0.24.04.3 [9414 B]
[builder]        Fetched 2985 kB in 0s (10.4 MB/s)
[builder]        Download complete and in download only mode
[builder] -----> Fetching .debs for 7zip
[builder]        Reading package lists...
[builder]        Building dependency tree...
[builder]        Suggested packages:
[builder]          7zip-standalone 7zip-rar
[builder]        The following NEW packages will be installed:
[builder]          7zip
                                                                                                                                                                                  [builder]        0 upgraded, 1 newly installed, 0 to remove and 5 not upgraded.
[builder]        Need to get 1804 kB of archives.                                                                                                                                                        [builder]        After this operation, 6367 kB of additional disk space will be used.                                                                                                                    [builder]        Get:1 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 7zip arm64 23.01+dfsg-11 [1804 kB]                                                                                      [builder]        Fetched 1804 kB in 0s (8810 kB/s)
[builder]        Download complete and in download only mode                                                                                                                                             [builder] -----> Installing apt packages with dpkg
[builder]        7zip_23.01+dfsg-11_arm64.deb
[builder]        libbsd0_0.12.1-1build1.1_arm64.deb
[builder]        libedit2_3.1-20230828-1build1_arm64.deb                                                                                                                                                 [builder]        mysql-client-8.0_8.0.46-0ubuntu0.24.04.3_arm64.deb                                                                                                                                      [builder]        mysql-client-core-8.0_8.0.46-0ubuntu0.24.04.3_arm64.deb
[builder]        mysql-client_8.0.46-0ubuntu0.24.04.3_all.deb
[builder]        mysql-common_5.8+1.1.0build1_all.deb
[builder] -----> Writing environment variables
[builder]        PATH=/layers/paketo-buildpacks_apt/apt/usr/bin:/layers/paketo-buildpacks_apt/apt/usr/sbin:/layers/paketo-buildpacks_apt/apt/usr/local/bin:/layers/paketo-buildpacks_apt/apt/usr/local/sbin
[builder]        LD_LIBRARY_PATH=/layers/paketo-buildpacks_apt/apt/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib:/layers/paketo-buildpacks_apt/apt/usr/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib:/layers/paketo-buildpacks_apt/apt/usr/local/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib
[builder]        LIBRARY_PATH=/layers/paketo-buildpacks_apt/apt/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/lib:/layers/paketo-buildpacks_apt/apt/usr/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/lib:/layers/paketo-buildpacks_apt/apt/usr/local/lib/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib/i386-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/lib
[builder]        INCLUDE_PATH=/layers/paketo-buildpacks_apt/apt/usr/include:/layers/paketo-buildpacks_apt/apt/usr/include/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/include/x86_64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/include:/layers/paketo-buildpacks_apt/apt/usr/local/include/aarch64-linux-gnu:/layers/paketo-buildpacks_apt/apt/usr/local/include/x86_64-linux-gnu
[builder]        CPATH=$INCLUDE_PATH
[builder]        CPPPATH=$INCLUDE_PATH
[builder]        PKG_CONFIG_PATH=/layers/paketo-buildpacks_apt/apt/usr/lib/aarch64-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/lib/x86_64-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/lib/i386-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/lib/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/local/lib/aarch64-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/local/lib/x86_64-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/local/lib/i386-linux-gnu/pkgconfig:/layers/paketo-buildpacks_apt/apt/usr/local/lib/pkgconfig
[builder] -----> Rewrite package-config files
[builder]        Elapsed time: 5339ms

Produced image has no apt-cache layer:

11 layers
ID                                                                CREATED       CREATED BY                                                            SIZE        COMMENT
59710ab9ab3beccc1c06900d102abe5e86a70f52f66b698a6e3091dc59ec3a8a  46 years ago  Buildpacks Process Types                                              2.56kB      
<missing>                                                         46 years ago  Buildpacks Launcher Config                                         3.58kB      
<missing>                                                         46 years ago  Buildpacks Application Launcher                               2.82MB      
<missing>                                                         46 years ago  Application Layer                                                     9.22kB      
<missing>                                                         46 years ago  Software Bill-of-Materials                                            55.8kB      
<missing>                                                         46 years ago  Layer: 'go', Created by buildpack: paketo-buildpacks/go-dist@2.10.19  215MB       
<missing>                                                         46 years ago  Layer: 'apt', Created by buildpack: paketo-buildpacks/apt@0.3.0-dev   68.6MB      
1ef8a004a03cb3ce69bf7d3ce5bc8a75a0c57f6c42412ba9f2ec3c2f6b3b31b8  46 years ago      3.07kB  

Confirmed the apt layer only has package installed files.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant