I am using unattended-upgrades across multiple servers. I would like package updates to be rolled out gradually, either randomly or to a subset of test/staging machines first. Is there a way to do that for APT on Ubuntu?

An obvious option is to set some machines to update on Monday and the others to update on Wednesday, but that only gives me only weekly updates…

The goal of course is to avoid a Crowdstrike-like situation on my Ubuntu machines.

edit: For example. An updated openssh-server comes out. One fifth of the machines updates that day, another fifth updates the next day, and the rest updates 3 days later.

  • gnuhaut@lemmy.ml
    link
    fedilink
    arrow-up
    2
    ·
    2 months ago

    Ubuntu only does security updates, no? So that seems like a bad idea.

    If you still want to do that, I guess you’d probably need to run your own package mirror, update that on Monday, and then point all the machines to use that in the sources.list and run unattended-upgrades on different days of the week.

    • remram@lemmy.mlOP
      link
      fedilink
      arrow-up
      1
      arrow-down
      1
      ·
      2 months ago

      Ubuntu only does security updates, no?

      No, why do you think that?

      run your own package mirror

      I think you might be on to something here. I could probably do this with a package mirror, updating it daily and rotating the staging, production, etc URLs to serve content as old as I want. This would require a bit of scripting but seems very configurable.

      Thanks for the idea! Can’t believe I didn’t think of that. It seems so obvious now, I wonder if someone already made it.

      • just_another_person@lemmy.world
        link
        fedilink
        arrow-up
        3
        arrow-down
        2
        ·
        edit-2
        2 months ago

        Yes, Ubuntu DOES only do security updates. They don’t phase major versions of point releases into distro release channels after they have been released. You have no idea what you are talking about in this thread. You need to go do some reading, please. People are trying to help you, and you’re just responding by being rude and snarky. The worst snark as well, because you think you are informed and right, and you’re just embarrassing yourself and annoying the people trying to help you.

        • remram@lemmy.mlOP
          link
          fedilink
          arrow-up
          1
          arrow-down
          3
          ·
          edit-2
          2 months ago

          Go away. You’re here pretending that Ubuntu only does security updates. You have never received a bugfix from Ubuntu? And I am the one who doesn’t know what he’s talking about?

          Why do you insert yourself into conversations with other people? I am the one who’s rude?

          • gnuhaut@lemmy.ml
            link
            fedilink
            arrow-up
            1
            ·
            2 months ago

            Yeah no the other poster is correct, I meant Ubuntu doesn’t do feature updates after release. You seem worried about something that’s quite unlikely to happen (breakage introduced from minimal patches), while delaying security fixes. And I assume the vast majority of updates are security fixes.

            And I also think you’re being rude in this whole thread.

            • remram@lemmy.mlOP
              link
              fedilink
              arrow-up
              2
              ·
              2 months ago

              Sure, bugfix and security.

              I’m sorry but I got a lot of very dumb answers like “have a staging environment” and “use a schedule”, even though I listed both this points in my (very short) post already. The most detailed answer I got is a playbook copy/pasted from an LLM, and this one dude was getting into all subthreads to tell me I don’t understand what I’m asking until I blocked him. So you don’t have to worry about me, this was probably my first and last thread on Lemmy ;-) Either way, apologies if I got heated up.

          • just_another_person@lemmy.world
            link
            fedilink
            arrow-up
            3
            arrow-down
            2
            ·
            2 months ago

            🙄 read my comment in the context of what I was replying to, which is what the original posted was referring to in that maintenance updates ONLY. I clarified it pretty well, and that means no point releases, which is what that poster was referring to.

  • digdilem@lemmy.ml
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    2 months ago

    Small number of machines?

    Disable unattended-upgrades and use crontab to schedule this on the days of the week you want.

    Eg, Monday each week at 4 am - every combination of dates and days is possible with crontab. 2nd Tuesdays in a month? No problem.

    0 4 * * MON apt-get update && apt-get upgrade && reboot

    (You can also be more subtle by calling a script that does the above, and also does things like check whether a reboot is needed first)

    Dozens, hundreds or thousands of machines? Use a scheduling automation system like Uyuni. That way you can put machines into System Groups and set patching schedule like that. And you can also define groups of machines, either ad-hoc or with System Groups, to do emergency patching like that day’s openssh critical vuln by sending a remote command like the above to a batch at a time.

    All of that is pretty normal SME/Enterprise sysadminning, so there’s some good tools. I like Uyuni, but others have their preference.

    However - Crowdstrike on Linux operates much like CS on Windows - they will push out updates, and you have little or no control over when or what. They aren’t unique in this - pretty much every AV needs to be able to push updates to clients when new malware is detected. But! In the example of Crowdstrike breaking EL 9.4 a few months ago when it took exception to a new kernel and refused to boot, then yes, scheduled group patching would have minimised the damage. It did so for us, but we only have CS installed on a handful of Linux machines.

  • bloodfart@lemmy.ml
    link
    fedilink
    arrow-up
    2
    arrow-down
    1
    ·
    2 months ago

    A cron job that runs when you want it to instead of the unattended updates metapackage.

    • remram@lemmy.mlOP
      link
      fedilink
      arrow-up
      1
      ·
      2 months ago

      unattended-upgrades can already do that actually, i e. you can configure the systemd timers. But that’s insufficient for my needs. Using a mirror seems like the best option so far.

  • GravitySpoiled@lemmy.ml
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    1
    ·
    2 months ago

    Maybe you could switch to an image based distro which is easy to roll back and won’t boot into a broken image.

    • remram@lemmy.mlOP
      link
      fedilink
      arrow-up
      2
      arrow-down
      1
      ·
      2 months ago

      Which distro is image based and have the staggered rollout feature I’m after?

      • GravitySpoiled@lemmy.ml
        link
        fedilink
        English
        arrow-up
        1
        ·
        2 months ago

        You don’t need the staggered rollout since it won’t boot into a broken image and you can boot easily into an old one if you don’t like the new one. E.g. fedora atomic.

        I’m not up to date with vanilla os for the debian world if it is on par with fedora.

        • remram@lemmy.mlOP
          link
          fedilink
          arrow-up
          2
          ·
          2 months ago

          I am not worried about upgrades so bad that they literally don’t boot. I am worried about all the possible problems that might break my service.

            • remram@lemmy.mlOP
              link
              fedilink
              arrow-up
              2
              ·
              2 months ago

              I can roll back with APT too, my question is how to do the staggered rollout.

              • GravitySpoiled@lemmy.ml
                link
                fedilink
                English
                arrow-up
                1
                ·
                2 months ago

                You have to reboot for an image update. Hence, you can update the computers at different times and days.

                • remram@lemmy.mlOP
                  link
                  fedilink
                  arrow-up
                  2
                  ·
                  2 months ago

                  This doesn’t seem to enhance my workflow at all. Seems I now would have to reboot, and I still need to find a separate tool to coordinate/stagger updates, like I do now. Or did I miss something?

              • GravitySpoiled@lemmy.ml
                link
                fedilink
                English
                arrow-up
                1
                arrow-down
                1
                ·
                edit-2
                2 months ago

                If the os works always (atomic image based distro), and the docker container work, and both can roll back easily. What else could go wrong?

                Don’t overthink it :)

        • umami_wasabi@lemmy.ml
          link
          fedilink
          arrow-up
          1
          ·
          2 months ago

          No, OP absolutely still need staggered rollout. Immutable distros are a blue-green deployment self-contained. Yet, all the instance can upgrade and switch all at once and break all of them. OP still need some rollout strategy externally to prevent the whole service being brought down.

  • FalseMyrmidon@kbin.run
    link
    fedilink
    arrow-up
    2
    arrow-down
    1
    ·
    2 months ago

    What you’re asking for is a CI/CD pipeline that deploys a set of OS updates as a set revision. I don’t the details on how to do it but that’s the concept you’re asking for.

  • lnxtx@feddit.nl
    link
    fedilink
    English
    arrow-up
    1
    arrow-down
    2
    ·
    2 months ago

    In an ideal world, there should be 3 separated environments of the same app/service:
    devel → staging → production.

    Devel = playground, stagging = near identical to the production.

    So you can test the updates before fixing production.

    • remram@lemmy.mlOP
      link
      fedilink
      arrow-up
      3
      arrow-down
      1
      ·
      2 months ago

      So you can test the updates before fixing production.

      My question is how to do that with APT.

      • lnxtx@feddit.nl
        link
        fedilink
        English
        arrow-up
        2
        ·
        edit-2
        2 months ago

        I think there is no a out-of-the-box solution.
        You can run security updates manually, but it’s too much to do.

        Try to host apt mirrors in different stages, with unattended-updates tuned on.
        Devel will have the latest.
        Staging the latest positively tested on the devel.
        Production the latest positively tested on the staging.

        • remram@lemmy.mlOP
          link
          fedilink
          arrow-up
          2
          ·
          2 months ago

          Making multiple mirrors seems like the best solution. I will explore that route.

          I was hoping there was something built into APT or unattended-upgrades, I vaguely remembered such a feature… what I was remembering was probably Phased Updates, but those are controlled by Ubuntu not by me, and roll out too fast.

  • just_another_person@lemmy.world
    link
    fedilink
    arrow-up
    2
    arrow-down
    3
    ·
    2 months ago

    It’s called a staging environment. You have servers you apply changes to first before going to production.

    I assume you mean this for home though, so take a small number of your machines and have them run unattended upgrades daily, and set whatever you’re worried about to only run them every few weeks or something.