写在前面
ubuntu安装docker请参考官网教程:
Ubuntu Docker安装
由于网络上的转载信息更新不及时,可能会在安装过程中出现问题,所以要养成从官网教程学习安装软件的好习惯~
原因
在新手学习docker使用的第一步,往往会在网上搜索ubuntu docker安装方式,通常你会看到这样一段命令(而apt-transport-https是一个并不需要的包):
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
在运行后你可能会看到:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
distro-info python3-debconf
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
libapt-pkg4.12
The following packages will be REMOVED:
apt apt-utils ubuntu-advantage-tools ubuntu-desktop ubuntu-minimal
ubuntu-release-upgrader-gtk update-manager update-notifier
update-notifier-common
The following NEW packages will be installed:
apt-transport-https libapt-pkg4.12
WARNING: The following essential packages will be removed.
This should NOT be done unless you know exactly what you are doing!
apt
0 upgraded, 2 newly installed, 9 to remove and 0 not upgraded.
Need to get 672 kB of archives.
After this operation, 7,293 kB disk space will be freed.
You are about to do something potentially harmful.
To continue type in the phrase 'Yes, do as I say!'
如果你输入了Yes, do as I say!,很不幸,你的apt及其相关依赖将会被卸载掉。
在此之后你会发现:
sudo: apt: command not found
补救措施
首先不要慌,这并非一个不可解决的问题,我们可以使用deb包重新安装apt
deb包下载地址:ubuntu apt相关deb包下载地址
除此地址之外你可能还知道一些国内的(例如清华、中科大)镜像地址,不再此赘述。
- apt-transport-https卸载
首先明确apt安装的包使用dpkg也可以卸载:
sudo dpkg -r apt-transport-https
若不卸载在后续安装过程中可能会出现冲突报错:
apt breaks apt-transport-https (<< 1.5~alpha4~)
apt-transport-https (version 1.2.35) is present and installed.
dpkg: error processing archive apt_1.6.14_amd64.deb (--install):
installing apt would break apt-transport-https, and
deconfiguration is not permitted (--auto-deconfigure might help)
Errors were encountered while processing:
apt_1.6.14_amd64.deb
- deb包下载:
一般情况下,如果你是Ubuntu18.04的话,只需按照如下命令下载,其余版本系统还请各位读者自己摸索所需的deb包版本,切勿闷头下载
wget http://security.ubuntu.com/ubuntu/pool/main/a/apt/apt_1.6.14_amd64.deb
wget http://security.ubuntu.com/ubuntu/pool/main/a/apt/libapt-pkg5.0_1.6.14_amd64.deb
wget http://security.ubuntu.com/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2018.09.18.1~18.04.2_all.deb
- deb包安装
dpkg -i ubuntu-keyring_2018.09.18.1~18.04.2_all.deb
dpkg -i libapt-pkg5.0_1.6.14_amd64.deb
dpkg -i apt_1.6.14_amd64.deb
这样不出意外话,你的apt就会恢复如初啦~
你可以使用apt -v看到自己的apt版本号apt 1.6.14 (amd64)
- 系统原apt版本并非1.6.14
若原apt版本并非1.6.14,在安装过程中你可能会发现提示libapt-pkg和ubuntu-keyring有升级或降级的情况,那么你只需要重新安装升级或降级前的原版本包即可
你也可以通过sudo dpkg -l package_name查看apt相关包的版本号以此推断自己所需的apt版本,否则apt与其依赖版本冲突的话将依然无法使用
一点点回顾
-
dpkg和apt的区别与联系:
dpkg是“Debian Packager ”的简写。为 “Debian” 专门开发的套件管理系统,方便软件的安装、更新及移除。所有源自“Debian”的“Linux ”发行版都使用 “dpkg”,例如 “Ubuntu”、“Knoppix ”等
它用于本地下载好的deb包的安装 (sudo dpkg -i package_name);
而apt则是dpkg的上层应用,你可以理解为apt是在dpkg的基础上实现的,它会从网上的软件仓库中去搜索安装或卸载软件,而软件仓库网址则保存在你的/etc/apt/sources.list中,所以所谓换源的操作即是使用国内的软件仓库。 -
apt和apt-get:
在Ubuntu14时,发布了第一个稳定的apt版本,但直到Ubuntu16它才被注意到,apt的出现是为了解决命令过于分散的问题,例如你可能会经常看到apt-get apt-cache apt-config等,而apt出现后,大多数情况你可以使用它来替换这些命令,但是在少数情况,这些命令依然有更细化的功能,它们并不能被完全弃用,但总归大多数情况下apt已经可以满足需求了,除此之外,apt还有一些自己的新命令例如apt list。
以上内容仅为个人理解,如有错误还请各位读者指正