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

בדף הזה נסביר איך להפעיל את AAOS Emulator בתור שירות אינטרנט ולהריץ אותו בדפדפן אינטרנט כדי להפוך אותו לנגיש למשתמשים מרחוק. כך אפשר לקבל מקצה לקצה, הפניה שימושית מינימלית דרך Google Cloud Compute Engine. עם זאת, תוכלו להשתמש בשירות הזה בכל פלטפורמת ענן ציבורית או פרטית לפי בחירתכם.

המטרה

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

  • מחקר על התנהגות המשתמשים, סקירת חוויית המשתמש, תמיכת לקוחות והדרכה.
  • הדגמות ללקוחות פוטנציאליים ובערוצי מכירות.
  • בדיקה, אימות ואפילו ניפוי באגים של אפליקציות (כולל פיתוח גרסאות build יומיות של OEM (יצרני ציוד מקורי)) בקנה מידה רחב. נקודות שכדאי להעלות את האמולטור שהוא התחליף לספסלי הבדיקה שמשמשים לפיתוח אפליקציות.
  • לנציגי מוקד הלקוחות של ה-OEM יש ממשק משתמש אחיד ונוח לגישה אל HU.

יש כמה יתרונות לשימוש באמולטור AAOS:

  • אפשר להשתמש בסקריפט הגדרה כדי ליצור אמולטור AAOS מותאם אישית ומבוסס-ענן (אמולטור בענן).
  • יצירת קובץ אימג' מותאם אישית של AAOS Cloud Emulator למכונות VM:
    • מוכן להגדרה של אמולטור מבוסס-ענן.
    • תמונות AAOS AVD ציבוריות שזמינות ליוצר השירות לצורך הפעלת AAOS AVD באמצעות פקודה. לדוגמה, תמונות AVD ציבוריות של ה-OEM (יצרן הציוד המקורי) כדוגמאות שהשותפים יכולים להתאים וליישם.

ארכיטקטורה

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

איור 1. ארכיטקטורת Cloud AVD.

אבני הבניין של האמולטור המפתח הן:

כאן.
פריט המטרה
אמולטור Android מכונת אמולטור מארחת תמונות AVD
גשר דג זהב-Webrtc אפליקציית Linux כדי לספק תקשורת בין אפליקציית התגובה לאמולטור AAOS
android-emulator-webrtc אפליקציית תגובה להצגת ממשק המשתמש של האמולטור באינטרנט בדפדפן. התגובה גם מתעדת אירועי קלט של משתמשים ושולחת אותם חזרה לשרת.
סקריפטים של קונטיינרים לאמולטור Android סקריפטים ב-Python כדי לנהל וליצור תמונות וקונטיינרים של Docker למודולי התוכנה שצוינו למעלה.
יצירת אסימונים לניהול הרשאות הגישה של האמולטור.
הפעלת השרת יוצרת חיבור ישיר של WebRTC בין הלקוח לשרת. הפעלת השרת נדרש רק כאשר שירות האמולטור פועל מאחורי חומות אש או שרתי proxy.
Envoy

שירות proxy אל:

  • צריך לספק HTTPS באמצעות אישור עם חתימה עצמית.
  • הפניה אוטומטית של התנועה ביציאה 80 (http) ליציאה 443 (https).
  • לשמש כשרת proxy ל-gRPC עבור האמולטור.
  • צריך לאמת את האסימונים כדי לתת גישה לנקודת הקצה של gRPC באמולטור.
  • הפניה אוטומטית של בקשות אחרות לרכיב Nginx שמארח אפליקציית React.

הגדרת אמולטור ב-VM בענן

כדי ליצור פרויקט ב-GCP:

  1. נכנסים למסוף Google Cloud Select a Project.
  2. כדי לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud: הפעלה, השבתה ושינוי של חיוב בפרויקט .
  3. מפעילים את ה-API.

יצירת מכונה וירטואלית של Linux ב-GCE

1. הפעלת הווירטואליזציה בתוך הארגון

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

  1. שימוש בכלי שורת הפקודה של gcloud כדי לוודא שאכן וירטואליזציה בתוך עץ מותרת:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. יצירת דיסק ניתן לאתחול מסוג Ubuntu-1804-lts

  1. מעבר אל מסוף Cloud.
  2. בוחרים את פרויקט GCP.
  3. עוברים לתפריט ניווט ובוחרים באפשרות Compute Engine > דיסקים > יצירת אחסון.
    1. נותנים שם לדיסק. לדוגמה: ubuntu1804lts
    2. בוחרים אזור ותחום. כדי לתמוך בווירטואליזציה של עץ, יש לוודא שהאזור ו-Zone Select (אזור שבחרת) תומכים במעבדי Haswell (ואילך). מידע נוסף זמין במאמר הבא: Regions and Zones (אזורים ותחומים).
    3. בחירה של תמונת המקור של ubuntu-1804-bionic-v20210211
    4. מגדירים גודל אחסון מתאים (מומלץ להגדיר 100GB או יותר).

איור 2. יוצרים דיסק אתחול של Ubuntu.

3. יצירת תמונה מותאמת אישית עם מפתח רישיון מיוחד כדי להפעיל VMX

  1. נכנסים אל מסוף Cloud.
  2. פותחים Cloud Shell ומשתמשים בפקודה הבאה:
    gcloud compute images create [IMAGE NAME] --source-disk-zone [DISK ZONE] --source-disk [DISK NAME] \
      --licenses "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
    
    • נותנים שם לתמונה. לדוגמה: aaos-emulator-image
    • מגדירים את Disk Zone (אזור הדיסק) לתחום שבו יצרתם את הדיסק.
    • מגדירים את שם הדיסק בתור השם שבו השתמשתם כדי ליצור את הדיסק.

    לדוגמה:

    gcloud compute images create aaos-emulator-image --source-disk-zone us-central1-a \
        --source-disk ubuntu1804lts \
        --licenses \
        "https://www.googleapis.com/compute/v1/projects/vm-options/global/licenses/enable-vmx"
    

פרטים נוספים זמינים במאמר Nest Virtualization VM Instance.

4. יצירת מכונת VM באמצעות התמונה המותאמת אישית

  1. נכנסים אל מסוף Cloud.
  2. בוחרים את פרויקט GCP.
  3. עבור לתפריט הניווט > Compute Engine > מופע של VM.

    איור 3. יצירת מכונת VM.

  4. מזינים שם למכונה. לדוגמה: aaosemulator
  5. בוחרים את משפחת המכונות והסוג הרצוי. ודאו שהמכונה מכילה ארבעה מעבדים vCPU זיכרון בנפח 16GB (או יותר).
  6. בחירת פלטפורמת CPU תהיה Intel Cascade Lake (ואילך).
  7. משנים את דיסק האתחול לתמונה שנוצרה בשלב הקודם.
  8. אפשר להפעיל חומת אש עבור:
    • הרשאה לתנועת HTTP
    • הרשאה לתנועת HTTPS

5. הגדרת חומת האש לפתיחת יציאה 80 ו-443

  1. נכנסים אל מסוף Cloud.
  2. בוחרים את פרויקט GCP.
  3. עבור לתפריט הניווט > Compute Engine > מכונת VM > מגדירים כלל לחומת אש.

התקנת התוכנה הנדרשת ב-VM

  1. מתקינים את Python 3 ואת Python3-env:
    sudo apt update
    sudo apt install python3
    sudo apt-get install python3-venv
    
  2. התקנת Android SDK ו-ADB זמינים בנתיב.
    sudo apt install android-sdk
    

    כדי להתקין Docker ו-Docker-Compose, ראו Docker ו- Docker-Compose. צריך לוודא שאפשר להריץ אלה כמשתמש שאינו Root.

  3. כדי לוודא שהמעבד (CPU) תומך בווירטואליזציה של חומרה (הפקודה אמורה לגרום מספר שאינו אפס):
    egrep -c '(vmx|svm)' /proc/cpuinfo
    
  4. מתקינים את המכונה הווירטואלית של הליבה (KVM). כדי להתקין את KVM, מריצים את:
    sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    
  5. כדי לוודא שה-KVM פועל:
    sudo apt install cpu-checker
    kvm-ok
    
    הפלט אמור להיות:
    INFO: /dev/kvm exists
    KVM acceleration can be used
    
  6. כדי להתקין את Node.js ואת Node Packet Manager (NPM):
    sudo apt install nodejs npm
    

הפעלת המאגרים המתארחים

  1. כדי לאמת את ההתקנה, צריך להריץ את הקונטיינרים המתארחים של Android Emulator מהציבור של מאגר הנתונים. פרטים על המאגרים אפשר למצוא כאן. עכשיו אפשר להפעיל את הקונטיינרים האלה בלי ליצור אותם. מוצרים לדוגמה:
    docker run \
      -e ADBKEY="$(cat ~/.android/adbkey)" \
      --device /dev/kvm \
      --publish 8554:8554/tcp \
      --publish 5555:5555/tcp  \
      us-docker.pkg.dev/android-emulator-268719/images/30-google-x64:30.1.2
    

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

  2. כשהקונטיינר מופעל, מתחברים למכשיר על ידי הגדרת ADB באותו אופן. כחיבור AVD במארח מקומי. מוצרים לדוגמה:
    adb connect localhost:5555
    adb devices
    
    הפלט אמור להיות:
    List of devices attached
    localhost:5555 device
    

הגדרת שירות אמולטור AAOS

כדי להגדיר את שירות האמולטור:

  1. מתקינים את סקריפט הקונטיינר של Docker של Android Emulator:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. הפעולה הזו מפעילה סביבה וירטואלית ויוצרת את קובץ ה-emu-docker של קובץ ההפעלה. כדי לקבל מידע מפורט על השימוש בו, אפשר להפעיל אותו:
    emu-docker -h
    
  3. כדי ליצור את הקונטיינרים של Docker, מאשרים את הסכמי הרישיון.
  4. פיתוח קונטיינר Docker של AAOS Emulator.
  5. צריך להוריד גרסת build של אמולטור בגרסה מאוחרת יותר מגרסה 7154743. מוצרים לדוגמה:
    sdk-repo-linux-emulator-7154743.zip
    
  6. מורידים את תמונת המערכת של האמולטור AAOS. לדוגמה, sdk-repo-linux-system-images-7115454.zip:
    emu-docker create <emulator-zip> <system-image-zip>
    
  7. יצירת קונטיינרים באינטרנט והגדרת שם משתמש וסיסמה לגישה מרחוק.
    ./create_web_container.sh -p user1,passwd1
    
  8. מפעילים את שירות האינטרנט של AAOS Emulator:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

הפעלת בהצלחה שירות אינטרנט של אמולטור AAOS! צריך להשתמש בהגדרות הבאות כדי לגשת בדפדפן אינטרנט:

https://<VM_External__IP>

פתרון בעיות

אם מתרחשת שגיאת התחברות לכתובת ה-IP החיצונית של המכונה הווירטואלית, צריך לוודא שה-VM מוגדרת לאפשר גם בתנועת HTTP וגם ב-HTTPS. כדי לאמת זאת, יש לעיין הפעלת שרת אינטרנט בסיסי של Apache.

הגדרת שרת התורן

תמיד אפשר להשתמש בשרת תורות משלך. בהמשך מוצגת דוגמה ל-VM של Google Cloud מכונה.

הערה: כדי ששרת הפנייה יפעל במכונה של Google Cloud VM, חשוב להקפיד להגדיר את כלל חומת האש של המכונה הווירטואלית כדי לאפשר תנועה ביציאות TCP ו-UDP 3478 ו-3479.

  1. מתקינים את שרת Coturn:
    sudo apt install coturn
    systemctl stop coturn
    echo "TURNSERVER_ENABLED=1"|sudo tee -a /etc/default/coturn
    
  2. כדי לשנות את /etc/turnserver.conf, צריך להוסיף את השורות הבאות:
    lt-cred-mech
    #set your realm name
    realm=test
    #coturn username and password
    user=test:test123
    # external-ip=<VM-Public-IP>/<VM-Private-IP>
    external-ip=34.193.52.134/10.128.0.2
    
    systemctl start coturn
    
  3. משנים את קובץ ה-YAML של Docker לכתיבה כך שיכלול את ההגדרה של TURN:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. בקטע של האמולטור מוסיפים את שתי השורות הבאות בסביבה:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
    
  5. מפעילים מחדש את שירות האמולטור AAOS עם הגדרת הפנייה. חשוב להחליף את כתובת ה-IP של שרת הפנייה, שם המשתמש ופרטי הכניסה שמופיעים בהמשך:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up