Nosso administrador de sistemas instalou um aplicativo de software (Maven) no servidor e disse a todos para adicionar a /usr/local/maven/bin/
pasta ao caminho.
Eu acho que poderia ser mais conveniente apenas vincular os poucos programas nessa pasta a partir da /bin
pasta (ou outra pasta que todos tenham em seu caminho) assim:
ln -s /usr/local/maven/bin/* /bin
Isso está correto? Existem alguns efeitos colaterais ocultos na minha sugestão?
symlink
path
directory-structure
Erel Segal-Halevi
fonte
fonte
/opt
.Respostas:
Ligando
Você geralmente não ligar
/usr/local/*
com/bin
, mas esta é mais uma prática histórica. Em geral, existem algumas razões "técnicas" pelas quais você não pode fazer o que está sugerindo.Criar links para executáveis em
/bin
pode causar problemas:Provavelmente, a maior advertência seria se o sistema estiver gerenciando pacotes por algum tipo de gerenciador de pacotes, como RPM, dpkg, APT, YUM, pacman, pkg_add, etc. Nesses casos, geralmente você deseja deixar o pacote gerente de fazer o seu trabalho e gerenciar diretórios tais como
/sbin
,/bin
,/lib
, e/usr
. Uma exceção seria o/usr/local
local normalmente seguro para você fazer o que achar melhor na caixa, sem precisar se preocupar com o fato de um gerenciador de pacotes interferir nos seus arquivos.Muitas vezes, os executáveis criados para
/usr/local
esse PATH são codificados em seus executáveis. Também pode haver arquivos de configuração incluídos/usr/local
como parte da instalação desses aplicativos. Portanto, vincular apenas o executável pode causar problemas com esses aplicativos, encontrando os.cfg
arquivos posteriormente. Aqui está um exemplo de tal caso:O mesmo problema que se aplica à localização de
.cfg
arquivos também pode ocorrer com executáveis "auxiliares" que o aplicativo principal precisa executar. Eles também precisam estar vinculados/usr/bin
, sabendo que isso pode ser problemático e só aparece quando você realmente tenta executar o aplicativo vinculado.NOTA: em geral, é melhor evitar a tentação de vincular a aplicativos únicos
/usr/bin
./etc/profile.d
Em vez disso, se todos os usuários fornecerem esse gerenciamento, o administrador poderá adicioná-lo facilmente a todos que estiverem
$PATH
na caixa, adicionando um arquivo correspondente no/etc/profile.d
diretório.Um arquivo como este
/etc/profile.d/maven.sh
:Você geralmente faz isso como administrador, em vez de poluir todas as configurações dos usuários.
Usando alternativas
A maioria das distros agora fornece outra ferramenta chamada
alternatives
(Fedora / CentOS) ouupdate-alternatives
(Debian / Ubuntu), que você também pode usar para fazer um loop nas$PATH
ferramentas que podem estar fora do/bin
. O uso de ferramentas como essas é preferível, pois elas seguem mais o que a maioria dos administradores consideraria "prática padrão" e, assim, facilita a transferência de sistemas de um administrador para outro.Essa ferramenta faz uma coisa semelhante ao criar links
/bin
; mas ele gerencia a criação e a destruição desses links, portanto, é mais fácil entender a configuração pretendida de um sistema quando realizada por meio de uma ferramenta versus diretamente, como você sugere.Aqui estou usando esse sistema para gerenciar o Java da Oracle em uma caixa:
Você pode ver os efeitos disso:
Meus US $ 0,02
A criação de links
/bin
, embora plausível, provavelmente seria altamente desencorajada pela maioria dos administradores de sistemas:fonte
/bin
diretório. Aqui está um exemplo. Nas distros da Red Hat que utilizam o RPM, se um arquivo já existir no/bin
RPM, não serão instaladas como você descreveu, a menos que sejam coxas para fazer isso usando o--replacefiles
switch. Portanto, essa não é realmente uma razão técnica. O mesmo com outros diretórios. Entendo o que você está dizendo sobre o sistema operacional "proprietário",/bin
mas não é tão claro quanto você afirma.Respondendo às perguntas:
Não , é uma prática ruim.
Sim, existem vários efeitos colaterais. Sua sugestão pode funcionar ou não, dependendo do aplicativo, e pode regredir ou ser interrompida a longo prazo.
Existem razões sensatas para não criar um link tão simbólico:
Os administradores não "possuem"
/bin
(consulte a nota 1), pois esse diretório pertence aos desenvolvedores do sistema operacional / distribuição. Por outro lado,/usr/local
é um local tradicional para software criado pelo administrador local,/opt/<packagename>
sendo um local para software desagregado. Se você criar um arquivo ou um link/bin
, existe o risco de ser substituído por uma instalação de pacote, no seu caso, ummaven
pacote hipotético fornecido pelo sistema operacional, que pode levar a uma regressão se o criado localmente for criado a partir de versões mais recentes. código fonte que a versão do sistema operacional. Por exemplo, tarballs SVR4pkgadd
, debiandpkg
, red-hatrpm
e slackware sobrescreverão cegamente o seu link simbólico.Alguns aplicativos procuram o local em que são chamados para recuperar arquivos de configuração, plugins e recursos similares. Se você chamar o aplicativo por um link simbólico, seu código poderá falhar em segui-lo e, em seguida, procure esses arquivos de recursos
/usr/bin
onde eles não estão.Pode haver outros bináriosRemovido como você já leva isso em consideração com seu comando, vinculando todos os comandos em potencial./usr/local/maven/bin
e a não inclusão desse diretório no PATH os tornará indisponíveis.A página maven2 diz para adicionar este diretório ao seu PATH (precisamente: adicione a variável de ambiente M2 ao seu caminho, por exemplo, exporte PATH = $ M2: $ PATH .), Usando uma abordagem diferente, você está quebrando essa etapa e, portanto, não é suportado. maneira. Obviamente, se a maioria dos usuários de um sistema são
maven
usuários em potencial , faria mais sentido definir oPATH
globalmente do que em cada um.profile
.Nota 1:
Documentação do Slackware:
Padrão de Hierarquia Debian / Sistema de Arquivos
Documentação do Solaris:
Teste simples mostrando o Debian
dpkg
não preserva um link existente, mesmo quando a--force-overwrite
opção não é usada:fonte
/bin
ou/usr/bin
. Ao descobrir os problemas dos binários do sistema ocultos ou desarrumados (o mais famoso foitest
), a melhor prática para instalar binários que não são do sistema em outro lugar foi adotada progressivamente.Se você deseja fazer o link simbólico, seria melhor fazer o link simbólico para
/usr/local/bin
. No meu servidor, eu costumava instalar o software local/opt/NAME
e vincular os binários a eles/usr/local/bin
.fonte
Uma alternativa aos dois métodos sugeridos é criar um script de shell em
/usr/local/bin
que, quando executado, execute o binário que você especificar no script. Por exemplo, usando o maven como exemplo, eu criaria um shell script/usr/local/bin
chamadomaven
que possui um pequeno script interno para executar o binário do maven no local em que está localizado e passar quaisquer argumentos para ele:Isso tem a desvantagem de ter que fazer isso para todos os binários que você deseja "vincular", mas permite que você chame esses binários da linha de comando sem precisar estragar sua
$PATH
variável de ambiente.fonte