Linux: ‏apt / dnf / pacman נשברו — סיבות ופתרונות

ב-Linux, ‏apt, ‏dnf ו-pacman הם הבסיס להתקנה ולעדכון של תוכנות. כאשר הם נראים “שבורים”, הבעיה אינה מסתכמת רק בכך שאי אפשר להתקין תוכניות חדשות. לעיתים קרובות גם עדכוני האבטחה נעצרים, והתחזוקה של כל המערכת נעשית הרבה יותר קשה. סיבות נפוצות כוללות עדכונים שנקטעו באמצע, mirrors תקולים, מסדי נתונים לא עקביים של חבילות, כשלי אימות חתימה, תלותיות שבורות או קבצי lock שנשארו מאחור. הדבר החשוב ביותר הוא לא להתחיל מיד למחוק cache או קבצי הגדרות באופן אקראי, אלא קודם להבין איזה חלק באמת נפגע.

לפעמים נדמה שמנהל החבילות עצמו נשבר, כאשר הסיבה האמיתית נמצאת דווקא ברשת, ב-DNS, בהגדרות repository או בחוסר מקום פנוי בדיסק. לכן תהליך הבדיקה צריך להתחיל בהבחנה האם מדובר בבעיה של תקשורת, של repository, של מסד נתונים מקומי או של תלותיות.

תסמינים נפוצים

  • apt update, ‏dnf update או pacman -Syu נעצרים עם שגיאה
  • מופיעות הודעות על תלותיות שלא ניתן לפתור או על חבילות פגומות
  • לא ניתן להשתמש ב-repository בגלל שגיאות GPG או חתימה
  • מסד הנתונים נעול, ולכן אין אפשרות לבצע פעולות על חבילות
  • mirrors מחזירים 404 או timeout
  • לאחר עדכון שנקטע, פעולות החבילות מפסיקות לעבוד כראוי
  • לאחר עדכון של ספריות מסוימות, מנהל החבילות עצמו כבר לא מצליח להיפתח

מה צריך לבדוק קודם

השלב הראשון הוא לבדוק האם הבעיה באמת נמצאת במנהל החבילות, או שמקורה בכלל ברשת או ב-DNS.

ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route

אם הרשת או ה-DNS כבר תקולים, הכשל של apt, ‏dnf או pacman הוא רק תוצאה שלהם. אם לעומת זאת הרשת הרגילה עובדת ורק פעולות החבילות נכשלות, צריך להתמקד ב-repository, במפתחות, ב-locks, ב-cache, במסדי הנתונים ובתלותיות.

סיבות משותפות לבעיות ב-apt / dnf / pacman

1. עדכון שנקטע

אחת הסיבות הנפוצות ביותר היא עדכון שנעצר באמצע. הפסקת חשמל, סגירת טרמינל, ניתוק SSH או קיפאון של הסביבה הגרפית עלולים להשאיר את מסד החבילות או חלק מהחבילות במצב חלקי.

במקרה כזה לא כדאי להתחיל מיד למחוק קבצים, אלא קודם לנסות להשלים בצורה תקינה את המצב שלא הסתיים.

2. קבצי lock שנשארו

מנהלי חבילות משתמשים במנגנון lock כדי למנוע הרצה של כמה פעולות במקביל. אם תהליך אחר עדיין רץ, או שאחרי crash נשאר רק קובץ lock, המערכת תודיע שמנהל החבילות כבר נמצא בשימוש.

עם זאת, אסור למחוק קבצי lock בלי להבין את הסיבה. קודם צריך לוודא שבאמת אין תהליך קשור שעדיין פעיל.

ps aux | grep -E 'apt|dpkg|dnf|yum|pacman'

3. תצורת repository פגומה

repository של צד שלישי, PPA ישנים, mirrors מיושנים או שאריות הגדרות לאחר שדרוג הפצה יכולים לגרום למקורות החבילות עצמם להיות לא תקינים. סימנים טיפוסיים לכך הם שגיאות 404, קובץ Release חסר או כישלון בהורדת metadata.

4. בעיות במפתחות GPG ובחתימות

repository בדרך כלל נבדקים בצורה קריפטוגרפית. אם מפתח פג תוקף, לא יובא, שיטת ניהול המפתחות השתנתה או שה-keyring המקומי נפגם, מנהל החבילות יעצור מטעמי אבטחה.

5. תלותיות שבורות

תלותיות נשברות לעיתים קרובות כאשר כופים התקנה של גרסאות לא תואמות, מערבבים repository שונים, מבצעים עדכונים חלקיים או מחליפים ידנית ספריות מערכת. זה מסוכן במיוחד במערכות מבוססות pacman, אך גם apt ו-dnf נעשים לא יציבים כאשר מערבבים מקורות ללא שליטה.

6. cache או metadata פגומים

חבילות שהורדו באופן חלקי, metadata ישנים או מסדי סנכרון פגומים יכולים למנוע קריאה תקינה של רשימות החבילות ולגרום לכישלון התקנות.

7. חוסר מקום בדיסק

סיבה נפוצה אך לעיתים לא מוערכת מספיק היא מחסור במקום פנוי. אם מחיצות כמו /var או /boot מלאות, פריסה וכתיבה של קבצים עלולות להיכשל באמצע ולהשאיר את מערכת החבילות במצב לא עקבי.

df -h
du -sh /var/cache/* 2>/dev/null

מה לבדוק כאשר apt לא עובד

במערכות Debian / Ubuntu חשוב לבדוק לא רק את apt, אלא גם את המצב של dpkg שפועל מתחתיו.

תיקון חבילות שלא הוגדרו עד הסוף

sudo dpkg --configure -a
sudo apt --fix-broken install

לאחר עדכון שנקטע, שני הפקודות האלו הן לעיתים קרובות הצעד הראשון החשוב ביותר.

טעינה מחדש של רשימות החבילות

sudo apt update

אם כאן מופיעות שגיאות 404, חתימה או Release file, צריך לבדוק את /etc/apt/sources.list ואת התוכן של /etc/apt/sources.list.d/.

ניקוי cache

sudo apt clean
sudo apt autoclean

אם הבעיה נובעת מ-cache פגום או מיושן, זה עשוי לעזור.

מה לבדוק כאשר dnf לא עובד

במערכות Fedora / RHEL יש לשים דגש מיוחד על metadata, היסטוריית עסקאות והגדרות repository.

בניית metadata מחדש

sudo dnf clean all
sudo dnf makecache

אם מידע ה-mirror או metadata נפגע, זה לעיתים קרובות צעד ראשון מועיל.

בדיקת תלותיות ועקביות המערכת

sudo dnf check
sudo dnf distro-sync

כך ניתן לבדוק האם המערכת עדיין תואמת למצב החבילות הצפוי של ההפצה.

צפייה בהיסטוריה

sudo dnf history
sudo dnf history info last

ההיסטוריה לעיתים קרובות מראה אחרי איזה עדכון הבעיות התחילו.

מה לבדוק כאשר pacman לא עובד

ב-Arch Linux חשוב במיוחד לבדוק מסדי סנכרון, מפתחות, mirrors והאם בוצעו עדכונים חלקיים.

סנכרון מחדש של מסדי הנתונים

sudo pacman -Syy

אם מסד הסנכרון המקומי כבר לא תואם ל-repository, זה בדרך כלל הצעד הראשון.

ביצוע עדכון מלא

sudo pacman -Syu

ב-Arch יש להימנע מעדכונים חלקיים. עדכון של חלק מהחבילות והשארת אחרות ישנות הוא דרך קלאסית ליצור חוסר עקביות במערכת.

בדיקת בעיות במפתחות

sudo pacman-key --init
sudo pacman-key --populate

אם הבעיה קשורה לחתימות או ל-keyring, ייתכן שתידרש אתחול מחדש שלו.

יומנים חשובים מאוד

בשגיאות של מנהל חבילות לא מספיק להסתכל רק על השורה האחרונה. רק היומנים והפלט המפורט מראים אם מדובר בבעיה של חתימות, תלותיות, רשת או בסיס נתונים.

apt / dpkg

sudo tail -n 100 /var/log/apt/history.log
sudo tail -n 100 /var/log/dpkg.log

dnf

sudo dnf history
sudo journalctl -xe --no-pager | tail -n 100

pacman

sudo tail -n 100 /var/log/pacman.log

סדר בדיקה מעשי

שלב 1: בדקו רשת ו-DNS

ping -c 4 8.8.8.8
ping -c 4 google.com

שלב 2: בדקו מקום פנוי

df -h

שלב 3: בדקו תהליכים וקבצי lock

ps aux | grep -E 'apt|dpkg|dnf|yum|pacman'

שלב 4: קראו את היומנים

קודם כול צריך להבין איזו פעולה קונקרטית אחרונה באמת נכשלה.

שלב 5: השתמשו בפקודות השחזור המתאימות להפצה

ב-apt מתחילים לעיתים קרובות עם dpkg --configure -a, ב-dnf עם ניקוי metadata, וב-pacman עם סנכרון מלא ובדיקת מפתחות.

מה לא כדאי לעשות

  • לא למחוק קבצי lock בלי להבין את הסיבה
  • לא להתקין קבצי .deb / .rpm / או חבילות אחרות ממקורות לא אמינים
  • לא לבצע שוב ושוב עדכונים חלקיים ב-Arch
  • לא לערבב בצורה לא מסודרת apt עם dpkg, dnf עם rpm או pacman עם שינויים ידניים בקבצים
  • לא לכבות את בדיקת החתימות בלי להבין את השגיאה

איך למנוע את חזרת הבעיה

  • להימנע מהפסקות חשמל וכיבוי כפוי בזמן עדכונים
  • לא להוסיף יותר מדי repository של צד שלישי
  • ליצור snapshot או backup לפני עדכונים גדולים
  • לפעול לפי שיטת העדכון המומלצת של ההפצה
  • במיוחד ב-Arch, להימנע מעדכונים חלקיים

סיכום

גם אם נראה שדווקא apt, dnf או pacman עצמם נשברו, הסיבה האמיתית נמצאת לעיתים קרובות ברשת, בקבצי lock, בחתימות, בתלותיות, ב-cache, במקום פנוי או בהגדרות repository. הדבר החשוב ביותר הוא לא להתחיל מיד למחוק או להתקין מחדש באופן אקראי, אלא קודם להבין דרך היומנים באיזו שכבה בדיוק קרה הכשל. לאחר מכן יש להשתמש בגישה הנכונה: תיקון dpkg עבור apt, בדיקת metadata והיסטוריה עבור dnf, וסנכרון מלא יחד עם בדיקת מפתחות עבור pacman.

Leave a Reply

האימייל לא יוצג באתר. שדות החובה מסומנים *