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ć?


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

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,


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.