J'ai installé un programme en obtenant son code source, puis en exécutant `sudo make install`; comment faire en sorte que `apt-get` en soit informé?

46

J'ai installé le programme (appelez-le, par exemple progA) en le construisant à partir du code source, puis en appelant sudo make installet sudo ldconfig.

Cependant, il semble apt-getn'a pas obtenu la note de service, parce que lors de l' installation progB, qui dépend progA, apt-getrecommande aussi installer progA. Pourquoi est-ce cela et que pourrais-je faire?

Braiam
la source
Je pense que vous devez installer progBmanuellement aussi ...
Parto
11
On ne peut pas supposer que la version "personnalisée" que vous avez créée est la même que le package, c’est une dépendance. Un raccourci (non recommandé) consisterait à installer le paquet réel, puis à écraser le binaire avec votre 'spécial'. Comme vous n'avez pas été précis, je ne peux donner aucun conseil supplémentaire.
david6
6
Ne fais pas ça. Gardez toujours les logiciels gérés par votre gestionnaire de paquets strictement séparés des logiciels que vous compilez vous-même.
Reinier Post

Réponses:

56

TL; DR checkinstall est ton ami ;)

sudo apt-get install checkinstall

Après une installation avec sudo make installvotre gestionnaire de paquets ne sait absolument rien sur cette installation. Mais il connaît tout d'un paquet portant le même nom dans les référentiels Ubuntu ou dans un PPA.

Utilisez sudo checkinstallau lieu de sudo make installet utilisez une version supérieure en tant que version dans le référentiel pour vous assurer que votre gestionnaire de paquets accepte cette version comme dépendance correcte ProgB.


Informations complémentaires:

checkinstallest vraiment astucieux, car il suit ce que la make installcommande ferait, afin de comprendre comment construire un paquet.

Cela signifie que si vous installez un programme en utilisant make install, mais que vous voulez ensuite vous repentir de vos péchés, tout ce que vous avez à faire est de faire sudo checkinstall -D make install, et cette commande va:

  1. suivre make installpour comprendre ce qu'il fait

  2. copy-cat make install, sauf sous forme de paquet * .deb

  3. installer à partir du paquetage (exactement comme il make installaurait été donné (point 1)), sauf à en informer apt-getet écraser ainsi tous les fichiers exactement où les make installaurait placés, à condition que vous choisissiez OUI d'inclure les fichiers placés make installdans le répertoire principal dans le package également - quelques options au cours du checkinstallprocessus vous permettront de choisir (évidemment, le choix est là pour que vous puissiez l'exercer au cas par cas)

Bonus: vous pouvez également supprimer un paquet (appelé à progAnouveau) installé en utilisant make installces odes qui ne disposent pas de make uninstallsupport en suivant le checkinstallprocessus décrit jusqu'ici, puis en effectuant simplement:

dpkg -r progA
UN B
la source
18
Wow checkinstall- LE MONDE doit savoir à ce sujet!
J'ai ajouté quelques détails supplémentaires à votre réponse, en essayant de la mettre en œuvre hier, et aux recommandations de cette méta-question - n'hésitez pas à la modifier!
De quels détails parlez-vous?
AB
Oh, je pense qu’ils ne sont pas encore parus, car ils sont en révision. Si vous cliquez sur le lien de la méta-question, vous verrez ce qu’ils sont (à l’origine, je les avais mis dans le corps de la question, mais recommandation était que je les mette dans le corps de la réponse acceptée).
Le répertoire de documentation du paquetage ./doc-pak n'existe pas. Devrais-je créer un ensemble de docs par défaut?
n8chz
13

Trois options:

  1. créer un faux package pour progA: Comment simuler une version de package installée? (il existe un exemple complet pour TeXlive) .

  2. créer un paquet pour progA, plus facilement s’il dispose d’une checkinstalloption: comment tromper les dépendances?

  3. Construire aussi à progBpartir de sources.

Rmano
la source
1
4. Désinstallez la version progAcompilée et installez-la apt-get. 5. Installez le apt-getpaquet sur la version compilée et espérez que tout ira pour le mieux.
Jwodder
1

Je recommanderais d'utiliser uupdatefrom devscriptset build comme si l'original avait été construit auparavant.

Installer les paquets requis

$ sudo apt-get install build-essential devscripts

Téléchargez l'ancien paquet depuis le référentiel officiel (qui servira MediaWikid'exemple) et la nouvelle archive tar en amont.

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

Exécuter uupdatepour créer un nouveau dossier source à partir de l'archive tar-ball en amont et de l'anciendebian/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

Maintenant, vous devriez vérifier si vous devez apporter des modifications aux debian/controlfichiers etc. Si vous avez terminé, vous pouvez construire le paquet deb et l'installer

$ dpkg-buildpackage -us -uc
$ cd ..
$ sudo dpkg -i *.deb
Germar
la source