这里有一个详细解释。
在bash中创建一个示例程序
mkdir "$HOME/create_deb/pgmdir"
gedit "$HOME/create_deb/pgmdir/zenity_hello.sh"
将以下代码粘贴到其中
#!/bin/bash
echo 'HELLO FROM PROGRAM' | zenity --text-info
使程序可执行
chmod +x "$HOME/create_deb/pgmdir/zenity_hello.sh"
为Debian软件包创建控制文件
在文件夹DEBIAN
内创建名为control
的文件
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.
创建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"
创建prerm
脚本,在软件包删除之前执行
#!/bin/sh
set -e
echo 'Removing program : zenity_hello.sh ......' | zenity --text-info
并使其可执行
chmod +x "$HOME/create_deb/DEBIAN/prerm"
创建软件包结构并复制程序、数据等。
创建已安装程序及其数据的结构。在此示例中,我们将文件放在/bin
中。
mkdir -p "$HOME"/create_deb/bin
cp "$HOME/create_deb/pgmdir/zenity_hello.sh" "$HOME/create_deb/bin/zenity_hello"
构建.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
软件包。
您可以使用software-center
打开它,但可能无法让您安装。因此,我建议使用gdebi
软
由于OP希望以简单的方式发布他的软件包,我提供了一个简单的技巧。
要求:拥有Dropbox(或任何其他服务,例如GitHub)帐户,并具有公共文件夹。
在你的Public-Dropbox-Folder中创建一个文件夹,将你的*.deb文件放入其中:
mkdir ~/Dropbox/Public/deb-packages
或者在其他地方创建该文件夹,并在你的Public文件夹中创建一个符号链接:
mkdir ~/deb-packages
cd ~/Dropbox/Public
ln -s ~/deb-packages/ deb-packages
进入该文件夹并创建一个脚本,在执行时会创建Packages.gz文件,其中包含有关你的deb软件包的所有必要信息。
创建:
gedit import.sh
将以下内容添加到脚本中:
#!/bin/bash
dpkg-scanpackages . /dev/null |gzip > Packages.gz
使其可执行:
chmod x import.sh
将一些*.deb文件复制到文件夹中。可以是你自己的文件,也可以是其他存储库中没有的文件。然后进入该文件夹并执行我们放置在那里的脚本:
cd ~/deb-packages/
./import.sh
这样应该会创建所谓的Packages.gz文件,apt会查找该文件以了解此存储库中位于哪些软件包。
现在,等待Dropbox同步文件夹并获取Packages.gz
的公共URL。它应该看起来像这样:
http://dl.getdropbox.../Packages.gz
deb http://dl.getdropbox.../deb-packages ./
releases/
的文件夹的原始目录,链接是https://github.com/rubo77/mouse-speed/blob/master/release/mouse-speed.list。 - rubo77debuild -us -uc -k'你的GPG密钥'
来构建.deb文件,那么你可以使用dput ppa:<lp-用户名>/<ppa-名称> 包源.changes
将其上传到Launchpad,就像这里描述的一样(来源:从脚本或二进制文件创建.deb包)。 - rubo77debuild -k'在此处输入你的GPG密钥' -S
,因为Launchpad将会创建deb文件(如果没有被拒绝)- 那么-us -uc
是用来做什么的呢? - rubo77debuild -k'在此输入你的GPG密钥' -S
抱怨 debian/rules
- Anwar/etc/apt/sources.list
中添加了deb https://github.com/rubo77/mouse-speed/raw/master/release ./
,然后运行命令$ sudo apt-get update
,但是我遇到了以下错误:W: 无法下载https://github.com/rubo77/mouse-speed/raw/master/release/./Packages HttpError404 - Ren/etc/apt/sources.list.d/mouse-speed.list
中:deb https://github.com/rubo77/mouse-speed/raw/master/release /
,然后运行sudo apt-get update
。 - rubo77TL;DR: 正确的问题应该是:如何创建(和添加)一个仓库?
Debian提供了一个完整的指南,教你如何做到这一点:
https://wiki.debian.org/DebianRepository/#Set_up_and_maintain_a_repository
例如使用reprepro
。
所以你不需要一个launchpad账户,也不需要服从任何主人,也不需要签署行为准则,审查、仇恨和反向歧视。
当然,如果你想与那些更喜欢服从和追随Canonical/Ubuntu/Launchpad的实体共享,他们拒绝相信其他任何东西,除非他们的主人同意认为它对他们安全,那么这就等同于直接与他们的主人打交道。而目前来看,他们要求完全服从。(比如签署那个CoC)……我不会屈服到那么低的程度,所以我不能告诉你如何做到那一点。