লিনাক্সে নন-রুট হিসাবে কীভাবে আমি পৃথক (আরও নতুন) গ্লিবসি / জিসিসি /… স্ট্যাক বজায় রাখব?


10

আমাদের গণনা ক্লাস্টারটি পুরানো কার্নেল (2.6.18) এবং অবশ্যই পুরাতন লিবস এবং বাইনারি সহ সেন্টোসের একটি খুব পুরানো সংস্করণ চালায়। কারণ পুরো জিনিসটি আপডেট করার জন্য সমস্ত নোডে প্রচুর কাজ করা দরকার, এটি কোনও বিকল্প নয়।

আমি এমন একটি প্রোগ্রাম সংকলন এবং ব্যবহার করার চেষ্টা করছি যা এর জন্য (এবং / অথবা ) C++11এর আরও নতুন সংস্করণ প্রয়োজন । যেহেতু আমি সিস্টেমটির সাথে মোটেও গোলযোগ করতে চাই না, তাই কিছু স্থানীয় ডিরেক্টরি ট্রিতে একটি নন-রুট ব্যবহারকারী হিসাবে এটি করতে চাই।gccclang

সমস্যাটি হচ্ছে, এর gccজন্য glibcমেশিনে উপস্থিত থাকাগুলির চেয়ে একটি নতুন প্রয়োজন । সুতরাং, glibcআমার স্থানীয় lib/গাছে একটি পৃথক, নতুন সংস্করণ বজায় রাখা দরকার , সম্ভবত এখানে বর্ণিত হিসাবে ।

যেখানে আমি হারিয়ে গেছি তা হল, আমি কীভাবে আমার প্রয়োজনীয় স্থানীয় বাইনারিগুলি, অর্থাৎ gcc, g++ইত্যাদিতে আমার স্থানীয় লাইবসের পাথগুলিকে "হার্ডকোড" করব ? আমার স্থানীয় lib/গাছে এলডি_লিবিআরএআইএপিএটিএইচ সেট করার ফলে সমস্ত সিস্টেম বাইনারিগুলি আর কাজ করবে না ( ELF file OS ABI invalid) কারণ তারা আমার নতুন libm.so/ libc.soযার বিরুদ্ধে তারা সংকলন করা হয়নি তা ব্যবহার করতে চায় ।

সুতরাং, এটি মোড়ানো পর্যন্ত: একটি নতুন, স্থানীয় উন্নয়ন স্ট্যাক (ধারণকারী বজায় রাখার জন্য সঠিক উপায় কী glibc, gccপ্রায় রুট হিসাবে তালগোল পাকানো ছাড়া সমান্তরাল একটি পুরানো সিস্টেমে ইত্যাদি)?

পার্শ্ববর্তী প্রশ্ন হিসাবে: এলডি_লিবিআরএইপিএটিএল সেট করা সমস্ত এসই জুড়ে সমাধান হিসাবে পোস্ট করা হয় যখন এটি আলাদা হয় glibc। আমার জন্য, যখন আমি কোনও সিস্টেম বাইনারি (যেমন ls) চালানোর চেষ্টা করি তখন এটি উপরের ত্রুটিগুলির কারণ ঘটায় । কিভাবে? আমি কি কিছু ভুল করেছি বা এটিই উদ্দেশ্যমূলক আচরণ?

উত্তর:


10

আপনার কাছে মূলত তিনটি বিকল্প রয়েছে:

  1. আপনার লাইব্রেরির চারপাশে একটি মোড়ক ব্যবহার করুন, এটি LD_LIBRARY_PATHযথাযথভাবে সেট হবে এবং তারপরে কাঙ্ক্ষিত গ্রন্থাগারটি কার্যকর করবে - এরকম কিছু:

    #!/bin/sh
    export LD_LIBRARY_PATH="path/goes/here"
    exec "$@"
    
  2. -rpath( -Wl,rpath) এর সাথে লিঙ্ক করুন যা বাইনারিটিতে গতিশীল লিঙ্কারের জন্য অনুসন্ধানের পথকে যুক্ত করে ( এসও উত্তরও দেখুন - এতে মোড়কের উল্লেখও রয়েছে)।

  3. আপনি এটি পড়তে পছন্দ করবেন না: আপনার ক্লাস্টার আপডেট করুন ("আপনার" এর উপর জোরটি নোট করুন)। এটি এক না একদিন করতে হবে, তবে আজ কেন নয়। বেশিরভাগ ক্ষেত্রে "বিকল্প নয়" কিছুটা শক্তিশালী। অন্যান্য ব্যবহারকারীদের সম্ভবত একই সমস্যা আছে।

পুরানো বাইনারিগুলির সমস্যা যেমন রয়েছে - বাইনারিগুলির মধ্যে তাদের পছন্দের গতিশীল লিঙ্কার এম্বেড থাকে। এবং পুরানো গতিশীল লিঙ্কারটি নতুন এবিআই বুঝতে পারে না। ভালো বাইনেরিতে কল করার চেষ্টা করুন: path/to/your/ld-linux-<arch>.so binary

বিল্ডিং জিসিসি: আপনি সর্বদা CFLAGSজিসিসির বিল্ড এনভায়রনমেন্টে রফতানি করার চেষ্টা করতে পারেন - তবে আমি নিশ্চিত যে তারা প্রচারিত হবে। বিভিন্ন বিতরণের বিল্ডস্ক্রিপ্টগুলি আপনাকে কিছু ক্লু দিতে পারে (যেমন: .spec ফাইলে ওপেনসুএসই 1880 লাইনের আশেপাশের জন্য )।


হাই পিটারফ, উত্তরের জন্য ধন্যবাদ। আমি বিকল্প 2 পছন্দ করি তবে যাইহোক, আমি আরপিথকে হার্ডকোড করব, উদাহরণস্বরূপ, জিসিসি, মেকফিল ইত্যাদি পরিবর্তন না করেই? ক্লাস্টারটি আপডেট করার ক্ষেত্রে: এটি অবশ্যই আমাদের কার্যসূচিতে রয়েছে, তবে এই মুহুর্তে অনেক লোক দীর্ঘমেয়াদীদের সমর্থন করতে এটি ব্যবহার করছে। এছাড়াও, এটি আপডেট করার জন্য আমরা সেই সংস্থাটিকে আবার নিয়োগ করতে যাচ্ছি যা এটি মূলত সেট আপ করে। আমাদের গ্রুপে এমন কেউ নেই যার পক্ষে এর জন্য পর্যাপ্ত জ্ঞান এবং অভিজ্ঞতা রয়েছে।
জানলিভার

জিসিসির জন্য আমার উত্তরটির আপডেট দেখুন। ক্লাস্টার আপগ্রেডের জন্য আমার ব্যক্তিগত সুপারিশটি হল একটি অভ্যন্তরীণ (বা কমপক্ষে দীর্ঘমেয়াদী বহিরাগত) গুরু পাওয়া get এটি পুরোপুরি আউটসোর্সিংয়ের চেয়ে দীর্ঘমেয়াদে সাধারণত সস্তা এবং আরও নমনীয়। সিস্টেম অ্যাডমিন এবং ব্যবহারকারীদের মধ্যে কথোপকথনের মাধ্যমে জ্ঞান অর্জনের সবচেয়ে গুরুত্বপূর্ণ সুবিধা।
পিটার্ফ

আশাহীনভাবে সুবিধাবঞ্চিত, জার্মান বৈজ্ঞানিক ব্যবস্থার একটি ছোট গবেষণা দল হিসাবে, দুর্ভাগ্যক্রমে আমরা এই কাজের জন্য কাউকে নিয়োগ দিতে বা নিজেরাই সময় বিনিয়োগ করতে সক্ষম হই না। আপনি সঠিক হতে পারেন, দীর্ঘমেয়াদে এটি পরিশোধ করতে পারে তবে এই মুহুর্তের জন্য বাজেটগুলি খুব সীমাবদ্ধ। এটি কোনও সংস্থায় না থাকার ক্ষতি। ;)
জানলিভার

আপনার বিশ্ববিদ্যালয় থেকে আইটি / সিএস শিক্ষার্থীরা পান - একটি ভাল এমনকি এটি তার / তার বিএসসি / এমএসসি থিসিসের জন্য ব্যবহার করতে সক্ষম হতে পারে। এবং অর্থ সম্পর্কিত: আপনি জার্মানিতে আছেন এবং আপনার পূর্ব প্রতিবেশীদের কোনওর মধ্যে নেই (খুশি অস্ট্রিয়া বাদে) খুশি হোন। :)
পিটার্ফ

লিঙ্কারে -rpath( -Wl,rpath) পাস করার বিকল্প হিসাবে , LD_RUN_PATH
লিঙ্কারটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.