Score:1

การแปลงแพ็คเกจ RPM สำหรับเดเบียนล้มเหลว "เนื่องจากอักขระเมตาของเชลล์"

ธง in

ฉันกำลังพยายามแปลงแพ็คเกจ RPM "MegaRAID Storage Manager" เป็นแพ็คเกจ debian dep ฉันใช้แพ็คเกจเอเลี่ยนตามที่อธิบายไว้ที่นี่:

https://hosting-tutorials.co.uk/tutorials/linux/installing-megaraid-storage-manager-on-debian

นี่คือแพ็คเกจที่ฉันพยายามแปลง: https://docs.broadcom.com/docs-and-downloads/17.05.06.00_MSM_Linux-x64.zip

แพ็คเกจ "lib-utils2_1.00-12_all" แปลงเป็น .deb ได้ แต่ "MegaRAID_Storage_Manager-17.05.06-00.noarch.rpm" ไม่ใช่:

# เอเลี่ยน --scripts *.rpm
สร้าง lib-utils2_1.00-12_all.deb แล้ว

การสร้างแพ็คเกจล้มเหลว นี่คือบันทึก:
dh ไบนารี
   dh_update_autotools_config
   dh_autoreconf
   สร้างตราประทับ debian/debhelper-build-stamp
   dh_testroot
   dh_prep
   เดเบียน/กฎ override_dh_auto_install
make[1]: เข้าสู่ไดเรกทอรี '/root/MSM/disk/MegaRAID_Storage_Manager-17.05.06'
mkdir -p debian/megaraid-storage-manager
# คัดลอกไฟล์ของแพ็คเกจ
หา . -ความลึกสูงสุด 1 -ความลึกขั้นต่ำ 1 -ไม่ -ชื่อเดเบียน -พิมพ์0 | \
        sed -e s#'./'##g | \
        xargs -0 -r -i cp -a ./{} debian/megaraid-storage-manager/{}
ทำ [1]: ออกจากไดเร็กทอรี '/root/MSM/disk/MegaRAID_Storage_Manager-17.05.06'
   dh_installdocs
   dh_installchangelogs
   dh_perl
   dh_usrlocal
dh_usrlocal: ข้อผิดพลาด: ไม่สามารถสร้างเชลล์สคริปต์ที่ถูกต้องสำหรับ /usr/local/MegaRAID Storage Manager เนื่องจากอักขระเมตาของเชลล์
ทำ: *** [เดเบียน/กฎ:7: ไบนารี] ข้อผิดพลาด 25

ฉันไม่รู้วิธีแก้ไขข้อผิดพลาด "ไม่สามารถสร้างเชลล์สคริปต์ที่ถูกต้องสำหรับ /usr/local/MegaRAID Storage Manager เนื่องจากอักขระเมตาของเชลล์" และจะได้รับการขอบคุณสำหรับความช่วยเหลือใด ๆ

โฮสต์ที่ฉันลองคือ Debian 10 และ Debian 11, amd64 arch ทั้งหมดและเรียกใช้เชลล์ "bash" ฉันลองเปลือก "sh" ด้วย

Score:2
ธง cl
A.B

TL;ดร: ไม่รองรับช่องว่างและอักขระเมตาอื่นๆ สำหรับไดเร็กทอรีที่จะลงจอด /usr/ท้องถิ่น.

/usr/local/ตัวจัดการพื้นที่เก็บข้อมูล MegaRAID มีช่องว่าง เห็นได้ชัดว่าแพ็คเกจนี้ไม่เป็นไปตามแนวทางปฏิบัติที่ดีในโลก *ระวัง (ตำหนิ LSI/Broadcom)

คุณสามารถแปลงเอเลี่ยนเป็น tar หรือแยกโดยตรงโดยใช้ rpm2cpioค้นหาวิธีการใช้สคริปต์การติดตั้งและดูว่าจะนำกลับมาใช้อย่างไร เลือกดูว่าเป็นไปได้ที่จะเปลี่ยนชื่อไดเร็กทอรีด้วยการเว้นวรรคหรือไม่ หากมีการอ้างอิงใด ๆ ที่สามารถแทนที่ได้ง่ายเช่นกัน และสร้างแพ็คเกจไบนารีโดยตรงโดยใช้ dpkg-deb -b ซึ่งจะไม่ได้รับผลกระทบจากปัญหาดังกล่าว แต่จะสร้างแพ็คเกจที่ไม่เป็นไปตามนโยบายของเดเบียน

คำอธิบายด้านล่าง...


เดอะ นโยบายเดเบียน อาณัติว่าไม่ควรติดตั้งสิ่งใดในแพ็คเกจ /usr/ท้องถิ่น ยกเว้นบางไดเร็กทอรีด้วยวิธีทางอ้อม:

9.1.2. โปรแกรมเฉพาะไซต์

ตามคำสั่งของ FHS แพ็คเกจจะต้องไม่วางไฟล์ใด ๆ /usr/ท้องถิ่นโดยใส่ไว้ในไฟล์ระบบไฟล์เก็บถาวร แกะโดย dpkg หรือโดยการจัดการในสคริปต์ผู้ดูแล

อย่างไรก็ตาม, แพ็คเกจอาจสร้างไดเร็กทอรีว่างด้านล่าง /usr/ท้องถิ่น ดังนั้น ที่ผู้ดูแลระบบรู้ว่าจะวางไซต์เฉพาะที่ใด ไฟล์. สิ่งเหล่านี้ไม่ใช่ไดเร็กทอรีใน /usr/ท้องถิ่นแต่เป็นลูกของ ไดเร็กทอรีใน /usr/ท้องถิ่น. ไดเร็กทอรีเหล่านี้ (/usr/local/*/dir/) ควรลบออกเมื่อนำแพ็คเกจออกหากว่างเปล่า

โปรดทราบว่านี่ใช้ได้กับไดเร็กทอรีเท่านั้น ด้านล่าง /usr/ท้องถิ่น, ไม่ ใน /usr/ท้องถิ่น.

[...]

ดังนั้นแพ็คเกจนี้จึงไม่สามารถปฏิบัติตามได้เช่นไฟล์ /usr/local/MegaRAID Storage Manager/startmonitorhelp.sh ไม่เป็นไปตามข้อกำหนด: เป็น ไฟล์ บรรจุในที่ใดที่หนึ่ง /usr/ท้องถิ่น.

คนต่างด้าว ใช้ dh_usrlocal build helper เพื่อแปลงไดเร็กทอรี (ยังคงเป็นไปตามมาตรฐาน) โดยอัตโนมัติสำหรับการเพิ่มในสคริปต์ผู้ดูแล (เช่น บน Debian ก่อน, ภายหลัง สคริปต์อื่น ๆ ที่เก็บถาวรแยกต่างหากใน .deb เท่ เก็บถาวรและจะถูกเก็บไว้ใน /var/lib/dpkg/info/ ในภายหลัง) ซึ่งจะดำเนินการไม่กี่ มคเดียร์ คำสั่งในการติดตั้ง:

dh_usrlocal เป็นโปรแกรม debhelper ที่สามารถใช้ในการสร้าง แพ็คเกจที่จะให้ไดเร็กทอรีย่อยใน /usr/ท้องถิ่น เมื่อไร ติดตั้งแล้ว

พบไดเร็กทอรีย่อยของ usr/ท้องถิ่น ในไดเร็กทอรีการสร้างแพ็คเกจ และลบออกโดยแทนที่ด้วยส่วนย่อยของสคริปต์ผู้ดูแล (เว้นเสียแต่ว่า -น ถูกใช้) เพื่อสร้างไดเร็กทอรี ณ เวลาติดตั้ง และ นำออกเมื่อนำหีบห่อออกในลักษณะที่สอดคล้องกับ นโยบายเดเบียน ข้อมูลโค้ดเหล่านี้ถูกแทรกลงในสคริปต์ผู้ดูแล โดย dh_installdeb.

เนื้อหาของ /usr/bin/dh_usrlocal สคริปต์ Perl ประกอบด้วย:

          # สืบทราบบางกรณีที่ชัดเจนของ "สิ่งนี้จะไม่สิ้นสุด
          #ดี" เราพึ่งพาอะไร "ในขณะที่อ่าน dir ... ; ทำ"
          #สามารถดำเนินการเพื่อความถูกต้อง
          ถ้า ($fn =~ m{[\s!'"\$()*#;<>?@\[\]\`|]}) {
                  ข้อผิดพลาด ("ไม่สามารถสร้างเชลล์สคริปต์ที่ถูกต้องสำหรับ $fn เนื่องจากอักขระเมตาของเชลล์");
          }

\s ซึ่งหมายความว่าช่องว่างใดๆ ใน PCRE เป็นส่วนหนึ่งของอักขระเมตาที่ต้องห้าม และทำให้เกิดข้อผิดพลาดเมื่อแยกวิเคราะห์ /usr/local/ตัวจัดการพื้นที่เก็บข้อมูล MegaRAID.

โพสต์คำตอบ

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