มีวิธีกำหนดแพ็คเกจหรือไลบรารีที่ควรโหลดเพื่อสนับสนุนการปฏิบัติการหรือไม่?


11

มีไฟล์ปฏิบัติการที่ฉันต้องการติดตั้งบนคอมพิวเตอร์ที่ฉันไม่สามารถคอมไพล์ใหม่ที่ไม่ได้สร้างเป็นแพ็คเกจได้และฉันต้องการดาวน์โหลดไลบรารี่ที่ต้องใช้ในการรัน

ด้านล่างเป็นส่วนหนึ่งของผลลัพธ์จากการทำงานlddบนมัน

libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000)
/lib/ld-linux.so.2 (0xb786e000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000)

มีเครื่องมือที่สามารถใช้ข้อมูลนี้เพื่อเลือกแพคเกจที่ควรดาวน์โหลดหรือดีกว่า แต่แตกเฉพาะรายการไลบรารีและการอ้างอิงของพวกเขาเพื่อลดการใช้งานดิสก์? ระบบกำลังทำงานบนหัวขาด VM และโปรแกรมจะแสดงผลผ่าน VNC

แม้ว่าฉันจะสงสัยว่าเดสก์ท็อปกราฟิกเต็มรูปแบบที่เป่าออกมานั้นจะจัดหาไลบรารีส่วนใหญ่ที่ฉันต้องการดาวน์โหลดเฉพาะไลบรารีที่จำเป็นเท่านั้นการพึ่งพาของพวกเขาและแพ็คเกจ X Windows เพียงพอที่จะรองรับ


1
ระบบปฏิบัติการอะไร แพ็กเกจและชื่อของมันรวมถึงตัวจัดการแพ็กเกจจะเปลี่ยนไปมาระหว่างดิสทริบิวชัน
terdon

มันเป็น Debian และ Ubuntu ในกรณีนี้
vfclists

ในกรณีนั้นคำตอบของฉันควรเหมาะกับคุณ
terdon

ในความเป็นจริงฉันกำลังจะทดสอบมันล่าช้า ฉันลืมมันไปแล้วแค่ถามคำถามที่คล้ายกันซึ่งทำให้คำถามนี้แสดงว่าเป็นคำถามที่เกี่ยวข้องที่สุด LOL
vfclists

คำตอบ:


14

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

ldd your_prog | awk '{print $1}' | sed 's/\..*//' | 
  while read n; do echo "----- $n ----"; apt-cache search ^$n; done

นี้จะแยกlddออกและเรียกใช้แล้วapt-cache(แทนที่ด้วยเทียบเท่าสำหรับระบบปฏิบัติการของคุณ) lddเพื่อค้นหาที่เก็บสำหรับแพคเกจที่มีชื่อและคำอธิบายที่มีส่วนแรกของชื่อห้องสมุดที่ส่งกลับโดย

สิ่งนี้จะไม่พบพวกเขาทั้งหมดและจะให้ผลลัพธ์มากเกินไปสำหรับบางคน (เช่นlibc) แต่อาจเป็นประโยชน์


@FaheemMitha ชี้ให้เห็นว่าapt-fileอาจเป็นวิธีที่ดีกว่า ตัวอย่างเช่น:

ldd /bin/bash | awk '/=>/{print $(NF-1)}'  | 
 while read n; do apt-file search $n; done |
  awk '{print $1}' | sed 's/://' | sort | uniq

ที่จะส่งคืนรายการชื่อแพ็คเกจที่จัดเตรียมไลบรารีที่เชื่อมโยง


1
apt-file searchที่ไฟล์จริงทางด้านขวาของลูกศรอาจมีประสิทธิภาพมากกว่า
Faheem Mitha

@FaheemMitha เป็นจุดที่ดีมากขอบคุณ แก้ไขคำตอบแล้ว
terdon

คำสั่งสามารถปรับเปลี่ยนเพื่อทดสอบการมีอยู่ของไลบรารีบนระบบเพื่อค้นหาสิ่งที่จำเป็นต้องดาวน์โหลดได้อย่างไร? ฉันคิดว่าคำถามที่ฉันถามเมื่อเร็ว ๆ นี้มีมากกว่านั้น ฉันขอให้เปิดใหม่
vfclists

@ vfclists ไม่คุ้มค่าจริงๆเพียงแค่apt-get installพวกเขาทั้งหมดและสิ่งที่ติดตั้งแล้วจะถูกละเว้น
terdon

เหตุผลก็คือสร้าง VM โดยไม่มีไลบรารี่ฟุ่มเฟือยสำหรับการดาวน์โหลดที่รวดเร็ว การติดตั้งแพคเกจมีรายการที่ไม่จำเป็นจำนวนมากและฉันต้องการไฟล์ไลบรารีและการอ้างอิงที่จำเป็นโดยโปรแกรมเรียกใช้งานเท่านั้นมันยังเปิดโอกาสให้ฉันได้ฝึกฝนทักษะการทุบตีและลีนุกซ์ของฉันอีกด้วย ไม่มีหลาม
vfclists

3

คำตอบของ @ terdon นั้นยอดเยี่ยม แต่การทำเช่นนี้จะง่ายกว่าถ้าใช้โดยdpkg-queryที่ไม่เหมือนกับการapt-fileติดตั้งตามค่าเริ่มต้นในระบบ Debian

ldd /bin/bash | awk '/=>/{print $(NF-1)}' | while read n; do dpkg-query -S $n; done | sed 's/^\([^:]\+\):.*$/\1/' | uniq

สิ่งนี้สร้างรายการแพ็กเกจ


1

ทางออกที่ดีที่สุดของคุณคือการหาแพ็คเกจที่รองรับการกระจายของคุณ แต่ถ้าสิ่งนั้นไม่ได้ผลสำหรับคุณฉันก็รู้ทางเดียวเท่านั้น

เรียกใช้ ldd ตามที่คุณมีแล้วติดตั้งการอ้างอิงเหล่านั้นด้วยตนเอง

ตัวอย่างเช่น libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)

สำหรับฉันจะหมายถึงการติดตั้งapt-get install libpango:i386และอธิษฐานว่าเวอร์ชั่นใน Debian ไม่เสถียรดีพอ

คุณจะต้องผ่านแต่ละบรรทัดของ ldd, Google, ดูในที่เก็บของคุณที่มีอยู่และโดยทั่วไปจะได้รับโชคดี จากนั้นติดตั้งพวกเขาทีละคน จนกระทั่งโปรแกรมทำงานจริง ldd จะใช้ได้กับโปรแกรม "แบบง่าย" เท่านั้น โปรแกรมที่เรียกใช้ปลั๊กอินหรือเรียกใช้รหัสโดยพลการนั้นเป็นเรื่องที่แตกต่างกันทั้งหมด สำหรับผู้ที่คุณจะต้องเรียกใช้จากคอนโซลและแก้ไขข้อผิดพลาด / ข้อผิดพลาดที่เกิดขึ้น

ที่กล่าวว่าไบนารีเท่านั้นที่ปฏิบัติการได้ยากที่จะรักษา คุณอาจต้องการพิจารณาใช้อย่างอื่น ถ้า distro ของคุณอยู่ข้างหน้านิดหน่อยหรืออยู่ด้านหลังระบบที่สร้างไฟล์ที่เรียกใช้งานได้เล็กน้อยคุณอาจไม่สามารถทำให้มันทำงานได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.