如何创建 .deb 文件

如何创建 .deb 文件

如何创建自己的自定义 PPA 以与 Ubuntu 社区共享?我正在尝试创建自己的自定义软件包集,并非常希望与社区共享。

答案1

使用个人软件包存档(电力供应协议),您可以直接向 Ubuntu 用户分发软件和更新。创建您的源包,上传它,Launchpad 将构建二进制文件,然后将它们托管在您自己的 apt 存储库中。

这里有一个详细说明

答案2

如何创建 .deb 文件

这是关于从给定的示例脚本创建基本 .deb 文件的教程。在本教程中,我们首先创建一个示例程序在 bash 中,它只显示“HELLO FROM PROGRAM”。然后我们创建一个控制文件为程序制作 Debian 安装程序。最后将它们打包成一个.deb文件。

脚步:

  1. 在 bash 中创建示例程序

    mkdir "$HOME/create_deb/pgmdir"
    gedit "$HOME/create_deb/pgmdir/zenity_hello.sh"
    

    粘贴以下代码

    #!/bin/bash
    echo 'HELLO FROM PROGRAM' | zenity --text-info 
    
  2. 使程序可执行

    chmod +x "$HOME/create_deb/pgmdir/zenity_hello.sh"
    
  3. 为 debian 软件包创建控制文件

    control创建一个名为inside 文件夹的文件DEBIAN

    mkdir "$HOME"/create_deb/DEBIAN
    gedit "$HOME"/create_deb/DEBIAN/control
    

    并粘贴以下详细信息

    Package: hellodeb
    Version: 0.1
    Architecture: all
    Maintainer: totti
    Installed-Size: 6
    Depends: zenity, bash
    Section: testing
    Priority: optional
    Homepage: http://askubuntu.com
    Description: This is my first debian package.
     Guided by Totti Torvalds.
     In Description new line start with a space.
    

    您可以根据需要编辑内容。阅读有关此文件格式的更多信息这里这里

  4. 创建postinst脚本,安装包后立即执行

    gedit "$HOME"/create_deb/DEBIAN/postinst
    

    然后粘贴

    #!/bin/sh
    set -e
    echo 'Installing program : zenity_hello.sh ......' | zenity --text-info
    

    并使其可执行

    chmod +x "$HOME/create_deb/DEBIAN/postinst"
    
  5. 创建prerm在删除包之前执行的脚本

    #!/bin/sh
    set -e
    echo 'Removing program : zenity_hello.sh ......' | zenity --text-info
    

    并使其可执行

    chmod +x "$HOME/create_deb/DEBIAN/prerm"
    
  6. 制作包结构并复制程序、数据等。
    创建已安装程序及其数据的结构。在此示例中,我们将文件放在/bin

    mkdir -p "$HOME"/create_deb/bin
    cp "$HOME/create_deb/pgmdir/zenity_hello.sh" "$HOME/create_deb/bin/zenity_hello"
    
  7. 构建.deb文件。

    dpkg-deb --build "$HOME"/create_deb .
    

    .自动使用.deb版本、架构等命名文件。或者您的自定义名称

    dpkg-deb --build "$HOME"/create_deb "$HOME"/create_deb/hellodeb.deb
    

    或者如果你使用以下方式构建 .deb 文件

    debuild -k'your GPG key here' -S
    

    然后你可以使用以下命令将其上传到 Ubuntu Launchpad

    dput ppa:<lp-username>/<ppa-name> packet-source.changes
    

    就像描述的一样这里(来源:从脚本或二进制文件创建 .deb 包

  8. 安装新创建的.deb包。你可以用它打开它,software-center但它可能不允许您安装。所以我建议使用gdebi包管理器。

    sudo apt-get install gdebi
    
    gdebi "$HOME"/create_deb/hellodeb.deb
    

    现在您可以安装它了。在安装过程中,您应该会看到gtk 对话

    安装程序:zenity_hello.sh......

  9. 安装后,打开终端并输入zenity_hello。如果程序正确安装且一切正常,您应该会看到gtk 对话

    来自程序的问候

  10. 删除包

    sudo apt-get remove zenity_hello
    

2 分钟内发布您的存储库

由于 OP 想要一种简单的方法来发布他的包裹,所以我给出了一个简单的破解方法。

要求:dropbox(或任何其他服务,例如github) 帐户和一个公用文件夹。

  1. 在您的 Public-Dropbox-Folder 中创建一个文件夹,将 *.deb 文件放入其中:

    mkdir ~/Dropbox/Public/deb-packages  
    

    或者在其他位置创建该文件夹并将符号链接放在公共文件夹中:

    mkdir ~/deb-packages
    cd ~/Dropbox/Public
    ln -s ~/deb-packages/ deb-packages
    
  2. 进入该文件夹并创建一个脚本,该脚本在执行时会创建 Packages.gz,其中包含有关您的 deb 包的所有必要信息。创建:

    gedit import.sh  
    

    把这个放进去:

    #!/bin/bash
    dpkg-scanpackages . /dev/null |gzip > Packages.gz
    

    使其可执行:

    chmod  x import.sh
    
  3. 将一些 *.deb 文件复制到文件夹中。可以是您自己的,也可以是其他存储库中没有的。然后进入文件夹并执行我们放在那里的脚本:

    cd ~/deb-packages/ 
    ./import.sh
    

    这应该会创造所谓的软件包.gz文件,apt 会查找该文件以了解哪些软件包位于该存储库中。


就是这样

现在,等待 Dropbox 同步文件夹并抓取公共 URL 来自Packages.gz。它看起来应该像这样:

http://dl.getdropbox.../Packages.gz

删除该链接的末尾,添加一些文字,然后现在可以使用并填充 sources.list 中的以下行:

deb http://dl.getdropbox.../deb-packages ./

就这样,您就拥有了自己的 deb 存储库。始终在本地同步,但任何人、任何时间、任何地点都可以访问。

笔记: dpkg-scanpackages可从dpkg-dev
参考资料中获取

答案3

您需要一个 Launchpad.net 帐户来创建 PPA。只需在 Launchpad 上单击您的用户(单击左上角的您的姓名)并创建 PPA。您可能必须先签署行为准则并在您的帐户中注册 GPG 密钥。

答案4

PPA 只是存储库。URLppa://只是简单的 URL,脚本使用 Launchpad 并遵守其要求apt-add-repository将其转换为deb文件中的一行/etc/apt/sources.list.d/。(我读过源代码。)

TL:DR:见底部。


这只是为了获得权力和控制我们这些所谓“愚蠢”、“无助”的用户,基于一种以“简单”为卖点的有害文化,最终源于苹果对待用户的方式,因为史蒂夫·乔布斯是一个病态的控制狂。(来源:直接在他手下工作的人写的书。)
但这是你的电脑,所以他们在这里没有权力。:)

如果你看一下这些deb行,你会发现它们包含真实的存储库 URL。例如

deb [arch=amd64 签名=/etc/apt/keyrings/maarten-fonville-android-studio-jammy.gpg]https://ppa.launchpadcontent.net/maarten-fonville/android-studio/ubuntu果酱主

如果你打开该 URL,你会看到一个特定的目录结构。这就是“魔法”。
当然,最简单的方法是

  1. 在您选择的目录中创建本地存储库(家庭服务器、本地 PC、您的主页等),然后

  2. 如果是本地的,请运行一个非常简单的 httpd 服务器(“web 服务器”)来为目标受众(例如您、您的家人、朋友)提供该目录。

  3. 然后任何想要使用你的存储库的人都可以将你的存储库的密钥(作为文件)放入他的存储库中/etc/apt/keyrings/,然后

  4. 向他的文件中添加一个文本文件/etc/apt/sources.list.d,其中包含deb与上述相同的行,但当然包含您的密钥和您的 url,以及正确的架构和版本代码名称(例如 jammy)。

从长远来看,可能更容易的是一个非常简单的(单行?)脚本,它接受任何正常的存储库 URL,并自动创建这些文件,模仿 apt-add-repository,而无需通过 Launchpad 看门人。

这个答案充当了(之前缺失的)链接,“ppas”只是具有一点“安全性”的存储库(主要来自您,而不是像人们想象的那样为您),所以......


TL;DR:正确的问题是:如何创建(和添加)存储库?

Debian 维护着有关如何执行此操作的完整指南:
https://wiki.debian.org/DebianRepository/#Set_up_and_maintain_a_repository
例如使用reprepro

所以你不需要启动板帐户,不需要服从任何主人,也不需要签署行为准则审查、仇恨和反向歧视。

当然,如果你想与那些更喜欢服从和遵循 Canonical/Ubuntu/Launchpad 的实体分享它,并且拒绝信任任何其他东西,因此除非他们的主人同意它对他们是安全的,否则他们不会使用任何东西,那么这相当于与他们的主人打交道。他们目前要求完全服从。(就像签署 CoC 一样。)……我不会那么卑鄙,所以我不能告诉你怎么做。

相关内容