Hatena::ブログ(Diary)

make world

2015-02-09

Vagrant の Ubuntu 12.04 で bundle を実行したらエラーが出た対応策について

bundle でインストールをしたら、下記のエラーが発生した。

$ bin/bundle
Fetching source index from https://rubygems.org/
Fetching git://github.com/gregbell/active_admin.git
Retrying git clone 'git://github.com/gregbell/active_admin.git' "/home/vagrant/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/cache/bundler/git/active_admin-d67faab65e9b74efbc8efb4a777a851e9f78b2ca" --bare --no-hardlinks --quiet due to error (2/3): Errno::ENOMEM Cannot allocate memory - git clone 'git://github.com/gregbell/active_admin.git' "/home/vagrant/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/cache/bundler/git/active_admin-d67faab65e9b74efbc8efb4a777a851e9f78b2ca" --bare --no-hardlinks --quiet
Retrying git clone 'git://github.com/gregbell/active_admin.git' "/home/vagrant/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/cache/bundler/git/active_admin-d67faab65e9b74efbc8efb4a777a851e9f78b2ca" --bare --no-hardlinks --quiet due to error (3/3): Errno::ENOMEM Cannot allocate memory - git clone 'git://github.com/gregbell/active_admin.git' "/home/vagrant/.rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/cache/bundler/git/active_admin-d67faab65e9b74efbc8efb4a777a851e9f78b2ca" --bare --no-hardlinks --quiet
Unfortunately, a fatal error has occurred. Please see the Bundler
troubleshooting documentation at http://bit.ly/bundler-issues. Thanks!

原因は swap ファイルがないからという話だったので、下記を実行。

$ sudo swapon -s
Filename                                Type            Size    Used    Priority
$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1       41283904  1655356  37531968   5% /
udev              247604       12    247592   1% /dev
tmpfs              50344      228     50116   1% /run
none                5120        0      5120   0% /run/lock
none              251712        0    251712   0% /run/shm
vagrant        976401404 77485412 898915992   8% /vagrant
$ sudo dd if=/dev/zero of=/swapfile bs=1024 count=256k
262144+0 records in
262144+0 records out
268435456 bytes (268 MB) copied, 0.40044 s, 670 MB/s
$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 262140 KiB
no label, UUID=e0f56805-5dba-4b50-b5b7-344fc08af7ca
$ sudo swapon /swapfile
$ sudo swapon -s
Filename                                Type            Size    Used    Priority
/swapfile                               file            262140  0       -1

ここからは nano で swap の設定をする。

$ sudo nano /etc/fstab

で、次の1行を追加する。

/swapfile       none    swap    sw      0       0

そして、次を実行。

echo 10 | sudo tee /proc/sys/vm/swappiness
echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf
sudo chown root:root /swapfile 
sudo chmod 0600 /swapfile

参考サイト

2008-12-24

Debian に zipruby をインストールする

zipruby のコンパイルに失敗する原因

% ls -l /var/lib/gems/1.8/gems/zipruby-0.2.9/ext/mkmf.log
-rw-r--r-- 1 root root 322 Dec 24 03:22 mkmf.log
% less /var/lib/gems/1.8/gems/zipruby-0.2.9/ext/mkmf.log
have_header: checking for zlib.h...
--------------------
no "gcc -E -I. -I/usr/lib/ruby/1.8/i486-linux -I.  -Wall -g -fno-strict-aliasing -O2  -fPIC  conftest.c -o conftest.i"
conftest.c:1:18: error: zlib.h: No such file or directory
checked program was:
/* begin */
1: #include <zlib.h>
/* end */

--------------------

zlib.h ファイルがないのが原因。

zlib1g-dev をインストールする

% apt-cache search zlib1g-dev
zlib1g-dev - compression library - development
% sudo apt-get install zlib1g-dev

zipruby を再度インストールしてみる

% sudo gem install zipruby
Successfully installed zipruby-0.2.9
Installing ri documentation for zipruby-0.2.9...
Installing RDoc documentation for zipruby-0.2.9...
% 

2008-12-19

さくらサーバーに 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)

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

参考

2008-12-18

さくらサーバーに Rubygems をインストールする

Ruby のバージョンを確認する

% ruby -v
ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-freebsd6]

Rubygems をダウンロードする

% cd ~/local/src/
% wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
% tar zxvf rubygems-1.3.1.tgz
% cd rubygems-1.3.1

Rubygems をインストールする

% ruby setup.rb --prefix=$HOME/local
% which gem18    
/home/littlebuddha/local/bin/gem18

gem18 にシンボリックリンクをはる

% ln -s ~/local/bin/gem18 ~/local/bin/gem
% which gem
/home/littlebuddha/local/bin/gem
% gem --version
1.3.1

インストールされた Rubygems のファイル

% ls ~/local/bin/gem18 
local/bin/gem18
% ls local/lib/         
rbconfig    rubygems    rubygems.rb ubygems.rb
% ls ~/local/lib/rubygems
builder.rb
command.rb
command_manager.rb
commands
config_file.rb
custom_require.rb
defaults.rb
dependency.rb
dependency_installer.rb
dependency_list.rb
digest
doc_manager.rb
exceptions.rb
ext
ext.rb
format.rb
gem_openssl.rb
gem_path_searcher.rb
gem_runner.rb
indexer.rb
install_update_options.rb
installer.rb
local_remote_options.rb
old_format.rb
package
package.rb
platform.rb
remote_fetcher.rb
require_paths_builder.rb
requirement.rb
rubygems_version.rb
security.rb
server.rb
source_index.rb
source_info_cache.rb
source_info_cache_entry.rb
spec_fetcher.rb
specification.rb
test_utilities.rb
timer.rb
uninstaller.rb
user_interaction.rb
validator.rb
version.rb
% ls ~/local/lib/rbconfig/
datadir.rb

Rubygems のパスを .zshrc に設定する

下記の記述を .zshrc に追加する。

export GEM_HOME=$HOME/local
export RUBYLIB=$HOME/local/lib

設定内容を確認する。

% source ~/.zshrc
% echo $RUBYLIB
/home/littlebuddha/local/lib
% echo $GEM_HOME
/home/littlebuddha/local
% irb
irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> exit
% gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.1
  - RUBY VERSION: 1.8.6 (2008-08-11 patchlevel 287) [i386-freebsd6]
  - INSTALLATION DIRECTORY: /home/littlebuddha/local/bin
  - RUBYGEMS PREFIX: /home/littlebuddha/local
  - RUBY EXECUTABLE: /usr/local/bin/ruby18
  - EXECUTABLE DIRECTORY: /home/littlebuddha/local/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-freebsd-6
  - GEM PATHS:
     - /home/littlebuddha/local/bin
     - /home/littlebuddha/.gem/ruby/1.8
     - /usr/local/lib/ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://gems.rubyforge.org/

2008-12-10

require 'rubygems' #=> false

% irb
> require 'rubygems'
=> false

false が帰ってくる。

% sudo gem update --system
Password:
Updating RubyGems
Nothing to update
% gem -v
1.3.1
% irb
> require 'rubygems'
=> false

ということなので、

% sudo gem update
Password:
Updating installed gems
Updating capistrano
Successfully installed capistrano-2.5.3
Updating dbi
Successfully installed dbi-0.4.1
Updating libxml-ruby
Building native extensions.  This could take a while...
Successfully installed libxml-ruby-0.9.6
Updating net-ssh
Successfully installed net-ssh-2.0.6
Gems updated: capistrano, dbi, libxml-ruby, net-ssh

% irb
> require 'rubygems'
=> false

う〜ん…。

検索をしてみたら、下記の一文を見つけた。

>> The false return value is typical for RubyGems and nothing to worry

>> about.

RubyGems が false を返すのはよくあることだし、心配することなんかないよ

http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-talk/301322?301264-303755

本当か?

MacPorts でインストールした Ruby ではないけれど

こういう事象は Macports で PHP と Apache2 をインストールした時に散々泣かされたので、知っていたけれど…。