לקוח VPN הוסר, אבל המנהרה עדיין עולה באתחול
לקוח VPN שהוסר יכול להשאיר יחידת systemd, פרופיל שמור, עוזר ומאגר apt. ערכו מלאי של כל הארבעה לפני שתנקו כל דבר אחר.
ההפצה שלכם מסירה את החבילה, התפריט מאבד את הרשומה, והמנהרה בכל זאת עולה אחרי האתחול הבא. לקוח VPN מסחרי משאיר חלקים שמנהל החבילות מעולם לא עקב אחריהם, כך שהסרה נקייה אינה אותו דבר כמו מכונה נקייה. ארבעה מהחלקים האלה מסבירים כמעט כל חיבור רפאים: יחידה, פרופיל חיבור, עוזר בעל הרשאות ומאגר של הספק. קראו את כל הארבעה לפני שתמחקו משהו, ואז הסירו כל אחד דרך הרכיב שבבעלותו.
מה שהמסיר מעולם לא תיעד
מנהל חבילות מסיר את הקבצים שהוא רשם ולא דבר אחר. אין לו רשומה של פרופיל חיבור שהלקוח יצר בזמן ריצה, של יחידה שהופעלה לאחר ההתקנה, או של עוזר שנרשם בזמן שפעל בהרשאות מוגברות. כל אחד מאלה שייך לתת־מערכת אחרת, וכל אחד מהם יכול לשרוד את החבילה באתחול אחד או יותר. הפער הזה מסביר מדוע מנהרה יכולה להיות תקינה בעוד התוכנה שיצרה אותה כבר איננה.
לשארית תמיד יש בעלים, בין אם systemd, NetworkManager, תצורת המאגר או רשומת הפעלה אוטומטית לכל משתמש. איתור הבעלים תחילה הוא מה שמונע מניקוי להפוך למכונה מוגדרת למחצה. מחיקת קבצים ישירות בדרך כלל עובדת עד שהבעלים יוצר אותם מחדש, ולכן הפקודות שלמטה מתחילות בשאילתות.
ארבעה בעלים, תחילה קריאה בלבד
התחילו בשאילתות ולא במחיקות, ורשמו את השמות המדויקים שחוזרים. ספקים לעיתים קרובות מספקים מטען מגורסן לצד מטא־חבילה, כך שמוצר אחד יכול להופיע בשני שמות. שם שמופיע בשתי הרשימות הוא מוצר אחד עם שני בעלים, ושניהם צריכים להיות מוסרים. הקבוצה הראשונה מכסה חבילות ויחידות, ושם רוב השאריות נעשות גלויות.
dpkg -l | grep -i acmevpn
systemctl list-unit-files | grep -i acmevpn
systemctl list-units --type=service --state=running | grep -i acmevpn
הקבוצה השנייה מכסה את שני הרכיבים ששורדים ניקוי לרוב, כלומר פרופיל החיבור ומאגר הספק. קראו את עמודת ה־UUID ולא את השם, כי שמות כפולים נפוצים ופקודת המחיקה מצפה למזהה. שורת המאגר שווה קריאה גם כשאינכם מסירים אותו היום, כי מארח ספק מת יכול לשבור התקנה לא קשורה חודשים לאחר מכן. אף אחת מהרשימות לא משנה דבר, וזה בדיוק הטעם בהרצתן תחילה.
nmcli -f NAME,UUID,TYPE connection show
nmcli connection show --active
grep -ril acmevpn /etc/apt/sources.list.d/ /etc/apt/sources.list
תהליך שעוד חי אחרי הניקוי הוא או יחידה פעילה או ילד של תוכנית אחרת. קראו את טבלת התהליכים ואת שרשרת האבות שלו לפני שתאשימו שירות שכבר אינו קיים. רשומות הפעלה אוטומטית לכל משתמש זקוקות לאותה סקירה, והן מופיעות רק במעטפת התחברות חדשה, לא בהפעלה של root.
שלושה פעלים שאינם ניתנים להחלפה
עצירה מסיימת את הריצה הנוכחית, השבתה מסירה את קישורי האתחול, ומיסוך מפנה את היחידה אל /dev/null. רק השלישי גם חוסם הפעלה דרך socket, טיימר או תלות, מה שהופך אותו לחזק מבין השלושה. הסדר חשוב כל עוד אתם מחליטים מה לעשות עם המכונה. מיסוך הוא המצב הנכון במהלך ההחלטה הזו, כי הוא נכשל בקול רם במקום לעלות בשקט באתחול הבא.
הסירו את המיסוך לפני התקנה מחדש, אחרת החבילה החדשה תיראה שבורה מסיבה שאיש לא תיעד. אותה זהירות חלה על הבדלי אריזה: בנייה אחת מספקת יחידה שאפשר לעצור, בעוד אחרת לא משאירה שירות כלל. קבעו איזו אריזה יש לכם לפני בחירת פועל, כי נתיב הניקוי שונה ביניהן.
בתווי כללים מוחקים את הפרופיל הלא נכון
מחקו את הפרופיל עם ה־UUID שרשמתם, ולעולם לא עם תו כללים. תיקיית ה־keyfile מכילה גם כל פרופיל Wi-Fi ו־Ethernet במכונה, כך שהתאמה רחבה מסירה דברים שעדיין דרושים לכם. קובץ keyfile שנמחק ביד עשוי להיווצר מחדש על ידי המדיניות שבבעלותה הוא, מה שהופך את המחיקה ללא אפקטיבית.
nmcli connection delete uuid <uuid>
יצאו תחילה את השער ואת הזהות אם הפרופיל הזה הוא העותק היחיד שנותר לכם, כי מחיקה מקומית אינה מבטלת דבר בשרת. המאגר פועל באותו כלל: הסירו את קובץ הספק הבודד ואת מחזיק המפתחות שלו, ואז רעננו את רשימות החבילות ונסו שוב את ההתקנה שרציתם באמת. השארת רשומת צד שלישי מיושנת עשויה לנעוץ תלות ישנה או לא לענות כלל. שתי ההסרות קטנות, וכל אחת מהן ניתנת לביטול מהעותק שתשמרו.
מה עוד פועל אחרי האתחול
אתחלו מחדש לפני שתכריזו ניצחון, ואז חפשו חפצים ולא את היישום. ממשק מנהרה, מסלול מפוצל מיושן ו־DNS לכל קישור שהלקוח הישן השאיר דורשים כל אחד פקודה משלו. כל השלושה יכולים לשרוד ניקוי שהסיר כל חבילה בהצלחה.
ip link
ip route
resolvectl status
פתחו גם מעטפת התחברות חדשה, כי רשומת הפעלה אוטומטית נורית רק שם. ואז קראו את /etc/NetworkManager/dispatcher.d/ בחיפוש אחר סקריפט שמעלה חיבור בכל פעם שממשק משנה מצב, מה שמסביר מנהרה שחוזרת בלי שירות מאחוריה. אם משהו עדיין מחייג החוצה, עקבו אחרי התהליך עד האב שלו במקום למחוק קבצים עד שהתסמין ייפסק. ניקוי המכונה וביטול החשבון נשארים משימות נפרדות, ורק אחת מהן מושלמת כשהאתחול נראה שקט.