2015-07-10 2 views
1

Я пишу скрипт bash, который автоматизирует подписание пакетов RPM в репозитории YUM. Для выполнения этой задачи я использую expect.bash: использование ожидается для автоматизации подписи GPG

Вот мой исходный код до сих пор:

/usr/bin/expect <<EOD 
spawn bash -c "rpm --resign ${NEW_REPO}/packages/*.rpm" 
expect "Enter pass phrase:" 
send "${GPG_PASS}\r" 
expect eof 
EOD 

NEW_REPO путь к репо YUM и GPG_PASS пароль для ключа GPG.

По большей части это работает достаточно хорошо и успешно заключает пакеты.

Проблема: Этот код блокирует только знаки между пакетами 28-30 RPM, хотя каталог содержит 42 пакета. Ручное подписание пакета RPM-пакетов из командной строки отлично работает, но блок expect в моем скрипте просто останавливается, прежде чем он достигнет всех пакетов. Это какая-то странная причуда expect, или я делаю что-то совершенно не так? Обходные решения/предложения приветствуются.

Thanks

ответ

3

Это, вероятно, просто время. Попробуйте добавить:

set timeout 600 

Или, если вы хотите ждать навсегда:

set timeout -1 

В первой строке вашего скрипта.

+0

Вы имеете в виду первую строку блока 'expect' или в моем сценарии bash перед блоком' expect'? – scottyseus

+2

Я впечатлен значением тайм-аута по умолчанию, равным 10 секундам, позволяя ему получить, насколько это реально, но это, безусловно, решение. –

+0

Первая строка вашего блока ожидания. –

0

Вместо того, чтобы использовать ожидание, вы можете использовать gpg-agent, что позволит вам размещать вещи в GPG без необходимости вводить кодовую фразу каждый раз. Вы можете установить длительное время истечения, чтобы вы могли подписывать много вещей и только повторно вводить свою кодовую фразу.

Это намного безопаснее, чем хранение пароля ключа GPG в виде обычного текста в подобном скрипте.

Смежные вопросы