Как запустить интерактивный скрипт при запуске Ubuntu?

8952
Carsten Scholtes

На основе ядра 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?)?
  • Может быть, существует лучшее место для вызова сценария?
  • Я не хотел бы разделять взаимодействие (чтобы оно происходило раньше) и /proc/cmdlineсценарий install_script (например, путем предоставления различных параметров загрузки через isolinux и изучения в сценарии) по следующей причине: перед тем, как спросить пользователя, я бы хотел изучить систему и дать обзор того, что именно произойдет во время установки. На более ранних этапах процесса загрузки необходимая информация для проверки системы может быть недоступна.

)

4
Подсказка: размещение здесь должно помочь вам больше http://askubuntu.com/ Sosi 11 лет назад 0

3 ответа на вопрос

4
Carsten Scholtes

В моем текущем решении я использую 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), и управление возвращается виртуальному терминалу, который был активен ранее.
Потратил часы на это для создания моего собственного LiveCd с помощью remastersys. Ваш ответ окончательно сработал! Использование profile.d для этого - ПЛОХАЯ идея. В сочетании с autologin (по умолчанию в некоторых сценариях инициации casper (25configure_init) и измененным файлом sudoers для корневого контекста, вы скоро окажетесь в аду из нескольких выполненных сценариев (для каждого tty или инициализации вложенных оболочек [я не что уверен насчет второго пункта]). Mister Henson 11 лет назад 0
0
Phil

I had them same issue while working on a custom distro for the rasp pi. I found that adding the following code to my script would ensure my script would receive input.

I just call this code before I start reading input:

exec < /dev/tty1 
-1
shouso_boy

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

Нужно больше подробностей, чтобы сделать этот ответ полезным Dave M 11 лет назад 4

Похожие вопросы