Как запустить интерактивный скрипт при запуске Ubuntu?
На основе ядра Ubuntu 12.04 я подготовил загрузочный DVD. После загрузки (только для консоли) я могу войти как пользователь и запустить скрипт для установки встроенного устройства:
sudo install_script
Чтобы выполнить этот скрипт уже при запуске, я добавил следующее /etc/rc.local
в образе корневой файловой системы на DVD:
/bin/bash -ic install_script
Поскольку этот скрипт выполняется безоговорочно, я хотел бы дать пользователю возможность обойти установку и перейти к приглашению входа в систему. Для этого я хотел бы использовать read
в сценарии установки. К сожалению, скрипт не реагирует на ввод с клавиатуры при запуске из /etc/rc.local
, (Нет проблем с тем же сценарием, запущенным из оболочки после входа в систему).
Как я могу получить пользовательский ввод при запуске?
(Некоторые мысли:
- Может быть, я могу как-то обнаружить и подключить tty к
read
или к сценарию? Я старался/bin/bash -ic install_script </dev/console
но безрезультатно. - Может быть, есть более подходящие варианты
/bin/bash
илиread
? - Может быть, я мог бы загрузиться в одну оболочку определенного пользователя (может быть,
root
без входа в систему?) с.bashrc
призваниеsudo install_script
(избежать проверки пароля для sudo?)? - Может быть, существует лучшее место для вызова сценария?
- Я не хотел бы разделять взаимодействие (чтобы происходить раньше) и install_script (например, путем предоставления различных параметров загрузки через isolinux и изучения
/proc/cmdline
в сценарии) по следующей причине: прежде чем спрашивать пользователя, я хотел бы изучить систему и дать обзор того, что именно произойдет во время установки. На более ранних этапах процесса загрузки необходимая информация для проверки системы может быть недоступна.
)
3 ответа
В моем текущем решении я использую openvt
начать install_script
добавив следующую строку в \etc\rc.local
:
openvt -s -w /path/to/install_script
- Он открывает новый виртуальный терминал (помимо семи других доступных в Ubuntu Core 12.04 через
Alt-F[1-7]
). - Переключатель
-s
говоритopenvt
переключиться на новый виртуальный терминал (без нажатияAlt-F8
). - Переключатель
-w
Давайтеopenvt
дождитесь завершения команды/path/to/install_script
даноopenvt
, - Начиная с этого пути, скрипт может получать ввод от пользователя, как обычно, вызывая
read
, - После завершения сценария виртуальный терминал закрывается (больше не переключаясь на него с помощью Alt-F8), и управление возвращается виртуальному терминалу, который был активен ранее.
У меня были те же проблемы во время работы над пользовательским дистрибутивом для Rasp Pi. Я обнаружил, что добавление следующего кода в мой скрипт гарантирует, что мой скрипт получит входные данные.
Я просто вызываю этот код, прежде чем начать читать ввод:
exec < /dev/tty1
Просто попробуйте подражать Slackware Linux метод установки..