Instalar script - compatibilidade de autorização sudo?

0

No momento, estou atualizando alguns scripts e planejando lançar alguns úteis, para que outros possam usá-los (por isso, eles precisam trabalhar em uma ampla variedade de máquinas sem bater e sem quebrar nada).

Um desses adiciona o plug-in chromium pepperflash e algumas outras coisas nas máquinas Fedora - eu criei o script originalmente como o russianfedora coisa para fazê-lo parecia pouco confiável na época, precisava de um monte de dependências irritantes e às vezes está desatualizado. Meu script deve fazer o que eu acho que o script do ubuntu faz - usar um pacote chrome e extrair os plug-ins, portanto, é legalmente redistribuível.

Uma vez que tenha funcionado o que está fazendo, ele precisa copiar o material para a instalação do cromo etc, usando comandos de cópia semelhantes a este (o que funciona bem em minhas caixas do Fedora 21):

sudo cp -riv ${tmpdir}/* ${location}/

Em que ${tmpdir} pode ser /tmp/tmp.IOfylQBAHT etc e ${location} pode ser /usr/lib64/chromium-browser/ - ambos variam com base na configuração em que o script é executado e em quais opções são usadas. Geralmente, dois ou três comandos de cópia precisam ser usados.

Meu problema é que nem todos os sistemas usam sudo (alguns você precisa usar su como sudo não está instalado ou configuração, e em alguns sistemas, talvez o usuário não tenha privilégios de root, etc), então eu estou querendo saber o que devo fazer - por exemplo

  • Use sudo e espere que tudo corra bem
  • Use algo estranho como timeout 2 sudo -v > /dev/null 2>&1 e verifique $? para ver se o usuário pode fazer coisas como root com sudo - se eles não puderem sair com uma mensagem como To finish installation, please run 'cp -riv ${tmpdir}/* ${location}/' as root - se puderem, continue. (O comando de teste pode causar problemas em alguns sistemas com infame 'este incidente será relatado' se o usuário tentar usar o sudo - ele também pode estender o tempo limite do usuário ou algo do tipo .... source )
  • Basta sair com a mensagem do último ponto (N.B. Será echo ed, por isso irá substituir o ${tmpdir} etc pelos locais apropriados)
  • Certifique-se de que o usuário execute o script como raiz - por exemplo, com:

    if [ "$(whoami)" != "root" ]; then echo -e "\e[31mERROR: This needs to be run as root\e[0m"; exit 1 ; fi
    
  • Algo mais:)
por Wilf 21.06.2015 / 16:51

1 resposta

2

Eu pessoalmente não fiz nenhuma suposição sobre sudo , assim como colocar sudo em um script é uma má ideia. Sua quarta sugestão (verifique se o script é executado como root) é melhor, IMHO. Só que prefiro verificar o ID de usuário efetivo em vez de seu nome:

[ -n "$EUID" ] && [ $EUID -eq 0 ] || <not root, exit>

Isso deixará a escolha do usuário, com a qual a ferramenta superusuário pode executar seu script.

    
por 21.06.2015 / 18:22