Làm cách nào để duy trì ngăn xếp glibc / gcc / 'riêng biệt (mới hơn) dưới dạng không root trên Linux


10

Cụm tính toán của chúng tôi chạy một phiên bản CentOS rất cũ, với Kernel cũ (2.6,18) và, tất nhiên, các lib và nhị phân cũ. Bởi vì việc cập nhật toàn bộ yêu cầu rất nhiều công việc trên tất cả các nút, đây không phải là một tùy chọn.

Tôi đang cố gắng biên dịch và sử dụng một chương trình yêu cầu C++11và do đó các phiên bản mới hơn của gcc(và / hoặc clang). Bởi vì tôi không muốn làm phiền hệ thống, tôi muốn làm điều này với tư cách là người dùng không root trong một số cây thư mục cục bộ.

Vấn đề là, điều đó gccđòi hỏi một cái mới glibchơn cái hiện diện trên (các) máy. Do đó, tôi cần duy trì một phiên bản mới hơn, riêng biệt hơn glibctrong lib/cây cục bộ của mình , có lẽ như được mô tả ở đây .

Nơi tôi bị mất là, làm thế nào để tôi "mã hóa cứng" các đường dẫn của libs cục bộ của tôi vào tất cả các nhị phân cần thiết gcc, g++v.v. , v.v.? Đặt LD_LIBRARY_PATH cho lib/cây cục bộ của tôi khiến tất cả các nhị phân hệ thống không hoạt động nữa ( ELF file OS ABI invalid) vì chúng muốn sử dụng cái mới libm.so/ libc.somà chúng chưa được biên dịch.

Vì vậy, để kết thúc nó: cách thích hợp để duy trì một ngăn xếp phát triển cục bộ mới hơn (chứa glibc, gccv.v.) song song với một hệ thống cũ mà không gây rối như root?

Như một câu hỏi phụ: Đặt LD_LIBRARY_PATH được đăng dưới dạng giải pháp trên toàn SE khi được tách riêng glibc. Đối với tôi, nó gây ra các lỗi ở trên khi tôi cố gắng thực hiện bất kỳ hệ thống nhị phân nào (như ls). Làm thế nào mà? Tôi đã làm điều gì sai hay đây là hành vi dự định?

Câu trả lời:


10

Về cơ bản, bạn có ba tùy chọn:

  1. Sử dụng một trình bao bọc xung quanh các thư viện của bạn, nó sẽ thiết lập LD_LIBRARY_PATHmột cách thích hợp và sau đó thực thi thư viện mong muốn - đại loại như:

    #!/bin/sh
    export LD_LIBRARY_PATH="path/goes/here"
    exec "$@"
    
  2. liên kết với -rpath( -Wl,rpath) thêm đường dẫn tìm kiếm cho trình liên kết động vào nhị phân (xem thêm câu trả lời SO - nó cũng đề cập đến trình bao bọc).

  3. Bạn sẽ không thích đọc cái này: cập nhật cụm của bạn (lưu ý nhấn mạnh vào "của bạn"). Nó sẽ phải được thực hiện ngày này hay ngày khác, vậy tại sao không phải hôm nay. "Không phải là một lựa chọn" là một chút mạnh mẽ trong hầu hết các trường hợp. Những người dùng khác có thể có cùng một vấn đề.

Đối với các nhị phân cũ có vấn đề - các nhị phân có trình liên kết động ưa thích của chúng được nhúng trong chúng. Và trình liên kết động cũ không hiểu ABI mới hơn. Hãy thử gọi các nhị phân như thế này : path/to/your/ld-linux-<arch>.so binary.

Xây dựng GCC: bạn luôn có thể thử xuất CFLAGStrong môi trường xây dựng của GCC - nhưng tôi chắc chắn rằng chúng được truyền bá. Bản dựng của các bản phân phối khác nhau có thể cung cấp cho bạn một số manh mối (ví dụ: đối với openSUSE, hãy tìm xung quanh dòng 1880 trong tệp .spec ).


Hi peterph, cảm ơn câu trả lời. Tôi thích tùy chọn 2. Tuy nhiên, làm thế nào để tôi mã hóa đường dẫn vào, ví dụ, gcc, mà không phải thay đổi Makefile, v.v.? Đối với việc cập nhật cụm: Điều này tất nhiên nằm trong chương trình nghị sự của chúng tôi, nhưng hiện tại có quá nhiều người đang sử dụng nó để biện minh cho thời gian ngừng hoạt động lâu hơn. Ngoài ra, để cập nhật nó, chúng tôi sẽ thuê công ty một lần nữa thiết lập nó ban đầu. Không có ai trong nhóm của chúng tôi có đủ kiến ​​thức và kinh nghiệm cho việc này.
janoliver

Đối với GCC xem cập nhật câu trả lời của tôi. Để nâng cấp cụm, khuyến nghị cá nhân của tôi là lấy một chuyên gia nội bộ (hoặc ít nhất là bên ngoài dài hạn). Nó thường rẻ hơn và linh hoạt hơn trong thời gian dài hơn là gia công hoàn toàn. Lợi thế quan trọng nhất là có được ngôi nhà kiến ​​thức thông qua các tương tác giữa quản trị viên hệ thống và người dùng.
peterph

Là một nhóm nghiên cứu nhỏ trong hệ thống khoa học Đức thiếu tài chính, chúng tôi rất tiếc không thể thuê ai đó cho nhiệm vụ này hoặc tự đầu tư thời gian. Bạn có thể đúng, về lâu dài điều này có thể được đền đáp, nhưng ngay bây giờ ngân sách quá hạn chế cho một cái gì đó như thế này. Đây là nhược điểm của việc không ở trong một công ty. ;)
janoliver

Nhận sinh viên CNTT / CS từ trường đại học của bạn - một người giỏi thậm chí có thể sử dụng nó cho luận án BSc / Msc của anh ấy / cô ấy. Và liên quan đến tài chính: hãy vui mừng khi bạn ở Đức chứ không phải ở một trong những nước láng giềng phía đông của bạn (có thể ngoại trừ Áo). :)
peterph

Thay thế cho việc chuyển -rpath( -Wl,rpath) đến trình liên kết, trình liên kết cũng sẽ thêm các đường dẫn từ LD_RUN_PATHbiến môi trường vào đường dẫn tìm kiếm
rakslice
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.