memo.xight.org

日々のメモ

MacからBrother製プリンタでL版印刷する

Summary

用紙サイズを幅127mm, 高さ89mm で印刷しようとすると、プリンタにエラーが表示された。

用紙サイズが不一致です[多目的トレイ]
パソコン/携帯端末から受信したデータ:
                 A4
   受信したデータと多目的トレイに
 入っている用紙サイズと異なります
        印刷を続けますか?

MFC-J6997CDWのエラー表示

対策

用紙サイズを幅127mm, 高さ89mm ではなく、幅89mm, 高さ127mm にする。

NG: 幅127mm, 高さ89mm

幅127mm, 高さ89mm

OK: 幅89mm, 高さ127mm

幅89mm, 高さ127mm

Apple Silicon + MacTeX

Summary

$ wget http://www.tug.org/mactex/MacTeX-2020-Universal.pkg
$ pkgutil --expand MacTeX-2020-Universal.pkg mactex
$ pax -rz -f mactex/MacTeX-2020-Universal-Start.pkg/Payload
$ mv usr/local/texlive/2020/bin/custom /usr/local/texlive/2020/bin/


/usr/local/texlive/2020/bin/custom に PATH を通す

path=(
	$path
	/usr/local/texlive/2020/bin/custom(N-/)
)


確認

$ which tex
/usr/local/texlive/2020/bin/custom/tex
$ lipo -archs $(which tex)
x86_64 arm64


Reference

MacTeX - About ARM
http://www.tug.org/mactex/aboutarm.html

via

奥村 晴彦 先生 - macOS - M1 Mac
https://oku.edu.mie-u.ac.jp/~okumura/macosx/m1.html

ruby build時に closure.c がコンパイルできない

Summary

GitHub Pages で利用する ruby 2.7.1 を arm64 でbuildしようとしたら、
closure.c のコンパイル時にエラーが発生。

compiling closure.c
closure.c:264:14: error: implicit declaration of function 'ffi_prep_closure' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
	result = ffi_prep_closure(pcl, cif, callback, (void *)self);
			 ^
1 error generated.
make[2]: *** [closure.o] Error 1
make[1]: *** [ext/fiddle/all] Error 2
make: *** [build-ext] Error 2

インストール

$ git clone https://github.com/postmodern/ruby-install.git
$ cd ruby-install
$ ./bin/ruby-install ruby 2.7.1 -c -- --with-arch=arm64 --prefix=$(rbenv root)/versions/2.7.1-arm64 CFLAGS=-DUSE_FFI_CLOSURE_ALLOC=1


Reference

Andre.Arko.net - 2020-06-30 - Building Ruby on arm64 macOS
https://andre.arko.net/2020/06/30/building-ruby-on-arm64-macos/

Apple Silicon + Big Sur 11.3 Beta + anyenv + pyenv + python3.10.0a5

Summary

pyenv で python をインストールすると arm64-apple が認識できない。

checking build system type... Invalid configuration `arm64-apple-darwin20.4.0': machine `arm64-apple' not recognized
configure: error: /bin/sh ./config.sub arm64-apple-darwin20.4.0 failed

config.sub を入れ替えて configure

$ cd /var/folders/PATH/TO/python-build.YYYYMMDDhhmmss.xxxxx.XXXXXX/Python3.10.0a5
$ mv config.sub config.sub.bak
$ wget https://raw.githubusercontent.com/gcc-mirror/gcc/master/config.sub
$ cd ..
$ ./configure --prefix=$(pyenv root)/versions/3.10.0a5 \
              --enable-unicode=ucs4 \
              --with-openssl=$(brew --prefix openssl) \
              --enable-optimizations
$ make
$ make install


symlinkを作成

$ cd $(pyenv prefix)/bin
$ ln -s python3.10 python
$ ln -s pydoc3.10 pydpc
$ ln -s idle3.10 idle
$ ln -s pip3.10 pip


確認

$ pyenv global 3.10.0a5
$ python --version
Python3.10.0a5
$ lipo -archs $(pyenv prefix)/bin/python3.10
arm64


課題: Universal binary でmakeできていない

PATH/TO/Python-3.x.x/Mac/README.rst を参照

$ ./configure --enable-universalsdk \
			  --with-universal-archs=universal2

Apple Silicon + anyenv + rbenv + ruby2.7.2

Summary

rbenv + ruby-build で ruby をインストールすると arm64-apple が認識できない。

checking for ruby... $HOME/.anyenv/envs/rbenv/shims/ruby
tool/config.guess already exists
tool/config.sub already exists
checking build system type... Invalid configuration `arm64-apple-darwin20.2.0': machine `arm64-apple' not recognized
configure: error: /bin/sh tool/config.sub arm64-apple-darwin20.2.0 failed


config.sub を入れ替えて configure

$ cd /var/folders/PATH/TO/ruby-build.YYYYMMDDhhmmss.xxxxx.XXXXXX/ruby-2.7.2/tool
$ mv config.sub config.sub.bak
$ wget https://raw.githubusercontent.com/gcc-mirror/gcc/master/config.sub
$ cd ..
$ ./configure --prefix=$(rbenv root)/versions/2.7.2-arm64
$ make
$ make install


確認

$ rbenv global 2.7.2-arm64
$ ruby --version
ruby 2.7.2p137 (2020-10-01 revision 5445e04352) [arm64-darwin20]
$ lipo -archs $(rbenv prefix)/bin/ruby
arm64


問題

x86_64 版を利用すると、
$GEM_HOME/*/*.bundleで x86 と arm64 で競合が起こる。

$GEM_HOME/gems/psych-3.2.1/lib/psych.bundle: mach-o, but wrong architecture


x86版の .bundle ファイル を退避してアップデート
$ mv $GEM_HOME/gem $GEM_HOME/gem-x86_64
$ gem update

Apple Silicon + Homebrew

Summary

TimeMachineでx86版からARM版に移行したときにハマった点をメモ。
アクティビティモニターを右クリックしてアーキテクチャを表示しておくと良い。

ARM版 Homebrewのインストール

ARM版 Homebrewは /opt/homebrew にインストールするのが推奨されている。
$ cd /opt
$ sudo mkdir homebrew
$ sudo chown $(whoami):admin homebrew
$ curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
$ /opt/homebrew/bin/brew update


ハマったところ1: uname

uname でアーキテクチャを確認できていなかった
Homebrewでx86版のcoreutilsをインストールしていたため。
$ uname -m
x86_64
$ which uname
/usr/local/opt/coreutils/libexec/gnubin/uname

$ /usr/bin/uname -m
arm64


ハマったところ2: x86版のRuby gems

/Library/Ruby/Gems/2.6.0/gems に x86版のRuby lib/*.bundle ファイルが残ってたため, it is not a compatible arch
TimeMachine で移行するときにありがちっぽい。

$ /opt/homebrew/bin/brew
Traceback (most recent call last):
	22: from /opt/homebrew/Library/Homebrew/brew.rb:31:in `<main>'
	21: from /opt/homebrew/Library/Homebrew/brew.rb:31:in `require_relative'
	20: from /opt/homebrew/Library/Homebrew/global.rb:23:in `<top (required)>'
	19: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	18: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	17: from /opt/homebrew/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.0/lib/active_support/core_ext/numeric/time.rb:3:in `<top (required)>'
	16: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	15: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	14: from /opt/homebrew/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.0/lib/active_support/duration.rb:3:in `<top (required)>'
	13: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	12: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	11: from /opt/homebrew/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.0/lib/active_support/core_ext/array/conversions.rb:3:in `<top (required)>'
	10: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 9: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 8: from /opt/homebrew/Library/Homebrew/vendor/bundle/ruby/2.6.0/gems/activesupport-6.1.0/lib/active_support/xml_mini.rb:3:in `<top (required)>'
	 7: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 6: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 5: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/time.rb:3:in `<top (required)>'
	 4: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 3: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
	 2: from /Library/Ruby/Gems/2.6.0/gems/date-3.0.0/lib/date.rb:4:in `<top (required)>'
	 1: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require': dlopen(/Library/Ruby/Gems/2.6.0/gems/date-3.0.0/lib/date_core.bundle, 0x0009): could not use '/Library/Ruby/Gems/2.6.0/gems/date-3.0.0/lib/date_core.bundle' because it is not a compatible arch - /Library/Ruby/Gems/2.6.0/gems/date-3.0.0/lib/date_core.bundle (LoadError)


x86版のRuby gemsを退避
$ cd /Library/Ruby/Gems/2.6.0
$ sudo mv gems gems-bak
$ /opt/homebrew/bin/brew list


zshenvでpathを通しておく

if [[ "$OSTYPE" == "darwin"* ]] && [[ "$CPUTYPE" == "arm64" ]]; then
	path=(
		/opt/homebrew/bin(N-/)
		/opt/homebrew/opt/coreutils/libexec/gnubin(N-/)
		/opt/homebrew/opt/binutils/libexec/gnubin(N-/)
		/opt/homebrew/opt/findutils/libexec/gnubin(N-/)
		/opt/homebrew/opt/diffutils/libexec/gnubin(N-/)
		/opt/homebrew/opt/grep/libexec/gnubin(N-/)
		/opt/homebrew/opt/gnu-tar/libexec/gnubin(N-/)
		/opt/homebrew/opt/gnu-sed/libexec/gnubin(N-/)
		/opt/homebrew/opt/gawk/libexec/gnubin(N-/)
		/opt/homebrew/opt/openssl@1.1/bin(N-/)
		$path
	)
fi

if [[ "$OSTYPE" == "darwin"* ]] && [[ "$CPUTYPE" == "arm64" ]]; then
	manpath=(
		/opt/homebrew/share/man(N-/)
		/opt/homebrew/opt/coreutils/libexec/gnuman(N-/)
		/opt/homebrew/opt/binutils/libexec/gnuman(N-/)
		/opt/homebrew/opt/findutils/libexec/gnuman(N-/)
		/opt/homebrew/opt/diffutils/libexec/gnuman(N-/)
		/opt/homebrew/opt/grep/libexec/gnuman(N-/)
		/opt/homebrew/opt/gnu-tar/libexec/gnuman(N-/)
		/opt/homebrew/opt/gnu-sed/libexec/gnuman(N-/)
		/opt/homebrew/opt/gawk/libexec/gnuman(N-/)
		/opt/homebrew/opt/openssl@1.1/man(N-/)
		$manpath
	)
fi


ARM版のパッケージをインストールし、archを確認

$ /opt/homebrwe/bin/brew install zsh
$ lipo -archs /opt/homebrew/bin/zsh
arm64


Reference

Homebrew Documentation
https://docs.brew.sh/Installation

Segmentation violation exception with Docker2.5.0

Summary

macOS Big Sur 11.0.1 Beta, Docker 2.5.0
Docker起動時に Fatal Error, Segmentation violation exception が発生する。
VirtualBox kernel extensionが原因とのこと。

ロードされているVirtualBox関連のカーネルエクステンションを確認

% kmutil showloaded | grep virtualbox
No variant specified, falling back to release
  236    3 0xffffff7fa156a000 0xb2000    0xb2000    org.virtualbox.kext.VBoxDrv (6.1.16) DAF044F0-5043-3B8E-8758-5A462567BDAA <8 6 5 3 1>
  237    0 0xffffff7fa1647000 0x5000     0x5000     org.virtualbox.kext.VBoxUSB (6.1.16) CA33FA52-5933-3F0E-9B40-8B1ECF4D6A36 <236 199 64 8 6 5 3 1>
  238    0 0xffffff7fa1642000 0x4000     0x4000     org.virtualbox.kext.VBoxNetFlt (6.1.16) C93EAF6A-676F-3370-BAE2-BDFD2BF16582 <236 8 6 5 3 1>
  239    0 0xffffff7fa163c000 0x2000     0x2000     org.virtualbox.kext.VBoxNetAdp (6.1.16) 76200407-D2F0-3D84-BCCF-7EEA18F16654 <236 6 5 1>


Workaround

sudo kmutil unload -b org.virtualbox.kext.VBoxUSB
sudo kmutil unload -b org.virtualbox.kext.VBoxNetFlt
sudo kmutil unload -b org.virtualbox.kext.VBoxNetAdp
sudo kmutil unload -b org.virtualbox.kext.VBoxDrv


ロードされているVirtualBox関連のカーネルエクステンションを確認

% kmutil showloaded | grep virtualbox
No variant specified, falling back to release


VirtualBoxを利用したい場合はVirtualBox関連のカーネルエクステンションをロードする

sudo kmutil load -b org.virtualbox.kext.VBoxUSB
sudo kmutil load -b org.virtualbox.kext.VBoxNetFlt
sudo kmutil load -b org.virtualbox.kext.VBoxNetAdp
sudo kmutil load -b org.virtualbox.kext.VBoxDrv


Reference

GitHub - docker/for-mac - Issues #5026 Segmentation violation exception with Docker edge on macos big sur beta 10
https://github.com/docker/for-mac/issues/5026

python3.9.0 + pyenv + macOS Big Sur + Homebrew

Install

CFLAGS="-I$(brew --prefix openssl)/include -I$(brew --prefix bzip2)/include -I$(brew --prefix readline)/include -I$(xcrun --show-sdk-path)/usr/include" CPPFLAGS="-I$(brew --prefix zlib)/include" LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix readline)/lib -L$(brew --prefix zlib)/lib -L$(brew --prefix bzip2)/lib" pyenv install 3.9.0

macOS Big Sur Beta 6 (20A5364e) + Karabiner Elements 12.93.0

Summary

Karabiner Elements 12.93.0 が Big Sur Beta 6 で動作するようになった。
これで、カスタムキーバインド、キーボードを跨いだ修飾キー利用が可能に。

Reference

GitHub - pqrs-org / Karabiner-Elements - Karabiner completely broken on macOS Big Sur #2331
https://github.com/pqrs-org/Karabiner-Elements/issues/2331

prqs.org - Karabiner-Elements for macOS Big Sur
https://karabiner-elements.pqrs.org/docs/macos-big-sur/

macOS Big Sur Public Beta 1 (20A5343j) でのトラブルと対応

Summary

macOS Big Sur Previewがリリースされたので、インストールしてみた。

Karabiner Elementsが動作しない

CapsLock と 右Command の入れ替え、Terminal系ではCapsLockを右Ctrlに変更していた。
hidutil によるキー入れ替え、iTerm2側でのキー入れ替えで対応。

~/Library/LaunchAgents/com.local.KeyRemapping.plist

hidutil key remapping generator for MacOS で生成したplistファイルを作成
(CapsLock -> 右Commandのみ)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>Label</key>
	<string>com.local.KeyRemapping</string>
	<key>ProgramArguments</key>
	<array>
		<string>/usr/bin/hidutil</string>
		<string>property</string>
		<string>--set</string>
		<string>{"UserKeyMapping":[
			{
			  "HIDKeyboardModifierMappingSrc": 0x700000039,
			  "HIDKeyboardModifierMappingDst": 0x7000000E7
			}
		]}</string>
	</array>
	<key>RunAtLoad</key>
	<true/>
</dict>
</plist>

一時的にキーリマップを動作させるには hidutil で UserKeyMapping の値を設定すれば良い

hidutil property --set '{"UserKeyMapping":[
{
  "HIDKeyboardModifierMappingSrc": 0x700000039,
  "HIDKeyboardModifierMappingDst": 0x7000000E7
}
]}'

iTerm2

[Preferences...] - [Keys] - [Remap Modifiers] から
右CommandキーをControlキーに変更

キーボード2台を跨いだ修飾キー操作が行えない。

Shift + Enter, Command + Enter, Shift + L などが行えない。諦め…。

Homebrew

brew upgrade でエラー発生

Error: Your Xcode (11.6) is too outdated.
Please update to Xcode 12.0 (or delete it).
Xcode can be updated from:
  https://developer.apple.com/download/more/

Error: Your CLT does not support macOS 11.0.
It is either outdated or was modified.
Please update your CLT or delete it if no updates are available.

Xcode 12 beta4, Command Line Tools for Xcode 12 beta 4 をインストール
Apple Developer - Downloads - More Downloads for Apple Developers からダウンロードしてインストール

sudo xcode-select -s /Applications/Xcode-beta.app


macOS Big Sur Public Beta 1 (20A5343j) で動作確認ができたアプリケーション

Microsoft Word for Mac 16.40 (20081000)
Microsoft Excel for Mac 16.40 (20081000)
Microsoft PowerPoint for Mac 16.40 (20081000)
Better Touch Tool 3.402 (1633)
iTerm2 3.4.0 beta2
TeX Live 2020
Scan Snap Home 1.8.0 (10)

macOS Big Sur Public Beta 1 (20A5343j) で動作しなかったアプリケーション

Karabiner Elements 12.10.1 (起動するが機能しない)
Backup and Sync from Google 3.50 (Backup and Sync has encountered a fatal error, and will now terminate.)
Bartender 3.1.23 (起動するが機能しない, Siriが起動する)

Reference

GitHub - pqrs-org / Karabiner-Elements - Karabiner completely broken on macOS Big Sur #2331
https://github.com/pqrs-org/Karabiner-Elements/issues/2331

hidutil key remapping generator for MacOS
https://hidutil-generator.netlify.app/

GitHub - amarsyla / hidutil-key-remapping-generator
https://github.com/amarsyla/hidutil-key-remapping-generator

GitHub - pqrs-org / Karabiner-DriverKit-VirtualHIDDevice
https://github.com/pqrs-org/Karabiner-DriverKit-VirtualHIDDevice

VirtualBox + sparsebundle

Summary

VirtualBox + sparsebundle[2016-02-23-1]
VBoxManageのコマンドが変更になった。

VirtualBoxの仮想ディスクを圧縮する[2015-08-26-3] と合わせ技

SDelete.exe, または dd で0埋めしてから
VBoxManage list hdds
VBoxManage modifymedium PATH/TO/TARGET.vdi --compact
hdiutil eject /dev/diskXsX
hdiutil compact PATH/TO/TARGET.sparsebundle