20201120のMacに関する記事は7件です。

MacOS(Catalina)でHeimdallを使いたい

そのままだとcatalinaに対応していないので、パッチを当ててビルドします。

libusb,qt5,cmakeが必要なので、インストールしていない場合はbrewでインストールします。

brew install libusb
brew install qt5
brew install cmake

ビルドとインストール

git clone https://gitlab.com/BenjaminDobell/Heimdall.git
cd Heimdall
wget https://gitlab.com/BenjaminDobell/Heimdall/-/merge_requests/468.diff
git apply 468.diff
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DQt5Widgets_DIR=/usr/local/opt/qt5/lib/cmake/Qt5Widgets ..
make
sudo cp bin/heimdall /usr/local/bin

参考

https://gitlab.com/BenjaminDobell/Heimdall/-/issues/513

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Homebrewを複数ユーザーで使おうとすると、パーミッションエラー

すでにHomebrewをインストールして使っていたMacに新ユーザーを追加して、そちらでもHomebrewを使おうとしたら、パーミッションエラーが起こった。

せっかくなので、対処法とともに残します。

環境

  • MacBook Pro (13-inch, 2020)
  • macOS Catalina 10.15.7
  • 新ユーザーは管理者として作成している

経緯

brew installでパーミッションエラー発生

brew installでパッケージをインストールしようとしたところ、パーミッションエラーが出た。

エラーメッセージでは sudo chown -R $(whoami) /usr/local/Cellar を実行するようにアナウンスされる。

が、これだとオーナーを新ユーザーに変更するだけなので、現行ユーザー側でbrew installなどを実行しようとすると、きっと同じエラーが発生する。

現状のパーミッション

/user/localディレクトリと、その配下の各ディレクトリの所有者は、下記の通り。

ディレクトリ パーミッション ユーザー グループ
/user/local drwxr-xr-x root wheel
/user/local/配下 drwxr-xr-x 現行ユーザー admin
/user/local/Cellar drwxr-xr-x 現行ユーザー admin
/user/local/Homebrew drwxr-xr-x 現行ユーザー admin

対応

新ユーザーは管理者として作成しているので、adminグループに属している。しかし、/user/local/配下の各ディレクトリにはadminグループへの書き込み権限が無かった。

そこで、adminグループへの書き込み権限を与える。

$ sudo chmod -R g+w /user/local/*

これで、ひとまずbrew installは完了できた。brew doctorの内容も、概ね問題なさそう。

/usr/local自体への権限付与はできなかった

「Homebrew 複数ユーザー」などで検索すると、 /usr/local 自体のグループと書き込み権限を変更しようとする記事がいくつかあった。

$ sudo chgrp admin /usr/local
$ chmod -R g+w /usr/local

しかし、実行しようとするとエラーになってしまった。

~ $ sudo chgrp admin /usr/local
chgrp: /usr/local: Operation not permitted

Homebrewの再インストールでも解決できるようだが、すでにインストール済みのパッケージの再インストールも必要になるので、あまりやりたくなかった。

なので、この方法は見送った。

残る問題

都度、権限のメンテナンスが必要そう

どちらかのユーザーで新しいパッケージをインストールすると、/user/local/Cellar/パッケージ, /user/local/Homebrew/配下の権限がまた変わってしまうので、なにか書き込み必要なときには、再度上記コマンドの実行が必要そう。

そもそもホームディレクトリにインストールしたい

本当は、各ユーザーのホームディレクトリにHomebrewをインストールしたい。以下の記事あたりが参考になりそう。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ガンダムっぽいカラースキーム@vim

つくってみた

vimの、ガンダム(っぽい)カラースキーム。

vimのロボット操作感アップ!?

hnsol/vim-deep-space
→ガンダム THE ORIGINっぽいかんじで(darkのみ)
screenshot_deepspace-gundam.png

hnsol/vim-one-g
→キュベレイっぽい感じで(light/dark)


インストール

通常のプラグイン管理ツールなどで。

vim-plugの場合

Plug 'hnsol/vim-deep-space'
set termguicolors
set background=dark
colorscheme deep-space
Plug 'hnsol/vim-one-g'
set termguicolors
set background=dark
colorscheme one
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M1 Macの開発環境

MacBook Pro (M1)でのメモです。インストールできるかどうか状況確認メモです。

自分がよく使うものを中心に。なるべくARMネイティブになるように。PowerPC->x86->x86_64とユニバーサルバイナリを挟んで対応してきたMacPortsはこういう過渡期に強いです。

編集リクエストウェルカムです。

現在の状況

※上流の言語がまだサポートしていないもの(Go製のもの)はまだリストに入れていません(例: Hugo)

IDE/エディタ

状況 アプリ バージョン arch インストール メモ(記録日)
✔︎ Visual Studio Code exploration arm64 insider build 11/24更新: Insiderページの右下のARM64 Experimentalを選べばARMネイティブ
✔︎ Vim 8.2.1719 arm64 MacPorts 11/21
NeoVim 0.4.4 arm64 MacPorts 11/22: ビルド失敗
Emacs 27.1 arm64 MacPorts 11/21: ビルド失敗
✔︎ Emacs 27.1 x86_64 バイナリインストーラ 11/23
✔︎ GoLand 2020.2.3 universal(x86_64/i386) 公式サイト 11/20: x86_64向けGoを検知してビルド&実行までできた
✔︎ Visual Studio for Mac 2019 x86_64 公式サイト 11/24
Eclipse 2020-09 x86_64 公式サイト 11/24: JDKが選べるが、arm64JDKを指定するとエラー

CLIツール/パッケージマネージャ

状況 アプリ バージョン arch インストール メモ(記録日)
✔︎ MacPorts 2.6.4 universal(x86_64/arm64) Big Sur版 11/20
✔︎ CMake 3.18.5 arm64 MacPorts 11/20: なにかの依存で入った
✔︎ Ninja 1.10.1 arm64 MacPorts 11/24
✔︎ TexLive 2020 arm64 MacPorts 11/21: +fullでインストール。途中texlive-fonts-extraでめちゃ時間かかる
✔︎ the_silver_searcher 2.2.0 arm64 MacPorts 11/20
✔︎ Doxygen 1.8.20 arm64 MacPorts 11/22
✔︎ Graphviz 2.40.1 arm64 MacPorts 11/22
✔︎ jq 1.6 arm64 MacPorts 11/22
✔︎ word2vec 20170716 arm64 MacPorts 11/22
✔︎ mecab 0.996_0 arm64 MacPorts 11/22

プログラミング言語

状況 アプリ バージョン arch インストール メモ(記録日)
✔︎ Python 3.8.6 arm64 MacPorts 11/20
Python 3.9 arm64 MacPorts 11/20: ビルド失敗
Python 3.9 arm64 ソースビルド 11/20: ビルド失敗
✔︎ Python master arm64 ソースビルド 11/25
✔︎ Ruby 2.6.3p62 arm64 MacPorts 11/20
✔︎ Ruby 2.7.1p83 arm64 MacPorts 11/21
Node.js 12 arm64 MacPorts 11/20: icuのビルドで失敗/upstreamの12への修正まち
Node.js 14 arm64 MacPorts 11/20: icuのビルドで失敗/upstreamの14への修正まち
✔︎ Node.js 14.15.1 x86_64 公式サイト 11/20
✔︎ Node.js master arm64 ソースビルド 11/25
✔︎ PHP 7.4.12 arm64 MacPorts 11/21
✔︎ Perl 5.26 arm64 MacPorts 11/20: なにかの依存で入った
✔︎ Perl 5.28 arm64 MacPorts 11/21: TexLiveの依存で入った
✔︎ Perl 5.30 arm64 MacPorts 11/21: TexLiveの依存で入った
Go 1.15.5 arm64 ソースビルド 11/20: 途中で止まる
Go master arm64 issueの手順でビルド ビルドはできたがこのコメントの署名ではダメ。きちんとやるにはお布施が必要?
✔︎ Go 1.15.5 x86_64 公式サイト 11/20
✔︎ Java 8/11/13/16-ea arm64 Azul Zulu 11/21
✔︎ Lua 5.3.5 arm64 MacPorts 11/22: neovimの依存で入った
Erlang 23.1 arm64 MacPorts 11/23: 途中で止まる
Erlang 23.1 arm64 ソースビルド 11/23: configureで止まる
✔︎ Erlang master arm64 ソースビルド 11/23

DB/サーバー

状況 アプリ バージョン arch インストール メモ(記録日)
✔︎ PostgreSQL 11.9 arm64 MacPorts 11/21
✔︎ MariaDB 10.5.7 arm64 MacPorts 11/21
✔︎ MongoDB 4.4.2 arm64 MacPorts 11/21
Redis 6.0.6 arm64 MacPorts 11/22: ビルド失敗
✔︎ Redis snapshot arm64 ソースビルド 11/24
✔︎ Apache2 2.4.46 arm64 MacPorts 11/22
✔︎ Nginx 1.19.4 arm64 MacPorts 11/22
✔︎ ZeroMQ 4.3.3 arm64 MacPorts 11/22
✔︎ DBngin Build 30 x86_64 公式サイト 11/22: redis起動しない。その他OK

デスクトップアプリケーション

状況 アプリ バージョン arch インストール メモ(記録日)
✔︎ Google Chrome 87.0.4280.67 universal(x86_64/arm64) 公式サイト 11/20
✔︎ Slack x86_64 AppStore 11/20
✔︎ Kindle x86_64 AppStore 11/21
✔︎ KeePassXC 2.6.2 x86_64 公式サイト 11/20
✔︎ iTerm2 3.4.1 universal(x86_64/arm64) 公式サイト 11/20
✔︎ HandBrake 1.4.0-beta1 arm64 GitHubのインストーラ 11/23

ゲーム/グラフィックス

状況 アプリ バージョン arch インストール メモ(記録日)
✔︎ Unreal Engine 4 4.25.4 x86_64 Epic Game Launcher 11/20:初回起動とシェーダービルドはファンがめちゃ回るのでAirユーザーには辛そう。一度起動すると高速。
✔︎ Godot Game Engine 3.2.3 x86_64 公式サイト 11/20: 署名されてないので右クリックで注意ダイアログを開いて強制オープンが必要
Godot Game Engine 3.2.4 beta 2 universal(x86_64/arm64) 公式サイト 11/21: 起動せず
✔︎ Blender 2.90.1 x86_64 公式サイト 11/21
Blender arm64 MacPorts 11/21: 依存パッケージのopenimageioがamd64非対応でインストール不可
ffmpeg arm64 MacPorts 11/22: arm64非対応
✔︎ ffmpeg ソースビルド arm64 MacPorts 11/24
gimp arm64 MacPorts 11/22: 依存パッケージのffmpegがインストール不可
inkscape arm64 MacPorts 11/22: 依存パッケージのlibrsvgがインストール不可
✔︎ Figma x86_64 公式サイト 11/25
✔︎ draw.io desktop 13.9.9 x86_64 公式サイト 11/25: electron-builderが対応になったらPR出したい

他の方のレポート

DTMステーション

音楽系のアプリの動作レポート。ゲームやグラフィックスはシェーダーやGPUによるところが多く、そこの変換のロスがないため、効率良く動作しますが、同じクリエイティブ系でも音楽はそうはいかないため、ネイティブアプリが出揃うまではパフォーマンスのペナルティは大きいようです。ただ、iOSアプリの活用など、新しい可能性も秘めているので、将来が楽しみですね。

西川和久の不定期コラム

CrossOver 20でWindowsアプリを動かす。日本語フォントもIMEも問題なしとのこと。

細かいメモ

バイナリの確認

どっちのバイナリか?はfileコマンドで調べている。32bit/64bit共存時代はアクティビティモニタで見えた気がしたが、今回は違いはない。スクリプト言語製のものはランタイムを調査。

11/22: コメントで指摘いただきましたが、アクティビティモニタの表示項目のアーキテクチャを有効にするとみれます

MacPortsはportコマンドはスクリプト。

% file /opt/local/bin/port
/opt/local/bin/port: a /opt/local/libexec/macports/bin/tclsh8.5 script text executable, ASCII text

そいつのランタイムのtclはユニバーサル。かっこいい。

% file /opt/local/libexec/macports/bin/tclsh8.5
/opt/local/libexec/macports/bin/tclsh8.5: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]
/opt/local/libexec/macports/bin/tclsh8.5 (for architecture x86_64): Mach-O 64-bit executable x86_64
/opt/local/libexec/macports/bin/tclsh8.5 (for architecture arm64):  Mach-O 64-bit executable arm64

Docker

がんばるよ表明

https://www.docker.com/blog/apple-silicon-m1-chips-and-docker/

Go

2021/2リリースの1.16に多数のissueが登録されている。ビルドはできるようになった模様。例年12月にでるbeta1でバイナリダウンロードできるようになるかな。

https://github.com/golang/go/issues/38485

issueコメントでクロスビルドの方法が紹介されていて、この通りにやると確かにビルドは成功し、go versionとかgo envは動くが、pkg/tool以下のコンパイラとかリンカが署名がうまくできずにコードのコンパイルはできない状況。

Electron

https://www.electronjs.org/blog/apple-silicon

11/17リリースの11.0でM1対応完了済み。VSCode/Slackがネイティブになる日も近い?

Java

https://adtmag.com/articles/2020/11/12/azul-supports-apple-silicon.aspx

Azul Systemsが16以降に対応し、その後8/11/13にバックポート済みで、15にもバックポート予定。

macOSのJavaのダウンロードはAzulのページから行えます。このリンクはJDK11のarm版です。ここからzipファイルをダウンロードして展開します。ここの中のzulu-11.jdkフォルダを/Library/Java/JavaVirtualMachinesフォルダに配置します。こんな風になるように。

% ls /Library/Java/JavaVirtualMachines
zulu-11.jdk

macOSはこのフォルダに配置されたJavaのJDKを認知して、/usr/bin以下のjavaコマンドやjavacコマンドはここに置かれたJDKにフォワードしてくれます。バージョンを見ると今置いたJDKの情報が出てきます。

% java -version
openjdk version "11.0.9.1" 2020-11-04 LTS
OpenJDK Runtime Environment Zulu11.43+1007-CA (build 11.0.9.1+1-LTS)
OpenJDK 64-Bit Server VM Zulu11.43+1007-CA (build 11.0.9.1+1-LTS, mixed mode)

なお、このJDKをJetBrains製のIDEの実行ランタイムに設定することはできますが、起動しなくなりました。もし失敗して起動しなくなった時は、/Users/[ユーザー名]/Library/Application Support/JetBrains/GoLand2020.2goland.jdkというファイルを削除すると、デフォルトJDKで起動するように戻ります。焦って再インストールしても復元されませんのでお気をつけください。

Node.js

Node.js会長によると、このPRでM1対応はOKということになっているらしい。今のところmasterブランチのみで、12.20リリース候補ブランチとか14.xとか他のブランチにバックポートはされていないぽい。

Qt

作業中

https://bugreports.qt.io/browse/QTBUG-85279

Erlang

MacPortsはうまくいかなかったが、ソースビルドならできるという話を聞いたのでトライ。ウェブサイトにある23.1のコードはだめだったが、githubから落とした最新であればいけた。

$ git clone https://github.com/erlang/otp.git
$ cd otp
$ export MACOSX_DEPLOYMENT_TARGET=11.0.1
$ export ERL_TOP=`pwd`
$ ./otp_build autoconf
$ ./configure --prefix=/opt/local/erlang
$ make
$ sudo make install

MacPortsとかと混ざらないように、/opt/local/erlangに入れるようなコマンドになっています。/opt/local/erlang/binをパスに通せばOK。

Erlangはちょっと前にJITを装備して速度が数倍になるというアップデートがあったのですが、これへの対応はまだとのこと。

それでもネイティブで動かせば高速とのこと。

MacPorts

MacPortsはarm64版のバイナリをダウンロードしたり、ないものはビルドしてインストールしてくれる。よきよき。bzip2みたいなのはバイナリがあるので瞬間で終わる。

--->  Fetching archive for bzip2
--->  Attempting to fetch bzip2-1.0.8_0.darwin_20.arm64.tbz2 from https://kmq.jp.packages.macports.org/bzip2
--->  Attempting to fetch bzip2-1.0.8_0.darwin_20.arm64.tbz2.rmd160 from https://kmq.jp.packages.macports.org/bzip2
--->  Installing bzip2 @1.0.8_0
--->  Activating bzip2 @1.0.8_0
--->  Cleaning bzip2

3箇所問い合わせにいってバイナリがなければソースを落としてきてビルドする。ビルド中、全然CPUファンが回らない不思議体験。

--->  Fetching archive for xxhashlib
--->  Attempting to fetch xxhashlib-0.8.0_0.darwin_20.arm64.tbz2 from https://kmq.jp.packages.macports.org/xxhashlib
--->  Attempting to fetch xxhashlib-0.8.0_0.darwin_20.arm64.tbz2 from http://jog.id.packages.macports.org/macports/packages/xxhashlib
--->  Attempting to fetch xxhashlib-0.8.0_0.darwin_20.arm64.tbz2 from https://packages.macports.org/xxhashlib
--->  Fetching distfiles for xxhashlib
--->  Attempting to fetch xxhash-0.8.0.tar.gz from https://kmq.jp.distfiles.macports.org/xxhash
--->  Verifying checksums for xxhashlib
--->  Extracting xxhashlib
--->  Configuring xxhashlib
--->  Building xxhashlib
--->  Staging xxhashlib into destroot
--->  Installing xxhashlib @0.8.0_0
--->  Activating xxhashlib @0.8.0_0
--->  Cleaning xxhashlib

一度、icuのビルドがおかしくなったが、プロンプトに出てくる説明の通りに、port clean icuしたら治った。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

matplotlibインストール時のpolyfitエラー

matplotlibインストール時にエラーが出た

OSはMacOS BigSur。
python versionは3.6.10。
何も考えずに「numpy, pandas, matplotlib」をインストールしようとしたら、下記エラーが出た。

pip install matplotlib

RuntimeError: Polyfit sanity test emitted a warning, most likely due to using a buggy Accelerate backend. If you compiled yourself, see site.cfg.example for information. Otherwise report this to the vendor that provided NumPy.
RankWarning: Polyfit may be poorly conditioned

    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

対処法

インストールされたnumpyのバージョンが新しすぎる。らしい。
1.18を入れると動く。

pip install numpy==1.18
pip install matplotlib
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

コマンドラインから大量のpngとjpgを圧縮する

ウェブサイトで画像を使用する時に、
サイズの重い画像を軽量化することはよくあると思います。

TinyPNG

https://tinypng.com/

でも、このwebサービスでは以下のような問題がありました、

・web版だとアップロードした画像の行方(データを抜き取られてる可能性もなきにしもあらず)
・無料版だと、1ファイルづつアップロードするのが面倒
・大量のファイルをディレクトリを維持したまま一括で処理したい。

という思いがありました。


一番良いのは、ツールを買ってしまうことです。
ケチってもいいことはありません。
金で解決出来るものはどんどんしてしまいましょう!

ただ、エンジニアの端くれということもあり、
これからもそこそこ使いそうな処理なので、PC内で自分で自動化してしまおうということで、調べてみました。

調べたところ、以下のライブラリを使うのが良さそうです。

ライブラリ

pngquant (png用)

https://pngquant.org/
(tinypngの内部処理にも使われているらしい)

インストール

brew install pngquant

使い方 (他にもオプション有り)

pngquant --ext .png --force -v .test.png (圧縮 / 出力ファイル名そのまま / 強制上書)
pngquant --ext .png --force -v *.png (圧縮 / 出力ファイル名そのまま / 強制上書 / カレントのjpg全部)

jpegoptim (jpg用)

https://github.com/tjko/jpegoptim

インストール

brew install jpegoptim

使い方 (他にもオプション有り)

jpegoptim test.jpg (圧縮)
jpegoptim test.jpg test2.jpg (圧縮 / 複数)
jpegoptim --strip-all test.jpg (圧縮/メタ全部消す)
jpegoptim --strip-all --max=90 test.jpg (圧縮 /90% / メタ全部消す)
jpegoptim --strip-all --max=90 *.jpg (圧縮 /90% / メタ全部消す / カレントのjpg全部)

使いやすいようにカスタマイズ

ここまでの情報はネット上にたくさん出てくるのですが、

再帰ディレクトリ的に処理をする

という方法がなかなかうまくいきませんでした。

例えば、

pngquant --ext .png --force -v img/*/*.png

img/aaa.png → NG
img/hoge/bbb.png → OK

この書き方だと、部分的に無視されてしまいます。


pngquant --ext .png --force -v img/*.png img/*/*.png img/*/*/*.png

img/aaa.png → OK
img/hoge/bbb.png → OK
img/hoge/huga/ccc.png → OK

この書き方だと、一見良さそうですが、もっと階層がある場合にカバーできません。
そして、特定のパターンの階層にファイルが無いとエラーになってしまいました。


色々調べた結果が、こちら。

https://stackoverflow.com/questions/9647920/recursively-batch-process-files-with-pngquant

find . -name '*.png' -exec pngquant --ext .png --force -v {} \;

xargsの方が速いらしい
https://qiita.com/legitwhiz/items/e609537fb6226081f5b5

find . -name '*.png' | xargs pngquant --ext .png --force -v

npm scriptsに使いやすいようにまとめておく

これで、pngとjpgがディレクトリそのままで圧縮される。
大量のファイルだと止まるかもしれない(未検証)。

  "scripts": {
    "optim": "npm run optim:png && npm run optim:jpg",
    "optim:png": "find . -name '*.png' | xargs pngquant --ext .png --force -v",
    "optim:jpg": "find . -name '*.jpg' | xargs jpegoptim --strip-all --max=90",
  },
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLで"Can't connect to local MySQL server through..."って出た時の対処法

"Can't connect to local MySQL server through..."って出た時の対処法

環境

  • MacOS : Catalina - 10.15.7
  • MySQL : 8.0.22 for osx10.15

起きたこと

1、Djangoのサーバが動かない


とある用事でMacBookを再起動させたあとにDjango触ろうとした時のお話。

xxx@yyy $ python manage.py runserver

を叩いてローカルにサーバを立てようとしたら、

django.db.utils.OperationalError: (1130, "Host '10.0.2.2' is not allowed to connect to this MySQL server")

って出てきた。書いてある通り、MySQL関係のエラーっぽい。


2、MySQLに入れない


MySQLを確認したいので下記コマンドを打つが、

xxx@yyy $ mysql -u root -p

って入力したら、

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

とエラーを吐かれてMySQLが使えなかった。

原因

結果として、原因は再起動と同時にMySQLのサーバが止まってしまっていたこと。

そこで、

xxx@yyy $ mysql.server restart

を叩くことで解決した。

xxx@yyy $ mysql -u root -p

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

いけた。

比較的簡単に解決してよかった。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む