如何为C++程序创建PPA?

MyAgenda 1.0 screenshot

如果我有一个使用NetBean创建的C++/gtkmm项目,如何从中制作一个PPA软件包?
我已经创建了目标文件结构(*.desktop,iconfile,ui glade文件)。
二进制文件放在/opt/extras.ubuntu.com/myagenda/bin/myagenda
还有一个glade文件夹,必须放在/opt/extras.ubuntu.com/myagenda/bin/myagenda/ui中。
桌面文件放在/usr/share/applications/myagenda.desktop中。 图标放在/usr/share/icons/hicolor/scalable/apps/myagenda.svg中。
正如您所看到的,只有少量文件。
现在,如何管理所有这些内容,以创建一个PPA软件包,该软件包“知道”在哪里以及如何将这些文件放在它们的目标位置?
├── opt
│   └── extras.ubuntu.com
│       └── myagenda
│           ├── bin
│           │   └── myagenda
│           └── ui
│               ├── item_btn_delete.png
│               ├── item_btn_edit.png
│               ├── myagenda.png
│               ├── myagenda.svg
│               ├── reminder.png
│               └── ui.glade
└── usr
    └── share
        ├── applications
        │   └── myagenda.desktop
        └── icons
            └── hicolor
                └── scalable
                    └── apps
                        └── myagenda.svg

更新:

在`debian`目录中创建了`install`文件,其中包含以下目标:
``` data/myagenda /opt/extras.ubuntu/com/myagenda/bin data/ui/* /opt/extras.ubuntu/com/myagenda/ui data/myagenda.desktop /usr/share/applications data/myagenda.svg /usr/share/icons/hicolor/scalable/apps ```
在使用dpkg-buildpackage命令构建后,它会生成amd64架构的软件包。现在,尝试将其更改为i386架构。

我已经做到生成一个.deb文件了。但是当要为它创建一个ppa时,我完全迷失了方向。 - scribu
在debian文件夹内创建一个名为install的文件。设置目标路径如下: - Khurshid Alam
1glade/* /opt/extras.ubuntu.com/myagenda/bin/myagenda/ui. icons/* /usr/share/icons/hicolor/scalable/apps. bin/myagenda /opt/extras.ubuntu.com/myagenda/bin/myagenda. Save the file.Here I am assuming "bin/agenda" is your binary folder. "icons" is your icon folder & glade files located under "glade" folder.Change the folder path accordingly.Then run debuild. It will create a deb file. Install the deb file to check everything goes to proper location. - Khurshid Alam
1架构是由位于debian文件夹内的控制文件控制的。只需在软件包名称下更改为Architecture: all。请参考此图片 - Khurshid Alam
谢谢,但看起来,在控制文件中设置架构对于64位操作系统没有任何作用。还在寻找解决方案。但至少,*.deb文件已经创建、安装并且运行正常。 - piotr
尝试 建筑:无限制 - Khurshid Alam
如果你想在本地构建它,按照答案中的描述将源代码包上传到Launchpad,并由Launchpad为你构建源代码包。如果有任何错误,请检查构建日志。 - Khurshid Alam
你可以在https://help.launchpad.net/Packaging/PPA找到官方文档。 - Marcello Nuccio
1个回答

创建PPA是一个非常简单的过程,同时也取决于软件包的复杂性(例如单个二进制文件、多个二进制文件等),有点复杂。但对于像您的MyAgenda这样简单的应用程序来说,创建PPA非常简单。
首先安装必要的软件包。
sudo apt-get install build-essential devscripts ubuntu-dev-tools debhelper dh-make diff patch cdbs quilt gnupg fakeroot lintian pbuilder piuparts。其中大部分可能已经默认安装了。
现在设置您的gpg密钥和ssh密钥。请按照这里这里的说明进行操作。

步骤1:源代码包的布局

现在前往您的应用程序源文件夹。这是您的基本源代码包布局:

 MyAgenda-1.0/
    -- data/
          -- myagenda
          -- myagenda.desktop
          -- myagenda.svg
          --ui
             -- myagenda.glade
             -- otherfiles
    -- debian/
        -- changelog
        -- copyright
        -- compat
        -- rules
        -- control
        -- install

步骤2:了解你的GPG密钥ID和格式

首先运行:

gpg --list-keys。它会给你类似于以下的输出:

   pub: YOURGPG-KEY
   uid: YOURUSERNAME <YOURMAIL-ID>   #note your username & email.
   sub: --------

步骤3:创建Debian文件夹

要创建Debian文件夹及其下的所有其他必需文件,请运行以下命令(使用上述相同的用户名和电子邮件ID):

DEBFULLNAME="YOURUSERNAME" dh_make -n -s -e YOUREMAIL-ID。这将帮助使用GPG密钥签署软件包。

但是,这样不会在Debian文件夹下创建"install"文件。请手动创建该文件,并使用以下数据保存:

        data/myagenda /opt/extras.ubuntu/com/myagenda/bin
        data/ui/* /opt/extras.ubuntu/com/myagenda/ui
        data/myagenda.desktop /usr/share/applications
        data/myagenda.svg /usr/share/icons/hicolor/scalable/apps

步骤4:更新变更日志

要更新变更日志,请运行以下命令:

dch -i

这里是一个样本变更日志:
package (version) distribution; urgency=urgency

 * change details
   more change details
 * even more change details

 -- maintainer name <email address>[two spaces]  Sun, 8 July 2012 18:14:08 +0530

确保上述格式得到保留。编辑完成后按下CTRL+O进行写出操作。删除.dch部分并覆盖更改日志文件。按下CTRL+X退出。
您可能想要在debian文件夹中删除额外的.ex文件。进入debian文件夹并删除.ex和.EX文件。
cd debian
rm *.ex *.EX

步骤5:创建DEB软件包

然后运行以下命令来创建DEB软件包:

debuild --no-tgz-check #可选项。它将不会检查源代码tarball。


步骤6:上传至PPA

要将源代码包上传至PPA,您需要运行以下命令:

debuild -S

-S标志告诉debuild使用另一个脚本dpkg-buildpackage来构建源代码包,同时使用fakeroot来授予我们虚拟的root权限。它将会取得.orig.tar.gz文件并生成一个.diff.gz文件(原始tarball与我们创建的debian/目录及其内容之间的差异),以及一个.dsc文件,其中包含源代码包的描述和md5sums。.dsc和*_source.changes(用于上传源代码包)文件将使用您的GPG密钥进行签名。
debuild -S将在您的源代码目录之外创建一个source.changes文件。前往launchpad并创建一个PPA。现在将source.changes文件上传到该PPA中(根据需要更改文件名)。
dput ppa:YOUR-LAUNCHPAD-USERNAME/myagenda myagenda-1.0-ubuntu1.changes 

完成!
注意事项:
如果您想为多个Ubuntu版本上传软件包,请从这里获取帮助。
来源:完整的软件包指南维基

谢谢。Launchpad给我发了一封邮件,内容是“已接受”。据我所见,我必须等待构建完成。无论如何,如果它能正常工作,ppa的链接是:https://launchpad.net/~piotr-zagawa/+archive/ma - piotr
啊...启动板构建系统报告一个愚蠢的错误"pkg-config: not found"。真是一台愚蠢的机器。如果我能在本地构建,为什么它不尝试升级配置呢.. - piotr
好的,我发现控制文件中的Build-Depends部分需要更多的信息。输入了所有必需的工具/库:pkg-config(>= 0.26),libgtkmm-3.0-dev(>= 3.0),libunity-dev(>= 5.0),libnotify-dev(> 0.7),现在可以正确构建了。我不知道如何更新失败的上传,所以在测试中创建了许多ppa,但实际上的是ppa:piotr-zagawa/ma2。使用sudo add-apt-repository ppa:piotr-zagawa/ma2进行安装。谢谢! - piotr
很高兴知道它终于可以工作了!另外,你可以将你的代码托管在bazaar上。从那里,你可以创建一个配方,每天或按需生成测试包(和deb包)。它只会在版本号后面添加~recipe。非常适合各种类型的测试。这样可以避免创建多个PPA。 - Khurshid Alam
1要从PPA中删除软件包,请转到“查看软件包详细信息”并点击删除软件包(对于新上传的软件包需要一些时间)。选择全部内容并删除。然后您可以在同一个PPA中上传新的软件包。 - Khurshid Alam