Homebrew-ը OpenVPN-ի բինար ֆայլը դնում է sbin-ում, ոչ ձեր PATH-ում
Բանաձևը OpenVPN-ի դեմոնը տեղադրում է sbin-ի տակ, որը macOS-ի լռելյայն PATH-ը չի ներառում։ Հաստատեք նախածանցը, ապա ուղղեք լուծումը մեկ ֆայլում։
Տեղադրումն ավարտվում է, brew-ն ասում է, որ openvpn-ը այնտեղ է, իսկ shell-ը պատասխանում է command not found։ Բինար ֆայլը գոյություն ունի, պարզապես այն գտնվում է մի պանակում, որի մասին shell-ին երբեք չեն ասել։ Homebrew-ը դեմոն-տիպի բինարները կապում է նախածանցի sbin պանակի մեջ, իսկ macOS-ի լռելյայն PATH-ը սովորաբար ներառում է bin պանակը և ոչ sbin-ը։ Ոչինչ կոտրված չէ, և ոչ մի վերատեղադրում դա չի փոխի։
Չորս ստուգում հաստատում են մեխանիզմը նախքան shell-ի որևէ ֆայլ խմբագրելը։
Ինչ է իրականում տեղադրում բանաձևը
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։ Եթե վերջինը տպում է ուղի, բանաձևը առկա է, և հարցը զուտ լուծման մասին է։ Եթե այն ոչինչ չի տպում, shell-ը սխալ տեղում է փնտրում երբեք չտեղադրված փաթեթ, և դա այլ խնդիր է՝ այլ լուծումով։
Մեկ մեքենայի վրա երկու Homebrew տեղադրում այն տեղն է, որտեղ սա ամենաշատն է կարևոր՝ պատասխանող brew-ն անպայման չէ, որ տեղադրող brew-ն է։
Ինչու shell-ը չի տեսնում sbin-ը
Մուտքի shell-ը PATH-ը կառուցում է համակարգի լռելյայններից և ձեր գործարկման ֆայլերի ավելացրածից։ Homebrew bin-ը սովորաբար ավելացվում է, իսկ Homebrew sbin-ը սովորաբար ոչ, ուստի բոլոր հրամանները աշխատում են բացի դեմոններից։ command -v openvpn-ը, որը ոչինչ չի վերադարձնում, մինչ նախածանցով ուղին տարբերակ է վերադարձնում, ամբողջ ախտորոշումն է երկու հրամանում։ Հաստատեք, որ պանակն իսկապես պարունակում է հղումը ls -l "$(brew --prefix)/sbin/openvpn"-ով։
Բացակայող հղումը տարբեր խափանում է, քան բացակայող PATH գրառումը, և դրանցից միայն մեկն է ուղղվում shell-ի ֆայլ խմբագրելով։
Ուղղեք ուղին մեկ անգամ, մեկ տեղում
Ընթացիկ shell-ում արագ փորձարկման համար eval "$(brew shellenv)"-ը սահմանում է տեղադրման փոփոխականները և երկու պանակներն էլ դնում է առջևում։ Մշտական կարգավորման համար shellenv տողը դրեք այն միակ գործարկման ֆայլում, որը ձեր shell-ը կարդում է ձեր օգտագործած մուտքի ռեժիմի համար՝ արտահանումները bash և zsh ֆայլերի վրա ցրելու փոխարեն։
Այնուհետև բացեք նոր տերմինալ և կրկնեք տարբերակի հարցումը, քանի որ քեշավորված shell-ը շարունակում է հաղորդել հին PATH-ը։
Բացահայտումը առանձին պահեք ծառայությունից
Բինար գտնելը նույնը չէ, ինչ VPN ծառայություն վարելը։ openvpn-ի ավտոմատ գործարկումը ավելացնում է պրոֆիլի, հավատարմագրերի, արտոնությունների և կյանքի ցիկլի պահանջներ, որոնց փաթեթների բացահայտումը երբեք չի դիպել։ Tunnelblick-ը նաև իր շարժիչն է բերում, ուստի հենց նոր տպած տարբերակը կարող է ոչ մի կապ չունենալ այն տարբերակի հետ, որն օգտագործում է հավելվածը։
Գրանցեք, թե որ կատարվող ֆայլն է արտադրել տարբերակի ելքը։ Այդ մեկ տողը խնայում է մեկ ժամ հաջորդ անգամ, երբ երկու տարբերակ անհամաձայնեն։