Bài viết này hướng dẫn build mã nguồn thành gói phần mềm RPM. Nếu cần hỗ trợ, vui lòng liên hệ Vinahost qua Hotline 1900 6046 hoặc email support@vinahost.vn.
1. Tại sao cần phải đóng gói mã nguồn thành RPM
Giả sử bạn vừa hoàn thành một phần mềm dành cho các hệ điều hành Red Hat Enterprise Linux (RHEL) và đang tự hỏi làm cách nào để người dùng cài đặt và quản lý chúng một cách dễ dàng. Câu trả lời đó là đóng gói phần mềm đó thành RPM.
Trên thực tế, ta có thể nén mã nguồn phần mềm lại thành một file rồi phân phối cho người dùng, nhưng khi đóng gói thành RPM, ta đạt được các lợi ích sau:
- Có thể thêm các metadata chứa mô tả về các thành phần, phiên bản, kích thước và các thông tin khác của phần mềm
- Thêm gói phần mềm vào yum reposity, cho phép người dùng tìm kiếm phần mềm dễ dàng hơn
- Cho phép người dùng sử dụng các công cụ phổ biến của Linux như yum, rpm hay PackageKit để cài đặt, xóa hay quản lý phần mềm của bạn
- Dễ dàng cập nhật và triển khai các phiên bản mới của phần mềm thông qua các công cụ kể trên
2. Các bước đóng gói mã nguồn thành RPM
- Cài đặt rpm-build, công cụ cho phép đóng gói mã nguồn dựa trên thông tin trong file spec
# yum install rpm-build
- Sau khi quá trình cài đặt hoàn tất, rpm-build sẽ tự động tạo các thư mục sau để phục vụ quá trình đóng gói mã nguồn
- Chép toàn bộ các bản patch cũng như file nén chứa mã nguồn vào thư mục SOURCES. Trong ví dụ này, Vinahost sẽ sử dụng mã nguồn phần mềm tree phiên bản 1.5.3
- Tạo file spec có tên tree.spec tại thư mục SPECS
- Nội dung file spec bao gồm một số trường cơ bản sau:
%Trường mở đầu: chứa thông tin của gói đang được build và khai báo các biến phụ thuộc của gói
%description: một đoạn mô tả ngắn gọn về phần mềm
%prep: thực hiện công việc chuẩn bị cho quá trình build phần mềm, cụ thể là sẽ xóa các phiên bản cũ trên máy và giải nén file mã nguồn
%build: thực hiện việc build mã nguồn, trường này thường bao gồm các đoạn script
%install: trường này cũng chứa các đoạn script tương tự như %prep và %build, và trường này được dùng cho quá trình cài đặt phần mềm
%files: chứa danh sách các file thuộc về gói phần mềm. Trường này cũng thực hiện gán các tham số hay quyền sở hữu cho file
%clean: có thể hiểu đơn giản đây là trường dọn dẹp các file tạm trong quá trình build
(Nội dung đầy đủ có thể tham khảo ở link sau: https://git.centos.org/rpms/tree/blob/c7/f/SPECS/tree.spec)
- Thực hiện lệnh sau để bắt đầu quá trình đóng gói
# rpmbuild –ba /root/rpmbuild/SPECS/tree.spec
- Sau khi quá trình đóng gói hoàn tất, source rpm và binary rpm được lưu tại các thư mục sau:
- Thử nghiệm cài đặt phần mềm tree bằng binary rpm vừa tạo
Lưu ý: Trước khi tiến hành cài đặt, ta cần phải kiểm tra kĩ xem phần mềm đã được cài đặt trên hệ thống chưa bằng lệnh sau
# rpm -qa tree
Nếu đã có trên hệ thống, ta sử dụng lệnh sau:
# rpm -Uvh RPMS/x86_64/tree-1.5.3-2.e17.centos.x86_64.rpm
Trong đó, tùy chọn -U có chức năng kiểm tra phiên bản hiện tại trên hệ thống và thực hiện update nếu phần mềm sắp sửa cài đặt có phiên bản mới hơn bản hiện có.
Nếu phần mềm chưa được cài đặt trên hệ thống, ta thực hiện lênh sau:
# rpm -ivh RPMS/x86_64/tree-1.5.3-2.e17.centos.x86_64.rpm
Chúc bạn thành công!