نصب تمام می‌شود، brew می‌گوید openvpn آنجاست، اما شل پاسخ command not found می‌دهد. فایل دودویی وجود دارد، فقط در پوشه‌ای قرار گرفته که هرگز به شل گفته نشده است. Homebrew فایل‌های دودویی از نوع دیمن را در پوشه sbin پیشوند پیوند می‌دهد و PATH پیش‌فرض macOS معمولاً پوشه bin را شامل می‌شود و نه پوشه sbin را. هیچ چیز خراب نیست و هیچ نصب دوباره‌ای آن را تغییر نمی‌دهد.

چهار بررسی مکانیسم را پیش از ویرایش هر فایل شل تأیید می‌کنند.

فرمول در واقع چه چیزی نصب می‌کند

فرمول openvpn یک دیمن خط فرمان می‌سازد، بنابراین فایل اجرایی آن زیر sbin قرار می‌گیرد نه زیر bin. سپس 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 موتور خودش را هم همراه دارد، بنابراین نسخه‌ای که همین حالا چاپ کردید ممکن است هیچ ربطی به نسخه‌ای که برنامه استفاده می‌کند نداشته باشد.

ثبت کنید کدام فایل اجرایی خروجی نسخه را تولید کرد. همان یک خط دفعه بعد که دو نسخه اختلاف پیدا کنند یک ساعت صرفه‌جویی می‌کند.

مقالات مرتبط