Cài Đặt Ruby 4.0.1 Từ Nguồn Mô Phỏng Trên CentOS 7

Trang web chính thức của Ruby: Ruby Programming Language

Mirror Sites: Ruby Mirror Sites, Trang mirror ở Trung Quốc: pub/ruby/. Chúng tôi sẽ tải về mã nguồn từ trang mirror ở Trung Quốc.

Môi Trường Thực Thí

  • Cấu hình máy chủ: 4 nhân CPU, 8GB RAM, CentOS 7.9.2009
  • Đã cấu hình nguồn yum và epel của Aliyun, tắt tường lửa và SELinux.

Yêu Cầu Phụ Thuộc

1. gcc/gcc-c++

Ruby 3.x trở lên thường yêu cầu GCC 7.0+ hoặc cao hơn.

Ruby 2.7 đến 2.0: GCC 4.8+ thường đủ. Tuy nhiên, GCC 4.8 là một điểm chuẩn khá cũ.

Tham khảo cách nâng cấp GCC tại: Cách Nâng Cấp GCC Trên CentOS 7. Đề xuất sử dụng GCC 11 được cài đặt thông qua yum hoặc phiên bản ổn định của GCC (11, 12, 13) được cài đặt từ mã nguồn. Bạn có thể cấu hình bằng lệnh "./configure --prefix=/usr/local/ruby-4.0.1 --disable-install-rdoc" mà không cần chỉ định đường dẫn của gcc và g++, cũng như tránh gặp lỗi khi thực hiện lệnh make.

2. OpenSSL

Xem các yêu cầu về phiên bản OpenSSL trong file ext/openssl/History.md hoặc README của gói mã nguồn hiện tại. Dưới đây là yêu cầu về OpenSSL cho Ruby 4.0.1:

Tham khảo cách nâng cấp OpenSSL tại: Cách Nâng Cấp OpenSSL Trên CentOS 7.

Biên Dịch Và Cài Đặt

Sử dụng OpenSSL 3.5.4 và GCC 14.3.0 để cài đặt Ruby 4.0.1.

1. Cài Đặt Các Thư Viện Phụ Thuộc

[root@server ~]# yum install -y zlib-devel libyaml-devel openssl-devel libgdbm-devel libxml2-devel libxslt-devel libcurl-devel libicu-devel krb5-devel \
logrotate rsync python3-docutils pkgconfig libffi-devel

2. Biên Dịch Và Cài Đặt

[root@server ~]# tar zxvf ruby-4.0.1.tar.gz
[root@server ~]# cd ruby-4.0.1
# --disable-install-rdoc ngăn chặn việc cài đặt tài liệu RDoc khi cài đặt Ruby
# RDoc là công cụ tạo tài liệu của Ruby, tương tự như Javadoc trong Java. Nó trích xuất chú thích từ mã nguồn và tạo ra tài liệu định dạng.
[root@server ruby-4.0.1]# ./configure --prefix=/usr/local/ruby-4.0.1 --disable-install-rdoc
[root@server ruby-4.0.1]# echo $?
0
[root@server ruby-4.0.1]# make -j$(nproc)
[root@server ruby-4.0.1]# echo $?
0
[root@server ruby-4.0.1]# make install
[root@server ruby-4.0.1]# echo $?
0

Lỗi Khi Sử Dụng GCC 15.2.0 Để Biên Dịch Từ Mã Nguồn

Sử dụng OpenSSL 3.5.4 và GCC 15.2.0 để cài đặt Ruby 4.0.1.

# Cài đặt các thư viện phụ thuộc
[root@server ~]# yum install -y zlib-devel libyaml-devel openssl-devel libgdbm-devel libxml2-devel libxslt-devel libcurl-devel libicu-devel krb5-devel \
logrotate rsync python3-docutils pkgconfig libffi-devel
[root@server ~]# tar zxvf ruby-4.0.1.tar.gz
[root@server ~]# cd ruby-4.0.1
# --disable-install-rdoc ngăn chặn việc cài đặt tài liệu RDoc khi cài đặt Ruby
[root@server ruby-4.0.1]# CC=/usr/local/gcc-15.2.0/bin/gcc CXX=/usr/local/gcc-15.2.0/bin/g++ ./configure --prefix=/usr/local/ruby-4.0.1 --disable-install-rdoc
[root@server ruby-4.0.1]# echo $?
0
[root@server ruby-4.0.1]# make -j$(nproc)
vm.o: In function `vm_call_cfunc_with_frame_':
vm.c:(.text+0x1aad6): tham chiếu không xác định đến `ruby_cmethod__entry_semaphore'
vm.c:(.text+0x1abd2): tham chiếu không xác định đến `ruby_cmethod__return_semaphore'
vm.o: In function `vm_trace_hook.isra.0':
vm.c:(.text+0x1b62f): tham chiếu không xác định đến `ruby_method__entry_semaphore'
vm.c:(.text+0x1b63f): tham chiếu không xác định đến `ruby_method__return_semaphore'
vm.c:(.text+0x1b64a): tham chiếu không xác định đến `ruby_cmethod__entry_semaphore'
vm.c:(.text+0x1b651): tham chiếu không xác định đến `ruby_cmethod__return_semaphore'
vm.o: In function `rb_vm_pop_cfunc_frame':
vm.c:(.text+0x1bc83): tham chiếu không xác định đến `ruby_cmethod__return_semaphore'
vm.c:(.text+0x1bd35): tham chiếu không xác định đến `ruby_cmethod__return_semaphore'
vm.o: In function `hook_before_rewind':
vm.c:(.text+0x1c9b9): tham chiếu không xác định đến `ruby_method__return_semaphore'
vm.o: In function `vm_exec_handle_exception':
vm.c:(.text+0x1d25e): tham chiếu không xác định đến `ruby_cmethod__return_semaphore'
vm.o: In function `vm_call0_body':
vm.c:(.text+0x23d03): tham chiếu không xác định đến `ruby_cmethod__entry_semaphore'
vm.c:(.text+0x23df9): tham chiếu không xác định đến `ruby_cmethod__return_semaphore'
vm.o: In function `vm_opt_duparray_include_p.part.0':
vm.c:(.text+0x27688): tham chiếu không xác định đến `ruby_array__create_semaphore'
vm.o: In function `vm_exec_core':
vm.c:(.text+0x2fcf5): tham chiếu không xác định đến `ruby_hash__create_semaphore'
vm.c:(.text+0x30147): tham chiếu không xác định đến `ruby_hash__create_semaphore'
vm.c:(.text+0x30a22): tham chiếu không xác định đến `ruby_array__create_semaphore'
vm.c:(.text+0x317cd): tham chiếu không xác định đến `ruby_array__create_semaphore'
vm.c:(.text+0x317fc): tham chiếu không xác định đến `ruby_hash__create_semaphore'
vm.o:(.note.stapsdt+0x24): tham chiếu không xác định đến `ruby_cmethod__entry_semaphore'
vm.o:(.note.stapsdt+0x94): tham chiếu không xác định đến `ruby_cmethod__return_semaphore'
vm.o:(.note.stapsdt+0x104): tham chiếu không xác định đến `ruby_method__return_semaphore'
vm.o:(.note.stapsdt+0x174): tham chiếu không xác định đến `ruby_method__entry_semaphore'
vm.o:(.note.stapsdt+0x1e0): tham chiếu không xác định đến `ruby_cmethod__entry_semaphore'
vm.o:(.note.stapsdt+0x250): tham chiếu không xác định đến `ruby_cmethod__return_semaphore'
vm.o:(.note.stapsdt+0x2c0): tham chiếu không xác định đến `ruby_cmethod__entry_semaphore'
vm.o:(.note.stapsdt+0x330): tham chiếu không xác định đến `ruby_cmethod__return_semaphore'
vm.o:(.note.stapsdt+0x3a0): tham chiếu không xác định đến `ruby_cmethod__entry_semaphore'
vm.o:(.note.stapsdt+0x410): tham chiếu không xác định đến `ruby_array__create_semaphore'
vm.o:(.note.stapsdt+0x46c): tham chiếu không xác định đến `ruby_hash__create_semaphore'
vm.o:(.note.stapsdt+0x4c8): tham chiếu không xác định đến `ruby_hash__create_semaphore'
vm.o:(.note.stapsdt+0x524): tham chiếu không xác định đến `ruby_array__create_semaphore'
vm.o:(.note.stapsdt+0x580): tham chiếu không xác định đến `ruby_array__create_semaphore'
vm.o:(.note.stapsdt+0x5dc): tham chiếu không xác định đến `ruby_hash__create_semaphore'
collect2: lỗi: ld trả về trạng thái 1
make: *** [miniruby] Lỗi 1

Lỗi này có thể xảy ra do phiên bản GCC quá mới (15.2.0) không tương thích với một số cơ chế cũ trong mã nguồn Ruby (như các điểm gắn kết SystemTap). Các biểu tượng gây lỗi được sử dụng cho phân tích hiệu suất và gỡ lỗi (DTrace/SystemTap). Nếu bạn không làm việc với phân tích hiệu suất nhân bản Ruby, bạn có thể tắt các tính năng này. Thêm tham số --disable-dtrace vào lệnh ./configure để tắt hỗ trợ DTrace/SystemTap.

[root@server ruby-4.0.1]# cd ..
[root@server ~]# rm -rf ruby-4.0.1
[root@server ~]# tar xvf ruby-4.0.1.tar.xz
[root@server ~]# cd ruby-4.0.1
[root@server ruby-4.0.1]# CC=/usr/local/gcc-15.2.0/bin/gcc CXX=/usr/local/gcc-15.2.0/bin/g++ ./configure --prefix=/usr/local/ruby-4.0.1 \
--disable-install-rdoc --disable-dtrace
[root@server ruby-4.0.1]# echo $?
0
[root@server ruby-4.0.1]# make -j$(nproc)
[root@server ruby-4.0.1]# echo $?
0
[root@server ruby-4.0.1]# make install
[root@server ruby-4.0.1]# echo $?
0

Thẻ: centos7 ruby openssl gcc biên dịch

Đăng vào ngày 2 tháng 6 lúc 19:06