Hướng dẫn build mã nguồn thành gói phần mềm RPM

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ư yumrpm 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
http://vinahost.info/va/uploads/17/27dcabecc3-huong-dan-build-ma-nguon-thanh-goi-phan-mem-rpm-1.png
  • 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
http://vinahost.info/va/uploads/17/15f9575886-huong-dan-build-ma-nguon-thanh-goi-phan-mem-rpm-2.png
  • Tạo file spec có tên tree.spec tại thư mục SPECS
http://vinahost.info/va/uploads/17/d4bf61ffa1-huong-dan-build-ma-nguon-thanh-goi-phan-mem-rpm-3.png
  • 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

http://vinahost.info/va/uploads/17/ba96bf1428-huong-dan-build-ma-nguon-thanh-goi-phan-mem-rpm-4.png

(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:
http://vinahost.info/va/uploads/17/b5b593e52e-huong-dan-build-ma-nguon-thanh-goi-phan-mem-rpm-5.png
  • 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

http://vinahost.info/va/uploads/17/2d7fb83aa9-huong-dan-build-ma-nguon-thanh-goi-phan-mem-rpm-6.png

Chúc bạn thành công!

Đánh giá bài viết
Was this article helpful?
Đánh giá
Đánh giá bài viết
Đăng ký nhận tin

Để không bỏ sót bất kỳ tin tức hoặc chương trình khuyến mãi từ Vinahost

    Bài viết liên quan
    Bình luận
    Theo dõi
    Thông báo của
    guest
    0 Góp ý
    Phản hồi nội tuyến
    Xem tất cả bình luận