ชื่อของสคริปต์บอกว่ามันทำอะไร หมายความว่าสคริปต์มีคำสั่งที่ต้องดำเนินการหลังจากการติดตั้งเสร็จสิ้น
มาทำความเข้าใจกันดีกว่าผ่านตัวอย่าง:
- สมมติว่าคุณกำลังติดตั้งเคอร์เนลที่ใหม่กว่า เมื่อทำการติดตั้ง
.deb
ไฟล์เสร็จสมบูรณ์ มันจำเป็นต้องบอก GRUB ว่าติดตั้งเคอร์เนลแล้ว เพื่อให้คุณสามารถบูตเข้าไปได้ ดังนั้นหลังการติดตั้งแพ็คเกจจะบอก GRUB ว่าติดตั้งเคอร์เนลแล้วโดยดำเนินการตามคำสั่ง ปรับปรุงด้วง
และ อัปเดต-initramfs
. สำหรับข้อมูลเพิ่มเติม โปรดดูที่ส่วนคำถามที่พบบ่อย
ตัวอย่างทั่วไปอาจเป็นดังนี้:
สมมติว่าคุณกำลังติดตั้งแพ็คเกจ ฟู
. สมมติว่าตอนนี้แพ็คเกจต้องการบริการที่เรียกว่า บาร์
ที่จะปิดใช้งาน มันจะปิดการใช้งานได้อย่างไร? ผู้พัฒนาจะเพิ่มคำสั่ง systemctl ปิดการใช้งาน bar.service
ซึ่งจะปิดใช้บริการในส่วน ฟู
สคริปต์หลังการติดตั้งของแพ็คเกจ ดังนั้นสคริปต์หลังการติดตั้งของแพ็คเกจประกอบด้วย เพิ่มเติม คำสั่ง อัพเดต ฯลฯ...
การติดตั้งประกอบด้วยขั้นตอนต่อไปนี้:
แยกไฟล์ควบคุมของแพ็คเกจใหม่
หากมีการติดตั้งเวอร์ชันอื่นของแพ็คเกจเดียวกัน
ก่อนการติดตั้งใหม่ ให้รันสคริปต์ prerm ของ
แพ็คเกจเก่า
เรียกใช้สคริปต์ preinst หากมีให้ในแพ็คเกจ
แตกไฟล์ใหม่และในขณะเดียวกันก็สำรองไฟล์
ไฟล์เก่า ดังนั้นหากมีสิ่งผิดพลาดก็สามารถเป็นได้
บูรณะ
หากมีการติดตั้งเวอร์ชันอื่นของแพ็คเกจเดียวกัน
ก่อนการติดตั้งใหม่ ให้รันสคริปต์ postrm ของ
แพ็คเกจเก่า โปรดทราบว่าสคริปต์นี้จะดำเนินการหลังจาก
สคริปต์ preinst ของแพ็คเกจใหม่เนื่องจากไฟล์ใหม่
จะถูกเขียนในเวลาเดียวกัน ไฟล์เก่าจะถูกลบออก
กำหนดค่าแพ็คเกจ
หลังการติดตั้งอยู่ภายใต้ "กำหนดค่าแพ็คเกจ" มันประกอบด้วย:
บอกแอปพลิเคชันอื่น ๆ เกี่ยวกับการติดตั้งแพ็คเกจสำเร็จ
เส้นทางที่แม่นยำไปยังแพ็คเกจเพื่อให้ผู้ใช้และแอปพลิเคชันอื่นสามารถใช้/ดำเนินการได้
ค้นหาข้อผิดพลาดในการติดตั้งและพิมพ์ข้อความแสดงข้อผิดพลาด
ส่วนคำถามที่พบบ่อย
สคริปต์เหล่านี้อยู่ที่ไหน
สคริปต์เหล่านี้อยู่ใน /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