É possível obter a entrada do usuário durante a instalação do rpm?

4

É possível obter entrada de um usuário durante uma instalação de rpm?
Eu tenho um script que funciona por si só (tendo a entrada de um usuário e fazendo ações), mas quando executado como parte da pós-instalação de um rpm (ou seja, adicionado na seção %post de uma especificação de rpm), então não funciona.

Deveria ser possível? Esta é a parte:

%post

import()  
{  
echo "Do you want to import file?"   
select INPUT in "Y" "N"; do  
        case $INPUT in  
                Y ) echo "You selected to import file";break;;  
                N ) echo "Exiting";exit 0;break;;  
        esac  
done   

read -p "Please file path: " FILE  
if [ -d "$FILE" ]; then  
      cp $FILE/myFile /opt/tmp/   
      echo "Done!"  
else  
   echo "No File Path."  
   done=0  
   while [ $done = 0 ]  
   do   
        echo  "Do you want to abort"  
        select INPUT in "Y" "N";  
        do  
                case $INPUT in  
                        Y )   
                                echo "Aborting"   
                                done=1  
                                break  
                                        ;;  
                        N )  
                                 echo "You selected to import"  
                                # break  
                                 #;;  
                                 read -p "Please provide the directory : " FILE  
                                 if [ -d "$FILE" ]; then  
                                        cp $FILE/myFile /opt/tmp  
                                        echo "Done"   
                                        done=1  
                                else  
                                        echo "Aborting."  
                                fi  
                                break  
                                ;;  
                esac  
           done  
   done  

fi
}    

import
exit 0  

Durante a instalação, ele pula diretamente para o aborto dentro da segunda instrução de caso.
Por quê? O que estou fazendo errado aqui?

    
por Jim 05.04.2012 / 13:36

4 respostas

3

Não, você não pode ter scripts de pós-instalação interativos em RPMs. Isso é deliberado.

Muitas vezes, os RPMs são instalados em um sistema não assistido. Se a instalação fosse interrompida até que alguém aparecesse, ela poderia ficar presa lá por muito tempo.

    
por 05.04.2012 / 13:57
3

É uma ideia muito ruim, mas é possível.

if ! exec </dev/tty; then
  : "deal with the case where you simply can't read from the user here"
  exit
fi

# ...the read command will work here.
    
por 03.06.2015 / 15:56
0

Tecnicamente, é IS possível, pelo menos para alguns comandos. Em um dos meus RPMs, tenho o comando mount em scripts de pós-instalação que montam um compartilhamento do Windows protegido por senha:

mount -t cifs //1.2.3.4/share /var/www/html -o username=user

e recebo a seguinte saída durante a instalação do RPM:

Password:

então o usuário tem que digitar a senha antes da instalação continuar.

    
por 26.03.2015 / 05:29
0

Como @Charles Duffy postou a resposta, podemos fazer isso com / dev / tty funcionalidade do Linux. Também podemos usar ler para Ler uma linha da entrada padrão.

Abaixo, o exemplo é para rpm interativo -

Se você quiser fazer uma entrada do usuário como [Y / n] -

echo "Do you want to install <some package> [Y/n] "
if exec </dev/tty; then
    read input;
fi

# use input here or below

Alguns usuários podem querer criar um repositório do yum a partir deste rpm interativo.

Abaixo, o exemplo é para rpm interativo com yum -

Se você quiser fazer uma entrada do usuário como [Y / n] -

echo "Do you want to install <some package> [Y/n] " >/dev/tty
if exec </dev/tty; then
    read input;
fi

# use input here or below

Verifique se no script acima o eco termina com > / dev / tty, ou seja, imprima esta mensagem no terminal diferente no qual o usuário entrará na entrada.

Espero que ajude.

    
por 14.07.2017 / 11:55