Điểm:0

Làm cách nào để cài đặt một vòng/phút khác dưới dạng phụ thuộc vào một vòng/phút khác?

lá cờ ng

Chúng tôi đã xây dựng tệp rpm ứng dụng bằng fpm. Ở đó, chúng tôi đã đặt python3 làm phần phụ thuộc, vì vậy nó sẽ tự động cài đặt trước vòng/phút chính.

Nhưng nó đang cài đặt 3.7. Để thay thế bằng 3.8, chúng ta cần kiểm tra phiên bản hệ điều hành trước xem đó là centos hay awslinux và dựa vào đó chúng ta cần cài đặt rpm cụ thể.

Vì vậy, tôi đã giữ các khối điều kiện này trong tập lệnh cài sẵn và chuyển đến tham số --before-install.

Tuy nhiên, nó đang bị kẹt trong quá trình cài đặt rpm.

Vì vậy, khi tôi kiểm tra bằng chế độ dài dòng.Tôi thấy rằng, nó không hoạt động với preinst.

Lý do là do cài đặt ptyhon không thể áp dụng khóa và tiếp tục cài đặt vì projectn đã khóa trên đó.

RPM: lỗi: không thể tạo khóa giao dịch trên /var/lib/rpm/.rpm.lock (Tài nguyên tạm thời không khả dụng)
Lỗi: Không thể chạy giao dịch.


+ echo 'đã phát hiện centos'
centos được phát hiện
+ Sudo yum cài đặt -yq python38
RPM: lỗi: không thể tạo khóa giao dịch trên /var/lib/rpm/.rpm.lock (Tài nguyên tạm thời không khả dụng)
Lỗi: Không thể chạy giao dịch.

Bất kỳ đề nghị bạn có thể cung cấp

Để được cụ thể hơn, xin vui lòng tìm chi tiết dưới đây.

Công cụ sử dụng để tạo rpm: fpm Tôi cần cài đặt python3.8 dưới dạng phụ thuộc vào vòng/phút của ứng dụng.

Nếu tôi đặt đó là phần phụ thuộc bằng cách sử dụng -d python3, thì nó đang cài đặt phiên bản 3.7 trên amazon linux và 3.6 trên centos 8. Để sử dụng phiên bản 3.8, cần thực hiện một số bước khác trước khi cài đặt gói.

Vì vậy, tôi đã xóa python3 khỏi phần phụ thuộc và thêm vào --before-install dưới dạng tập lệnh shell.

Đây là kịch bản shell tôi giữ ở đó.

#!/bin/bash
echo "Bắt đầu preinst"

echo "Đang kiểm tra phiên bản hệ điều hành"


DISTRO=$(cat /etc/*-release | grep -w NAME | cut -d= -f2 | tr -d '"' | tr '[:upper:]' '[:lower:]')

nếu [[ "$DISTRO" =~ "centos linux" ]]; sau đó
  echo "đã phát hiện centos"
  Sudo yum cài đặt -yq python38
elif [[ "$DISTRO" =~ "amazon linux" ]]; sau đó
  tiếng vang "đã phát hiện amazon linux"
  cài đặt sudo yum -yq amazon-linux-extend
  sudo amazon-linux-extras kích hoạt python3.8
  Sudo yum cài đặt -yq python3.8
elif [[ "$DISTRO" =~ "ubuntu" ]]; sau đó
  tiếng vang "đã phát hiện Ubuntu"
  Sudo apt cài đặt pyhton3 -yq
khác
  echo "Cả centos hay amazon linux 2"
fi

Nó đang kích hoạt tập lệnh nhưng bị kẹt khi cài đặt python từ tập lệnh shell.

RPM: lỗi: không thể tạo khóa giao dịch trên /var/lib/rpm/.rpm.lock (Tài nguyên tạm thời không khả dụng)
Lỗi: Không thể chạy giao dịch.


+ echo 'đã phát hiện centos'
centos được phát hiện
+ Sudo yum cài đặt -yq python38
RPM: lỗi: không thể tạo khóa giao dịch trên /var/lib/rpm/.rpm.lock (Tài nguyên tạm thời không khả dụng)
Lỗi: Không thể chạy giao dịch.

Bất kỳ đề xuất về làm thế nào để sửa lỗi này?

Yêu cầu của tôi là cài đặt python3.8 như một phần của vòng quay sản phẩm của chúng tôi cũng như một phần phụ thuộc.

vidarlo avatar
lá cờ ar
Vấn đề của bạn là rpm không thể yêu cầu khóa. Bạn có tiến trình `rpm` khác đang chạy không? `ps aux | grep rpm` sẽ cho bạn biết
lá cờ cn
Bạn không thể tạo giao dịch trong khi thực hiện giao dịch (cài đặt RPM). Chỉ cần đặt `Yêu cầu: python(abi) = 3.8` nếu ứng dụng của bạn yêu cầu phiên bản cụ thể đó. Tuy nhiên, đối với trường hợp của bạn, tôi sẽ đi theo lộ trình gộp tất cả lại với nhau, sử dụng thứ gì đó như [pyinstaller](https://pyinstaller.org/en/stable/) sau đó đóng gói nó mà không phụ thuộc vào python.
Điểm:0
lá cờ cn

Cài đặt rpms trong tập lệnh của rpm khác không hoạt động. Đã có trong một giao dịch rpm. Hơn nữa, các phụ thuộc không có trong siêu dữ liệu gói và yum/dnf không thể giải quyết chúng. Một trong hai điều này là trải nghiệm người dùng kém.

Có thể thực hiện nhiều bản phân phối trong một thông số vòng/phút với việc sử dụng sáng tạo các điều kiện. Giả sử bạn yêu cầu ít nhất Python 3.8. Vay từ các gói rpm khác nhau trong CentOS và những nơi khác, bản dựng dep có thể giống như:

%if 0%{?fedora} || 0%{?rhel} > 8 
Yêu cầu xây dựng: python3-devel
%endif
%if 0%{?amzn} || 0%{?rhel} == 8 || 0%{?suse_version} > 1500
Yêu cầu bản dựng: python38-devel
%endif

Lưu ý số không có tiền tố kỳ lạ. Điều này cho phép sử dụng trong các biểu thức ngay cả khi biến không được xác định.

Tiếp tục với Hướng dẫn đóng gói Python cho Fedora (hoặc EL) để %cài đặt thứ đó. Một điều khó khăn: đối với một số bản phân phối này, Python là /usr/bin/python3 những bản khác là /usr/bin/python38. Có thể muốn làm cho một biến.

Amazon extra repo python3.8 không được bật theo mặc định. Kích hoạt nó để xây dựng gói, ví dụ như trong kho lưu trữ của công cụ mô phỏng. Người dùng cũng sẽ cần kích hoạt repo để cài đặt các gói này.

Các macro đóng gói Fedora thường sẽ tạo ra các phụ thuộc thích hợp cho các mô-đun python được cài đặt ở các vị trí điển hình như %{python3_sitelib} Tôi không biết chính xác amzn làm gì cho việc này, có thể giống nhau. Nếu không, bạn có thể cần thêm deps thủ công, chẳng hạn như Yêu cầu: python(abi) = 3,8

Xây dựng tệp thông số kết quả trên từng bản phân phối quan tâm duy nhất: Fedora, RHEL, Amazon Linux, CentOS Stream, SUSE. Mặc dù một gói hơi khác nhau cho mỗi gói gây khó chịu, nhưng kết quả là trải nghiệm cài đặt yum dễ dàng cho người dùng.

Các gói Debian là một bài tập dành cho người đọc.


Trình tạo gói tự động như fpm có thể không xuất ra gói thông minh. Sự đánh đổi cổ điển: trình tạo nhanh để hỗ trợ nhiều bản phân phối, so với một trình đóng gói con người có thể làm điều gì đó có chủ ý với những điểm kỳ quặc của một số bản phân phối.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.