একটি পাথ আগে থেকেই বিদ্যমান থাকায় যখন brew link থেমে যায়, তখন প্রথমে শনাক্ত করুন সেই পাথের মালিক কে। এটি যদি অন্য কোনো Homebrew ফর্মুলার সিমলিঙ্ক হয়, তবে সেই ফর্মুলাটিকে আনলিঙ্ক করুন; যদি এটি কোনো সম্পর্কহীন ফাইল হয়, তবে ওভাররাইটের কথা বিবেচনা করার আগে Homebrew-এর ড্রাই রান পরীক্ষা করুন। কোনো দ্বন্দ্বের অর্থ এই নয় যে নতুন ফর্মুলাটি ইনস্টল হতে ব্যর্থ হয়েছে: এটি হয়তো ইতোমধ্যেই তার keg-এ উপস্থিত রয়েছে এবং Homebrew-এর শেয়ার্ড প্রিফিক্সে নিরাপদে লিঙ্ক হওয়ার অপেক্ষায় রয়েছে। Homebrew-এর brew ম্যানুয়াল
দ্বন্দ্বের বার্তা আপনাকে কী জানায়
একটি Homebrew ফর্মুলা একটি ভার্সনযুক্ত keg-এ ইনস্টল করা হয় এবং brew link শেয়ার্ড ডিরেক্টরি যেমন bin, lib, এবং include-এ সিমলিঙ্ক তৈরি করে। এই ত্রুটিটি সাধারণত একটি টার্গেট পাথের নাম উল্লেখ করে এবং জানাতে পারে যে এটি অন্য কোনো ফর্মুলার অন্তর্ভুক্ত অথবা এটি আগে থেকেই বিদ্যমান। Homebrew নথিবদ্ধ করেছে যে brew link ইনস্টল করা ফাইলগুলোকে এর প্রিফিক্সে লিঙ্ক করে, অন্যদিকে brew unlink সেই প্রিফিক্স থেকে একটি ফর্মুলার লিঙ্কগুলো সরিয়ে দেয়। Homebrew brew ম্যানুয়াল
নিরাপদ পরবর্তী পদক্ষেপটি নির্ভর করে মালিকানার ওপর। একটি Homebrew সিমলিঙ্ক প্রতিস্থাপন করলে কোনো কমান্ড বা লাইব্রেরি কোন ফর্মুলা সরবরাহ করবে তা পরিবর্তন হতে পারে। একটি সম্পর্কহীন ফাইল প্রতিস্থাপন করলে তা Homebrew-এর বাইরের সফটওয়্যারকে প্রভাবিত করতে পারে। সম্পূর্ণ ত্রুটিটি পড়ুন এবং --overwrite-কে সাধারণ মেরামতের উপায় হিসেবে বিবেচনা করবেন না।
ফর্মুলা এবং দ্বন্দ্ব সৃষ্টিকারী পাথটি পরীক্ষা করুন
ব্যর্থ লিঙ্ক কমান্ডে প্রদর্শিত ফর্মুলার নামটি FORMULA-এর জায়গায় ব্যবহার করুন। brew info ফর্মুলার বিস্তারিত দেখাতে পারে, যার মধ্যে এটি keg-only কি না তাও অন্তর্ভুক্ত; brew list বর্তমান keg-এর ফাইলগুলোর সংক্ষিপ্ত বিবরণ দেয়। আপনি ম্যাকের Intel বা Apple silicon Homebrew লোকেশন হার্ড-কোড না করেও এর সক্রিয় প্রিফিক্স জানতে চাইতে পারেন:
brew info FORMULA
brew list FORMULA
brew --prefix FORMULA
ত্রুটিটিতে যদি বলা হয় যে বিদ্যমান টার্গেটটি অন্য কোনো ফর্মুলার একটি সিমলিঙ্ক, তবে সেই ফর্মুলার নামটিও লক্ষ্য করুন। দ্বন্দ্বের বার্তাটি সরাসরি একটি brew unlink OTHER_FORMULA পরামর্শ দিতে পারে। টার্গেটটি যদি একটি সাধারণ ফাইল হয়, কোনো cask-এর লিঙ্ক হয়, অথবা এমন কিছু যার মালিক অস্পষ্ট, তবে এটি পরিবর্তন করার আগে থামুন এবং তদন্ত করুন। Homebrew কোনো দ্বন্দ্বের কথা জানালেই কেবল এটি মুছে ফেলবেন না।
অন্য ফর্মুলার মালিকানাধীন দ্বন্দ্ব সমাধান করুন
টার্গেটটি যখন অন্য কোনো ফর্মুলার অন্তর্ভুক্ত হয় এবং আপনি চান যে নতুন ফর্মুলাটি সেই দ্বন্দ্ব সৃষ্টিকারী পাথ সরবরাহ করুক, তখন পুরনো ফর্মুলাটি আনলিঙ্ক করুন, তারপর কাঙ্ক্ষিতটি লিঙ্ক করুন:
brew unlink OTHER_FORMULA
brew link FORMULA
আনলিঙ্ক করার ফলে প্রিফিক্স থেকে সেই ফর্মুলাটির সিমলিঙ্কগুলো মুছে যায়; এটি এর keg আনইনস্টল করে না। প্রয়োজনে পুরনো ফর্মুলাটি পরে আবার লিঙ্ক করা যেতে পারে। Homebrew সাময়িকভাবে কোনো ফর্মুলা নিষ্ক্রিয় করার উপায় হিসেবেও আনলিঙ্ক এবং পুনরায় লিঙ্ক করার কথা নথিবদ্ধ করেছে। Homebrew brew ম্যানুয়াল
অন্য ফর্মুলাটির যদি এখনও প্রয়োজন থাকে, তবে মনে রাখবেন যে এটি আনলিঙ্ক করলে শেয়ার্ড প্রিফিক্সের মাধ্যমে এর কমান্ড বা ফাইলগুলো অনুপলব্ধ হয়ে যেতে পারে। অনুমানের ওপর ভিত্তি করে একাধিক প্যাকেজ আনলিঙ্ক করা এড়িয়ে চলুন। যে দ্বন্দ্বটি স্পষ্টভাবে অন্য ফর্মুলার সিমলিঙ্ক নয়, সেটির ক্ষেত্রে ড্রাই রান নিয়ে এগিয়ে যান এবং তালিকাভুক্ত প্রতিটি পাথ পরীক্ষা করুন।
--overwrite ব্যবহারের আগে প্রিভিউ করুন
Homebrew-এর --overwrite অপশন লিঙ্ক করার সময় এর প্রিফিক্সে আগে থেকেই থাকা ফাইলগুলো মুছে ফেলে। এর --dry-run অপশন কোনো পরিবর্তন না করেই কোন ফাইলগুলো লিঙ্ক বা মুছে ফেলা হবে তার তালিকা তৈরি করে। প্রথমে অনুরোধ করা অপারেশনটি প্রিভিউ করুন:
brew link --overwrite --dry-run FORMULA
পাথগুলো সাবধানে পর্যালোচনা করুন। তালিকায় যদি এমন ফাইল থাকে যা অন্য কোনো টুলের জন্য প্রয়োজনীয় হিসেবে আপনি চিনতে পারেন, অথবা প্রত্যাশিত Homebrew প্রিফিক্সের বাইরের কিছু হয়, তবে এর মালিক এবং উদ্দেশ্য না বোঝা পর্যন্ত এগোবেন না। প্রিভিউতে যদি কেবল এমন ফাইল থাকে যা আপনি প্রতিস্থাপন করতে চান, তবে মূল কমান্ডটি চালান:
brew link --overwrite FORMULA
এটি শেয়ার্ড প্রিফিক্সের পাথগুলো পরিবর্তন করে। প্রিভিউ হলো সিদ্ধান্ত নেওয়ার ধাপ; এটি নিজে দ্বন্দ্বের সমাধান করে না। Homebrew brew ম্যানুয়াল
ফর্মুলাটি যদি keg-only হয়
একটি পৃথক বার্তা জানাতে পারে যে ফর্মুলাটি keg-only এবং এটিকে অবশ্যই --force দিয়ে লিঙ্ক করতে হবে। Keg-only মানে হলো Homebrew ফর্মুলাটিকে সাধারণ প্রিফিক্সে লিঙ্ক করার পরিবর্তে নিজস্ব keg-এ রাখে। macOS সফটওয়্যারকে আড়াল (shadow) করা এড়াতে বা অন্য কোনো ফর্মুলার সাথে দ্বন্দ্ব এড়াতে Homebrew এই ব্যবস্থা ব্যবহার করে। কারণ এবং ব্যবহারের যেকোনো নির্দেশনার জন্য brew info FORMULA দেখুন। Homebrew FAQ
একটি সাধারণ লিঙ্ক পাথের দ্বন্দ্বের কথা জানিয়েছে বলেই কেবল --force যোগ করবেন না: --force একটি keg-only ফর্মুলা লিঙ্ক করার অনুমতি দেয়; এর মানে এই নয় যে দ্বন্দ্ব সৃষ্টিকারী পাথগুলো ওভাররাইট করা নিরাপদ। Homebrew বিশ্বব্যাপী (globally) keg-only ডিপেনডেন্সিগুলো জোরপূর্বক লিঙ্ক করার (force-linking) বিরুদ্ধে পরামর্শ দেয়, কারণ সম্পর্কহীন বিল্ড এবং সিস্টেম কমান্ডগুলো তখন একটি ভিন্ন ডিপেনডেন্সি গ্রহণ করতে পারে। যে বিল্ডের জন্য keg-only টুল বা লাইব্রেরি প্রয়োজন, Homebrew সেটিকে বিশ্বব্যাপী উন্মুক্ত না করে সেই বিল্ডের জন্য এর ফর্মুলা প্রিফিক্স ব্যবহার করার পরামর্শ দেয়। Homebrew-এর keg-only ডিপেনডেন্সি গাইড
ফলাফল নিশ্চিত করুন এবং কখন থামতে হবে তা জানুন
নির্দিষ্ট দ্বন্দ্ব সমাধানের পরে, ফর্মুলাটির লিঙ্ক স্টেট পরীক্ষা করুন এবং কেবল প্রয়োজন হলেই পুনরায় চেষ্টা করুন:
brew list --versions FORMULA
brew link FORMULA
এটি যদি ইতোমধ্যেই লিঙ্ক করা থাকে, তবে Homebrew আবার লিঙ্ক তৈরি না করে সেটি জানাতে পারে। লিঙ্কিং যদি এখনও ব্যর্থ হয়, তবে বাকি থাকা পাথটি শনাক্ত করতে নতুন ত্রুটিটি ব্যবহার করুন; অন্ধভাবে ওভাররাইটের পুনরাবৃত্তি করবেন না। টার্গেটটি যখন স্পষ্টভাবে Homebrew-পরিচালিত নয়, অথবা ড্রাই রান এমন ফাইল দেখায় যা আপনি নিরাপদে প্রতিস্থাপন করতে পারবেন না, তখন লিঙ্কটি অমীমাংসিত রেখে দিন এবং প্রথমে মালিকানাধীন সফটওয়্যারটি তদন্ত করুন। Keg প্রিফিক্সে থাকা এর লিঙ্কগুলো থেকে একটি পৃথক ইনস্টলেশন হিসেবে থাকে, তাই লিঙ্কিং অসম্পূর্ণ থাকা সত্ত্বেও একটি ইনস্টল করা ফর্মুলা ডায়াগনোসিসের জন্য উপলব্ধ থাকতে পারে।