Est-ce que make install
avec un Makefile la plupart du time appelle /usr/bin/install
?
Quel est le travail nécessaire /usr/bin/install
plus de copyr les files compilés dans /usr/bin/local
?
La page de manuel indique /usr/bin/install
copy les files et définit les attributes. Quels attributes sont si importants à définir?
install
offre un certain nombre de fonctionnalités en plus de copyr des files dans un directory.
-s
supprime la table de symboles d'un exécutable, économisant de l'espace -m
définit les bits d'autorisation. Les files se trouvant dans le directory du développeur ont été créés sous réserve de son umask, ce qui peut empêcher les autres de les exécuter. install -m 755 file1 /usr/local/bin
garantit que tout le monde peut exécuter le file, ce qui est probablement ce que le développeur souhaite pour un file dans un directory partagé. -o
et -g
définissent le propriétaire et le groupe. Avec cp
, le propriétaire et le groupe du file de destination seraient définis sur le uid et le gid de celui qui a exécuté le cp
, et avec cp -p
, le propriétaire et le groupe du file de destination seraient les mêmes que le file dans le directory de construction , dont aucun ne pourrait être ce que le développeur veut. Le programme de wall
doit être dans le groupe tty
, le programme d' screen
doit être groupe utmp
, etc. install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)
est plus succinct que les quatre commands cp
, ssortingp
, chmod
et chown
. Le dernier point est probablement la raison pour laquelle la command d' install
été inventée et pourquoi de nombreux makefiles l'utilisent.
Install
n'est cependant pas toujours utilisée. J'ai vu cp -r lib $(DESTDIR)/lib
quand il y a tout un tree plein de choses à copyr, et ./install.sh
si le développeur préfère utiliser un script personnalisé. De nombreux packages ont un install.sh
dérivé de celui qui vient avec X11, qui est comme l' install
mais supporte une option -t
(transform) pour renommer les files de destination d'une manière spécifiée.
Puisque les commands utilisées dans un makefile sont essentiellement destinées aux développeurs du projet, il est difficile de donner ici une réponse définitive. En général, je dirais que c'est une bonne pratique d'utiliser la command d' install
dans un makefile pour tous les process d'installation mentionnés dans 2, mais install
nouveau n'est pas POSIX, donc l'utiliser peut ne pas être l'approche la plus portable
AFAIK la plupart des outils peuvent être utilisés pour générer automatiquement des makefiles comme automake
et cmake
utilisera install
.
Généralement, l' install
est utilisée pour copyr des files et définir les permissions / propriétaire / groupe dans une command comme vous le dites. Une autre fonction couramment utilisée est de supprimer les symboles inutiles (par exemple les symboles de debugging) d'un binary qui n'en a plus besoin. Il a également quelques options supplémentaires pour des choses comme faire des sauvegardes avant d'installer et de travailler dans un context SELinux qui peut être utile.
Les permissions à choisir dépendent du file lui-même. La plupart du time, les files installés sont lisibles par tout le monde, mais seulement par root (l'idée est de placer les files du programme dans un endroit où tout le monde peut y accéder mais qui ne peut pas être falsifié). Ce n'est pas le cas de tout, si le file contient des données sensibles, il est courant de limiter l'access à un groupe ou à la racine uniquement.