Как запустить интерактивный скрипт при запуске 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 метод установки..

Другие вопросы по тегам