bootstrap.sh の実行と修正 - M1 MacBook Air インストール覚書(12)

はじめに

昨晩までに主なシステム環境設定が終了したので、これから各種アプリをインストールしていきます。せっかくdotfiles における bootstrap.sh の対応 - M1 MacBook Air インストール覚書(3) - hkob’s blog にて dotfiles の bootstrap.sh を準備しましたので、これで一括設定を実施することにします。Intel Mac では以下のコマンドをタイプするだけで、必要な環境は一括で設定されていました。最終的には M1 Mac でも同じように動くことを目標とします。

bash -c "$(curl -L https://bitbucket.org/hkob/dotfiles/raw/HEAD/bootstrap.sh)"

なお、準備した当時からだいぶ情勢が変わっていますが、Command Line Developer Tools(以下 CLDT と略します) や Rosseta 2 のインストールまでは変わっていないと思います。まずは試してみます。今回は、バッテリーの持ちも確認したいので、電源に繋がずに使ってみたいと思います。現在、12月17日 5:50です。

bootstrap.sh の実行

上記のワンライナーを実行してみました。いきなり失敗です。CLDT のインストールチェックに git コマンドが存在しないことを期待していましたが、インストールされていない時でも git コマンドは存在し、CLDT のインストールを促すダイアログが出すようです。

hkob@hM1Air ~ % bash -c "$(curl -L https://bitbucket.org/hkob/dotfiles/raw/HEAD/bootstrap.sh)"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5501  100  5501    0     0   5607      0 --:--:-- --:--:-- --:--:--  5601
Cloning dotfiles.git ...
xcode-select: note: no developer tools were found at '/Applications/Xcode.app', requesting install. Choose an option in the dialog to download the command line developer tools.

Intel Mac の時はこれで目的は達していたのですが、今回は CLDT がなかった時に、Rosetta2 も同時にインストールしてしまいたいので、ちゃんと調べることにしました。xcode — コマンドラインツールがインストールされているかどうかを確認する方法によるとxcode-select -pの戻り値を使えばよいようです。インストールされている時には 0 が返るようなので、 Bash の戻り値判定を簡潔に記述する - Qiitaの簡潔表記が使えます。現状では git も何も入っていないので、bitbucket の画面で直接 bootstrap.sh を修正してみます。

# git が入っていなければ、コマンドラインツールをインストール
xcode-select -p 1>/dev/null || {
  echo "Installing Command line tools ..."
  xcode-select --install
  # その場合、M1 Mac では Rosetta2 もインストールされていないと思われるので、こちらもインストール
  if is_arm; then
    # ソフトウェアアップデートで Rosetta2 をインストール。面倒なのでライセンス確認クリックをスキップ
    echo "Installing Rosetta2 ..."
    /usr/sbin/softwareupdate --install-rosetta --agree-to-license

  fi
  echo "Plaese exec ./bootstrap.sh again in $DOTPATH after installing command-line-tools and Rosetta2(M1 Mac only)."
  exit 1
}

再度実行するとちゃんと表示してほしいメッセージが表示されていました。ただ、Rosetta 2 のインストールが動いていませんでした。確認すると uname -m の結果が arm64e ではなく arm64 でした。これを修正したところ、Rosetta 2 のインストールがされていました。

hkob@hM1Air ~ % bash -c "$(curl -L https://bitbucket.org/hkob/dotfiles/raw/HEAD/bootstrap.sh)"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5487  100  5487    0     0   4194      0  0:00:01  0:00:01 --:--:--  4194
xcode-select: error: unable to get active developer directory, use `sudo xcode-select --switch path/to/Xcode.app` to set one (or see `man xcode-select`)
Installing Command line tools ...
xcode-select: note: install requested for command line developer tools
Installing Rosetta2 ...
By using the agreetolicense option, you are agreeing that you have run this tool with the license only option and have read and agreed to the terms.
If you do not agree, press CTRL-C and cancel this process immediately.
2020-12-17 06:56:15.738 softwareupdate[8456:456136] Package Authoring Error: 001-86594: Package reference com.apple.pkg.RosettaUpdateAuto is missing installKBytes attribute
Install of Rosetta 2 finished successfully
Plaese exec ./bootstrap.sh again in /Users/hkob/dotfiles after installing command-line-tools and Rosetta2(M1 Mac only).

CLDT はダイアログが出ているので、「インストール」をクリックします。

f:id:hkob:20201217065747p:plain
CLDT のインストール

インストールが終わったので、再度実行してみます。

hkob@hM1Air ~ % bash -c "$(curl -L https://bitbucket.org/hkob/dotfiles/raw/HEAD/bootstrap.sh)"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  5487  100  5487    0     0   5703      0 --:--:-- --:--:-- --:--:--  5697
Cloning dotfiles.git ...
Cloning into '/Users/hkob/dotfiles'...
remote: Counting objects: 213, done.
remote: Compressing objects: 100% (202/202), done.
remote: Total 213 (delta 104), reused 0 (delta 0)
Receiving objects: 100% (213/213), 37.43 KiB | 118.00 KiB/s, done.
Resolving deltas: 100% (104/104), done.
Deploying dotfiles ...
/Users/hkob/.gitignore -> /Users/hkob/dotfiles/.gitignore
/Users/hkob/.mackup.cfg -> /Users/hkob/dotfiles/.mackup.cfg
/Users/hkob/.vim -> /Users/hkob/dotfiles/.vim
/Users/hkob/.vimrc -> /Users/hkob/dotfiles/.vimrc
/Users/hkob/.vimrc.org -> /Users/hkob/dotfiles/.vimrc.org
bash: line 77: XDG_CONFIG_HOME: unbound variable

今回追加した XDG_CONFIG_HOME の設定部分で失敗しています。いろいろ調べましたが、未定義なら $HOME/.config に設定ファイルが記述されるようなので、わざわざ設定する必要はないという記事を見かけました。ここから変えるつもりは設定部分を消してしまいます。

$HOME/dotfiles にリポジトリが clone されてきたので、この後は $HOME/dotfiles/bootstrap.sh を修正・実行すればいいことになります。上記の作業で .vimrc などがすでにデプロイされているので、vi を起動するとさまざまなパッケージが自動的にインストールされました。dein すごいですね。XDG_CONFIG_HOME の設定を消すとともに、Homebrew の Intel 版と M1 版のインストール直後に、exitを記載して止めるようにします。

Homebrew の確認

brew については、/usr/local/bin/brew と /opt/homebrew/bin/brew の二つがインストールされたことになります。今は、/usr/local/bin にしか PATH が通っていないので、Rosetta 2 版だけが選ばれます。デフォルトは M1 版にしたいので、インストール後に /opt/homebrew/bin に先にパスを通すようにしたいです。スクリプト内でパスを追加しておきます。

PATH=/opt/homebrew/bin:$PATH

また、Rosetta 2 版の brew をコマンドで実行できるように brew_x86 というコマンドを用意します。前の記事では brew にシンボリックリンクを貼っていましたが、brew 自体もシンボリックリンクだったために動作しませんでした。この部分は以下のように修正しました。

    # M1 の場合には、Rosetta2 版の brew を brew_x86 という名前で実行できるように
しておく
    cd /usr/local/bin
    ln -s /usr/local/Homebrew/bin/brew brew_x86

テスト用にターミナルでパスを通してみて、prefix を確認してみます。うまくいっている感じがします。

hkob@hM1Air dotfiles % brew --prefix
/opt/homebrew
hkob@hM1Air dotfiles % brew_x86 --prefix
/usr/local

とりあえず Homebrew システムの登録までで 8:00 になりました。ここまででアップします。現在残りバッテリーは 95% です。

次の記事: アプリインストール(1Password, mas) - M1 MacBook Air インストール覚書(13) - hkob’s blog

前の記事: 箱出しから初期設定まで - M1 MacBook Air インストール覚書(11) - hkob’s blog

hkob.hatenablog.com