Чи можливо отримати вхід користувача під час встановлення rpm?


4

Чи можливо отримати вхід від користувача під час встановлення rpm?
У мене є сценарій, який працює сам (беручи дані від користувача і виконуючи дії), але коли він працює як частина після встановлення rpm (тобто доданий у %postрозділі специфікації rpm), він не працює.

Чи це можливо? Це частина:

%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  

Під час встановлення він безпосередньо переходить до перериваючої внутрішньої заяви.
Чому? Що я тут роблю неправильно?

Відповіді:


3

Ні, ви не можете мати інтерактивні сценарії після встановлення в RPM. Це навмисно.

Багато разів RPM встановлюються в системі без нагляду. Якщо встановити слід, щоб хтось не прийшов, він міг би застрягти там на віки.


Ти маєш на увазі, що це технічно неможливо?
Джим

Я знаю, що це старе, як бруд, але це не суворо кажучи погана ідея, якщо ваша програма була кінцевим продуктом (на відміну від базової ОС чи чогось іншого), а обертів постійно і завжди вимагає введення під час встановлення. Я не погоджуюся з тим, щоб розмістити його у специфікаційному сценарії (це, мабуть, має бути команда після активації / налаштування після встановлення чи щось таке), але це не помиляється. Встановлення програмного забезпечення завжди вимагає певного поняття того, що ви встановлюєте. Якщо ви знаєте, що це вимагає введення, то ви можете просто працювати над цим автоматизованим процесом.
Братчлі

3

Це дуже погана ідея, але це можливо.

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.

Дякую @Charles Ваша пропозиція, здається, призводить до багатообіцяючого (хоч і ідеї про Абад) рішення. Я обговорюватиму з вищими
людьми

0

Технічно, це IS можливо, по крайней мере , для деяких команд. В одному з моїх RPM я маю mountкоманду в сценаріях після встановлення, які встановлюють захищений паролем спільний доступ до Windows:

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

і я отримую такий результат під час встановлення RPM:

Password:

тоді користувач повинен ввести пароль, перш ніж установка триває.


... тому що, з міркувань безпеки, підказки пароля переходять прямо до TTY, як описується моя відповідь.
Чарльз Даффі

0

Як @Charles Duffy опублікував відповідь, ми можемо це зробити з / dev / tty функціоналом Linux. Також ми можемо використовувати для читання для читання рядка зі стандартного вводу.

Нижче наведено приклад інтерактивних оборотів в хвилину -

Якщо ви хочете скористатися вводом користувача на зразок [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

Деякі користувачі цент os можуть захотіти створити yum repo з цього інтерактивного rpm.

Нижче наводиться приклад інтерактивних оборотів в хвилину з yum -

Якщо ви хочете скористатися вводом користувача на зразок [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

Переконайтеся, що вищевказаний скрипт закінчується на> / dev / tty, тобто надрукуйте це повідомлення на іншому терміналі, на якому користувач введе вхід.

Сподіваюся, що це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.