如何在服务器上添加PPA?


在最新版本的Synaptic中,您可以直接在软件源中添加PPA,而不是使用deb行。 - Dirk Hartzer Waldeck
1
  • @Doug的答案对于Ubuntu 16.04是正确的。
  • @fossfreedom的答案对于Ubuntu 14.04是正确的。在Ubuntu 16.04上,确实是software-properties-common这个包,如下所示: $ type add-apt-repository add-apt-repository is hashed (/usr/bin/add-apt-repository) $ apt-file search /usr/bin/add-apt-repository software-properties-common: /usr/bin/add-apt-repository 在之前的版本中,它确实可以在python-software-properties中找到。

更新:我在这里进行评论,因为我无法将其添加为评论!
- azbarcea
apt-add-repository可以立即使用。 - Atif
6个回答

你只需简单地添加add-apt-repository命令。在13.10及更高版本中,你还需要运行以下命令:
sudo apt-get install software-properties-common

附注:在11.04版本中,他们添加了一个符号链接到 add-apt-repository,因此可以作为 apt-add-repository 运行,这对我来说完全更有意义。其他 apt 命令都是以 "apt" 开头。

注意:它是 python-software-properties 软件包的一部分(在13.10之前):

sudo apt-get install python-software-properties

看到这实际上是apt的一个功能,对我来说是合乎逻辑的。"add repository with apt" > "apt-add-repository" - MrChrisDruif
5如果已经安装了"python-software-properties",但在尝试使用"apt-add-repository"时仍然出现"command not found"的错误,该怎么办? - monkut
你也试过"add-apt-respository"吗?在11.04之前的版本中,你必须将"add"放在"apt"之前。 - Mark Russell
当'apt-get install python-software-properties'失败并且依赖于无法安装的python-curl时,你应该怎么办?在我的12.04系统上,它会抱怨说"无法修复问题 - 你有损坏的软件包"。 - Hoobajoob
software-properties-common是一组定义好的工具还是一系列实用程序? - Alex
提问者的问题是:“如何在服务器上添加个人软件包存档(PPA),而不使用这个命令?”我想知道他为什么选择了这个答案。 - David your friend

让我教你如何钓鱼。 apt-file 可以帮助你找出提供给定文件的软件包。 dpkg -S 做同样的事情,但只针对已安装的软件包。无论软件包是否已安装,apt-file 都可以工作。

所以,首先你需要安装 apt-file: sudo apt-get install apt-file。然后,你需要更新它的信息,就像你使用 apt-get 更新一样: sudo apt-file update。现在它已经准备好使用了:

$ apt-file search add-apt-repository
python-software-properties: /usr/bin/add-apt-repository
python-software-properties: /usr/share/man/man1/add-apt-repository.1.gz

所以,在这种情况下,下一步要做的就是安装python-software-properties。

4卓越的建议——也许不应该埋在这个问题里。用一个单独的问题来突显这一点可能是个好主意。 - fossfreedom
@fossfreedom 这是你所说的吗?- http://askubuntu.com/questions/13792/finding-out-what-package-a-command-came-from - jrg
9由于这个提示,我发现在12.10服务器中,apt-add-repository位于software-properties-common中(不再位于python-software-properties)。 - Kat Amsterdam
1为什么我总是忘记这个非常有用的命令存在!回答太棒了。 - lleaff

这不一定是最好的答案,但这样做可以起作用:

旧式的方法(在Ubuntu 9.10之前,他们称之为)编辑/etc/apt/sources.list仍然有效。您还需要手动在系统上获取GPG密钥。

在旧版(9.10之前)的Ubuntu系统上:

步骤1:访问Launchpad上PPA的概述页面。查找标题为“将此PPA添加到您的系统”并单击“关于此PPA的技术细节”链接。

步骤2:使用“显示sources.list条目”下拉框选择您正在使用的Ubuntu版本。

步骤3:您会看到直接下方的文本框中有类似以下内容:

deb http://ppa.launchpad.net/gwibber-daily/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/gwibber-daily/ppa/ubuntu jaunty main

复制这些行。
第四步:打开终端并输入:
sudo gedit /etc/apt/sources.list

这将打开一个包含您系统当前正在使用的存档列表的文本编辑器。滚动到文件底部,并粘贴您在上一步中复制的行。
保存文件并退出文本编辑器。
第5步:回到PPA的概览页面,找到签名密钥标题。您会看到类似以下内容:
1024R/72D340A3(这是什么?)
复制斜杠后面的部分,但不包括帮助链接;例如,只复制72D340A3。
第6步:现在您需要将该密钥添加到您的系统中,以便Ubuntu可以验证来自PPA的软件包。在终端中输入以下命令:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 72D340A3

(将72D340A3替换为你在步骤5中复制的内容。)
(现在)系统将下载PPA的密钥并将其添加到您的系统中。
第7步:现在,作为一次性操作,您应该告诉您的系统从它所知道的每个存档中下载最新的软件列表,包括您刚刚添加的PPA。
sudo apt-get update

现在您已经准备好从PPA安装软件了!

1如果没有其他更快、更用户友好的答案,那么我会将这个作为正确答案。它以一种“特别”的方式解决了问题 ;) - Luis Alvarado
1虽然使用add-apt-repository更简单,但在服务器安装中,我喜欢保持简洁,所以手动操作也无妨。这正是我寻找的答案。 - Ashley Strout
1这种方法比安装apt-add-repository和随之而来的所有垃圾要好得多。 - Dmitry Minkovsky
1这对我来说非常有用,用于使用shell provisioner进行Vagrant设置。谢谢Broam! - yanhan
4软件属性常用包非常庞大,似乎对于仅仅追加一些文本到文件并运行几个命令来说太过浪费空间了,尤其在使用Docker时。这个答案真的非常有帮助! - rsmoorthy
1当我遇到代理问题时,这真的非常有用。 - Alex Chamberlain
3这应该是被接受的答案,因为楼主问了如何绕过不使用add-apt-repository... 非常感谢这个! - djBo

add-apt-repository是由软件包python-software-properties提供的。

因此,如果您要安装,请使用以下命令:

sudo apt-get install python-software-properties

谢谢!我必须说,我觉得这个名字相当不合逻辑。另外,你有没有想过为什么它没有被标准安装? - Peter Smit
2同意不合逻辑——至于为什么,你可以推测服务器通常在运行软件方面是“固定”的。因此,你不需要频繁地添加和删除存储库的“奢侈”……推测结束! - fossfreedom
为什么它是不合逻辑的?它是一组用于处理软件属性的 Python 工具。add-apt-repository 是其中之一。 - Jo-Erlend Schinstad
我已经安装了 python-software-properties,但是我一直收到这个错误。我尝试了 apt-addadd-apt 的表示方法,但都不起作用...该怎么办? - Mohamad
@Mohamad - 我建议你提出另一个问题 - 链接回这个问题,并尽可能详细地描述你所看到的错误。 - fossfreedom
1@Mohamad,这是错误的,至少对于Ubuntu 14.04来说。你只需要安装software-properties-common就可以了。 - Theodore R. Smith

运行这个命令:
sudo apt-get install software-properties-common

然后你可以运行以下命令来添加你的代码库:
sudo add-apt-repository [REPOSITORY]

记得将 [REPOSITORY] 替换为您想添加的仓库名称。

这个完美地运作了。 - Aaron

我几周前和一位同事就这个问题进行了辩论。请给出。
apt-add-repository

尝试一下。不需要任何其他的软件包。请注意,apt出现在add之前。顺序很重要,因为需要安装add-apt-repository。
对于那些持反对意见的人。尝试使用这个Vagrant文件。请注意,我从一个干净的Trusty映像开始,并直接添加ppa。
# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|

  config.vm.box = "ubuntu/trusty64"
  config.ssh.username = "vagrant"

  config.vm.provision "shell", inline: <<-SHELL
    sudo apt-add-repository ppa:george-edison55/cmake-3.x -y
    sudo apt update
    sudo apt upgrade
    sudo apt install -y virtualbox-guest-dkms
    sudo apt-get install -y curl g++ libpng12-dev  \
      libtiff5-dev libssl-dev libxml2-dev libxslt1-dev libpq-dev postgresql-client \
      postgresql pgadmin3 liblcms2-dev libcrypto++9 libcrypto++-dev \
      graphviz-dev libboost1.55-dev libboost-filesystem1.55-dev libboost-system1.55-dev \
      libexpat1-dev python-software-properties qtbase5-dev qttools5-dev  \
      libqt5svg5-dev qtscript5-dev qtdeclarative5-dev qtmultimedia5-dev \
      libsqlite3-dev qt5-default cmake

  SHELL
end

更新:只是为了澄清,看起来Ubuntu Precise及更高版本的云镜像已经安装了正确的软件包。所以无论我们是在谈论cloud-init脚本还是vagrant文件,apt-add-repository都已经存在。由于add-apt-repository也在同一个软件包中,应该也可以正常工作。

顺序无关紧要。请参阅http://askubuntu.com/questions/83489/what-is-the-difference-between-add-apt-repository-apt-add-repository。 - edwinksl
1请解释一下为什么这个 Vagrant 文件能够工作。注意,我并不是在争论它们做了不同的事情。它们实际上做的是完全相同的事情。只是一个需要 add-apt 包,而另一个是从头开始工作。 - Atif
@atifm: 请参考这个答案: $ apt-file search add-apt-repository software-properties-common: /usr/bin/add-apt-repository software-properties-common: /usr/share/man/man1/add-apt-repository.1.gz $ apt-file search apt-add-repository software-properties-common: /usr/bin/apt-add-repository software-properties-common: /usr/share/man/man1/apt-add-repository.1.gz - tricasse
感谢提供apt-file的链接,这在其他地方会很有用。没错,它们确实在同一个软件包中,通过apt-file验证过了。不过,看起来Ubuntu云镜像(用于vagrant)的precise和trusty版本已经预装了该软件包。不确定以前是否一直如此,但目前看来是这样的情况。 - Atif