OpenVPN-asennus epäonnistuu, koska Gitin gpg voittaa PATHissa
Git for Windows tuo mukanaan oman gpg.exe:n, ja PATHin järjestys ratkaisee, minkä OpenVPN-asentaja suorittaa. Tarkista where.exe:llä ja järjestä sitten uudelleen sen sijaan, että poistaisit.
OpenVPN-asennus, joka kuolee Chocolateyn alla allekirjoitus- tai avainvirheeseen, ei yleensä ole latausongelma. Paketti suorittaa vahvistusvaiheen, joka kutsuu gpg, ja Windows ratkaisee tuon paljaan nimen PATH kautta. Jos Git for Windows asennettiin ensin, sen mukana tuleva gpg.exe seisoo OpenVPN:n odottaman GnuPG-koonnoksen edessä, ja väärä ohjelma vastaa kutsuun. Näkemäsi virhe on se, mistä tuo toinen ohjelma päätti valittaa, ja siksi se ei koskaan mainitse todellista syytä.
PATHin järjestys ratkaisee, mikä gpg suoritetaan
Windowsilla ei ole keskitettyä suoritettavien nimien rekisteriä. Kun prosessi pyytää gpg ilman täyttä polkua, lataaja käy PATH-merkinnät järjestyksessä läpi ja suorittaa ensimmäisen osuman. Git for Windows toimittaa minimaalisen GnuPG-koonnoksen usr/bin-hakemistoonsa, jotta allekirjoitetut commitit toimivat, ja sen asentaja sijoittaa tämän hakemiston yleensä käyttäjän PATH-luettelon alkuun.
GnuPG asentuu omaan hakemistoonsa, yleensä C:\Program Files (x86)\GNU\GnuPG\pub, ja tämä merkintä voi olla luettelossa myöhempänä tai puuttua kokonaan käyttäjän PATH-luettelosta. Kaksi ohjelmaa jakavat nimen ja suuren osan komentorivirajapinnasta mutteivät tilaansa: Gitin koonnos etsii avainnippua muualta, voi olla eri versio eikä välttämättä hyväksy valitsimia, joita asentaja välittää. Tämä epäjohdonmukaisuus ilmenee allekirjoitus- tai avainvirheenä, mikä on totuudenmukainen selvitys siitä, mitä väärä binääri näki. Mikään viestissä ei osoita lataajaan, koska lataaja teki täsmälleen sen, mitä sille sanottiin.
Miksi käynnistämäsi komentotulkki ratkaisee tuloksen
Periytymissääntö on se osa, joka kannattaa sisäistää. Lapsiprosessi saa käynnistäneensä komentotulkin ympäristön, joten ratkaiseva järjestys on järjestys Chocolateyn käynnistyessä, ei järjestys korjauksesi jälkeen.
Siksi PATH-muuttujan muokkaaminen asetusikkunassa ja asennuksen suorittaminen uudelleen samassa päätteessä ei usein muuta mitään: pääte säilytti vanhan ympäristön. Käynnistä uusi komentotulkki jokaisen muokkauksen jälkeen ja vahvista where.exe gpg-komennolla siinä uudessa komentotulkissa ennen kuin yrität uudelleen. Siksi myös koneentason merkintä voi voittaa käyttäjätason muutoksen, koska jotkin asentajat lisäävät koneen PATH-luettelon alkuun ja koneen merkinnät arvioidaan ennen käyttäjän merkintöjä. Jos molemmilla tasoilla on GnuPG-polku, päätä, kumpaa todella ylläpidät.
Korjaus yksi: järjestä merkinnät uudelleen
Tarkka korjaus on saada aiottu GnuPG-hakemisto voittamaan. Avaa käyttäjän ympäristömuuttujat, muokkaa Path ja siirrä GnuPG:n pub-hakemisto Git-merkintöjen yläpuolelle. Avaa sitten uusi PowerShell-ikkuna, koska käynnissä oleva pitää yhä vanhaa luetteloa.
Vaihtoehto on väliaikainen puhdas ympäristö asennukselle: poista Git-merkinnät, avaa uusi komentotulkki, suorita choco install openvpn ja palauta ne sitten.
Molemmat lähestymistavat toimivat samasta syystä, ja toinen on turvallinen vain, jos todella palautat merkinnät. Gitin usr/bin-hakemiston poistaminen PATH-luettelosta rikkoo allekirjoitetut commitit pysyvästi, ja seuraava työkalu, joka odottaa toimivaa gpg-komentoa, epäonnistuu omalla viestillään, jolla ei ole mitään tekemistä OpenVPN:n kanssa. Jos valitset väliaikaisen reitin, tallenna Path-muuttujan alkuperäinen arvo tikettiin, jotta palautus on liittäminen eikä uudelleenrakennus. Merkintöjen järjestäminen on kestävä korjaus; niiden poistaminen on kiertotie, jolla on päättymispäivä.
Vahvista ja laita sitten takaisin
Vahvista ennen ja jälkeen samassa käyttäjäkontekstissa, jota Chocolatey käyttää. where.exe gpg luettelee jokaisen osuman ratkaisujärjestyksessä, joten ensimmäinen rivi on se, joka suoritetaan; Get-Command gpg -All antaa saman vastauksen yksityiskohtaisemmin PowerShellissä. Sitten gpg --version vahvistaa, mikä koonnos vastasi.
Jos where.exe luettelee yhä Gitin kopion ensimmäisenä, uudelleenjärjestely ei ole saavuttanut sitä istuntoa, eikä mikään uudelleenasennus auta. Tarkista sekä koneen että käyttäjän PATH komennolla [Environment]::GetEnvironmentVariable('Path','Machine') ja samalla kutsulla komennolla 'User', koska tehokas luettelo kootaan molemmista. Onnistuneen asennuksen jälkeen tarkista uudelleen komennolla openvpn --version ja käynnistä palvelu tai GUI kerran, sillä paketti voi asentua puhtaasti ja jättää silti palvelun, joka ei käynnisty.
Jos oikein järjestetty PATH epäonnistuu yhä, jäljellä oleva muuttuja on paketin versio. Kiinnitetty Chocolatey-paketti voi odottaa tiettyä GnuPG-koonnosta tai asennuspolkua, jota koneellasi ei ole.
Lue paketin oma loki ennen kuin muutat mitään muuta. C:\ProgramData\chocolatey\logs\chocolatey.log tallentaa epäonnistuneen komentorivin ja hakemiston, josta se suoritettiin, mikä kertoo, oliko epäonnistunut kutsu allekirjoituksen tarkistus, purkaminen vai asennuksen jälkeinen skripti. Tämä ero ratkaisee, debuggaatko yhä ylipäätään gpg-komentoa.
Toistumisen estävä tapa on kohdella PATH-muuttujaa jaettuna tilana, jolla on dokumentoitu järjestys, eikä hakemistojen säkkinä. Kun asennat työkalun, joka tuo mukanaan yleisen binäärinimen, tarkista, mitä se varjostaa seuraavassa avaamassasi komentotulkissa. Kirjoita sitten muistiin järjestys, johon päädyit, koska seuraava asentaja lisää siihen ja seuraava henkilö ihmettelee, miksi allekirjoituksen tarkistus epäonnistuu koneella, jolla mikään ei muuttunut. Yksi where.exe ennen asennusta säästää koko silmukan.