Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

unbundle libcrypt #52

Closed
2 of 3 tasks
beckermr opened this issue Dec 8, 2023 · 16 comments
Closed
2 of 3 tasks

unbundle libcrypt #52

beckermr opened this issue Dec 8, 2023 · 16 comments

Comments

@beckermr
Copy link
Member

beckermr commented Dec 8, 2023

There is an ABI change from SONAME 1 to SONAME 2 from alma/rocky 8 to alma/rocky 9 for libxcrypt. Some of our packages don't run out of the box on alma 9 without extra an extra compatibility package installed on the runtime OS.

We should

cc @jakirkham @isuruf

@mbargull
Copy link
Member

SGTM!
Though, I wouldn't change libxcrypt to libxcrypt2.
We already have a libxcrypt1 compatibility package for libcrypt.so.1 and the x in libxcrypt depicts the changed ABI anyway, AFAIK.

@mbargull
Copy link
Member

(For reference, these changes would be very similar to what we did for libnsl in #40 .)

mbargull added a commit to mbargull-feedstocks/perl-feedstock that referenced this issue Dec 22, 2023
mbargull added a commit to mbargull-feedstocks/python-feedstock that referenced this issue Dec 23, 2023
mbargull added a commit to mbargull-feedstocks/python-feedstock that referenced this issue Dec 23, 2023
mbargull added a commit to mbargull-feedstocks/python-feedstock that referenced this issue Dec 23, 2023
mbargull added a commit to mbargull-feedstocks/python-feedstock that referenced this issue Dec 23, 2023
mbargull added a commit to mbargull-feedstocks/python-feedstock that referenced this issue Dec 23, 2023
mbargull added a commit to mbargull-feedstocks/util-linux-feedstock that referenced this issue Dec 23, 2023
sulogin is currently linked against libcrypt.so.1 which we want to phase
out. For details, see:
conda-forge/linux-sysroot-feedstock#52

Signed-off-by: Marcel Bargull <[email protected]>
mbargull added a commit to mbargull-feedstocks/ruby-feedstock that referenced this issue Dec 23, 2023
Ruby is currently linked against libcrypt.so.1 which we want to phase
out. For details, see:
conda-forge/linux-sysroot-feedstock#52

Signed-off-by: Marcel Bargull <[email protected]>
mbargull added a commit to mbargull-feedstocks/openssh-feedstock that referenced this issue Dec 23, 2023
sshd is currently linked against libcrypt.so.1 which we want to phase
out. For details, see:
conda-forge/linux-sysroot-feedstock#52

Signed-off-by: Marcel Bargull <[email protected]>
erykoff added a commit to erykoff/apr-feedstock that referenced this issue Feb 10, 2024
@mbargull mbargull changed the title unbundle libxcrypt unbundle libcrypt Feb 15, 2024
@mbargull
Copy link
Member

I've updated the issue description with links to @beckermr's PRs and added an item for removing the library files that current packages link to in the future (this is mostly just for the case of us using the sysroot package for QEMU_LD_PREFIX; see #54 (comment) ).

I'd say removing the remaining files in a few month before we switch to CentOS 7 as the default linking target would make sense.

@mbargull mbargull mentioned this issue Feb 15, 2024
5 tasks
@AaronOpfer
Copy link

AaronOpfer commented Feb 15, 2024

Hi, My company is using conda-forge to build C extensions against Python 3.6.15 and 3.7.12. Our compilations now fail because we cannot include a crypt.h, and our investigation eventually led us to this changeset. I see that it was necessary for conda-forge to rebuild Python 3.8 and newer with a new recipe in order to work with the latest sysroot, and it makes sense to me that this would not occur for Python 3.6.15 and 3.7.12 since they are no longer being built by conda-forge.

My question is: what do you believe my company's path forward should be to retaining our ability to build Python 3.6 and 3.7 C extensions using current day conda-forge? Obviously we shouldn't use old Pythons, but that is something that we're actively working on, bridging our ecosystem into Conda, and is why we encountered this problem. We also could fix the sysroot to the old version, but this is a difficult fix to implement in a large number of conda recipes, and we're worried about how we can document this process and publicize it fast enough. We could try to proxy conda-forge and remove this new sysroot, but that feels like it might be missing the whole point of this changeset. It's not clear to me that a repodata patch for the existing Python 3.6 and Python 3.7 builds would work either. So, our current inclination is to try and revive the old Python recipes and rebuild them against libxcrypt and put them into our third party package channel, but we have no idea how successful this would actually be. I'd be happy to hear your thoughts as we try to work through the problem.

EDIT: could we repodata patch Python 3.6 and Python 3.7 to depend on the compatibility package libxcrypt1?

@beckermr
Copy link
Member Author

You should be able to include the libxcrypt package in your env and it should build against that.

@AaronOpfer
Copy link

My builds compile if I add libxcrypt to the host section. However, I am not sure that this is actually proper from an ABI standpoint, since it implies we're using different header files in the compilation process than the ones that were used to build Python (CentOS6). I am not an expert on ABI though, and could be wrong about this. FWIW, I tried to build with the libxcrypt1 compatibility package mentioned above, but I found that it does not actually have any header files: is that intentional?

@jakirkham
Copy link
Member

If this can be solved by rebuilding the old python's with build/number bumps, would suggest creating PRs to do that. It's probably the simplest solution we can offer

@beckermr
Copy link
Member Author

So ABI is about runtime linking whereas the problem of possibly different headers is an API question. I only point this out to ensure that we keep the discussion straight.

@AaronOpfer
Copy link

I uploaded a PR that I think would address the issue for Python 3.7. Linux and OSX builds are working, however, the Windows build is failing, and I have no ability to determine what is wrong (I haven't debugged a Windows build in almost 10 years), and the fault appears to be in some of the other recipe changes from conda-smithy. I would appreciate any assistance in resolving it.

Assuming that we can overcome that issue, I can put up a Python 3.6 build afterward.

@jakirkham
Copy link
Member

jakirkham commented Feb 15, 2024

Thanks Aaron! 🙏

Added a suggestion on that PR. It's possible we will need to adjust that depending on how it goes

Edit: In the worst case, we can always ignore Windows. CI failing just means it won't produce Windows packages, but we don't really need them to solve this issue anyways

langmm added a commit to cropsinsilico/yggdrasil that referenced this issue Feb 19, 2024
…id missing crypt.h during (See build conda-forge/linux-sysroot-feedstock#52)

Fix bug in path pruning for windows in test setup
Add error classes for compilation tool errors
Add checks for matches to lower case versions of tool names
Prefer MSVC compiler over gnu for fortran compat with C/C++ on windows
matthiasdiener added a commit to regro-cf-autotick-bot/islpy-feedstock that referenced this issue May 29, 2024
matthewfeickert added a commit to matthewfeickert/pythia8-feedstock that referenced this issue Aug 13, 2024
* Python 3.8 conda-forge distributions depend on crypt.h in the Python.h,
  but given changes in late 2023 crypt.h is no longer distributed in the
  same include/ directory as Python.h and so for Python 3.8 Linux builds
  needs to be provided by installing libxcrypt as a host requirement and
  then additionally making the location of the installed crypt.h include/
  directory findable by prepending it to CPATH
  (https://gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html).
   - c.f. conda-forge/linux-sysroot-feedstock#52
matthewfeickert added a commit to matthewfeickert/pythia8-feedstock that referenced this issue Aug 13, 2024
* Python 3.8 conda-forge distributions depend on crypt.h in the Python.h,
  but given changes in late 2023 crypt.h is no longer distributed in the
  same include/ directory as Python.h and so for Python 3.8 Linux builds
  needs to be provided by installing libxcrypt as a host requirement and
  then additionally making the location of the installed crypt.h include/
  directory findable by prepending it to CPATH
  (https://gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html).
   - c.f. conda-forge/linux-sysroot-feedstock#52
edoapra added a commit to edoapra/nwchem-feedstock that referenced this issue Aug 21, 2024
@isuruf
Copy link
Member

isuruf commented Oct 7, 2024

Unbundled now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants