bootstrap.sh の作成開始: hkob の雑記録 (8)

はじめに

hkob の雑記録の第8回目は、学生に作成させる bootstrap.sh の初期部分の解説を更新しました。ここはあまり macOS のアップデートに影響がないのでほぼそのまま使えます。

シェルスクリプトの解説

一番最初にターミナルを起動し、そこから先は全てターミナルで処理します。まだエディタもインストールされていないので、全てコマンドだけで処理します。テキストエディトはあるのですが、せっかくなので UNIX 系のコマンドを学んでもらいたいためです。ここで実行しているのは以下のコマンド群です。

  1. touchbootstrap.sh を作成
  2. ls -l でファイルの状況を確認
  3. chmod +x で実行属性を付与
  4. ls -l で属性の変化を確認
  5. cat > bootstrap.sh で shebang と echo コマンドを追加
  6. cat で内容を確認
  7. ./bootstrap.sh で実行

これらでまずシェルスクリプトについての基礎を学びます

コマンドラインツールのインストール

その後、作成した bootstrap.sh を上書きしてコマンドラインツールのインストールを作成します。ここでは、冪等性について解説しています。コマンドラインツールは一度インストールしたら再度インストールする必要はないので、コマンドの存在を確認した上でない場合だけインストールするようにしたいからです。そのためのスクリプトは以下のようになっています。このスクリプトにもいろいろなものを仕込んでいて、指導書ではそれを一行ずつ解説しています。特に xcode-select の部分の || は冪等性のために記述している部分です。コマンドラインツールがインストールされていれば、後ろの {} 内は実行されません。

#!/usr/bin/env bash

# エラーがあったらそこで即終了、設定していない変数を使ったらエラーにする
set -eu

# is_arm という関数を用意しておく。毎回 uname -m を実行するのは莫迦らしいので、UNAME 環境変数で判断
is_arm() { test "$UNAME" = "arm64"; }

# アーキテクチャ名は UNAME に入れておく
UNAME=$(uname -m)

# dotfiles の場所を設定
DOTPATH=$HOME/dotfiles

# 入っていなければ、コマンドライン・デベロッパツールをインストール
xcode-select -p 1>/dev/null || {
  echo "Installing Command line tools ..."
  xcode-select --install
  # その場合、Apple Silicon Mac では Rosetta2 もインストールされていないと思われるので、こちらもインストール
  if is_arm; then
    # ソフトウェアアップデートで Rosetta2 をインストール。面倒なのでライセンス確認クリックをスキップ
    echo "Installing Rosetta2 ..."
    /usr/sbin/softwareupdate --install-rosetta --agree-to-license
  fi
  echo "Please exec ./bootstrap.sh again in $DOTPATH after installing command-line-tools and Rosetta2(Apple Silicon Mac only)."
  exit 1
}

おわりに

今回は bootstrap.sh のスタート部分を解説しました。このページは解説がかなり長いので、スクリプトはここまでです。次のページからいよいよ homebrew のインストールになります。この調子で執筆を続けていきます。

hkob.notion.site