Faz
make install
com um Makefile a maior parte do tempo de permanência/usr/bin/install
?Que trabalho necessário faz
/usr/bin/install
além de copiar apenas os arquivos compilados/usr/bin/local
?A página do manual diz
/usr/bin/install
copiar arquivos e definir atributos. Quais atributos são tão importantes para definir?- Apenas define modos de permissão e proprietário / grupo, que não são necessários?
11
Respostas:
install
oferece vários recursos, além de copiar arquivos para um diretório.-s
opção remove a tabela de símbolos de um executável, economizando espaço-m
opção define os bits de permissão. Os arquivos localizados no diretório do desenvolvedor foram criados sujeitos à sua umask, o que pode impedir que outros os executem.install -m 755 file1 /usr/local/bin
garante que todos possam executar o arquivo, o que provavelmente é o que o desenvolvedor deseja para um arquivo em um diretório compartilhado.-o
e-g
definem o proprietário e o grupo. Comcp
, o proprietário e o grupo do arquivo de destino seriam definidos como uid e gid de quem executou ocp
, e comcp -p
, o proprietário e o grupo do arquivo de destino seriam os mesmos do arquivo no diretório de construção, nenhum dos quais pode seja o que o desenvolvedor deseja. Owall
programa precisa estar em grupotty
, oscreen
programa precisa estar em grupoutmp
etc.install -s -m 755 -o root -g bin file1 file2 lib/* $(DESTDIR)
é mais sucinto do que os quatro comandoscp
,strip
,chmod
, echown
.O último marcador é provavelmente o motivo pelo qual o
install
comando foi inventado e por que muitos makefiles o utilizam.Install
nem sempre é usado, no entanto. Vicp -r lib $(DESTDIR)/lib
quando há uma árvore inteira cheia de coisas para copiar e./install.sh
se o desenvolvedor prefere usar um script personalizado. Muitos pacotes sãoinstall.sh
derivados do que acompanha o X11, que é parecido,install
mas suporta uma-t
opção (transformação) para renomear os arquivos de destino de uma maneira especificada.fonte
Como os comandos usados em um makefile dependem essencialmente dos desenvolvedores do projeto, é difícil dar uma resposta definitiva aqui. Geralmente eu diria que é uma boa prática usar o
install
comando em um makefile para qualquer processo de instalação mencionado em 2, mas, novamente,install
não é POSIX, portanto, sempre usá-lo pode não ser a abordagem mais portátilO AFAIK, a maioria das ferramentas, pode ser usada para gerar automaticamente makefiles como
automake
ecmake
serão utilizadosinstall
.Geralmente
install
é usado para copiar arquivos e definir permissões / proprietário / grupo em um comando, como você diz. Uma outra função comumente usada é retirar símbolos desnecessários (por exemplo, símbolos de depuração) de um binário que não precisa mais deles. Também possui algumas opções extras para fazer backups antes de instalar e trabalhar em um contexto do SELinux, o que pode ser útil.Quais permissões escolher dependem do próprio arquivo. Os arquivos instalados na maior parte são legíveis por todos, mas somente graváveis pela raiz (a idéia é colocar os arquivos de programa em um local onde seja acessível a todos, mas não possa ser adulterado). Esse não é o caso de tudo, se o arquivo contiver dados confidenciais, é comum limitar o acesso a um grupo ou apenas a raiz.
fonte