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 rootpamię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, .dsctriady), pobierając od PyPI podczas tworzenia „binarny” pakiet (z .deb). Instrukcje dla pip installpójdą do debian/rules(zwróć uwagę na małe litery debian, w przeciwieństwie do pakietu binarnego) i zostaną wykonane po wydaniu debuildlub 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 .debnie 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/ aptzostał 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 .debspakiety ź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.di korzystać z aptinfrastruktury do pobierania, instalowania i aktualizowania (jak wyżej!)
Hostuj .debpliki do bezpośredniego pobrania i instalacji. Nie aptdotyczył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: