[SERVER-63211] icecream 1.1 will use wrong objcopy Created: 02/Feb/22  Updated: 29/Oct/23  Resolved: 25/Oct/22

Status: Closed
Project: Core Server
Component/s: None
Affects Version/s: None
Fix Version/s: 6.2.0-rc0

Type: Bug Priority: Major - P3
Reporter: Daniel Moody Assignee: Juan Gu
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Related
is related to SERVER-59243 icecream 1.1 remotes fail to handle s... Closed
Backwards Compatibility: Fully Compatible
Operating System: ALL
Participants:

 Description   

icecream 1.1 has hardcoded the use of /usr/bin/objcopy, which can break if the compiler version you select is not matching the system binutils. This is fixed in icecream 1.3.

 

We should force the requirement of a newer icecream, preferably 1.3, especially since we have a convenient ppa available for our developer workstations.



 Comments   
Comment by Githook User [ 25/Oct/22 ]

Author:

{'name': 'Juan Gu', 'email': 'juan.gu@mongodb.com', 'username': 'juangugit'}

Message: SERVER-63211 icecream 1.1 will use wrong objcopy
Branch: master
https://github.com/mongodb/mongo/commit/7af2e404ddea4457fc46018560651c3657a48f0b

Comment by Mathias Stearn [ 24/Oct/22 ]

alexander.neben@mongodb.com we already enforce a minimum version of icecream-1.1: https://github.com/mongodb/mongo/blob/f689de6408ddafc503c9f223c3543be96f485f06/site_scons/site_tools/icecream.py#L53-L54. Maybe we should just bump that and add a better message to suggest our PPA?

 

PS- it is a bit confusing that we have both ICECC_VERSION and ICECREAM_VERSION but they mean very different things...

Comment by Daniel Gottlieb (Inactive) [ 05/Feb/22 ]

Ah nice, I hadn't realized we had a build for 16.04; I'd only seen 18.04 advertised. That covers my concerns.

Comment by Ryan Egesdahl (Inactive) [ 04/Feb/22 ]

daniel.gottlieb We have a Bionic (16.04) PPA that hosts an icecream-1.3 binary: https://launchpad.net/~mongodb-dev-prod/+archive/ubuntu/mongodb-build

It's already installed and enabled on any recent virtual workstations, or you can add it yourself if you don't already have it. We strongly suggest anyone using Icecream to build the server have that PPA installed and enabled.

Comment by Daniel Gottlieb (Inactive) [ 04/Feb/22 ]

Hopefully my information is dated, but I'm a little worried about a solution that forces icecream v1.3. IIRC, ubuntu 16.04 only ships 1.1 (20.04's repo points to v1.3), so I'd put some effort into understanding how many people with desktops would be affected by a change like this. Some middle grounds if people would be affected:

  • If this issue with objcopy is only relevant for the v4 toolchain, a better way to limit the impact would be allowing v1.1 on toolchain v3. That would hopefully give people some time to upgrade their OS before v4 becomes the stable toolchain.
  • Support an ubuntu 16.04 ppa for icecream v1.3
Comment by Ryan Egesdahl (Inactive) [ 03/Feb/22 ]

redbeard0531 I previously opened BUILD-14608 for the pregenerated tarball idea; however, we would still like to have the ability to generate tarballs locally as well, for developers who aren't using our toolchain and/or our Icecream distribution. Also, we have a responsibility to the open source community here to help fix a known bug in software we use. I think what we should probably do here is fix the icecc-create-env script to ask the compiler where to find tools like objcopy and create an upstream PR.

We need to talk a bit about how we plan to maintain this, though, since we want third-party builders to be able to use Icecream to build the server if they want. Making them depend on a specific mongodbtoolchain version definitely doesn't seem right, and I am not convinced that making them potentially wait for the next Icecream release for correct behavior (for the next upstreamed bug fix) is right, either. I also don't like the idea of simply copying the icecc-create-env script in wholesale, since it's likely to get orphaned that way. Maybe we should have Icecream as a third-party source and execute the script from there on each build? That would at least remove our dependence on a specific Icecream version for generating the compiler environment tarball.

Comment by Mathias Stearn [ 02/Feb/22 ]

If we don't want to force a newer icecream, we can use a known-good version of the icecc-create-env script to produce the environment. The rest of icecream 1.1 should still work as well (or poorly) as it always has, as long as it is fed a valid tarball.

Alternatively, we could build a blessed tarball as part of the toolchain build process and then have the scons mongodbtoolchain variables files just use that blessed tarball rather than building a new copy for everyone.

Generated at Thu Feb 08 05:57:10 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.