Ö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 ovanstående skript 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 fil innehåller källkod kan du läsa anvisningarna 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
, .rpm
och 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.
- 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
- Kontrollera utdata för raden Beroenden som visar följande paket:
Depends: libc6, lib32gcc-s1, 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.
- 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 lib32gcc-s1
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 lib32gcc-s1
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 lib32gcc-s1
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
- 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 installationsprogrammet
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 få .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 installationsfilen inte stöder en avinstallationsparameter kan du ibland leta upp registret på en testdator för att veta var 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 installationsprogrammet
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
start
Normalt anropas kommandot i ett batchskript. Om det används med parametern /wait
pausas det anropande skriptet tills den anropade processen avslutas. När det är klart skulle batchskriptet söka efter variabeln errorlevel
som angetts av start
kommandot och avsluta på följande sätt:
start /wait %windir%\\system32\\msiexec.exe /i myapp /quiet /forcerestart /log myapp_install.log
if %errorlevel% neq 0 exit /b %errorlevel%
...
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 | beskrivning |
---|---|
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.