इंस्टॉल पूरा होता है, brew कहता है कि openvpn वहाँ है, और शेल command not found का जवाब देता है। बाइनरी मौजूद है, वह बस ऐसी डायरेक्टरी में बैठी है जिसके बारे में शेल को कभी बताया ही नहीं गया। Homebrew डेमन-शैली की बाइनरियों को प्रीफ़िक्स की sbin डायरेक्टरी में लिंक करता है, और डिफ़ॉल्ट macOS PATH आमतौर पर bin डायरेक्टरी शामिल करता है, sbin नहीं। कुछ भी टूटा नहीं है, और कोई भी पुनःइंस्टॉल इसे नहीं बदलेगा।

कोई भी शेल फ़ाइल संपादित करने से पहले चार जाँचें इस तंत्र की पुष्टि करती हैं।

फ़ॉर्मूला वास्तव में क्या इंस्टॉल करता है

openvpn फ़ॉर्मूला कमांड-लाइन डेमन बनाता है, इसलिए उसकी निष्पादन-योग्य फ़ाइल bin के बजाय sbin के नीचे पहुँचती है। फिर Homebrew उस बाइनरी को प्रीफ़िक्स की sbin डायरेक्टरी में लिंक करता है, और इसीलिए "$(brew --prefix)/sbin/openvpn" --version काम करता है जबकि खाली आह्वान नहीं करता। संस्करण-युक्त Cellar डायरेक्टरी भी एक प्रति रखती है, और उस पथ को स्टार्टअप फ़ाइल में डालना वह तरीका है जिससे मशीन अपग्रेड के बाद पुराने बिल्ड से बँधी रहती है।

प्रीफ़िक्स सिमलिंक स्थिर पथ है। Cellar पथ भीतर संस्करण संख्या वाला कार्यान्वयन-विवरण है।

Homebrew से पूछें, फ़ाइलसिस्टम से नहीं

पैकेज मैनेजर से शुरू करें, क्योंकि वह जानता है कि कौन-सा इंस्टॉलेशन फ़ॉर्मूले का मालिक है: command -v brew, brew --prefix, brew list --versions openvpn, brew --prefix openvpn। अगर अंतिम पथ प्रिंट करता है, तो फ़ॉर्मूला मौजूद है और सवाल केवल रिज़ॉल्यूशन का है। अगर वह कुछ भी प्रिंट नहीं करता, तो शेल गलत जगह पर ऐसा पैकेज खोज रहा है जो कभी इंस्टॉल ही नहीं हुआ, और यह अलग समाधान वाली अलग समस्या है।

एक ही मशीन पर दो Homebrew इंस्टॉलेशन वह जगह है जहाँ यह सबसे ज़्यादा मायने रखता है: जवाब देने वाला brew ज़रूरी नहीं कि इंस्टॉल करने वाला brew हो।

शेल sbin क्यों नहीं देख सकता

लॉगिन शेल सिस्टम डिफ़ॉल्ट और आपकी स्टार्टअप फ़ाइलों द्वारा जोड़े गए सब कुछ से PATH बनाता है। Homebrew bin आमतौर पर जोड़ा जाता है और Homebrew sbin आमतौर पर नहीं, इसलिए डेमन के अलावा हर कमांड काम करता है। command -v openvpn कुछ नहीं लौटाता जबकि प्रीफ़िक्स वाला पथ संस्करण लौटाता है, यही दो कमांड में पूरा निदान है। पुष्टि करें कि डायरेक्टरी में वास्तव में लिंक है ls -l "$(brew --prefix)/sbin/openvpn" के साथ।

गुम लिंक गुम PATH प्रविष्टि से अलग खराबी है, और उनमें से केवल एक ही शेल फ़ाइल संपादित करके ठीक होता है।

पथ को एक बार, एक ही जगह ठीक करें

मौजूदा शेल में त्वरित परीक्षण के लिए eval "$(brew shellenv)" इंस्टॉलेशन वेरिएबल सेट करता है और दोनों डायरेक्टरियों को आगे रखता है। स्थायी व्यवस्था के लिए, shellenv पंक्ति को उस एकमात्र स्टार्टअप फ़ाइल में रखें जिसे आपका शेल आपके उपयोग किए गए लॉगिन मोड के लिए पढ़ता है, bash और zsh फ़ाइलों में एक्सपोर्ट बिखेरने के बजाय।

फिर नया टर्मिनल खोलें और संस्करण क्वेरी दोहराएँ, क्योंकि कैश किया गया शेल पुराना PATH ही रिपोर्ट करता रहता है।

खोज को सेवा से अलग रखें

बाइनरी ढूँढना VPN सेवा चलाने के बराबर नहीं है। openvpn को अपने आप शुरू करना प्रोफ़ाइल, क्रेडेंशियल, विशेषाधिकार और जीवनचक्र की आवश्यकताएँ जोड़ता है जिन्हें पैकेज खोज ने कभी नहीं छुआ। Tunnelblick अपना इंजन भी साथ लाता है, इसलिए अभी प्रिंट किए गए संस्करण का ऐप्लिकेशन द्वारा उपयोग किए जाने वाले संस्करण से कोई संबंध न भी हो।

दर्ज करें कि किस निष्पादन-योग्य फ़ाइल ने संस्करण आउटपुट बनाया। वह एक पंक्ति अगली बार दो संस्करणों के असहमत होने पर एक घंटा बचाती है।

संबंधित लेख