LINUX.ORG.RU

PKGBUILD Как вывести интерактивное сообщение пользователю во время установки пакета?

 , , ,


1

1

Всем привет!

Собираю системный пакет с пмощью PKGBUILD в Manjaro Linux и хочу, чтобы после сборки пакета, во время установки пакета пользователем, при определенных условиях выводилось сообщение, где пользователь принимает решение.

Для этого, казалось бы есть решение, в PKGBULD, в install прописать файл скрипта с функциями, например так:

install="pre-post-scripts.install"

а в этом файле, например, в функции post_install() прописать запрос пользователю через read:

post_install() {

    while [[ ! $answer =~ ^(y|n)$ ]]; do
        read -p 'Do you want.... ? [y/n]: ' answer
    done

    if [[ $answer = y ]]; then
        echo "User answered - yes"
    fi

}

Проблема заключается в том, что после сборки пакета, уже при установке пакета с помощью pacman в этом месте кода установка приостанавливается, но ввести ничего в консоли нельзя, как бы read не может считать из STDIN.

Есть ли какие идеи? Как это сделать так, чтобы работал корректно запрос пользователю?


Ответ на: комментарий от deadNightTiger

Конечная цель спросить пользователя, хочет ли он включить опцию в конфиге которую разработчик отключает по умолчанию. По умолчанию, VMWare Player отключает 3D акселерацию для драйверов Mesa DRI и пишет в логе:

No 3D support is available from the host
The 3D features of the virtual machine will be disabled

Мне не понятно с чем это связано, какие последствия могут быть если по умолчанию будет включена опция mks.gl.allowBlacklistedDrivers в конфигурационном файле. У меня, после включения заработала 3D ускорение в гостевых системах, поэтому хочется возложить ответственность на пользователя, уведомить его об этой возможности, и если он хочет включить, то чтобы скрипт установщика добавил эту опцию автоматически во время установки.

dva20 ()
Ответ на: комментарий от dva20

Не нужно это тащить в управление пакетами. Если оно по умолчанию отключено - пусть остаётся отключенным.

Deleted ()
Ответ на: комментарий от deadNightTiger

То есть, лучше просто вывести сообщение, но без интерактивного запроса? Это нормальная практика для пакетов? А с чем это связано, что интерактивность в пакетах это «дурная практика»? Вроде на Ubuntu подобных дистрах встречаются подобные вопросы при установке некоторых пакетов… Интерактивность вообще не привествуется в пакетах arch-подобных дистрибутивах, или это Вы мне советуете в частном порядке?

dva20 ()
Ответ на: комментарий от Deleted

Но как мэйнетейнер, разве не могу посчитать включить ту или иную опцию приложения заранее? Мне просто интересно, это практика, соглашение такое или почему так следует делать? Почему интерактивность не привествуется в управлении пакетами? Хотелось бы узнать об этом лучше. Спасибо.

dva20 ()
Ответ на: комментарий от dva20

По команде установить пакет:
1) пакет ообязан установиться без вопросов
2) пакет обязан иметь максимально универсальные/безопасные настройки
3) иметь документацию, где любопытный вычитает, всё, что необходимо.

bormant ★★★★★ ()
Ответ на: комментарий от dva20

лучше просто вывести сообщение

Лучше вообще ничего не выводить. Пакетный менеджер должен заниматься только установкой/обновлением/удалением пакетов. Настройка программ это совершенно другая задача.

Вроде на Ubuntu подобных дистрах встречаются подобные вопросы при установке некоторых пакетов

Потому что у создателей apt и dpkg вместо мозга хлебушек.

Deleted ()
Ответ на: комментарий от dva20

Но как мэйнетейнер, разве не могу посчитать включить ту или иную опцию приложения заранее?

Можешь, конечно.

Почему интерактивность не привествуется в управлении пакетами?

Из соображений хорошего дизайна.

Deleted ()
Ответ на: комментарий от Deleted

Настройка программ это совершенно другая задача

Я понял, спасибо. Действительно, надо отделять мух от котлет ))

dva20 ()
Ответ на: комментарий от bormant

Это общепринятая практика, или это ваше пожелание? Ничего против не имею, просто хочу узнать лучше об этом.

dva20 ()

Никак, консоль специально отвязана от post-install скриптов, чтобы доморощенные пакетописатели так не делали.

intelfx ★★★★★ ()
Ответ на: комментарий от intelfx

Всё таки интересно, почему это является дурным тоном спросить о чём-то пользователя?

В GUI инсталляторах повсеместно используются интерактивные запросы к пользователю, например - принять лицензию, а в консольных инсталляторах/пакетных менеджерах это не привествуется?

Однако есть же опция у pacman –noconfirm и обратная ей –confirm? Для чего они сделаны, разве не для этих случаев?

dva20 ()
Ответ на: комментарий от dva20

Всё таки интересно, почему это является дурным тоном спросить о чём-то пользователя?

В Линуксе всё старается придерживаться концепции наибольшей автоматизируемости. Чтобы, например, установку пакетов можно было легко вогнать в скрипт. Когда в процессе установки вылезают всякие да/нет, автоматизация усложняется. Ну и считается, что надо с самого начала проинформировать пользователя (о лицензии и т.д.), а в процессе уже ничего не спрашивать. Если пользователь нажал или отдал команду «установить», то значит, он на всё согласился, и ни к чему его больше дёргать.

А в твоём случае можно сделать так: переименовать бинарник, запускающий программу - например, vmplayer -> vmplayer-run, а вместо бинарника положить простой скрипт с названием vmplayer, который при первом запуске будет спрашивать пользователя, включить ли такую-то опцию, после чего править или не править конфиг. Хотя всё это лишнее, по-моему. Если человек захочет включить 3D в гостевых системах - он погуглит.

Deleted ()
Ответ на: комментарий от dva20

общепринятая практика

Традиционным поведением утилит *nix является молчание в случае успеха.
В общем случае количество интерактивных задач стремятся уменьшить. Это позволяет использовать пакетное выполнение задач. Часто процесса выполнения пользователь вообще не видит. только результат успешно/нет, и вот когда нет — тогда повод начать разбираться, что же пошло не так.

В вашем же случае выполнение пакета заданий будет остановлено безо всякой нужды — ушки ваши будут вечно красными ;-)

bormant ★★★★★ ()
Ответ на: комментарий от Deleted

Если пользователь нажал или отдал команду «установить», то значит, он на всё согласился, и ни к чему его больше дёргать

Ага, кажется я начинаю понимать. То есть, лучше все условности, описать где-то за рамками инсталяции, например на странце AUR? Т.е., если я, как мэйнтэйнер решил, что опцию по умолчанию (которую описал в начале этого поста) в большинстве случаев лучше включить, то я просто её включаю и не задаю этот вопрос пользователю при инсталяции и описываю эту важную на мой взгляд опцию на странице AUR, о том, что она включена. Так лучше будет?

В Линуксе всё старается придерживаться концепции наибольшей автоматизируемости

Это понятно, и в Ubuntu, например, для пакетного менеджера передаётся насколько я помню опция -y которая подавляет все запросы к пользователю и пакет устанавливается с опциями по умолчанию, т.е. автоматизация не нарушается таким образом. Почему в Arch это не так, я не до конца понимаю…

Хотя всё это лишнее, по-моему. Если человек захочет включить 3D в гостевых системах - он погуглит

Да вот хотелось, для себя же самого автоматизировать, чтобы не гуглить, не вспоминать это заново через пол года, год и более. Чтобы не тратить больше на это время. Я не понимаю (не нашел ответа), почему VMWare выключают 3D поддержку и это потом с большим трудом надо гуглить как её включить. Все другие опции, на мой взгляд не так важны, как эта, которая включает значимую возможность виртуализации.

dva20 ()
Ответ на: комментарий от dva20

Так лучше будет?

Да.

Я не понимаю (не нашел ответа), почему VMWare выключают 3D поддержку

Может, на некоторых конфигурациях она приводит к глюкам или падениям, хз.

Deleted ()
Ответ на: комментарий от bormant

В вашем же случае выполнение пакета заданий будет остановлено безо всякой нужды — ушки ваши будут вечно красными ;-)

Не знал этого :) Вспомнилось мне тут - благими намерениями дорога вымощена в ад )))

dva20 ()

В некоторых пакетах в post-install просто добавляют сообщение для пользователя, что нужно сделать, для донастройки пакета, если это необходимо, пользователь, увидевший это сообщение, сделает всё сам.

Vigi ()
Ответ на: комментарий от dva20

Это понятно, и в Ubuntu, например, для пакетного менеджера передаётся насколько я помню опция -y которая подавляет все запросы к пользователю и пакет устанавливается с опциями по умолчанию, т.е. автоматизация не нарушается таким образом. Почему в Arch это не так, я не до конца понимаю…

Потому что Ubuntu/Debian (dpkg) сделан с упором на удобство конечного пользователя, а Arch (pacman) сделан с упором на техническую простоту, и такая концепция, как опционально интерактивные скрипты, в нём просто не предусмотрена.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1 )
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.