在 CentOS 7 伺服器上,我嘗試安裝5.x
的版本Node.js
,但由於某種原因,yum
不斷嘗試安裝版本並在下載網站0.x
找不到版本時傳回錯誤。該錯誤表明正在將版本檔案名稱與版本url 連接起來。我認為這表明CentOS 7 機器上的 配置有問題。0.x
5.x
yum
0.x
5.x
yum
安裝 5.x 版本需要對以下內容進行哪些具體更改?
根錯誤訊息是:
Error downloading packages:
nodejs-0.10.42-1nodesource.el7.centos.x86_64: [Errno 256] No more mirrors to try.
可以查看我的下面的程式碼源自的發布者頁面在以下連結。此外,一些併發症可能是由於按照此其他連結中的說明進行的早期嘗試。為了探索早期嘗試的可能殘餘,我目前正在執行以下命令並等待結果:grep -rnw '/path/to/somewhere/' -e "pattern"
這是設定節點來源位置的終端輸出:
[root@localhost tmp]# curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
## Installing the NodeSource Node.js 5.x repo...
## Inspecting system...
+ rpm -q --whatprovides redhat-release || rpm -q --whatprovides centos-release || rpm -q --whatprovides cloudlinux-release || rpm -q --whatprovides sl-release
+ uname -m
## Confirming "el7-x86_64" is supported...
+ curl -sLf -o /dev/null 'https://rpm.nodesource.com/pub_5.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm'
## Downloading release setup RPM...
+ mktemp
+ curl -sL -o '/tmp/tmp.sH82u4Gpap' 'https://rpm.nodesource.com/pub_5.x/el/7/x86_64/nodesource-release-el7-1.noarch.rpm'
## Installing release setup RPM...
+ rpm -i --nosignature --force '/tmp/tmp.sH82u4Gpap'
## Cleaning up...
+ rm -f '/tmp/tmp.sH82u4Gpap'
## Checking for existing installations...
+ rpm -qa 'node|npm' | grep -v nodesource
## Run `yum install -y nodejs` (as root) to install Node.js 5.x and npm.
## You may also need development tools to build native addons:
## `yum install -y gcc-c++ make`
/tmp
以下是執行上述命令後資料夾 內容的清單:
[root@localhost tmp]# ls -al
total 8
drwxrwxrwt. 13 root root 320 Feb 14 06:13 .
dr-xr-xr-x. 19 root root 4096 Jan 29 20:54 ..
drwx------. 2 user user 60 Feb 13 20:05 .esd-1000
drwxrwxrwt. 2 root root 40 Feb 13 20:04 .font-unix
prw-------. 1 root root 0 Feb 13 20:05 hogsuspend
drwxrwxrwt. 2 root root 80 Feb 13 20:05 .ICE-unix
srwxrwxrwx. 1 mongod mongod 0 Feb 13 20:04 mongodb-27017.sock
drwx------. 2 user user 40 Dec 31 1969 orbit-user
drwx------. 2 user user 60 Feb 13 20:05 ssh-AmQyH8IIEC2m
drwx------. 3 root root 60 Feb 13 20:05 systemd-private-74534ca9946043cc88dbe52a38b4344d-colord.service-hDR3Cd
drwx------. 3 root root 60 Feb 13 20:04 systemd-private-74534ca9946043cc88dbe52a38b4344d-rtkit-daemon.service-ZAQmPk
drwxrwxrwt. 2 root root 40 Feb 13 20:04 .Test-unix
drwx------. 2 user user 40 Feb 13 20:08 tracker-extract-files.1000
-r--r--r--. 1 root root 11 Feb 13 20:05 .X0-lock
drwxrwxrwt. 2 root root 60 Feb 13 20:05 .X11-unix
drwxrwxrwt. 2 root root 40 Feb 13 20:04 .XIM-unix
nodejs
以下是嘗試使用安裝的結果yum
:
[root@localhost tmp]# yum install -y nodejs
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.lax.hugeserver.com
* epel: mirror.sfo12.us.leaseweb.net
* extras: mirror.keystealth.org
* updates: mirror.supremebytes.com
Resolving Dependencies
--> Running transaction check
---> Package nodejs.x86_64 0:0.10.42-1nodesource.el7.centos will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================================================================================================================
Package Arch Version Repository Size
================================================================================================================================================================================
Installing:
nodejs x86_64 0.10.42-1nodesource.el7.centos nodesource 4.5 M
Transaction Summary
================================================================================================================================================================================
Install 1 Package
Total download size: 4.5 M
Installed size: 16 M
Downloading packages:
No Presto metadata available for nodesource
nodejs-0.10.42-1nodesource.el7 FAILED
https://rpm.nodesource.com/pub_5.x/el/7/x86_64/nodejs-0.10.42-1nodesource.el7.centos.x86_64.rpm: [Errno 14] HTTPS Error 404 - Not Found ] 0.0 B/s | 0 B --:--:-- ETA
Trying other mirror.
To address this issue please refer to the below knowledge base article
https://access.redhat.com/articles/1320623
If above article doesn't help to resolve this issue please create a bug on https://bugs.centos.org/
Error downloading packages:
nodejs-0.10.42-1nodesource.el7.centos.x86_64: [Errno 256] No more mirrors to try.
[root@localhost tmp]#
作為記錄,gedit /etc/yum.repos.d/nodesource-el.repo
顯示以下內容:
[nodesource]
name=Node.js Packages for Enterprise Linux 7 - $basearch
baseurl=https://rpm.nodesource.com/pub_5.x/el/7/$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/NODESOURCE-GPG-SIGNING-KEY-EL
[nodesource-source]
name=Node.js for Enterprise Linux 7 - $basearch - Source
baseurl=https://rpm.nodesource.com/pub_5.x/el/7/SRPMS
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/NODESOURCE-GPG-SIGNING-KEY-EL
gpgcheck=1
我懷疑問題可能是由於之前運行了另一個命令造成的:
curl --silent --location rpm.nodesource.com/setup | bash -
我猜根本的問題是 yum 如何保留這些結果curl --silent --location ... | bash - commands
控制案例:
在不同虛擬機器上全新安裝的 CentOS 7 上,以下三個簡單指令成功安裝了正確的目前版本 5.x 的 Nodejs:
# cd /tmp
# curl --silent --location https://rpm.nodesource.com/setup_5.x | bash -
# yum install -y nodejs
# node --version
v5.6.0
控制案例的這些結果顯示問題在於出現問題的機器中 yum 的配置方式。 那麼需要對有問題的機器進行哪些具體更改才能配置 yum 產生正確的下載 url? 將所有內容移植到不同的虛擬機器上是不合理的。當然,這只是 yum 配置中的一兩行,可以透過更改來解決此問題。
答案1
這似乎是快取問題,但尚不清楚出了什麼問題。在聊天中與發文者進行一番交談後,運行yum clean all
解決了問題。
海報指出了以下內容:
[root@localhost yum]# ls /var/cache/yum/x86_64/7/nodesource/packages
nodejs-0.10.42-1nodesource.el7.centos.x86_64.rpm
[root@localhost yum]# yum clean all
[root@localhost yum]# ls /var/cache/yum/x86_64/7/nodesource/packages
[root@localhost yum]# yum install -y nodejs
.... much terminal output during successful install
[root@localhost yum]# node --version
v5.6.0
因此yum clean all
刪除了快取中已儲存的過時包。
我對基於 Red Hat 的發行版沒有足夠的知識或經驗來說明這裡出了什麼問題,因此不會進一步發表評論。
答案2
這就是我必須做的......
首先,刪除從 EPEL 中安裝的 nodejs 套件:
sudo yum remove nodejs
列出您的 yum 儲存庫:
yum repolist
這是我的節點儲存庫條目的樣子:
nodesource/x86_64 Node.js Packages for Enterprise Linux 7 - x86_64
如果您好奇,請列出節點儲存庫中的套件:
yum --disablerepo="*" --enablerepo="nodesource" list available
然後僅使用節點儲存庫執行 yum install:
yum --disablerepo="*" --enablerepo="nodesource" install nodejs
我的懷疑是,節點儲存庫中使用的編號方案中存在一些問題,沒有將 Nodejs 提供為 EPEL 儲存庫中的套件的替代品,但這只是猜測。
答案3
yum
將嘗試取得配置的儲存庫中可用的版本,而不是您想要安裝的版本。
安裝覆蓋官方提供版本的軟體包肯定會讓你的系統崩潰,而且通常是以微妙的方式。看來你的nodejs儲存庫正試圖做到這一點。更仔細地查看可用的內容、第三方儲存庫提供的內容以及避免破壞的保護措施。
也許更明智的解決方案是僅為您的帳戶安裝該軟體包,也許直接從原始程式碼安裝?