为什么在Ubuntu 16.04上安装节点6.x实际上会安装节点4.2.6?


78

这些是我在Ubuntu 16.04上安装节点的步骤:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs 
sudo apt-get install -y npm

这是官方说明:

https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions

完成此操作后,运行nodejs --versionreturn v4.2.6

正如我以前所使用的那样,setup_6.x我假设6将安装一个以开头的版本?

我以为setup_6.x应该是setup_6.2.1,但是该页面返回404,请参阅:

https://deb.nodesource.com/setup_6.x(那里有一个页面)

https://deb.nodesource.com/setup_6.2.1(返回404)

如何在Ubuntu 16.04上安装最新稳定的node版本?

编辑:

这些是运行后的结果sudo apt-get install -y nodejs

sudo apt-get install -y nodejs 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  gyp libboost-python1.58.0 libjs-inherits libjs-node-uuid libjs-underscore
  libssl-dev libssl-doc libuv1-dev linux-headers-4.4.0-18
  linux-headers-4.4.0-18-generic linux-headers-4.4.0-21
  linux-headers-4.4.0-21-generic linux-image-4.4.0-18-generic
  linux-image-4.4.0-21-generic linux-image-extra-4.4.0-18-generic
  linux-image-extra-4.4.0-21-generic linux-signed-image-4.4.0-18-generic
  linux-signed-image-4.4.0-21-generic python-configobj python-pycurl
  python-pyexiv2 python-pyexiv2-doc
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  nodejs
0 to upgrade, 1 to newly install, 0 to remove and 0 not to upgrade.
Need to get 0 B/3,162 kB of archives.
After this operation, 13.2 MB of additional disk space will be used.
Selecting previously unselected package nodejs.
(Reading database ... 329473 files and directories currently installed.)
Preparing to unpack .../nodejs_4.2.6~dfsg-1ubuntu4_amd64.deb ...
Unpacking nodejs (4.2.6~dfsg-1ubuntu4) ...
Processing triggers for doc-base (0.10.7) ...
Processing 1 added doc-base file...
Registering documents with scrollkeeper...
Processing triggers for man-db (2.7.5-1) ...
Setting up nodejs (4.2.6~dfsg-1ubuntu4) ...
update-alternatives: using /usr/bin/nodejs to provide /usr/bin/js (js) in auto mode

编辑:

结果apt-cache policy nodejs

apt-cache policy nodejs
nodejs:
  Installed: 4.2.6~dfsg-1ubuntu4
  Candidate: 4.2.6~dfsg-1ubuntu4
  Version table:
 *** 4.2.6~dfsg-1ubuntu4 500
        500 http://au.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
        100 /var/lib/dpkg/status

请将apt-cache policy nodejs请的输出副本作为问题编辑到您的问题中。
托马斯·沃德

系统在NodeJS 4.x中提取的事实意味着您运行了错误的脚本,或者没有将存储库正确地添加到系统中-使用您链接到的页面中概述的确切步骤,我能够获得最新的安装照原样,因此可能会有很多问题-如果您可以提供apt-cache数据,以便我们可以看到您的计算机在存储库中看到的内容,我们也许可以提供进一步的帮助。
托马斯·沃德

@ThomasW。-添加了要发布的数据。
user1063287

1
感谢您提供更新的数据。看起来该脚本出于某种原因没有执行应有的功能。我在下面的回答中详细说明了这种情况,以及执行脚本正在执行的“手动”方式。您可以使用它来从NodeJS获取最新版本。它不像脚本那么好和容易,但实际上是脚本的核心功能。
托马斯·沃德

1
@pipe幸运的是,像我这样的人在可破坏的VM中运行脚本,因此我们可以看到它在做什么。这就是我从答案中得出指令的方式,因此我们可以手动执行“脚本”的操作。
托马斯·沃德

Answers:


136

核心原因是安装脚本未正确运行。因此,由于来自OP的更新数据支持此功能,因此从未看到NodeSource存储库中的数据,apt因为脚本未正确配置它。

因此,该脚本可能找不到您的发行版,或者在配置存储库时可能弄乱了该脚本,或者可能是网络中断,或者是千种原因之一破坏了该脚本并且没有完成其工作。

您将看到版本4.x已安装的事实意味着该脚本未正确执行其工作,因此该脚本不一定有错误。这只是意味着我们必须以更艰难的方式来做到这一点。

我应该指出:该脚本实际上并没有进行任何安装-它所做的只是确定您所使用的Debian / Ubuntu版本,并配置用于从中获取数据的存储库。安装部分实际上是sudo apt-get install您手动执行的步骤。


无需依赖脚本,我们可以执行脚本的老式方法:亲自动手设置存储库配置并安装NodeJS。

这是完成这项工作的手动方法,基本上就是脚本的工作(步骤4除外,这是确保您获得准确的版本数据):

  1. 创建一个新文件: /etc/apt/sources.list.d/nodesource.list

    您需要使用创建此文件sudo,但是在创建文件时,请将其放入其中:

    deb https://deb.nodesource.com/node_6.x xenial main
    deb-src https://deb.nodesource.com/node_6.x xenial main
    

    然后,保存文件。(node_6.xnode_7.xnode_8.x等等替换为较新的Node版本)

  2. 从Nodesource下载用于存储库的GPG签名密钥。否则,您可能会遇到以下NO_PUBKEY错误apt-get updatewget如果curl未安装,请在此命令中使用,如果未安装,请安装其中一个):

    curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
    
  3. 手动运行sudo apt-get update

    这将从nodesource存储库刷新数据,因此apt知道存在较新的版本。

    如果您遇到NO_PUBKEYGPG错误,请返回步骤2

  4. 检查apt-cache policy nodejs输出。

    这不是由脚本完成的,但是您要确保在输出中看到一个类似这样的条目(尽管如果您不使用6.x作为版本字符串,则版本可能会有所不同;这是我们唯一的选择关心的是通过nodesource提供了一个更新的版本号):

    Version table:
        6.2.1-1nodesource1~xenial1 500
           500 https://deb.nodesource.com/node_6.x xenial/main amd64 Packages
        4.2.6~dfsg-1ubuntu4 500
           500 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
    

    如果您没有看到这样的条目,而仅看到4.2.6,请重新开始。否则,请继续。

  5. 安装nodejs二进制文件。 既然您已经确认6.x在系统上可用,则可以安装它:sudo apt-get install nodejs

  6. nodejs --version现在应该v6.2.1在输出上显示或类似的内容(只要它以v6.您使用的版本6 开始,那么;如果您使用的版本比6更高,但只要不是4.2.6,则此版本号可能会更高。应该很好)。


4
紧随其后的是T,所有分数都与描述的行为相符。非常感谢你。
user1063287

1
@ user1063287不客气!希望如果脚本对他们也不起作用,这会对其他人有所帮助!享受使用最新的NodeJS!
托马斯·沃德

哦,所以就是为什么当我认为自己确实没有Node 6的原因,并且程序抱怨我需要版本6。谢谢!

谢谢,工作得很好,我注意到在我/etc/apt/sources.list.d/nodesource.list那里有一个关于它被禁用的评论-那里也有旧的0.x版本,而我在4.x节点-v。尼斯明确的指示。
DaveStSomeWhere

1
鉴于默认情况下未安装curl,替代方法是使用wgetwget -O - https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
gerardw

38

我有一个较旧的节点版本。我要做的就是清除旧的:

sudo apt-get purge nodejs npm

然后,v=6根据各个版本的需要,用7、8、9 替换6 in (请参阅官方安装说明):

v=6
curl -sL https://deb.nodesource.com/setup_$v.x | sudo -E bash -

(确保您已安装curl。)

最后,

sudo apt-get install -y nodejs

Boom,最新版本的节点。


4
或者,https://deb.nodesource.com/setup_7.x对于节点v7。请参阅官方指南
ryenus

2
我的仍安装v4.2.6
Freek Nortier

1
@FreekNortier我在Linux Mint 18上也遇到了这个问题。清除并运行后,我能够安装版本11 sudo apt-get install python-software-properties。我在tecadmincodebind上找到了这个建议。

4

对于Ubuntu 16.04.2版本的用户(与Thomas'post稍有不同,感谢他)

1.打开软件更新程序

2.设置

3.其他软件

4.添加源,但请记住稍后选择所有新源选项:


deb https://deb.nodesource.com/node_6.x xenial main
deb-src https://deb.nodesource.com/node_6.x xenial main

5.重新加载

6。sudo apt-get update

7. apt-cache policy nodejs//获取新版本表并检查源代码是否设置完成

8。sudo apt install nodejs

9。nodejs --version

现在就准备好了.......

警告:请勿在更新器面板上更改nvidia卡的Linux默认驱动程序...。系统将崩溃。


它安装v4.2.6。
Prashant Prabhakar Singh

真好!为我工作
ejaenv

3

我遇到过同样的问题。但就我而言,我必须升级我的curl命令。您可以通过使用-S选项来查看问题。

curl -s -S https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -

哪个显示了问题

curl: (1) Protocol "https" not supported or disabled in libcurl
gpg: no valid OpenPGP data found.

因此,我通过运行以下命令解决了此问题。

sudo apt-get install curl
sudo apt autoremove
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install nodejs

解决了问题
SadeepDarshana

1

通过添加@Thomas Ward来回答使用https URL安装nodejs 8.x时遇到问题的人,或者通过显示证书错误来使代码继续安装v4.2.6,请尝试使用以下几行添加nodesource.list

deb http://deb.nodesource.com/node_8.x xenial main
deb-src http://deb.nodesource.com/node_8.x xenial main

下一步:运行

sudo curl -sL http://deb.nodesource.com/setup_8.x | sudo -E bash -

然后

sudo apt-get install -y nodejs

这将通过安装更新​​的nodejs版本和npm版本来解决您的问题,因为它解决了Ubuntu 16.04 LTS的问题...


0

我找到了此链接,它可以帮助我安装Nodejs8____https://www.ubuntuupdates.org/ppa/nodejs_7.x。我不得不加入Nojs8https,因为那是说我需要达到第二级才能发布两个以上的链接。我认为这是随机的,但无论如何。

在安装它之前,我运行了命令:apt-get remove --purge version nodejs

要验证您没有安装任何版本,请运行:apt-cached策略nodejs和or nodejs --version

我只需将7更改为8就可以安装Node js 8,最终得到的版本是8.1.3。为此,我运行了上面发布的该页面中的命令,但无论如何这里都是这些命令:

使用以下命令下载存储库密钥:

curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -

然后设置存储库::

sudo sh -c "echo deb https://deb.nodesource.com/node_7.x zesty main \ > /etc/apt/sources.list.d/nodesource.list"

sudo apt-get update

sudo apt-get install nodejs

同样,如果您希望使用节点js 8,则可以在该命令行中将数字7更改为8,瞧!


0

我尝试遵循https://github.com/nodesource/distributions上第8版的说明,但这对我不起作用。我直接在浏览器中访问了https://deb.nodesource.com/setup_8.x,并将脚本复制并粘贴到了系统nodejs.sh的文件中。然后我执行了以下命令

sudo -E bash nodejs.sh
apt-cache policy nodejs
sudo apt-get install nodejs

命令apt-cache显示了两个版本,其中一个版本优先选择安装8。您可以随后删除安装文件。不确定为什么在本地复制文件会有所帮助,因为curl命令正确显示了脚本。


0

嗨,如果您有Ubuntu 16,请尝试以下说明。它非常适合我。在此过程中出现要求时,还提供您的帐户密码。

  1. sudo su -c“回显'deb https://deb.nodesource.com/node_8.x xenial main'>> /etc/apt/sources.list.d/nodesource.list”

  2. sudo su -c“ echo'deb -src https://deb.nodesource.com/node_8.x xenial main'>> /etc/apt/sources.list.d/nodesource.list”

  3. sudo apt-get更新

  4. apt-cache policy nodejs检查列出的版本是否具有节点8

  5. 须藤apt-get install nodejs

  6. nodejs -v检查安装的节点版本

这将在您的系统上成功安装nodejs版本8。如果您需要其他版本,请在步骤1和2上更改版本,它将成功运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.