さくらサーバーに gem をインストールする際に「chown/chgrp: Operation not permitted」とエラーが出た場合

原因は「ENV['RB_USER_INSTALL']」に値が正しく設定されていないためである。

Ruby/MySQL をインストールする

% gem search --remote mysql

*** REMOTE GEMS ***

activerecord-jdbcmysql-adapter (0.9)
dbd-mysql (0.4.2)
do_mysql (0.9.9)
jdbc-mysql (5.0.4)
motto-mysql (0.1.0)
mysql (2.7.3, 2.7)
mysql_replication_adapter (0.4.0)
mysql_retry_lost_connection (0.0.1)

インストールを開始する

% gem install mysql
Building native extensions.  This could take a while...
ERROR:  Error installing mysql:
        ERROR: Failed to build gem native extension.

/usr/local/bin/ruby18 extconf.rb install mysql
checking for mysql_query() in -lmysqlclient... yes
checking for mysql_ssl_set()... yes
checking for mysql.h... no
checking for mysql/mysql.h... yes
creating Makefile

make
cc -I. -I. -I/usr/local/lib/ruby/1.8/i386-freebsd6 -I. -DHAVE_MYSQL_SSL_SET -DHAVE_MYSQL_MYSQL_H -I/usr/local/include -fPIC -O2 -fno-strict-aliasing -pipe   -fPIC -c mysql.c
cc -shared -o mysql.so mysql.o -L. -L/usr/local/lib -Wl,-R/usr/local/lib -L/usr/local/lib -Wl,-R/usr/local/lib -L/usr/local/lib/mysql -Wl,-R/usr/local/lib/mysql -L.  -rdynamic  -Wl,-soname,mysql.so  -Wl,-R -Wl,/usr/local/lib -L/usr/local/lib -lruby18 -lmysqlclient  -lcrypt -lm  -rpath=/usr/lib:/usr/local/lib -pthread  -lc

make install
mkdir -p /home/littlebuddha/local/gems/mysql-2.7/lib
/usr/bin/install -c -o root -g wheel -m 0755 mysql.so /home/littlebuddha/local/gems/mysql-2.7/lib
install: /home/littlebuddha/local/gems/mysql-2.7/lib/mysql.so: chown/chgrp: Operation not permitted
*** Error code 71

Stop in /home/littlebuddha/local/gems/mysql-2.7.


Gem files will remain installed in /home/littlebuddha/local/gems/mysql-2.7 for inspection.
Results logged to /home/littlebuddha/local/gems/mysql-2.7/gem_make.out

エラーが発生した。

install: /home/littlebuddha/local/gems/mysql-2.7/lib/mysql.so: chown/chgrp: Operation not permitted

上記の操作を行っている記述は

cc -I. -I. -I/usr/local/lib/ruby/1.8/i386-freebsd6 -I. -DHAVE_MYSQL_SSL_SET -DHAVE_MYSQL_MYSQL_H -I/usr/local/include -fPIC -O2 -fno-strict-aliasing -pipe   -fPIC -c mysql.c
cc -shared -o mysql.so mysql.o -L. -L/usr/local/lib -Wl,-R/usr/local/lib -L/usr/local/lib -Wl,-R/usr/local/lib -L/usr/local/lib/mysql -Wl,-R/usr/local/lib/mysql -L.  -rdynamic  -Wl,-soname,mysql.so  -Wl,-R -Wl,/usr/local/lib -L/usr/local/lib -lruby18 -lmysqlclient  -lcrypt -lm  -rpath=/usr/lib:/usr/local/lib -pthread  -lc

CONFIG["INSTALL"] = ENV['RB_USER_INSTALL'] ? '/usr/bin/install -c' : '/usr/bin/install -c -o root -g wheel'

に起因している。

ENV['RB_USER_INSTALL'] に値を設定する

% export RB_USER_INSTALL=true

そして、再度実行してみる。

% gem install mysql
Building native extensions.  This could take a while...
Successfully installed mysql-2.7
1 gem installed
% gem list

*** LOCAL GEMS ***

mysql (2.7)

正常にインストールされた。