Скажем, мне нужно установить пакет, используя dpkg -i
, который будет запрашивать у пользователя некоторые значения, такие как имя пользователя и пароль.
Я легко могу сделать это из терминала и приступить к установке.
Но, следуя этому плану, я не могу автоматизировать установку, например, если я хочу написать скрипт для установки пакета, который принимает параметры в интерактивном режиме.
Поэтому мне нужен план установки dpkg, который является интерактивным (запрашивает имя пользователя и пароль), но все же может быть вызван из сценария, чтобы процесс установки был автоматизирован.
Как я могу пойти по этому поводу? Есть ли альтернативы?
Для таких вещей вы можете написать expect
скрипт. Это не очень сложно справиться.
Сначала вы должны установить интерпретатор:
apt-get install expect
Затем вы можете написать что-то вроде этого, например:
#!/usr/bin/expect -f
set timeout 30
set password "pass"
set username "user"
#run the command
spawn dpkg -i package.deb
# Look for username prompt
expect "*?sername:*" #<--- this statement is important it wait's for a prompt "username:"
send "$username\r"
# Look for passwod prompt
expect "*?assword:*" #<--- the same with the "password:" prompt
send "$password\r"
#dpkg -i continues
Сценарий, конечно, должен быть исполняемым. Expect идеально подходит для управления интерактивными терминальными программами через скрипт (ssh, ftp, ...)
Вы можете создать файл предварительной конфигурации, используя инструменты из пакета debconf-utils. Вы можете создать файл предварительной конфигурации вручную с помощью:
<owner> <question> <type> <value>
или в качестве примера:
my-package username string Bob
my-package password string I$aN1ceGuy
Проще установить его на свой компьютер и запустить:
debconf-get-selections | grep my-package
[ 118] Используйте выходные данные для создания файла.
Когда у вас есть файл, используйте:
debconf-set-selections <filename>.
dpkg -i my-package
Параметры, указанные в имени файла, будут использоваться по умолчанию, и пакет будет установлен без вывода сообщений.