如何使用基于Debian的Linux发行版快速为随机软件包创建本地apt存储库?


20

在某些情况下,需要使用手动安装本地软件包dpkg -i <packagename>。有时,利用该apt软件包的功能可能会更加有用,因此问题是:

您如何使用基于Debian的linux发行版(例如Xubuntu 13.04 / Ubuntu)快速为随机软件包创建本地存储库?


仅供参考。在平常的事情是按照dpkg -i <packagename>apt-get -f install在所需的软件包拉。同样,为Debian创建一个合适的仓库通常是reprepro。
Faheem Mitha

我发现reprepro很有帮助
别再作恶了'

谢谢您的意见。@Faheem米撒:你可以请简要扩大为什么运行apt具有--fix-broken与安装本地包后会被要求dpkg -i?dpkg是否会解决这个问题?我阅读了第一次运行apt可能需要的内容吗?@ FM&Gilles:关于reprepro。如果我可以使它起作用,似乎很有用(不确定dir struct,3个文件的内容或运行时的参数)。将重试并更新或发布完整问题。

1
@illuminÉ:dpkg不能解决依赖关系,但是apt可以。dpkg将警告已损坏的依赖项,但级别较低,因此不会尝试修复它们。在dpkg -i *.deb接着apt-get -f install是标准程序。我想有一个愿望清单错误可以apt自己处理本地软件包的安装,我想甚至有一个补丁,但尚未实现。请参阅apt-get install也可以安装本地软件包文件,该文件最初于1999
。– Faheem Mitha 2013年

@illuminÉ表达对此功能的兴趣不会受到伤害。我认为(礼貌地)表达兴趣的人越多,实施兴趣的可能性就越大。还要注意,如错误报告中所述,gdebi是一种替代方法。我认为,这是尚未实施的部分原因。尽管拥有apt这样的核心功能要比将其作为另一个软件包的一部分更好。
Faheem Mitha

Answers:


29

这与您试图从官方存储库复制完整的程序包树优先调整源优先级的情况有所区别。随机软件包是指虚拟软件包,这些软件包是在本地编译或出于测试目的而逐个复制的软件包。这是一个基于现已过时的文档的简单设置。

首先,创建一个目录来托管软件包:

mkdir <packagedir>

然后将.deb软件包文件移到那里。从我们刚刚创建的目录上方的目录中执行此命令(确保权限允许这样做!):

dpkg-scanpackages packagedir | gzip > packagedir/Packages.gz

现在创建一个扩展名的文件.list/etc/apt/sources.list.d/有内容:

deb [trusted=yes] file:///path_to_dir_above_packagedir packagedir/

并更新apt数据库:

apt-get update

此时,可以使用像任何其他软件包一样安装我们本地存储库中的软件包apt-get install <packagename>。将新软件包添加到本地存储库后,dpkg-scanpackages必须再次发出指定的命令以更新Packages.gz文件,并且apt必须在更新新软件包之前对其进行更新。希望这对测试有用。


6
使用新的apt 1.1,需要[trusted=yes]deb和之间建立file:///URI(请参见sources.list(5)手册页),否则将apt-get update由于缺少签名而失败。
vinc17

2

如果您要创建具有debootstrap之类的工具所需的完整结构的仓库,我发现的最简单方法是:

  1. 创建一个存储库目录。

    # mkdir -p /opt/debian
    
  2. 创建一个conf子目录。

    # mkdir /opt/debian/conf
    
  3. 使用以下内容创建一个/ opt / debian / conf / distributions文件(根据您使用的发行版进行适当调整):

    Label: Local APT repository
    Codename: jessie
    Architectures: amd64
    Components: main
    Description: Local APT repository for debootstrap
    
  4. 使用reprepro导入软件包。

    # reprepro -b /opt/debian includedeb jessie /path/to/package.db
    
  5. 使用shell for循环导入一堆软件包,例如,来自APT缓存的所有内容:

    # cd /var/cache/apt/archives
    # for DEB in *.deb; do reprepro -b /opt/debian includedeb jessie $DEB; done
    

这将创建一个未签名的存档。它可以与带有--no-check-gpg选项的debootstrap一起使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.