Översikt över virtuella datorprogram

VM-program är en resurstyp i Azure Compute Gallery (tidigare kallat Delat bildgalleri) som förenklar hantering, delning och global distribution av program för dina virtuella datorer.

Du kan skapa en avbildning av en virtuell dator med förinstallerade appar, men du måste uppdatera avbildningen varje gång du har programändringar. Om du separerar programinstallationen från dina VM-avbildningar behöver du inte publicera en ny avbildning för varje rad med kodändringar.

Programpaket ger fördelar jämfört med andra distributions- och paketeringsmetoder:

  • VM-program har stöd för Azure-principer

  • Gruppering och versionshantering av dina paket

  • Virtuella datorprogram kan replikeras globalt för att ligga närmare din infrastruktur, så du behöver inte använda AzCopy eller andra mekanismer för lagringskopiering för att kopiera bitarna i Azure-regioner.

  • Dela med andra användare via Rollbaserad åtkomstkontroll i Azure (RBAC)

  • Stöd för virtuella datorer och både flexibla och enhetliga skalningsuppsättningar

  • Om du har regler för nätverkssäkerhetsgrupp (NSG) som tillämpas på den virtuella datorn eller skalningsuppsättningen kanske det inte går att ladda ned paketen från en Internetlagringsplats. Och med lagringskonton skulle nedladdning av paket till låsta virtuella datorer kräva att privata länkar konfigureras.

  • Stöd för blockblobar: Med den här funktionen kan du hantera stora filer effektivt genom att dela upp dem i mindre, hanterbara block. Perfekt för att ladda upp stora mängder data, direktuppspelning och bakgrundsuppladdning.

Vad är vm-apppaket?

Programpaketen för virtuella datorer använder flera resurstyper:

Resurs Beskrivning
Azure-beräkningsgalleri Ett galleri är en lagringsplats för hantering och delning av programpaket. Användare kan dela galleriresursen och alla underordnade resurser delas automatiskt. Gallerinamnet måste vara unikt per prenumeration. Du kan till exempel ha ett galleri för att lagra alla os-avbildningar och ett annat galleri för att lagra alla dina vm-program.
VM-program Definitionen av ditt VM-program. Det är en logisk resurs som lagrar vanliga metadata för alla versioner under den. Du kan till exempel ha en programdefinition för Apache Tomcat och ha flera versioner i den.
Version av VM-program Den distribuerbara resursen. Du kan globalt replikera dina vm-programversioner till målregioner närmare den virtuella datorns infrastruktur. Den virtuella datorns programversion måste replikeras till en region innan den kan distribueras på en virtuell dator i den regionen.

Begränsningar

  • Högst 3 repliker per region: När du skapar en version av ett virtuellt datorprogram är det maximala antalet repliker per region tre.

  • Lagring med offentlig åtkomst eller SAS-URI med läsbehörighet: Lagringskontot måste ha åtkomst på offentlig nivå eller använda en SAS-URI med läsbehörighet, eftersom andra begränsningsnivåer misslyckas med distributioner.

  • Försök igen misslyckade installationer: För närvarande är det enda sättet att försöka göra en misslyckad installation igen att ta bort programmet från profilen och sedan lägga till det igen.

  • Endast 25 program per virtuell dator: Högst 25 program får distribueras till en virtuell dator när som helst.

  • 2 GB programstorlek: Den maximala filstorleken för en programversion är 2 GB.

  • Inga garantier för omstarter i skriptet: Om skriptet kräver en omstart är rekommendationen att placera programmet sist under distributionen. Koden försöker hantera omstarter, men den kan misslyckas.

  • Kräver en VM-agent: VM-agenten måste finnas på den virtuella datorn och kunna ta emot måltillstånd.

  • Flera versioner av samma program på samma virtuella dator: Du kan inte ha flera versioner av samma program på en virtuell dator.

  • Flyttåtgärder stöds för närvarande inte: Flytt av virtuella datorer med VM-appar till andra resursgrupper stöds inte just nu.

Kommentar

För Azure Compute-galleri- och VM-program kan SAS för lagring tas bort efter replikering.

Kostnad

Det kostar inget extra för att använda programpaket för virtuella datorer, men du debiteras för följande resurser:

  • Lagringskostnader för lagring av varje paket och eventuella repliker.
  • Avgifter för utgående nätverk för replikering av den första avbildningsversionen från källregionen till de replikerade regionerna. Efterföljande repliker hanteras i regionen, så det finns inga extra avgifter.

Mer information om nätverksutgående information finns i Bandbreddspriser.

VM-program

Vm-programresursen definierar följande om ditt VM-program:

  • Azure Compute-galleri där det virtuella datorprogrammet lagras
  • Namnet på programmet
  • Operativsystemtyp som stöds som Linux eller Windows
  • En beskrivning av det virtuella datorprogrammet

Programversioner för virtuella datorer

Vm-programversioner är den distributionsbara resursen. Versioner definieras med följande egenskaper:

  • Versionsnummer
  • Länka till programpaketfilen i ett lagringskonto
  • Installera sträng för att installera programmet
  • Ta bort sträng för att visa hur du tar bort appen korrekt
  • Paketfilnamn som ska användas när det laddas ned till den virtuella datorn
  • Konfigurationsfilnamn som ska användas för att konfigurera appen på den virtuella datorn
  • En länk till konfigurationsfilen för det virtuella datorprogrammet, som du kan inkludera licensfiler
  • Uppdatera strängen för hur du uppdaterar det virtuella datorprogrammet till en nyare version
  • Slutdatum. Slutdatum är informationsbaserade. du kan fortfarande distribuera vm-programversioner efter slutdatumet.
  • Exkludera från senaste. Du kan förhindra att en version används som den senaste versionen av programmet.
  • Målregioner för replikering
  • Antal repliker per region

Ladda ned katalog

Nedladdningsplatsen för programpaketet och konfigurationsfilerna är:

  • Linux: /var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<appname>/<app version>
  • Windows: C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<appname>\<app version>

Kommandona install/update/remove ska skrivas förutsatt att programpaketet och konfigurationsfilen finns i den aktuella katalogen.

Filnamngivning

När programfilen laddas ned till den virtuella datorn byter den namn till "MyVmApp" (inget tillägg). Det beror på att den virtuella datorn inte känner till paketets ursprungliga namn eller tillägg. Den använder det enda namn som det har, vilket är själva programnamnet – "MyVmApp".

Här är några alternativ för att navigera i det här problemet:

Du kan ändra skriptet så att det innehåller ett kommando för att byta namn på filen före körning:

move .\\MyVmApp .\\MyApp.exe & MyApp.exe /S

Du kan också använda packageFileName egenskapen (och motsvarande configFileName) för att instruera oss vad vi ska byta namn på filen. Om du till exempel ställer in det på "MyApp.exe" behöver installationsskriptet bara vara:

MyAppe.exe /S

Dricks

Om din blob ursprungligen hette "myApp.exe" i stället för "myapp" skulle skriptet ovan ha fungerat utan att packageFileName ange egenskapen.

Kommandotolk

Standardkommandotolkarna är:

  • Linux: /bin/bash
  • Windows: cmd.exe

Det är möjligt att använda en annan tolk som Chocolatey eller PowerShell, så länge den är installerad på datorn, genom att anropa den körbara filen och skicka kommandot till den. Om du till exempel vill att kommandot ska köras i PowerShell i Windows i stället för cmd kan du skicka powershell.exe -Command '<powershell commmand>'

Så här hanteras uppdateringar

När du uppdaterar en programversion på en virtuell dator eller vm-skalningsuppsättningar används uppdateringskommandot som du angav under distributionen. Om den uppdaterade versionen inte har något uppdateringskommando tas den aktuella versionen bort och den nya versionen installeras.

Uppdateringskommandon bör skrivas med förväntningen att det kan uppdateras från en äldre version av det virtuella datorprogrammet.

Tips för att skapa VM-program i Linux

Program från tredje part för Linux kan paketeras på några olika sätt. Nu ska vi utforska hur du hanterar skapandet av installationskommandon för några av de vanligaste.

.tar- och .gz-filer

Dessa filer är komprimerade arkiv och kan extraheras till en önskad plats. Kontrollera installationsanvisningarna för det ursprungliga paketet om de behöver extraheras till en specifik plats. Om .tar.gz-filen innehåller källkod läser du instruktionerna för paketet för hur du installerar från källan.

Exempel för att installera kommandot som ska installeras golang på en Linux-dator:

sudo tar -C /usr/local -xzf go_linux

Exempel på borttagningskommando:

sudo rm -rf /usr/local/go

Skapa programpaket med hjälp av .deb, .rpmoch andra plattformsspecifika paket för virtuella datorer med begränsad Internetåtkomst

Du kan ladda ned enskilda paket för plattformsspecifika pakethanterare, men de innehåller vanligtvis inte alla beroenden. För dessa filer måste du även inkludera alla beroenden i programpaketet, eller låta systempakethanteraren ladda ned beroendena via de lagringsplatser som är tillgängliga för den virtuella datorn. Om du arbetar med en virtuell dator med begränsad Internetåtkomst måste du paketera alla beroenden själv.

Att räkna ut beroendena kan vara lite knepigt. Det finns verktyg från tredje part som kan visa hela beroendeträdet.

I Ubuntu kan du köra sudo apt show <package_name> | grep Depends för att visa alla paket som är installerade när kommandot körs sudo apt-get install <packge_name> . Sedan kan du använda dessa utdata för att ladda ned alla .deb filer för att skapa ett arkiv som kan användas som programpaket.

  1. Om du till exempel vill skapa ett vm-programpaket för att installera PowerShell för Ubuntu kör du först följande kommandon för att aktivera lagringsplatsen där PowerShell kan laddas ned från och även för att identifiera paketberoendena på en ny virtuell Ubuntu-dator.
# Download the Microsoft repository GPG keys
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
sudo rm -rf packages-microsoft-prod.deb
sudo apt update
sudo apt show powershell | grep Depends
  1. Kontrollera utdata för raden Beroenden som visar följande paket:
Depends: libc6, libgcc1, libgssapi-krb5-2, libstdc++6, zlib1g, libicu72|libicu71|libicu70|libicu69|libicu68|libicu67|libicu66|libicu65|libicu63|libicu60|libicu57|libicu55|libicu52, libssl3|libssl1.1|libssl1.0.2|libssl1.
  1. Ladda ned var och en av dessa filer med och sudo apt-get download <package_name> skapa ett tjärkomprimerat arkiv med alla filer.
  • Ubuntu 18.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download libgcc1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu60
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  • Ubuntu 20.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download libgcc1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl1.1
sudo apt-get download libicu66
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  • Ubuntu 22.04:
mkdir /tmp/powershell
cd /tmp/powershell
sudo apt-get download libc6
sudo apt-get download libgcc1
sudo apt-get download libgssapi-krb5-2
sudo apt-get download libstdc++6
sudo apt-get download zlib1g
sudo apt-get download libssl3
sudo apt-get download libicu70
sudo apt-get download powershell
sudo tar -cvzf powershell.tar.gz *.deb
  1. Det här tar-arkivet är programpaketfilen.
  • Installationskommandot i det här fallet är:
sudo tar -xvzf powershell.tar.gz && sudo dpkg -i *.deb
  • Och kommandot remove är:
sudo apt remove powershell

Använd sudo apt autoremove i stället för att uttryckligen försöka ta bort alla beroenden. Du kan ha installerat andra program med överlappande beroenden, och i så fall skulle ett explicit borttagningskommando misslyckas.

Om du inte vill lösa beroendena själv och apt kan ansluta till lagringsplatserna kan du installera ett program med bara en .deb fil och låta apt hantera beroendena.

Exempel på installationskommando:

dpkg -i <package_name> || apt --fix-broken install -y

Tips för att skapa VM-program i Windows

De flesta program från tredje part i Windows är tillgängliga som .exe- eller .msi-installationsprogram. Vissa är också tillgängliga som extrahering och körning av zip-filer. Låt oss titta på metodtipsen för var och en av dem.

.exe installer

Körbara installationsprogram startar vanligtvis ett användargränssnitt (UI) och kräver att någon väljer via användargränssnittet. Om installationsprogrammet stöder en parameter för tyst läge bör den ingå i installationssträngen.

Cmd.exe förväntar sig också att körbara filer har tillägget .exe, så du måste byta namn på filen för att ha .exe tillägget.

Om jag vill skapa ett VM-programpaket för myApp.exe, som levereras som en körbar fil, kallas mitt vm-program "myApp", så jag skriver kommandot förutsatt att programpaketet finns i den aktuella katalogen:

"move .\\myApp .\\myApp.exe & myApp.exe /S -config myApp_config"

Om den körbara installationsfilen inte stöder en avinstallationsparameter kan du ibland leta upp registret på en testdator för att veta här att avinstallationen finns.

I registret lagras avinstallationssträngen i Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\<installed application name>\UninstallString så jag skulle använda innehållet som mitt borttagningskommando:

'\"C:\\Program Files\\myApp\\uninstall\\helper.exe\" /S'

.msi installer

För kommandoradskörning av .msi installationsprogram bör kommandona för att installera eller ta bort ett program använda msiexec. msiexec Körs vanligtvis som en egen separat process och cmd väntar inte på att den ska slutföras, vilket kan leda till problem när du installerar fler än ett VM-program. Kommandot start kan användas med msiexec för att säkerställa att installationen slutförs innan kommandot returneras. Till exempel:

start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log

Exempel på borttagningskommando:

start /wait %windir%\\system32\\msiexec.exe /x $appname /quiet /forcerestart /log ${appname}_uninstall.log

Zippade filer

För .zip- eller andra zippade filer byter du namn på och packar upp innehållet i programpaketet till önskat mål.

Exempel på installationskommando:

rename myapp myapp.zip && mkdir C:\myapp && powershell.exe -Command "Expand-Archive -path myapp.zip -destinationpath C:\myapp"

Exempel på borttagningskommando:

rmdir /S /Q C:\\myapp

Behandla fel som distributionsfel

Programtillägget för den virtuella datorn returnerar alltid ett lyckat resultat oavsett om någon vm-app misslyckades när den installerades/uppdaterades/togs bort. Programtillägget för den virtuella datorn rapporterar endast tilläggsstatusen som ett fel när det uppstår ett problem med tillägget eller den underliggande infrastrukturen. Det här beteendet utlöses av flaggan "behandla fel som distributionsfel", som är inställd $false på som standard och kan ändras till $true. Felflaggan kan konfigureras i PowerShell eller CLI.

Felsöka VM-program

Om du vill veta om ett visst virtuellt datorprogram har lagts till i den virtuella datorinstansen kontrollerar du meddelandet om vm-programtillägget.

Mer information om hur du hämtar status för VM-tillägg finns i Tillägg för virtuella datorer och funktioner för Linux - och Virtual Machine-tillägg och -funktioner för Windows.

Om du vill hämta status för VM-tillägg använder du Get-AzVM:

Get-AzVM -name <VM name> -ResourceGroupName <resource group name> -Status | convertto-json -Depth 10

Om du vill hämta status för skalningsuppsättningstillägg använder du Get-AzVMSS:

$result = Get-AzVmssVM -ResourceGroupName $rgName -VMScaleSetName $vmssName -InstanceView
$resultSummary  = New-Object System.Collections.ArrayList
$result | ForEach-Object {
    $res = @{ instanceId = $_.InstanceId; vmappStatus = $_.InstanceView.Extensions | Where-Object {$_.Name -eq "VMAppExtension"}}
    $resultSummary.Add($res) | Out-Null
}
$resultSummary | convertto-json -depth 5

Felmeddelanden

Meddelande Description
Den aktuella versionen av den virtuella datorns program {name} var inaktuell vid {date}. Du försökte distribuera en version av vm-programmet som redan har föråldrats. Prova att använda latest i stället för att ange en specifik version.
Den aktuella versionen av vm-programmet {name} stöder operativsystemet {OS}, medan den aktuella OSDisk-operativsystemet är {OS}. Du försökte distribuera ett Linux-program till Windows-instansen eller tvärtom.
Det maximala antalet virtuella datorprogram (max=5, current={count}) har överskridits. Använd färre program och försök igen. För närvarande stöder vi bara fem VM-program per virtuell dator eller skalningsuppsättning.
Mer än ett VM-program har angetts med samma packageReferenceId. Samma program har angetts mer än en gång.
Prenumerationen har inte behörighet att komma åt den här avbildningen. Prenumerationen har inte åtkomst till den här programversionen.
Lagringskontot i argumenten finns inte. Det finns inga program för den här prenumerationen.
Plattformsbilden {image} är inte tillgänglig. Kontrollera att alla fält i lagringsprofilen är korrekta. Mer information om lagringsprofilinformation finns i https://aka.ms/storageprofile. Programmet finns inte.
Galleribilden {image} är inte tillgänglig i regionen {region}. Kontakta bildägaren för att replikera till den här regionen eller ändra den begärda regionen. Galleriprogramversionen finns, men den replikerades inte till den här regionen.
SAS är inte giltigt för käll-uri {uri}. Ett Forbidden fel togs emot från lagringen när information om URL:en skulle hämtas (antingen mediaLink eller defaultConfigurationLink).
Blobben som refereras av käll-URI {uri} finns inte. Bloben som tillhandahålls för egenskaperna mediaLink eller defaultConfigurationLink finns inte.
Det går inte att komma åt url:en {url} för galleriprogrammets version på grund av följande fel: fjärrnamnet hittades inte. Kontrollera att blobben finns och att den antingen är offentligt tillgänglig eller att den är en SAS-URL med läsbehörighet. Det mest sannolika fallet är att en SAS-uri med läsbehörighet inte angavs.
Det går inte att komma åt url:en {url} för galleriprogrammet på grund av följande fel: {felbeskrivning}. Kontrollera att blobben finns och att den antingen är offentligt tillgänglig eller att den är en SAS-URL med läsbehörighet. Det uppstod ett problem med den angivna lagringsbloben. Felbeskrivningen innehåller mer information.
Åtgärden {operationName} är inte tillåten i {application} eftersom den har markerats för borttagning. Du kan bara försöka ta bort åtgärden igen (eller vänta tills en pågående åtgärd har slutförts). Försök att uppdatera ett program som för närvarande tas bort.
Värdet {value} för parametern "galleryApplicationVersion.properties.publishingProfile.replicaCount" ligger inte inom intervallet. Värdet måste vara mellan ett och tre, inklusive. Endast mellan en och tre repliker tillåts för vm-programversioner.
Det går inte att ändra egenskapen "galleryApplicationVersion.properties.publishingProfile.manageActions.install". (eller uppdatera, ta bort) Det går inte att ändra någon av hanteringsåtgärderna på en befintlig VmApplication. En ny VmApplication-version måste skapas.
Det går inte att ändra egenskapens galleriApplicationVersion.properties.publishingProfile.settings.packageFileName. (eller configFileName) Det går inte att ändra någon av inställningarna, till exempel paketfilnamnet eller konfigurationsfilens namn. En ny VmApplication-version måste skapas.
Den blob som refereras av käll-URI {uri} är för stor: storlek = {size}. Den maximala tillåtna blobstorleken är "1 GB". Den maximala storleken för en blob som refereras till av mediaLink eller defaultConfigurationLink är för närvarande 1 GB.
Blobben som refereras av käll-URI {uri} är tom. En tom blob refererades till.
Blobtypen {type} stöds inte för {operation}-åtgärden. Endast sidblobar och blockblobar stöds. VmApplications stöder endast sidblobbar och blockblobar.
SAS är inte giltigt för käll-uri {uri}. SAS-uri som tillhandahålls för mediaLink eller defaultConfigurationLink är inte en giltig SAS-URI.
Det går inte att ange {region} i målregioner eftersom prenumerationen saknar den nödvändiga funktionen {featureName}. Registrera din prenumeration med den nödvändiga funktionen eller ta bort regionen från målregionlistan. Om du vill använda VmApplications i vissa begränsade regioner måste du ha funktionsflaggan registrerad för den prenumerationen.
Publiceringsprofilregionerna {regions} för galleribilder måste innehålla platsen för avbildningsversionen {location}. Listan över regioner för replikering måste innehålla den plats där programversionen finns.
Duplicerade regioner tillåts inte i målpubliceringsregioner. Publiceringsregionerna kanske inte har dubbletter.
Galleriprogramversionsresurser stöder för närvarande inte kryptering. Krypteringsegenskapen för målregioner stöds inte för VM-program
Entitetsnamnet matchar inte namnet i begärande-URL:en. Den galleriprogramversion som anges i begärande-URL:en matchar inte den som anges i begärandetexten.
Namnet på galleriprogrammets version är ogiltigt. Namnet på programversionen bör följa Major(int32). Minor(int32). Patch(int32)-format, där int är mellan 0 och 2 147 483 647 (inklusive). till exempel 1.0.0, 2018.12.1 osv. Galleriprogramversionen måste följa det angivna formatet.

Nästa steg

  • Lär dig hur du skapar och distribuerar programpaket för virtuella datorer.