Có thể xây dựng một bản phân phối Linux hỗ trợ cả gói RPM và .deb không?


29

Tôi tự hỏi liệu về mặt lý thuyết có thể xây dựng một bản phân phối Linux có thể hỗ trợ cả gói vòng / phút và gói debian không.

Có bất kỳ distro sống ngoài đó hỗ trợ cả hai?

Và nếu không nó thậm chí có thể?


4
Trừ khi chúng tôi xem xét các gói có số lượng phụ thuộc không thể tính toán được, tôi không thấy cách cài đặt chúng về mặt lý thuyết là không thể.
Dmitry Grigoryev

2
Có thể nếu bạn để lại độ phân giải phụ thuộc cho người dùng :)
rackandboneman

@rackandboneman trong trường hợp đó, Slackware cộng với alienđể chuyển đổi các gói thành tệp .tgz sẽ hoạt động :) Nếu bạn sử dụng các nguồn tranh luận hoặc rpms LFS cũng có thể làm điều đó.
ivanivan

@DmitryGrigoryev IIRC, độ phân giải phụ thuộc hoàn toàn NP khi bạn cho phép các phụ thuộc âm (xung đột).
dùng253751

@immibis NP-đầy đủ ngụ ý tính toán. Không thể tính toán có nghĩa là "nếu chương trình này bị treo với libc5, hãy cài đặt libc6".
Dmitry Grigoryev

Câu trả lời:



42

Tôi không nghĩ có bất kỳ bản phân phối nào hỗ trợ cả về mặt nguyên bản, nhưng hóa ra có một bản phát triển, Bedrock Linux (nhờ iMalinowski cung cấp thông tin). Trên các bản phân phối khác, bạn có thể sử dụng các công cụ chuyển đổi như alienđể chuyển đổi từ định dạng này sang định dạng khác. Bất cứ điều gì dựa trên phần mềm đều có thể thực hiện được, được cung cấp đủ thời gian và năng lượng, do đó có thể xây dựng một bản phân phối như vậy (nhưng do sự khác biệt giữa khả năng .deb.rpmgói, khá khó khăn).

Tuy nhiên, tất cả điều này có lẽ xuất phát từ ý tưởng rằng hỗ trợ cả hai định dạng gói sẽ làm cho cuộc sống đơn giản hơn, bởi vì sau đó bạn có thể cài đặt các gói từ bất cứ đâu (tốt, bất cứ nơi nào cung cấp một .debhoặc .rpm). Về mặt triết học, đó là thiếu sót. Một bản phân phối là một tập hợp các gói; nếu bạn muốn cung cấp phần mềm cho phân phối đó, bạn thực sự cần phải nhắm mục tiêu cụ thể, bao gồm sử dụng định dạng gói của nó (và quan trọng hơn là siêu dữ liệu). Không có điểm nào trong việc hỗ trợ nhiều định dạng gói nguyên bản.

(Trong thế giới Debian, các gói có thể hoạt động trên các biến thể không phải là mục tiêu chính của chúng, vì danh pháp gói là khá đồng nhất và vì hầu hết các bản phân phối phù hợp với cây thừa kế. Điều đó không đúng trong thế giới RPM. phù hợp là một ý tưởng tồi.)

Bạn nên coi phân phối của mình là cơ sở để xây dựng hệ thống mong muốn của mình, tuân thủ các quy tắc và hệ sinh thái phân phối của bạn, mà không trộn lẫn các thứ từ các phân phối khác. Bạn cần trừu tượng hóa ở cấp độ cao hơn để hỗ trợ trộn và kết hợp (hay đúng hơn là để cung cấp môi trường phân phối chéo): thời gian chạy Steam, Flatpak, v.v.


10

Không, một con quái vật như vậy không nên được xây dựng. Không giống như, gói ứng dụng MacOS, thường bao gồm mọi thứ mà ứng dụng cần để chạy trên hệ điều hành, các gói RPM và .deb hầu như luôn phụ thuộc vào các gói khác, chẳng hạn như các thư viện dùng chung. Các gói Linux liệt kê các gói khác cần phải có và trình quản lý gói giúp thực thi các yêu cầu đó. Hơn nữa, các bản phân phối Linux khác nhau về cách mọi thứ được thực hiện (ví dụ /etc/network/interfaces.dso với /etc/sysconfig/network-scripts).

Bạn thậm chí không nên trộn các gói từ các kho tùy ý trong cùng một định dạng gói. Nghĩa là, việc cài đặt các gói SuSE trên máy CentOS chỉ là vấn đề, mặc dù cả hai đều sử dụng RPM. Tôi thậm chí sẽ không cài đặt các gói dành cho một phiên bản khác của cùng một hệ điều hành (ví dụ: các gói Ubuntu 14.04 trên hệ thống 16.04) trừ khi tôi biết chính xác những gì tôi đang làm.

Vì vậy, cố gắng hỗ trợ cả RPM và .deb trên cùng một hệ thống là điều không cần thiết. Trong một số tình huống tuyệt vọng nhất định, bạn có thể chuyển đổi các gói cụ thể bằng cách sử dụng alien, nhưng bạn sẽ phải nỗ lực rất nhiều để khắc phục các sự cố có thể phát sinh từ các vụ hack như vậy.


3
Ngay cả đối với các distro có nguồn gốc từ cùng một gia đình, các gói trộn có thể là một ý tưởng tồi. Ví dụ: Debian và Ubuntu đều dựa trên .deb nhưng Ubuntu đã đưa ra một số quyết định thiết kế khác với Debian nên việc sử dụng các gói Ubuntu trong Debian có thể không phải lúc nào cũng hoạt động.
slebetman

1
Ngay cả việc trộn các phiên bản phân phối Debian cũng là một ý tưởng tồi: wiki.debian.org/DontBreakDebian#Don.27t_make_a_FrankenDebian
stanri

Sau đó, Mint dựa trên Ubuntu dựa trên Debian ... :-)
DevSolar

1
Tôi sẽ không nói rằng tôi nghĩ đó là một ý tưởng tốt. Đồng thời, tôi không biết tại sao nó lại là một ý tưởng khủng khiếp như vậy. Tôi nghĩ những vấn đề này có thể được khắc phục - chỉ là không có phần thưởng thực sự cho việc đó.
emory

9

Chà, có alien( trang con người ), có thể chuyển đổi giữa rpm, debv.v., nhưng tôi cho rằng các vấn đề thực tế đến từ việc xử lý các phụ thuộc (tên gói khác nhau cho phần mềm) và vị trí của các tệp cấu hình.

Tất nhiên, nếu bạn muốn nói rằng cả hai loại gói có thể đến từ chính bản phân phối, thì có thể có thể được xử lý xung quanh, nhưng tại sao mọi người sẽ làm điều đó ... (Và bạn vẫn cần phải chuyển đổi mọi thứ sang cái này hoặc cái kia , vì tôi không nghĩ dpkgbiết cách đọc cơ sở dữ liệu rpmvà ngược lại.)


3

Vâng, nó có thể, nhưng nó làm hỏng phân phối.

Các gói không chỉ là định dạng, có thể dễ dàng chuyển từ định dạng này sang định dạng khác.

Lưu ý: các công cụ cài đặt gói cần phải được chuyển, bởi vì người ta muốn có một danh sách tập trung của tất cả các gói, phiên bản, phụ thuộc, tệp cấu hình, tập lệnh cài đặt trước và sau (nếu bạn thay thế một gói bằng một gói khác, trong một gói khác định dạng, bạn mong đợi rằng các tập lệnh gỡ cài đặt (định dạng cũ) được chạy từ hệ thống gói mới.

Nhưng một bản phân phối và các gói không chỉ là một định dạng của các gói. Ví dụ: với Debian: chúng tôi muốn đặt các tệp vào đúng vị trí, chúng tôi muốn cung cấp trang thủ công, chúng tôi muốn có một số tập lệnh khử phổ biến, chúng tôi muốn chương trình chạy trong nhiều kiến ​​trúc, môi trường đồ họa khác nhau, để người dùng tìm thấy bản thân cũng quen thuộc trong một bản phân phối với các gói mới.

Trong Debian, chúng tôi muốn các gói đó có thể dễ dàng xây dựng bởi người dùng (từ các nguồn), để người ta có thể tùy chỉnh một số gói quan trọng (cho anh ta). Điều này đòi hỏi rất nhiều cơ sở hạ tầng, mà hầu hết các tác giả thượng nguồn không thể cung cấp (xây dựng và kiểm tra tự động trên các kiến ​​trúc khác nhau và được thực hiện theo thời gian). Và cụ thể Debian cũng là các yêu cầu của giấy phép, do đó việc phân nhánh một gói hoặc phân phối sẽ dễ dàng hơn mà không cần phải kiểm tra tất cả các gói.

Cuối cùng, một phân phối được thực hiện bởi các gói nhất quán, không chỉ bởi các gói.


0

Có và hầu hết các distro dựa trên .deb đã làm điều đó, nhưng ...

Trên Debian và các gia đình liên quan, ít nhất, bạn có alien, điều này sẽ cho phép bạn cài đặt các gói RPM.

Bạn sẽ gặp vấn đề tương tự khi trộn các gói không được thiết kế để hoạt động với bản phân phối của bạn khi bạn cài đặt các gói nước ngoài bất kể định dạng - nếu bạn cài đặt RPM trên hệ thống dựa trên DEB, RPM đó phải tương thích với hệ thống của bạn , giống như bạn đang cài đặt gói RPM trên hệ thống dựa trên RPM, và đó là nhưng. Bạn có thể làm điều đó, nhưng có lẽ bạn không muốn.


0

Có và không. deb và vòng / phút chỉ là định dạng. Bạn có thể hỗ trợ cả hai định dạng nhưng nó vô nghĩa. Các gói thường không thể so sánh giữa các bản phân phối, đặc biệt là các bản phân phối không dựa trên nhau.

Nếu tất cả các bản phân phối có cùng yêu cầu phiên bản thì tất cả bản phân phối sẽ là một lựa chọn gói. Bạn có thể cài đặt bất kỳ phân phối bằng cách liệt kê các gói.

Nhưng các bản phân phối phải cung cấp phần mềm mà họ có thể hỗ trợ. Nếu một thư viện làm cho ứng dụng của bạn không được duy trì và bản thân nó đòi hỏi một thư viện đã được thay thế bởi một thứ khác, làm thế nào để bạn giải quyết xung đột này? Trình quản lý gói không thể mã cổng. Có thể có nhiều người kế vị được lựa chọn bởi các bản phân phối khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.