Jon*_*han 39 package-management apt mongodb 16.04
当我尝试使用https://docs.mongodb.com/getting-started/shell/tutorial/install-mongodb-on-ubuntu/16.04上的说明安装 mongodb 时,我在安装步骤中得到以下结果:
jonathan@poseidon:~$ sudo apt-get install mongodb-org
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package mongodb-org is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'mongodb-org' has no installation candidate
Run Code Online (Sandbox Code Playgroud)
我使用 Wireshark 检查了 HTTP 流量,发现唯一的流量是列表的 HTTP GET 和 HTTP 304 响应,这表明问题出在我的本地配置文件中。我的 sources.list.d 文件包含以下条目:
mongodb-org-3.4.list
Run Code Online (Sandbox Code Playgroud)
我需要做什么才能继续解决此问题?
编辑:我尝试在 VirtualBox 下的 16.04 新安装上再次执行此操作。我检索了密钥,创建了列表文件,并sudo apt update得到了以下结果:
jonathan@Ubuntu-16:~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
[sudo] password for jonathan:
Executing: /tmp/tmp.uWYpRUWfjK/gpg.1.sh --keyserver
hkp://keyserver.ubuntu.com:80
--recv
0C49F3730359A14518585931BC711F9BA15703C6
gpg: requesting key A15703C6 from hkp server keyserver.ubuntu.com
gpg: key A15703C6: public key "MongoDB 3.4 Release Signing Key <packaging@mongodb.com>" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
jonathan@Ubuntu-16:~$ echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse
jonathan@Ubuntu-16:~$ sudo apt update
Ign:1 http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 InRelease
Get:2 http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 Release [3 462 B]
Hit:3 http://mx.archive.ubuntu.com/ubuntu xenial InRelease
Get:4 http://security.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB]
Get:5 http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 Release.gpg [801 B]
Get:6 http://mx.archive.ubuntu.com/ubuntu xenial-updates InRelease [95.7 kB]
Ign:5 http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 Release.gpg
Get:7 http://mx.archive.ubuntu.com/ubuntu xenial-backports InRelease [92.2 kB]
Reading package lists... Done
W: GPG error: http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY D68FA50FEA312927
E: The repository 'http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 Release' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
jonathan@Ubuntu-16:~$
Run Code Online (Sandbox Code Playgroud)
如您所见,检索到的密钥用于 Mongodb 3.4,而不是 Mongodb 3.2,这解释了 apt 更新中的 GPG 失败。有谁知道哪里可以得到正确的密钥?
Ter*_*nce 111
首先,删除 MongoDB 的任何现有存储库文件。
sudo rm /etc/apt/sources.list.d/mongodb*.list
Run Code Online (Sandbox Code Playgroud)
接下来,添加密钥:(没有密钥,存储库将不会加载)
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv E52529D4
Run Code Online (Sandbox Code Playgroud)
现在,创建一个新的 MongoDB 存储库列表文件:
sudo bash -c 'echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" > /etc/apt/sources.list.d/mongodb-org-4.0.list'
Run Code Online (Sandbox Code Playgroud)
通过更新存储库完成安装,然后安装:
sudo apt update
sudo apt install mongodb-org
Run Code Online (Sandbox Code Playgroud)
启用mongod服务并启动它:
systemctl enable mongod.service
systemctl start mongod.service
Run Code Online (Sandbox Code Playgroud)
检查您的 mongodb 版本:
~$ mongo --version
MongoDB shell version v4.0.5
git version: 3739429dd92b92d1b0ab120911a23d50bf03c412
OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016
allocator: tcmalloc
modules: none
build environment:
distmod: ubuntu1604
distarch: x86_64
target_arch: x86_64
Run Code Online (Sandbox Code Playgroud)
检查服务是否正在运行:
~$ systemctl status mongod.service
? mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-01-21 00:33:51 MST; 7s ago
Docs: https://docs.mongodb.org/manual
Main PID: 2906 (mongod)
CGroup: /system.slice/mongod.service
??2906 /usr/bin/mongod --config /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)
首先,如果安装了 MongoDB,请从以前的版本中删除:
sudo apt remove --autoremove mongodb-org
Run Code Online (Sandbox Code Playgroud)
删除任何 mongodb repo 列表文件:
sudo rm /etc/apt/sources.list.d/mongodb*.list
sudo apt update
Run Code Online (Sandbox Code Playgroud)
现在,添加新密钥:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 4B7C549A058F8B6B
Run Code Online (Sandbox Code Playgroud)
添加新的存储库:
echo "deb [arch=amd64] http://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
Run Code Online (Sandbox Code Playgroud)
安装 MongoDB
sudo apt update
sudo apt install mongodb-org
Run Code Online (Sandbox Code Playgroud)
启用并启动mongod服务器服务:
systemctl enable mongod.service
systemctl start mongod.service
Run Code Online (Sandbox Code Playgroud)
检查您的安装:
~$ mongo --version
MongoDB shell version v4.2.2
git version: a0bbbff6ada159e19298d37946ac8dc4b497eadf
OpenSSL version: OpenSSL 1.1.1 11 Sep 2018
allocator: tcmalloc
modules: none
build environment:
distmod: ubuntu1804
distarch: x86_64
target_arch: x86_64
Run Code Online (Sandbox Code Playgroud)
您还可以检查您的服务是否已启动:
~$ systemctl status mongod.service
? mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: e
Active: active (running) since Mon 2019-12-30 08:05:48 MST; 1min 7s ago
Docs: https://docs.mongodb.org/manual
Main PID: 7941 (mongod)
CGroup: /system.slice/mongod.service
??7941 /usr/bin/mongod --config /etc/mongod.conf
Run Code Online (Sandbox Code Playgroud)
首先,如果安装了 MongoDB,请从以前的版本中删除:
sudo apt remove --autoremove mongodb-org
Run Code Online (Sandbox Code Playgroud)
删除任何 mongodb repo 列表文件:
sudo rm /etc/apt/sources.list.d/mongodb*.list
sudo apt update
Run Code Online (Sandbox Code Playgroud)
现在,添加新密钥:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 656408E390CFB1F5
Run Code Online (Sandbox Code Playgroud)
添加新的存储库:
echo "deb [arch=amd64] http://repo.mongodb.org/apt/ubuntu $(lsb_release -sc)/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org.list
Run Code Online (Sandbox Code Playgroud)
安装 MongoDB
sudo apt update
sudo apt install mongodb-org
Run Code Online (Sandbox Code Playgroud)
启用并启动mongod服务器服务:
systemctl enable mongod.service
systemctl start mongod.service
Run Code Online (Sandbox Code Playgroud)
检查您的安装:
~$ mongo --version
MongoDB shell version v4.4.3
Build Info: {
"version": "4.4.3",
"gitVersion": "913d6b62acfbb344dde1b116f4161360acd8fd13",
"openSSLVersion": "OpenSSL 1.1.1f 31 Mar 2020",
"modules": [],
"allocator": "tcmalloc",
"environment": {
"distmod": "ubuntu2004",
"distarch": "x86_64",
"target_arch": "x86_64"
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以检查您的服务是否已启动:
~$ systemctl status mongod.service
? mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset>
Active: active (running) since Sun 2021-01-24 07:52:50 MST; 27s ago
Docs: https://docs.mongodb.org/manual
Main PID: 2353629 (mongod)
Memory: 59.2M
CGroup: /system.slice/mongod.service
??2353629 /usr/bin/mongod --config /etc/mongod.conf
Jan 24 07:52:50 terrance-ubuntu systemd[1]: Started MongoDB Database Server.
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
小智 15
除了@Terrance 的回答之外,您还可以通过以下方式找到合适的 sig 密钥。在这种情况下,示例适用于 mongodb,但可以类似地用于任何其他包。在执行@Terrance 的回答中的行之前:
转到ubuntu 密钥服务器以查找实际密钥
搜索感兴趣的字符串(如果是 mongodb)并提交第一个表单(您不需要第二个表单) - 单击Search!按钮
您可以在那里看到两行带有键的行。关注最实际的日期。第一个字符串是创建日期,而第二个字符串是有效到期日期。
使用第 5 点中提到的行中的 sig - 如果从图片中可以 A15703C6
无论您是否需要像我一样安装软件包或升级,请继续使用 Terrance 的答案