Score:7

สคริปต์หลังการติดตั้งสำหรับแพ็คเกจคืออะไร

ธง my

ฉันเห็นคำถามมากมายในถาม Ubuntu เกี่ยวกับข้อผิดพลาดเช่นนี้:

สคริปต์หลังการติดตั้ง foo ส่งคืนสถานะการออก 1

สคริปต์หลังการติดตั้งคืออะไรกันแน่? สคริปต์หลังการติดตั้งอยู่ที่ไหน

ฉันได้ข้ามผ่าน คำถามนี้ ที่ค่อนข้างเกี่ยวข้อง แต่จะกล่าวถึงทริกเกอร์หลังการติดตั้งมากกว่าสคริปต์หลังการติดตั้ง

muru avatar
us flag
"ตัวจัดการแพ็คเกจขั้นสูงตรวจพบสคริปต์หลังการติดตั้งและ Dpkg เรียกใช้สคริปต์" ไม่. Dpkg เป็นตัวจัดการสคริปต์ postinst แต่เพียงผู้เดียว Apt ไม่มีส่วนเกี่ยวข้องกับมัน Apt เรียกใช้ dpkg เพื่อทำสิ่งต่างๆ มากมาย จำไว้
Score:13
ธง my

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

มาทำความเข้าใจกันดีกว่าผ่านตัวอย่าง:

  • สมมติว่าคุณกำลังติดตั้งเคอร์เนลที่ใหม่กว่า เมื่อทำการติดตั้ง .deb ไฟล์เสร็จสมบูรณ์ มันจำเป็นต้องบอก GRUB ว่าติดตั้งเคอร์เนลแล้ว เพื่อให้คุณสามารถบูตเข้าไปได้ ดังนั้นหลังการติดตั้งแพ็คเกจจะบอก GRUB ว่าติดตั้งเคอร์เนลแล้วโดยดำเนินการตามคำสั่ง ปรับปรุงด้วง และ อัปเดต-initramfs. สำหรับข้อมูลเพิ่มเติม โปรดดูที่ส่วนคำถามที่พบบ่อย

ตัวอย่างทั่วไปอาจเป็นดังนี้:

  • สมมติว่าคุณกำลังติดตั้งแพ็คเกจ ฟู. สมมติว่าตอนนี้แพ็คเกจต้องการบริการที่เรียกว่า บาร์ ที่จะปิดใช้งาน มันจะปิดการใช้งานได้อย่างไร? ผู้พัฒนาจะเพิ่มคำสั่ง systemctl ปิดการใช้งาน bar.serviceซึ่งจะปิดใช้บริการในส่วน ฟู สคริปต์หลังการติดตั้งของแพ็คเกจ ดังนั้นสคริปต์หลังการติดตั้งของแพ็คเกจประกอบด้วย เพิ่มเติม คำสั่ง อัพเดต ฯลฯ...

    การติดตั้งประกอบด้วยขั้นตอนต่อไปนี้:

    1. แยกไฟล์ควบคุมของแพ็คเกจใหม่

    2. หากมีการติดตั้งเวอร์ชันอื่นของแพ็คเกจเดียวกัน ก่อนการติดตั้งใหม่ ให้รันสคริปต์ prerm ของ แพ็คเกจเก่า

    3. เรียกใช้สคริปต์ preinst หากมีให้ในแพ็คเกจ

    4. แตกไฟล์ใหม่และในขณะเดียวกันก็สำรองไฟล์ ไฟล์เก่า ดังนั้นหากมีสิ่งผิดพลาดก็สามารถเป็นได้ บูรณะ

    5. หากมีการติดตั้งเวอร์ชันอื่นของแพ็คเกจเดียวกัน ก่อนการติดตั้งใหม่ ให้รันสคริปต์ postrm ของ แพ็คเกจเก่า โปรดทราบว่าสคริปต์นี้จะดำเนินการหลังจาก สคริปต์ preinst ของแพ็คเกจใหม่เนื่องจากไฟล์ใหม่ จะถูกเขียนในเวลาเดียวกัน ไฟล์เก่าจะถูกลบออก

    6. กำหนดค่าแพ็คเกจ

หลังการติดตั้งอยู่ภายใต้ "กำหนดค่าแพ็คเกจ" มันประกอบด้วย:

  1. บอกแอปพลิเคชันอื่น ๆ เกี่ยวกับการติดตั้งแพ็คเกจสำเร็จ

  2. เส้นทางที่แม่นยำไปยังแพ็คเกจเพื่อให้ผู้ใช้และแอปพลิเคชันอื่นสามารถใช้/ดำเนินการได้

  3. ค้นหาข้อผิดพลาดในการติดตั้งและพิมพ์ข้อความแสดงข้อผิดพลาด


ส่วนคำถามที่พบบ่อย


  • สคริปต์เหล่านี้อยู่ที่ไหน

    สคริปต์เหล่านี้อยู่ใน /var/lib/dpkg/info. สคริปต์เหล่านี้มี .postinst การขยาย. คุณสามารถเรียกใช้ ค้นหา .postinst เพื่อค้นหาสคริปต์เหล่านี้เพิ่มเติม

    ตัวอย่างสคริปต์หลังการติดตั้งมีลักษณะดังนี้:

    #!/bin/sh
    ตั้ง -e
    ถ้า [ -x /usr/sbin/update-initramfs ]; แล้ว
    /usr/sbin/update-initramfs -u -k ทั้งหมด
    ไฟ
    
  • หมายความว่าอย่างไรหากสคริปต์หลังการติดตั้งส่งคืน สถานะทางออก 1?

    โดยทั่วไป หมายความว่าสคริปต์หลังการติดตั้งจะกลับมา ทางออก 1 เพื่อระบุว่าคำสั่งภายในสคริปต์หลังการติดตั้งล้มเหลวด้วยเหตุผลใดก็ตาม

  • ฉันจะแก้ไขได้อย่างไร สถานะทางออก 1?

    คุณสามารถลอง googling ข้อผิดพลาดด้วยคำสั่งและแก้ไขได้ หากคุณพบข้อผิดพลาดเกี่ยวกับ ฉลาด และ/หรือ dpkgจากนั้นคุณสามารถลบสคริปต์หลังการติดตั้งและย้ายกลับอย่างปลอดภัยหลังจากที่คุณแก้ไขคำสั่งแล้ว อย่างไรก็ตาม นี่อาจไม่ใช่วิธีแก้ปัญหาที่ถูกต้องเสมอไป คุณอาจต้องการ ถามคำถามใหม่.

    คำสั่งที่มีประโยชน์สำหรับการแก้ไขข้อผิดพลาดทั่วไปของสคริปต์หลังการติดตั้งมีระบุไว้ในตารางด้านล่าง:

    สั่งการ คำอธิบาย มีพลัง ไวยากรณ์
    เหมาะที่จะล้าง ลบแพ็กเกจพร้อมกับไฟล์คอนฟิกูเรชัน ขึ้นอยู่กับสถานการณ์ sudo apt ล้าง <package_name>
    dpkg -r นำบรรจุภัณฑ์ออกอย่างแรง เสนอข้อโต้แย้งที่เป็นประโยชน์มากมาย ใช่ เมื่อใช้กับอาร์กิวเมนต์บางอย่าง sudo dpkg -r --force-all <package_name>
    dpkg -P ล้างบรรจุภัณฑ์อย่างแรง เสนอข้อโต้แย้งที่เป็นประโยชน์มากมาย ใช่ เมื่อใช้กับอาร์กิวเมนต์บางอย่าง sudo dpkg -P --force-all <package_name>
  • ฉันกำลังถามคำถามใหม่เกี่ยวกับข้อผิดพลาดที่เกี่ยวข้องกับสคริปต์เหล่านี้ ฉันควรให้ข้อมูลใด

    คุณควรให้ข้อมูลเช่น:

    • เวอร์ชัน Ubuntu ของคุณ (เอาต์พุตของ lsb_release -d).
    • ผลลัพธ์ของ อัปเดต sudo apt.
    • เอาต์พุตเต็มรูปแบบของ sudo apt -f ติดตั้ง.
    • เนื้อหาของสคริปต์หลังการติดตั้งของแพ็คเกจ

    ควรให้รายละเอียดอื่น ๆ เมื่อถาม

  • ฉันสามารถเปลี่ยน/ลบสคริปต์เหล่านี้ได้หรือไม่

    ไม่! หลีกเลี่ยงการยุ่งกับสคริปต์เหล่านี้ หากมีข้อผิดพลาดทางไวยากรณ์หรือข้อผิดพลาดกับคำสั่งใดๆ ฉลาด จะล้มเหลวในการติดตั้งทุกครั้งสำหรับแพ็คเกจนั้น หากบังเอิญมีข้อผิดพลาดทางไวยากรณ์ คุณต้องใช้เครื่องมือแบ็กเอนด์ด้วยตนเอง เช่น dpkg เพื่อแก้ไขทุกอย่าง ฉันสามารถลบออกได้หรือไม่? ไม่! อย่าลบสคริปต์เหล่านี้เว้นแต่จะจำเป็น การลบสคริปต์เหล่านี้อาจทำให้แพ็กเกจเหล่านี้ใช้งานไม่ได้

  • ฉันจะเรียกใช้สคริปต์เหล่านี้อีกครั้งได้อย่างไร

    ต้องการดำเนินการสคริปต์หลังการติดตั้งของแพ็คเกจอีกครั้งหรือไม่ อย่างที่ฉันได้กล่าวไปก่อนหน้านี้ การรันสคริปต์หลังการติดตั้งอยู่ภายใต้ "การกำหนดค่า" ของแพ็คเกจ ดังนั้นวิ่งง่ายๆ:

    sudo dpkg --configure <แพ็คเกจ>
    

    ที่ไหน <package> คือชื่อของแพ็คเกจที่คุณต้องการกำหนดค่า


เพื่อนและญาติของสคริปต์นี้

ลองวิ่ง ใน /var/lib/dpkg/info และ เกรป ผลลัพธ์ที่มีรูปแบบ ความถนัด. คุณจะพบสคริปต์ประเภทเดียวกันจำนวนมากในขณะที่ส่งออก บางส่วนของพวกเขาคือ .postrm, .preinst, พรีม และ .รายการ พร้อมกับไฟล์ลายเซ็น นี่คือตารางแสดงการทำงานของแต่ละสคริปต์เหล่านี้:

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

สำหรับข้อมูลเพิ่มเติมโปรดดูที่ หน้าจัดการของ dpkg

Akbarkhon Variskhanov avatar
mx flag
ฉันไม่แน่ใจว่า `sudo apt -f install` เป็นความคิดที่ดีหรือไม่ บางครั้งเมื่อคุณมีเพียงแพ็คเกจเดียวที่ต้องดำเนินการ `apt` จะไม่แจ้งให้คุณทราบ และเนื่องจากการเรียกใช้ `sudo` ก่อนหน้านี้จะรักษาการยืนยันตัวตนของผู้ใช้ไว้ การดำเนินการนี้อาจทำให้ระบบเสียหายได้ วิธีแก้ปัญหาที่ดีกว่าคือใช้งานโดยไม่มีส่วน `sudo` และเปิดใช้งานโหมด `--simulate`

โพสต์คำตอบ

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