למה apt-cache מציג מותקן (אין) עבור חבילת ה-VPN שלכם
מותקן (אין) פירושו שחבילת ה-VPN אינה מותקנת, ולא שהיא חסרה. קראו את שורות המועמד, הנעילה והארכיטקטורה לפני עריכת המקורות.
חבילת VPN שמדווחת Installed: (none) אינה חסרה; היא פשוט אינה מותקנת. השורה שמחליטה אם תוכלו להתקין אותה היא Candidate, ו-APT גוזר אותה מהאינדקסים, משם ה-suite, מהארכיטקטורה ומכללי נעילה בתוקף. רוב הדיווחים על חבילת VPN שנעלמה מתבררים כבעיית מועמד ולא כבעיית אריזה. קראו את שתי השורות לפני שתגעו ולו ברשומת מקור אחת.
אני בודק את המועמד קודם, כי זה עולה פקודה אחת ושולל מחצית מההשערות הרגילות.
מה אומר לכם הפלט של apt-cache policy
apt-cache policy קורא את מטמון החבילות המקומי, לא את הרשת. הוא מדפיס את הגרסה המותקנת, את גרסת המועמד וטבלה של כל אינדקס שמציע את החבילה עם העדיפות שמוצמדת לו.
apt-cache policy openvpn
apt-cache madison openvpn
apt list -a network-manager-openvpnהמועמד הוא הגרסה ש-APT היה בוחר עכשיו. madison מפרט מה כל מקור מציע עם העדיפות שלו, וכך מזהים חבילה שקיימת באינדקס אך מפסידה בתחרות הנעילה. המדריך של apt-cache מתעד את שניהם כקריאות מטמון, ולכן אף אחד מהם אינו מוכיח שהמראה נגישה ברגע זה.
אם שורת המועמד ריקה או מציגה (none), שום דבר במקורות המוגדרים אינו מתאים למערכת הזו כפי שהיא מוגדרת.
ארבע סיבות שבגללן מועמד נעלם
בפועל הסיבה היא כמעט תמיד אחד מארבעה דברים, ולכל אחד תיקון אחר.
שם ה-suite במקורות שלכם חייב להתאים להפצה שעבורה נבנתה החבילה. מערכת Debian bookworm שמכוונת למראה trixie, או מהדורת Ubuntu ששמה שונה בקובץ sources.list.d במהלך שדרוג, לא פותרת דבר עבור חבילות שקיימות רק ב-suite האחר. השוו את lsb_release -cs לשדה ה-suite בכל רשומה.
APT רואה רק חבילות שנבנו עבור הארכיטקטורות ש-dpkg מכיר. מכולה של 32 סיביות, תמונת arm64 או התקנה על Raspberry Pi שמבקשת חבילה שנשלחת רק ל-amd64 מקבלות מועמד ריק במקום הודעת שגיאה. dpkg --print-architecture ו-dpkg --print-foreign-architectures אומרים לכם באיזו קבוצה אתם באמת.
גם רכיבים חשובים. חבילה ב-contrib או ב-non-free אינה נראית כשמופעל רק main, וה-universe של Ubuntu מתנהג באותו אופן. האינדקס קיים והחבילה בו; רק רשימת הרכיבים המופעלים שלכם אינה כוללת אותה.
הנעילה היא השקטה. קובץ ב-/etc/apt/preferences.d יכול להגביל חבילה מתחת לסף ההתקנה, ואז מועמד טוב לגמרי נעלם מהפלט בעוד האינדקס עדיין מפרט אותו. מכיוון ש-policy מדפיס את העדיפויות לצד כל מקור, חבילה שכל מקור שלה נושא מספר נעילה נמוך היא הסימן.
אינדקסים מיושנים נראים כמו חבילות חסרות
המטמון הוא תמונת מצב. אם ה-apt update האחרון נכשל באינדקס אחד, שאילתות ממשיכות לענות מהעותק הישן, וייתכן שהחבילה שאתם מצפים לה אינה בעותק הזה.
apt update מדפיס שגיאות לכל אינדקס, אז קראו אותן במקום לגלול ישר לשורה האחרונה.
רענון שנכשל בגלל שגיאת חתימה, קובץ release שפג תוקפו או מראה שאינה נגישה משאיר את האינדקס הקודם במקומו. זו תכנון הגיוני, כי הוא שומר על מטמון עובד כשמראה נופלת לזמן קצר. תופעת הלוואי היא שחיפוש יכול להצליח בעוד המאגר לא מקוון. זה גם אומר שהיעדר חבילה אינו מוכיח דבר עד שתדעו מתי האינדקס נלקח לאחרונה. בדקו את תאריכי הקבצים תחת /var/lib/apt/lists לפני שתאשימו את שם החבילה.
תנו שם לחבילה שבאמת דרושה לכם
OpenVPN הוא דמון, והחלקים שאנשים בדרך כלל רוצים הם חבילות נפרדות.
המנוע, התוסף של NetworkManager ועורך שולחן העבודה הם שלוש חבילות עם שלושה שמות, ולתוסף יש גרסת GTK ששמה שונה בין הפצות. apt-cache search --names-only openvpn מתאים שמות ושמות מסופקים במקום תיאורים, וזה מה שאתם רוצים כשאתם יודעים בערך איך הדבר נקרא.
אם השם באמת לא ידוע, חפשו פעם אחת בתיאורים ואז חזרו לשמות מדויקים. אל תוסיפו סיומת -gui שאולה מהפצה אחרת ותסיקו שהחבילה כבר אינה קיימת.
שנו מקורות אחרונים, ואז אמתו את העסקה
הוספת מאגר משנה מי מספק את העדכונים שלכם, ולכן היא שייכת לסוף החקירה, לא להתחלה.
לפני כן, אשרו מהדורה, ארכיטקטורה, רכיב ומצב נעילה. רשמו אילו מהארבעה בדקתם, כדי שהאדם הבא לא יחזור על הסבב. אם כל הארבעה נכונים והמועמד עדיין חסר, המסקנה הכנה היא כי מהדורה זו אינה מספקת את החבילה הזו. האפשרויות שנותרו הן backport, חבילת ספק או מהדורה נתמכת אחרת, וכל אחת מהן בחירה מכוונת ולא ניחוש.
כשהמועמד מופיע, הדמו לפני שאתם מאשרים: apt-get install --simulate עם שם החבילה מראה מה ימשך ומה יוסר. זמינות החבילה, ההתקנה ומנהרה עובדת נשארות שלושה שלבים נפרדים, והמנהרה עדיין זקוקה לפרופיל שלה, לאישורים שלה, למסלולים ול-DNS לפני שהיא נושאת תעבורה.