Home »
Linux
Đóng gói RPM
RPM – RPM Package Management là một trình quản ly gói được sử dụng bởi nhiều Linux Distribution, như Redhat, Suse, Mandrake, … Khi các phần mềm đã được đóng gói dưới dạng RPM, người sử dụng chỉ việc download về và cài đặt qua tiện ích của rpm. Tuy nhiên có nhiều phần mềm chỉ cung cấp dưới dạng source code ( tgz, tar.gz, tar.bz2 ). Người dùng có thể sử dụng những source code này hoặc người dùng có thể phát triển riêng phần mềm của mình để đóng gói thành gói tin rpm và phân phối lại cho cộng đồng sử dụng. Bài viết này giới thiệu cấu trúc gói tin rpm và cách đóng gói chúng.
Các gói RPM thực chất chỉ chứa các file đã được biên dịch và một số file khác như file cấu hình, các văn bản của gói phần mềm dạng mã nguồn. File RPM nếu được cài đặt thành công sẽ tạo hệ thống chạy được ngay vì thực chất nó là sự triển khai các file đã được biên dịch và các file cấu hình, các file văn bản vào các vị trí thích hợp để phần mềm có thể chạy ngay lập tức. Một gói được đóng dưới dạng RPM có thể coi như một gói cài đặt dạng setup.exe trong Windows.
Các gói RPM thực chất chỉ chứa các file đã được biên dịch và một số file khác như file cấu hình, các văn bản của gói phần mềm dạng mã nguồn. File RPM nếu được cài đặt thành công sẽ tạo hệ thống chạy được ngay vì thực chất nó là sự triển khai các file đã được biên dịch và các file cấu hình, các file văn bản vào các vị trí thích hợp để phần mềm có thể chạy ngay lập tức. Một gói được đóng dưới dạng RPM có thể coi như một gói cài đặt dạng setup.exe trong Windows.
Quá trình tạo file RPM chỉ là việc lựa chọn từ hệ thống file đã được biên dịch của các gói mã nguồn để đưa vào gói RPM. Khi đưa gói RPM tới nơi khác cài đặt, gói RPM sẽ tự động thực hiện việc giải bung các file tới các vị trí thích hợp như chính các file đó được bố trí trên máy đã cài bằng gói mã nguồn. Như phần dưới đây sẽ trình bày, bước xây dựng file .spec là quan trọng nhất trong đóng gói RPM vì chính file này hướng dẫn quá trình tạo lập ra file RPM. Nó nói cho trình tạo RPM biết phải copy các file nào, thiết lập các thông số cho gói RPM ra sao. Trong chính file này, người dùng cũng có thể can thiệp vào các file và các thư mục sẽ được cài đặt, thiết lập các thông số cho gói mã nguồn sẽ được được biên dịch và do đó ảnh hưởng tới file RPM.
Quy trình đóng gói một gói tin rpm bao gồm:
· Chuẩn bị mã nguồn (.tar.gz, .tar.bz2)
· Cập nhật các bản vá cho các file mã nguồn nếu có
· Tạo file spec
· Xây dựng gói rpm qua lệnh rpmbuild
Cả quá trình này phức tạp nhất và cũng quan trọng nhất là tạo được file spec hoạt động đúng và phù hợp với hệ thống, để xây dựng được gói rpm hoàn chỉnh.
File spec là một file hướng dẫn cách xây dựng phần mềm và danh sách các file được cài đặt.
Cấu trúc của file Spec:
Code:
Summary: A program that ejects removable media using software control.Name: ejectVersion: 2.0.2Release: 3Copyright: GPLGroup: System Environment/BaseSource: http://metalab.unc.edu/pub/Linux/utils/disk-management/eject-2.0.2.tar.gzPatch: eject-2.0.2-buildroot.patchBuildRoot: /var/tmp/%{name}-buildroot%descriptionThe eject program allows the user to eject removable media(typically CD-ROMs, floppy disks or Iomega Jaz or Zip disks)using software control. Eject can also control some multi-disk CD changers and even some devices' auto-eject features.Install eject if you'd like to eject removable media usingsoftware control.%prep%setup -q%patch -p1 -b .buildroot%buildmake RPM_OPT_FLAGS="$RPM_OPT_FLAGS"%installrm -rf $RPM_BUILD_ROOTmkdir -p $RPM_BUILD_ROOT/usr/binmkdir -p $RPM_BUILD_ROOT/usr/man/man1install -s -m 755 eject $RPM_BUILD_ROOT/usr/bin/ejectinstall -m 644 eject.1 $RPM_BUILD_ROOT/usr/man/man1/eject.1%cleanrm -rf $RPM_BUILD_ROOT%files%defattr(-,root,root)%doc README TODO COPYING ChangeLog/usr/bin/eject/usr/man/man1/eject.1%changelog* Sun Mar 21 1999 Cristian Gafton
· Tiêu đề
Phần đầu của file spec bao gồm các trường cơ bản cần phải điền đầy đủ:
§ Summary: Giới thiệu ngắn gọn về gói tin
§ Name: Tên gói rpm sẽ được xây dựng
§ Version: Phiên bản gói rpm sẽ được xây dựng
§ Release: Số phát hành của phiên bản
§ License: Giấy phép
§ Group: Nhóm của gói tin thuộc vào
§ Source: Địa chỉ của mã nguồn (Source0, Source1, Source2, …)
§ Patch: Tên các bản vá (Patch0, Patch1, Patch2, …)
§ BuildRoot: Thư mục “root” được xây dựng và cài đặt gói tin
§ %description: Mô tả chi tiết phần mềm
· Prep
Đây là đoạn thứ 2 trong file spec, chứa 2 thủ tục:
%setup: giải nén mã nguồn và chuyển (cd) đến thư mục sau giải nén.
%patch: áp dụng bản vá cho mã nguồn
· Build : biên dịch mã nguồn
· Install: cài đặt hệ thống
· Clean: xóa thư mục dành cho biên dịch sau khi giải nén mã nguồn.
· Files: liệt kê danh sách các file nhị phân cho gói tin rpm.
· %doc : các tài liệu document
· %config: các file cấu hình
· %dir: đánh dấu thư mục con của gói tin
· %defattr: thiết lập thuộc tính mặc định cho các file.
· Changelog: Thông tin nhật kí về những lần gói tin được cập nhật, chỉnh sửa.
Sau khi đã hoàn chỉnh file spec, đảm bảo file spec được đưa vào /usr/src/redhat/SPECS và file mã nguồn và các bản vá tương ứng được đặt tại /usr/src/redhat/SOURCES.
Tiến hành xây dựng qua tiện ích rpmbuild:
Code:
# rpmbuild –ba file_name.spec
Quá trình xây dựng diễn ra bao gồm các bước theo mô tả trong file spec. Nếu thành công, quá trình này sẽ tạo ra 3 file đóng gói
Hai file .rpm đầu tiên được đưa vào /usr/src/redhat/RPMS/i386, còn file cuối .src.rpm được đưa vào /usr/src/redhat/SRPMS.
Với gói đầu, người sử dụng có thể đem đi cài tại các máy có chương trình rpm đã được cài đặt. Việc cài đặt gói này được thực hiện bằng lệnh rpm -i
Việc phân phối gói .rpm dưới dạng gói đầu hay gói thứ ba đều chấp nhận được và người dùng cuối đều có thể sử dụng hai gói này để chạy phần mềm cần cài đặt. Với cách phân phối theo gói thứ 3, người sử dụng cuối có thể chỉnh sửa thêm một số thông số cho phù hợp nhu cầu riêng. Điều này đảm bảo nguyên lý của GPL là mã nguồn có thể được tự do phân phối và chỉnh sửa.
Như vậy RPM là một chuẩn phân phối phần mềm phổ biến và tiện dụng trên nền Linux. Các gói phần mềm có thể đóng gói một cách mềm dẻo thành các gói RPM với các thông số cài đặt và cấu hình khác nhau. Đây cũng là một nhân tố đảm bảo việc tạo sự đa dạng hóa trong các gói mã nguồn cung cấp cho hệ thống đĩa cài chuyên dụng.
Tin liên quan