ארכיון עבור הקטגוריה לינוקס
זוכרים שהזמנתי כונן קשיח נוסף וכונן DVD חלופי במקום זה ששבק?
שניהם היו כמובן בממשק SATA, והתסבר שהמחשב שאליו הם מיועדים סבל ממחסור חמור בערוצי SATA פנויים, כל שני הערוצים שעל לוח האם שלו היו תפוסים.
בינתיים התקנתי את הדיסק במחשב השני, והזמנתי כרטיס בקר SATA שמוסיף עוד ארבעה ערוצי SATA. אתמול הוא הגיע לשמחתי, וכשחזרתי מהעבודה התיישבתי להתקין את הבקר, את הכונן הקשיח ואת הכונן DVD.
בהתחלה פשוט התקנתי את הכל, הדלקתי את המחשב וקיוויתי לטוב - תקוות שהתבדו מהר מאוד: המחשב נתקע בBOOT, לפני שהתחיל להעלות את GRUB (טוען הBOOT של לינוקס). התחלתי לשחק קצת בחיבורים וגיליתי שהמחשב לא אוהב שאני מחבר את הDVD לבקר הSATA החדש, ולכן חיברתי אותו ישירות ללוח האם ואת אחד משני הכוננים הקשיחים הישנים חיברתי לבקר הSATA. אחרי שהמחשב הצליח להכנס לGRUB כאשר כל ארבעת הכוננים מחוברים (שני הרדיסקים ישנים, אחד חדש וכונן DVD חדש), הקרנל התחיל לעלות ונתקע כמובן כשחיפש את מערכת הקבצים במחיצת השורש (/)
חשבתי לעצמי, בטח הוא לא אוהב את השינויים, וניתקתי הכל כדי לוודא שהוא עובד במצב שבו הוא היה קודם.
במפתיע, הוא עדיין סרב לעלות כשלא מצא את מערכת הקבצים של /.
עכשיו כבר התחלתי לנסות להעריך כמה זמן יקח לי להתקין את הכל מחדש ולהביא את העסק למצב עובד (זה שרת הדואר שלי, ולא רציתי להשאיר אותו לא עובד), לא אהבתי את ההערכה.
החלטתי לנסות לעלות מדיסק של Knoppix 4.0 ישן שהיה לי, אבל הוא טען שהביוס שלי דפוק במיוחד וסירב לעלות. חשבתי לעצמי שאולי הדיסק KNOPPIX דפוק במיוחד וצרבתי את Knoppix 5.1, שהסכים עם הדיסק הקודם בדיאגנוזה וסרב גם הוא לעלות.
שלפתי מהמחסן את אחד מכונני הDVD הישנים שלי, שהתעטר בכיתוב "אולי דפוק, 22/2/2008", ניסיתי אותו ומשם דווקא Knoppix הסכים לעלות (לא שכחתי לסמן את הכונן בכיתוב "מספיק טוב בשביל קנופיקס, 14/4/2008") - בשיטוט במחשב מתוך הקנופיקס שמתי לב שהכונן החדש התיישב לו על SDA ודחף את הכונן הראשון שהיה בSDA אל SDC. זה גרם לי לחשוב שאולי זו הבעיה.
ביצעתי BOOT רגיל אל GRUB, ופתאום שמתי לב שהשורה של הקרנל נראית ככה:
kernel /boot/vmlinuz-2.6.24-1-686 root=/dev/hde1 ro
שורה שאופיינית לטעינת הקרנל מדיסק ATA רגיל ולא מSATA (שמופיע תחת sdx ולא תחת hdx).
התחלתי לנחש ולנסות כל מני אפשרויות ובסוף הצלחתי לבצע BOOT כאשר השורש בsdb2, סוף סוף קצת התקדמות!
חיברתי את כל הכוננים, ניחשתי וניחשתי שוב עד שהצלחתי עם sdc2, ונכנסתי למערכת.
לא ממה התחשק לי לשנות את הfstab ואת קובץ התפריט של GRUB לתצורה החדשה, כי ידעתי שברגע שאני אשנה משהו בחומרה הכל ישבר שוב.
נכנסתי ל#debian@irc.freenode.net, ושאלתי איך מונעים מהקרנל לשנות את שמות הכוננים כל פעם שמשהו משתנה.
ענו לי שאפשר, אבל זה קשה, ועדיף בכלל לעגן מחיצות לפי הUUID, ולא לפי שם הכונן.
UUID למחיצה? לא ידעתי שיש!
מסתבר שזה פשוט במיוחד, החל מגרסא מסויימת של הקרנל, יש בdev ספריות חדשות:
/dev/disk/by-id/
/dev/disk/by-label/
/dev/disk/by-path/
/dev/disk/by-uuid/
הספריה שמעניינת אותנו במקרה הזה היא /dev/disk/by-uuid/ שמכילה קבצים שנראים כך:
0427f3ec-17e1-4cd1-b195-7f5bdf861a28 -> ../../sdc3
3f7f2c77-88af-4e9a-a139-ba95900e0354 -> ../../sdb1
אלו לינקים סימבוליים שנוצרים אוטומטית, ומאפשרים גישה אל המחיצה בצורה שאינה תלויה בשם של הכונן עליו היא יושבת.
המזהה היחודי (UUID) של המחיצה לא משתנה עד שלא יוצרים מחדש את המחיצה (או אולי מפרמטים אותה, אני לא בטוח).
כמובן שאפשר להשתמש בו גם מתוך קובץ התפריט של grub:
kernel /boot/vmlinuz-2.6.24-1-686 root=/dev/disk/by-uuid/8397dc08-be26-491d-9a06-c3fc93303d82 ro
אחרי כל זה, הכל עובד שוב, הנה נשרף לו ערב שיכול היה לשמש אותי לדברים מועילים יותר, אבל למדתי כמה דברים.
אגב, לדעתי מה שגרם לכל הסיפור הזה היה קודם כל שדרוג שביצעתי לקרנל דרך apt-get לפני מספר שבועות, שקילקל את menu.lst של GRUB.
בגלל זה גם כשניתקתי את הכל וחזרתי למצב הראשוני עדיין לא הצלחתי לבצע BOOT.
המסקנה שלי היא שצריך לבדוק טוב טוב את menu.lst אחרי שדרוג של הקרנל (אם אני אגיד את זה בקול רם אולי אני אזכור את זה בפעם הבאה!).
בנוסף, כדאי להשתמש בUUID ולא בשם הדיסק כשמעגנים מחיצות.
לבסוף, אני גאה לציין שהמחשב הסלוני שלי, שמשמש אותי כשרת דואר וכמכונת ווידאו סלונית שודרג בהצלחה ועכשיו יש לו נפח איחסון של 200+200+500=900GB.
האח, הידד.
19 תגובות »
נכתב על ידי עמרי בנושא קוד פתוח, לינוקס
במשך שנים השתמשתי בapt-proxy, שמאפשר - בתאוריה - עבודה יעילה עם חבילות דביאן בתוך הרשת המקומית.
במקום שכל מחשב יוריד מחדש את כל החבילות מהמאגר המרכזי, apt-poxy מאפשר הקמת מאגר וירטואלי, ככה שמכוונים אליו את הלקוחות והם מורידים ממנו.
הנקודה היא - כמובן - שהוא שומר את מה שעובר דרכו, ככה שהוא מוריד עבור הלקוח הראשון, והשאר כבר מקבלים את הקובץ ממנו ולא מהמאגר המרוחק.
הבעיה היא שהוא לא ממש עובד, ונוטה לתקוע את הלקוחות שמתחברים אליו אם משהו לא מוצא חן בעיניו.
לקח לי די הרבה זמן להגדיר את apt-proxy, ולא הייתי נלהב במיוחד לחפש חלופה כי לא התחשק לי לבזבז זמן על הגדרות, אז במשך תקופה ארוכה מדי פשוט הפעלתי מחדש את apt-proxy כל פעם שהוא עשה בעיות ובסך הכל הסתדרתי איתו.
בנוסף, פתחתי באג, בתקווה שמישהו יטפל בבעיה המציקה, אבל לא נראה שלמישהו איכפת.
אתמול החלטתי שדי, וחיפשתי חלופה.
החלופה הראשונה שניסיתי היתה apt-cacher, שכולל סקריפט לניצולי apt-proxy שמייבא את ההגדרות שלו, מפסיק אותו, מבטל את ההפעלה האוטומטית ומתחיל את apt-cacher. לא הייתי צריך לגעת בקבצי המקורות של המחשבים שניגשו בעבר אל apt-proxy, הכל פשוט עובד.
ככה, בקלות. ואני התעצלתי לחפש פתרון כל כך הרבה זמן.
להתקנה, כמובן : apt-get install apt-cacher
3 תגובות »
נכתב על ידי עמרי בנושא לינוקס, תמונות
האם הבניינים האלו מזכירים לכם משהו?

יכול להיות שזה בסיסי נתונים?

לא פלא, אלו הבניינים של אורקל.

עוד משהו די משעשע זה השלט הבא:

6 תגובות »
נכתב על ידי עמרי בנושא לינוקס
איך מפעילים השלמה אוטומטית משופרת בbash?
ההגדרות של ההשלמה האוטומטית נמצאים בדביאן (ואולי בעוד מערכות) בקובץ /etc/bash_completion, כדי להפעיל אותן כתבו:
source /etc/bash_completion
כדי להפעיל את זה אוטומטית בכל כניסה אל bash, אפשר להכניס את הפקודה לתוך אחד מקבצי ההפעלה האוטומטיים של bash, למשל ככה (מומלץ להסתכל בקובץ ולראות שזה לא קילקל כלום).
echo "source /etc/bash_completion" >> ~/.bashrc
ההשלמה מרחיבה את ההשלמה הרגילה של שמות קבצים וספריות לפקודות ספציפיות, נסו למשל להשלים עם TAB את אחרי הקלדה של
ותקבלו את רשימת הפרמטרים של ls.
5 תגובות »
כמו שאמרתי, קניתי נגן MP3 נייד, Sansa e280 עם 8 ג'יגה זכרון פלאש ותמיכה ברדיו.
התקנתי עליו את הנגן פתוח הקוד, Rockbox, ואני מרוצה.
רוקבוקס תומך בכל מה שאני צריך מבחינת שמישות, וגם בכמה דברים שאני לא ממש צריך, כמו משחק דום :).
יש לו סייר קבצים שמאפשר לעיין בקבצים בקלות, למחוק, להזיז וליצר רשימות ניגון.
בנוסף, הוא מגיע עם די הרבה פלאינים, תוכנות פשוטות (מטרונום למשל, שמאפשר לשמור על קצב הליכה קבוע) וערכות נושא.
במבט ראשון רוקבוקס נראה די מכוער, במיוחד אחרי שרואים את התוכנה המקורית שמגיעה עם הנגן, אבל אחרי שמשחקים קצת עם ערכות הנושא הוא נראה הרבה יותר טוב.
מה שבטוח זה שהוא נותן הרבה יותר פונקציונליות, ומאפשר - למי שבאמת רוצה - לשנות ולהרחיב את הנגן שלו. ההגבלה היחידה היא הדמיון.
מומלץ לגבות את הסנסה לפני שמתקינים עליו את רוקבוקס, אתם לא רוצים להתקע עם משקולת נייר יקרה ולא כבדה מספיק.
לפני שמחברים את הסנסה למחשב צריך לשנות את זיהוי הUSB שלו לMass storage class, או MSC. זה יאפשר למחשב לזהות אותו ככונן כמו כל כונן קשיח.
ללינוקסאים, כדי לגבת את כל הSansa, בהנחה שהוא הופיע בשם /dev/sdb
השתמשו בפקודה:
dd if=/dev/sdb of=~/sansa.full.img
gzip ~/sansa.full.img
שתיצור עותק בינארי של כל הכונן (זה 8 ג'יגה, אז זה יקח זמן).
אפשר לגבות רק את המחיצה השניה (sdb2), שמכילה את התוכנה של הנגן, אבל אני חושב שליתר ביטחון עדיף לגבות את הכל.
בהנחה שהסנסה שלכם ריק, הgzip יתפוס כ100 מגה-בייט.
משתמשי חלונות מוזמנים לחפש פתרון בעצמם (רצוי כזה שלא דורש הקלדת פקודות קצרות אך מוזרות).

37 תגובות »
נכתב על ידי עמרי בנושא לינוקס
הפילוסופיה של יוניקס (ושל לינוקס) היא שכל כלי יעשה פעולה אחת, ויעשה אותה כמו שצריך - והמשתמש יחבר את הכלים כדי להשיג את המטרה שלו.
הפילוסופיה הזו שונה מזו של מערכות הפעלה יותר "ידידותיות", שנותנות למשתמש כלים שעושים את מה שהמתכנתים חשבו שהמשתמש ירצה לעשות - לא פחות ולא יותר.
מצד אחד אותם משתמשים ישיגו את המטרה שלהם - אם המתכנתים חשבו שהיא מטרה ראויה - יותר בקלות, מצד שני, אם המתכנתים לא חשבו שהמטרה הזו מספיק חשובה או אם הם בכלל לא חשבו על הצורך המסויים המשתמש פשוט לא יוכל להשיג את המטרה בעזרת אותם כלים ידידותיים.
אז אחרי ההקדמה הזו, הנה דוגמא עם בעיה אמיתית:
לFireStats יש כרגע 16 תרגומים, והמתרגמים אחראים לעדכן עצמאית את התרגום שלהם ברגע שאני מודיע על הזמינות של גרסא חדשה במערכת הגרסאות של הקוד (Subversion).
לפעמים המתרגמים לוקחים את הזמן, ומעדכנים רק אחרי כמה שבועות, ובדרך כלל מודיעים לי שהם עדכנו, אבל לא תמיד.
עכשיו, איך אני יכול לדעת מי עדיין לא עדכן את התרגום?
אני יכול לתחזק רשימה, ולמחוק מהרשימה כל אחד שהודיע לי שהוא תרגם, אבל אני עצלן מדי ובטח אשכח לתחזק אותה, מה שיהפוך אותה ללא שימושית מהר מאוד.
דרך נוספת היא להסתכל בקבצי התרגום, ולחפש תרגומים שלא מכילים מילה כלשהי שמופיעה רק בגרסא החדשה, אבל איך עושים את זה?
כלים לחיפוש בקבצים בדרך כלל ימצאו קבצים שמכילים משהו, לא קבצים שלא מכילים.
יש הרבה דרכים להשיג את המטרה הזו, רובן מערבות מציאה של כלי יעודי לא ידוע או כתיבת תוכנית - אבל לאור ההקדמה - ברור שאני אספר איך ניתן לעשות את זה בלינוקס (אפשר בעוד צורות, ואני בטוח שחלקן יותר אלגנטיות).
כמעט כל תוכנית לא גרפית בלינוקס קוראת מהקלט הסטנדרטי וכותבת לפלט הסטנדרטי. בשימוש של פקודות שרשור (|) של המעטפת (bash במקרה שלי) ניתן לשרשר את הפלט של תוכנית אחת לקלט של תוכנית שניה.
אבל לפני שאנחנו רצים, צריך לגלות איך מוצאים אם קובץ מסויים לא מכיל מחרוזת.
הפקודה שקופצת לראש אוטומטית כשרוצים למצוא משהו היא grep. שמאפשרת מציאה של תבניות שבנויות כביטויים רגולריים, אבל grep לא בדיוק מתאימה כי היא עובדת ברמת שורה, ואנחנו רוצים לעבוד ברמת קובץ.
במילים אחרות, נוכל למצוא בעזרת grep שורות מסויימות שלא מכילות את המילה, אבל זה לא מה שאנחנו רוצים.
למרבה המזל, grep מחזירה ערך לbash, שניתן לפרש כאמת אם ורק אם הקובץ מכיל את המחרוזת.
אז כדי לבדוק אם קובץ מכיל מחרוזת נריץ את זה:
grep -q WORD file.txt || echo Not found
הפרמטר -q נועד לבטל הדפסות של שורות שמתאימות למחרוזת (כי זה לא מה שאנחנו רוצים).
הפקודה || היא פקודה למעטפת שאומרת שאומרת "או".
זה אומר שהערך של הביטוי כולו הוא אמת אם לפחות אחד משני הביטויים משני צידי ה|| הם אמת. במקרה שgrep מוצא את המילה הוא יחזיר אמת, ולכן המעטפת לא תפעיל את הצד השני של ה|| כי היא כבר יודעת שהביטוי כולו הוא אמת. במקרה והקובץ לא מכיל את המחרוזת grep יחזיר שקר ואז המעטפת תריץ את הפקודה השניה שתדפיס לנו שלא מצאנו את הביטוי בקובץ.
עכשיו רק נשאר להריץ את הדבר הזה לכל קובץ, ולהדפיס עבור כל קובץ שלא מכיל את המחרוזת את השם שלו.
שוב, יש כמה דרכים, כולל שימוש בלולאה, אבל אני מעדיף את השימוש בxargs.
במצב הרגיל xargs מקבלת קלט ומפעילה פקודה כאשר הקלט הוא פרמטר של הפקודה. כאשר קוראים לxargs עם הפרמטר -i, הפקודה תקרא מספר פעמים, כמספר השורות בקלט, כאשר בכל פעם הסימן {} יוחלף בשורה הנוכחית.
לדוגמה, אם נפעיל את הפקודה ls -1, שמדפיסה כל קובץ בשורה נפרדת, על ספריה שמכילה קובץ a וקובץ b, ונשרשר לxargs -i נקבל:
$ ls -1 | xargs -i echo 123 {} 456
123 a 456
123 b 456
xargs קוראת לecho פעם אחת עבור כל קובץ.
אם נרצה לעשות משהו טיפה יותר מחוכם, שכולל קריאות לכמה פקודות עבור כל קובץ, נוכל להפעיל bash עם פרמטר -c (פקודה), למשל:
$ ls -1 | xargs -i bash -c "echo content of {} is;cat {}"
content of a is
hello
content of b is
world
אחרי כל זה אנחנו כבר יודעים מספיק בשביל להבין איך להשיג את המטרה, שהיא למצוא את כל הקבצים שלא מכילים משהו:
ls -1 | xargs -i bash -c "grep -q WORD {} || echo {}"
12 תגובות »
נכתב על ידי עמרי בנושא לינוקס
נניח שאתם רוצים להפעיל תוכנה גרפית על מחשב לינוקס מרוחק, ככה שהחלון שלה יפתח על אותו מחשב מרוחק.
כניסה בSSH והפעלה של התוכנית תניב את השגיאה הבאה:
omry@home:~$ xeyes
Error: Can't open display:
הפתרון הוא פשוט, קובעים את משתנה הסביבה DISPLAY לפני הקריאה:
omry@home:~$ export DISPLAY=:0.0
omry@home:~$ xeyes
יש כמובן את המקרה האחר, שבו אתם רוצים שהחלון של התוכנה יפתח אצלכם.
זה מה שאני זוכר לגבי זה, אבל אולי משהו פרח מזכרוני:
המקרה הזו דורש התחברות באמצעות ssh -X, והפעלת שרת X מקומי (יש גם לחלונות, את זה של cygwin או של Hummingbird)
בנוסף, צריך להגדיר לשרת הSSH שאליו אתם מתחברים לאפשר קידום פרוטוקול X11 באמצעות השורה הבאה בקובץ /etc/ssh/sshd_config:
ואז להפעיל את התוכנה כרגיל (בלי לקבוע את DISPLAY קודם).
7 תגובות »
נכתב על ידי עמרי בנושא בידורים, לינוקס
לפני כמה שנים טובות קניתי באמזון את חמשת הספרים הראשונים בסדרת המגדל האפל של סטיבן קינג (באנגלית).
קראתי בעבר את את הספר הראשון והשני, אבל אלו שקניתי מאמזון נשארו על המדף, ופשוט לא מצאתי זמן לקרוא אותם (או הרבה דברים אחרים).
בגלל זה קידמתי בברכה את סדרת האודיו בוק האיכותית של כל שבעת הספרים בסדרה.
למרות שהורדתי את הסדרה, אני מרגיש שבאיזה אופן יש לי זכות מוסרית לשמוע אותה, לפחות עד הספר החמישי :).
הסדרה מגיעה בקבצים של כ75 דקות כל אחד, שזה יותר מדי לשמיעה רצופה בנסיעה לעבודה.
עד הספר השלישי, פשוט חילקתי את הקבצים לשלוש חלקים של כ25 דקות, אבל זה היה מעט מדי בשביל הפקקים בבוקר בדרך להרצליה פיתוח, מה שגרם לי בדרך כלל להתחיל לשמוע את הפרק הבא עד החצי - דבר מבעס למדי.
עכשיו התחלתי את הספר הרביעי, Wizard and glass, והפעם החלטתי לאחד את הקבצים לקובץ אחד ענק לפני החילוק, מה שאיפשר לי לחלק לחתיכות של 35 דקות שמתאימות די טוב לזמן הנסיעה.
כדי לעשות את זה, אפשר להשתמש בmp3wrap ובmp3splt שניתנות להתקנה בקלות בדביאן (חפשו בחבילות).
כדי לאחד את הקבצים לקובץ אחד:
find *.mp3 -print0 | xargs -0 mp3wrap outfile.mp3
וכדי לפצל את הקובץ לחתיכות של 35 דקות (הפיצול מתבצע בנקודות שקט, אז התפר ממש בלתי מורגש) :
mp3splt -a -t 35.00 outfile.mp3
ובא שלום.
7 תגובות »
נכתב על ידי עמרי בנושא לינוקס
דרך Debian package of the day:
לפעמים אנחנו רוצים לשנות את השמות של סדרת קבצים במכה, תוך שמירה על חוקיות מסויימת.
למשל, נניח שיש לכם ספריה עם הקבצים:
foo1.png
foo2.png
bar3.png
ואתם רוצים לשנות את שמות הקבצים ככה שכולם יתחילו בfoo.
אפשר לעשות את זה ידנית, אבל זה נהיה מאוד לא כיף אם יש המון קבצים.
פה mmv נכנס לתמונה:
mmv "foo*.png" "bar#1.png"
ישנה את הקבצים ככה שהשמות שלהם יהיו:
bar1.png
bar2.png
bar3.png
mmv נמנע מלגרום נזק (מחיקה לא רצויה שנובעת מכך שכמה קבצי מקור ישונו לאותו שם).
כדאי לקרוא את המאמר המקורי כדי לקבל עוד כמה דוגמאות שימושיות.
4 תגובות »
|