Выполнить команду, заставив ее думать `sudo `не существует

Спасибо автору OpenScreen в Google, это известная ошибка , и одно из решений — перенести исправление на собираемую версию хрома или использовать 78.0.3890.0 или более позднюю версию.

Я думал, что это будет легко сделать обратно, но фиксация, содержащая исправление, также содержит изменения в структуре src openscreen, которые приводят к сбою сборки... Я продолжил, внимательно -выбрав исправление, сравнив два последних фиксирует и применяет эти изменения к моей ветке хрома.

Обходной путь, упомянутый в ошибке, заключается в отключении открытого экрана с помощью gn args «enable _opencreen=false».

3
20.10.2021, 10:44
2 ответа

Единственный обходной путь, который я могу придумать без изменения самого yay, — это иметь скрипт-оболочку, который вы запускаете как root и который временно удаляет sudoперед запускомyay:

#!/bin/sh

su -c "mv /sbin/sudo /sbin/sudo.old" && yay "$@"
su -c "mv /sbin/sudo.old /sbin/sudo"

Тем не менее, это дважды попросит вас ввести пароль root. Другой вариант — просто запустить скрипт от имени root, а затем в скрипте использовать su, чтобы переключиться на другого пользователя :

.
#!/bin/sh

normalUser="$1"
shift

mv /sbin/sudo /sbin/sudo.old &&
su -c "yay $@" $normalUser
mv /sbin/sudo.old /sbin/sudo

Затем вы должны запустить это как:

su -c "/path/to/yay.wrapper.sh adrin $yayArguments" 

В вашем случае это должно быть безопасно, так как вы на самом деле не используете sudo, но я бы все же сделал копию /sbin/sudo, чтобы вы могли легко вернуть ее, если что-то пойдет не так, на всякий случай.

3
20.10.2021, 11:07

Самый простой способ обойти эту проблему — использовать опцию --sudo=su.

tl;dr-run yay --sudo=su -Syuдля достижения желаемого эффекта.

Объяснение того, почему yay --sudo=suне сделал того, что вы ожидали, приведено ниже.


Проблема связана с тем, как yayобрабатывает аргументы CLI. Из документов:

If no arguments are provided 'yay -Syu' will be performed.

If no operation is selected -Y will be assumed.

Если аргументы не указаны, yay -Syuвыполняется (полное обновление системы ), но --sudo=suсчитается аргументом, поэтому yay выбирает операцию -Y(списка пакетов, соответствующих запросу, который в этом случае пуст, и поэтому команда немедленно завершает работу ).

Вот кусок кода, отвечающий за:https://github.com/Jguer/yay/blob/next/pkg/settings/parser/parser.go#L618

2
22.10.2021, 08:21

Теги

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