需要帮助 "sudo: add-apt-repository: command not found"

有很多关于"add-apt-repository"的帖子,但我觉得我已经看过并尝试了大部分的解决方案。

我正在尝试在Ubuntu Server 12.04上安装Java。一些搜索结果指向了下面最常见的解决方案:

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

然而,当我运行

sudo add-apt-repository ppa:webupd8team/java

我遇到了以下错误:
sudo: add-apt-repository: command not found

所以,经过更多的搜索和故障排除,我得出了以下结论:
sudo apt-get install software-properties-common

这给了我(现在至少 - 第一次,它实际上安装了软件包):
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

其他建议指出可能需要以下内容:
sudo apt-get install python-software-properties

出现以下错误:
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 python-software-properties : Depends: python-pycurl but it is not installable
E: Unable to correct problems, you have held broken packages.

所以我尝试了:
sudo apt-get install python-pycur

而且还有这个:
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'python-pycurl' has no installation candidate

有点困住了。有什么想法下一步去哪里吗?
根据Thomas W.的建议,这是/etc/apt/sources.list的内容:
# deb cdrom:[Ubuntu-Server 12.04.5 LTS _Precise Pangolin_ - Release i386 (20140806.1)]/ precise main restricted

#deb cdrom:[Ubuntu-Server 12.04.5 LTS _Precise Pangolin_ - Release i386 (20140806.1)]/ precise main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://us.archive.ubuntu.com/ubuntu/ precise main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ precise main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://us.archive.ubuntu.com/ubuntu/ precise-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ precise-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ precise universe
deb-src http://us.archive.ubuntu.com/ubuntu/ precise universe
deb http://us.archive.ubuntu.com/ubuntu/ precise-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ precise-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu 
## team, and may not be under a free licence. Please satisfy yourself as to 
## your rights to use the software. Also, please note that software in 
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://us.archive.ubuntu.com/ubuntu/ precise multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ precise multiverse
deb http://us.archive.ubuntu.com/ubuntu/ precise-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ precise-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse

deb http://security.ubuntu.com/ubuntu precise-security main restricted
deb-src http://security.ubuntu.com/ubuntu precise-security main restricted

此外,sudo apt-get update 的结果可能也会有所帮助。
W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise/main/source/Sources  Hash Sum mismatch

W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise/restricted/source/Sources  Hash Sum mismatch

W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise/universe/source/Sources  Hash Sum mismatch

W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise/multiverse/source/Sources  Hash Sum mismatch

W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise/main/binary-i386/Packages  Hash Sum mismatch

W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise/restricted/binary-i386/Packages  Hash Sum mismatch

W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise/universe/binary-i386/Packages  Hash Sum mismatch

W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise/multiverse/binary-i386/Packages  Hash Sum mismatch

E: Some index files failed to download. They have been ignored, or old ones used instead.

1看起来你的软件包有问题,你能编辑你的问题并包含/etc/apt/sources.list文件的内容吗? - Thomas Ward
好的,我也遇到过损坏的软件包问题。不记得当时我在进行的哪个步骤了,可能是安装CUPS,但我按照apt-get autoclean/update/upgrade等命令进行了操作,并且成功解决了当时的问题。也许我们会发现一些新的东西!总是很有趣的。 - Puckster
请等一个小时后再尝试 - 哈希校验和不匹配听起来像服务器正在同步软件包的过程中,很快就会解决的。 - Thomas Ward
每次我都得到类似的结果,所以我不认为是那个问题。不过,我会再试一次,大约一个小时后,这样我们就能确定了。谢谢你的帮助。 - Puckster
好的,在大约一个小时后,我再次运行了apt-get update命令,结果与之前发布的完全相同 - 仍然是相同的哈希校验不匹配。 - Puckster
当你运行它时,你是否碰巧看到它试图连接的IP地址是哪个?你也可以运行nslookup us.archive.ubuntu.com来验证你的系统正在尝试使用哪些服务器。 - Thomas Ward
在输出中我没有看到任何 IP 地址,但这是 nslookup us.archive.ubuntu.com 的结果:非权威回答: 名称:us.archive.ubuntu.com 地址:91.189.91.13 名称:us.archive.ubuntu.com 地址:91.189.91.24 名称:us.archive.ubuntu.com 地址:91.189.91.14 名称:us.archive.ubuntu.com 地址:91.189.91.23 名称:us.archive.ubuntu.com 地址:91.189.91.15 - Puckster
你使用的是32位还是64位系统?我只是想排除所有可能的原因,因为我无法复制这个问题,即使我使用我的古老的12.04服务器(哈哈),我一直想升级。 - Thomas Ward
32位。只有一个新手才会提出一个无法复制的问题...;-) - Puckster
就你的复制尝试来说,这是一台800 MHz的Athlon运行着12.04服务器系统的古老服务器,恰好是合适的工具。 - Puckster
不需要python-software-properties,可以尝试使用内置的apt-add-repository代替add-apt-repository。在Precise、Trusy和Xenial版本中都可以使用,无需安装额外的软件包。 - Atif
你有机会在一个全新的Ubuntu Precise镜像上尝试apt-add-repository了吗? - Atif
3个回答

好的。感谢Thomas W.的评论,帮助我找到了解决方案。
问题似乎可以追溯到损坏的软件包。我之前曾经搜索过如何修复损坏的软件包,但是没有一个解决方案能够完全解决问题。然后我搜索了我在apt-get update结束时遇到的Hash Sum mismatch错误,并找到了这个解决方案,解决了问题。
为了完整起见,将答案复制在这里:
删除/var/lib/apt/lists目录中的内容:
sudo rm -fR /var/lib/apt/lists/*
然后运行:
sudo apt-get update 显然,对于apt-get的clean和autoclean标志并没有完全清除apt/lists目录中的问题文件。
请各位专家指正或详细说明。

我找到了这个,对我有效

sudo apt-get install software-properties-common

使用Ubuntu 16.04 LTS服务器


不需要 python-software-properties 包来添加仓库,可以尝试使用内置的 apt-add-repository 命令。适用于 Precise、Trusty 和 Xenial 版本,无需额外设置即可使用。详细信息请参考manpage

注意这两个命令看起来一样,但要关注 apt 的顺序。内置命令以 apt 开头,而另一个命令以 add 开头。


1дҪҶжӯЈжҳҜз”ұдәҺеҶ…зҪ®зҡ„add-apt-repositoryеңЁOPдҪҝз”ЁUbuntu Serverж—¶ж— жі•е·ҘдҪңгҖӮиҜ·еҸӮйҳ…http://askubuntu.com/questions/38021/how-to-add-a-ppa-on-a-serverгҖӮ - edwinksl
交换前两个单词。apt-add-repository是内置的,add-apt-repository在另一个软件包中。我知道它们看起来一样,我就在前几天的vagrant文件中遇到了这个问题。 - Atif
1但根据http://askubuntu.com/a/83490/15003,它们是同一件事。 - edwinksl
有趣的观点。然而,一个在纯净的精确映像中工作,而另一个则不是。也许这个软件包添加了一个符号链接?如果你愿意,我可以发布vagrant文件给你看看?它以ubuntu/precise64开头,并且具有apt-add-repository,但没有添加任何内容。在使用add-apt之前,似乎需要先安装python-software-properties。 - Atif