‏הצגת רשומות עם תוויות svn. הצג את כל הרשומות
‏הצגת רשומות עם תוויות svn. הצג את כל הרשומות

יום שלישי, ספטמבר 01, 2020

RIP Cloudforge

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

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

היה שלום חבר , ותודה על הדגים.

יום שני, מאי 13, 2019

Error running context: An error occurred during SSL communication at /usr/share/perl5/Git/SVN.pm line 148.

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

אחד הדברים שנפגעו מזה זה כל מה שמשתמש ב serf ו tls.

ספקים שדאגו להתכונן לעניין (כמו apache ו github) לא נפגעו ומאפשרים לבצע checkout :

  svn co https://svn.apache.org/repos/asf/subversion/trunk subversion 
A    subversion/build
A    subversion/build/ac-macros
A    subversion/build/generator
A    subversion/build/generator/swig
A    subversion/build/generator/util
A    subversion/build/generator/templates
A    subversion/.editorconfig
A    subversion/build/generator/swig/external_runtime.py
A    subversion/README
.
.
.


אבל יש ספקים אחרים בהם התוצאה היא שאי אפשר לבצע clone / checkout מהם ומקבלים את הדבר הבא :

git svn clone https://cloudservice.com/project/trunk

Initialized empty Git repository in /tmp/svn/trunk/.git/
Can't create session: Unable to connect to a repository at URL 'https://cloudservice.com/project/trunk': Error running context: An error occurred during SSL communication at /usr/share/perl5/Git/SVN.pm line 148.

וגם ב subversion  :

svn checkout https://cloudservice.com/project/trunk .  
svn: E170013: Unable to connect to a repository at URL 'https://cloudservice.com/project/trunk'
svn: E120171: Error running context: An error occurred during SSL communication

לאחר חיפוש גיליתי שהבעיה היא בהצעת הצופן של הספק :

openssl s_client -connect cloudservice.com:443 2>/dev/null |grep 'Cipher is'
New, (NONE), Cipher is (NONE)

אצל ספקים אחרים שאין את הבעיה הזאת כמו github ו apache הפלט יהיה :

openssl s_client -connect github.com:443 2>/dev/null |grep 'Cipher is'
New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256

openssl s_client -connect svn.apache.org:443 2>/dev/null |grep 'Cipher is'
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384

השרתים בהם יש בעייה לבצע checkout  ,  כן מספרים שהם תומכים ב TLS 1.2 אבל יש בעייה בהצעה עצמה :

New, (NONE), Cipher is (NONE)
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : 0000


המעקף היחיד שמצאתי לדבר הזה הוא שימוש בקובץ openssl.cnf מיוחד עבור השירות הזה :

diff openssl.cnf unsecure_openssl.cnf 
361c361,362
< MinProtocol = TLSv1.2
---
> #MinProtocol = TLSv1.2
> MinProtocol = none
והשימוש כך :

$ OPENSSL_CONF=/tmp/unsecure_openssl.cnf git svn clone https://cloudservice.com/project/trunk                                                             
Initialized empty Git repository in /tmp/svn/trunk/.git/
r1 = 50dd6cc1cc8224a37e5bac80a5ba6ad88e01a96a (refs/remotes/git-svn)
        A        ar/messages/extragear-pim/kmobiletools.po
.
.
.
זהוא פתרון עקום ומחייב שימוש במשתנה הסביבה OPENSSL_CONF רק בשביל האפליקציה הספציפית שצריך, אבל לפחות זה לא פוגע בכל המערכת שלכם ועדיין אפשר לעבוד עם הספק הבעייתי.

יום שלישי, מרץ 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

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

יום שישי, יוני 22, 2012

וחיו git ו svn ביחד

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

בפעם הראשונה שמנסים לעשות clone מגבלים שgit יוצא ללא שגיאה ומה שרואים היינו:

git svn clone -s https://ip/svn/project/trunk_name local_repo
rXXXXX = 231876121242148168246 (refs/remotes/git-svn)

אם ניכנס לתיקיה local_repo נראה שאין קבצים פרט לתיקיית .git, על מנת לפתור את הבעיה הזאת יש להריץ git svn fetch מתוך התיקייה שנוצרה ע"י git svn.
בחלק מהמקרים נאלצתי להריץ ידנית fetch עוד עשרות פעמים עד ש git הואיל בטובו להוריד את כל הפרוייקט, מדי פעם עדיף להריץ גם git gc (אחת ל 1000 גירסאות הספיק לי .


בעייה נוספת שניתקלתי בה היה יצאה של git תוך כדי clone ולאחר מכאן fetch או rebase:
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
   Use '--' to separate paths from revisions
   log --no-color --no-decorate --first-parent --pretty=medium HEAD: command returned error: 128

הפתרון לבעיה זו הוא להשתמש ללא -s ולכוון ל svn trunk שצריך דוגמה :
git svn clone https://ip/svn/project/trunk_name/ local_repo

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

לוקחים את תיקיית ה git שנוצרה (יש רק אחת ומושכים אותה לתיקיה הראשונה שנוצרת לכם ע"י svn ,
לדוגמה:


/opt/svn/bfs_patches$ ls -la
total 7816
drwxr-xr-x 15 boris boris    4096 Jun 21 18:49 .
drwxr-xr-x  3 boris boris    4096 Jun 21 18:21 ..
-rw-r--r--  1 boris boris     174 Jun 21 18:24 .buildpath
drwxr-xr-x  3 boris boris    4096 Jun 21 18:24 docgenerator
drwxr-xr-x  9 boris boris    4096 Jun 22 00:47 .git
drwxr-xr-x  3 boris boris    4096 Jun 21 18:51 2.6.38-bfs
-rw-r--r--  1 boris boris     517 Jun 21 18:24 .project
drwxr-xr-x  3 boris boris    4096 Jun 21 18:24 .settings
drwxr-xr-x  6 boris boris    4096 Jun 21 20:15 .svn



הוספתי את התיקייה .git לתוך תיקיות שהיו תחת svn, השלב הבא הוא לזכור שבכל פעם שאנחנו משנים קבצים ע"י svn לעשות :
  git  reset --hard && git svn rebase

שימו לב זה יעיף את כל השינוים המקומים שלכם בgit.
למה אני עושה את זה - אני עובד עם הרבה מאוד תוכנות ותסריטים שדורשות עבודה עם svn ולא יודעות להתמודד עם git. לכן כאשר אני מסיים איתן אני מריץ reset וחוזר לעבוד עם git.