Компиляция ruby1.9.1 зависает и заполняет swap
Я компилирую Ruby 1.9.1-p376 под LTS сервера Ubuntu 8.04 (64-bit), выполняя следующие действия:
$ ./configure
$ make
$ sudo make install
./configure
работает без нареканий.
make
зависает до бесконечности, пока не исчезнет вся моя оперативка и своп. Он застревает после следующего вывода:
compiling ripper
make[1]: Entering directory `/tmp/ruby1.9.1/ruby-1.9.1-p376/ext/ripper'
gcc -I. -I../../.ext/include/x86_64-linux -I../.././include -I../.././ext/ripper -I../.. -I../../. -DRUBY_EXTCONF_H=\"extconf.h\" -fPIC -O2 -g -Wall -Wno-parentheses -o ripper.o -c ripper.c
Если я бегу gcc
команда от руки, с -v
аргумент для получения подробного вывода, он висит после следующего:
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr --enable-shared --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2 --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu4)
/usr/lib/gcc/x86_64-linux-gnu/4.2.4/cc1 -quiet -v -I. -I../../.ext/include/x86_64-linux -I../.././include -I../.././ext/ripper -I../.. -I../../. -DRUBY_EXTCONF_H="extconf.h" ripper.c -quiet -dumpbase ripper.c -mtune=generic -auxbase-strip ripper.o -g -O2 -Wall -Wno-parentheses -version -fPIC -fstack-protector -fstack-protector -o /tmp/ccRzHvYH.s
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.2.4/../../../../x86_64-linux-gnu/include"
ignoring nonexistent directory "/usr/include/x86_64-linux-gnu"
ignoring duplicate directory "../.././ext/ripper"
ignoring duplicate directory "../../."
#include "..." search starts here:
#include <...> search starts here:
.
../../.ext/include/x86_64-linux
../.././include
../..
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.2.4/include
/usr/include
End of search list.
GNU C version 4.2.4 (Ubuntu 4.2.4-1ubuntu4) (x86_64-linux-gnu)
compiled by GNU C version 4.2.4 (Ubuntu 4.2.4-1ubuntu4).
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32795
Compiler executable checksum: 6e11fa7ca85fc28646173a91f2be2ea3
Я просто скомпилировал ruby на другом компьютере для справки, и потребовалось около 10 секунд, чтобы напечатать следующий вывод (после вышеупомянутого Compiler executable checksum
линия):
COLLECT_GCC_OPTIONS='-v' '-I.' '-I../../.ext/include/i686-linux' '-I../.././include' '-I../.././ext/ripper' '-I../..' '-I../../.' '-DRUBY_EXTCONF_H="extconf.h"' '-D_FILE_OFFSET_BITS=64' '-fPIC' '-O2' '-g' '-Wall' '-Wno-parentheses' '-o' 'ripper.o' '-c' '-mtune=generic' '-march=i486'
as -V -Qy -o ripper.o /tmp/cca4fa7R.s
GNU assembler version 2.20 (i486-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.20
COMPILER_PATH=/usr/lib/gcc/i486-linux-gnu/4.4.1/:/usr/lib/gcc/i486-linux-gnu/4.4.1/:/usr/lib/gcc/i486-linux-gnu/:/usr/lib/gcc/i486-linux-gnu/4.4.1/:/usr/lib/gcc/i486-linux-gnu/:/usr/lib/gcc/i486-linux-gnu/4.4.1/:/usr/lib/gcc/i486-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/i486-linux-gnu/4.4.1/:/usr/lib/gcc/i486-linux-gnu/4.4.1/:/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/:/lib/../lib/:/usr/lib/../lib/:/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-I.' '-I../../.ext/include/i686-linux' '-I../.././include' '-I../.././ext/ripper' '-I../..' '-I../../.' '-DRUBY_EXTCONF_H="extconf.h"' '-D_FILE_OFFSET_BITS=64' '-fPIC' '-O2' '-g' '-Wall' '-Wno-parentheses' '-o' 'ripper.o' '-c' '-mtune=generic' '-march=i486'
Я понятия не имею, что здесь может пойти не так - есть идеи, с чего мне начать?
Редактировать: вывод fsck
$ sudo fsck -n
fsck 1.40.8 (13-Mar-2008)
e2fsck 1.40.8 (13-Mar-2008)
Warning! /dev/sda1 is mounted.
Warning: skipping journal recovery because doing a read-only filesystem check.
/dev/sda1 contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Deleted inode 557058 has zero dtime. Fix? no
Inodes that were part of a corrupted orphan linked list found. Fix? no
Inode 557059 was part of the orphaned inode list. IGNORED.
Inode 557060 was part of the orphaned inode list. IGNORED.
Inode 557061 was part of the orphaned inode list. IGNORED.
Inode 557062 was part of the orphaned inode list. IGNORED.
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (2026992, counted=2014241).
Fix? no
Inode bitmap differences: -(557058--557062)
Fix? no
Free inodes count wrong (1130174, counted=1129768).
Fix? no
/dev/sda1: ********** WARNING: Filesystem still has errors **********
/dev/sda1: 115010/1245184 files (0.7% non-contiguous), 463376/2490368 blocks
4 ответа
Вам нужно:
sudo apt-get update
sudo apt-get -y install libc6-dev libssl-dev libmysql++-dev libsqlite3-dev make build-essential libssl-dev libreadline5-dev zlib1g-dev
Затем попробуйте установить ruby снова.
РЕДАКТИРОВАТЬ:
Вы также можете попробовать:
sudo apt-get install ruby1.9.1-full
или попробуйте другую версию 1.9.1
wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.gz
чтобы увидеть, если это ваша машина или код рубина.
У меня была такая же проблема в моей системе (Ubuntu 8.04) при компиляции ruby-1.9.1-p378. Я вернулся к более ранней версии ruby (ruby-1.9.1-p243), и проблема не обнаружилась. Дайте это попробовать.
У меня была эта проблема на CentOS 5.6 с Ruby 1.9.3 и я пробовал около миллиона вещей. В конце концов я установил apt-get на свою машину CentOS и запустил:
sudo apt-get update
sudo apt-get upgrade
Это обновило следующие пакеты (среди прочих, которые не были актуальны):
libffi (3.0.5-1.el5 => 3.0.9-1.el5.rf)
libffi-devel (3.0.5-1.el5 => 3.0.9-1.el5.rf)
libyaml (0.1.2-3.el5 => 0.1.4-1.el5.rf)
libyaml-devel (0.1.2-3.el5 => 0.1.4-1.el5.rf)
это как-то исправило.
Я понятия не имею, почему или как, но это определенно позволило завершить установку Ruby.