NetBSD nodejs18 i IPv6

NetBSD nodejs18 i IPv6

Prowadzę kilka blogów. Wszystkie pod kontrolą NetBSD jako OS, oraz Ghost CMS.

Tego typu stack nie jest oficjalnie wspierany, ale skoro w pkgsrc mamy nodejs wraz z npm i yarn to w zasadzie dlaczego nie powinno to działać? No i działało, z mniejszymi lub większymi problemami, które opisywałem na anglojęzycznym blogu.

Tak było do wersji około 5.70.2, ponieważ działała na NodeJS 16. Po tej wersji, albo krótko po tej wersji Ghost przeszedł na NodeJS 18 i aktualnie jest to jedyna wspierana wersja.

NodeJS 18 preferuje IPv6 nad IPv4. I tu zaczyna się dziwna jazda, nie wiem czy tylko przy NetBSD czy w inyych systemach. Mianowicie - pomimo:

  • odkonfigurowania nawet link-local na karcie sieciowej
  • ustawianiu opcji w .npmrc czy .yarnrc czy w samym nodejs
  • przekompilowaniu kernela aby wyłączyć IPv6 całkowice
  • zakomentowaniu adresu localhost IPv6 w /etc/hosts
  • używanie propozycji ChatGPT i Gemini do wymuszneia używania ipv4 przez ustawianie zmiennych powłoki

Absolutnie nie przynosiło to żadnego rezultatu.

Każda instalacja kończyła się mniej więcej tak:

# ghost update

✖ Checking for Ghost-CLI updates
An error occurred.
Message: 'connect EHOSTUNREACH 2606:4700::6810:1e22:443 - Local (:::65525)'

Pierwszy przełom zaliczyłem, kiedy znalazłem w konfiguracji nodejs opcję --dns-result-order, która można ustawić na ipv4first. Pomimo różnych prób z exportem i dopisywaniem do rożnych plików .*.rc nie zadziałało jak powinno, ale uruchominie ghost update jako parametr do node z tą opcją już tak!

node --dns-result-order=ipv4first /usr/pkg/bin/ghost update

Love open source? We’re hiring JavaScript Engineers to work on Ghost full-time.
https://careers.ghost.org



✔ Checking system Node.js version - found v18.19.1
✔ Checking current folder permissions
✔ Checking memory availability
✔ Checking free space
✔ Checking for available migrations
✔ Checking for latest Ghost version

# 5.82.0

* 🔒 Added escaping to member export CSV fields - Daniel Lockyer
* 🐛 Fixed jerky scrolling in Site Design for Safari (#19974) - Ronald Langeveld

---

View the changelog for full details: https://github.com/tryghost/ghost/compare/v5.81.1...v5.82.0

✔ Fetched release notes
✖ Downloading and updating Ghost to v5.82.0
A ProcessError occurred.

Message: Command failed: yarn install --no-emoji --no-progress
warning ../../package.json: No license field
warning Resolution field "moment@2.24.0" is incompatible with requested version "moment@^2.29.1"
warning Resolution field "@tryghost/errors@1.3.1" is incompatible with requested version "@tryghost/errors@1.2.26"
warning Resolution field "moment@2.24.0" is incompatible with requested version "moment@2.29.1"
warning Resolution field "moment@2.24.0" is incompatible with requested version "moment@^2.27.0"
warning Resolution field "moment-timezone@0.5.23" is incompatible with requested version "moment-timezone@^0.5.31"
warning Resolution field "moment@2.24.0" is incompatible with requested version "moment@2.29.4"
warning Resolution field "moment@2.24.0" is incompatible with requested version "moment@2.29.4"
warning Resolution field "moment-timezone@0.5.23" is incompatible with requested version "moment-timezone@0.5.34"
warning Resolution field "@tryghost/errors@1.3.1" is incompatible with requested version "@tryghost/errors@1.2.26"
warning Resolution field "moment@2.24.0" is incompatible with requested version "moment@2.29.1"
warning Resolution field "moment@2.24.0" is incompatible with requested version "moment@2.29.3"
warning Resolution field "moment-timezone@0.5.23" is incompatible with requested version "moment-timezone@^0.5.33"
warning Resolution field "moment@2.24.0" is incompatible with requested version "moment@2.27.0"
warning Resolution field "@tryghost/logging@2.4.13" is incompatible with requested version "@tryghost/logging@2.4.10"
warning Resolution field "moment@2.24.0" is incompatible with requested version "moment@^2.29.1"
error An unexpected error occurred: "https://registry.npmjs.org/@tryghost/errors/-/errors-1.3.1.tgz: connect EHOSTUNREACH 2606:4700::6810:123:443 - Local (:::65526)".

yarn install v1.22.19
[1/4] Resolving packages...
[2/4] Fetching packages...
info If you think this is a bug, please open a bug report with the information provided in "/var/www/node/netbsd.pl/versions/5.82.0/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

Oczywiście radość trwała krótko, ponieważ przy pobieraniu paczkej yarn (który używa URLa od npm?) znowu chce używać adresu IPv6 ...

ROZWIĄZANIE

Ostatecznie udało mi się przywrócić działanie ghost cli do normalnego trybu, poprzez dodanie do /etc/hosts następujących linijek:

104.16.24.34            registry.yarnpkg.com
104.16.2.35             registry.npmjs.org
104.20.23.46            nodejs.org

Całe szczęście, że to co jest w pliku hosts zawsze wygrywa nad logiką DNS systemu i innych programów. Co ciekawe w systemie ping, czy nslookup tych domen, jak najbardziej jest odpytywany po IPv4 bez problemu, więc wnioskuję, że problem leży w NodeJS 18. Nie wiem czy można poprawnie wymusić uzywanie tylko IPv4 w NodeJS 18/NPM/YARN, sam internet nie dostarcza odpowiedzi w prost jak to skonfigurować, boty AI całkowicie nie radzą sobie też z tym problemem.

W ogóle, gdyby Ghost nie był tak fajnym silnikiem blogowym, dawno bym już zarzucił próby okiełznania NodeJS, ponieważ wszystko w nim jest strasznie chaotyczne i wszelkie próby uzyskania dodatkowych informacji sprowadzają się do tego, że ktoś czegoś nie ma zainstalowanego, albo uruchomionego, albo spróbować należy np zrestartować serwer...

Kończę aktualizować blogi i paczki z pkgsrc na już nowym NetBSD 10 na maszynie testowej i jeżeli wszystko pójdzie gładko przerzucam zmiany na maszynę docelową.