יום שלישי, מרץ 26, 2019

איך לבצע מיגרציה בין שרתי svn בצורה שקופה למשתמשים

התמזל מזלי ונפלה ההזדמנות בחלקי להיות חלק מתהליך המרה מעניין (מעבר בין שני ספקים שונים).

גודל קובץ הdump הדחוס היה כ 3 ג"ב (היסטוריה של מעל 5 ג"ב) כולל מידע בינארי וטקסט.
שרת svn המקור - 10.1.1.1

כמות revisions בשרת המקור בעת יצרת קובץ גיבוי 100000
שרת svn היעד  svn.myrtfm.blogspot.com
יש לייצר שמות משתמש זהים דרך ממשק הניהול בשרת החד

דרישות קדם -
  • svnsync מותקן
  • svnrdump מתוקן
  • הרשאות קריאה לשרת המקור.
  • הרשאות כתיבה לשרת המקור.
  • מקום פנוי פי 1.5 בשרת היעד מגודל קובץ ה dump (במצב פרוס) בתהליך הטעינה.


 יצרת קובץ dump:
svnrdump dump http://10.1.1.1/svn/project > project.dump

טעינת קובץ ה dump בשרת היעד:

 svnrdump load project.dump http://svn.myrtfm.blogspot.com/project


הגדרת שירות svnsync על שרת היעד:

יש למצוא את ה uuid של שרת המקור (10.1.1.1) , מתבצע ע"י הרצת svn info כלפי שרת המקור והעתקת שדה ה UUID.

יש לייצר את את השדה sync-from-uuid עם ערך ה UUID שקיבלתם בשלב הקודם (החליפו את המילה UUID במה שקיבלת בשלב הקודם):

svn propset --revprop -r0 svn:sync-from-uuid UUID \
 http://svn.myrtfm.blogspot.com/project

יש להגדיר מהrevision האחרון שנטען לשרת svn.myrtfm.blogspot.com שישמש כהתחלה לביצוע sync:


svn propset --revprop -r0 \
svn:sync-last-merged-rev 100000   \
http://10.1.1.1/svn/project http://svn.myrtfm.blogspot.com/project

למרות שאצל הספק ממליצים לבצע שינוי שמות האנשים שביצעו קומיט

יום רביעי, מרץ 13, 2019

KISS

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

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

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

טלגרם (בדיוק כמו מוצרים אחרים) דורש שימוש בקו טלפון, ובגלל זה אין באמת פתרון פרטי או חופשי. שירות טלגרם זה משהוא בין רשימת תפוצה פרטית במייל לבין לקוח IRC או XMPP (רק בלי הפיטצרים שאני אוהב) .

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

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

ויש עוד הרבה נקודות שהנה רק חלקן :

פרטיות -

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

אין אפשרות הצפנה של ציר הנתונים בין שני משתמשים שהיא גם בתוכנה חופשית וגם נבדקה מספיק (דוגמה GPG).

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

המטה דטה עצמו אינו מאובטח מפני מפעיל המערכת.

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

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

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

האם באמת יש ייתרון כל שהוא לקבוצות טלגרם על גבי XMPP או IRC ? בגדול הם נותנים את אותו השירות רק בצורה של קהילה סגורה וממשק טיפה יותר "צעיר". אולי באמת כמו שאחד מידידי אמר היופי של rocket במובייל זה הממשק הייפה למרות שזה לא יותר מ IRC מצועצע. ו Rocket.chat הוא לפחות תוכנה חופשית (אבל עם מודל של שירותים נוספים בתשלום).

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

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

אתה רוצה לדאוג למשהוא שייספק לך חוויה דומה ?

אתה תזדקק ל:

שרת IRC
שרת ניהול משתמשים - זה יכול להיות כל דבר מרדיוס ועד בסיס נתונים מבוסס SQL.
שרת דוא"ל
שרת ניהול ספאם
שרת fail2ban
שרת saslauthd
איש IT שיודע מה שהוא עושה.
יותר מדי זמן פנויי

יום רביעי, ינואר 23, 2019

שינויים דרסטיים בשוק ה IM ב 2019

שנת 2019 התחילה קצת על רגל שמאל.

הפסקת שירותים -
אחד השירותיים הישנים והטובים ביותר שאני מכיר Google Talk ובגלגולו הנוכחי hangouts הולך לעולם שכולו טוב באוקטובור 2019 (זו אינה לשון נקייה לשיחרור בקוד פתוח והעברה לקרן אפאצ'י).

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

לפני תקופה מסויימת התחיל מעבר לפרוטוקול קנייני ולפי ידיעתי לא שוחרר קוד פתוח להתממשק למערכת כך שהצרכנים האחרים לקו בחסר (pidgin למשל לא יודע למחוק הודעות מהשרת של גוגל והיו לי כשלונות צרופים להעביר קבצים דרך הממשק).

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

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

חוסר תקשורת בין שירותים שונים של אותה החברה

גוגל העבירה את חלק ממשתמשיה למערכות דואו והלו (ללא תלות בחשבנות ה XMPP שלהם). הבעיה היא חוסר התקשורת בין שיורתי ה XMPP/hangouts לבין שירותי הלו ודואו (ועכשיו גם של האנגאוטס צ'אט). התוצאה שהודעות שנשלחות לאנשים שהם ביכול זמינים לא מקבלות מענה. בעוד הצד הנגדי כלל לא מודע שהוא קיבל הודעה עד שהוא לא ייתחבר לממשק ג'מייל לראות זאת שם.

שירותים מבוססי מספר טלפון

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

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

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

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

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

התקנת מערכות צד שקט לתקשורת

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

זו גם אחת הסיבות מדוע התחלתי לצחוק כשצוות שעוסק בחומר רגיש ביקש להעביר את השיחה לwhatsapp כי היא פרטית ומאובטחת במקום השימוש בציר שאנחנו השתמשנו בו. המציאות היא שאתה לא יכול לסמוך על שום לקוח תוכנה סגורה שלא מספק אפשרות שימוש בהצפנה חיצונית. כברירת מחדל כל מה שמועבר מעובד וקיימת האפשרות שהוא נאגר לשימוש עתידי (לא בהכרח שזה מתבצע בפועל).

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

זה טכנית בלתי אפשרי, ברגע שהמידע הגיע לכרטיס הרשת המידע הזה נשמר ב ram של המחשב, יכול לרדת לcacheים בלי שום שליטה של מנהל המידע. לאחר מכן יש מה שמכונה בעגה כמטה מידע (לוגים, נתוני שימוש)  אל מול המידע עצמו (תוכן השיחה גם אם הוא מוצפן). בדר"כ  קיימת אפשרות שמירה של לוגים (וספקי תקשורת מחוייבים לשמור חלק מהלוגים בחוק).

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

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

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

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

יותר טוב התקינו no-script ונסו לעבוד ללא JS חיצוניים לאתר בו אתם גולשים (כל כתובת שונה).


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

תזוזת אנשים לשירותים סגורים שלא נגישים לכולם.

נכון זה ה"קידמה" וזה ממש קולי להשתמש בסלאק וקבוצות סגורות אצל ספקי שירות (במקום להשתמש ב mailing list או ה irc הישן והטוב שפושט עובד. אבל המון אנשים שאני זוכר שהיו פעילים בקבוצות ו MLים פשוט נעלמו  או שהפסיקו לכתוב לחלוטין במקומות פומביים.

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

יום שני, ינואר 14, 2019

מתן אפשרות ל SSLKEYLOGFILE עבור תוכנות שמשתמשות ב libnss3

ב libnss3 נוסף פיטצר שחוסם את האפשרות להשתמש במשתנה הסביבה SSLKEYLOGFILE.

על מנת להחזיר את האפשרות יש לבנות את החבילה מחדש עם הדגל NSS_ALLOW_SSLKEYLOGFILE=1.

בגלל שאני רציתי חיים קלים הורדתי את חבילת הדביאן דרך apt-get source וערכתי את קובץ הבנייה והchangelog.

בשביל שתהיה חבילה חדשה (שתדרס בעידכון הבא).

בצורת patch זה יראה כך:

From 059aaee993008fabee5fec9f6fe869b6aa04b635 Mon Sep 17 00:00:00 2001
From: user <user>
Date: Mon, 14 Jan 2019 19:22:25 +0200
Subject: [PATCH] allow SSLKEYLOGFILE

---
 debian/changelog | 6 ++++++
 debian/rules     | 1 +
 2 files changed, 7 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index a0e1be1..7758b34 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+nss (2:3.41-2) unstable; urgency=medium
+
+  * NSS_ALLOW_SSLKEYLOGFILE=1.
+
+ -- User   Mon, 11 Jan 2019 14:13:39 +0900
+
 nss (2:3.41-1) unstable; urgency=medium
 
   * New upstream release.
diff --git a/debian/rules b/debian/rules
index 880a07e..3804c2f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -108,6 +108,7 @@ override_dh_auto_build:
                MOZILLA_CLIENT=1 \
                NSPR_INCLUDE_DIR=/usr/include/nspr \
                NSPR_LIB_DIR=/usr/lib/$(DEB_HOST_MULTIARCH) \
+               NSS_ALLOW_SSLKEYLOGFILE=1\
                BUILD_OPT=1 \
                NS_USE_GCC=1 \
                OPTIMIZER="$(CFLAGS) $(CPPFLAGS)" \
-- 
2.20.1

את החבילה בונים מחדש ע"י debuild -i -us -uc -b
ומתקינים ע"י dpkg -i *.deb

משלוח התרעות של הארגון לפריחת הכלניות

השבוע שמחתי לשמוע שהארגון שמכריז על פריחת כלניות החליטו לחסום גישה לכל מה שהוא לא הגישה הרשמית (אתר או האפליקציה שלפחות בעבר נכתבה ע"י חברה זרה).

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

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

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

בעבר כבר סקרתי מספר פעמים את הנושא של CB ועל הכשלון בזמן תרגיל לאתר התרעות על פריחת כלניות (ואשרי המאמין שערוץ ה data שלו יעבוד טוב מספיק בזמן חירום).


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

הבעיות בהן אני נתקלתי הן - כמובן שיכול להיות אדם אחר שבשבילו אלו לא יהיו בעיות :

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

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

באתר מוטמעים משאבים ורכיבים שנמשכים משרתים של חברות זרות הכוללות את פייסבוק , גוגל, אינסטאגרם, user1st ועוד הרבה אחרים (גישה לאתר תספק לכם את כל הרשימה של השירותים הנדרשים). אם אתם רוצים מרצה שיסביר לכם איך מתחילים לחשוב על פרטיות ומניעת התקפות אני ממליץ בחום רב על drm.org.il או אפילו לחפש בעמותת המקור או לשלוח שאלה לlinux-il (אין לי קשר לאף אחד מהם אבל אני מאמין שהם מספיק טובים) אני לא הולך להסביר לכם איך בונים  מערכות שבנויות מראש מוגנות או למה זה רעיון גרוע להשתמש בשירותי מעקב באתר שמספק דבר כה בסיסי.
לפחות במקרה אחד שירותי ההתרעה הגיעו כביכול מכתובת שהיתה בשליטת חברה זרה בעבר. שירותי ההתרעה לא הוגשו ממערכות הענן הציבורי של המדינה או ממערכות שהוכרזו בצורה רשמית כי הן בשליטת המדינה.

המערכת (אתר) בנוייה בצורה שאיננה מסוגלת לעבוד כאשר אין JS מופעל, מערכות התרעה ציבוריות מפותחות בצורה שהם צריכות לעבוד במספר רב של מישורים.

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

לא הוצגה אפשרות לבצע אימות צד לקוח ע"י חותמות לקוח (אם היו רוצים להגביל רק לאכלוסיה של אפליקציות מסויימות).
לא הוצג תיעוד ודרך לבצע pooling של הבקשות משרת התרעות מאבוטח לדוגמה ע"י XEP-0127.
לא הוצג תיעוד של ה API שאנשים צריכים להשתמש בו, כאשר הם מפתחים מערכת שצריכה להתממשק מול מערכת ההתרעות. כל אדם שיש לו אתר אמור להציג את ההתרעות האלה אצלו.

המערכת של המרכז לא העבירה התרעות מארגונים אחרים (לדוגמה מ ims.gov.il)
קיימת חוסר התאמה בין חותמת המשמות את TLS לבין השרתים שמספקים את השירות בפועל הרי הם יודעים למה כל כך חשוב שתהיה התאמה (ואנחנו יודעים איך מגדירים CDN משרתים מקומיים וחס שלום לא ממשהוא שיושב בחברה צד שלישית).

כי אם לא תקבלו את השגיאה הזאת ותחשבו שהאתר נפרץ (ולגמרי בצדק!)

wget https://www.oref.org.il/WarningMessages/Alert/alerts.json

--2019-01-14 18:20:03--  https://www.oref.org.il/WarningMessages/Alert/alerts.json
Resolving www.oref.org.il... 109.226.50.136, 109.226.50.139
Connecting to www.oref.org.il|109.226.50.136|:443... connected.
ERROR: cannot verify www.oref.org.il's certificate, issued by `/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA':
  Self-signed certificate encountered.
ERROR: certificate common name `a248.e.akamai.net' doesn't match requested host name `www.oref.org.il'.
To connect to www.oref.org.il insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.

את ההודעה תקבלו ב wget 1.11.4 של gnuwin אבל לא בגרסאות אחרות שהן פחות מחמירות.
את אותה הבדיקה אפשר לבצע ע"י ביצוע dig -x לכתובת אותה תקבלו מה CDN ולבצע השוואה,

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

השירות מסופק מדומיין משני ציבורי (שפתוח לכל עמותה וארגון) ולא תחת הדומיין המשני שהיה אמור להיות (gov לדוגמה). יש משמעות לכל second-level domain.

היו כבר פריחת כלניות ללא הודעה מוסדרת, והיו פריחות שווא  -  זו כמובן היתה תקלה בערב שלא היתה הודעה על פריחה (למרות שהייתה התרעה קולית) או שהפריחה היתה מחוץ לטווח.

ולאחר שסיימתי את זה.

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

wget --header="Referer: https://www.oref.org.il/" \
 --header="X-Requested-With: XMLHttpRequest" \
 --header="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"\
 --header="Accept: application/json, text/javascript, */*; q=0.01" \
 -qO- https://www.oref.org.il/WarningMessages/Alert/alerts.json?v=1


ב HTTP אנחנו משתמשים במה שמכונה כותרות (headers) אני פשוט הוספתי את הכותרות הבאות :
referer , X-Requsted-With, U-A, Accept.

אם רוצים לעבוד ממש לפי הספר צריך לבצע שתי בקשות , אחת בשביל לקבל את עוגיה בשם TS013a1194 והשנייה לשלוח את מה שהתקבל.
ובתוצאה נקבל :

BOM במקרה שיש דף ריק, אלוהים יודע למה אבל זה לא נורא.
בזמן התרעה נקבל מבנה json שבעבר נראה בערך כך :

{ 
"id" : "1542042267248",
"title" : "התרעות פיקוד העורף ",
"data" : [
    "מרכז הנגב 254",
    "עוטף עזה 225",
    "מרכז הנגב 255"
]
}
ה id הוא פשוט חותמת זמן מתי נשלחה (ניתן לחלק באלף ואז להשוות מול time_t רגיל).

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

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

את התסריט אפשר להתקין על כל מערכת שמכילה bash , jq notify-send ו dbus. אפשר במקום להשתמש ב dbus להשתמש ב wall אבל אני לא אוהב את העיבוד ברירת המחדל ל wall.


קודם כל תסריט ביצוע , הטסריט מצפה שהתוכנות הבאות יהיו מותקנות : bash, jq, notify-send,dbus /usr/local/bin/windflower.sh 

#!/bin/bash

#This script will alert you when the windflower blossom around you
#Copyright (c) 2019 Boris Shtrasman
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:

#The above copyright notice and this permission notice shall be included in all
#copies or substantial portions of the Software.

#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
#SOFTWARE.

if [ $# -ne 1 ]; then
echo "$0 expect alert url"
echo "example:"
echo "$0 http://www.oref.org.il/WarningMessages/Alert/alerts.json";
exit 1
fi

# notify all connected users on each connected screen (full screen flash video have issues with OSD)
function notify_user()
{
     users=($(who | sed -r "s/([a-z]*)[ \t]*.*\(([^)]+)\).*/\1,\2/p" | sort|uniq))
     for i in "${users[@]}"
     do
        user=$(echo $i | cut -d',' -f1)
        screen=$(echo $i|cut -d',' -f2)
        id=$(id -u $user)
        echo $user-$screen-$id
        DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$id/bus
        sudo -u $user DISPLAY=$screen DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS  \
                /usr/bin/notify-send  "$@"
      done
} 
#Get a broken json file from our windflower blossom provider
result=$( wget --header="Referer: https://www.oref.org.il/" \
               --header="X-Requested-With: XMLHttpRequest"  \
               --header="User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0"\
               --header="Accept: application/json, text/javascript, */*; q=0.01" \
               -qO- https://www.oref.org.il/WarningMessages/Alert/alerts.json?v=1 $1)

if [ -e "$result" ]; then
        echo "empty"
        exit 0
fi

if [ ${#result} -lt 5 ]; then
        exit 0
fi

title=($echo $result|jq -s '.[].title')
area=$(echo $result|jq -s '.[].data')

if [ -n "$area" ]; then   
   notify_user -t 15000  "Windflower $title $date" "$area" 
fi

exit 0
נמשיך ל קובץ ה service:
cat /etc/systemd/system/windflower.service 
[Unit]
Description=Windflower bloosom

[Service]
Type=oneshot
ExecStart=/bin/bash /usr/local/bin/windflower.sh http://www.oref.org.il/WarningMessages/Alert/alerts.json

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

בגדול נכון יהיה להשתמש ב Cache-Control שחוזר לנו מהשרת, אבל אני בחרתי ערך יפה יותר :

HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Content-Type: application/json
  Accept-Ranges: bytes
  ETag: W/"3ae4461aeacd41:0"
  Content-Length: 3
  Cache-Control: max-age=3
  Connection: keep-alive

הטיימר שלי נראה כך :
cat /etc/systemd/system/windflower.timer 
[Unit]
Description=Windflower bloosom
[Timer]
OnUnitActiveSec=5s
OnBootSec=100s
OnCalendar=*:*:0/5

[Install]
WantedBy=timers.target
ועכשיו נשאר רק לצפות בפריחה המדהימה.

יום ראשון, דצמבר 02, 2018

משהוא רע עובר בין qt לבין נבידיה

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

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

בשביל לתקן ב KDE אפשר לנסות בדרך הבאה:


את ה DPI אפשר לבחור לפי החישוב הבא :

√(אורך² x רוחב² )  

את החישוב צריך לעשות לפי אינצ' ולא סנטימטר (בגלל ש הDPI זה נקודות לאינץ ולא ליחידת מידה).

אצלי רק הבחירה בvendor default פתרה את הבעייה (בחירה ב enabled או disabled לא נתנה את הפתרון הרצוי ואלוהים יודע למה !).