Zainstalowałem program, pobierając jego kod źródłowy, a następnie uruchamiając `sudo make install`; jak sprawić, żeby `apt-get` wiedział o tym?

46

Zainstalowałem program (na przykład wywołaj go progA), budując go z kodu źródłowego, a następnie w końcu wywołując sudo make installi sudo ldconfig.

Wydaje się jednak, że apt-getnie otrzymałem notatki, ponieważ podczas instalacji progB, która zależy od progA, apt-getzaleca się również zainstalować progA. Dlaczego tak jest i co mogę zrobić?

Braiam
źródło
Myślę, że musisz też zainstalować progBręcznie ...
Parto
11
Nie można założyć, że utworzona przez Ciebie „niestandardowa” wersja jest taka sama jak pakiet, to jest zależność. Skrótem (niezalecanym) byłoby zainstalowanie prawdziwego pakietu, a następnie zastąpienie pliku binarnego swoim „specjalnym”. Ponieważ nie byłeś konkretny, nie mogę udzielić dalszych porad.
david6
6
Po prostu nie rób tego. Zawsze utrzymuj oprogramowanie zarządzane przez zarządzanie pakietami ściśle oddzielone od oprogramowania, które sam kompilujesz.
Reinier Post,

Odpowiedzi:

56

TL; DR checkinstall jest twoim przyjacielem ;)

sudo apt-get install checkinstall

Po instalacji z sudo make installmenedżerem pakietów nie wie absolutnie nic o tej instalacji. Ale wie wszystko o pakiecie o tej samej nazwie w repozytoriach Ubuntu lub w PPA.

Użyj sudo checkinstallzamiast sudo make installi użyj wyższej wersji jako wersji w repozytorium, aby mieć pewność, że menedżer pakietów akceptuje tę wersję jako poprawną zależność dla ProgB.


Dalsza informacja:

checkinstalljest naprawdę fajny, ponieważ wynika z tego, co make installzrobiłoby to polecenie, aby dowiedzieć się, jak zbudować pakiet.

Oznacza to, że jeśli zainstalujesz program za pomocą make install, ale potem żałujesz za swoje grzechy, wszystko, co musisz zrobić, to sudo checkinstall -D make install, a to polecenie:

  1. wykonaj, make installaby dowiedzieć się, co to robi

  2. copy-cat make install, z wyjątkiem pakietu * .deb

  3. zainstaluj z pakietu (dokładnie tak, jak make installby to miało miejsce, biorąc pod uwagę punkt 1), oprócz tego daj również apt-getznać o tym, a zatem zastąp wszystkie pliki dokładnie tam, gdzie make installje umieścił, o ile wybierzesz TAK, aby dołączyć pliki umieszczone make installw katalogu domowym również w pakiecie - kilka opcji podczas checkinstallprocesu pozwoli ci wybrać (oczywiście wybór jest dostępny, abyś mógł je wykonać indywidualnie dla każdego przypadku)

Premia: możesz także usunąć pakiet (nazwać go progAponownie) zainstalowany przy użyciu make installtej ody, która nie ma make uninstallwsparcia , wykonując checkinstallproces opisany do tej pory, a następnie po prostu:

dpkg -r progA
AB
źródło
18
Wow checkinstall- ŚWIAT musi o tym wiedzieć!
Dodałem trochę więcej szczegółów do twojej odpowiedzi, w oparciu o próbę zaimplementowania jej wczoraj, oraz zalecenia z tego meta pytania - prosimy o dalszą edycję!
Jakie szczegóły masz na myśli?
AB
Och, myślę, że jeszcze się nie pojawiły, ponieważ jest w trakcie edycji recenzji - jeśli klikniesz link do meta pytania, zobaczysz, jakie są (pierwotnie umieściłem je w treści pytania, ale zaleceniem było umieszczenie ich w treści zaakceptowanej odpowiedzi).
Katalog dokumentacji pakietu ./doc-pak nie istnieje. Czy powinienem utworzyć domyślny zestaw dokumentów pakietu?
n8chz,
13

Trzy opcje:

  1. utworzyć fałszywy pakiet dla progA: Jak sfałszować zainstalowaną wersję pakietu? (istnieje obszerny przykład dla TeXlive) .

  2. utworzyć pakiet dla progA, łatwiejsze, jeśli ma checkinstallopcję: Jak oszukać apt zależności?

  3. Buduj również progBze źródeł.

Rmano
źródło
1
4. Odinstaluj progAskompilowaną apt-getwersję i zainstaluj wersję. 5. Zainstaluj apt-getpakiet nad skompilowaną wersją i licz na najlepsze.
jwodder
1

Polecam korzystania uupdatez devscriptsi zbudować pakiet jak oryginał został zbudowany przed.

Zainstaluj wymagane pakiety

$ sudo apt-get install build-essential devscripts

Pobierz starą paczkę z oficjalnego repozytorium (posłuży MediaWikijako przykład) i nową paczkę tar z góry.

$ mkdir ~/Downloads/mediawiki
$ cd ~/Downloads/mediawiki
$ apt-get source mediawiki
$ wget https://releases.wikimedia.org/mediawiki/1.26/mediawiki-1.26.0.tar.gz

Uruchom, uupdateaby utworzyć nowy folder źródłowy z poprzedniej tar-ball i starejdebian/control

$ cd mediawiki-1.19.14+dfsg   # depends on your Ubuntu version
$ uupdate ../mediawiki-1.26.0.tar.gz 1.26.0
$ cd ../mediawiki-1.26.0

Teraz powinieneś sprawdzić, czy musisz wprowadzić zmiany w debian/controlplikach itp. Po zakończeniu możesz zbudować pakiet deb i zainstalować go

$ dpkg-buildpackage -us -uc
$ cd ..
$ sudo dpkg -i *.deb
Germar
źródło