একটি ভিন্ন ইনস্টল করা Homebrew ফর্মুলা সংস্করণকে macOS ব্যাকগ্রাউন্ড সার্ভিস হিসেবে চালানোর জন্য, বর্তমান ফর্মুলাটির সার্ভিস বন্ধ করুন, সংস্করণযুক্ত ফর্মুলাটিকে তার নিজস্ব নামে চালু করুন, তারপর কোন সার্ভিসটি চলছে তা নিশ্চিত করুন। উদাহরণস্বরূপ, যদি postgresql@16 এবং postgresql@17 উভয়ই ইনস্টল করা থাকে, তবে brew services stop postgresql@16 এবং তারপরে brew services start postgresql@17 ব্যবহার করুন। Homebrew-এর সার্ভিস ম্যানেজার macOS launchd ব্যবহার করে; sudo ছাড়া, এটি আপনার লগইনের সময় চলার জন্য সার্ভিসগুলোকে রেজিস্টার করে। Homebrew-এর brew(1) ম্যানুয়াল
১. ইনস্টল করা ফর্মুলার নামগুলো খুঁজুন
কী ইনস্টল করা আছে এবং ফর্মুলার নামগুলোর বানান কেমন তা পরীক্ষা করতে Homebrew-এর নিজস্ব রেকর্ড ব্যবহার করুন:
brew list --versions
brew info postgresql@16
brew info postgresql@17
উদাহরণগুলোর জায়গায় আপনার সার্ভিসের ফর্মুলার নামগুলো বসান। সংস্করণযুক্ত ফর্মুলা হলো একটি পৃথক Homebrew ফর্মুলা, যা সাধারণত একটি @ প্রত্যয় (suffix) দিয়ে লেখা হয়; এটি কোনো একটি ফর্মুলার যেকোনো ঐতিহাসিক সংস্করণ নির্বাচন করার কমান্ড নয়। উপলব্ধ সংস্করণযুক্ত ফর্মুলাগুলো Homebrew বর্তমানে কী সরবরাহ করছে তার ওপর নির্ভর করে। Homebrew সংস্করণযুক্ত ফর্মুলাগুলোকে একটি সীমিত সেট হিসেবেও বর্ণনা করে এবং সময়ের সাথে সাথে কিছু ফর্মুলা সরানো হতে পারে। Homebrew Formulae Versions
পরিবর্তন করার আগে, প্রতিটি ফর্মুলার brew info আউটপুট থেকে এর সার্ভিসের বিবরণ এবং যেকোনো মাইগ্রেশন সংক্রান্ত নোট দেখে নিন। একটি নতুন ফর্মুলা নাম এই নিশ্চয়তা দেয় না যে সার্ভিসটি পুরানো সংস্করণের ডেটা ডিরেক্টরি বা কনফিগারেশন পুনরায় ব্যবহার করতে পারবে। ডাটাবেস এবং সার্ভার সফটওয়্যারের অ্যাপ্লিকেশন-নির্দিষ্ট আপগ্রেড বা ডাউনগ্রেডের প্রয়োজনীয়তা থাকতে পারে; বিদ্যমান ডেটার বিপরীতে অন্য সংস্করণটি চালু করার আগে সেই সফটওয়্যারের নথিভুক্ত মাইগ্রেশন প্রক্রিয়া অনুসরণ করুন।
২. একটি ফর্মুলার সার্ভিস বন্ধ করুন এবং অন্যটি চালু করুন
আপনার লগইনে শুরু হওয়া সার্ভিসের জন্য sudo ছাড়া সার্ভিস কমান্ডগুলো চালান:
brew services stop postgresql@16
brew services start postgresql@17
brew services list
PostgreSQL উদাহরণের জায়গায় প্রকৃতপক্ষে ইনস্টল করা ফর্মুলা টোকেনগুলো ব্যবহার করুন। brew services stop এবং start ফর্মুলার নাম গ্রহণ করে, তাই এটি টার্গেট ফর্মুলার সাথে সম্পর্কিত সার্ভিসটিকে বেছে নেয়। list কমান্ডটি আপনাকে পরবর্তীতে Homebrew-এর রিপোর্ট করা সার্ভিস স্ট্যাটাস খতিয়ে দেখতে সাহায্য করে। ম্যানুয়ালটি launchd-এর মাধ্যমে সার্ভিস ব্যবস্থাপনার বিষয়ে বর্ণনা করে এবং উল্লেখ করে যে sudo-বিহীন সেটআপটি ~/Library/LaunchAgents ব্যবহার করে, তাই এটি বর্তমান ব্যবহারকারীর লগইনের আওতাভুক্ত। Homebrew-এর brew(1) ম্যানুয়াল
টার্গেট সংস্করণটি যদি ইনস্টল করা থাকে কিন্তু এর সার্ভিস চালু না থাকে, তবে সরাসরি এটি চালু করুন। একই ফর্মুলার জন্য যদি রিস্টার্ট করার প্রয়োজন হয়, তবে brew services restart FORMULA নথিভুক্ত রয়েছে; সংস্করণ পরিবর্তন করার সময়, পুরানো ফর্মুলাটি স্পষ্টভাবে বন্ধ করা এবং নতুনটি চালু করা পরিকল্পিত পরিবর্তনকে সুস্পষ্ট করে তোলে। একটি মাত্র সার্ভিস পরিবর্তনের জন্য brew services restart --all ব্যবহার করবেন না, কারণ এটি প্রতিটি Homebrew সার্ভিসকে প্রভাবিত করে।
৩. সার্ভিস এবং কমান্ড নির্বাচনের মধ্যকার পার্থক্য বুঝুন
একটি সংস্করণযুক্ত ফর্মুলাকে সার্ভিস হিসেবে চালু করলেই টার্মিনালে স্বয়ংক্রিয়ভাবে এর কমান্ড-লাইন টুলগুলো ডিফল্ট হয়ে যায় না। Homebrew প্রতিটি ফর্মুলাকে একটি সংস্করণযুক্ত Cellar keg-এ ইনস্টল করে। একটি ফর্মুলা লিঙ্ক করলে Homebrew-এর শেয়ার্ড প্রিফিক্সে সিমলিঙ্ক (symlinks) তৈরি হয়, যেখানে কিছু সংস্করণযুক্ত ফর্মুলা keg-only হিসেবে চিহ্নিত থাকে এবং ডিফল্টভাবে সেখানে লিঙ্ক করা হয় না। Homebrew-এর brew(1) ম্যানুয়াল, Homebrew FAQ: “keg-only” বলতে কী বোঝায়?
ফর্মুলাটি keg-only কি না এবং কোনো PATH সংক্রান্ত নির্দেশনা দেওয়া আছে কি না তা দেখতে brew info FORMULA পরীক্ষা করুন। ব্যাকগ্রাউন্ড সার্ভিসের জন্য যদি কেবল অন্য সংস্করণটি ব্যবহার করার প্রয়োজন হয়, তবে ফর্মুলার নাম দিয়ে এর সার্ভিস পরিচালনা করুন; লিঙ্ক পরিবর্তন করা প্রয়োজন এমন ধরে নেবেন না। সাধারণ পরিবর্তনের ধাপ হিসেবে brew link --force এড়িয়ে চলুন: Homebrew সতর্ক করে যে keg-only ফর্মুলাকে জোরপূর্বক শেয়ার্ড ডিরেক্টরিতে আনলে দ্বন্দ্ব (conflict) তৈরি হতে পারে। Homebrew-এর keg-only ডিপেন্ডেন্সি সংক্রান্ত নির্দেশনা
৪. টার্গেট সার্ভিস চালু হতে ব্যর্থ হলে করণীয়
প্রথমে brew services list এবং টার্গেট ফর্মুলার brew info আউটপুট পরীক্ষা করুন। নিশ্চিত করুন যে পুরানো সার্ভিসটি বন্ধ হয়েছে এবং নতুন ফর্মুলাটি প্রকৃতপক্ষে একটি সার্ভিস সংজ্ঞা প্রদান করে; Homebrew-এর সার্ভিস সমর্থন কোনো ফর্মুলায় সার্ভিসের কনফিগারেশন থাকার ওপর নির্ভর করে। Homebrew Formula Cookbook
এরপর, অ্যাপ্লিকেশনের নিজস্ব লগ এবং কনফিগারেশন পরীক্ষা করুন। ফর্মুলা ইনস্টল থাকা সত্ত্বেও একটি সার্ভিস ব্যর্থ হতে পারে—উদাহরণস্বরূপ, এর কনফিগারেশন একটি ভিন্ন ডেটা ডিরেক্টরি নির্দেশ করছে, পোর্টটি ইতিমধ্যে ব্যবহৃত হচ্ছে, অথবা কোনো সংস্করণ বিদ্যমান ডেটা খুলতে পারছে না। এগুলো অ্যাপ্লিকেশন-স্তরের সম্ভাব্য কারণ, Homebrew দ্বারা নিশ্চিত করা কোনো সমাধান নয়; ডেটা পরিবর্তন বা মুছে ফেলার আগে অ্যাপ্লিকেশনের অফিসিয়াল ডকুমেন্টেশন ব্যবহার করুন।
শুধুমাত্র তখনই sudo brew services ব্যবহার করুন যখন আপনার ইচ্ছাকৃতভাবে সিস্টেম-ব্যাপী এমন একটি সার্ভিসের প্রয়োজন হয় যা বুট হওয়ার সময় শুরু হয়। Homebrew নথিভুক্ত করেছে যে এই মোডটি /Library/LaunchDaemons-এ কাজ করে, অন্যদিকে ডিফল্ট ব্যবহারকারী সার্ভিস লগইনের সময় চালু হয়। বেশিরভাগ ব্যক্তিগত ডেভেলপমেন্ট সার্ভিস সেই ব্যবহারকারী অ্যাকাউন্টের অধীনে পরিচালনা করা উচিত যার অধীনে ফাইলগুলোর মালিকানা রয়েছে। Homebrew-এর brew(1) ম্যানুয়াল
সুতরাং একটি সফল পরিবর্তনের দুটি যাচাইকরণ রয়েছে: Homebrew রিপোর্ট করে যে কাঙ্ক্ষিত ফর্মুলাটি চলছে, এবং অ্যাপ্লিকেশনটি নিজে প্রত্যাশা অনুযায়ী সাড়া দিচ্ছে। শুধুমাত্র সার্ভিস স্ট্যাটাস ডেটার সামঞ্জস্যতা যাচাই করে না বা এটি প্রমাণ করে না যে কমান্ড-লাইন ক্লায়েন্টগুলো এখন সেই ফর্মুলা সংস্করণে কাজ করছে।
উৎসসমূহ
Homebrew ডকুমেন্টেশন: brew(1) – The Package Manager for Everywhere — Homebrew
Homebrew ডকুমেন্টেশন: Formulae Versions — Homebrew
Homebrew ডকুমেন্টেশন: FAQ — Homebrew
Homebrew ডকুমেন্টেশন: Building Software with Homebrew Keg-Only Dependencies — Homebrew
Homebrew ডকুমেন্টেশন: Formula Cookbook — Homebrew