המלצה לתוכנה – strace

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

נתקלתי בבעייה שהתבקשתי לפתור: לחיבור telnet של המכשירים שמייצרים אין ססמה (אל תשאלו, לאט לאט אני אעביר אותם ל־dropbear). הפעלה של passwd במכשירים נופלת (זה לא מבקש ססמה כלל וישר אומר שהססמה פשוטה מדי), וכאשר שמים ססמאות ב־‎/etc/passwd הססמאות לא עובדות. אני מסתכל על ה־FS של ה־device ואני רואה שרובו מבוסס busybox יחסית חדש. לעומת זאת login הוא קישור סימבולי ל־tinylogin (פרוייקט שמוזג אל busybox ב־2003 אם אני לא טועה). הורדתי מהאינטרנט את הקוד של tinylogin (כמובן שהיו מספיק חכמים רק לקבל build ולא source) ואני מתחיל להסתכל על הקוד. אני יושב שעתיים ועושה static debugging כדי לנסות להבין מה בדיוק נופל ואני אחרי שעתיים עקבתי אחרי הקוד, למקום שבוא “קוראים את הססמה מהמשתמש” ולא מצאתי את ה־implementation של הפונקציה הזאת.

בשלב הזה המפתח של ה־image עלה על זה שה־image המקורי שממנו הוא עשה את ה־image שלו כן עובד, משמע הוא באמת “גילח” משהו מיותר (אני הזהרתי… אבל למה שיקשיבו לי, הרי אני צודק). עכשיו החליטו שאני אפסיק לעבור על הקוד ופשוט נעשה מין binary search כדי להבין מה נמחק ועצם גרם לבעייה. אחרי שעה וחצי התבררה הבעייה: ה־device node tty ושמו בישראל: ‎/dev/tty. הסבר קצר: login לא קורא את הססמה מ־stdin (כדי שלא יעשו לזה redirect ואז יחטפו את סממה) אלא פותח ישירות את ה־tty וקורא ממנו. אני הכרתי את ‎/dev/tty[0-9]‎ והחברים, אבל לא ידעתי ש־tty הוא “ה־tty שלי”. עכשיו הכל ברור.

מה שהכי כואב, זה שאם היה לי ב־image את התוכנה strace התהליך הזה היה לוקח לי 10 דקות. מסקנה: תמיד תתקינו strace במחשב שלכם.

Share Button

One thought on “המלצה לתוכנה – strace”

להגיב על משתמש אנונימי (לא מזוהה) לבטל

האימייל לא יוצג באתר.