\

Arch Linux Now Has a Bit-for-Bit Reproducible Docker Image

121 points - today at 1:59 AM

Source
  • nickjj

    today at 11:54 AM

    It is nice to have this confidence.

    I ran Arch Linux for almost a year in WSL 2, it was really good.

    Then I ran Arch natively for ~5 months, it's really good.

    Now I still run Arch natively, but I also use the Arch Docker image to test my dotfiles[0] with a fresh file system.

    Also, for when I want to run end to end tests for my dotfiles that set up a complete desktop environment I run Arch in a VM.

    I have 99 problems but running Arch isn't one of them.

    [0]: https://github.com/nickjj/dotfiles

    • dev_l1x_be

      today at 8:05 AM

      All docker containers should have been like that. apt-get update in a docker build step is an anti pattern.

        • rascul

          today at 12:43 PM

          I disagree with that as a hard rule and with the opinion that it's an anti-pattern. Reproducible containers are fine, but not always necessary. There's enough times when I do want to run apt-get in a container and don't care about reproducibility.

          • bluGill

            today at 11:18 AM

            You are screwed either way. If you don't update your container has a ton of known security issues, if you do the container is not reproducable. reproducable is neat with some useful security benefits, but it is something a non goal if the container is more than a month old - day might even be a better max age.

              • dev_l1x_be

                today at 11:29 AM

                I update my docker containers regularly but doing it in a reproducible, auditable, predictable way

                  • tom1337

                    today at 11:55 AM

                    Could you explain how you achieve this?

                      • oefrha

                        today at 12:18 PM

                        Chainguard, Docker Inc’s DHI etc. There’s a whole industry for this.

            • DuncanCoffee

              today at 8:26 AM

              I know it's an anti-pattern, but what is the alternative if you need to install some software? Pulling its tagged source code, gcc and compile everything?

                • kandros

                  today at 10:36 AM

                  Copying from another image is an under appreciated feature

                  FROM ubuntu:24.04

                  COPY --from=ghcr.io/owner/image:latest /usr/local/bin/somebinary /usr/local/bin/somebinary

                  CMD ["somebinary"]

                  Not as simple when you need shared dependencies

                  • Filligree

                    today at 11:34 AM

                    Run “nix flake update”. Commit the lockfile. Build a docker image from that; the software you need is almost certainly there, and there’s a handy docker helper.

                      • klodolph

                        today at 12:02 PM

                        Recently I’ve been noticing that Nix software has been falling behind. So “the software you need is almost certainly there” is less true these days. Recently = April 2026.

                          • sestep

                            today at 12:42 PM

                            Are you referring to how the nixpkgs-unstable branch hasn't been updated in the past five days? Or do you have some specific software in mind? (not arguing, just curious)

                        • PunchyHamster

                          today at 12:08 PM

                          oh, great, adding more dependency, and one that just had serious security problem

                            • hexa555

                              today at 12:20 PM

                              as if other sandboxing software is perfect

                      • bennofs

                        today at 10:04 AM

                        Both Debian and Ubuntu provide snapshot mirrors where you can specify a date to get the package lists as they looked at that time.

                          • bluGill

                            today at 11:19 AM

                            Which is only useful for historical invesigation - the old snapshot has security holes attackers know how to exploit.

                              • lloeki

                                today at 12:05 PM

                                > the old snapshot has security holes attackers know how to exploit.

                                So is running `docker build` and the `RUN apt update` line doing a cache hit, except the latter is silent.

                                The problem solved by pinning to the snapshot is not to magically be secure, it's knowing what a given image is made of so you can trivially assert which ones are safe and which ones aren't.

                                In both cases you have to rebuild an image anyway so updating the snapshot is just a step that makes it explicit in code instead of implicit.

                        • liveoneggs

                          today at 11:21 AM

                          pretend you don't do it and add your extra software to the layer above

                          • dev_l1x_be

                            today at 11:31 AM

                            base image

                            software component image

                            both should be version pinned for auditing

                            • rowanG077

                              today at 8:38 AM

                              With a binary cache that is not so bad, see for example what nix does.

                                • Pay08

                                  today at 8:44 AM

                                  I don't really see how that's different from a normal binary install of a reproducible package. Especially with the lacking quality of a lot of Nix packages.

                                    • bandrami

                                      today at 11:17 AM

                                      If you're in a situation where you want reproducibility you're using nix to build your own packages anyways, not relying on their packages

                                      • rowanG077

                                        today at 9:14 AM

                                        It's not if you can pin the package. It gives you reproducable docker containers without having to rebuild the world. Wasn't that the entire question?

                            • bandrami

                              today at 11:19 AM

                              This has been a solved problem for over two decades now with Nix but people can't be asked

                                • dev_l1x_be

                                  today at 11:30 AM

                                  It has been solved even without Nix for a long time, just laziness is probably why we are not doing it

                              • malikolivier

                                today at 9:00 AM

                                This is to solve such issues that I am using and running StableBuild.

                                It is a managed service that keeps a cached copy of your dependencies at a specific time. You can pin your dependencies within a Dockerfile and have reproducible docker images.

                                  • schonfinkel

                                    today at 9:48 AM

                                    I don't wanna be that guy but...

                                    NIX FIXES THIS.

                                      • dijit

                                        today at 9:59 AM

                                        So does Bazel. :p

                            • kippinsula

                              today at 8:02 AM

                              reproducible images are one of those features where the payoff is mostly emotional until the day it isn't. we had an incident where two supposedly identical images on two machines had a three byte delta in a timestamp and it cost us an afternoon to bisect from the wrong end. boring win, but a real one.

                                • loloquwowndueo

                                  today at 10:44 AM

                                  How did a differing timestamp cause an incident in the first place? Curious.

                                    • bluGill

                                      today at 11:20 AM

                                      My guess is it was the only obvious evidence of an attack.

                              • azangru

                                today at 9:49 AM

                                A totally unrelated comment; but — there is an animation on that page that moves practically everything on the page about 20 pixels down over the course of 1 second.

                                I thought that would completely trash the Cumulative Layout Shift core web vital. Because, hey! the layout is shifting in front of my very eyes. But no, the CLS on the page is 0.

                                Is CLS a misleading metric then?

                                  • chrisweekly

                                    today at 11:21 AM

                                    It's happening as a result of a deliberate animation. The CLS metric relates to initial render. So yes, there is layout shift, but it's not CLS per se.

                                      • azangru

                                        today at 12:23 PM

                                        > The CLS metric relates to initial render.

                                        The CLS measures the total sum of layout shifts over the entire lifespan of a page, not just during initial render.

                                    • epolanski

                                      today at 11:05 AM

                                      The layout isn't shifting, so it's not a layout shift.

                                      And it's not unexpected, because it comes from a css transition.

                                        • azangru

                                          today at 11:26 AM

                                          Sure.

                                          It's just that the spirit of Google's core web vitals has been to measure the properties of a web page that have the most impact on users. How quickly content appears on a page, how visually stable the content is, and how long it takes the page to respond to an interaction.

                                          In the case of this page, I don't think it can be considered visually stable at all in the first second after it's loaded.

                                          And yet, core web vitals cannot demonstrate this.

                                  • aa-jv

                                    today at 8:05 AM

                                    This is a really interesting accomplishment - I am also working heavily on reproducible builds for my firmware projects, and .. lo and behold .. the package manager key administrivia is the final bone to be broken.

                                    I wonder if Arch leading the way on this will prompt other distro's to attempt the same feat. Reproducible builds are important for certification, security and safety-critical applications .. it'd be great to see Linux distros become more conformant to this method.

                                  • fragmede

                                    today at 8:25 AM

                                    and they said compilers are deterministic...

                                    This is a huge accomplishment! But it wouldn't be so huge if compilers were trivially deterministic. It took 5 decades of development for compilers to get here. I'm sure ChatGPT in 2073 is going to be more deterministic than it was in 2023.