मैं लिनक्स पर गैर-रूट के रूप में एक अलग (नया) ग्लिबक / जीसीसी / ... कैसे बना सकता हूं


10

हमारा अभिकलन क्लस्टर एक पुराने कर्नेल (2.6.18) और निश्चित रूप से, पुराने लिबास और बायनेरिज़ के साथ CentOS का एक बहुत पुराना संस्करण चलाता है। क्योंकि पूरी बात को अपडेट करने के लिए सभी नोड्स पर बहुत काम करने की आवश्यकता होती है, यह एक विकल्प नहीं है।

मैं एक प्रोग्राम को संकलित करने और उपयोग करने की कोशिश कर रहा हूं जिसके लिए C++11और gcc(और / या clang) के नए संस्करणों की आवश्यकता है । क्योंकि मैं सिस्टम के साथ बिल्कुल भी गड़बड़ नहीं करना चाहता, इसलिए मैं इसे कुछ स्थानीय निर्देशिका ट्री में नॉन-रूट उपयोगकर्ता के रूप में करना चाहता हूं।

समस्या यह है, कि मशीन (s) पर मौजूद की तुलना में एक gccनए की आवश्यकता है glibc। इसलिए, मुझे glibcअपने स्थानीय lib/पेड़ के एक अलग, नए संस्करण को बनाए रखने की आवश्यकता है , शायद यहां वर्णित है

जहां मैं खो गया हूं, मैं अपने स्थानीय परिवादों के पथों को सभी आवश्यक बायनेरिज़, अर्थात gcc, g++आदि में "हार्डकोड" कैसे करूं ? LD_LIBRARY_PATH को मेरे स्थानीय lib/पेड़ पर सेट करने से सभी सिस्टम बायनेरिज़ को अब काम नहीं करने का कारण बनता है ( ELF file OS ABI invalid) क्योंकि वे मेरे नए libm.so/ libc.soजिसके खिलाफ वे संकलित नहीं किए गए हैं का उपयोग करना चाहते हैं ।

तो, इसे लपेटने के लिए: एक पुरानी प्रणाली के समानांतर एक नए, स्थानीय विकास ढेर (युक्त glibc, gccआदि) को बनाए रखने का एक उचित तरीका क्या है ?

एक पक्ष के प्रश्न के रूप में: LD_LIBRARY_PATH को अलग करने के बाद SE पर सभी समाधान के रूप में पोस्ट किया जाता है glibc। मेरे लिए, यह उपरोक्त त्रुटियों का कारण बनता है जब मैं किसी भी सिस्टम बाइनरी (जैसे ls) को निष्पादित करने का प्रयास करता हूं । कैसे? क्या मैंने कुछ गलत किया है या यह इच्छित व्यवहार है?

जवाबों:


10

आपके पास मूल रूप से तीन विकल्प हैं:

  1. अपने पुस्तकालयों के चारों ओर एक आवरण का उपयोग करें, जो LD_LIBRARY_PATHउचित रूप से सेट होगा और फिर वांछित पुस्तकालय निष्पादित करेगा - कुछ इस तरह:

    #!/bin/sh
    export LD_LIBRARY_PATH="path/goes/here"
    exec "$@"
    
  2. लिंक के साथ -rpath( -Wl,rpath) जो द्विआधारी में गतिशील लिंकर के लिए खोज पथ जोड़ता है ( एसओ उत्तर भी देखें - इसमें आवरण का भी उल्लेख है)।

  3. आप इसे पढ़ना पसंद नहीं करेंगे: अपने क्लस्टर को अपडेट करें ("अपने" पर जोर दें)। एक न एक दिन ऐसा करना ही पड़ेगा, तो आज क्यों नहीं। "नहीं एक विकल्प" ज्यादातर मामलों में थोड़ा मजबूत है। अन्य उपयोगकर्ताओं के पास संभवतः समान मुद्दे हैं।

पुराने बायनेरिज़ के लिए समस्याएँ - बायनेरिज़ में उनके पसंदीदा डायनामिक लिंकर होते हैं। और पुराने डायनेमिक लिंकर नए ABI को नहीं समझते हैं। इस तरह से बायनेरिज़ को कॉल करने का प्रयास करें path/to/your/ld-linux-<arch>.so binary:।

बिल्डिंग जीसीसी: आप हमेशा CFLAGSजीसीसी के निर्माण वातावरण में निर्यात करने की कोशिश कर सकते हैं - लेकिन मुझे यकीन है कि वे प्रचारित होंगे। विभिन्न वितरणों का निर्माण आपको कुछ सुराग दे सकता है (उदाहरण के लिए: खुले तौर पर .sp80 फ़ाइल में पंक्ति 1880 के आसपास देखो )।


हाय पीटरफ, उत्तर के लिए धन्यवाद। मैं विकल्प 2 को पसंद करता हूं। हालाँकि, मैं मेथफाइल आदि को बदलने के बिना, उदाहरण के लिए, जीसीसी में हार्डकोड कैसे करूंगा? क्लस्टर अपडेट करने के लिए: यह निश्चित रूप से हमारे एजेंडे में है, लेकिन अभी बहुत से लोग इसका उपयोग लंबे समय तक गिरावट को सही ठहराने के लिए कर रहे हैं। इसके अलावा, इसे अपडेट करने के लिए हम कंपनी को फिर से काम पर रखने जा रहे हैं जिसने इसे मूल रूप से स्थापित किया है। हमारे समूह में कोई भी ऐसा नहीं है जिसके पास इसके लिए पर्याप्त ज्ञान और अनुभव हो।
जैनोलिवर २14

जीसीसी के लिए मेरे उत्तर का अद्यतन देखें। क्लस्टर अपग्रेड के लिए मेरी व्यक्तिगत सिफारिश एक आंतरिक (या कम से कम दीर्घकालिक बाहरी) गुरु प्राप्त करना है। यह आमतौर पर सस्ता और अधिक लचीला है और इसे पूरी तरह से आउटसोर्स करने की तुलना में लंबे समय तक चलता है। सबसे महत्वपूर्ण लाभ सिस्टम व्यवस्थापक और उपयोगकर्ताओं के बीच बातचीत के माध्यम से ज्ञान घर प्राप्त कर रहा है।
पियरफ

जर्मन वैज्ञानिक प्रणाली के निराशाजनक रूप से कम अनुसंधान समूह में एक छोटे से शोध समूह के रूप में, हम दुर्भाग्य से इस कार्य के लिए किसी को काम पर रखने या स्वयं समय का निवेश करने में सक्षम नहीं हैं। आप सही हो सकते हैं, कि लंबे समय में यह भुगतान हो सकता है, लेकिन अभी बजट कुछ इस तरह के लिए विवश हैं। यह एक कंपनी में नहीं होने का नकारात्मक पक्ष है। ;)
जैनोलिवेर

अपने विश्वविद्यालय से आईटी / सीएस छात्रों को प्राप्त करें - एक अच्छा भी अपने बीएससी / एमएससी थीसिस के लिए इसका उपयोग करने में सक्षम हो सकता है। और वित्त के बारे में: खुशी है कि आप जर्मनी में हैं और आपके पूर्वी पड़ोसियों में से एक में नहीं है (शायद ऑस्ट्रिया के अपवाद के साथ)। :)
पेट्रफ

लिंकर को पास करने -rpath( -Wl,rpath) के विकल्प के रूप में , लिंकर LD_RUN_PATHपर्यावरण चर से खोज पथ तक
राक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.