কীভাবে প্রোগ্রামযুক্তভাবে ইনস্টল হওয়া সর্বোচ্চ সংস্করণ কার্নেল আরপিএম নির্ধারণ করবেন?


9

আমি যা স্ক্রিপ্ট করতে চাই তা হ'ল লাইন দিয়ে কিছু:

if [ uname -r is not == highest version of kernel RPM installed ]
then
  echo "You need to reboot to use the latest kernel"
fi

সমস্যাটি হ'ল, যদি আউটপুটটি rpm -q kernelএমন কিছু হয়:

kernel-2.6.32-358.10.2.el6.x86_64
kernel-2.6.32-358.6.1.el6.x86_64

… কোনটি বেশি তা আমি কীভাবে নির্ধারণ করব? আমি জানি একটি সাধারণ স্ট্রিং বাছাই নির্ভরযোগ্য নয় (এটি এই উদাহরণের সাথে পিছনের দিকে থাকবে)। আরপিএম সহ একটি শর্টকাট আছে বা আমার কি সমস্ত কিছু বিশ্লেষণ করে নিজের সাথে তুলনা করতে হবে?


আপনি তার জন্য /var/log/yum.log ব্যবহার করতে পারেন। অথবা 'ls -lht / বুট |
গ্রেপ ভিএমলিনুজ

কোনটি উচ্চতর সংস্করণ তা নির্ধারণের জন্য সেগুলি নির্ভরযোগ্য পদ্ধতি নয়। চেক / বুটে সম্পূর্ণ ভিন্ন মাল্টবूट পার্টিশনের জন্য থাকা কার্নেলগুলি অন্তর্ভুক্ত থাকতে পারে।
sosiouxme

সম্ভবত আমি এটি overth سوچ করছি। rpm -q কার্নেল সর্বদা সংস্করণ ক্রমে কার্নেলগুলি তালিকাভুক্ত করে। এটা কি নির্ভরযোগ্য?
sosiouxme

'ls -lht / বুট | grep vmlinuz | গ্রেপ এল 6 ':)
স্কাইবা

1
এবং sort -Vসঠিক ফলাফল দেয় না?
রুনিয়াম

উত্তর:


14

টি এল; ডিআর

3 য় প্রচেষ্টা আসলে কাজ করে! আমি প্রথম 2 টি প্রচেষ্টা ছেড়ে দিচ্ছি যাতে ভবিষ্যতে এই প্রশ্নোত্তর জুড়ে আসতে পারে এমন অন্যরা আশাবাদী RPM সংস্করণ তথ্য পার্স করতে এবং কোনটি প্রথম, দ্বিতীয়, এর বংশটি নির্ধারণ করার জন্য অ-তুচ্ছ সমস্যা কতটা অন্তর্দৃষ্টি লাভ করবে প্রভৃতি

চেষ্টা # 1 (ওপি বলেছেন যে কাজ করে না)

এই আদেশটি আউটপুটটিকে বাছাই করবে এবং সেগুলি সংস্করণ ক্রমে আপনাকে দেবে:

$ rpm -q kernel --queryformat "%{VERSION} %{RELEASE}\n"|sort -n
2.6.18 238.12.1.el5
2.6.18 238.19.1.el5
2.6.18 274.12.1.el5
2.6.18 308.8.2.el5

এটি কেন কাজ করে না: একজন নিষ্পাপ ব্যক্তি ভাববেন যে আপনি sortএই কাজটি সম্পাদন করতে কমান্ডের কিছু বৈকল্পিক ব্যবহার করতে পারেন , তবে প্রদত্ত আরপিএমের প্রকৃত সংস্করণ তথ্যের বিন্যাসে যথেষ্ট পরিবর্তনশীলতা এবং অসঙ্গতি রয়েছে যে এটি ঠিক নয় ' টাস্ক পর্যন্ত।

চেষ্টা # 2 (ওপি বলেছেন যে কাজ করে না)

$ rpm -q --last kernel | head -n 1 | cut -d' ' -f1
kernel-2.6.35.14-106.fc14

এটি কেন কাজ করল না: আমার উচ্চ আশা ছিল যে এই পদ্ধতির ফলে ওপি যে সন্ধান করছে তার ফল পাবে, তবে @ জোয়েলের মন্তব্যে উল্লেখ করা হিসাবে এই একটিটি এই বিষয়টি হ'ল যে --lastস্যুইচ কেবলমাত্র সাজানো ফলাফলগুলি ফিরিয়ে দিচ্ছে? আরপিএম ইনস্টল করার তারিখ।

চেষ্টা # 3

এই এক অবশ্যই কাজ করবে। আমি RPM বিকাশ সরঞ্জাম নামে একটি সরঞ্জামের স্যুট পেয়েছি। এই স্যুটটিতে 2 টি সরঞ্জাম রয়েছে যা আপনাকে আরপিএমের একটি সংস্করণ অন্যর চেয়ে নতুন বা পুরান কিনা তা নির্ধারণ করার ক্ষমতা দেয়।

আরপিএম যদি ইতিমধ্যে ইনস্টল না করা থাকে তবে আপনি নিম্নলিখিত হিসাবে এটি করতে পারেন:

yum install rpmdevtools

প্রথম যে সরঞ্জামটি কার্যকর তা বলা হয় rpmdev-vercmp। এই সরঞ্জামটি আরপিএমের 2 টি নামের তুলনা করতে পারে এবং কোনটি নতুন তা আপনাকে জানাতে পারে। উদাহরণ স্বরূপ:

$ rpmdev-vercmp kernel-2.6.35.14-100.fc14.x86_64 kernel-2.6.35.14-103.fc14.x86_64
0:kernel-2.6.35.14-103.fc14.x86_64 is newer

এটি সন্ধানের পরে আমি একটি শেল স্ক্রিপ্ট একসাথে রাখার জন্য প্রস্তুত ছিলাম কিন্তু তখন বুঝতে পারলাম, মানুষ আমি অলস, তাই আমি আরও কয়েক মিনিট খোঁচা দিয়েছি এবং স্যুট নামে একটি অন্য সরঞ্জাম পেয়েছি rpmdev-sort

এই সরঞ্জামটি পে-ময়লা। আপনি নিম্নলিখিত হিসাবে এটি ব্যবহার করতে পারেন:

$ rpm -q kernel | rpmdev-sort 
kernel-2.6.35.14-100.fc14.x86_64
kernel-2.6.35.14-103.fc14.x86_64
kernel-2.6.35.14-106.fc14.x86_64

আরপিএম ডেভলপমেন্ট সরঞ্জামগুলিতে প্রচুর সরঞ্জাম রয়েছে যা অন্যের জন্য নজর দেওয়ার মতো হতে পারে তাই ভবিষ্যতের রেফারেন্সের জন্য আমি তাদের এখানে তালিকাভুক্ত করছি।

$ rpm -q --queryformat '[%{NAME} %{FILEMODES:perms} %{FILENAMES}\n]' rpmdevtools \
    | grep -E "^.* -..x..x..x " \
    | awk '{print $3}'          \
    | sed 's#/usr/bin/##'       \
    | paste - - -               \
    | column -t

annotate-output   checkbashisms    licensecheck
manpage-alert     rpmargs          rpmdev-bumpspec
rpmdev-checksig   rpmdev-cksum     rpmdev-diff
rpmdev-extract    rpmdev-md5       rpmdev-newinit
rpmdev-newspec    rpmdev-packager  rpmdev-rmdevelrpms
rpmdev-setuptree  rpmdev-sha1      rpmdev-sha224
rpmdev-sha256     rpmdev-sha384    rpmdev-sha512
rpmdev-sort       rpmdev-sum       rpmdev-vercmp
rpmdev-wipetree   rpmelfsym        rpmfile
rpminfo           rpmls            rpmpeek
rpmsodiff         rpmsoname        spectool

# 3 এর বিকল্প

মন্তব্যে ওপি উল্লিখিত একটি বিকল্প ব্যবহার করা sort -V। এটি একটি মূলধন -V। আমি এই সুইচটি কখনও শুনিনি। থেকে sortমানুষ পৃষ্ঠা:

-V, --version-sort
       natural sort of (version) numbers within text

এটি দেখা যাচ্ছে sortযে সংস্করণ সংখ্যাগুলি বাছাই করার কোনও সুবিধা সরবরাহ করে যাতে আপনি এর মতো বাছাইও করতে পারেন:

$ rpm -q kernel | sort -V
kernel-2.6.35.14-100.fc14.x86_64
kernel-2.6.35.14-103.fc14.x86_64
kernel-2.6.35.14-106.fc14.x86_64

দুঃখিত, আমি এটা মনে করি না। একটি সাধারণ স্ট্রিং সাজানোর ফলে কার্নেল -২..9.১০ এর আগে কার্নেল -২.6.১০ স্থাপন করা হবে। এটি কেবল উদাহরণ হিসাবে নয়, উদারভাবে কাজ করতে হবে।
sosiouxme

-n কেবল আপনাকে প্রথম সংখ্যাটি সাহায্য করে। এটি বাছাই করার চেষ্টা করুন: 2.6.18 238.12.1.el5 2.6.18 238.19.1.el5 2.6.18 274.12.1.el5 2.6.18 274.8.2.el5 বাছাই করা এখানে একেবারে ভুল সরঞ্জাম, পাশাপাশি অন্য কিছু যা সংস্করণ-প্রকাশের স্কিমগুলি সম্পর্কে কিছুই জানে না।
sosiouxme

@ এসএলএম --lastপ্যাকেজ ইনস্টলেশন সময় অনুসারে বাছাই করে, এটি অগত্যা সর্বশেষতম কার্নেল হিসাবে চলবে না (উদাহরণস্বরূপ, তারা যদি একটি নিম্ন কার্নেলের সংস্করণে ম্যানুয়াল আরপিএম ইনস্টল করে থাকে)।
ব্র্যাচলে

1
সাজানো - ভি জিনিসটি একটি প্রসঙ্গে ব্যর্থ হবে। বলুন আপনি একটি প্যাকেজের 2 সংস্করণ - 1.15-abc এবং 1.15-2ab এর তুলনা করতে চেয়েছিলেন। সাজ্ট কমান্ডটি বলবে যে 1.15-abc 1.15-2ab এর চেয়ে বেশি। তবে প্রকৃতপক্ষে, আরপিএমের জন্য, 2 বিবি আবদুর চেয়ে বেশি is
ক্রিশন

1
সাজান -V আরপিএমদেব-সাজানোর থেকে অনেক আলাদা different আমি আরপিএমএস সহ এটি ব্যবহার করব না। তাড়াতাড়ি দেখার জন্য এটি ঠিক আছে, তবে এটিই that's
টমমি কিন্টোলা

1

একটি ভাল ফলাফল পেতে আপনার সত্যিই আরপিএম গ্রন্থাগারটি ব্যবহার করা উচিত। সংস্করণ তুলনা অ্যালগরিদম ... সিদ্ধান্ত নিয়ে জটিল। এটি শেলের পুনর্নির্মাণের জন্য তুচ্ছ নয়, তবে আপনি যদি সত্যিকারের তুলনা করতে পাইথন ব্যবহার করতে পারেন তবে এটি তুলনামূলকভাবে সোজা হয়ে যায়। কীভাবে এটি করা যায় তার একটি এক্সপ্লোরাল জন্য /programming/3206319/how-do-i-compare-rpm-versions-in-python দেখুন ।


1
rpm -q kernel --queryformat="%{buildtime}\t%{name}-%{version}-%{release}.%{arch}\n" | sort -nr | head -1 | cut -f2

আমার মনে হয় বিল্ডটাইম অনুসারে বাছাইয়ের ক্ষেত্রে কর্নার কেস হওয়ার সম্ভাবনা কম থাকে যেখানে এটি ইনস্টলটাইমের বিপরীতে থাকে। যাইহোক, - সর্বস্বান্ত হয়।


0

--lastআপনাকে সর্বোচ্চ সংস্করণ নম্বরটি বলবে না তবে এটি ইনস্টলেশনের তারিখ অনুসারে অর্ডার করবে। সুতরাং আপনি সর্বাধিক ইনস্টল করা সংস্করণটি দেখতে পারেন:

[root@xms_apps ~]# rpm -qa kernel-xen --last
kernel-xen-2.6.18-348.1.1.el5                 Tue 29 Jan 2013 02:18:52 PM EST
kernel-xen-2.6.18-308.11.1.el5                Fri 20 Jul 2012 04:00:26 PM EDT
kernel-xen-2.6.18-308.8.2.el5                 Wed 20 Jun 2012 03:32:47 PM EDT

বেশিরভাগ সময় (যদি না তারা ম্যানুয়াল কার্নেল ইনস্টল না করে) দু'জনের একই হওয়া উচিত।

এটি সময়ের 100% সঠিক 100% পেতে, আপনাকে দুটি কার্নেল সংস্করণ 2.6.*ফর্ম্যাট করতে হবে এবং ২.6-এর পরে শুরু করে আলাদা করে ফেলুন (আরএইচইএল এটি একক সংস্করণে খুব দ্রুত পুনরায় ব্যবহার করবে না, আরএইচইএল 5 সর্বদা একটি ২.6 কার্নেল হবে) এবং আরপিএম আউটপুটটির প্রতিটি লাইন ধরে পুনরাবৃত্তি (সম্ভবত --lastপারফরম্যান্সের জন্য অনুসারে সাজানো ) এবং uname -rআরপিএম ডিবি'র স্ট্রিংয়ের মধ্যে যে কোনও সংখ্যা বড় হলে আপনি যে কার্নেল সংস্করণে পেয়েছেন তার অভিন্ন অবস্থানের সাথে প্রতিটি অবস্থানের তুলনা করুন আনম স্ট্রিংয়ের চেয়ে তত্ক্ষণাত সেই বার্তাটি দিয়ে প্রস্থান করুন।

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


0
[root@ip-172-31-36-134 ~]# whatis grub2-rpm-sort
grub2-rpm-sort (8)   - Sort input according to RPM version compare.
[root@ip-172-31-36-134 ~]# rpm -qf `which grub2-rpm-sort`
grub2-tools

সাইটে স্বাগতম, এবং আপনার অবদানের জন্য আপনাকে ধন্যবাদ। দুর্ভাগ্যক্রমে এটি ওপি কর্তৃক জিজ্ঞাসিত কার্নেল সংস্করণের প্রশ্নের সাথে আপনার উত্তর কীভাবে সম্পর্কিত তা মোটেই পরিষ্কার নয়। স্পষ্ট করতে আপনার পোস্ট সম্পাদনা করুন।
অ্যাডমিনবি


1
ওভেন, আপনি গ্রুব-আরপিএম-সাজানো নামে একটি প্রোগ্রাম এবং কোন প্যাকেজটিতে এতে উল্লেখ করেছেন, তবে "কীভাবে আমি বলব uname -rনা যে সর্বোচ্চ কার্নেল আরপিএম স্তর ইনস্টল করা হয়নি"। প্রোগ্রামটি মনে হচ্ছে এটি সমস্যার সমাধান করতে পারে, সুতরাং আপনি যদি ওপিটির জন্য এটি বানান করতে পারেন তবে এটি একটি ভাল উত্তর হবে। ধন্যবাদ!
জেফ শ্যাচলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.