একটি আপগ্রেড কাজের সময় চলমান অ্যাপ্লিকেশন বাইনারিগুলি কীভাবে আপডেট করা যায়?


23

আমি আমার উবুন্টু লুসিডকে সবেমাত্র ন্যাটিতে আপগ্রেড করেছি, আপগ্রেড করার সময় এটি বেশিরভাগ চলমান অ্যাপ্লিকেশনকে নতুন সংস্করণে প্রতিস্থাপন করেছে।

কিভাবে কাজ করে? (অ্যাপ্লিকেশনগুলি ক্র্যাশ করবে না?) যদি কোনও লাইব ফাইল আপগ্রেড হয় এবং একটি পুরানো লাইব অনুসন্ধান করছে এমন একটি চলমান অ্যাপ্লিকেশন যদি এটি লোড করার চেষ্টা করে তবে অ্যাপ্লিকেশনটির কী হবে?


ভাল প্রশ্ন, তবে সম্ভবত এখানে আরও ভাল জিজ্ঞাসা করা হয়েছে: unix.stackexchange.com (আমি জানি ইউআরএল ইউনিক্স বলে তবে তারা লিনাক্স প্রশ্নও ফিল্ড করে!)

লিনাক্সের
রিপ্লেসম

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

1
এটি স্ব-সংশোধনকারী কোডের সাথে আসলেই প্রাসঙ্গিক নয়, তবে এটি অবশ্যই এমন কোনও বিষয় যা লিনাক্সের জন্য লাইব্রেরি লিখছেন এমনটি অবশ্যই জানা উচিত, হ্যাঁ। :)
বিডনলান

1
@ পিসকোভর, জিসিসির জন্য মাল্টি-স্টেজ সংকলন প্রক্রিয়াটির মতো কিছুটা মনে হচ্ছে :) তবে মূলত কেবলমাত্র সংকলকগণই এরকম কিছু করেন এবং সাধারণত এটি করার সময় আপনি সিস্টেমটিকে আপগ্রেড করতে পারেন না (এমনকি যদি আপনি না করেন ততক্ষণ পর্যন্ত প্রক্রিয়া চলাকালীন ' কোনও কিছু ডাউনগ্রেড করা হবে না, আপনি ভাল আছেন, যেহেতু এটি তার ব্যক্তিগতভাবে সংকলিত
কপিরাইটগুলি যে কোনও

উত্তর:


31

লিনাক্স (এবং অন্যান্য UNIXes) মধ্যে একটি পার্থক্য স্বপক্ষে নাম একটি ফাইল (এর লিংক ), ফাইল নিজেই (প্রায়ই সঙ্গে চিহ্নিত inode ), এবং খোলা হ্যান্ডলগুলি ফাইলে। আপনি যখন কোনও ফাইল মুছতে যান, আপনি কলটি unlink()কল করেন - এটি ফাইলটির লিঙ্কটি মুছে ফেলে (আপনি rename()এটি অন্য একটি ইনোড দিয়ে ওভাররাইট করতেও ব্যবহার করতে পারেন )। যাইহোক, ফাইল খোলা হ্যান্ডলগুলি যদি (অথবা অন্যান্য লিঙ্ক - ফাইল একাধিক থাকতে পারে hardlinks ) থাকা, inode দেহাবশেষ, এবং তাই, ফাইল বিষয়বস্তু নেই যতক্ষণ না সমস্ত লিঙ্কের এবং হ্যান্ডলগুলি দূরে যান।

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

আরও মনে রাখবেন, 'পুরাতন গ্রন্থাগার' প্রত্যাশা করা প্রোগ্রামগুলি লাইব্রেরির নতুন সংস্করণগুলির সাথে ঠিকঠাক করবে। লিনাক্স লাইব্রেরিগুলিকে একটি ফাইল নাম ('সোনাম') বরাদ্দ করা হয় যা লাইব্রেরির দেওয়া এবিআই (অ্যাপ্লিকেশন বাইনারি ইন্টারফেস) এর সংস্করণ প্রতিফলিত করে। উদাহরণস্বরূপ, আমার সিস্টেমে সি লাইব্রেরিটি libc.so.6। যে কোনও প্রোগ্রাম libc এর পুরানো সংস্করণের বিরুদ্ধে সংকলিত হয়েছে, তবে এখনও LBC সংস্করণ 6 এবিআই সংস্করণটি বাস্তবায়ন করে, এটি দিয়ে কাজ করবে। সত্যিই পুরাতন প্রোগ্রাম একটি জন্য চেহারা হবে libc.so.5বা libc.so.4বা কিছু পরিবর্তে; এই ক্ষেত্রে, আপনার পাশাপাশি পুরানো সংস্করণও রাখা উচিত - তবে যেহেতু ফাইলের নামটি আলাদা, এটি কোনও সমস্যা নয়।


9

উইন্ডোজ থেকে পৃথক, আপনি একটি খোলা ফাইল মুছতে বা প্রতিস্থাপন করতে পারেন ; একটি দিতে সরলীকৃত ব্যাখ্যা, ফাইলের জন্য নতুন অনুরোধ নতুন ফাইল খুলুন, বিদ্যমান হ্যান্ডলগুলি যে ফাইলটি তৈরি হয়েছে সেই অস্তিত্ব ব্যবহার করুন। অন্য কথায়, লিনাক্সে আপনার কাছে ফাইল / ফাইল সংস্করণ থাকতে পারে যা এখনও বিদ্যমান, যদিও ডিরেক্টরি কাঠামোতে তাদের কাছে আর কোনও পয়েন্টার নেই; বিদ্যমান থাকা বন্ধ করে দেওয়া তাদের কোনও নির্দেশক নেই (বন্ধ এবং সমস্ত)।

সাধারণত একটি চলমান অ্যাপ্লিকেশনটি প্রয়োজনীয় লাইব্রেরিগুলি সামনের দিকে লোড করে, সুতরাং আপনি যে সমস্যাটি বর্ণনা করেছেন তা প্যাকেজটি ইনস্টল হওয়ার সময় কেবলমাত্র খুব নির্দিষ্ট সময়সীমার মধ্যে ঘটবে: চলমান অ্যাপ্লিকেশনগুলি এখনও লাইব্রেরির পুরানো সংস্করণ ব্যবহার করছে, নতুন চালু হওয়া অ্যাপ্লিকেশনগুলি নতুন ব্যবহার করবে এক.

এটি কেবল ডিস্ট্রো আপগ্রেডগুলিতেই ব্যবহৃত হয় না, তবে প্রতিটি প্যাকেজ আপগ্রেডে ঘটে থাকে (ডিস্ট-আপগ্রেড কেবল সেই প্রক্রিয়াতে আরও কয়েকটি স্বয়ংক্রিয় পদক্ষেপ যুক্ত করে)।


0

অনেকগুলি লিনাক্স প্রক্রিয়া প্যাকেজগুলি আপগ্রেড হওয়ার পরেও কাজ চালিয়ে যায় - তবে কিছু তা করে না। আমার অভিজ্ঞতা অনুসারে, আপনি যখন চলমান অবস্থায় এটি আপগ্রেড করেন কেডিপি কখনই সঠিকভাবে কাজ করে না। আপনি লগ আউট করতে ক্র্যাশ এবং / অথবা ব্যর্থতা অনুভব করতে পারেন।

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