Score:0

จะติดตั้ง rpm อื่นเป็นการพึ่งพา rpm อื่นได้อย่างไร

ธง ng

เราได้สร้างไฟล์ rpm ของแอปพลิเคชันโดยใช้ fpm ที่นั่นเราได้ตั้งค่า python3 เป็นการอ้างอิง ดังนั้นมันจึงติดตั้งโดยอัตโนมัติก่อน rpm หลัก

แต่มันกำลังติดตั้ง 3.7 หากต้องการแทนที่ด้วย 3.8 เราต้องตรวจสอบเวอร์ชันของระบบปฏิบัติการก่อนว่าเป็น centos หรือ awslinux และจากนั้นเราจำเป็นต้องติดตั้ง rpm เฉพาะ

ดังนั้นฉันจึงเก็บบล็อกเงื่อนไขเหล่านี้ไว้ในสคริปต์ก่อนการติดตั้งและส่งต่อไปยังพารามิเตอร์ --before-install

แต่มันติดขัดระหว่างการติดตั้ง rpm

ดังนั้น เมื่อฉันตรวจสอบด้วยโหมดรายละเอียดฉันพบว่ามันไม่ทำงานกับพรีอินสท์

เหตุผลคือการติดตั้ง ptyhon ไม่สามารถใช้การล็อคและดำเนินการติดตั้งต่อได้เนื่องจาก projectn ได้รับการล็อคแล้ว

RPM: ข้อผิดพลาด: ไม่สามารถสร้างการล็อกธุรกรรมบน /var/lib/rpm/.rpm.lock (ทรัพยากรไม่พร้อมใช้งานชั่วคราว)
ข้อผิดพลาด: ไม่สามารถทำธุรกรรมได้


+ echo 'ตรวจพบ centos'
ตรวจพบ centos
+ sudo yum ติดตั้ง -yq python38
RPM: ข้อผิดพลาด: ไม่สามารถสร้างการล็อกธุรกรรมบน /var/lib/rpm/.rpm.lock (ทรัพยากรไม่พร้อมใช้งานชั่วคราว)
ข้อผิดพลาด: ไม่สามารถทำธุรกรรมได้

คำแนะนำใด ๆ ที่คุณสามารถให้ได้

หากต้องการเจาะจงมากขึ้น โปรดดูรายละเอียดด้านล่าง

เครื่องมือที่ใช้สร้าง rpm: เอฟพีเอ็ม ฉันต้องติดตั้ง python3.8 เป็นการพึ่งพาแอปพลิเคชัน rpm

ถ้าฉันตั้งค่านั้นเป็นการพึ่งพาโดยใช้ -d python3 แสดงว่ากำลังติดตั้งเวอร์ชัน 3.7 บน amazon linux และ 3.6 บน centos 8 หากต้องการใช้เวอร์ชัน 3.8 มีขั้นตอนอื่นๆ อีกเล็กน้อยที่ต้องดำเนินการก่อนติดตั้งแพ็คเกจ

ดังนั้นฉันจึงลบ python3 ออกจากส่วนการพึ่งพาและเพิ่ม --before-install เป็นเชลล์สคริปต์

นี่คือเชลล์สคริปต์ที่ฉันเก็บไว้ที่นั่น

#!/bin/bash
echo "เริ่มพรีอินท์"

echo "กำลังตรวจสอบเวอร์ชันระบบปฏิบัติการ"


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

ถ้า [[ "$DISTRO" =~ "centos ลินุกซ์" ]]; แล้ว
  echo "ตรวจพบ centos"
  sudo yum ติดตั้ง -yq python38
elif [[ "$DISTRO" =~ "อเมซอน ลินุกซ์" ]]; แล้ว
  echo "ตรวจพบ amazon linux"
  sudo yum ติดตั้ง -yq amazon-linux-extras
  sudo amazon-linux-extras เปิดใช้งาน python3.8
  sudo yum ติดตั้ง -yq python3.8
elif [[ "$DISTRO" =~ "อูบุนตู" ]]; แล้ว
  echo "ตรวจพบอูบุนตู"
  sudo apt ติดตั้ง pyhton3 -yq
อื่น
  echo "ทั้ง centos และ amazon linux 2"
ไฟ

มันกำลังเรียกใช้สคริปต์ แต่ติดอยู่ที่การติดตั้ง python จากเชลล์สคริปต์

RPM: ข้อผิดพลาด: ไม่สามารถสร้างการล็อกธุรกรรมบน /var/lib/rpm/.rpm.lock (ทรัพยากรไม่พร้อมใช้งานชั่วคราว)
ข้อผิดพลาด: ไม่สามารถทำธุรกรรมได้


+ echo 'ตรวจพบ centos'
ตรวจพบ centos
+ sudo yum ติดตั้ง -yq python38
RPM: ข้อผิดพลาด: ไม่สามารถสร้างการล็อกธุรกรรมบน /var/lib/rpm/.rpm.lock (ทรัพยากรไม่พร้อมใช้งานชั่วคราว)
ข้อผิดพลาด: ไม่สามารถทำธุรกรรมได้

ข้อเสนอแนะใด ๆ เกี่ยวกับวิธีการแก้ไขปัญหานี้?

ความต้องการของฉันคือการติดตั้ง python3.8 เป็นส่วนหนึ่งของผลิตภัณฑ์ของเรา rpm และเป็นการพึ่งพา

vidarlo avatar
ar flag
ปัญหาของคุณคือ rpm ไม่สามารถล็อคได้ คุณมีกระบวนการ `rpm` อื่นทำงานอยู่หรือไม่? `ps aux | grep rpm` จะบอกคุณ
cn flag
คุณไม่สามารถสร้างธุรกรรมได้ในขณะที่ทำธุรกรรม (การติดตั้ง RPM) เพียงใส่ `Requires: python(abi) = 3.8` หากแอปของคุณต้องการเวอร์ชันนั้น อย่างไรก็ตาม ในกรณีของคุณ ฉันจะใช้วิธีรวมทั้งหมดเข้าด้วยกันโดยใช้บางอย่างเช่น [pyinstaller](https://pyinstaller.org/en/stable/) จากนั้นทำแพ็คเกจโดยไม่ต้องพึ่งพา python
Score:0
ธง cn

การติดตั้ง rpms ในสคริปต์ของ rpm อื่นไม่ทำงาน อยู่ในธุรกรรม rpm แล้ว นอกจากนี้ การขึ้นต่อกันไม่ได้อยู่ในข้อมูลเมตาของแพ็คเกจ และ yum/dnf ไม่สามารถแก้ไขได้ ทั้งสองอย่างนี้เป็นประสบการณ์การใช้งานที่ไม่ดี

การกระจายหลายรายการในข้อมูลจำเพาะ rpm เดียวเป็นไปได้ด้วยการใช้เงื่อนไขอย่างสร้างสรรค์ สมมติว่าคุณต้องการ Python 3.8 เป็นอย่างน้อย ยืมจากแพ็คเกจ rpm ต่างๆ ใน CentOS และที่อื่น ๆความลึกของบิลด์อาจมีลักษณะดังนี้:

%if 0%{?fedora} || 0%{?rhel} > 8 
BuildRequires: python3-devel
% สิ้นสุด
%ถ้า 0%{?amzn} || 0%{?rhel} == 8 || 0%{?suse_version} > 1500
BuildRequires: python38-devel
% สิ้นสุด

สังเกตสิ่งที่นำหน้าเลขศูนย์แปลก ๆ สิ่งนี้อนุญาตให้ใช้ในนิพจน์แม้ว่าจะไม่ได้กำหนดตัวแปรก็ตาม

ต่อด้วย แนวทางการบรรจุ Python สำหรับ Fedora (หรือ EL) เพื่อ % ติดตั้งสิ่งนั้น สิ่งหนึ่งที่ยุ่งยาก: สำหรับ distros Python บางตัวคือ /usr/bin/python3 อื่น ๆ /usr/bin/python38 อาจต้องการทำให้เป็นตัวแปร

Amazon repo python3.8 พิเศษไม่ได้เปิดใช้งานตามค่าเริ่มต้น เปิดใช้งานสำหรับการสร้างแพ็คเกจ เช่น ใน repos ของเครื่องมือจำลอง ผู้ใช้จะต้องเปิดใช้งาน repo เพื่อติดตั้งแพ็คเกจเหล่านี้

โดยปกติแล้วมาโครบรรจุภัณฑ์ของ Fedora จะสร้างการพึ่งพาที่เหมาะสมสำหรับโมดูล python ที่ติดตั้งในตำแหน่งทั่วไป เช่น %{python3_sitelib} ฉันไม่รู้ว่า amzn ทำอะไรเพื่อสิ่งนี้ ซึ่งอาจจะเหมือนกัน ถ้าไม่ คุณอาจต้องเพิ่ม deps ด้วยตนเอง เช่น ต้องการ: python(abi) = 3.8

สร้างไฟล์ข้อมูลจำเพาะที่เป็นผลลัพธ์ในแต่ละ distro ที่น่าสนใจ: Fedora, RHEL, Amazon Linux, CentOS Stream, SUSE แม้ว่าแพ็คเกจที่แตกต่างกันเล็กน้อยสำหรับแต่ละแพ็คเกจนั้นน่ารำคาญ แต่ผลลัพธ์ที่ได้คือประสบการณ์การติดตั้ง yum ที่ง่ายสำหรับผู้ใช้

แพ็คเกจ Debian เป็นแบบฝึกหัดสำหรับผู้อ่าน


ตัวสร้างแพ็คเกจอัตโนมัติเช่น fpm อาจไม่ได้ส่งออกเป็นแพ็คเกจที่ชาญฉลาด การแลกเปลี่ยนแบบคลาสสิก: ตัวสร้างที่รวดเร็วเพื่อรองรับ distros หลายตัว เทียบกับมนุษย์บรรจุภัณฑ์ที่สามารถทำบางสิ่งโดยเจตนาด้วยนิสัยใจคอของการกระจายหลายตัว

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา