actions / runner-images

GitHub Actions runner images
MIT License
10.27k stars 3.09k forks source link

Ubuntu 24.04's build-essential is missing #9946

Closed AptiviCEO closed 6 months ago

AptiviCEO commented 6 months ago

Description

In the Ubuntu 22.04 GitHub Actions runner, build-essential is installed. However, the Ubuntu 24.04 beta GH Actions runner, build-essential is missing. Therefore, my jobs that depend on it failed to run.

dpkg-buildpackage -us -uc -ui
dpkg-buildpackage: info: source package kernel-simulator
dpkg-buildpackage: info: source version 3.0.25.439-0.1.0.9-1
dpkg-buildpackage: info: source distribution noble
dpkg-buildpackage: info: source changed by Aptivi CEO <ceo@aptivi.anonaddy.com>
 dpkg-source --before-build .
dpkg-buildpackage: info: host architecture amd64
dpkg-checkbuilddeps: error: Unmet build dependencies: build-essential:native
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: warning: (Use -d flag to override.)
debuild: fatal error at line 1184:
dpkg-buildpackage -us -uc -ui failed

Notice the "build-essential" message. This means that it isn't installed in the Ubuntu 24.04 beta worker at all! This package is so important for building apps, because it has G++, Make, and others.

This means that any project that requires Make to build will fail to run.

Platforms affected

Runner images affected

Image version and build link

Ubuntu 24.04 https://github.com/Aptivi/NitrocidKS/actions/runs/9254542094/job/25456543655

Is it regression?

Yes, Ubuntu 22.04. https://github.com/Aptivi/NitrocidKS/actions/runs/9241701729

Expected behavior

I expect that the build completes successfully without having to install build-essential myself.

Actual behavior

build-essential is missing, causing build failures. Therefore, I have to install build-essential as part of the job build process.

Repro steps

Just make a job that depends on one of the build-essential's deps, such as make, g++, etc.

vidyasagarnimmagaddi commented 6 months ago

hi @AptiviCEO , kindly provide minimal repro steps to understand

AptiviCEO commented 6 months ago

@vidyasagarnimmagaddi This is a minimal workflow that simply queries dpkg for information about the build-essential package. You can find it here: https://github.com/AptiviCEO/GhActionsBuildEssential.

  1. Create a GitHub repository with this content in the .github/workflows/test.yml file:

    name: Test build-essential
    
    on:
     push:
       branches:
         - main
     workflow_dispatch:
    
    jobs:
     build:
       strategy:
         matrix:
           runs-on: [ubuntu-latest, ubuntu-24.04]
       runs-on: ${{ matrix.runs-on }}
    
       steps:
         - uses: actions/checkout@v4
           with:
             ref: ${{ github.ref }}
         - name: Testing build-essential
           run: |
             which make
             dpkg -l build-essential
  2. Make a commit and push it to your repository
  3. Go to Actions -> Test build-essential and compare the outputs of both the Ubuntu 22.04 and the Ubuntu 24.04 runners.

The Ubuntu 22.04 runner reports that the package is installed (ii), according to this output:

/usr/bin/make
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name            Version      Architecture Description
+++-===============-============-============-==============================================
ii  build-essential 12.9ubuntu3  amd64        Informational list of build-essential packages

However, the Ubuntu 24.04 runner reports that the package is not installed (un):

/usr/bin/make
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name            Version      Architecture Description
+++-===============-============-============-=================================
un  build-essential <none>       <none>       (no description available)

So, every job that explicitly checks for this package to be installed, such as the packaging process that I've linked earlier, will fail.

kishorekumar-anchala commented 6 months ago

Hi @AptiviCEO ,

below are the some build-essential, we have already installed them.

[dpkg-dev] [g++]( [gcc] [make]

Could you please confirm once.

referral link: https://packages.ubuntu.com/noble/build-essential

AptiviCEO commented 6 months ago

I've confirmed that these packages are installed.

As a side note, I've made a minimal reproducible Debian packaging step by adding all the necessary Debian files and changing the workflow to look like this:

name: Test build-essential

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  build:
    strategy:
      matrix:
        runs-on: [ubuntu-latest, ubuntu-24.04]
    runs-on: ${{ matrix.runs-on }}

    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.ref }}
      - name: Testing build-essential
        run: |
          which make
          dpkg -l build-essential dpkg-dev g++ gcc make
      - name: Testing build-essential with Debian packaging
        run: |
          sudo apt install devscripts debhelper-compat dput
          mv debian ..
          mv .github ..
          tar cfv ../testpkg_1.0.orig.tar .
          xz ../testpkg_1.0.orig.tar
          mv ../debian .
          debuild -us -uc

The debuild -us -uc command does explicitly check for the build-essential package, and will fail if it's not installed as seen earlier:

un  build-essential <none>            <none>       (no description available)

This failed on the Ubuntu 24.04 runner: (e-mails are redacted)

(...)
dpkg-buildpackage: info: source package testpkg
dpkg-buildpackage: info: source version 1.0-1
dpkg-buildpackage: info: source distribution UNRELEASED
dpkg-buildpackage: info: source changed by Aptivi CEO <...>
 dpkg-source --before-build .
dpkg-buildpackage: info: host architecture amd64
dpkg-checkbuilddeps: error: Unmet build dependencies: build-essential:native
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
(...)

...while it went successful (but I've set up all the jobs to stop when one of them fails so it appears to be "failing") with the Ubuntu 22.04 runner:

(...)
dpkg-buildpackage: info: source package testpkg
dpkg-buildpackage: info: source version 1.0-1
dpkg-buildpackage: info: source distribution UNRELEASED
dpkg-buildpackage: info: source changed by Aptivi CEO <...>
 dpkg-source --before-build .
dpkg-buildpackage: info: host architecture amd64
 fakeroot debian/rules clean
dh clean
(...)

You can see the debian folder in this repo.

mikhailkoliada commented 6 months ago

This package is the meta one, we do not need to install it as all the dependencies are provided in the image.