কীভাবে স্থায়ীভাবে স্কেল সেন্টস 6.4 সক্ষম করবেন?


33

আমি ডিভোওলসেটের একটি নতুন সংস্করণ ইনস্টল করেছি (1.1) এবং আমি কীভাবে স্থায়ীভাবে এগুলি ডিফল্ট হিসাবে সেট করতে যাব তা ভাবছিলাম। এই মুহুর্তে, আমি যখন আমার সার্ভারে সেন্টোস চালাচ্ছি তখন আমাকে এই কমান্ডটি চালাতে হবেscl enable devtoolset-1.1 bash

আমি এটিকে ~ / .bashrc এ যুক্ত করার চেষ্টা করেছি এবং সাফল্য ছাড়াই একেবারে শেষ লাইনে আটকানোর চেষ্টা করেছি।

উত্তর:


62

আপনার ~/.bashrcবা ~/.bash_profileসরল উত্সে ডিভোটোলসেট সরবরাহ করা "সক্ষম" স্ক্রিপ্ট। উদাহরণস্বরূপ, ডিভটোলসেট 2 এর সাথে কমান্ডটি হ'ল:

source /opt/rh/devtoolset-2/enable

অথবা

source scl_source enable devtoolset-2

অনেক বেশি দক্ষ: কোনও কাঁটাচামচ, কোনও ছাঁট শেল নয়


এটি 6.8 শতাংশে প্রযোজ্য ছিল। "উত্স / অপ্ট /
আরএইচ

1
এই ফাইলটি উত্সাহিত করা এখনও
ডিভোওলসেট-with

1
@ ডাটদিনহোকোক হ্যাঁ, আপনার উত্সটি দরকার/opt/rh/devtoolset-7/enable
ডাস্ট্রয়েইকা

13

এর বিকল্প source /opt/rh/devtoolset-4/enableহ'ল

source scl_source enable devtoolset-4

উপরের শেল স্ক্রিপ্টটি scl_sourceহার্ড কোডড পাথ ব্যবহার করার চেয়ে আরও মার্জিত (অন্য কোনও মেশিনে আলাদা হতে পারে)। তবে ব্যবহারগুলি এবং অন্যান্য জিনিসগুলির scl_sourceকারণে কম হয় does/opt/rh/devtoolset-4/enablescl_source

ব্যবহার scl_sourceকরতে আপনাকে প্যাকেজ আপগ্রেড করতে হতে পারেscl-utils

yum update scl-utils  # old scl-utils versions miss scl_source

দ্রুত কপি-পেস্ট করুন

echo 'source scl_source enable devtoolset-4' >> ~/.bashrc
    # Do not forget to change the version ↑

উত্সাহী লোকদের জন্য উত্স কোড

scl_sourceউত্স কোডের একটি উদাহরণ :
https://gist.github.com/bkabrda/6435016

scl_sourceআমার রেড হ্যাট 7.1 এ ইনস্টল করা হয়েছে

#!/bin/bash

_scl_source_help="Usage: source scl_source <action> [<collection> ...]

Don't use this script outside of SCL scriptlets!

Options:
    -h, --help    display this help and exit"

if [ $# -eq 0 -o $1 = "-h" -o $1 = "--help" ]; then
    echo "$_scl_source_help"
    return 0
fi


if [ -z "$_recursion" ]; then
    _recursion="false"
fi
if [ -z "$_scl_scriptlet_name" ]; then
    # The only allowed action in the case of recursion is the same
    # as was the original
    _scl_scriptlet_name=$1
fi
shift 1

if [ -z "$_scl_dir" ]; then
    # No need to re-define the directory twice
    _scl_dir=/etc/scl/conf
    if [ ! -e $_scl_dir ]; then
        _scl_dir=/etc/scl/prefixes
    fi
fi

for arg in "$@"; do
    _scl_prefix_file=$_scl_dir/$arg
    _scl_prefix=`cat $_scl_prefix_file 2> /dev/null`
    if [ $? -ne 0 ]; then
        echo "Can't read $_scl_prefix_file, $arg is probably not installed."
        return 1
    fi

    # First check if the collection is already in the list
    # of collections to be enabled
    for scl in ${_scls[@]}; do
        if [ $arg == $scl ]; then
            continue 2
        fi
    done

    # Now check if the collection isn't already enabled
    /usr/bin/scl_enabled $arg > /dev/null 2> /dev/null
    if [ $? -ne 0 ]; then
        _scls+=($arg)
        _scl_prefixes+=($_scl_prefix)
    fi;
done

if [ $_recursion == "false" ]; then
    _i=0
    _recursion="true"
    while [ $_i -lt ${#_scls[@]} ]; do
        _scl_scriptlet_path="${_scl_prefixes[$_i]}/${_scls[$_i]}/${_scl_scriptlet_name}"
        source "$_scl_scriptlet_path"
        if [ $? -ne 0 ]; then
            echo "Can't source $_scl_scriptlet_name, skipping."
        else
            export X_SCLS="${_scls[$_i]} $X_SCLS"
        fi;
        _i=$(($_i+1))
    done
    _scls=()
    _scl_prefixes=()
    _scl_scriptlet_name=""
    _recursion="false"
fi

3

সমস্যাটি হ'ল scl enable devtoolset-1.1 bashনতুন বাশ শেল তৈরি। সুতরাং আপনি যখন এটি আপনার scl enable devtoolset-1.1 bashবাশার্কে রেখেছেন , এটি একটি নতুন শেল তৈরি করে ... যা আপনার .bashrc লোড করে, যা চালায় , যা একটি নতুন শেল তৈরি করে, যা আপনার .bashrc লোড করে ... ফোরবম্ব!

আপনি সম্ভবত আপনার .bashrc এ এরকম কিছু চান:

if [ "$(gcc -dumpversion)" != "4.7.2" ]; then 
  scl enable devtoolset-1.1 bash
fi

অথবা

if [ -z "$TRIEDSCLDEVTOOLSET" ]; then
  export TRIEDSCLDEVTOOLSET=true
  scl enable devtoolset-1.1 bash
fi
  • প্রথমটি কাঁটাচামচ চালিয়ে যাবে যদি ডিভোটোলসেট -১.১ এ জিসিসি ৪.7.২ থাকে না, এবং আপনার স্থানীয় পরিবেশে জিসিসি ৪..2.২ থাকলেও কাজ করতে ব্যর্থ হবে।
  • এটি উপরের মতো একটি নতুন শেল তৈরি করে। সুতরাং আপনি যখন আপনার টার্মিনাল উইন্ডো বা ssh অধিবেশন তৈরি করবেন, আপনি দুটি বাশ সেশনে থাকবেন এবং দু'বার করতে হবে exit

উত্তর দেওয়ার জন্য সময় দেওয়ার জন্য ধন্যবাদ। আমি প্রকৃতপক্ষে একটি কাঁটাচামচ বোমা পেয়েছি এবং কেন বুঝতে পারিনি তবে এটি সঠিক ধারণা দেয়। মনে হচ্ছে scl ডিভোওলসেট -১.১ ব্যাশ ব্যবহার করা সেই ব্যবহারিক উপায় নয়, যেহেতু আমি কেবল ৪.7.২ ব্যবহার করতে যাচ্ছি এবং এটি পুরানো সংস্করণ নয়। আমার কি কেবল দেবতুলের পুরানো সংস্করণটি সরিয়ে ফেলা এবং কেবলমাত্র একটি সংস্করণ রাখতে অন্য কিছু করা দরকার?
th3v0id

আপনার যদি মেশিনে রুট সুবিধাগুলি থাকে এবং কখনও কখনও জিসিসির পুরানো সংস্করণ (অথবা ডিভলটোলসেট -১.১ এ থাকা অন্যান্য সরঞ্জামগুলির প্রয়োজন হয় না) তবে হ্যাঁ, আপনি কেবলমাত্র সর্বশেষতম জিসিসি স্থানীয়ভাবে ইনস্টল করতে চাইতে পারেন। আপনাকে ডিভোটোলসেট সরিয়ে ফেলতে হবে না, কেবল এটি করবেন না scl enable
rob05c

Gotcha। হ্যাঁ আমি রুট অনুমতি পেয়েছি। কীভাবে আপনি দেশীয়ভাবে জিনিসগুলি "ইনস্টল" করেন? উভয়ই ইনস্টল করা আছে তবে scl enableপ্রতিবারই আমি একটি নতুন ssh অধিবেশন খুলতে হবে আমাকে চালাতে হবে। আমি এই দু: খজনক প্রশ্নের জন্য ক্ষমা চাইছি তবে আমি কীভাবে নতুন সংস্করণটিকে ডিফল্ট হিসাবে সেট করা যায় তা নিশ্চিত নই। আমার বাশ প্রোফাইলে রফতানি করার দরকার আছে এমন পরিবেশের পরিবর্তনশীল?
th3v0id

দেখে মনে হচ্ছে আপনি কীভাবে স্ক্লাল এবং ডেভোটোলসেট কাজ করেন তা বুঝতে পারছেন না। ডিভটোলসেট হ'ল সফটওয়্যার কালেকশন (এসসিএল) এর একটি সংগ্রহ। এসসিএল আপনাকে একই সরঞ্জামটির একাধিক সংস্করণ ব্যবহার করতে দেয়। উদাহরণস্বরূপ, একই মেশিনে আপনার যদি জিসিসি 4.4 এবং জিসিসি 4.7 প্রয়োজন হয়, আপনি এসসিএল দিয়ে এটি করতে পারেন। আপনার কম্পিউটারে জিসিসি 4.7 প্রকৃতপক্ষে ইনস্টল করা নেই, এটি এসসিএল পরিবেশে। কেবলমাত্র পুরানো সংস্করণ (4.4?) সত্যিই ইনস্টল করা আছে। স্থানীয়ভাবে অ্যাপ্লিকেশন ইনস্টল করতে আপনার ডিস্ট্রোর প্যাকেজ ম্যানেজারটি ব্যবহার করুন। উবুন্টুতে এটি আপ্ট-গেট, যেমন sudo apt-get install gcc। CentOS এ, এটি ইয়াম, যেমন sudo yum install gcc
rob05c

আমি সন্দেহ করি আপনার কাছে CentOS এর একটি পুরানো সংস্করণ রয়েছে যা এখনও জিমি 4 নম্বরে নেই um আমি যাব sudo yum update && sudo yum install gccএবং চেক করব gcc --version। যদি এটি 4.7 না হয়, তবে আপনাকে সম্ভবত ডিভোটোলসেট ব্যবহার করতে হবে। আপনি যদি এটি এসসিএলে চালনা করতে না চান, আপনি নেটিভ জিসিসিটি আনইনস্টল করে sudo yum remove gccতারপরে আপনার পাথে ডেভলটসেট ডিরেক্টরিটি যুক্ত করতে পারেন, যেমন export PATH=$PATH:/opt/centos/devtoolset-1.1/root/usr/binআপনার .bashrc এ রেখে দিন। এটি আপনাকে টাইপ করতে gccবা g++দেবটোলসেট জিসিসি 4.7 পেতে দেয়।
rob05c

0

অন্যান্য উত্তরে উল্লিখিত স্ক্রিপ্টটি সনাক্ত করার একটি বিকল্প উপায় হ'ল আপনার প্যাকেজ পরিচালককে এটি কোথায় থাকে তা আপনাকে জানান let

আমরা আমাদের আরএইচইএল / সেন্টোস ভিজাগর মেশিনে ডটনেট সরঞ্জামগুলি টানতে এটি চালাই।

source $(rpm -ql rh-dotnet20-runtime|grep -E /enable$)

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