เมื่อใดก็ตามที่ฉันติดตั้งโปรแกรมผ่าน MacPort มันจะได้รับและติดตั้งการอ้างอิงจำนวนมาก เมื่อฉันถอนการติดตั้งโปรแกรมดังกล่าวฉันจะทำให้ MacPort ลบการอ้างอิงที่ไม่ได้ใช้ทั้งหมดซ้ำด้วยการทำซ้ำได้อย่างไร
เมื่อใดก็ตามที่ฉันติดตั้งโปรแกรมผ่าน MacPort มันจะได้รับและติดตั้งการอ้างอิงจำนวนมาก เมื่อฉันถอนการติดตั้งโปรแกรมดังกล่าวฉันจะทำให้ MacPort ลบการอ้างอิงที่ไม่ได้ใช้ทั้งหมดซ้ำด้วยการทำซ้ำได้อย่างไร
คำตอบ:
เพื่อหลีกเลี่ยงการตัดใบไม้ที่อาจเป็นสิ่งที่คุณร้องขอคุณควรติดตั้งport_cutleaves
แพคเกจจากนั้นเรียกใช้sudo port_cutleaves
https://guide.macports.org/#using.common-tasks.keeplean
MacPorts 1.9.0 เพิ่มsqlite
portdbformat
และMacPorts 2.0.0 ลดลงเก่าflat
รูปแบบ sqlite
รูปแบบพอร์ต DB เป็นค่าเริ่มต้นสำหรับการติดตั้งใหม่ การติดตั้งเก่าที่ได้ปรับปรุงให้ 1.9.x จะยังคงใช้flat
รูปแบบที่1 คุณสามารถแปลงflat
ระบบ1.9.x เป็นsqlite
รูปแบบโดยการอัพเกรดเป็น MacPorts 2.0 หรือโดยการเปลี่ยนportdbformat
ค่าใน /opt/local/etc/macports/macports.conf
และจากนั้นออกคำสั่งพอร์ตเป็นราก (เช่นsudo port installed
)
หนึ่งในคุณสมบัติของรูปแบบใหม่คือการติดตามการติดตั้งพอร์ต "ที่ร้องขอ" และ "ไม่ได้รับการร้องขอ" พอร์ตที่ไม่ได้รับการร้องขอคือพอร์ตที่ติดตั้งเพียงเพราะพอร์ตอื่น ๆ ขึ้นอยู่กับพอร์ตนั้น leaves
หลอก PORTNAME ขยายไปยังทุกพอร์ตที่ไม่ได้ร้องขอซึ่งไม่มีการติดตั้งพอร์ตอื่น ๆ ขึ้นอยู่กับ คุณสามารถใช้สิ่งนี้เพื่อ“ ล้างข้อมูล” พอร์ตที่ไม่จำเป็นแม้ว่าคุณจะไม่ได้ถอนการติดตั้งพวกเขาด้วยsudo port uninstall --follow-dependencies portname
(ซึ่งจะทำสิ่งที่คุณต้องการ
คุณควรตรวจสอบใบไม้ที่มีอยู่ก่อนที่จะถอนการติดตั้งใด ๆ
port echo leaves
บางใบที่พบบ่อย ( automake
, gperf
, libtool
, pkgconfig
) เป็นเวลาสร้างการอ้างอิงของพอร์ตทั่วไปดังนั้นคุณอาจต้องการที่จะ“คำขอ” พวกเขา ( sudo port setrequested port1 port2 port3 …
) เพื่อหลีกเลี่ยงการถอนการติดตั้งพวกเขาเพียงแค่ให้มีการติดตั้งพวกเขาในภายหลัง
คุณสามารถถอนการติดตั้งใบไม้ที่เหลืออยู่ได้อย่างง่ายดาย:
sudo port uninstall leaves
หมายเหตุ: ก่อนที่จะตัดใบทิ้งของคุณคุณอาจต้องการถอนการติดตั้งพอร์ตเก่าที่ไม่“ ใช้งาน” อีกต่อไป สิ่งนี้อาจแสดงให้เห็นว่ามีใบไม้เหลืออีกเล็กน้อย (เช่นพอร์ตที่ขึ้นต่อกันของพอร์ตที่ติดตั้ง แต่ไม่ได้ใช้งาน):
sudo port uninstall inactive
มีหลายส่วนในคู่มือ MacPortsที่อธิบายถึงขั้นตอนการใช้leaves
เพื่อถอนการติดตั้งพอร์ตที่ไม่จำเป็น
while sudo port uninstall leaves; do :; done
โดยอัตโนมัติ
sudo port uninstall --follow-dependents portname
ไม่ถูกต้องเนื่องจาก--follow-dependents
จะ "ถอนการติดตั้งพอร์ตซ้ำทั้งหมดที่ขึ้นอยู่กับพอร์ตที่ระบุ" ตัวเลือกที่ถูกต้องที่นี่คือ--follow-dependencies
ซึ่งจะ "ถอนการติดตั้งซ้ำพอร์ตทั้งหมดที่พอร์ตที่ระบุขึ้นอยู่กับนี้จะไม่ถอนการติดตั้งการพึ่งพาที่มีการทำเครื่องหมายตามที่ร้องขอหรือที่มีผู้ติดตามอื่น ๆ "
การดำเนินการถอนการติดตั้งจะถอนการติดตั้งพอร์ตที่ติดตั้ง
%% sudo port uninstall vile Note
หากต้องการถอนการติดตั้งพอร์ตซ้ำ ๆ ที่พอร์ตที่กำหนดไว้ให้ใช้
‑‑follow‑dependencies
แฟล็ก สิ่งนี้จะไม่ถอนการติดตั้งการอ้างอิงที่ทำเครื่องหมายตามที่ร้องขอหรือที่มีผู้ติดตามอื่น ๆ
‑‑follow‑dependents flag
การซ้ำถอนการติดตั้งพอร์ตทั้งหมดที่ขึ้นอยู่กับพอร์ตที่กำหนดก่อนที่จะถอนการติดตั้งพอร์ตของตัวเองใช้หากพอร์ตเป็นการพึ่งพาของพอร์ตที่ติดตั้งอื่นการถอนการติดตั้งจะไม่ลบเว้นแต่คุณจะลบพอร์ตที่ขึ้นต่อกันก่อน ในการลบล้างพฤติกรรมนี้ให้ใช้สวิตช์ -f (บังคับ) เห็นได้ชัดว่าจะทำลายผู้อยู่ในอุปการะ อย่าบังคับให้ถอนการติดตั้งพอร์ตเว้นแต่คุณจะรู้ว่ากำลังทำอะไรอยู่
%% sudo port -f uninstall vile
หมายเหตุข้อแม้ที่สำคัญในวรรคสุดท้าย การพึ่งพานั้นแน่นอนว่า - การพึ่งพา - และแอพที่ต่างกันสามารถ (จะ) ต้องการการพึ่งพาเหมือนกัน
‑‑follow‑dependencies
vs. ‑‑follow‑dependents
; ข้อความที่ยกมาอธิบายทั้งสองอย่าง แต่เฉพาะคำถามแรกเท่านั้นที่ใช้กับคำถาม
คำสั่งเพื่อลบพอร์ตและผู้ติดตามคือ:
sudo port uninstall foo --follow-dependents
อย่างไรก็ตามหากพอร์ตที่คุณถอนการติดตั้งมีผู้ติดตามอยู่จะไม่ถอนการติดตั้งหากไม่มีการ-f
ตั้งค่าสถานะ (บังคับ)
แน่นอนคุณควรเริ่มจากการอ่านคู่มือ MacPortsโดยเฉพาะดูในส่วนคำแนะนำในการถอนการติดตั้ง
ฉันได้เขียนสคริปต์บางอย่างเพื่อทำการล้างพอร์ตอัตโนมัติ: https://github.com/vasi/macports-tools
สคริปต์ 'macportsfoster' จะแสดงรายการของพอร์ตทั้งหมดที่ไม่ต้องการในรายการที่ร้องขอโดยสั่งให้ 'พอร์ตปิดใช้งาน $ (macportsfoster)' จะลบพอร์ตทั้งหมดในภาพเดียว
ฉันคิดว่าคำตอบอื่น ๆ และ--follow-dependents
ธงไม่ทำสิ่งที่คุณต้องการ หากคุณติดตั้งA
และA
จำเป็นต้องB
ขอบคุณระบบจัดการแพกเกจที่ยอดเยี่ยมB
จะถูกติดตั้งให้คุณ คุณสามารถถอนการติดตั้งB
และธงจะรู้และลบ--follow-dependents
A
แต่ถ้าคุณถอนการติดตั้งA
ซึ่งมีโอกาสมากขึ้นเพราะA
สิ่งที่คุณติดตั้งด้วยตนเองในสถานที่แรก? ในกรณีนี้B
ถูกทิ้งไว้ข้างหลัง
หากคุณใช้ fink แพคเกจdebfosterได้รับการออกแบบเพื่อล้างระบบของคุณและลบการอ้างอิงที่ไม่ได้ใช้
Debfoster จะช่วยคุณกำจัดแพ็กเกจ (ตัวอย่างไลบรารี) ทิ้งไว้ในระบบของคุณเมื่อโปรแกรมที่ต้องการให้ลบออกหรืออัปเกรดเป็นเวอร์ชันที่ไม่มีการพึ่งพา
ในขณะที่debfoster
จะไม่ทำงานสำหรับ MacPorts มีดูเหมือนจะเป็นพอร์ตของdebfoster
ตัวอย่างเช่นportsfoster
แม้ว่ามันจะดูเหมือนว่าจะถูกยกเลิก ...
อาจไม่มีวิธีแก้ปัญหาสำหรับ MacPorts อยู่ในขณะนี้
apt
ระบบที่ Debian ใช้ ฉันไม่ได้ใช้ MacPorts แต่ฉันทำfink install debfoster
และมันใช้ได้ดีสำหรับฉัน
apt
ระบบและไม่ใช้deb
ไฟล์ แนวคิดของ MacPorts เกี่ยวข้องกับพอร์ต FreeBSD หรือ NetBSD pkgsrc แต่การนำไปใช้นั้นแตกต่างกันมาก