Hệ thống quản lý gói

Hệ thống quản lý gói tin hay Trình quản lý gói tin là một bộ sưu tập các công cụ phần mềm để tự động hóa quá trình cài đặt, nâng cấp, cấu hình, và gỡ bỏ các ứng dụng máy tính cho hệ điều hành trong phương án thích hợp. Một trình quản lý gói tin đối phó với các "packages", phân phối phần mềm và dữ liệu trong tập tin nén. Các gói chứa metadata,  như tên phần mềm, mô tả về mục đích của nó, số hiệu phiên bản, nhà cung cấp, checksum, và danh sách các gói tin phụ thuộc cần thiết để phần mềm có thể hoạt động. Sau khi cài đặt, các metadata được lưu trữ trong một cơ sở dữ liệu gói cục bộ. Trình quản lý gói thường duy trì một cơ sở dữ liệu của các gói phụ thuộc và thông tin phiên bản để ngăn chặn sai lệch phần mềm và thiếu điều kiện tiên quyết. Chúng hoạt động chặt chẽ với các kho phần mềm, quản lý kho lưu trữ nhị phân, và các cửa hàng phần mềm ứng dụng.

Trình quản lý gói được thiết kế để loại bỏ việc phải cài đặt và cập nhật thủ công. Điều này có thể đặc biệt hữu ích cho các doanh nghiệp lớn có hệ điều hành dựa trên Linux và các hệ thống Tương tự Unix, và cả Windows thường bao gồm hàng trăm hoặc thậm chí hàng chục ngàn gói phần mềm riêng biệt.

== Tính năng ==
Một gói phần mềm là một file nén có chứa một chương trình máy tính cũng như các dữ liệu cần thiết cho việc cài đặt nó. Ứng dụng máy tính có thể là ở trong mã nguồn cần được biên soạn và biên dịch trước. Các siêu dữ liệu của gói bao gồm miêu tả gói, phiên bản, các gói phụ thuộc (các gói cần được cài đặt trước).

Trình quản lý gói được giao nhiệm vụ tìm kiếm, cài đặt, bảo trì hoặc gỡ bỏ các gói phần mềm theo yêu cầu của người dùng. Chức năng điển hình của một hệ thống quản lý gói bao gồm:
- Làm việc với các file nén để giải nén gói
- Bảo đảm sự toàn vẹn và xác thực của các gói bằng cách kiểm tra chứng chỉ kỹ thuật số và checksums của chúng
- Tìm kiếm, tải xuống, cài đặt hoặc cập nhật các phần mềm có sẵn từ các kho lưu trữ hoặc app store
- Nhóm các gói theo chức năng để giảm sử dụng nhầm lẫn
- Quản lý các gói phụ thuộc để đảm bảo một gói phần mềm được cài đặt với tất cả các gói nó đòi hỏi, như vậy tránh được "dependency hell"

=== Thử thách với thư viện dùng chung ===
Hệ thống máy tính dựa trên thư viện liên kết động thay vì liên kết tĩnh  chia sẻ thư viện thực thi các chỉ lệnh của máy qua các gói và các ứng dụng. Trong các hệ thống này, các mối quan hệ phức tạp giữa các gói khác nhau đòi hỏi phải có các phiên bản khác nhau của các thư viện kết quả trong một thử thách thường được biết đến như là "dependency hell". Trên hệ thống Microsoft Windows, điều này cũng được gọi là "DLL hell" khi làm việc với các thư viện liên kết động. Trình quản lý gói tốt thì rất quan trọng trên các hệ thống này. Hệ thống framework từ OPENSTEP là một nỗ lực nhằm giải quyết vấn đề này, bằng cách cho phép nhiều phiên bản của thư viện được cài đặt cùng một lúc, và đối với các gói phần mềm để xác định phiên bản mà chúng được liên kết ngược.

=== Front-ends cho các gói biên dịch cục bộ ===
Quản trị hệ thống có thể cài đặt và bảo trì phần mềm bằng các công cụ khác thay vì dùng các trình quản lý gói. Ví dụ,một quản trị viên cục bộ có thể tải mã nguồn không đóng gói, biên dịch và cài đặt nó. Điều này có thể khiến hệ thống cục bộ mất đồng bộ với cơ sở dữ liệu của trình quản lý gói. Các quản trị viên địa phương sẽ được yêu cầu các biện pháp bổ sung, chẳng hạn như tự quản lý một số gói phụ thuộc hoặc cập nhật các thay đổi vào quản lý gói.

Có những công cụ có sẵn để đảm bảo rằng các gói được biên dịch cục bộ được đồng bộ với trình quản lý gói. Với các bản phân phối dựa trên file.deb và.rpm cũng như Slackware Linux, có CheckInstall, và với các hệ thống phân phối dựa trên recipe như Gentoo Linux và các hệ thống hybrid như  Arch Linux, có thể viết một recipe trước, rồi sau đó đảm bảo gói này phù hợp với cơ sở dữ liệu gói cục bộ.

== Sự phổ biến ==
Các bản phân phối Linux phụ thuộc nhiều vào hệ thống quản lý gói như phương tiện chính của chúng về quản lý và duy trì phần mềm. Các hệ điều hành di động như Android (dựa trên Linux), iOS (Tương tự Unix) và Windows Phone dựa gần như hoàn toàn vào các app stores cung cấp riêng và do đó sử dụng các hệ thống quản lý gói chuyên dụng của riêng mình.

== Ảnh hưởng ==
Ian Murdock đã nhận xét rằng quản lý gói là "sự tiến bộ lớn nhất Linux đã mang lại cho ngành công nghiệp", mà nó làm mờ đi ranh giới giữa các hệ điều hành và các ứng dụng, và nó làm cho nó "dễ dàng hơn để thúc đẩy các sáng kiến mới [...] vào thị trường và [...] phát triển hệ điều hành ".

== Xem thêm ==
- AppStream
- Cài đặt (phần mềm máy tính)
- Danh sách các trình quản lý gói tin
- Định dạng package
- Windows Installer

== Liên kết ngoài ==
- Package Management Cheatsheet (Distrowatch)
- ArchLinux Rosetta Stone - Command Line Comparison for Package Managers