さくらサーバーに 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)
正常にインストールされた。