Я розмовляв з деякими технічними працівниками на Debian IRC-каналі irc: //irc.debian.org#debian-mentors , запитуючи про те саме, і загальний консенсус був:
Рішення №1:
Інтеграція залежностей у ваш пакет, копіюючи їх вихідні файли у єдину базу коду, дуже нахмуриться. Це перешкоджатиме призначенню системи упаковки, яка обробляє залежності, оновлення, версії тощо.
Рішення №3:
Завантаження недебіанських пакетів під час встановлення бінарного файлу ( .deb
) є серйозним ризиком для безпеки, безумовно - ні-ні. Ви навіть не зможете перевірити залежності, витягнувши deb
, оскільки вони завантажуються та встановлюються під час встановлення. Це підхід, який повністю обходить систему сховищ. Жоден зацікавлений користувач не буде задоволений пакетом, який за лаштунками (і як root
, пам’ятайте!) Завантажує додаткове ненадійне програмне забезпечення з недовірених джерел. Так, це потребує спільного використання DEBIAN/postinst
(або preinst
) та видачі wget
(або, у вашому випадку,pip install
), і такий підхід застосовують Flash, Oracle Java, Steam та інші. Але це власне програмне забезпечення із закритим кодом, тому їхня безпека все одно не є.
Рішення №1.5:
Ви не згадали, але ви могли б інтегрувати залежності тільки на час збирання , тобто в початковому пакетом ( .orig.tar.gz
, .debian.tar.gz
, .dsc
тріади), скачавши з PyPi при створенні «двійковий» пакет (в .deb
). Інструкції для pip install
пішов би в debian/rules
(зверніть увагу на нижній регістр debian
, на відміну від бінарного пакета), і буде виконуватися , коли ви видаєте debuild
чи dpkg-buildpackage
.
Це середина між №1 та №3. Це пом'якшує (але не вирішує!) Деякі питання №3: принаймні, ви можете оглянути кінцевий продукт, і це .deb
не вимагатиме доступу до Інтернету під час встановлення. Усі ризики та тягарі передаються від кінцевого користувача до сервісного пакета. Але має ті ж проблеми, що і №1, оскільки вона обходить більшу частину інфраструктури пакувальної системи. Afterall, обробки залежностей (версії, оновлення, вимога, конфлікти) ось чому dpkg
/ apt
були створено в першу чергу! :)
Рішення №2:
Єдиний Правдивий Правильний шлях ™ . Ви створюєте пакети debian для своїх залежностей, перераховуєте їх як вимоги у своєму пакеті та відправляєте всі .debs
або вихідні пакети.
Звідти у вас є ряд варіантів:
Подайте вихідні пакети, як ваше програмне забезпечення, так і його залежності, для включення в Debian. Якщо це буде прийнято, вони будуть автоматично доступні для всіх користувачів Debian, включаючи всі похідні, такі як Ubuntu.
Завантажте вихідні пакети на Launchpad , створивши таким чином PPA, який будь-який користувач Ubuntu (та його похідні, такі як Linux Mint) могли легко додавати та встановлювати
Розмістіть власний сховище debian на своєму веб-сайті, щоб користувачі з будь-якої системи, що базується на Debian, могли додавати до них /etc/apt/sources.list.d
та використовувати apt
інфраструктуру для завантаження, встановлення та постійного оновлення (як вище!)
Розмістіть .deb
файли для прямого завантаження та встановлення. Ніяких apt
або автоматичних оновлень, пов'язаних думкою
Що ж стосується , як упакувати ваші залежності PyPi (! І програмне забезпечення пітон теж), існує цілий ряд інструментів і посилань , які роблять процес легко:
stdeb , як ви згадали. Олді та добрі.
Pybuild , новий дивовижний інструмент від Debian, який витісняє stdeb
.
І багато корисних посилань:
Потрібна допомога? Перевірте це: