Browse Tag: osx

Homebrew cask の仕様がすこし変わった話

OS X 使いの皆さん定番の homebrew-cask ですが、おそらくクリスマス頃に仕様が少し変わったようです。

詳細のチケットは、こちらですが、要約すると、次のような感じになります。

  • 今まで ~/Applications へはすべてリンクだったが、移動するようになった
  • アプリケーションディレクトリは、すべて ~/Applications ではなく、/Applications になる
  • :target はしばらく動作するが、そのうち link に変更になる
  • Caskroom は、デフォルトで /opt/homebrew-cask/Caskroom となる
  • 上記のような理由で Caskroom 以下のバージョン番号のディレクトリは存在しなくなる

これはとても嬉しい変更です、例えば Google Chrome を homebrew-cask 経由でインストールした場合、今までだと 1Password が symlink のため動作しなかった問題があったので、これを根本的に解決できることになります。今までは、個人的にはまだ boxen を使っているので自動的に移動させるようなマニフェストを書いていましたが、これをしなくても済みます。

また、こちらのチケットにあるとおり、tap コマンドを使ったもののみに変更するようです。今までは、brew-cask というパッケージが必要でこれを更新するようになっていましたが、これから brew update コマンドのみで homebrew + homebrew-cask どちらもまとめて更新できるようになります。これはうれいしですね。

新しいシステムに切り替えるには、次のコマンドを実行するだけです。


$ brew uninstall --force brew-cask; brew update

簡単ですね、少し既存のもので試してみましたが、例えば google-chome をみると、次のようになっていますね。


$ brew cask info google-chrome
google-chrome: latest
Google Chrome
https://www.google.com/chrome/
/opt/boxen/homebrew-cask/Caskroom/google-chrome/latest (208 files, 184M)
https://github.com/caskroom/homebrew-cask/blob/master/Casks/google-chrome.rb
==> Contents
Google Chrome.app (app)
==> Caveats
The Mac App Store version of 1Password won't work with a Homebrew-Cask-linked Google Chrome. To bypass this limitation, you need to either:

+ Move Google Chrome to your /Applications directory (the app itself, not a symlink).
+ Install 1Password from outside the Mac App Store (licenses should transfer automatically, but you should contact AgileBits about it).

すべて同じようになっているのかなと思い、他のアプリでも確認してみましたが、なっていないようですね。


$ brew cask info flux
flux: 36-5
f.lux
https://justgetflux.com/
/opt/boxen/homebrew-cask/Caskroom/flux/36-5 (105 files, 2.7M)
https://github.com/caskroom/homebrew-cask/blob/master/Casks/flux.rb
==> Contents
Flux.app (app)

おそらく、順次変更しているのか、いつか内部的にまとめて切り替えるのかもしれません。

 

homebrew-cask を使っている人は、この機会に新しいアップデートに対応してみてはいかがでしょうか?

OS X (10.9) で PHP 5.6.2 で pgsql を組み込もうとしてはまったお話

OS X 10.9 で、pgsql 入りの PHP 5.6.2 を自分でコンパイルしてインストールしようとしたところ、結果いうと make の最後のリンクに失敗してしまってインストールできませんでした。

公式サイトから、PHP 5.6.2 をダウンロードして、次のような configure してみました。なお、事前に postgresql などは homebrew 経由で事前にインストール済みです。
インストール先は、homebrew 以下になっていますが、これは試験的なインストールのためです。


php-5.6.2$ ./configure --prefix=/opt/boxen/homebrew/Cellar/php56/5.6.2 --localstatedir=/usr/local/homebrew/var --sysconfdir=/usr/local/homebrew/etc/php/5.6 --with-config-file-path=/usr/local/homebrew/etc/php/5.6 --with-config-file-scan-dir=/usr/local/homebrew/etc/php/5.6/conf.d --with-iconv-dir=/usr --enable-dba --with-ndbm=/usr --enable-exif --enable-intl --enable-soap --enable-wddx --enable-ftp --enable-sockets --enable-zip --enable-shmop --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-mbstring --enable-mbregex --enable-bcmath --enable-calendar --with-zlib=/usr/local/homebrew/opt/zlib --with-ldap --with-ldap-sasl=/usr --with-xmlrpc --with-kerberos=/usr --with-gd --enable-gd-native-ttf --with-freetype-dir=/usr/local/homebrew/opt/freetype --with-icu-dir=/usr/local/homebrew/opt/icu4c --with-jpeg-dir=/usr/local/homebrew/opt/jpeg --with-png-dir=/usr/local/homebrew/opt/libpng --with-gettext=/usr/local/homebrew/opt/gettext --with-libedit --with-unixODBC=/usr/local/homebrew/opt/unixodbc --with-pdo-odbc=unixODBC,/usr/local/homebrew/opt/unixodbc --mandir=/usr/local/homebrew/Cellar/php56/5.6.2/share/man --with-mhash --with-curl=/usr --with-snmp=/usr --with-bz2=/usr --with-openssl=/usr --with-xsl=/usr/local/homebrew/opt/libxslt --with-apxs2=/usr/sbin/apxs --libexecdir=/usr/local/homebrew/Cellar/php56/5.6.2/libexec --with-mysql-sock=/tmp/mysql.sock --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --enable-pcntl --enable-zend-signals --enable-dtrace --disable-phpdbg --enable-opcache
php-5.6.2$ make
...
Undefined symbols for architecture x86_64:
"_lo_lseek64", referenced from:
_zif_pg_lo_seek in pgsql.o
"_lo_tell64", referenced from:
_zif_pg_lo_tell in pgsql.o
"_lo_truncate64", referenced from:
_zif_pg_lo_truncate in pgsql.o
ld: symbol(s) not found for architecture x86_64

そして、homebrew-php という、PHP に特化した Homebrew をラップしているものがあったので、試しにこれでインストールしてみました。


$ brew tap homebrew/dupes
$ brew tap homebrew/versions
$ brew tap homebrew/homebrew-php
$ brew install php56 --with-apache --with-pgsql
...

この方法だと、pgsql を組み込んでインストールすることができました。
実は、最初に紹介した configure オプションは、この PHP5.6 Formula でインストールしたときの configure とまったく同じものだったのですが、なぜか同じ configure オプションでもインストールできませんでした。おそらく、make するときの環境変数の設定まわりできっと Homebrew がよきにやってくれているようなのですが、すこしソースコードを追った感じだと具体的な原因は分かりませんした。

実はいままで phpenv + php-build の環境で使って開発をしていたのですが、そもそも PHP をまったく切り替えることがないし、phpenv けっこう重いので、これを気に homebrew-php に切り替えて phpenv + php-build を使うのはやめることにしました。

これで、PHP まわりのローカル環境の開発がスッキリしました。あわせて、msgpack や redis などもあるので、インストールしてさくっと組み込むことができました。

そして、ここまでのインストールもオプション付きでインストールするのが面倒、いつもローカルで使っている PHP の設定が include_path の設定がないなどがあったので、オリジナルの my-php56 を書いてみました。次のコマンドを使うと、さくっと今まで設定したものがインストールして、かつ php.ini の設定をしてくれるので便利だと思います。


$ brew tap n0ts/myformula
$ brew install my-php56

最後に homebrew 経由で curl や libxml2 が入っていると、apachectl -t でエラーになることがありますが、これは envvars だけの問題で動作はするので、気になる人は次のように直しておくとよいでしょう。


--- /usr/sbin/envvars-std 2014-01-16 10:08:32.000000000 +0900
+++ /usr/sbin/envvars 2014-11-13 07:35:17.000000000 +0900
@@ -20,6 +20,8 @@
#
if test "x$DYLD_LIBRARY_PATH" != "x" ; then
DYLD_LIBRARY_PATH="/usr/lib:$DYLD_LIBRARY_PATH"
+elif test "x$HOMEBREW_ROOT" != "x" ; then
+ DYLD_LIBRARY_PATH="$HOMEBREW_ROOT/lib:/usr/lib"
else
DYLD_LIBRARY_PATH="/usr/lib"
fi

日々使っている開発環境も、細切れ時間を見つけて、ちゃんとメンテナンスしていくのも重要なことですね

Homebrew で pyenv を使っていると fontforge がインストールできない問題

Homebrew で pyenv を使っているとき、次のように python 拡張を有効にした fontforge がインストールできません。


$ brew install --with-python fontforge

ちなみに “–with-python” を指定しないとインストールすることができますが、homebrew 経由で ricty がインストールできないので、”–with-python” は必須です。

こんなときは、pyenv を一時的に system python を使うようにしてから、インストールすると大丈夫でした。


$ cd /tmp
※ cd しなくても、忘れずに .python-version を削除しても大丈夫です
$ pyenv local system
$ brew install --with-python fontforge

ricty をインストールする場合は、手動で fontforge をインストールしなくても依存関係で自動的にインストールされます。


$ brew tap sanemat/font
$ brew install --dz ricty

–dz を指定すると、Adding straight single and double quotes to Inconsolata のフォントになるので、個人的には Inconsolata-dz の方が好みです。

さらに ricty には、powerline パッチもあてることができるのですが、2014/06/07 時点ではエラーが出てしまいます。この件は、issue をたてておきましたので、修正されるまでしばらく待ちましょう!

Emacs on OS X Mavericks 10.9 で distnoted プロセスが暴走する問題の解決方法

最近、どうも OS X Mavericks 10.9 で使用していると、distnoted というプロセスが CPU 使用率 100% 近くまでになってしまう現象になっていました。

ずっと、VMware Fusion の仮想サーバ 2 台ほど常時起動の環境だったので、そのせいかなと思っていましたが、どうも Emacs に原因があったようです・・・。

何とならない対策できないものかと調べたところ、emacs 24.3でdistnotedを暴走させないパッチ+inlineパッチのビルド手順です。sakito.jpの手順を修正したものです。 が見つかりました。

この手順で、早速 Emacs にパッチをあてたところ distnoted というプロセスが CPU 使用率 100% 近くまでになる現象が収まったような気がします。

これはさっそくということで、homebrew の myemacs という独自の homebrew formula を書いてみました。

公式の Emacs Formula でも同じパッチが一つあたっているようですが、独自に作ってみました。

使い方は、次のように実行するだけです。


$ brew tap n0ts/myformula
$ brew install myemacs

そうすると、~/Applications に Emacs.app と $HOMEBREW_PREFIX/bin に emacs がインストールされます。

これでしばらく常時使用して様子を見たいと思います。
何気なく、普段ずっと使っている道具の調子がおかしいときは、定期的にチェックするようにしたほうがよさそうですね。

OS X で Shift+Space で入力ソースを切り替える方法

OS X で、Shift+Space を英語・日本語を切り替えるために KeyRemap4MacBook の Shift + Space to KANA/EISUU (toggle) を有効にしてしたのですが、最近しばらくすると急にこの設定がきかなくなって困っていました。この現象は、Google Groups に報告しておいたのですが、どうも原因が分からなかったので、システム設定標準の Select next source in Input menu のショートカットをなんとか切り替えることができないか調査してみました。

通常のキーボードの設定画面では、Shift+Space を押しても設定をすることができません。
そこで、直接設定ファイルを書き換えることでうまく行きました。

XCode をインストールしている環境でターミナルより、次のコマンドで設定ファイルを開きます。

$ open ~/Library/Preferences/com.apple.symbolichotkeys.plist

そうすると、plist 設定ファイルの編集画面を開きますので、AppleSymbolicHotKeys 以下の、次の2つの設定を編集します。

1. 61 > value > parameters > item 2 の値を 1572864 を Shift のキーコードである 131072 に変更します
2. 60 > value > parameters > item 2 の値を 1048576 を Option-Shift キーの値である 655360 に変更します

上記の二つの設定を編集したあと plist ファイルを保存して、再起動すると、キーボード設定画面が次のようになって、Shift + Space で入力リソースを切り替えることができます。

keyboard

この設定、個人的にはかなり必須なので、Boxen で自動化したいところなので、あわせて試してみたいと思います。

OSX で mysql5.6 環境下で mysql/mysql2 gem のインストールエラーがでた

OSX で mysql5.6 環境下で mysql/mysql2 gem のインストールエラーがでた。


Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

/Users/.../bin/ruby extconf.rb --with-mysql-config=/usr/lo
cal/mysql/bin/mysql_config
checking for mysql_ssl_set()... no
checking for rb_str_set_len()... no
checking for rb_thread_start_timer()... no
checking for mysql.h... no
checking for mysql/mysql.h... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/.../bin/ruby
--with-mysql-config

Gem files will remain installed in /Users/.../gems/mysql-2.9.1 for i
nspection.
Results logged to /Users/.../gems/mysql-2.9.1/ext/mysql_api/gem_make
.out

もちろん、事前に mysql_config はちゃんと設定している。

$ bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
$ bundle config build.mysql2 --with-mysql-config=/usr/local/mysql/bin/mysql_config

結論とすると、/usr/local/mysql/bin/mysql_config を次のように直せば良い。

--- /usr/local/mysql/bin/mysql_config-org 2013-08-13 11:52:25.000000000 +0900
+++ /usr/local/mysql/bin/mysql_config 2013-08-13 11:52:57.000000000 +0900
@@ -116,8 +116,8 @@
embedded_libs=" $ldflags -L$pkglibdir -lmysqld "
embedded_libs="$embedded_libs "

-cflags="-I$pkgincludedir -Wall -Wno-null-conversion -Wno-unused-private-field -Os -g -fno-strict-aliasing -DDBUG_OFF -arch x86_64 " #note: end space!
-cxxflags="-I$pkgincludedir -Wall -Wno-null-conversion -Wno-unused-private-field -Os -g -fno-strict-aliasing -DDBUG_OFF -arch x86_64 " #note: end space!
+cflags="-I$pkgincludedir -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF -arch x86_64 " #note: end space!
+cxxflags="-I$pkgincludedir -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF -arch x86_64 " #note: end space!
include="-I$pkgincludedir"

-Wno-null-conversion -Wno-unused-private-field というフラグを削除する必要があるみたい。

これは、mysql をアップデートしたときには、しばらく忘れずにやらにといけない。

これで mysql/mysql2 gem は無事インストールすることができるが、実際にアプリを実行してみると次のようエラーが出る。。。

dlopen(/Users/.../gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: /usr/local/mysql-5.5.28-osx10.6-x86_64/lib/libmysqlclient.18.dylib Referenced from: /Users/.../gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle Reason: image not found - /Users/.../gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle

備忘録としてのメモ。

libmysqlclient.18.dylib が見つからないらしい。

解決方法は、環境変数 DYLD_LIBRARY_PATH を定義するといいみたいだが、定義すると次のようなの警告が表示されてしまった。

dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid

ということで、次を実行して、アプリケーションサーバを再起動したら無事解決した。

$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

XCode 4.5 + RVM のインストール方法

XCode 4.5 がリリースされました。恒例の RVM のインストール方法です。

1. XCode 4.5 + Command Line Tools をインストールします

2. Homebrew 経由で、apple-gcc42 をインストールします

$ brew update
$ brew tap homebrew/dupes
$ brew install apple-gcc42

3. RVM を、通常通りにインストールします(公式情報はこちら

$ curl -L https://get.rvm.io | bash -s stable

4. RVM を設定します、zshrc に次のような記述を追加します、iTerm2 を使っている場合で、Profiles – General – Working Directory の設定で「Reuse previous sessions’s directory」を設定している場合は、__rvm_project_rvmrc を .zshrc に追加しましょう。

[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm
[[ -s $HOME/.rvm/scripts/rvm ]] && [[ $TERM_PROGRAM == "iTerm.app" ]] && __rvm_project_rvmrc

5. REE をインストールするには、次のコマンドでインストールすることができます、同じように 1.9.2 / 1.9.3 のインストールも可能です

$ CC=gcc-4.2 rvm install ree-1.8.7-2012.02 --enable-shared --without-tk --without-tcl

homebrew + Mountain Lion について

みなさん、Mountain Lion には更新しましたか?僕は、MBA 2012 Mid モデルだったので、無料で Mountain Lion にアップグレードしました。
さて、アップデート後の homebrew との組み合わせについて、特に ImageMagick まわりがおかしくなったので、直し方をまとめておきます。
原文は、こちらです。

1. Xcode 4.4 をインストールする
AppStore からインストールしましょう!

2. コマンドラインツールをインストールする
Xcode 4.4 を起動して、メニューから [Xcode] – [Preferences] を選択します。Download タブにある、コマンドラインツールをインストールしましょう。次の画面で「install」ボタンをクリックするだけです!

3. Xcode の場所を設定します
次のコマンドを実行します

sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

4. X11 をインストールします
ここから X11 バージョン2.7.2 をインストールします。
インストール後、symlink をはります。

$ sudo ln -s /opt/X11 /user/X11

5. macvim, imagemagick, ghostscript がある場合は、再インストールします。
僕の場合は、imagemagick だけだったので、次のように再インストールします。

$ brew uninstall imagemagick
$ brew install imagegick

あと、もし Rails などで rmagick を使っている場合、gcc の symlink をはる必要があります。なお、export CC=/usr/bin/gcc もしたほうがいいと思います。システムレベルで symlink をはるのは、微妙かもしれません…。rmagick を早く卒業しないといけないのかもしれませんね。(いつもトラブるので・・・)

$ sudo ln -s /usr/bin/gcc /usr/bin/gcc-4.2

OSX 移行記

MacBook Air を購入してみたのですが、初めて前のマシンの TimeMachine から移行してみました。
移行直後、Dock というプロセス(ドックですね)が CPU 100% になり続けて、さっそく CPU を 100% 使う現象が発生しました。

Dock プロセスと何度か killall したり、com.apple.Dock.plist を削除してみたりとしてみたのですが、状況はいっこうに改善しませんでした。

調査してみると、Paralles や VMware Fusion を移行したときに発生するらしいことが分かりました。
情報源は、このあたりです。

OSX のバージョンは 10.7.4 で、VMware fusion 4 を使っています。

ということで、VMware Fusion 4 を、ここの公式情報に従いアンインストールしました。

VMware Fusion をアンインストールしたところ、Dock プロセスの CPU 使用率は通常に戻りました。原因がはっきりしていないのですが、別のマシンに OSX を移行するとき、VMware Fusion や Parallels を使っている人は要注意しましょう。
VMware Fusion を再度インストールしたところ、Dock プロセスの CPU 使用率があげることはありませんでした。

この他、基本的にすべてのデータを TimeMachine から移行することができたのですが、いくつか細かいところで移行できませんでした。

  • ホスト名(当然ですけれど・・・)
  • /etc/hosts(独自に定義している場合は気をつけましょう)
  • < システム設定(デスクトップのホットコーナー、スクリーンセイバー、一部のワークスペースの壁紙、言語設定 ATOK が無効になってた、Desktop の Hot Corners の設定、VPN のネットワーク設定)
  • Chrome の開いているタブ一覧(Firefox のタブ一覧はちゃんと復元されました)
  • Mail.app のデータ変換(なぜか、Mail.app の初回起動直後)
  • /private ディレクトリ以下の設定(Apache の httpd.conf など)

今のところこんなところですが、ほぼちゃんと移行できていて素晴らしいですね。

VMware Fusion ですが、再インストールして VM ファイルを起動したところ、vmware-tools がインストールされている Linux 系のゲストは起動できないので、vmware-tools を一度アンインストールする必要があるので注意しましょう。

あと、mds という spotlight のインデックスを作成するらしいプロセスも CPU 使用率 80% くらいしばらく使っている現象が発生していますが、しばらく時間がかかってしまいますが、これは仕方がないですねぇ。

そして、新しい Macbook Air、複数のゲストを同時に起動してもページングが発生しにくくなりました。とても、快適です☆

Pow on Lion

pow を Lion 上で使うための設定方法です。pow は、Node アプリケーションなのですが、Node バージョン 0.4 系で動作するめインストールが少々めんどくさいです。

まずは、Homebrew 経由で pow をインストールします。このとき依存関係の設定により Node バージョン 6 系がインストールされます。

$ brew install pow

次に NVM をインストールして、Node バージョン 4 系をインストールします。

$ nvm install 0.4.12

次に pow の起動コマンドを変更して Node 0.4 系を使いように変更します。環境変数は、お使いの環境にあわせて展開して下さい。

$ vi $HOMEBREW_HOME/bin/pow
...
exec "$HOME/.nvm/v0.4.12/bin/node" "$HOMEBREW_HOME/Cellar/pow/0.3.2/pow/lib/command.js" "$@"

最後に pow エージェントを動作させます。80 ポートで直接動かしたい人は、ファイアウォールの設定も変更します。

$ sudo pow --install-system
$ pow --install-local

これで pow を使うことができるはずです。

僕は、大人の事情で Apache 経由で使いかっため、Running Pow With Apache を参考にしながら、次の設定をしました。

$ vi $HOME/.powconfig
export POW_DST_PORT=8080
$ wget https://raw.github.com/gist/1058580/zzz_pow.conf
$ sudo vi /etc/hosts
127.0.0.1 pow .dev

これでさくさくと開発を進めることができる環境になりましたが、RVM + Ruby 1.9.3 で Sinatra を使いたいとき、アプリケーション側の config.rb に GEM_HOME 環境変数を設定するのはやめたかったので、次の設定を追加しました。

$ vi $HOME/.powconfig
export POW_RVM_PATH="$HOME/.rvm/scripts"
$ cd $SINATRA_APP1
$ vi .rvmrc
rvm 1.9.3
export GEM_HOME="$HOME/.rvm/gems/ruby-1.9.3-p194"

こんな感じで設定しておくと、pow を RVM に対応させることができます!

さらに powder や powify を使うと便利だと思います。僕は今のところ powder を使っています。

これで、さくさくとウェブアプリケーションの開発が進められそうです!

  • 1
  • 2