4

На основе ядра Ubuntu 12.04 я подготовил загрузочный DVD. После загрузки (только для консоли) я могу войти в систему как пользователь и запустить скрипт для установки встроенного устройства:

sudo install_script

Чтобы выполнить этот сценарий уже при запуске, я добавил следующее в /etc/rc.local в образе корневой файловой системы на DVD:

/bin/bash -ic install_script

Поскольку этот скрипт выполняется безоговорочно, я хотел бы дать пользователю возможность обойти установку и перейти к приглашению входа в систему. Для этого я хотел бы использовать read в install_script. К сожалению, скрипт не реагирует на ввод с клавиатуры при запуске из /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 ответа3

4

В моем текущем решении я использую 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), и управление возвращается виртуальному терминалу, который был активен ранее.
0

У меня были те же проблемы во время работы над пользовательским дистрибутивом для Rasp Pi. Я обнаружил, что добавление следующего кода в мой скрипт гарантирует, что мой скрипт получит входные данные.

Я просто вызываю этот код, прежде чем начать читать ввод:

exec < /dev/tty1
-1

просто попытайтесь подражать Slackware Linux метод установки ..

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .