আমি কীভাবে আরএইচইএলের কোন সংস্করণ ব্যবহার করছি তা সন্ধান করবেন?


14

আমি এমন একটি পরিবেশে কাজ করি যেখানে আমরা আস্তে আস্তে মেশিনগুলি রেড হ্যাট এন্টারপ্রাইজ লিনাক্স 5 থেকে আরএইচইএল 6 এ রূপান্তর করছি।

আরএইচইল 6 মেশিনে বর্তমানে আরএইচইএল 5 মেশিনে যা করা হচ্ছে তার থেকে আলাদাভাবে কিছু করার জন্য আমার কিছু স্ক্রিপ্ট দরকার need

ব্যবহারিক সমাধানটি রানটাইমের সময় যাচাই করা এবং RHEL5 এ কিছু কমান্ড চালানো, অন্যগুলি RHEL6 এ এবং কিছু উভয় ক্ষেত্রে চালানো।

এর ব্যবহারিক উদাহরণ হ'ল আমরা এনভায়রনমেন্ট মডিউলগুলি ব্যবহার করছি এবং আমার .bashrcমধ্যে একটি module load gitলাইন রয়েছে , তবে আরএইচইএল 6 মেশিনে এই আদেশটি ত্রুটিযুক্ত:

RHEL6 system, git should be installed - not loading module

মডিউলফাইলে সন্ধান করে আমি নিম্নলিখিত কোডটি পাই:

set redhatrelease [eval exec "cat /etc/redhat-release"]
if { [regexp -nocase {release 6} $redhatrelease] } {
  puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n"
} else {
  ...
}

এটি আমার যা করতে চাইবে তা মনে হচ্ছে তবে আমি আরও ছোট করার জন্য আশা করছিলাম।

সুতরাং, বাশ স্ক্রিপ্টে RHEL6 থেকে RHEL5 বলার সবচেয়ে সহজ উপায় কী?

আদর্শভাবে এটি বিভিন্ন প্রধান সংস্করণ জুড়ে মজবুত হওয়া উচিত, তবে ছোটখাট প্রকাশের সংখ্যায় পরিবর্তনের ক্ষেত্রে সহনশীল হওয়া উচিত।


না lsb_releaseকাজ করে? ( -rআপনাকে কেবলমাত্র নম্বর দেওয়া উচিত; -aউপলভ্য সমস্ত কিছু দেখার জন্যও চেষ্টা করুন ) যদি তাই হয় তবে এটি ক্রস-বিক্রেতাও।
ডারোবার্ট

প্ল্যাটফর্ম নয়, বৈশিষ্ট্যগুলির জন্য পরীক্ষা করুন। আরএইচইএল 7 বেরিয়ে আসার পরে আপনার প্ল্যাটফর্ম পরীক্ষাটি আজ ভেঙে যাবে এবং আরএইচইএল 6.neনেক্সট বেরিয়ে আসার আগেই এটি ভেঙে যেতে পারে, কারণ সম্ভবত এটিকে সরানোর অভিযোগটি চুপ করে রাখতে তারা কোনও EL5 বৈশিষ্ট্য 6.x এ প্রেরণ করেছে। সুতরাং, যদি আপনার স্ক্রিপ্টে gitবাশ মডিউলের প্রয়োজন হয়, আপনি এটি কল করার আগে এটি বিদ্যমান কিনা তা পরীক্ষা করে দেখুন। পরে / কখন এটি উপস্থিত হয়, আপনার চেকের ফলাফল পরিবর্তন হয়, তাই হঠাৎ কোনও অতিরিক্ত প্রচেষ্টা ছাড়াই বৈশিষ্ট্যটি কাজ শুরু করে।
ওয়ারেন ইয়ং

@ ওয়ারেন ইয়ং - ধন্যবাদ, তবে আমি এখানে সিসাসমিন নই, কেবলমাত্র কেন্দ্রীয়ভাবে পরিচালিত আরএইচএল মোতায়েনের একজন ব্যবহারকারী। আমাদের সমস্ত RHEL5 মেশিনই মূলত একই চিত্র, সমস্ত RHEL6 মেশিনে রয়েছে, তাই আমার জন্য বড় সংশোধনীটি জানা যথেষ্ট। প্রদত্ত যে আমরা কেবল এখন আরএইচইএল 6 এ যাওয়ার পরিকল্পনার পর্যায়ে রয়েছি, আমি মনে করি আরএইচইএল 7 সম্পর্কে আমাদের চিন্তিত হওয়ার আগে কিছুটা সময় হয়ে যাবে। * 8 ')
মার্ক বুথ

@डरবার্ট - না, আরএইচইএল 5 এ এবং 6 lsb_release -rএ অন্যান্য পাঠ্যও অন্তর্ভুক্ত রয়েছে, যেমন Release: 5.8। যেমন ডেনিস কার্সেমেকার ব্যাখ্যা করেছেন যে আপনি যদি এর lsb_release -rsপরিবর্তে ব্যবহার করেন তবে আপনি কেবল নম্বরটি পান।
বুথ

এছাড়াও সার্ভারসফল্ট / প্রশ্ন / 65৮65৫৪ / কি - রূপান্তর-of - rhel - am - i- ব্যবহার করে দেখুন - যখন lsb ইনস্টল না থাকে তখন RPM দিয়ে এটি করার জন্য একটি পরামর্শ রয়েছে।
ড্যান প্রীটস

উত্তর:


10

আপনি lsb_releaseকমান্ডটিও ব্যবহার করতে পারেন । আপনি যদি ইতিমধ্যে নিশ্চিত হন যে এটি আরএইচএল, প্রধান সংস্করণ নম্বরটি হ'ল:

majversion=$(lsb_release -rs | cut -f1 -d.)

সেন্টোস এবং রেডহ্যাট যথাযথভাবে কাজ করে, রেডহ্যাটের ওরাকল লিনাক্স রিলিজ ব্যর্থ হয়। lsb_re দয়া করে পাওয়া যায় নি।
ব্যবহারকারী 959690

এই উত্তরটি এখন পুরানো বলে মনে হচ্ছে। আমি কেবল lsb_releaseআমার আরএইচএল / সেন্টোস 5 মেশিনে পাই । এটি 6 বা 7 এ কোথাও পাওয়া যায় না
ডেল অ্যান্ডারসন

আপনাকে redhat-lsb-core প্যাকেজ ইনস্টল করতে হবে।
ডেনিস কারসেমেকার

15
if grep -q -i "release 6" /etc/redhat-release
then
  echo "running RHEL 6.x"
fi

এটি আমি ভাবতে পারি সবচেয়ে সহজ উপায়।


সেন্টোস এবং আর এইচএইচএল এর প্রতিটি প্রকারের জন্য আমি আমার ইনভেন্টরিতে 5 থেকে 7 এর মধ্যে lsb_releaseকাজ করে যা কেবল 5 এর জন্য কাজ করে না বলে মনে হয়
ডেল অ্যান্ডারসন

4

ব্যবহার rpm -q |grep redhat-release-server

/etc/redhat-releaseফাইল একজন প্রশাসক প্রকৃত ওএস আপগ্রেড করণ ছাড়া তৃতীয় পক্ষের সফটওয়্যার ইনস্টল করতে খুঁজছি দ্বারা সম্পাদিত হয়ে থাকতে পারে।


1
আপনি কি rpm -qaপরিবর্তে বলতে চেয়েছিলেন rpm -q? -qনিজেই ব্যবহার করার জন্য একটি কোয়েরি যুক্তি প্রয়োজন।
ডেল অ্যান্ডারসন

@ ডেল অ্যান্ডারসন, আপনাকে ধন্যবাদ, .4.৪-এ আমার পক্ষে একমাত্র তিনিই কাজ করেছিলেন এবং আমি এটিকে জানতাম না 7.4যতক্ষণ না আমি এটি চালিয়েছি-qa
ব্রায়ান থমাস

2

/etc/issueফাইলের পরিবর্তে ফাইলটি ব্যবহার করে আপনি একাধিক লিনাক্স ডিস্ট্রোজের জন্য এটিতে প্রসারিত করতে পারেন /etc/redhat-release


2
major_version=$(rpm -q --queryformat '%{RELEASE}' rpm | grep -o [[:digit:]]*\$)

rpm -q --queryformat '%{RELEASE}' rpmপ্রিন্ট কিছু 25.el7। তাহলে এটি কেবল সর্বশেষ অঙ্ক (গুলি) নেওয়ার বিষয় matter RHELs 5,6,7 এবং ফেডোরা 24 তে পরীক্ষিত।

অন্যরা যেমন উল্লেখ করেছে, lsb-versionইনস্টল করা নাও হতে পারে। অতিরিক্তভাবে, কমপক্ষে একটি RHEL5 সিস্টেম রয়েছে যাতে redhat-release-serverপ্যাকেজ ইনস্টল করা নেই।


আপনাকে ধন্যবাদ, এটি উত্সাহিত হওয়া উচিত, কারণ এটি সর্বদা কাজ করে এবং ঠিক পছন্দসই সংখ্যাটি দেয়।
ফিলিফি

1

এই ফলাফলটি পেতে আরও একটি সুনির্দিষ্ট উপায়। আরএইচইএলে কার্নেল প্যাকেজগুলিতে 'এলএন' স্ট্রিং অন্তর্ভুক্ত রয়েছে, যেখানে এন ওএসের প্রধান সংস্করণটি উপস্থাপন করবে। সুতরাং, আরএইচএল এর সংস্করণ সনাক্ত করতে কেউ নিম্নলিখিত কমান্ডটি চালাতে পারে:

# uname -r | sed 's/^.*\(el[0-9]\+\).*$/\1/'

প্রদত্ত হোস্টের সাথে ম্যাচিংয়ের স্ট্রিংয়ের উপর নির্ভর করে এটি একটি স্ট্রিং, "el5", "el6" বা "el7" ফিরিয়ে আনবে।


আমি সেন্টোস এবং রেডহ্যাট, সংস্করণ 5-7 এর মিশ্রণটি ব্যবহার করছি এবং উত্তরটি আসলে সমস্ত সংস্করণে কাজ করে: uname -r | সেড এর /^.* (এল [0-9] \ +)। * $ / \ 1 / '
ওয়ালস্ট্রপ

0

আমি জর্ডানমের উত্তরটি ব্যবহার করে শেষ করেছি , তবে নিজের নিজস্ব একটি টুইস্ট যুক্ত করছি।

কারণ আমি আমার সমস্ত hel টি কমান্ড একসাথে এবং আমার সমস্ত r টি কমান্ড একসাথে রাখতে চাইনি, তবে তাদের নিজস্ব বিভাগের মধ্যেই অন্তর্নিহিত ছিল এবং প্রতিবার আমি স্যুইচ করতে চাইলে এই কোডটি প্রতিলিপি করতে চাইনি, পরিবর্তে আমি এটা করেছে:

if   grep -q -i "release 6" /etc/redhat-release ; then
  rhel6only=1
elif grep -q -i "release 5" /etc/redhat-release ; then
  rhel5only=1
else
  echo "Running neither RHEL6.x nor RHEL 5.x !"
fi

এইভাবে, আমি এই জাতীয় জিনিসগুলি করতে পারি:

# JDK
[ $rhel5only ] && module load java/6
[ $rhel6only ] && module load java/7

# Eclipse
module load eclipse

# Python
[ $rhel5only ] && module load python/2
[ $rhel6only ] && module load python/3

প্রভৃতি


0

যদি আপনার পরবর্তী উদ্দেশ্যটি প্রতিটি প্রসঙ্গ ভিত্তিতে মডিউলফাইলে পরিচালনা করা হয় তবে আমি আপনাকে পাইথন ফর্ম্যাটে বসবাসকারী ইজিবিল্ড এবং কিছু সম্পর্কিত যুক্তি পরীক্ষা করে দেখার পরামর্শ দিই:


0

এখানে উল্লিখিত সমস্ত পদ্ধতিই পাঠ্য ফাইলগুলিতে নির্ভর করে এবং এগুলি বিভ্রান্তিকর হতে পারে। ডান অ্যাক্সেস সহ কোনওরকম / etc / redhat-release, / etc / ইস্যু ইত্যাদির সামগ্রী পরিবর্তন করতে পারে এমনকি কেবল এই তথ্যটি অবলম্বন করতে পারে। একটি আরও নির্ভরযোগ্য পদ্ধতিতে সাধারণত রেহেলের প্রতিটি সংস্করণে রেড হ্যাট দ্বারা সরবরাহ করা কার্নেল রিলিজগুলি জেনে রাখা জড়িত:

  • RHEL4 কার্নেলটি 2.6.9-X ব্যবহার করে uses
  • আরএইচইএল 5 কার্নেলটি 2.6.18-X ব্যবহার করে
  • RHEL6 কার্নেলটি ২.6.৩২-এক্স ব্যবহার করে
  • RHEL7 কার্নেলটি 3.10.0-X ব্যবহার করে

অদ্যাবধি অবধি আপ, আপনি চালিয়ে চলমান কার্নেল রিলিজটি সন্ধান করতে পারেন uname -r। আপনি লাইনের সাথে কিছু চালিয়ে ফ্যানসিয়ার পেতে পারেন

uname -r | awk -F- '{print $1}'

এটি উপরের সারণীতে যেমন কার্নেল সম্পর্কে নির্দিষ্ট তথ্য দেয়। আপনি অন্য বিতরণগুলির সমান্তরাল গাড়ি চালাতে সক্ষম হতে পারেন, যদি তারা ক্রমাগত কার্নেল রিলিজ ব্যবহার করে।


2
-1। প্রশাসক ঠিক তত সহজে কার্নেল আপডেট করার সিদ্ধান্ত নিতে পারেন।
অলিভার গন্ডিয়া

0

আরএইচইএল 6 / etc / সিস্টেম-রিলিজ-সিপি ফাইল যুক্ত করেছে। এটিতে একটি :বিচ্ছিন্ন স্ট্রিং রয়েছে যা দেখতে দেখতে কিছুটা দেখতে পারে

# cat /etc/system-release-cpe
cpe:/o:redhat:enterprise_linux:6computenode:ga:computenode

আরএইচইএল সংস্করণ এবং আরএইচইএল বৈকল্পিক পেতে এখন ক্ষেত্রগুলি $ 5 এবং $ 7 টানাই যথেষ্ট।

# will be 7 or 6, does not work for 5 as file is missing there
RHEL_VERSION_MAJOR=$(cat /etc/system-release-cpe | awk -F: '{ print $5 }' | grep -o ^[0-9]*)
RHEL_VARIANT=$(cat /etc/system-release-cpe | awk -F: '{ print $7 }')

0

RHEL 6 থেকে শুরু করে, সর্বাধিক সংক্ষিপ্ত উপায়টি হ'ল:

cat /etc/system-release-cpe | cut -d ':' -f5

যদি এটি "সর্বাধিক সংক্ষিপ্ত" হতে হয় তবে আপনি cut -d: -f5 /etc/system-release-cpuইউআইওসিটিকে এড়িয়ে যাবেন। তবে, প্রশ্নটি আরএইচইল 5 থেকে 6 এ পরিবর্তনের বিষয়ে জিজ্ঞাসা করছে যদি এটি কেবল আরএইচইল 6 থেকে কাজ করে তবে এটি প্রশ্নের প্রয়োজনীয়তা মেটাতে ব্যর্থ হয় না?
রোয়াইমা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.