M1 iMac インストール備忘録

M1 iMacにインストールしたパッケージの備忘録
随時書き足していく。

# homebrew

Apple Siliconに対応したhomebrewをインストール。
[https://brew.sh](https://brew.sh)にある記載通りにインストールスクリプトを実行。

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

パスを通してインストール完了。

```bash
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/xxxxx/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
```

# anyenv
nodejsなどをバージョン管理するためにanyenvをインストール

```bash
brew install anyone
echo 'eval "$(anyenv init -)"' >> ~/.zshrc
exec $SHELL -l
anyenv install --init
```

anyenv系をまとめてアップデートしてくれるanyenv-updateをインストール

```bash
mkdir -p $(anyenv root)/plugins
git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update
```

# nodejs
anyenvを使ってnodenvをインストール、それからnodejsをインストールする。

```
anyenv install nodenv
exec $SHELL -l
nodenv install 14.17.0
nodenv global 14.17.0
```
14.4.0はM1対応していないようでコンパイル時にエラー。
14.17.0に変更したところ成功した。

# Visual Studio Code
[https://code.visualstudio.com/#alt-downloads](https://code.visualstudio.com/#alt-downloads)
ここからApple Silicon版をダウンロードしてインストール。

## キーバインドの変更
2021.06.05
エディタとターミナルをショートカットで行き来できるように設定変更。
http://blogtech.hatenablog.com/entry/vscode_terminal_focus
keybindings.json

```json
[
    {
        "key": "ctrl+;",            "command": "workbench.action.terminal.focus",
                                    "when": "editorTextFocus"
    },
    {
        "key": "ctrl+;",            "command": "workbench.action.focusFirstEditorGroup",
                                    "when": "terminalFocus"
    }
]
```

## インテリセンスの設定変更
2021.6.20
Enterボタンでインテリセンスの候補が決定されてしまう動作がストレスだったので、Tabでのみ決定されるように変更した。

```
"editor.acceptSuggestionOnEnter": "off"
```

## Remote - SSH プラグインを追加
2021.06.05
旧メインマシン(MacBook Air)に繋いで開発したい時もあるので、Remote - SSHをインストール。
リモート側にHaskellのプラグインをインストール。

## Azure Tools プラグインを追加
2021.07.10
VSCodeからAzureへのASP.NETのデプロイを試してみたかったのでインストール。


# Unity
Unity Hubをインストールして最新のLTS版(2020.3.9f1)をインストール。
Apple Silicon対応とどこかに書かれていたと思うんだけど、アクティビティモニタで見るとIntelで動いてた。
試しにLTSではない最新版(2021.1.7)を入れてみたけど変わらずIntel。
あきらめてIntelで動かすことにした。
エディタは上でインストールしたVSCodeを使おうかと思ったが、VSCodeはApple Silicon、Unity本体はIntelでちゃんと動く気がしなかったので、Visual Studio for Macにしておいた。

# awscli 
2020/05/30
homebrewでインストール。

```
% brew install awscli
% aws --version
aws-cli/2.2.7 Python/3.9.5 Darwin/20.4.0 source/arm64 prompt/off
% aws configure
```


# Haskell
関数型プログラミングの勉強用にHaskellもインストール。
しようと思ったが、まだM1 MacにNative対応していないようなので保留。
[https://www.haskell.org/ghc/blog/20210401-ghc-9.2.1-alpha1-released.html](https://www.haskell.org/ghc/blog/20210401-ghc-9.2.1-alpha1-released.html)によると次期バージョン9.2.1ではサポートされるらしい。

# Apple Arcade
2021.6.20
Apple Arcadeが新規デバイス購入特典で３ヶ月間無料だったので使ってみた。
iMacの大画面でiOS向けのアプリが遊べる。
コントローラはPS4のDual Shockを利用。快適。

# .NET 5.0
2021.7.10
AzureでのASP.NETアプリの開発を試してみるために.NET 5.0をインストール。
やってみてるのは下記のAzureのチュートリアル。
[クイックスタート: ASP.NET Web アプリをデプロイする](https://docs.microsoft.com/ja-jp/azure/app-service/quickstart-dotnetcore?tabs=net50&pivots=development-environment-vscode)

チュートリアルに従って.NET 5.0をインストール。まだIntel版しかない。Apple Silicon対応は.NET 6.0から。
[https://dotnet.microsoft.com/download](https://dotnet.microsoft.com/download)

インストールされたのは下記

- .NET SDK 5.0.301
- .NET Runtime 5.0.7
- ASP.NET Core Runtime 5.0.7

rosetta2上で問題なく動いた。

```zsh
% which dotnet
/usr/local/share/dotnet/dotnet
% dotnet --version
5.0.301
% mkdir TestConsoleApp
% cd TestConsoleApp
% dotnet new console
% dotnet run
Hello World!
```

# Azure CLI
2021.07.11
Homebrewでazure-cliをインストール。Apple Silicon対応済み。

https://formulae.brew.sh/formula/azure-cli

```
% brew install azure-cli
```

最新版を入れたら、このバグに当たってしまった。

https://github.com/Azure/azure-cli/issues/18790

仕方がないのでコンテナビルドだけはAzureのCouldShellで行った。

# Kubernetes CLI
2021.07.14

```
% brew install Kubernetes-cli
```

# AWS CDK
2021.08.09

```
% npm install -g aws-cdk
% cdk --version
1.117.0 (build 0047c98)
```

# AWS eksctl
2021.08.09

```
% brew tap weaveworks/tap
% brew install weaveworks/tap/eksctl
% eksctl version
0.60.0
```

# aws-mfa
2021.08.11

```
pip3 install aws-mfa
```
https://github.com/broamski/aws-mfa

# Docker Desktop for Apple Silicon
2021.08.12

下記からApple Silicon用のイメージをダウンロードしてインストール。

https://www.docker.com/get-started

動作確認

```
% which docker
/usr/local/bin/docker
% ls -al /usr/local/bin/docker
lrwxr-xr-x  1 root  wheel  54  8 12 09:53 /usr/local/bin/docker -> /Applications/Docker.app/Contents/Resources/bin/docker
% docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.
```

Docker本体はRosetta2なしで動作している様子。
![スクリーンショット 2021-08-12 10.28.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126781/73505e1a-8aaf-3753-eb75-8f5c26143480.png)

nginxを動かしたとき

```
% docker run -p 8080:80  nginx 
```

![スクリーンショット 2021-08-12 10.30.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126781/0fccd883-626d-e45e-5b9c-78988e572c5b.png)

## Docker buildx マルチプラットフォームビルド
docker buildxでマルチプラットフォームイメージが構築できるようにする。

https://dev.classmethod.jp/articles/docker-multi-architecture-image-build/

ビルダーインスタンスを作成する

```
% docker buildx ls
NAME/NODE       DRIVER/ENDPOINT STATUS  PLATFORMS
desktop-linux   docker                  
  desktop-linux desktop-linux   running linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default *       docker                  
  default       default         running linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
% docker buildx create --name mybuilder
mybuilder
% docker buildx ls                     
NAME/NODE       DRIVER/ENDPOINT             STATUS   PLATFORMS
mybuilder       docker-container                     
  mybuilder0    unix:///var/run/docker.sock inactive 
desktop-linux   docker                               
  desktop-linux desktop-linux               running  linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default *       docker                               
  default       default                     running  linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
% docker buildx use mybuilder
% docker buildx ls
NAME/NODE       DRIVER/ENDPOINT             STATUS   PLATFORMS
mybuilder *     docker-container                     
  mybuilder0    unix:///var/run/docker.sock inactive 
desktop-linux   docker                               
  desktop-linux desktop-linux               running  linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default         docker                               
  default       default                     running  linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
```

ビルダーインスタンスを有効化する。（ビルド用のDockerイメージがPULLされてくる）

```
% docker buildx inspect --bootstrap
[+] Building 8.9s (1/1) FINISHED                                                                                                                                                                         
 => [internal] booting buildkit                                                                                                                                                                     8.9s
 => => pulling image moby/buildkit:buildx-stable-1                                                                                                                                                  8.3s
 => => creating container buildx_buildkit_mybuilder0                                                                                                                                                0.5s
Name:   mybuilder
Driver: docker-container

Nodes:
Name:      mybuilder0
Endpoint:  unix:///var/run/docker.sock
Status:    running
Platforms: linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
% docker buildx ls
NAME/NODE       DRIVER/ENDPOINT             STATUS  PLATFORMS
mybuilder *     docker-container                    
  mybuilder0    unix:///var/run/docker.sock running linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6
desktop-linux   docker                              
  desktop-linux desktop-linux               running linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default         docker                              
  default       default                     running linux/arm64, linux/amd64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
% docker image ls
REPOSITORY                                                              TAG               IMAGE ID       CREATED        SIZE
moby/buildkit                                                           buildx-stable-1   febfa34ea4a7   3 weeks ago    134MB
```

あとは下記のようなコマンドでマルチプラットフォームビルドができる。ローカルにはイメージ登録できないので、Docker HubやAWS ECRなどのレジストリに直接PUSHする。

```
% docker buildx build --platform linux/amd64,linux/arm64 -t xxxxxxxxxxxx.dkr.ecr.ap-southeast-2.amazonaws.com/photo-view-mp:v1.0 --push .
```

# zsh history
zshのhistory機能の設定を変更。デフォルトだと複数のターミナルのhistoryが共有されないので、setopt share_historyを設定。あとは履歴の数を変更。

```
export HISTSIZE=1000
export SAVEHIST=10000
setopt share_history
setopt hist_ignore_dups
setopt extended_history
```

# Java 1.8
2021.08.14

hadoopを使ってみたかったので、Javaをインストール。homebrewで1.8をインストール。

```
% brew tap AdoptOpenJDK/openjdk
% brew install adoptopenjdk8
% java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)
```

バージョン切り替えができるようにjenvもインストール。
jenvはnodenvのようにそれ自体でJavaをインストール機能はもたないらしい。なので、インストール自体はhomebrewで行った後で、jenvに登録する流れ。

```
% anyenv install jenv 
% exec $SHELL -l
% jenv enable-plugin export
% exec $SHELL -l
% jenv add `/usr/libexec/java_home -v "8"`
openjdk64-1.8.0.292 added
1.8.0.292 added
1.8 added
% jenv global openjdk64-1.8.0.292
% jenv version
openjdk64-1.8.0.292 (set by /Users/xxxxxx/.anyenv/envs/jenv/version)
```

jenvで環境切り替え時にJAVA_HOMEも切り替わる

```
% echo $JAVA_HOME
/Users/xxxxxx/.anyenv/envs/jenv/versions/openjdk64-1.8.0.292
```

# Hadoop 3
2021.08.14

Hadoop 3をインストール。下記のサイトからaarch64用のバイナリをダウンロードして任意のディレクトリに展開。

https://hadoop.apache.org/releases.html

```
% ./bin/hadoop version
Hadoop 3.3.1
```

# Go
2021.08.28

Goをインストール。本家サイトからバイナリ(go1.17.darwin-arm64.pkg)をダウンロード。

https://golang.org/dl/

```
% go version
go version go1.17 darwin/arm64
```

# Ansible
2021.09.18
homebrewからAnsibleをインストール

```
brew install anaible
```

# Packer
2021.09.18
homebrewからPackerをインストール

```
brew install packer
```

# Microsoft Remote Desktop
2021.09.26
Apple StoreからRemote Desktopクライアントをインストール

# pyenvとpython
2021.10.01

```
anyenv install pyenv
exec $SHELL -l
pyenv install 3.9.7
```

anyenv initだとpyenvのバイナリの置き場所にパスが通っていなかったので.zshrcに下記を追記。

``` bash
eval "$(pyenv init --path)"
```

# Serverless Framework
2021.10.05

https://www.serverless.com/framework/docs/getting-started

```bash
curl -o- -L https://slss.io/install | bash
```

この方法ではarm64向けのbinaryがないというエラーが出た。

npmで入れると成功。

```
npm install -g serverless
```

# Microsoft Edge
2021.10.08

Safariのタブの仕様がかわって使いづらくなったのでEdgeに変えてみた。

# multipass

overlay2やbtrfsを使ってみるために、素のUbuntuがさわりたくなったのでmultipassをインストール。
すごくお手軽に環境構築できて便利。

https://multipass.run

macOS用のパッケージファイルをダウンロードしてインストール。

```bash
% multipass version       
multipass   1.8.1+mac
multipassd  1.8.1+mac
```

```bash
% multipass launch --cpus 2 --disk 20G --mem 4G --name ubuntu
% multipass list
Name                    State             IPv4             Image
ubuntu                  Running           192.168.64.2     Ubuntu 20.04 LTS
% multipass exec ubuntu -- uname -a
Linux ubuntu 5.4.0-92-generic #103-Ubuntu SMP Fri Nov 26 16:15:10 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
% multipass shell ubuntu
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-92-generic aarch64)
```

# localstack

2022.01.22

AWSの擬似サービスをローカルで実行できるOSS。
内部の仕組みを調べてみたくて、インストール。

https://docs.localstack.cloud/overview/

```bash
$ python3 -m pip install localstack
```

awslocalコマンドもインストール。アクセス先がlocalstackになるawsコマンド。

```bash
pip install awscli-local
```

# Wireshark

2022.01.22

localstackがどんな通信をしているか見たくなったのでインストール。
apple silicon用のバイナリもあった。

https://www.wireshark.org/download.html

# rbenvとruby

2022.02.13

railsを使いたかったのでrubyをインストール。

```bash
% anyenv install rbenv
% rbenv install 3.1.0
% cd xxxxxxxx
% rbenv local 3.1.0
% exec $SHELL -l
% which ruby
/Users/xxxxxxxx/.anyenv/envs/rbenv/shims/ruby
```

bundlerとrailsをインストール

```bash
gem install bundler
gem install rails
% exec $SHELL -l
% which rails
/Users/xxxxxxxx/.anyenv/envs/rbenv/shims/rails
% rails --version
Rails 7.0.2.2
```

# phpenvとphp

2022.04.09

モダンなPHPを動かしてみたかったので、phpをインストール

```bash
anyenv install phpenv
exec $SHELL -l
phpenv install 7.4.28


brew install pkg-config
brew install openssl
```
# AWS Session Manager Plugin

Session Manager経由でEC2インスタンスに接続するためにプラグインをインストール。

https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-verify

```bash
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/mac/sessionmanager-bundle.zip" -o "sessionmanager-bundle.zip"
unzip sessionmanager-bundle.zip
sudo ./sessionmanager-bundle/install -i /usr/local/sessionmanagerplugin -b /usr/local/bin/session-manager-plugin
```