יצירת תמונות BYOL של Windows בהתאמה אישית

כדי ליצור מכונה וירטואלית (VM) של Windows ב- Cloud de Confiance by S3NS, צריך להשתמש בקובץ אימג' של מכונה וירטואלית שבו מותקנים מראש Windows או Windows Server.‏ Cloud de Confiance מספק קובצי אימג' ציבוריים לגרסאות נפוצות של Windows Server, אבל קובצי האימג' האלה מתאימים רק לרישוי על פי דרישה. כדי להשתמש ברישיון Windows משלכם (BYOL), אתם צריכים לייבא תמונה קיימת או ליצור תמונה בהתאמה אישית.

במדריך הזה מוסבר איך ליצור תמונה בהתאמה אישית באמצעות אותם כלים ותהליכים שבהם Cloud de Confiance משתמשת כדי ליצור את התמונות הציבוריות.

כדי להשלים את המדריך הזה, תצטרכו:

  • קובץ ISO שמכיל את מדיום ההתקנה של Windows או Windows Server.
  • אם רוצים, אפשר להוסיף חבילת עדכון אחת או יותר של Windows (בפורמט .msu) להחלה על התמונה.

לפני שמתחילים

  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Cloud de Confiance by S3NS . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:

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

    המסוף

    כשמשתמשים במסוף Cloud de Confiance כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Cloud de Confiance by S3NS

    gcloud

    1. התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

      gcloud init
  • הגדרת אזור ותחום כברירת מחדל

הסבר על תהליך build

כדי להתקין את Windows מאפס, אחת הגישות הנפוצות היא אתחול של המחשב מקובץ DVD או ISO שמכיל את קובצי ההתקנה של Windows. בניגוד לחלק מההיפר-ויזורים המקומיים, ב-Compute Engine אי אפשר לבצע אתחול מקובץ ISO.

לכן, כדי להתקין את Windows מאפס, צריך לפעול בדרך אחרת, שכוללת את השלבים הבאים:

  1. יצירת דיסק חדש.
  2. חילוץ תמונת Windows (install.wim מאמצעי ההתקנה) לדיסק.
  3. הוספת מנהלי התקנים נדרשים, הגדרת Windows Setup כך שיפעל ללא השגחה והפיכת הדיסק לדיסק שאפשר לבצע ממנו אתחול.
  4. מבצעים אתחול מהדיסק החדש כדי להפעיל את תוכנית ההתקנה של Windows.
  5. התקנת תוכנה נוספת, כולל סוכן מערכת ההפעלה של האורח.
  6. יצירת תמונה מהדיסק.

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

daisy הוא כלי שורת פקודה בקוד פתוח שמאפשר להריץ תהליכי עבודה. תזרימי עבודה נכתבים כקובצי JSON ומכילים רצף של שלבים. כל שלב כזה מתאר פעולה ב-Compute Engine – למשל, יצירת דיסק או כיבוי של מכונה וירטואלית. לכן, תהליכי עבודה של Daisy מתאימים לאוטומציה של השלבים הנדרשים ליצירת תמונת Windows מאפס.

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

הכנת הפרויקט ליצירת תמונות

כדי למנוע מהכלי Daisy להפריע למכונות וירטואליות קיימות או לתשתית, צריך ליצור פרויקט ייעודי לבניית תמונות:

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. Enable the Compute Engine API, Cloud Build API, and Cloud Storage API APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

השלבים הבאים משתנים בהתאם למערכת ההפעלה שמותקנת במחשב המקומי: Windows או Linux:

Windows

  1. במחשב המקומי, פותחים חלון של Windows PowerShell.
  2. מפעילים משתנה:

    $PROJECT_ID = "PROJECT_ID"
    

    כאשר PROJECT_ID הוא מזהה הפרויקט של פרויקטCloud de Confiance שיצרתם בקטע הקודם.

  3. מאחלים עוד משתנה כך שיכיל את מספר הפרויקט:

    $PROJECT_NUMBER = gcloud projects describe $PROJECT_ID --format=value`(projectNumber`)
    

Linux

  1. במחשב המקומי, פותחים חלון טרמינל.
  2. מפעילים משתנה:

    PROJECT_ID=PROJECT_ID
    

    כאשר PROJECT_ID הוא מזהה הפרויקט של פרויקטCloud de Confiance שיצרתם בקטע הקודם.

  3. מאחלים עוד משתנה כך שיכיל את מספר הפרויקט:

    PROJECT_NUMBER=`gcloud projects describe $PROJECT_ID --format=value\(projectNumber\)`
    

העלאת קובצי התקנה

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

בשלבים הבאים, מחליפים את UNIQUE_SUFFIX ברצף קצר של תווים רנדומליים כדי ליצור שם ייחודי לקטגוריה. לדוגמה, משתמשים ב-PROJECT_ID-media-a7g19. הוספת סיומת אקראית לשם הקטגוריה עוזרת למנוע השתלטות על קטגוריות, נקודת חולשה שבה תוקף יכול להשיג שליטה בתהליך build שלכם על ידי תפיסת בעלות מראש על קטגוריה עם שם צפוי.

  1. במחשב המקומי, מורידים את חבילות ההתקנה הנדרשות:

  2. יוצרים קטגוריה חדשה של Cloud Storage לאחסון קובצי ההתקנה:

    gcloud storage buckets create gs://$PROJECT_ID-media-UNIQUE_SUFFIX --project=$PROJECT_ID
    
  3. מקצים ל-Cloud Build את התפקיד צפייה באובייקט אחסון כדי שהוא יוכל לקרוא את קובצי ההתקנה:

    gcloud storage buckets add-iam-policy-binding gs://$PROJECT_ID-media-UNIQUE_SUFFIX --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.s3ns-system.iam.gserviceaccount.com --role=roles/storage.objectViewer
    
  4. מעלים את חבילת ההתקנה של PowerShell:

    gcloud storage cp POWERSHELL_PACKAGE gs://$PROJECT_ID-media-UNIQUE_SUFFIX/PowerShell.msi
    

    POWERSHELL_PACKAGE הוא הנתיב לחבילת ההתקנה של PowerShell.

  5. מעלים את חבילת ההתקנה של ‎ .NET Framework:

    gcloud storage cp DOTNET_PACKAGE gs://$PROJECT_ID-media-UNIQUE_SUFFIX/dotnet-sdk.exe
    

    DOTNET_PACKAGE הוא הנתיב לחבילת ההתקנה של NET Framework.

  6. מעלים את חבילת ההתקנה של ה-CLI של gcloud:

    gcloud storage cp CLOUDSDK_PACKAGE gs://$PROJECT_ID-media-UNIQUE_SUFFIX/GoogleCloudSDKInstaller.exe
    

    CLOUDSDK_PACKAGE הוא הנתיב לחבילת ההתקנה של ה-CLI של gcloud.

  7. מעלים את קובץ ה-ISO שמכיל את מדיום ההתקנה של Windows:

    gcloud storage cp ISO gs://$PROJECT_ID-media-UNIQUE_SUFFIX/
    

    כאשר ISO הוא השם של קובץ ה-ISO.

  8. אפשר להעלות חבילות עדכון נוספות:

    gcloud storage cp UPDATE_DIR/*.msu gs://$PROJECT_ID-media-UNIQUE_SUFFIX/updates/
    

    כאשר UPDATE_DIR היא הספרייה שמכילה את חבילות העדכון.

עכשיו אפשר ליצור את התמונה המותאמת אישית.

יצירת התמונה

ביצוע תהליך העבודה daisy כדי ליצור קובץ אימג' בהתאמה אישית נמשך עד ארבע שעות. במקום להריץ את daisy באופן מקומי, יוצרים עכשיו תצורת build של Cloud Build כדי לאפשר ל-Cloud Build להריץ את תהליך העבודה ברקע.

  1. במחשב המקומי, משכפלים את מאגר Git שמכיל את תהליכי העבודה daisy ליצירת תמונות של Windows:

    git clone https://github.com/GoogleCloudPlatform/compute-image-tools.git
    
  2. עוברים לספרייה windows:

    cd compute-image-tools/daisy_workflows/image_build/windows/
    
  3. בספרייה windows, מוצאים מבחר של קבצים עם הסיומת .wf.json. הקבצים האלה מכילים הגדרות של תהליכי עבודה ב-Daisy לגרסאות נפוצות של Windows:

    גרסת Windows קובץ של תהליך עבודה
    ‫Windows Server Core 2022 (64 ביט) windows-server-2022-dc-core-uefi-byol.wf.json
    ‫Windows Server 2019 (64 ביט) windows-server-2019-dc-uefi-byol.wf.json
    ‫Windows Server Core 2019 (64-bit) windows-server-2019-dc-core-uefi-byol.wf.json
    ‫Windows Server 2016 (64 ביט) windows-server-2016-dc-uefi-byol.wf.json
    ‫Windows Server Core 2016 (64 ביט) windows-server-2016-dc-core-uefi-byol.wf.json
    ‫Windows 11 21H2 (64 ביט) windows-11-21h2-ent-x64-uefi.wf.json
    ‫Windows 11 22H2 (64 ביט) windows-11-22h2-ent-x64-uefi.wf.json
    ‫Windows 11 23H2 (64 ביט) windows-11-23h2-ent-x64-uefi.wf.json
    ‫Windows 10 21H2 (64 ביט) windows-10-21h2-ent-x64-uefi.wf.json
    ‫Windows 10 22H2 (64 ביט) windows-10-22h2-ent-x64-uefi.wf.json

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

    אם אתם לא בטוחים מה שם המהדורה הנכון, פותחים שורת פקודה של PowerShell עם הרשאות אדמין ומריצים את הפקודות הבאות כדי לראות רשימה של כל המהדורות שנתמכות על ידי מדיום ההתקנה:

    $IsoFile = "ISO"
    
    $Mount = Mount-DiskImage -ImagePath (Resolve-Path $IsoFile)
    
    $DriveLetter = ($Mount | Get-Volume).DriveLetter
    Get-WindowsImage -ImagePath "$($DriveLetter):\sources\install.wim" | select ImageName
    
    Dismount-DiskImage -InputObject $Mount | Out-Null
    

    מחליפים את הערך ב-ISO בנתיב המקומי לתמונת ה-ISO.

  4. בספרייה windows, יוצרים קובץ חדש בשם cloudbuild.yaml ומדביקים בו את הקוד הבא:

    timeout: 14400s  # 4 hour timeout for entire build
    steps:
    - name: 'gcr.io/compute-image-tools/daisy'
      timeout: 14400s  # 4 hour timeout for build step
      waitFor: ['-']
      args:
        - -project=$PROJECT_ID
        - -zone=us-central1-a
        - -var:updates=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/updates/
        - -var:pwsh=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/PowerShell.msi
        - -var:dotnet48=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/dotnet-sdk.exe
        - -var:cloudsdk=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/GoogleCloudSDKInstaller.exe
        - -var:media=gs://$PROJECT_ID-media-UNIQUE_SUFFIX/ISO
        - WORKFLOW
    

    מחליפים את:

    • ISO: השם של קובץ ה-ISO ב-Cloud Storage.
    • WORKFLOW: שם קובץ זרימת העבודה שמתאים לגרסת Windows שבה אתם משתמשים.
  5. שולחים את ה-build ל-Cloud Build:

    gcloud builds submit --project $PROJECT_ID --async
    

    התהליך יימשך עד ארבע שעות. אפשר לעקוב אחרי הסטטוס של הבנייה ב Cloud de Confiance מסוף בקטע Cloud Build > History.

    היסטוריית Cloud Build

שימוש בתמונה מותאמת אישית

אחרי שה-build מסתיים, אפשר למצוא את קובץ האימג' המותאם אישית של BYOL בCloud de Confiance מסוף בקטע Compute Engine > Images.

כדי להבדיל בין כמה גרסאות של אותה תמונה, תהליך הבנייה מטמיע חותמת זמן בשם התמונה, למשל windows-server-2019-dc-v1613488342. בנוסף, התהליך משייך את התמונה למשפחת תמונות בהתאמה אישית, לדוגמה windows-server-2019.

כדי ליצור מכונה וירטואלית שמשתמשת באימג' BYOL בהתאמה אישית, צריך להקצות את המכונה הווירטואלית בשרת לדייר יחיד (sole-tenant).

פתרון בעיות

אם אתם חושדים שתהליך build נכשל או לא מתקדם, תוכלו להשתמש בגישות הבאות כדי לאבחן את המצב:

  • מוודאים שהעליתם את חבילות ההתקנה ואת קובץ ה-ISO הנכונים.
  • מוודאים שבחרתם תהליך עבודה שמתאים לגרסת Windows של קובץ ה-ISO.
  • בודקים את יומן ה-build ב-Cloud Build ומחפשים הודעות שגיאה.
  • אם נראה שה-build נתקע, בודקים את הפלט של היציאה הטורית של המכונה הווירטואלית שנוצרה על ידי ה-build ומחפשים הודעות שגיאה.

המאמרים הבאים