আপনার নিজের ক্লাউড এমুলেটর তৈরি করুন

এই নিবন্ধটি বর্ণনা করে যে কীভাবে AAOS এমুলেটরকে একটি ওয়েব পরিষেবা হিসাবে চালাতে হয় এবং এটিকে ব্যবহারকারীদের কাছে দূরবর্তীভাবে অ্যাক্সেসযোগ্য করতে একটি ওয়েব ব্রাউজারে চালাতে হয়। এটি করা Google ক্লাউড কম্পিউট ইঞ্জিনের মাধ্যমে একটি এন্ড-টু-এন্ড, ন্যূনতমভাবে কার্যকর রেফারেন্স প্রদান করে। এটি বলেছে, আপনি আপনার পছন্দের যেকোনো পাবলিক বা প্রাইভেট ক্লাউড প্ল্যাটফর্মে এই পরিষেবাটি ব্যবহার করতে পারেন।

উদ্দেশ্য

এই কেন্দ্রীভূত কনফিগারেশন এবং সেটআপটি AAOS এমুলেটরকে একটি সম্পূর্ণ কোম্পানি, সরবরাহকারী এবং বাড়ি থেকে কাজ করে ডেভেলপারদের কাছে অ্যাক্সেসযোগ্য করে তোলে। এটি করার ফলে AAOS এমুলেটরকে নতুন সংস্করণে পরিচালনা এবং আপগ্রেড করা আরও দক্ষ করে তোলে এবং পৃথক ব্যবহারকারীদের জন্য স্থানীয় মেশিনগুলি সেট আপ এবং পরিচালনা করার জন্য প্রয়োজনীয় সময় বাদ দেয়। এই সমাধানটি হার্ডওয়্যার সংস্থানগুলির ব্যবহারকে অপ্টিমাইজ করে এবং একটি কম খরচে অ্যাপ বিকাশের পরিবেশ সক্ষম করে৷ উদাহরণস্বরূপ, এর উদ্দেশ্যে:

  • ব্যবহারকারী গবেষণা, ব্যবহারকারীর অভিজ্ঞতা পর্যালোচনা, গ্রাহক সহায়তা, এবং প্রশিক্ষণ।
  • সম্ভাব্য গ্রাহকদের ডেমো এবং বিক্রয় চ্যানেলে।
  • স্কেলে পরীক্ষা করুন, যাচাই করুন এবং এমনকি ডিবাগ অ্যাপগুলি (দৈনিক OEM HMI বিল্ড সহ)। এমুলেটরটিকে পরীক্ষা বেঞ্চের বিকল্প হিসাবে বিবেচনা করুন যা অ্যাপগুলি বিকাশ করতে ব্যবহার করে।
  • OEM গ্রাহক কল সেন্টার এজেন্টদের একটি অভিন্ন, সহজে অ্যাক্সেসযোগ্য HU UI আছে।

AAOS এমুলেটর ব্যবহার করার সুবিধাগুলি অসংখ্য:

  • একটি কাস্টমাইজড এবং ক্লাউড-ভিত্তিক AAOS এমুলেটর (ক্লাউড এমুলেটর) তৈরি করতে একটি সেটআপ স্ক্রিপ্ট ব্যবহার করুন।
  • VM দৃষ্টান্তগুলির জন্য একটি কাস্টমাইজড AAOS ক্লাউড এমুলেটর চিত্র তৈরি করুন:
    • একটি ক্লাউড-ভিত্তিক এমুলেটরের প্রস্তুত সেট-আপ।
    • একটি কমান্ড সহ একটি AAOS AVD শুরু করতে পরিষেবা নির্মাতার কাছে সর্বজনীন AAOS AVD চিত্র উপলব্ধ৷ উদাহরণস্বরূপ, সর্বজনীন OEM AVD চিত্রগুলিকে অংশীদারদের মানিয়ে নিতে এবং প্রয়োগ করার জন্য নমুনা হিসাবে।

স্থাপত্য

ক্লাউড এমুলেটর উদাহরণের আর্কিটেকচার নীচে চিত্রিত করা হয়েছে। আপনার প্রথম ন্যূনতমভাবে কার্যকর পরিষেবা আপনার নিজস্ব OEM AVD ছবি যোগ করে কাজ করবে।

চিত্র 1. ক্লাউড AVD আর্কিটেকচার

মূল এমুলেটর বিল্ডিং ব্লক হল:

আইটেম উদ্দেশ্য
অ্যান্ড্রয়েড এমুলেটর এমুলেটর ইনস্ট্যান্স AVD ইমেজ হোস্ট করে
গোল্ডফিশ-ওয়েবআরটিসি ব্রিজ লিনাক্স অ্যাপ্লিকেশন প্রতিক্রিয়া অ্যাপ্লিকেশন এবং AAOS এমুলেটর মধ্যে যোগাযোগ প্রদান
android-emulator-webrtc একটি ওয়েব ব্রাউজারে এমুলেটর UI প্রদর্শন করতে অ্যাপ্লিকেশন প্রতিক্রিয়া করুন। প্রতিক্রিয়া ব্যবহারকারীর ইনপুট ইভেন্টগুলিও ক্যাপচার করে এবং সেগুলিকে সার্ভারে ফেরত পাঠায়।
অ্যান্ড্রয়েড এমুলেটর কন্টেইনার স্ক্রিপ্ট উপরের সফ্টওয়্যার মডিউলগুলির জন্য ডকার ইমেজ এবং কন্টেইনারগুলি পরিচালনা এবং তৈরি করতে পাইথন স্ক্রিপ্ট।
JWT পরিষেবা (JSON ওয়েব টোকেন পরিষেবা) এমুলেটরের অ্যাক্সেস অনুমতিগুলি পরিচালনা করতে টোকেন তৈরি করে।
সার্ভার টার্ন করুন ক্লায়েন্ট এবং সার্ভারের মধ্যে একটি WebRTC সরাসরি সংযোগ স্থাপন করে। টার্ন সার্ভার শুধুমাত্র তখনই প্রয়োজন যখন এমুলেটর পরিষেবা ফায়ারওয়াল বা প্রক্সির পিছনে চলছে।
দূত

এর জন্য একটি প্রক্সি পরিষেবা:

  • একটি স্ব-স্বাক্ষরিত শংসাপত্র ব্যবহার করে HTTPS প্রদান করুন।
  • পোর্ট 80 (http) থেকে 443 (https) পোর্টে ট্র্যাফিক রিডাইরেক্ট করুন।
  • এমুলেটরের জন্য একটি gRPC প্রক্সি হিসাবে কাজ করুন।
  • এমুলেটর gRPC এন্ডপয়েন্টে অ্যাক্সেসের অনুমতি দিতে টোকেন যাচাই করুন।
  • অন্যান্য অনুরোধগুলিকে Nginx উপাদানে পুনঃনির্দেশিত করুন, যা একটি প্রতিক্রিয়া অ্যাপ্লিকেশন হোস্ট করে।

একটি ক্লাউড ভিএম এ এমুলেটর সেট আপ করুন

একটি GCP প্রকল্প তৈরি করতে:

  1. Google ক্লাউড কনসোলে যান এবং একটি প্রকল্প নির্বাচন করুন
  2. আপনার Google ক্লাউড প্রকল্পের জন্য বিলিং সক্ষম হয়েছে তা নিশ্চিত করতে , একটি প্রকল্পের জন্য সক্ষম, নিষ্ক্রিয় বা বিলিং পরিবর্তন দেখুন।
  3. API সক্রিয় করুন

GCE এ একটি লিনাক্স ভিএম তৈরি করুন

1. নেস্টেড ভার্চুয়ালাইজেশন সক্ষম করুন৷

ডিফল্টরূপে, নেস্টেড ভার্চুয়ালাইজেশন প্রকল্প, ফোল্ডার বা সংস্থার স্তরে অনুমোদিত। আপনার প্রতিষ্ঠানের কেউ নেস্টেড ভার্চুয়ালাইজেশন অক্ষম না করলে, এটি সক্ষম করার জন্য আপনাকে কিছু করতে হবে না।

  1. নেস্টেড ভার্চুয়ালাইজেশন অনুমোদিত কিনা তা নিশ্চিত করতে gcloud কমান্ড-লাইন টুল ব্যবহার করুন:
    gcloud beta resource-manager org-policies describe   \
      constraints/compute.disableNestedVirtualization  --effective --project=[PROJECT_ID]
    

2. একটি Ubuntu-1804-lts বুটেবল ডিস্ক তৈরি করুন

  1. ক্লাউড কনসোলে যান।
  2. GCP প্রকল্প নির্বাচন করুন।
  3. নেভিগেশন মেনুতে যান > কম্পিউট ইঞ্জিন > ডিস্ক > ডিস্ক তৈরি করুন।
    1. একটি ডিস্ক নাম প্রদান করুন. উদাহরণস্বরূপ, ubuntu1804lts
    2. একটি অঞ্চল এবং অঞ্চল নির্বাচন করুন। নেস্টেড ভার্চুয়ালাইজেশন সমর্থন করার জন্য, নিশ্চিত করুন যে আপনি যে অঞ্চল এবং অঞ্চল নির্বাচন করেছেন তা হাসওয়েল (বা পরবর্তী) প্রসেসর সমর্থন করে। আরও জানতে, অঞ্চল এবং অঞ্চল দেখুন।
    3. ubuntu-1804-bionic-v20210211 এর উৎস চিত্র নির্বাচন করুন
    4. একটি উপযুক্ত ডিস্কের আকার সেট করুন (100GB বা তার চেয়ে বড় সুপারিশ করা হয়)।

চিত্র 1. উবুন্টু বুটেবল ডিস্ক তৈরি করুন

3. VMX সক্ষম করতে বিশেষ লাইসেন্স কী সহ একটি কাস্টম চিত্র তৈরি করুন৷

  1. ক্লাউড কনসোলে যান।
  2. একটি ক্লাউড শেল খুলুন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
    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
    • আপনি যে অঞ্চলে ডিস্ক তৈরি করেছেন সেখানে ডিস্ক জোন সেট করুন।
    • আপনি ডিস্ক তৈরি করতে যে নামে ব্যবহার করেছিলেন তার সাথে ডিস্কের নাম সেট করুন।

    উদাহরণ স্বরূপ:

    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"
    

বিস্তারিত জানার জন্য, নেস্টেড ভার্চুয়ালাইজেশন VM ইনস্ট্যান্স দেখুন।

4. কাস্টমাইজড ইমেজ ব্যবহার করে একটি VM ইনস্ট্যান্স তৈরি করুন

  1. ক্লাউড কনসোলে যান।
  2. GCP প্রকল্প নির্বাচন করুন।
  3. নেভিগেশন মেনু > কম্পিউট ইঞ্জিন > ভিএম ইনস্ট্যান্সে যান।

    চিত্র 1. একটি VM উদাহরণ তৈরি করুন

  4. একটি উদাহরণের নাম লিখুন। উদাহরণস্বরূপ, aaosemulator
  5. পছন্দসই মেশিন পরিবার নির্বাচন করুন এবং টাইপ করুন। নিশ্চিত করুন যে মেশিনটিতে চারটি vCPU এবং 16 GB মেমরি (বা তার বেশি) রয়েছে।
  6. ইন্টেল ক্যাসকেড লেক (বা পরে) হতে CPU প্ল্যাটফর্ম নির্বাচন করুন।
  7. আগের ধাপে তৈরি করা ছবিতে বুট ডিস্ক পরিবর্তন করুন।
  8. এর জন্য ফায়ারওয়াল সক্ষম করুন:
    • HTTP ট্র্যাফিকের অনুমতি দিন
    • HTTPS ট্রাফিকের অনুমতি দিন

5. পোর্ট 80 এবং 443 খুলতে ফায়ারওয়াল কনফিগার করুন

  1. ক্লাউড কনসোলে যান।
  2. GCP প্রকল্প নির্বাচন করুন।
  3. নেভিগেশন মেনুতে যান > কম্পিউট ইঞ্জিন > ভিএম ইনস্ট্যান্স > ফায়ারওয়াল নিয়ম সেট আপ করুন।

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
    

    ডকার এবং ডকার-কম্পোজ ইনস্টল করতে, ডকার এবং ডকার-কম্পোজ দেখুন। নিশ্চিত করুন যে আপনি এইগুলি অ-রুট ব্যবহারকারী হিসাবে চালাতে পারেন।

  3. সিপিইউ হার্ডওয়্যার ভার্চুয়ালাইজেশন সমর্থন করে তা নিশ্চিত করতে (কমান্ডের ফলে একটি অ-শূন্য নম্বর হওয়া উচিত):
    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 প্যাকেট ম্যানেজার (NPM) ইনস্টল করতে:
    sudo apt install nodejs npm
    

হোস্ট করা পাত্রে শুরু করুন

  1. ইনস্টলেশন যাচাই করতে, পাবলিক রিপোজিটরি থেকে হোস্ট করা Android এমুলেটর কন্টেইনার চালান। আপনি এখানে পাত্র সম্পর্কে বিস্তারিত জানতে পারেন. আপনি এখন এই কন্টেইনারগুলি তৈরি না করে চালাতে পারেন। যেমন:
    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. কন্টেইনার চালু হলে, স্থানীয় হোস্টে AVD সংযোগ করার মতো একইভাবে ADB কনফিগার করে ডিভাইসের সাথে সংযোগ করুন। উদাহরণস্বরূপ:
    adb connect localhost:5555
    adb devices
    
    আউটপুটটি হওয়া উচিত:
    List of devices attached
    localhost:5555 device
    

AAOS এমুলেটর পরিষেবা সেট আপ করুন

এমুলেটর পরিষেবা সেট আপ করতে:

  1. অ্যান্ড্রয়েড এমুলেটর ডকার কন্টেইনার স্ক্রিপ্ট ইনস্টল করুন:
    git clone https://github.com/google/android-emulator-container-scripts.git
    
    cd android-emulator-container-script
    source ./configure.sh
    
  2. এটি একটি ভার্চুয়াল পরিবেশ সক্রিয় করে এবং এক্সিকিউটেবল ইমু-ডকার উপলব্ধ করে। এর ব্যবহার সম্পর্কে বিস্তারিত তথ্য পেতে, এটি চালু করুন:
    emu-docker -h
    
  3. ডকার কন্টেইনার তৈরি করতে, লাইসেন্স চুক্তি গ্রহণ করুন।
  4. AAOS এমুলেটর ডকার কন্টেইনার তৈরি করুন।
  5. সংস্করণ 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 এমুলেটর ওয়েব পরিষেবা শুরু করুন:
    docker-compose -f js/docker/docker-compose-build.yaml -f js/docker/development.yaml up
    

আপনি সফলভাবে একটি AAOS এমুলেটর ওয়েব পরিষেবা শুরু করেছেন! একটি ওয়েব ব্রাউজারে এটি অ্যাক্সেস করতে নিম্নলিখিত ব্যবহার করুন:

https://<VM_External__IP>

সমস্যা সমাধান

যদি VM বাহ্যিক IP-এর সাথে একটি সংযোগ ত্রুটি ঘটে, তাহলে নিশ্চিত করুন যে VM HTTP এবং HTTPS উভয় ট্র্যাফিকের অনুমতি দেওয়ার জন্য সেট আপ করা আছে। এটি যাচাই করতে, একটি মৌলিক Apache ওয়েব সার্ভার চালানো দেখুন।

টার্ন সার্ভার সেট আপ করুন

আপনি সবসময় আপনার নিজের টার্ন সার্ভার ব্যবহার করতে পারেন. Google ক্লাউড VM দৃষ্টান্তের একটি নমুনা নীচে দেওয়া হল৷

দ্রষ্টব্য: একটি Google ক্লাউড VM ইন্সট্যান্সে টার্ন সার্ভার কাজ করতে, TCP এবং UDP পোর্ট 3478 এবং 3479-এ ট্র্যাফিকের অনুমতি দেওয়ার জন্য VM ফায়ারওয়াল নিয়ম কনফিগার করতে ভুলবেন না।

  1. কটার্ন সার্ভার ইনস্টল করুন:
    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 ফাইলটি পরিবর্তন করুন:
    cd android-emulator-container-script
    nano  js/docker/docker-compose-build.yaml
    
  4. এমুলেটর বিভাগে নিম্নলিখিত দুটি পরিবেশ লাইন যোগ করুন:
         shm_size: 128M
         expose:
           - "8554"
    +    environment:
    +       - TURN=printf $SNIPPET
    
  5. টার্ন কনফিগারেশনের সাথে AAOS এমুলেটর পরিষেবাটি পুনরায় চালু করুন। নিচের টার্ন সার্ভার আইপি, ইউজারনেম, এবং ক্রেডেনশিয়াল আপনার নিজের দিয়ে প্রতিস্থাপন করতে ভুলবেন না:
    export SNIPPET="{\"iceServers\":[{\"urls\":\"turn:35.193.52.134:3478\",\"username\":\"test\",\"credential\":\"test123\"}]}"
    docker-compose -f js/docker/docker-compose-build.yaml up