Задать вопрос
BotaniQ_Q
@BotaniQ_Q

Как собрать установочный пакет на Linux для Linux?

Я написал программу на python, она использует сторонние библиотеки, к себе я их ставил через pip, как сделать установочный пакет, что бы юзер скачал по ссылке этот пакет и ему поставился python с нужной версией, сама программа, библиотеки к ней, иконка появилась для проги?
  • Вопрос задан
  • 1579 просмотров
Подписаться 3 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
leahch
@leahch Куратор тега Linux
3D специалист. Dолго, Dорого, Dерьмово.
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.Про иконки и прочее отдельно читайте, этого я вам не скажу.
Ответ написан
Комментировать
Singaporian
@Singaporian
Смотрите, если нужна прям полная автоматизация, что PIP не самый удобный вариант. Вам придется перейти на пакеты, стандартные для операционной системы (.deb, .rpm, ...).
В таком случае даже сами пакеты Python лучше всего переделать в стандартные пакеты. Сделать это очень легко:
pip install stdeb
(пример для пакета django-haystack)
/usr/local/bin/pypi-install django-haystack --release=2.6.1 --verbose=5 --keep

А дальше уже просто зависимости ставите в debian/control (или какой там файл у других ОС).

Но я бы начал на вашем месте с внимательного прочтения этой статьи о dh-virtualenv
Ответ написан
Комментировать
sanya84
@sanya84
Фанатик Python 3
pip install PyInstaller
в cmd или как там на LInux )
pyinstaller script_name.py --onefile --noconsole
Соберётся приложение со всеми библиотеками
в папке dist готовое приложение которое запуститься на Linux
на другом компьютере
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы