0) Желательно все упаковать в
virtuelenv, если используете pip. Или использовать стандартные пакеты системы.
1) Создаете каталог для своего пакета, например
myservice-0.001
2) Кидаете все свои исходники в этот каталог, пути ставите, как они у вас будут в целевой системе
Например:
etc/systemd/system/myservice.service
opt/myservice/...
opt/.myservice-venv/...
usr/bin/myservice
И т.д.
3) Создаете там же каталог DEBIAN, в него кладете файл
control -
https://www.debian.org/doc/debian-policy/ch-contro...
, и файл
postinst (опционально) -
https://www.debian.org/doc/debian-policy/ch-mainta...
В
control описываете свои зависимости и название пакета, какие пакеты замещает
postinst - исполняемый, запускается после установки пакета, пользхователей там создать, сервис запустить и т.д.
root@xxx:~/xxx-2.40# cat DEBIAN/control
Package: xxx
Version: 2.40
Section: custom
Priority: optional
Architecture: all
Essential: no
Installed-Size: 171700
Maintainer: xxx.ru
Description: XXX DS system
Depends: samba, isc-dhcp-server, python-twisted, libdate-manip-perl, libio-socket-multicast-perl
Replaces: isc-dhcp-server, samba
Recommends: sudo, vim, nano
и
root@xxx:~/xxx-2.40# cat DEBIAN/postinst
#!/bin/sh
# postinst script for webpy-example
#
# see: dh_installdeb(1)
set -e
# summary of how this script can be called:
# * <postinst> `configure' <most-recently-configured-version>
# * <old-postinst> `abort-upgrade' <new version>
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
# <new-version>
# * <postinst> `abort-remove'
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
# <failed-install-package> <version> `removing'
# <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package
# source debconf library
. /usr/share/debconf/confmodule
case "$1" in
configure)
adduser --quiet --system --home /inbox xxx || echo "User xxx existed!"
usermod -p yyyy xxx
(echo new123; echo new123) | smbpasswd -as xxx
smbpasswd -e xxx
systemctl enable xxx
systemctl start xxx
;;
abort-upgrade|abort-remove|abort-deconfigure)
exit 0
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.
#DEBHELPER#
db_stop
exit 0
4) идете на каталог ниже и выполняете
dpkg-deb --build myservice-0.001
Рядом получаете файло
myservice-0.001.deb
Доне.
PS.Про иконки и прочее отдельно читайте, этого я вам не скажу.