
私は権限を昇格するために を使用するプログラム ( yay
ArchLinux では )を使用していますsudo
。ただし、 が見つからない場合はsudo
に切り替わりますsu
。これは、ユーザーが sudoer ではないため、私が望んでいる動作ですが、 はsudo
インストールされています ( sudo
root として実行する場合でもインストールする必要がある別のプログラムがあるため、これはばかげていることはわかっています)。
ここで問題となるのは、このプログラム ( ) を、存在しないyay
と思わせながら実行するにはどうすればよいかということです。sudo
は、ソースからパッケージをビルドしてインストールするパッケージ マネージャー (AUR ヘルパー) であり、セキュリティ上の理由から、root としてこれらのビルドを実行することはできないことに注意してくださいyay
。これは当然のことです。
また、私はすでに問題を提起していることに注意してくださいここのリポジトリにありyay
ますが、修正されるまでの間、別の解決策をいただければ幸いです。
答え1
それ自体を変更せずに考えられる唯一の回避策は、yay
ルートとして起動し、sudo
起動前に一時的に削除するラッパー スクリプトを用意することですyay
。
#!/bin/sh
su -c "mv /sbin/sudo /sbin/sudo.old" && yay "$@"
su -c "mv /sbin/sudo.old /sbin/sudo"
ただし、ルート パスワードを 2 回要求されます。別の方法としては、スクリプトをルートとして実行し、スクリプト内で を使用して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
します。
答え2
この問題を回避する最も簡単な方法は、オプションを使用することです--sudo=su
。
要約-yay --sudo=su -Syu
目的の効果が得られるまで実行します。
yay --sudo=su
期待どおりに動作しなかった理由については、以下で説明します。
この問題は、CLI 引数の処理方法に起因しますyay
。ドキュメントより:
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