Jak sprawić, aby apt-get ignorował niektóre zależności? Na przykład chciałem zainstalować mailx, aby móc go używać do wysyłania wiadomości e-mail ze skryptów cron / narzędzi do generowania raportów. Jednak instalacja mailx powoduje również zainstalowanie exim4 i całej gamy zależności (mam już zainstalowany Postfix), których tak naprawdę nie potrzebuję i bez których mailx może istnieć.
Jak zignorować niektóre zależności, ale nadal używać apt-get, ponieważ jest to miłe narzędzie?
APT::Install-Recommends "false";
do swojegoapt.conf
.Odpowiedzi:
Proste i łatwe rozwiązanie: po prostu określ niechciane pakiety z dodatkowymi
-
po każdym z nich.Przykład bez
-
przełącznika:Przykład użycia przełącznika, aby uniknąć instalacji
exim4-base
. Zwróć uwagę-
na końcu:Jak widać,
apt-get
nie próbuje już instalowaćexim4-base
pakietu i nie próbuje instalować różnych zależności (exim4-config
itp.).A jeśli się myliłeś i
exim4-base
mimo wszystko potrzebujesz tej zależności, możesz toapt-get install
zrobić później!źródło
gnupg2
bez,pinentry-gtk2
aby uniknąć X deps)Depends: xxx but it is not going to be installed
. Możesz pominąć wszystkie opcjonalne pakiety za pomocą opcjiapt-get install --no-install-recommends PACKAGE
Możesz zmienić zależności pakietu deb w następujący sposób:
ar x golden-linux.deb
(utworzy np. Trzy pliki: debian-binary control.tar.gz data.tar.gz)tar xzf control.tar.gz
(utworzy: postinst postrm preinst prerm md5sums control)control
(użyj edytora tekstu)tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz
(zamówienie ważne! Zobacz [Uwaga])[Uwaga]: dpkg nie byłby w stanie szybko odczytać metadanych pakietu, gdyby musiał szukać, gdzie kończy się sekcja danych!
źródło
libmng1.so.1
mimo że działała idealnie z ustawionym dowiązaniem symbolicznymlibmng1.so.2
.apt-get
po prostu nie mogłem być zakłopotany i denerwował mnie niezaspokojonymi zależnościami (nawet przy instalacji czegoś zupełnie niezwiązanego!). Co za pomysł na śmieci.gnome-settings-daemon
chciałgnome-settings-daemon-schemas=3.8.6.1-0ubuntu11
, ale mam jużgnome-settings-daemon-schemas=3.8.6.1-0ubuntu11.2
(<- zauważył”.2" na końcu). Ta procedura pozwoliła mi edytować pakiet i zmusić go do używania nowszej wersji 11.2. DZIĘKUJĘ CI!FILES=$(tar zxvf control.tar.gz)
aby zapisać listę plików w zmiennej. 4.tar zcf control.tar.gz $FILES
- utwórz archiwum w jednym kroku bez potoków i przekierowań, korzystając z oryginalnej listy plików (po modyfikacji).--ignore-failed-read
, abytar
ignorować brakujące pliki z pozostałej części wiersza poleceń. (Na przykładprerm
,postrm
są nieobecne w wielu pakietach.) Ponadto, te pliki mogą być.xz
raczej niż.gz
w nowszych wersjach Debiana formacie archiwum (npdata.tar.xz
).Po zainstalowaniu pakietu z
--ignore-depends
opcją przejdź do edycji/var/lib/dpkg/status
pliku i usuń zależność, która Twoim zdaniem nie jest potrzebna. Bądź bardzo ostrożny. W celu dep. być wymaganym, jest więcej niż prawdopodobne, że będzie wymaganyźródło
/var/lib/dpkg/status
może być konieczne zakończenie instalacji za pomocąsudo apt-get -f install
(nie trzeba określać pakietu).Możesz wypróbować
--nodeps
flagę za pomocąapt-get
.Lub pobierz pakiet i zainstaluj go za
dpkg
pomocą opcji--ignore-depends
.Na przykład, jeśli chcesz zainstalować pakiet
foo
bez zależnościbar
:źródło
--no-install-recommends
pracował dla mnie.Ponieważ zainstalowałeś Postfix ze źródła, musisz zainstalować pakiet „fikcyjny”, który zaspokoi zależność mail-transport-agent od mailx (lub bsd-mailx). Pakiet „equivs” w debianie istnieje, aby utworzyć taki fałszywy pakiet, który można zainstalować, aby powiedzieć dpkg „ta zależność jest spełniona”
Powodem, dla którego polecenie dpkg, aby po prostu zignorowało zależności, nie jest dobrym rozwiązaniem, jest to, że mówisz dpkg / apt, aby zignorował je dla pojedynczej transakcji, nie możesz powiedzieć, aby ignorowało zależności na zawsze. Za każdym razem, gdy używasz apt, sprawdza zależności na wszystkich pakietach
źródło
equivs-control <name>
, edytuj utworzony plik, aby zapewnić odpowiednią zależność i ładną nazwę, a następnie uruchomequivs-build <name>
i na końcudpkg -i
uzyskany plik .deb.Szukałem tej opcji na serwerze Ubuntu 12.04 z systemem Xen. W moich domenach używam jądra -virtual i apt uporczywie próbował instalować grub przy każdej aktualizacji pakietu jądra. Grub nie jest jednak potrzebny wewnątrz domU, gdy używasz p [yv] grub.
Szukałem również opcji -nodeps do apt-get, ale to nie działało, więc skończyło się odinstalowywaniem / usuwaniem grub * po każdej aktualizacji jądra.
W końcu czasami naprawdę pomaga czytanie strony podręcznika man - okazuje się, że podobną opcją apt-get w 12.04 wydaje się być --no-install-poleca, co faktycznie działa w tym przypadku, ponieważ grub jest wymieniony jako „zalecany” w informacje o pakiecie (tak sądzę, więc nie jest to „rzeczywista” zależność?).
Dodam to tutaj, ponieważ w moim przypadku rozwiązało to podobny problem, a podpowiedź do „--no-install-poleca” nie została jeszcze wspomniana.
źródło
Możesz pobrać pakiet za pomocą apt-get, a następnie zainstalować go za pomocą dpkg, ręcznie wymieniając zależność, którą chcesz zignorować.
Na przykład, jeśli chcę pobrać mój pakiet, ale zależy to od biblioteki libperl5.14 i nie chcę instalować biblioteki libperl5.14, ponieważ mam inną wersję, mogę zignorować tę zależność w następujący sposób:
źródło
Alternatywnym sposobem ręcznego dostosowania zależności jest:
źródło
W moim systemie Debian, bsd-mailx tak naprawdę zależy
default-mta | mail-transport-agent
(możesz sprawdzić, od czego zależy pakietapt-cache show <pkg>
dla wszystkiego w archiwum lubdpkg -s <pkg>
dla zainstalowanych pakietów.Możliwe, że Twój pakiet Postfix nie ma,
Provides: mail-transport-agent
więc apt nie zdaje sobie sprawy, że masz zainstalowany MTA. Warto byłoby zgłosić błąd, jeśli jest to oficjalna paczka.źródło
W tym celu możesz po prostu zainstalować gwóźdź, który moim zdaniem nie ma tych zależności?
źródło
Cóż - nie.
Korzystanie z pracy innych osób jest bardzo ważne na drodze do sukcesu. Kiedy budujesz jakieś oprogramowanie ze źródła (tarball), tracisz okazję do korzystania z pracy menedżera pakietów dystrybucji.
Nie dostaniesz „bezpłatnych” aktualizacji. Przez większość czasu żaden z nich nie aktualizuje pakietów, które zainstalowali ze źródła. Ponieważ muszą śledzić oprogramowanie dla nowych wersji, przebuduj je i wszystkie programy zależne (spróbuj je zapamiętać).
Będziesz miał problemy z innymi pakietami z repozytoriów twojej dystrybucji. Dokładnie tak jest w przypadku pytania: ubuntu ma świetnego menedżera pakietów i kilka bardzo miłych osób obsługujących pakiety. I zdecydowali, że do działania programu mailx potrzebujesz MTA. Więc jeśli zainstalowałeś Postfix ze źródeł, Ubuntu nie poprosiłoby Cię o zainstalowanie exim.
Jeśli z jakiegoś powodu utrzymanie serwera przejdzie na inną osobę (np. Twój projekt odniesie duży sukces i zdecydujesz się zatrudnić innego faceta do zarządzania serwerami, gdy będziesz zajęty innymi rzeczami), naturalnie będzie oczekiwać, że pobierze
dpkg --get-selections
wszystkie zainstalowane pakiety.Spróbuj w jak największym stopniu wykorzystać oprogramowanie do zarządzania pakietami. Naucz się budować własne pakiety, jeśli nie możesz znaleźć jednego z nich, a staniesz się lepszym profesjonalistą.
źródło