fix(macos): sudo が使えないユーザーではコンピュータ名・ユーザーアイコン設定をスキップする - #63
Merged
Conversation
user_icon() は dscl への書き込みを無条件に sudo で実行するため、sudoers に 居ないユーザー (CI runner 等) で one-shot init を実行するとパスワード プロンプトで失敗していた。computer_name() も COMPUTER_NAME を設定すると 同じ経路で失敗する。debian/ubuntu 側の has_privilege に倣った判定を追加し、 sudo が使えない場合は警告を出してスキップする。macOS 版は sudo -v を使わず admin グループ所属 + sudo -n で判定する (非 sudoer への TTY プロンプトを 避けるため)。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
sudo を持たないユーザー (CI runner 等) で one-shot init を実行すると、
system_settings.shのuser_icon()が dscl への書き込みを無条件にsudoで実行するため、Password:プロンプトで失敗していた。computer_name()も (現状はCOMPUTER_NAME未設定で偶然スキップされているが) 設定すると同じ経路で失敗する。sudo が使えない場合はこれらの手順を警告付きでスキップし、apply を完走できるようにする。どちらも CI runner には不要な cosmetic 設定のため、スキップによる実害はない。
変更内容
install/macos/system_settings.shにhas_privilege()を追加 (debian/ubuntu のapt.sh/apt_gui.shと同名・同役割)。root 短絡 + admin グループ所属 (macOS 既定の sudoers 対象) +sudo -n trueで判定する。Linux 側と違いsudo -vを使わないのは、非 sudoer でも TTY にパスワードプロンプトが出てしまうためcomputer_name()/user_icon()は冪等スキップ判定の後・sudo 実行の前にhas_privilegeを判定し、偽なら YELLOW の警告を stderr に出してreturn 0tests/install/macos/system_settings.batsを新規追加 (4 件: 権限なし → skip して sudo を呼ばない / 権限あり → 従来どおり設定する、を computer_name / user_icon 双方で検証)関連 Issue
なし (#61 → #62 revert の経緯の続き。brew upgrade の cask 問題は git-credential-manager のアンインストールで解消済みのため、本 PR は system_settings 側のみ対応)
動作確認
mise run pre-commitが通ったmise run testが通った (46 ok / 0 failures、新規 4 件含む)mise run dry-runで意図した差分のみであることを確認した (install/ 配下のみの変更のため apply 対象に差分なし)チェックリスト
補足情報
has_privilege+ skip でガード済みbrew.shのupgrade()は引き続き失敗しうる (Revert "fix(macos): sudo が使えないユーザーでは brew upgrade を formula のみに絞る" #62 で revert 済みの既知の残課題)