Estou escrevendo um pacote para algo que requer que uma variável de ambiente seja definida para que seja executada corretamente. A etapa de instalação de um gerenciador de pacotes modifica o ambiente de um usuário ou simplesmente solicita que o usuário faça isso sozinho? Minha intuição seria a segunda, mas posso ver argumentos para a primeira.
installer
environment
package-managers
David Cowden
fonte
fonte
.bashrc
, eu acho.bash
? Existem muitos shells alternativos disponíveis com uma grande variedade de arquivos de inicialização. Eu sugiro seriamente encontrar alguma solução alternativa aqui.tomcat
que precisa de várias variáveis de ambiente para funcionar corretamente; todos eles são definidos por um script de inicialização que é executado em vez de executar seu binário diretamente.Respostas:
Nem. Os instaladores de pacotes nunca devem tocar em nada em um diretório inicial para uma conta que o pacote não possui. Os pacotes também devem se configurar para que, se estiverem instalados, sejam utilizáveis sem nenhum esforço especial por parte do usuário. (Existem casos excepcionais em que você não deseja fazer isso, mas são poucos e distantes entre si.)
Os ambientes Unixy têm um lugar para colocar arquivos de configuração que são lidos sempre que um usuário inicia um shell de login. Para os shells Bourne e C, você pode inserir sua configuração em
/etc/profile
e/etc/csh.cshrc
respectivamente. (Não se esqueça de removê-lo quando você desinstalar.)Muitos sistemas também suportam isso usando arquivos individuais, o que facilita a adição e remoção de bits de configuração sem a necessidade de colocar texto em algum local arbitrário em um arquivo. (Ele também oferece todos os benefícios de controle e responsabilidade que você obtém de um gerenciador de pacotes.) Algumas distribuições configuram a
/etc/profile
leitura de todos os arquivos correspondentes/etc/profile.d/*.sh
.fonte
rc
em um script, o nome deriva do CTSSruncom
(Run Commands), mas desde então ampliou seu escopo para incluir outros significados.profile.d
não está embutido no bash, é um gancho comumente fornecido (geralmente a base da distribuição)/etc/profile
. ;)Nunca é aceitável modificar a
/home
estrutura de um usuário a partir do gerenciador de pacotes, a menos que essa modificação seja o ponto inteiro.As principais abordagens para isso são:
/etc/profile.d
. Em alguns sistemas linux, todos os scripts neste diretório são originados pela configuração padrão do shell, para que você possa definir com segurança a variável.fonte
Pergunta A etapa de instalação de um gerenciador de pacotes modifica o ambiente de um usuário?
Resposta Não. É uma má idéia modificar os dados de um usuário, neste caso o arquivo .bashrc. Os dados do usuário devem ser considerados sagrados por um gerenciador de pacotes?
Pergunta A etapa de instalação de um gerenciador de pacotes simplesmente solicita que o usuário faça isso sozinho?
Resposta Esta é uma solução muito mais agradável, mas ainda não é o ideal.
Eu acho que você deve criar um script de shell wrapper onde você pode definir as variáveis de ambiente necessárias e executar o executável depois disso.
fonte
Você está sentindo falta da floresta para as árvores. Obviamente, é mais conveniente executar a alteração do ambiente para o usuário, mas também é mais arriscado e um pouco invasivo. Você deve combinar o melhor dos dois mundos, perguntando ao usuário se o instalador deve modificá-lo
.bashrc
e, caso contrário, forneça instruções sobre como eles devem fazê-lo.fonte
Você está assumindo que "usuário" é singular. O que acontece se eu tiver milhares de usuários neste sistema?
Você está supondo que pode encontrar o diretório inicial do usuário. Se os usuários são gerenciados através, por exemplo, do LDAP, você pode nem ter permissão para obter uma lista de todos os usuários válidos. Os diretórios pessoais podem não estar em / home; eles podem ser montados dinamicamente a partir da rede. O diretório inicial do usuário pode estar criptografado e a chave inacessível enquanto não estiver logado.
Não há como fazer isso de maneira confiável em todas as situações possíveis. Use o mecanismo da distribuição para definir variáveis de ambiente para os usuários quando eles se conectam ou geram shells. Se isso não funcionar, escreva um invólucro. (O wrapper também pode ser um binário, se necessário, para abordar o argumento nos comentários).
fonte
Definir uma variável global em um pacote é aceitável se for definido pelo seu próprio projeto (e isso significa que o nome do projeto faz parte do nome da variável!). Mesmo assim, você não deve tocar no
.bashrc
arquivo do usuário ; em vez disso, deve adicionar um script ao /etc/profile.d .fonte