Apt-get nie rozpoznaje oprogramowania węzła zainstalowanego przez NVM

15

Próbuję zainstalować .debpakiet, jednak wymaga on kilku zależności, takich jak nodejs, nodejs-underscore, ale wszystkie z nich są już zainstalowane za pośrednictwem nvmi są dostępne.

Czy w każdym razie mogę apt-getrozpoznać pakiety zainstalowane przez NVM, aby się nie kolidowały? Wiem, że apt-get jest ogólnosystemowy, podczas gdy nvm działa w lokalnej przestrzeni użytkownika, więc może to wymagać trochę włamania.

Louisgv
źródło

Odpowiedzi:

13

Najprostszym podejściem, o ile to możliwe, jest użycie tylko jednego nvm lub .deb pakietów. To prawdopodobnie zaoszczędzi ci wielu bólów głowy na dłuższą metę, więc spójrz na to najpierw. Wygląda na to, że prawie wszystko, co związane z węzłem, które jest dostarczane przez .debpakiet, może zostać zainstalowane nvmzamiast tego.

Jeśli tak naprawdę nie jest to możliwe, możesz być w stanie utworzyć „obojętne” .debpakiety za pomocą equivs-controli equivs-buildpowiedzieć, aptże masz zainstalowane zależności. Zauważ, że może to potencjalnie pomylić apt, jeśli źle coś zrobisz. Ponadto, nawet jeśli odinstalujesz nvmpakiety, apt nadal będzie myślał, że masz substytuty zdefiniowane w fikcyjnych pakietach, dopóki sam nie odinstalujesz pakietów fikcyjnych.

Najpierw zainstaluj „equivs”, abyśmy mogli zbudować atrapy pakietów:

sudo apt-get install equivs

Utwórz plik kontrolny, który opisuje atrapę pakietu:

cd ~
equivs-control nodejs-dummy

Edytuj ten plik kontrolny:

nano nodejs-dummy

Cofnij komentarz i zmień wiersze w pliku sterującym zgodnie z potrzebami. W szczególności ustaw wiersz „Zapewnia:”, aby wyświetlić listę pakietów, które zastąpiłeś nvm. Na przykład:

Package: nodejs-dummy
Version: (version slightly higher than what the apt package actually provides)
Maintainer: Your Name <[email protected]>
Provides: nodejs
Architecture: all
Description: Something that will remind you what this does ;)

Zbuduj pakiet:

equivs-build nodejs-dummy

Na koniec zainstaluj:

sudo dpkg -i nodejs-dummy_use_the_actual_filename.deb

Opłucz i powtórz dla wszystkich używanych opakowań nvm. Jeśli pakiet zależy od konkretnej wersji innego pakietu, który zastąpiłeś nvm, może być konieczne użycie dokładnego numeru wersji, od którego zależy. Nie jestem jednak pewien, jakie mogą z tego wynikać problemy, i prawdopodobnie będziesz musiał nadal odbudowywać atrapę pakietów, ilekroć pakiety OS zmieniają wersje.

hampercm
źródło
1
Wielkie dzięki za odpowiedź! Mój ranking jest niski, więc głosowanie się nie liczy, ale zagłosowałem!
Louisgv,
3
@Louisgv, jeśli to odpowiedziało na twoje pytanie, rozważ je .
Boris the Spider
Nie wiedziałem o ekwiwalentach. To świetne narzędzie, dzięki!
brandizzi
5

Jest to problem z tym, jak nvm dystrybuuje oprogramowanie. Po prostu nie robią żadnych opakowań specyficznych dla dystrybucji. Mówiąc konkretnie, szybko przeczytałem nvm i są to po prostu binarne pliki binarne. Na przykład oto, co instaluje dla nodejs 6: https://nodejs.org/.../lates.../node-v6.3.1-linux-x64.tar.gz To nie zawiera żadnego standardowego pliku .deb lub .rpm metadane, więc dopóki właściwie nie wydadzą prawdziwych pakietów, niewiele menedżerów pakietów na poziomie dystrybucji może zrobić i prawdopodobnie będą ze sobą kolidować. Jeśli rozumiem, że nvm wypuszczanie odpowiednich pakietów nie jest czymś, czym są zainteresowani, ponieważ wiąże je z obsługą pakietów specyficznych dla dystrybucji. Zamiast tego mamy hack, którym jest nvm. Może zgłoś problem z ich dupkiem. Może to naprawić tylko społeczność nodejs.

W szczególności npm i nvm wydają się obecnie nie obsługiwać żadnej koncepcji podpisywania kodu ( źródła ), więc w porównaniu z pakietem dystrybucyjnym, który jest dobrze obsługiwany przez większość menedżerów pakietów dystrybucyjnych. Jest to dość niepewne podejście do instalowania pakietów systemowych.

sevenbitbyte
źródło
4

Nie, nie możesz, jak już powiedziałeś. Apt działa na poziomie systemu, gdzie zwykłe NVM instaluje pakiety na poziomie użytkownika.

Masz dwie opcje -

  • Albo żądany pakiet przez nvm i użyj innych już zainstalowanych pakietów nvm, lub

  • zainstaluj pakiet za pomocą apt-geti zainstaluj z nim wszystkie zależności.

Anwar
źródło