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

November 14th, 2014 by naoya | No Comments | Filed in day

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

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

Tags: ,

su で expect を使って簡単に root になる方法

October 6th, 2014 by naoya | No Comments | Filed in day

exepct 便利ですよね。expect を使うと、コマンドラインの対話を自動的に行うことが出来ます。

例えば、/home/foo/password に su のパスワードが書かれている場合、次のようなスクリプトを作成して実行すると一発で su することができます。


#!/usr/bin/expect -f

set password [exec cat /home/foo/password | head -1 | tr -s " " | cut -d " " -f 2]

spawn su -
expect "*assword:" { send "$password\r" }

interact

ポイントは、set で exec を使ってコマンドラインの実行結果をパスワードに入れているところ、上記の例であと /home/foo/password には複数行で各ユーザごとのパスワードがかかれていて、1行目に root のパスワードが書かれていることになります。
そして、interact で処理を継続しているところがポイントです。

また、expect 用のスクリプトを一から手動で作成するのは、すこし不便ですが、autoexpect を使うと expect を使うスクリプトを自動生成することができて便利です。
例えば、上記の expect のもとを作成する場合には、次のようにします。


$ autoexpect -c su
autoexpect started, file is script.exp
Password:
foo# exit
exit
autoexpect done, file is script.exp
$

そうすると、カレントディレクトリ以下に script.exp というファイルが生成されています。このファイルには、制御コードなどを含まれていたり、たくさんの分かりやすいコメントがかかれているので、ちゃんと整理して expect なスクリプトを作成すると便利です。

Tags: ,

久しぶりの veewee ではまった

October 3rd, 2014 by naoya | No Comments | Filed in day

こんにちは。
CentOS 7 がリリースされたので、手前味噌の Vagrant box を更新しようと思い立ちました。
ただ、せっかくなので、Packer の方がいいかと思って、veewee-to-packer gem をインストールして変換してみたのですが、ISO の CD ファイル名が何らかのハッシュ値.iso として packer_cache ディレクトリに入ってしまい、ダウンロードの時間がかかりそうだった点(ちなみに veewee だと iso ディレクトリの普通のファイル名.iso をチェックして、とても素直です)、今のところ Vagrant 用として使うだけ点、という点からわざわざ packer を使う必要はないという結論に勝手に追加しました。あと、veewee-to-packer gem はあまりメンテナンスされていないので、すこし template.json を修正する点もあったので、それも少し面倒でした。具体的に vmware を vmware-iso とするなど。

というわけで、みんな大好き veewee です。久しぶりにのぞいてみると、ちゃんとメンテされ続けているようで、ちょうど 10/1 に veewee 0.4.0 がリリースされていました。久しぶりに RubyGems にリリースされているので、ちゃんとメンテされているようで安心しました。

さっそく、VMware fusion 用の Vagrant box を作成した用途したところ、なぜか次のようなエラーが発生しました。なお、VMware fusion 7.0 です。


$ bundle exec veewee fusion build my-centos7
...
.../lib/veewee/provider/vmfusion/provider.rb:34:in `split': invalid byte sequence in US-ASCII (ArgumentError)
...

どうも、system_profiler SPApplicationsDataType コマンドの出力から VMware Fusion のバージョンを抽出する部分でアスキー文字以外が含まれているというエラーのようです。

veewee の issue をみてみると、ちょうど同じ内容の報告が 2013 年にあったようです。この issue に書いてあるようなコードを fork した veewee に変更してちゃんと動作して CentOS 7 の Vagrant box を作成することが出来ました!ちなみに Homebrew cask でインストールしているときは、/Application/VMwae\ Fusion.app の symlink を貼った方はいいです。Packer も /Application 以下をチェックしていますので。いちお、pull-request を送っておきました。(※こちらマージされました!)

同じ問題で悩んでいる方は、次のような Gemfile を書いておくと便利です。

source 'https://rubygems.org'

gem('vagrant',
git: 'https://github.com/mitchellh/vagrant.git',
tag: 'v1.6.5')

gem('veewee',
git: 'https://github.com/jedi4ever/veewee.git')

来週は、CentOS 7 の kickstart ファイルを作成するときにはまったことについてアウトプットしていけたらと思います。

Tags: ,

Oracle JDK をダウンロードするスクリプト

August 18th, 2014 by naoya | 1 Comment | Filed in day

Oracle JDK のアップデートがあるたびに、それぞれのサーバに手動で Oracle の JDK ダウンロードページからダウンロードするのがめんどくさいので、即興のシェルスクリプトを書いてみた。

JDK 7 および 8 の、Linux x64 版の rpm と tar.gz に対応しています。

もちろん、事前にダウンロードする際には、BCL For Java SE に同意の上、使用してください。

また、当然のことながら、Oracle JDK ダウンロードのウェブページが変わってしまった場合は動作しないので、その旨割り切ってお使い下さい。

Tags: ,

新しい Google Noto Font をインストールする

July 17th, 2014 by naoya | No Comments | Filed in day

Google、オープンソースの日中韓フォントNoto Sans CJK を無料配信。Adobe と共同開発 – Engadget Japanese のとおり新しい Google Noto CJK Font がリリースされましたね!

さっそく、homebrew-font に Pull Request を送ったので、取り込みまれているので、次のようにするばすぐにインストールすることができます。


$ brew tap caskroom/fonts
$ brew cask install font-noto-sans-japanese font-noto-sans-korean font-noto-sans-s-chinese font-noto-sans-t-chinese

さっそく、Chrome のメインフォントに設定してみましたので、しばらく使ってみようかと思います。
Linux 上でも使えるみたいなので、これは本当に素晴らしいことですね。

Tags:

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

June 6th, 2014 by naoya | No Comments | Filed in day

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 をたてておきましたので、修正されるまでしばらく待ちましょう!

Tags:

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

June 5th, 2014 by naoya | No Comments | Filed in day

最近、どうも 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 がインストールされます。

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

Tags: ,

オンプレサーバで MAC アドレスを IPMI 経由で取得する方法

April 15th, 2014 by naoya | No Comments | Filed in day

オンプレサーバの場合、OS をインストールするには、事前に MAC アドレスが分からないと、自動的にネットワークインストールして OS をインストールすることができません。

今まで使ったことがある二つのメーカーについて、IPMI 経由でオンボード NIC の MAC アドレスを取得する方法を紹介したいと思います。そのため、事前い IPMI の IP アドレスなどを設定しておくことが前提条件となります。

SuperMicro

公式情報は、こちらにあります。


$ ipmitool -I lanplus -H -U raw 0x30 0x21
※パスワードを入力します

ここで表示された 10 バイト取得した値のうち、最後から 6 byte までは LAN1(eth0) の MAC Address、LAN2(eth1) は最後のバイトに 1 足したものになります。

HP ProLiant

HTTP で XML 情報を取得すると、その中に含まれています。EC2 みたいで、便利ですね!


$ curl https:///xmldata?item=all -k

で出力される XML の中の MACADDR 要素が MAC アドレスとなります。

Tags:

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

April 10th, 2014 by naoya | No Comments | Filed in day

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 で自動化したいところなので、あわせて試してみたいと思います。

Tags:

RHEL / Centos / Ubuntu のセキュリティ情報のまとめ

April 8th, 2014 by naoya | No Comments | Filed in day

日頃から業務などで利用している Linux のディストリビューションのセキュリティ情報は、日々チェックして、日々運用していく必要がありますよね。

なので、日頃から使っている各 Linux のディストリビューションのセキュリティ情報の入手先をまとめてみました。

RHEL

それぞれのバージョンごとに公式ページに Errata として情報がとまってますが、RSS はないようですね。

RHEL5 系

RHEL6 系

CentOS

CentOS は、基本的に RHEL ベースなので、RHEL のアップデート情報元にセキュリティアップデートなどが行われているはずです。
セキュリティアップデートなどの情報は、CentOS-announce mailing list に投稿されているので、このメーリングリストを購読すればいいでしょう。

あと、非公式だとは思いますが、LWN.net にも CentOS security alerts が公開されていました。

その他、yum コマンドでも、次のようにすると確認することができます。

$ sudo yum install yum-security
$ sudo yum list-security
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.kddilabs.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
epel/updateinfo | 509 kB 00:00
FEDORA-EPEL-2014-0446 bugfix PyYAML-3.09-10.el5.x86_64
FEDORA-EPEL-2014-0792 bugfix glances-1.7.4-1.el5.noarch
FEDORA-EPEL-2014-0531 security libyaml-0.1.2-6.el5.x86_64
list-security done

yum-security も便利ですよね。

Ubuntu

Ubuntu は、公式ページに Ubuntu Security notices が公開されています。
リリースごとにフィルターでもできて、RSS もあって便利です。
例えば、12.04 LTS (precise) は、ここになります。

Amazon Linux AMI

最後に最近 Amazon Linux AMI を使っている人も多いかと思いますが、Amazon Linux AMI Security Center に情報がまとまっています。

普段の運用の中でセキュリティアップデートは、かなり重要な業務になるので、怠らずにしっかりとやりたいですよね。

Tags: ,