はじめに
研究に使っていた 15inch MacBook Pro (Retina, Mid 2012) が12月にオブソリュート製品の仲間入りした. SSD は 750GB あるし,RAM の 16GB あるので,未だに現役で使えるものではある(研究室の iMac 4K よりも使い勝手がよい). これはこれで余生の使い道はありそうだが,やはりメインマシンは修理ができるマシンにしておきたいということで,15inch の MacBook Pro (2019) を購入させていただいた.
これまで研究用マシンと研究室のメインマシンを分けていたため,ファイルの管理が面倒であった.そのため,今回購入した MacBook Pro は研究用と研究室メインマシンを兼ねる運用をすることにする.
MacBook Pro は大学に行く時には持参するので,研究室の教職員VLANに接続できるマシンは一台残す必要がある(出張先でも校務支援システムのトラブル対応を行うことがあるためである). そこで,場所を取る iMac 4K の代わりに,以前使っていた Mac mini (Late 2012) を引っ張り出してセッティングする(iMac 4K はもったいないが学生へのお下がりに).
セッティングに使うもの
MacBook Pro の発注はしたもののしばらくは届かないので,先に Mac mini の設定をやってしまう. Mac mini は ssh さえ動けばよいのだが,万一 MacBook Pro にトラブルがあった時の代替にも使えるよう同じ環境はセッティングしておくべきだろう. MacBook Pro が届いた時にセッティングが速やかに終わるように,Mac mini でリハーサルを行うことにする.
参考にしたのは以下の二つの記事である。
以前,Brewfile は一度潰れかけた気がしたのだが,最近プラグインの形で使えるようになっているとのことらしい. これまでやっていた ansible での設定よりも簡単にできそうな感じなので,こちらに乗り換えてみる. 現状では研究用 MacBook Pro (以下,rMBP) の方はそれなりに環境が揃っているので,この環境を Mac mini (以下,mini) 側に適用できるように 前者のリンクの dotfiles を構築してみる.
dotfiles リポジトリの作成
dotfiles については,以前からリポジトリ化をしていた.これまでは本当に dotfiles だけの同期のためだったが,今回は Homebrew, Homebrew cask, App Store までも含めて同期することにする. まずは,真似から始めるということで,以下の bootstrap.sh を使わせていただく.
直すのは8行目の dotfiles のパスだけでよさそう. 以下,作業手順を列記していく.
-
rMBP 側で bootstrap.sh を記載し,実行権限を付加する.
vi bootstrap.sh; chmod +x bootstrap.sh
- bitbucket に push する.
- 公開リポジトリでないと https でアクセスできないので,恥ずかしいが公開リポジトリにしてしまう.
-
mini で以下のコマンドを実施する.
bash -c "$(curl -L https://bitbucket.org/hkob/dotfiles/raw/HEAD/bootstrap.sh)"
-
git clone のところでエラーがでた.コマンドラインツールが入っていないからだった.確かに何も入っていないマシンだった.以下のコマンドで先にコマンドラインツールをインストールしておく.
xcode-select --install
- もう一度実行してみると,今度は clone できた.scripts/configure.sh がないと言われる.
- ikuwow 氏の configure.sh を見ると defaults コマンドの塊だった. ここは saboyutaka 氏と同じように自動化はしたくないと思っていた(マシンによって微妙に異なるし,OS が変わった時に対応できるか不安だから). ここは呼び出し部を 消してしまうことにする.
-
次は deploy.sh である.nvim, kyrat, iCloud の部分は要らないと感じたので,前半部分だけ利用した(そもそも自分で使っていたスクリプトとほぼ同じだった).
#!/usr/bin/env bash DOTPATH="$HOME/dotfiles" if [ ! -e "$DOTPATH" ]; then echo "Error: Directory $DOTPATH does not exist." exit 1 fi cd "$DOTPATH" || exit 1 for file in .??*; do [[ "$file" = ".git" ]] && continue [[ "$file" = ".DS_Store" ]] && continue ln -fvns "$DOTPATH/$file" "$HOME/$file" done [[ -z $XDG_CONFIG_HOME ]] && XDG_CONFIG_HOME=$HOME/.config mkdir -p "$XDG_CONFIG_HOME"
-
先ほど git clone ができているので,~/dotfiles には bootstrap.sh がいるはずである.今後は,curl の呼び出しの代わりに以下のコマンドを実行すればよい.
~/dotfiles/bootstrap.sh
-
deploy.sh が動くと,Homebrew 本体のインストールと,homebrew/bundle のタップが読み込まれる. ここまでは無事に成功した. brew bundle の実行においてとなって停止した.
Error: No Brewfile found
-
Brewfile は rMBP の方で作成する. rMBP の方には homebrew/bundle をタップしていなかったので,以下のコマンドでタップしておく.
brew tap homebrew/bundle
-
以下のコマンドを実行することで,現在インストールされている homebrew のパッケージが Brewfile に dump される.
brew bundle dump
-
作成された Brewfile から rbenv や pyenv などは削除した.これらは,今度 Docker を使ってシステムとは分離して開発したいと考えたためである. また,ikuwow 氏のものをみると mas を使って App Store のアプリを追加していた. 同様に試してみたが,mas の部分で失敗してしまった. コマンドライン環境でも試してみたが,先に進まなかったので,プロキシ環境だとダメなのかもしれない. 諦めかけていたところ,http_proxy を設定していなかったターミナルで実行したところ,問題なく mas が稼働した. 対策がわかれば対応は簡単で,mas の実行前後で proxy のオフ・オンを切り替えればよいはずである. bootstrap.sh の修正部分は以下のようになった.
# homebrew and cask brew bundle echo # mas cd mas_only http_proxy_back=$http_proxy https_proxy_back=$https_proxy unset http_proxy unset https_proxy brew bundle export http_proxy=$http_proxy_back export https_proxy=$https_proxy_back unset http_proxy_back unset https_proxy_back cd .. echo
-
Homebrew および cask の Brewfile はこんな感じにした.
tap "buo/cask-upgrade" tap "homebrew/bundle" tap "homebrew/cask" tap "homebrew/core" tap "homebrew/services" tap "theseal/ssh-askpass" brew "mas" cask "1password" brew "mackup" cask "xquartz" brew "libyaml" brew "openssl" brew "python" brew "ansible" brew "gettext" brew "libtiff" brew "libevent" brew "openjpeg" brew "ffmpeg" brew "fish" brew "ghostscript" brew "gibo" brew "gnuplot" brew "graphviz" brew "netpbm" brew "ilmbase" brew "imagemagick" brew "jxrlib" brew "macvim" brew "mitmproxy" brew "nkf" brew "tmux" brew "overmind" brew "pandoc" brew "pdflib-lite" brew "plantuml" brew "telnet" brew "wget" brew "theseal/ssh-askpass/ssh-askpass" cask "adobe-acrobat-reader" cask "alfred" cask "aquaterm" cask "cd-to" cask "chromedriver" cask "cmd-eikana" cask "docker" cask "dropbox" cask "eclipse-java" cask "findings" cask "firefox" cask "google-chrome" cask "grandperspective" cask "java" cask "letterfix" cask "libreoffice" cask "logisim" cask "mactex" cask "maczip4win" cask "mendeley" cask "mysqlworkbench" cask "omnifocus" cask "omnigraffle" cask "omniplan" cask "osxfuse" cask "papers" cask "qlstephen" cask "skim" cask "sourcetree" cask "vlc" cask "vmware-fusion" cask "xmind"
-
mas の Brewfile は mas_only/Brewfile に記載した. mas の場合には,id が必要なので,App Store のインストール済みのリンクから抽出した.
mas "ibooks-author", id: 490152466 mas "type2phone-bluetooth-keyboard", id: 472717129 mas "hardwaregrowler", id: 475260933 mas "growl", id: 467939042 mas "ihex-hex-editor", id: 909566003 mas "verve", id: 1436374224 mas "quiver-take-better-notes", id: 866773894 mas "reeder-3", id: 880001334 mas "microsoft-remote-desktop-10", id: 1295203466 mas "kindle", id: 405399194 mas "slack", id: 803453959 mas "imovie", id: 408981434 mas "be-focused-pro-focus-timer", id: 961632517 mas "tnefs-enough", id: 986621173 mas "coteditor", id: 1024640650 mas "apple-remote-desktop", id: 409907375 mas "affinity-designer", id: 824171161 mas "day-one", id: 1055511498 mas "virus-scanner-plus", id: 595374522 mas "notability", id: 736189492 mas "spark", id: 1176895641 mas "ithoughtsx-mindmap", id: 720669838 mas "icircuit", id: 454347770 mas "todoist", id: 585829637 mas "Numbers", id: 409203825 mas "Keynote", id: 409183694 mas "Pages", id: 409201541 mas "Xcode", id: 497799835
- 実行するといろんなものをインストールし始めた. ここまでで mackup の手前まで終了した. これ以降はまた明日設定する.本日はここまで.