| Message ID | 20251009092228.382349-7-i.maximets@ovn.org |
|---|---|
| State | Accepted |
| Commit | 9434a69e030a60ce794d2c366ea1834f3ba1fe2f |
| Headers | show |
| Series | Build fixes for OVS on old distributions. | expand |
| Context | Check | Description |
|---|---|---|
| ovsrobot/apply-robot | success | apply and check: success |
| ovsrobot/cirrus-robot | success | cirrus build: passed |
| ovsrobot/github-robot-_Build_and_Test | success | github build: passed |
On 09/10/2025 10:21, Ilya Maximets wrote: > While adding new code we frequently miss that certain compiler features > may be relatively new, or more often that some system headers are not > available or do not have certain definitions in them. This results in > builds failing on older systems. > > Adding a new CI job that runs inside Ubuntu 14.04 container, which is > the oldest Ubuntu that is in the "legacy support" mode: > https://ubuntu.com/about/release-cycle > > This image has GCC 4.8 that is missing a lot of modern features and > it's based on Linux v3.13 kernel that also has a lot of definitions > missing in uAPI headers, compared to modern ones. This makes this > image a good candidate for a baseline "old distribution" testing. > > This job can't cover everything and there will be different > configurations and distributions that may still fail, especially if > they have custom backports or some packages much newer than others. > But it should cover the vast majority of potential issues. > > Since we're running inside a very old container, we can't use any of > the pre-defined GitHub workflows like 'checkout' or 'cache', as they > are based on Node.js that is built for much newer version of Ubuntu > and so requires much newer glibc to run. Hence doing everything > manually. > > Need to disable SSL, as we require OpenSSL 1.1.1+, which can probably > be built, but it seems like a bit of a waste of time to re-build so > many large things from sources. Need to build a newer python though, > as python >= 3.7 is required in order to build OVS. > > Building python 3.12 because it's the same as in other tests. We could > also find and choose the latest 3.12.z release automatically, but it's > much less code to just manually stick to the current latest 3.12.11. > There should be no reason to update it frequently. > > Signed-off-by: Ilya Maximets <i.maximets@ovn.org> > --- > .github/workflows/build-and-test.yml | 39 ++++++++++++++++++++++++++++ > 1 file changed, 39 insertions(+) Thanks Ilya, I ran on GHA and it's passing. Acked-by: Kevin Traynor <ktraynor@redhat.com>
On 9 Oct 2025, at 11:21, Ilya Maximets wrote: > While adding new code we frequently miss that certain compiler features > may be relatively new, or more often that some system headers are not > available or do not have certain definitions in them. This results in > builds failing on older systems. > > Adding a new CI job that runs inside Ubuntu 14.04 container, which is > the oldest Ubuntu that is in the "legacy support" mode: > https://ubuntu.com/about/release-cycle > > This image has GCC 4.8 that is missing a lot of modern features and > it's based on Linux v3.13 kernel that also has a lot of definitions > missing in uAPI headers, compared to modern ones. This makes this > image a good candidate for a baseline "old distribution" testing. > > This job can't cover everything and there will be different > configurations and distributions that may still fail, especially if > they have custom backports or some packages much newer than others. > But it should cover the vast majority of potential issues. > > Since we're running inside a very old container, we can't use any of > the pre-defined GitHub workflows like 'checkout' or 'cache', as they > are based on Node.js that is built for much newer version of Ubuntu > and so requires much newer glibc to run. Hence doing everything > manually. > > Need to disable SSL, as we require OpenSSL 1.1.1+, which can probably > be built, but it seems like a bit of a waste of time to re-build so > many large things from sources. Need to build a newer python though, > as python >= 3.7 is required in order to build OVS. > > Building python 3.12 because it's the same as in other tests. We could > also find and choose the latest 3.12.z release automatically, but it's > much less code to just manually stick to the current latest 3.12.11. > There should be no reason to update it frequently. > > Signed-off-by: Ilya Maximets <i.maximets@ovn.org> Thanks for adding this, Ilya! At first, I was drawn to the fact that all but the `name:`, `runs-on`, etc., were not aligned like the rest, but it looks like the whole file is like this :( So the changes look good to me! Acked-by: Eelco Chaudron <echaudro@redhat.com>
On 10/10/25 1:51 PM, Eelco Chaudron wrote: > > > On 9 Oct 2025, at 11:21, Ilya Maximets wrote: > >> While adding new code we frequently miss that certain compiler features >> may be relatively new, or more often that some system headers are not >> available or do not have certain definitions in them. This results in >> builds failing on older systems. >> >> Adding a new CI job that runs inside Ubuntu 14.04 container, which is >> the oldest Ubuntu that is in the "legacy support" mode: >> https://ubuntu.com/about/release-cycle >> >> This image has GCC 4.8 that is missing a lot of modern features and >> it's based on Linux v3.13 kernel that also has a lot of definitions >> missing in uAPI headers, compared to modern ones. This makes this >> image a good candidate for a baseline "old distribution" testing. >> >> This job can't cover everything and there will be different >> configurations and distributions that may still fail, especially if >> they have custom backports or some packages much newer than others. >> But it should cover the vast majority of potential issues. >> >> Since we're running inside a very old container, we can't use any of >> the pre-defined GitHub workflows like 'checkout' or 'cache', as they >> are based on Node.js that is built for much newer version of Ubuntu >> and so requires much newer glibc to run. Hence doing everything >> manually. >> >> Need to disable SSL, as we require OpenSSL 1.1.1+, which can probably >> be built, but it seems like a bit of a waste of time to re-build so >> many large things from sources. Need to build a newer python though, >> as python >= 3.7 is required in order to build OVS. >> >> Building python 3.12 because it's the same as in other tests. We could >> also find and choose the latest 3.12.z release automatically, but it's >> much less code to just manually stick to the current latest 3.12.11. >> There should be no reason to update it frequently. >> >> Signed-off-by: Ilya Maximets <i.maximets@ovn.org> > > Thanks for adding this, Ilya! At first, I was drawn to the fact that all > but the `name:`, `runs-on`, etc., were not aligned like the rest, but it > looks like the whole file is like this :( Making yaml look nice is an exercise in futility... :) > > So the changes look good to me! > > Acked-by: Eelco Chaudron <echaudro@redhat.com> >
diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 1e70231f7..f7ca4d1f0 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -582,6 +582,45 @@ jobs: name: logs-osx-clang---disable-ssl path: config.log + build-old-linux-distribution: + env: + dependencies: git make automake libtool gcc libnuma-dev zlib1g-dev + python_version: 3.12.11 + + name: linux gcc (ubuntu-14.04) + runs-on: ubuntu-24.04 + container: ubuntu:14.04 + timeout-minutes: 30 + + strategy: + fail-fast: false + + steps: + - name: update APT cache + run: sudo apt update || true + + - name: install dependencies + run: sudo apt install -y ${{ env.dependencies }} + + - name: build python + run: | + git clone --branch v${{ env.python_version }} --depth 1 \ + https://github.com/python/cpython cpython + cd cpython && ./configure && sudo make -j4 install + python3 --version + + - name: checkout + run: | + SHA=${{ github.event.pull_request.head.sha || github.sha }} + git clone https://github.com/${{ github.repository }}.git ovs + cd ovs && git fetch origin $SHA && git checkout $SHA + + - name: prepare + run: cd ovs && ./boot.sh && ./configure --disable-ssl --enable-Werror + + - name: build + run: cd ovs && make -j4 + build-linux-deb: env: deb_dependencies: |
While adding new code we frequently miss that certain compiler features may be relatively new, or more often that some system headers are not available or do not have certain definitions in them. This results in builds failing on older systems. Adding a new CI job that runs inside Ubuntu 14.04 container, which is the oldest Ubuntu that is in the "legacy support" mode: https://ubuntu.com/about/release-cycle This image has GCC 4.8 that is missing a lot of modern features and it's based on Linux v3.13 kernel that also has a lot of definitions missing in uAPI headers, compared to modern ones. This makes this image a good candidate for a baseline "old distribution" testing. This job can't cover everything and there will be different configurations and distributions that may still fail, especially if they have custom backports or some packages much newer than others. But it should cover the vast majority of potential issues. Since we're running inside a very old container, we can't use any of the pre-defined GitHub workflows like 'checkout' or 'cache', as they are based on Node.js that is built for much newer version of Ubuntu and so requires much newer glibc to run. Hence doing everything manually. Need to disable SSL, as we require OpenSSL 1.1.1+, which can probably be built, but it seems like a bit of a waste of time to re-build so many large things from sources. Need to build a newer python though, as python >= 3.7 is required in order to build OVS. Building python 3.12 because it's the same as in other tests. We could also find and choose the latest 3.12.z release automatically, but it's much less code to just manually stick to the current latest 3.12.11. There should be no reason to update it frequently. Signed-off-by: Ilya Maximets <i.maximets@ovn.org> --- .github/workflows/build-and-test.yml | 39 ++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+)