Rozmawiałem z niektórymi opiekunami na kanale Debian IRC irc: //irc.debian.org#debian-mentors , prosząc o dokładnie to samo, a ogólny konsensus był następujący:
Rozwiązanie nr 1:
Integrowanie zależności w pakiecie poprzez kopiowanie ich plików źródłowych, ponieważ jedna baza kodów jest bardzo niezadowolona. Byłoby to sprzeczne z celem systemu pakowania, który obsługuje zależności, aktualizacje, wersjonowanie itp.
Rozwiązanie nr 3:
Pobieranie pakietów innych niż debian w locie podczas instalowania pliku binarnego ( .deb
) jest poważnym zagrożeniem dla bezpieczeństwa, zdecydowanie nie-nie. Nie byłoby nawet możliwe sprawdzenie zależności przez wyodrębnienie deb
, ponieważ są one pobierane i instalowane w czasie instalacji. To podejście całkowicie omija system repozytoriów. Żaden zainteresowany użytkownik nie byłby zadowolony z pakietu, który za kulisami (i jak root
pamiętaj!) Pobiera dodatkowe niezaufane oprogramowanie z niezaufanych źródeł. Tak, wymagałoby to majstrowania przy DEBIAN/postinst
(lub preinst
) i wydania wget
(lub, w twoim przypadku,pip install
), a takie podejście przyjęli Flash, Oracle Java, Steam i inni. Ale to zastrzeżone oprogramowanie z zamkniętym kodem źródłowym, więc ich bezpieczeństwo i tak nie ma.
Rozwiązanie nr 1.5:
Nie wspominając, ale można zintegrować zależności tylko w czasie kompilacji , czyli w źródłowym pakietu (The .orig.tar.gz
, .debian.tar.gz
, .dsc
triady), pobierając od PyPI podczas tworzenia „binarny” pakiet (z .deb
). Instrukcje dla pip install
pójdą do debian/rules
(zwróć uwagę na małe litery debian
, w przeciwieństwie do pakietu binarnego) i zostaną wykonane po wydaniu debuild
lub dpkg-buildpackage
.
Jest to środek między 1 a 3. Łagodzi (ale nie rozwiązuje!) Niektóre problemy z punktu 3: przynajmniej możesz sprawdzić produkt końcowy i .deb
nie wymagałby on dostępu do Internetu w czasie instalacji. Wszystkie ryzyka i obciążenia są przenoszone z użytkownika końcowego na opiekuna pakietu. Ma jednak takie same problemy jak nr 1, ponieważ omija większość infrastruktury systemu pakowania. W końcu obsługa zależności (wersje, aktualizacje, wymagania, konflikty) jest powodem, dla którego dpkg
/ apt
został stworzony! :)
Rozwiązanie nr 2:
The One True Right Way ™ . Tworzysz pakiety Debiana dla swoich zależności, wymieniasz je jako wymagania w pakiecie i wysyłasz wszystkie .debs
pakiety źródłowe lub źródłowe.
Stamtąd masz wiele opcji:
Prześlij pakiety źródłowe, zarówno swoje oprogramowanie, jak i jego zależności, w celu włączenia do Debiana. Jeśli zostaną zaakceptowane, będą automatycznie dostępne dla wszystkich użytkowników Debiana, w tym dla wszystkich pochodnych, takich jak Ubuntu.
Prześlij pakiety źródłowe do Launchpada , tworząc w ten sposób PPA, który każdy użytkownik Ubuntu (i jego pochodne, takie jak Linux Mint) mógłby łatwo dodać i zainstalować
Hostuj własne repozytorium Debiana na swojej stronie internetowej, które użytkownicy z dowolnego systemu opartego na Debianie mogą dodawać do nich /etc/apt/sources.list.d
i korzystać z apt
infrastruktury do pobierania, instalowania i aktualizowania (jak wyżej!)
Hostuj .deb
pliki do bezpośredniego pobrania i instalacji. Nie apt
dotyczyło to ani automatycznych aktualizacji.
Jeśli chodzi o sposób pakowania zależności PyPi (a także oprogramowania Python!), Istnieje wiele narzędzi i referencji, które ułatwiają ten proces:
stdeb , jak wspomniałeś. Staruszek i skarbie.
Pybuild , nowe, niesamowite narzędzie Debiana, które zastępuje stdeb
.
I wiele przydatnych referencji:
Potrzebuję pomocy? Sprawdź te: