Blog de Florent Appointaire

Blog sur les technologies Microsoft (Windows Server, System Center, Azure, Windows Azure Pack/Azure Stack, etc;)
    • 17/10/2016

    [SCVMM 2016] Erreur RunLaunchScreen (288) à l'installation

    Au moment d'installer SCVMM 2016 en ligne de commande sur un Windows Server 2016 Server Core, j'ai obtenu l'erreur suivante:

    RunLaunchScreen (288)

    Dans les logs de SCVMM, rien de bien précis:

    En effet, quand vous exécutez l'installation en ligne de commande, les réponses aux arguments ne doivent pas contenir les guillemets.

    Or, dans mon mot de passe j'avais un caractère spécial, le "&". J'ai donc changé le "&" par un "!" et l'installation a commencé :)

    • 11/10/2016

    [SQL Server] Installer SQL Server 2016 sur Windows Server Server Core

    Ayant un petit serveur chez moi, j’essaye de gagner un maximum de place que ce soit au niveau du stockage mais aussi au niveau de la mémoire, en installant un maximum de VM en Server Core. A noter que c’est aussi très bien pour la sécurité/patch management.

    C’est pourquoi, après avoir installé mon Hyper-V et mon Controleur de domaine en Server Core, sous Windows Server 2016, je me suis attaqué à la partie SQL.

    Pour commencer, j’ai installé la VM et j’ai ajouté un deuxième volume, pour les bases de données/logs/TempDB.

    Utilisez la commande Get-Disk pour voir votre 2ème disque ainsi que son numéro, qui sera utile pour le formatage :

    Pour le formater et le monter, j’ai utilisé la commande suivante :

    Get-Disk -Number 1 | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -UseMaximumSize -DriveLetter S | Format-Volume -FileSystem NTFS -NewFileSystemLabel "SQL_Data" -AllocationUnitSize 65536 -Confirm:$false

    Je peux maintenant voir mon volume SQL_Data :

    Nous pouvons maintenant lancer l’installation de SQL Server, en ligne de commande. Cette commande est à adapter suivant vos besoins. A noter que j’utiliserai ce serveur SQL pour mon environnement System Center, c’est pourquoi, installant mes produits en anglais, j’utilise la collation SQL_Latin1_General_CP1_CI_AS:

    .\Setup.exe /QS /ACTION=Install /FEATURES=SQL /INSTANCENAME=SC /SQLSVCACCOUNT=FLORENTAPPOINTA\svc-sqldb /SQLSVCPASSWORD="P@ssword!123" /AGTSVCACCOUNT=FLORENTAPPOINTA\svc-sqlagent /AGTSVCPASSWORD="P@ssword!123" /RSSVCACCOUNT=FLORENTAPPOINTA\svc-sqlreporting /RSSVCPASSWORD="P@ssword!123" /SQLSYSADMINACCOUNTS=FLORENTAPPOINTA\SQLAdmins /TCPENABLED=1 /IACCEPTSQLSERVERLICENSETERMS=1 /UPDATEENABLED=True /SECURITYMODE=SQL /SAPWD="P@ssword!123" /SQLTEMPDBDIR="S:\TempDB\" /SQLUSERDBDIR="S:\Data\" /SQLUSERDBLOGDIR="S:\Logs\" /SQLBACKUPDIR="S:\Backup\" /SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"

    J’ai pu remarquer que la partie Reporting Server ne peut pas être installée sur un Server Core. L’installation s’est déroulée bien plus rapidement que sur un serveur avec GUI :)

    Depuis mon laptop, j’ai accédé au fichier ERRORLOG de log SQL Server, pour voir le port qui est utilisé par SQL Server pour l’ouvrir dans le firewall :

    \\FLOAPP-SQL01.domain.local\C$\Program Files\Microsoft SQL Server\MSSQL13.SC\MSSQL\Log

    Pour ma part, j’ai ouvert le port, via une GPO et j’ai fait un gpupdate /force. J’ai testé la connexion depuis mon laptop, où j’ai installé SQL Server Management Studio :

    Bon courage.

    • 6/10/2016

    [Experiences] Retour sur la journée du 5 Octobre (Technique)

    Mercredi 5 Octobre 2016, je me suis rendu à Microsoft Experiences à Paris, au palais des congrès. Pour ma part, habitant à côté de Bruxelles, j'y suis allé en Thalys, départ 6h43:

    Après 1h15 de trajet, et 30 minutes de métro, me voila enfin arrivé au palais des congrès, où j'ai pu, par hasard, rencontré 2 anciens collègues de chez Sogeti à Toulouse, Jérôme et Laurent :)

      

    Il était temps d'aller en salle speaker, pour rencontrer l'ami Romain Serre :) et donc, d'immortaliser ce moment:

    C'était temps de tester une nième fois la démo, revoir une dernière fois les slides. Et de rencontrer d'autres personnes comme JS, Fabien Dibot, Pascal Saulière, Stanislas Quastana, Nico et j'en passe :) Après ça, petit tour dans les allées du salon pour voir où se situait le stand où j'allais parler:

    Etant donné que JS avait sa session assez tôt en début d'après-midi, nous sommes allez manger un petit steack/bière entre MVP/Potes. Retour au salon et c'était le moment du speach de JS:

    Ensuite, nous étions sur le stand Microsoft, pour aider les gens qui avaient des questions, et nous avons également pu voir une démonstration de différentes technologies Azure pour la supervision des moteurs Rolls Royce:

    Il était maintenant temps de rejoindre mon stand pour présenter ma session sur Azure/Azure Stack (https://experiences.microsoft.fr/Event/session/azure-azure-stack-un-script-pour-2-environnem/917b953c-f274-e611-80c3-000d3a2229a6) qui a été filmé (je mettrai le lien dès qu'il sera disponible):

    J'ai eu à peu près 25 personnes durant 20 minutes. La démo a fonctionné, parfait :)

    Il était temps de rejoindre Romain, Florent, etc. et d'aller boire une dernière bière avant de rentrer au pays :)

    Ce que je retiens de cette super journée:

    • Beaucoup de nouveaux visages rencontré
    • Revoir ses anciens collègues, c'est l'opportunité de ce genre de salon :)
    • Peu de sessions IT comparé au DEV :(
    • le NETWORKING

    Prochaine étape, le MVP Summit début Novembre avec l'ami Romain :)

    • 21/9/2016

    [OMS] Création d’une nouvelle solution pour IIS

    Je suis en train de découvrir OMS, et c’est pourquoi, aujourd’hui, je vais vous expliquer comment créer votre propre vue, pour IIS.

    Pour superviser les serveurs IIS, nous devons activer la collection des logs IIS. Allez dans Settings > Data > IIS Logs et cochez la case pour activer la collecte des logs IIS (1) et Sauvegardez (2):

    image

    Si vous souhaitez superviser le nombre de connexion en temps réel, allez dans Settings > Data > Windows Performance Counters. Ici, tapez Web Service(*)\Current Connections (1) puis cliquez sur le bouton ajouter (2) et enfin, sauvegardez (3):

    image

    Pour créer une vue personnalisée, vous devez activer une nouvelle fonctionnalité dans Settings > Preview Features > View Designer et activez cette dernière:

    image

    Retournez sur votre écran d’accueil. Vous devriez avoir une nouvelle solution, View Designer:

    image

    Ouvrez la pour créer une nouvelle solution. Choisissez le Tile Number puis, sur le panneau de droite, remplissez comme ceci:

    Nom Texte
    Name IIS Server Assessment Solution
    Legend Number of IIS Servers
    Query ObjectName="Web Service" | measure count() by Computer

    image

    Cette vignette indiquera le nombre de serveur IIS que vous avez dans votre infrastructure OMS. N’oubliez pas de sauvegarder de temps en temps, en cliquant sur Save, en haut à gauche.

    Cliquez maintenant sur View, à côté de Tile. J’ai ajouté une vue d’information, ceci n’est pas obligatoire:

    image

    Ajoutez ensuite une vue de type Number & list. Cette vue affichera la liste des serveurs IIS, avec leur nom. Remplissez comme suivant:

    Nom Texte
    Group Title IIS Servers
    Tile Legend List of IIS Servers
    Tile Query ObjectName="Web Service" | measure count() by Computer
    List Query ObjectName="Web Service" | measure count() by Computer

    image

    Ajoutez une nouvelle vue de type Line chart & list pour avoir le CPU utilisé en moyenne, sur chaque serveur qui a le rôle IIS installé. Complétez comme ceci:

    Nom Texte
    Group Title CPU usage for IIS Servers
    Header Title Average CPU used in %
    Line Chart Query Type=Perf CounterName="% Processor Time" InstanceName="_Total" Computer IN {ObjectName="Web Service" | measure count() by Computer}  | Measure Avg(CounterValue) as AvgCPUPercent by Computer interval 10minutes
    List Query Type=Perf CounterName="% Processor Time" InstanceName="_Total" Computer IN {ObjectName="Web Service" | measure count() by Computer}  | Measure avg(CounterValue)  by Computer
    Navigation query {selected item} Type=Perf CounterName="% Processor Time" InstanceName="_Total"

    image

    Ajoutez une nouvelle vue de type Line chart & list pour avoir la mémoire utilisé en moyenne, sur chaque serveur qui a le rôle IIS installé. Complétez comme ceci:

    Nom Texte
    Group Title Memory Usage for IIS Servers
    Header Title Average memory used  in %
    Line Chart Query Type=Perf ObjectName=Memory (CounterName="% Used Memory" OR CounterName="% Committed Bytes In Use") Computer IN { ObjectName="Web Service" | measure count() by Computer}|Measure Avg(CounterValue) as AvgUsedMemory by Computer interval 10minutes
    List Query Type=Perf ObjectName=Memory (CounterName="% Used Memory" OR CounterName="% Committed Bytes In Use") Computer IN { ObjectName="Web Service" | measure count() by Computer}|Measure avg(CounterValue) by Computer
    Navigation query {selected item} Type=Perf ObjectName=Memory (CounterName="% Used Memory" OR CounterName="% Committed Bytes In Use")

    image

    Ajoutez une nouvelle vue de type Line chart & list pour l’espace disque disponible en moyenne sur chaque disque, sur chaque serveur qui a le rôle IIS installé. Complétez comme ceci:

    Nom Texte
    Group Title IIS Free Space Drive
    Header Title Free space available in % in drives
    Line Chart Query Type=Perf (CounterName="% Free Space") Computer IN { ObjectName="Web Service" | measure count() by Computer}| Measure Avg(CounterValue) as FreeSpace by Computer interval 1minute
    List Query Type=Perf (CounterName="% Free Space") Computer IN { ObjectName="Web Service" | measure count() by Computer} | measure avg(CounterValue) by Computer
    Navigation query {selected item} Type=Perf (CounterName="% Free Space")

    image

    Si vous avez activé l’objet pour récupérer le nombre de connexion IIS simultané sur un serveur, alors ajoutez une nouvelle vue de type Line chart & list. Complétez comme ceci:

    Nom Texte
    Group Title IIS Connections
    Header Title Total IIS connections by server
    Line Chart Query Type=Perf CounterName="Current Connections" ObjectName="Web Service" InstanceName=_Total | measure avg(CounterValue) by Computer interval 1minute
    List Query Type=Perf CounterName="Current Connections" ObjectName="Web Service" InstanceName=_Total | measure avg(CounterValue) by Computer
    Navigation query {selected item} Type=Perf CounterName="Current Connections" InstanceName=_Total

    image

    Enfin, nous allons ajouter une dernière vue de type Donut & list pour avoir un aperçu des évenements de type W3CIISLog sur chaque serveur. Complétez comme ceci:

    Nom Texte
    Group Title IIS Logs
    Header Title IIS Logs generated
    Donut Query Type=W3CIISLog Computer IN {ObjectName="Web Service" | measure count() by Computer} | measure count() by Computer
    List Query Type=W3CIISLog Computer IN {ObjectName="Web Service" | measure count() by Computer} | measure count() by Computer
    Navigation query {selected item} Type=W3CIISLog

    image

    Sauvegardez avec le bouton Save en haut à gauche.

    Votre nouvelle vue est maintenant disponible et vous pouvez l’utiliser comme bon vous semble Smile

    image

    image

    Cette nouvelle fonctionnalité est très pratique, et d’après le uservoice de OMS, il sera bientôt possible de les exporter pour les sauvegarder/transférer vers d’autres workspace OMS Smile

    • 16/9/2016

    [OMS] Superviser les connexions qui ont échouées sur un serveur

    Pour le cadre d’une démonstration de OMS, j’ai eu comme idée, pour montrer la partie Alerte de OMS, d’envoyer un email lorsqu’un compte essaye de se connecter à un serveur alors qu’il n’a pas les authorisations ou que le compte n’existe pas.

    Ceci peut être fait en supervisant un évenement bien spécifique sur un serveur. Je vais donc activer cette fonctionnalité.

    Pour commencer, créez une nouvelle GPO:

    image

    Allez ensuite dans Computer Configuration > Policies > Windows Settings > Security Settings > Local Policies > Audit Policies. Ici, sélectionnez Audit account logon events:

    image

    Activez cette fonctionnalité, suivant si vous souhaitez audité les connexions qui ont fonctionné, échoué ou les 2:

    image

    Appliquez maintenant cette GPO sur le/les serveur(s) en question ou attendez que ce soit fait automatiquement (90 minutes par défaut):

    image

    Essayez ensuite de vous connecter sur un serveur avec un faux compte ou un compte qui n’a pas les droits. Vous devriez avoir un évenement de type Security en mode Audit Failure et avec l’ID 4625:

    image

    Allez maintenant sur OMS et faites une recherche dans les logs pour récupérer l’évenement 4625:

    Type=SecurityEvent EventID=4625

    Vous devriez avoir des résultats. Sinon attendez l’upload des logs qui se font rapidements. Cliquez en haut sur la cloche pour créer une alerte et remplissez comme ceci. Bien sur, adaptez avec vos valeurs Smile

    image

    Vous devriez recevoir un mail car 1 > 0.

    • 4/8/2016

    [Meetup] Découvrir les Windows Containers

    Le PowerShell User Group français m’a convié à faire une présentation concernant les Windows Containers.

    Ce dernier aura lieu le Mercredi 11 Janvier, de 19h à 21h, où vous pourrez suivre une session que je donnerai personnellement et ensuite, nous pourrons interagir autour d’un Q/A.

    Le lien pour s’enregistrer est disponible ici: http://www.meetup.com/fr-FR/FrenchPSUG/events/233089259/

    En espérant vous voir nombreux Sourire

    • 2/8/2016

    [WS2016] Débuter avec les Windows Containers

    Avec la future version de Windows Server, 2016, qui sortira durant l’Ignite (Fin Septembre), une nouvelle fonctionnalité va faire son apparition. Il s’agit de conteneurs Windows.

    Je vais dans ce tutoriel vous expliquer comment bien débuter avec ce nouveau rôle, sous Windows Server 2016 TP5.

    Pour commencer, il faut installer le module ContainerImage sur le serveur qui hébergera les conteneurs:

    Install-Module –Name ContainerImage

    image

    Vérifiez que le module est bien installé:

    Get-Module –ListAvailable

    image

    Vous devez maintenant installer le rôle Containers:

    Add-WindowsFeature Containers –Restart

    image

    Avec la commande Find-ContainerImage, vous allez avoir la liste des images disponibles comme base de vos conteneurs:

    image

    Pour installer une image, utilisez la commande suivante:

    Find-ContainerImage –Name NanoServer | Install-ContainerImage

    imageimage

    Find-ContainerImage –Name WindowsServerCore | Install-ContainerImage

    imageimage

    Vérifiez que les images sont installées correctement:

    Get-ContainerImage

    image

    On va maintenant créer le réseau, en mode NAT, pour que les conteneurs aient accès à Internet:

    New-ContainerNetwork –Name ‘ContainerNetwork’ –SubnetPrefix 192.168.0.0/24 –Mode NAT

    image

    Une règle Nat sera également créée, automatiquement:

    Get-NetNat

    image

    Nous allons maintenant créer un container, qui hébergera un site sur IIS. Utilisez les commandes suivante:

    $containerNameIIS = "IISCore"
    New-Container -Name $containerNameIIS -ContainerImageName WindowsServerCore -NetworkName "ContainerNetwork"
    Set-ContainerNetworkAdapter -ContainerName $containerNameIIS -NewName "$containerNameIIS-NetAdapter"
    $iisCore = Get-Container -Name $containerNameIIS
    $iisCore
    Add-ContainerNetworkAdapterStaticMapping -Container $iisCore -AdapterName "$containerNameIIS-NetAdapter" -ExternalPort 82 -InternalPort 80 -Protocol TCP
    Start-Container -Name $containerNameIIS

    image

    Ici, nous allons créer un nouveau conteneur, on va lui ajouter un port mapping pour pouvoir accéder au futur site IIS et enfin, on va démarrer ce conteneur. Nous allons maintenant installer le rôle IIS. Connectez-vous sur le conteneur et lancez l’installation:

    Enter-PSSession -ContainerName $containerNameIIS -RunAsAdministrator
    Install-WindowsFeature Web-Server
    Get-WindowsFeature Web-Server

    image

    Vous pouvez maintenant naviguer sur votre nouveau serveur Web:

    image

    Je vais maintenant faire une image de ce conteneur, pour avoir une base IIS. Pour commencer, arrêtez le conteneur; avec la commande Stop-Container -Name $containerNameIIS. Nous allons maintenant convertir ce conteneur pour en faire une image. Utilisez la commande suivante:

    $iisCore | New-ContainerImage -Publisher FlorentAppointaire -Name $containerNameIIS -Version 1.0
    Get-ContainerImage

    image

    Nous allons maintenant créer un conteneur par rapport à cette nouvelle image. Utilisez les commandes suivantes:

    $newIISContainer = "IIS01"
    New-Container –Name $newIISContainer –ContainerImageName $containerNameIIS -NetworkName “ContainerNetwork”
    Set-ContainerNetworkAdapter -ContainerName $newIISContainer -NewName "$newIISContainer-NetAda"
    $iisCore = Get-Container $newIISContainer
    Add-ContainerNetworkAdapterStaticMapping -Container $iisCore -AdapterName "$newIISContainer-NetAda" -ExternalPort 83 -InternalPort 80 -Protocol TCP
    Start-Container $newIISContainer

    image

    Je vais maintenant déployer un WebSite ASP.NET MVC personnalisé. J’ai créé ce site directement depuis visual studio 2015:

    image

    image

    Je l’ai ensuite personnalisé:

    image

    Sur le serveur qui contient le conteneur, j’ai créé un dossier de partage, que j’ai appelé Share et où j’ai copié les sources de mon site web que je viens de créer. J’ai ensuite créé un utilisateur local, que j’ai ajouté en tant qu’administrateur local du serveur. J’ai partagé ce dossier avec cet utilisateur:

    image

    image

    image

    image

    Je vais créer un nouveau conteneur pour cette application MVC, car il faut des features spécifiques. Utilisez les commandes suivante pour installer toutes les dépendances et pour convertir le conteneur en image:

    $containerNameIISMVC = "IISForMvc"
    New-Container –Name $containerNameIISMVC –ContainerImageName $containerNameIIS –NetworkName "ContainerNetwork"
    Start-Container –Name $containerNameIISMVC
    Enter-PSSession -ContainerName $containerNameIISMVC -RunAsAdministrator
    Install-WindowsFeature Web-Default-Doc
    Install-WindowsFeature Web-Dir-Browsing
    Install-WindowsFeature Web-Http-Errors
    Install-WindowsFeature Web-Static-Content
    Install-WindowsFeature Web-Http-Logging
    Install-WindowsFeature Web-Request-Monitor
    Install-WindowsFeature Web-Stat-Compression
    Install-WindowsFeature Web-Filtering
    Install-WindowsFeature Web-Windows-Auth
    Install-WindowsFeature Web-Net-Ext45
    Install-WindowsFeature Web-Asp-Net45
    Install-WindowsFeature Web-ISAPI-Ext
    Install-WindowsFeature Web-ISAPI-Filter
    Install-WindowsFeature Web-Metabase
    Exit
    Stop-Container –Name $containerNameIISMVC
    Get-Container –Name $containerNameIISMVC | New-ContainerImage –Publisher FlorentAppointaire –Name $containerNameIISMVC –Version 1.0
    Get-ContainterImage

    image

    La dernière étape consiste à créer un nouveau conteneur sur base de la dernière image, et de copier les sources de notre site dans ce conteneur:

    $containerName = "FlorentAppointaireMVC"
    New-Container –Name $containerName –ContainerImageName $containerNameIISMVC -NetworkName “ContainerNetwork”
    Set-ContainerNetworkAdapter -ContainerName $containerName -NewName "$containerName-NetAda"
    $iisCore = Get-Container $containerName
    Add-ContainerNetworkAdapterStaticMapping -Container $iisCore -AdapterName "$containerName-NetAda" -ExternalPort 8080 -InternalPort 80 -Protocol TCP
    Start-Container $containerName
    Enter-PSSession -ContainerName $containerName -RunAsAdministrator
    net use z: \\FLOAPP-CONT01\Share /user:FLOAPP-CONT01\Container Password!
    Remove-Item C:\inetpub\wwwroot\iisstart.htm
    Remove-Item C:\inetpub\wwwroot\iisstart.png
    Remove-Item C:\inetpub\wwwroot\aspnet_client
    Get-ChildItem -Path Z: | % { Copy-Item $_.fullname C:\inetpub\wwwroot -Recurse -Force}
    Exit

    image

    Et si je navigue sur le port 8080, j’ai ce résultat:

    image

    La version vidéo est disponible ici: https://channel9.msdn.com/Blogs/MVP-Cloud-DataCenter/Windows-Container-avec-Windows-Server-2016-TP5

    N’hésitez pas si vous avez des questions Sourire

    • 13/7/2016

    [Docker] Afficher un graphique de la température de votre maison via votre Nest

    Ayant récemment acquis un thermostat Nest, j’ai regardé si il était possible d’afficher, sous la forme de graphique, la tempréture de la maison sur une période. Je suis tombé sur ce répertoire GitHub: https://github.com/chriseng/nestgraph

    J’ai donc décidé d’adapter ceci pour un conteneur docker. Après quelques heures, je suis arrivé au résultat final:

    NestGraph

    Et mon conteneur Docker:

    image

    Pour déployer ce conteneur, c’est très simple, utilisez la commande suivante, en adaptant avec votre compte Nest:

    docker run -d -P -e ENV_NEST_USER='Your_nest_email_account' -e ENV_NEST_PASSWORD='Your_nest_password' --name nestgraph flodu31/nestgraph

    Vous pouvez le trouver sur:

    N’hésitez pas si vous avez des remarques/suggestions Sourire

    • 29/6/2016

    [Docker] Installation de DTR avec une PKI ADCS

    Après mon premier article sur l’utilisation d’UCP avec un certificat, nous allons voir comment faire de même avec DTR.

    Les prérequis sont simples, avoir un ordinateur pour générer le certificats, un serveur pour DTR qui est déjà joint comme simple nœud à l’UCP, le certificat root de la PKI et un peu de temps Sourire

    Pour commencer, depuis un ordinateur Windows qui est dans le même domaine que la CA, générez un nouveau certificat de type Web Server. Ajoutez lui les DNS correspondant aux futurs URL disponibles:

    image

    Cochez bien la case pour pouvoir exporter la clé privée:

    image

    Exportez ensuite le certificat avec sa clé privée:

    image

    image

    Pour transformer les certificats en PEM et séparer la clé privée de la clé publique, vous aurez besoin de openssl. Exécutez les commandes suivants:

    C:\OpenSSL-Win32\bin\openssl.exe pkcs12 -in "FLOAPP-DTR01.pfx" -nocerts -out "key.pem" –nodes

    C:\OpenSSL-Win32\bin\openssl.exe pkcs12 -in "FLOAPP-DTR01.pfx" -nokeys -out "cert.pem"

    image

    Et pour supprimer la passphrase du certificat qui contient la clé privée:

    C:\OpenSSL-Win32\bin\openssl.exe rsa -in "key.pem" -out "key.pem"

    image

    Allez ensuite sur votre site qui héberge DTR, https://votreip et allez dans Settings. Modifiez la partie Domain avec votre nouveau nom DNS, puis dans la partie TLS certificate, copiez la clé publique de votre certificat (cert.pem), ensuite dans TLS private key, la clé privée de votre certificat (key.pem) et enfin, dans TLS CA, la clé de votre CA, puis sauvegardez:

    image

    En allant sur https://votreurl vous devriez avoir votre nouveau certificat:

    image

    Il faut maintenant enregistrer votre serveur DTR dans l’UCP. Allez dans l’UCP, puis dans Settings > DTR. Renseignez l’URL vers votre DTR. Le certificat n’est pas nécessaire car l’UCP trust déjà le certificat:

    image

    Il faut maintenant truster la CA root que l’UCP a créé. Sur le serveur UCP, utilisez la commande suivante pour récupérer le certificat:

    sudo docker run --rm --name ucp -v /var/run/docker.sock:/var/run/docker.sock docker/ucp dump-certs --cluster –ca

    image

    Copiez ce certificat dans un fichier nommé ucp-cluster-ca.pem. Copiez le résultat dans le DTR, dans Settings > Domain > Auth Bypass TLS Root CA:

    image

    Il faut maintenant copier le certificat root qui se trouve dans l’interface DTR, Settings > Domain > TLS CA dans /etc/docker/certs.d/dtr.florentappointaire.cloud/ca.crt. Utilisez les commandes suivantes pour créer le chemin et remplir le fichier avec le certificat:

    mkdir -p /etc/docker/certs.d/dtr.florentappointaire.cloud/
    vi /etc/docker/certs.d/dtr.florentappointaire.cloud/ca.crt

    image

    Vous devez effectuer ceci sur chaque nœud de l’UCP. Je vais maintenant pousser une image docker, en l’occurrence celle-ci https://github.com/Flodu31/Floapp-Cloud , sur mon DTR. Pour faire ceci, j’ai créé un répertoire floapp-website:

    image
    Mon image docker est sur une VM qui n’a pas la CA root trustée. Avant de lancer l’upload, je vais devoir truster la CA sous peine d’avoir une erreur de certificat. Utilisez les commandes suivantes pour truster la CA:

    export DOMAIN_NAME=dtr.florentappointaire.cloud
    openssl s_client -connect $DOMAIN_NAME:443 -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM | tee /usr/local/share/ca-certificates/$DOMAIN_NAME.crt
    update-ca-certificates
    service docker restart

    image

    Je me suis ensuite connecté à mon répertoire, j’ai construis mon image à partir d’un Dockerfile, j’ai taggué l’image et je l’ai poussé:

    docker login dtr.florentappointaire.cloud
    docker build -t floapp-website .
    docker tag floapp-website:latest dtr.florentappointaire.cloud/fappointaire/floapp-website:latest
    docker push dtr.florentappointaire.cloud/fappointaire/floapp-website:latest

    image

    Si vous retournez sur l’interface de DTR, vous avez maintenant la dernière version disponible:

    image

    Vous pouvez maintenant récupérer l’image depuis un nœud UCP, avec la commande suivante ou via l’UCP:

    docker pull dtr.florentappointaire.cloud/fappointaire/floapp-website:latest

    image

    image

    La vue depuis l’UCP une fois l’envoie terminé:

    image

    Vous pouvez maintenant déployer un container depuis l’UCP ou via la ligne de commande:

    image

    image

    Après quelques secondes, le conteneur est déployé et vous pouvez y accéder via l’URL:

    image

    image

    En espérant que cet article vous sera utile Sourire

    • 28/6/2016

    [Docker] Installation d’UCP avec une PKI ADCS

    Voulant utiliser une PKI déjà existante pour mon interface UCP, et n’ayant rien trouvé sur internet si ce n’est le chapitre 4 de la documentation officielle, je vais vous expliquer comment faire ceci.

    Les prérequis sont bien sur d’avoir une PKI qui tourne avec AD CS dans mon cas, et ensuite d’avoir une VM qui accueillera l’interface UCP, et où docker-engine est déjà installé.

    Pour commencer, il faut installer la librairie openssl sur un ordinateur Windows: http://slproweb.com/download/Win32OpenSSL-1_0_2h.exe

    Ensuite, il faut générer le certificat pour notre contrôleur UCP. C’est un certificat de type Web Server. Ajoutez tous les DNS susceptibles d’être utilisés pour accéder à l’UCP:

    image

    N’oubliez pas, dans la partie Private Key, de cocher la case pour autoriser l’export de la clé privée:

    image

    Il faut maintenant télécharger votre certificat root et exporter le certificat que vous venez de générer avec la clé privée:

    image

    image

    Comme sur Linux nous pouvons utiliser que des certificats avec l’extension PEM, on va devoir convertir nos certificats. On va commencer avec le certificat root. Exécutez la commande suivante pour le convertir. Attention a bien nommer le nouveau certificat ca.pem:

    cd C:\OpenSSL-Win32\bin
    openssl.exe x509 -inform der -in "C:\Users\FlorentAppointaire\Downloads\RootCertificate.cer" -out "C:\Users\FlorentAppointaire\Desktop\ca.pem"

    image

    Maintenant nous allons extraire notre clé privée du certificat de base. Ce certificat sera découpé en 2 parties, cert.pem et key.pem:

    openssl.exe pkcs12 -in "C:\Users\FlorentAppointaire\Downloads\FLOAPP-UCP01.pfx" -out "C:\Users\FlorentAppointaire\Downloads\cert.pem" –nokeys

    openssl.exe pkcs12 -in "C:\Users\FlorentAppointaire\Downloads\FLOAPP-UCP01.pfx" -out "C:\Users\FlorentAppointaire\Downloads\key.pem"

    image

    Il faut maintenant supprimer la passphrase du certificat key.pem car docker ne supporte pas cette possibilité:

    openssl rsa -in "C:\Users\FlorentAppointaire\Downloads\key.pem" -out "C:\Users\FlorentAppointaire\Desktop\key.pem"

    image

    Maintenant que nous avons nos certificats, il faut les transférer sur les serveurs UCP:

    image

    Allez sur le premier serveur UCP et créez un nouveau volume Docker:

    sudo docker volume create --name ucp-controller-server-certs

    image

    Il faut récupérer le chemin de ce volume où nos certificats seront stockés. On va ensuite copier nos certificats dans ce répertoire:

    sudo docker volume inspect ucp-controller-server-certs
    sudo cp /tmp/* /var/lib/docker/volumes/ucp-controller-server-certs/_data/
    sudo ls -l /var/lib/docker/volumes/ucp-controller-server-certs/_data/

    image

    Une fois terminé, utilisez la commande suivante pour lancer l’installation de l’UCP. N’oubliez pas le paramètre –external-server-cert pour utiliser les certificats qui sont dans le volume que nous avons créé précédemment:

    sudo docker run --rm -it --name ucp -v /var/run/docker.sock:/var/run/docker.sock docker/ucp install -i --host-address 10.0.2.150 --external-server-cert

    image

    Si vous accédez à votre interface, vous devriez avec le certificat que vous avez créé est utilisé:

    image

    Bon courage Sourire

    • 27/6/2016

    [Ubuntu] Gérer vos serveurs SQL Server depuis Linux

    Après avoir vu comment joindre un serveur Ubuntu à un Active Directory nous allons voir comment installer les outils qui permettrons de gérer votre serveur SQL depuis ce dernier. La version que nous allons utiliser, la 13, est compatible avec Ubuntu. Vous pouvez utiliser ces drivers de SQL Server  2008 à 2016, ainsi qu’avec Azure SQL Database.

    Pour commencer, installez les prérequis qui seront nécessaires pour l’installation de sqlcmd sur Linux:

    sudo apt-get -y install libc6 libkrb5-3 libgss3 e2fsprogs openssl libssl-dev libssl1.0.0 libssl1.0.0-dbg make

    image

    Nous allons maintenant télécharger et installer les drivers ODBC Microsoft pour SQL Server pour Linux:

    wget https://download.microsoft.com/download/2/E/5/2E58F097-805C-4AB8-9FC6-71288AB4409D/msodbcsql-13.0.0.0.tar.gz
    sudo tar -xvzf msodbcsql-13.0.0.0.tar.gz

    image

    Déplacez vous ensuite dans le dossier que vous venez d’extraire. Vous devriez avoir un fichier qui se nomme build_dm.sh. Ce fichier va télécharger et compiler les drivers ODBC en version 12.3.1:

    cd msodbcsql-13.0.0.0/
    ls –l

    SNAGHTMLacc1c7c

    Exécutez le avec la commande suivante pour télécharger les drivers et effectuer la compilation. Répondez YES à la question pour accepter la licence:

    sudo ./build_dm.sh

    image

    Comme c’est indiqué, pour terminer l’installation, vous devez exécutez la commande cd /tmp/unixODBC.21454.32315.4074/unixODBC-2.3.1; make install:

    image

    Il faut être root pour effectuer ceci. Je vais donc passer root avec la commande sudo –i:

    image

    Et lancer la commande indiquée:

    cd /tmp/unixODBC.21454.32315.4074/unixODBC-2.3.1; make install

    image

    Par défaut, les librairies sont installées dans /usr/lib64. Sortez du root avec la commande exit.

    Nous allons maintenant lancer l’installation des drivers ODBC pour SQL Server. Exécutez la commande suivante pour sauvegarder le fichier odbcinst.ini:

    ODBCINSTINI=$(odbc_config --odbcinstini)
    sudo cp ${ODBCINSTINI} ${ODBCINSTINI}.bck

    image

    Avant de lancer l’installation, on va effectuer une vérification pour voir que tous les prérequis soient bien présents:

    ./install.sh verify

    image

    Tout est correct, on va donc pouvoir lancer l’installation avec la commande suivante:

    sudo ./install.sh install --accept-license

    image

    Avant de pouvoir utiliser l’outil sqlcmd, il nous reste une dernière vérification à effectuer. Exécutez la commande suivante:

    cat /etc/ld.so.conf

    image

    Si, comme dans mon cas, vous ne voyez pas /usr/lib64, alors il faut le rajouter:

    sudo vim /etc/ld.so.conf

    image

    Exécutez la commande suivante pour recharger le fichier de configuration que nous venons de modifier:

    sudo ldconfig

    image

    Vous pouvez vérifier que l’installation est complète avec la commande suivante:

    odbcinst -q -d -n "ODBC Driver 13 for SQL Server"

    image

    Vous pouvez vous connecter à votre serveur SQL pour effectuer des requêtes, avec la commande suivante:

    sqlcmd –S sqlserver.fqdn.local|instancename -Q "SELECT name FROM sys.databases" -U sa

    image

    Pour ma part, j’ai un souci d’authentification avec mon compte Active Directory, en utilisant une authentification Windows:

    image

    Alors que sur le server SQL, pas de problème:

    image

    Je mettrai à jour ce poste quand j’aurai trouvé le problème.

    Amusez-vous bien Sourire

    • 23/6/2016

    [Ubuntu] Joindre un serveur au domaine

    Aujourd’hui nous allons voir comment joindre un serveur Ubuntu (dans mon cas en version 16.04) à un domaine Active Directory. Ceci peut-être utile dans le cas où vous souhaitez que les administrateurs utilisent leur compte de domaine pour se connecter aux machines, etc.

    Pour commencer, connectez vous sur votre serveur et exécutez la commande suivante pour installer les paquets qui permettront de rejoindre le domaine:

    sudo apt-get -y install ntp vim ntpdate winbind samba libnss-winbind libpam-winbind krb5-config krb5-locales krb5-user

    image_thumb1

    Une nouvelle page va s’afficher pour vous demander le nom de votre domaine, renseignez le:

    image_thumb3

    Il faut maintenant régler la date et l’heure pour qu’elle corresponde à l’heure de votre contrôleur de domaine. Editez le fichier ntp.conf et renseignez le nom ou l’ip de votre contrôleur de domaine:

    sudo vim /etc/ntp.conf

    image_thumb5

    Redémarrez le service:

    sudo service ntp restart

    Vous pouvez afficher la date/heure avec la commande date:

    image_thumb6

    Nous allons maintenant configurer la partie Kerberos. Etant donné que la configuration sera nouvelle, nous allons supprimer tous ce qu’il y a dedans et insérer notre configuration. Exécutez les commandes suivantes:

    sudo truncate -s0 /etc/krb5.conf
    sudo vim /etc/krb5.conf

    Adaptez la configuration avec vos valeurs:

    [libdefaults]
    ticket_lifetime = 24000
    default_realm = FLORENTAPPOINTAIRE.CLOUD
    default_tgs_entypes = rc4-hmac des-cbc-md5
    default_tkt__enctypes = rc4-hmac des-cbc-md5
    permitted_enctypes = rc4-hmac des-cbc-md5
    dns_lookup_realm = true
    dns_lookup_kdc = true
    dns_fallback = yes

    [realms]
    FLORENTAPPOINTAIRE.CLOUD = {
      kdc = floapp-dc01.florentappointaire.cloud
      kdc = floapp-dc02.florentappointaire.cloud
      default_domain = floapp-dc01.florentappointaire.cloud
    }

    [domain_realm]
    .florentappointaire.cloud= FLOAPP-DC01.FLORENTAPPOINTAIRE.CLOUD
    florentappointaire.cloud = FLOAPP-DC01.FLORENTAPPOINTAIRE.CLOUD

    [appdefaults]
    pam = {
       debug = false
       ticket_lifetime = 36000
       renew_lifetime = 36000
       forwardable = true
       krb4_convert = false
    }

    [logging]
    default = FILE:/var/log/krb5libs.log
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmind.log

    image_thumb9

    Sauvegardez le fichier. Nous allons créer un jeton pour un utilisateur de l’AD, qui a les droits de joindre l’ordinateur au domaine. Exécutez la commande suivante:

    sudo kinit fappointaire

    Et pour vérifier que le jeton a bien été créé, exécutez la commande sudo klist:

    image_thumb11

    Nous allons modifier le fichier de configuration Samba. Si vous souhaitez un nom de machine autre que celui qui se trouve dans /etc/hostname, ajoutez la ligne NetBIOS name = nouveaunomdemachine. Il faut remplacer la ligne workgroup = WORKGROUP du fichier de configuration par la configuration suivante, en adaptant avec vos valeurs:

    sudo vim /etc/samba/smb.conf

    workgroup = FLORENTAPPOINTA
    security = ADS
    realm = FLORENTAPPOINTAIRE.CLOUD
    encrypt passwords = yes

    idmap config *:backend = rid
    idmap config *:range = 5000-100000

    winbind allow trusted domains = no
    winbind trusted domains only = no
    winbind use default domain = yes
    winbind enum users  = yes
    winbind enum groups = yes
    winbind refresh tickets = yes

    template shell = /bin/bash

    image_thumb13

    Sauvegardez la configuration. Nous allons maintenant modifier le fichier nsswitch.conf pour indiquer que nous allons utiliser les utilisateurs et les groupes de l’active directory (winbind):

    sudo vim /etc/nsswitch.conf

    image_thumb15

    Il est maintenant temps de joindre le serveur Ubuntu 16.04 à notre Active Directory. Utilisez la commande suivante:

    sudo net ads join –k

    OR

    net ads join -S FLOAPP-DC01.florentappointaire.cloud -U fappointaire

    image_thumb17

    Vous pouvez ignorer l’erreur concernant le DNS tant que le serveur a bien joint le domaine. Voici l’objet dans l’Active Directory:

    image_thumb20

    image_thumb21

    Nous allons maintenant vérifier que l’authentification Active Directory est bien activée. Utilisez la commande suivante:

    sudo pam-auth-update

    Un écran apparaît. Assurez vous que la ligne Winbind NT/Active Directory authtication soit bien sélectionné. J’ai également sélectionnez le fait de pouvoir créer un répertoire par défaut pour chaque utilisateur qui se connectera:

    image_thumb26

    Redémarrons les services pour que toutes les modifications soient prises en compte:

    sudo service smbd restart
    sudo service nmbd restart
    sudo service winbind restart

    image_thumb28

    Vous pouvez utilisez les commandes suivantes pour vérifier qu’il y a bien une synchronisation avec l’Active Directory:

    wbinfo -u
    wbinfo -g
    wbinfo -i fappointaire
    getent passwd
    getent group

    image_thumb34

    image_thumb33

    image_thumb35

    J’ai ensuite ajouté mon utilisateur dans le groupe sudoer:

    sudo adduser fappointaire sudo

    image_thumb36

    Vous pouvez vous connecter avec votre compte de domaine sur le serveur Ubuntu et passer root:

    image_thumb38

    Le prochain article portera sur l’installation et l’utilisation de SQLCMD pour gérer vos bases de données SQL Server, directement depuis un serveur Linux Sourire

    • 7/6/2016

    [Container] Débuter avec Windows Server 2016

    containerfund

    Si vous souhaitez débuter avec les conteneurs sur Windows Server 2016, je viens juste de terminer une vidéo qui explique les premiers pas pour bien débuter. Cette vidéo est disponible ici:

    https://channel9.msdn.com/Blogs/MVP-Cloud-DataCenter/Windows-Container-avec-Windows-Server-2016-TP5

    N’hésitez pas à me laisser vos commentaires Sourire

    • 3/6/2016

    [Container] Erreur lors de l’ajout d’une règle de mapping statique

    Avec Windows Server 2016, les containers sont arrivés sous la forme d’une fonctionnalité dans Windows Server. Avec l’arrivée de la TP5, la façon de gérer les containers a changé. En effet, pour la gestion du réseau, on ne fait plus un nouveau switch, mais on utilise la commande New-ContainerNetwork. Pour rajouter une règle de NAT, vous devez utiliser la commande Add-ContainerNetworkAdapterStaticMapping. J’ai donc fait ceci:

    $iiscore = Get-Container -Name $containerNameIIS
    Add-ContainerNetworkAdapterStaticMapping -Container $iisCore -AdapterName "$containerNameIIS-NetAda" -ExternalPort 80 -InternalPort 80 -Protocol TCP

    Seulement, j’ai eu l’erreur suivante:

    Add-ContainerNetworkAdapterStaticMapping : The operation failed.

    image

    Après avoir cherché pendant plusieurs minutes, j’ai essayé d’éteindre le container et d’exécuter la commande. Cette fois, ça a fonctionné:

    image

    J’ai également vérifié que la règle de NAT était bien présente:

    image

    Conclusion: Il faut arrêter le container que vous souhaitez modifier au niveau réseau pour que la commande s’effectue correctement.

    • 1/6/2016

    [Intel NUC] Driver réseau avec Windows Server 2016 TP5

    Ayant acquis un Intel NUC 6th Generation il y a environ 3 semaines, j’ai voulu déployer Windows Server 2016 TP5 sur ce dernier. L’installation s’est déroulé correctement. J’ai téléchargé les drivers depuis mon laptop directement depuis le site de Intel, pour la version Windows 10 64-bits: https://downloadcenter.intel.com/product/89190

    Tous les drivers se sont installés correctement, sauf le driver de la carte réseau. J’ai cherché sur Internet et j’ai trouvé la réponse à ma question sur ce poste: http://www.sqlbrander.com/2015/12/08/running-windows-server-2016-ctp4-on-an-intel-nuc-5i5ryh/ Je l’ai donc adapté pour la TP5.

    La procédure suivante n’est pas officielle et n’est pas supporté, ne l’utilisez pas pour un environnement de production.

    Le but ici est de commencer en désactivant la vérification de la signature des drivers, avec les commandes suivantes:

    bcdedit /set LOADOPTIONS DISABLE_INTEGRITY_CHECKS
    bcdedit /set TESTSIGNING ON
    bcdedit /set nointegritychecks ON

    Redémarrez le serveur. Téléchargez le driver de la carte réseau iciet ouvrez le fichier, de façon à avoir les sources du driver:

    image

    On va maintenant modifier le driver réseau. Le driver se trouve dans le dossier Your_Directory\LAN_Win10_64_20.7.1\PRO1000\Winx64\NDIS65. Pour Windows Server 2016 TP5, nous allons modifier le fichier e1d65x64.inf. Ouvrez le et cherchez les lignes suivantes:

    [ControlFlags]
    ExcludeFromSelect = \
        PCI\VEN_8086&DEV_153A,\
        PCI\VEN_8086&DEV_153B

    Remplacez les par:

    [ControlFlags]

    image

    Copiez les lignes suivantes:

    %E15A0NC.DeviceDesc%            = E15A0.10.0.1,       PCI\VEN_8086&DEV_15A0
    %E15A0NC.DeviceDesc%            = E15A0.10.0.1,       PCI\VEN_8086&DEV_15A0&SUBSYS_00008086
    %E15A1NC.DeviceDesc%            = E15A1.10.0.1,       PCI\VEN_8086&DEV_15A1
    %E15A1NC.DeviceDesc%            = E15A1.10.0.1,       PCI\VEN_8086&DEV_15A1&SUBSYS_00008086
    %E15A2NC.DeviceDesc%            = E15A2.10.0.1,       PCI\VEN_8086&DEV_15A2
    %E15A2NC.DeviceDesc%            = E15A2.10.0.1,       PCI\VEN_8086&DEV_15A2&SUBSYS_00008086
    %E15A2NC.DeviceDesc%            = E15A2.10.0.1,       PCI\VEN_8086&DEV_15A2&SUBSYS_00011179
    %E15A3NC.DeviceDesc%            = E15A3.10.0.1,       PCI\VEN_8086&DEV_15A3
    %E15A3NC.DeviceDesc%            = E15A3.10.0.1,       PCI\VEN_8086&DEV_15A3&SUBSYS_00008086
    %E15A3NC.DeviceDesc%            = E15A3.10.0.1,       PCI\VEN_8086&DEV_15A3&SUBSYS_00011179
    %E156FNC.DeviceDesc%            = E156F.10.0.1,       PCI\VEN_8086&DEV_156F
    %E156FNC.DeviceDesc%            = E156F.10.0.1,       PCI\VEN_8086&DEV_156F&SUBSYS_00008086
    %E156FNC.DeviceDesc%            = E156F.10.0.1,       PCI\VEN_8086&DEV_156F&SUBSYS_00011179
    %E1570NC.DeviceDesc%            = E1570.10.0.1,       PCI\VEN_8086&DEV_1570
    %E1570NC.DeviceDesc%            = E1570.10.0.1,       PCI\VEN_8086&DEV_1570&SUBSYS_00008086
    %E1570NC.DeviceDesc%            = E1570.10.0.1,       PCI\VEN_8086&DEV_1570&SUBSYS_00011179
    %E15B7NC.DeviceDesc%            = E15B7.10.0.1,       PCI\VEN_8086&DEV_15B7
    %E15B7NC.DeviceDesc%            = E15B7.10.0.1,       PCI\VEN_8086&DEV_15B7&SUBSYS_00008086
    %E15B7NC.DeviceDesc%            = E15B7.10.0.1,       PCI\VEN_8086&DEV_15B7&SUBSYS_00011179
    %E15B8NC.DeviceDesc%            = E15B8.10.0.1,       PCI\VEN_8086&DEV_15B8
    %E15B8NC.DeviceDesc%            = E15B8.10.0.1,       PCI\VEN_8086&DEV_15B8&SUBSYS_00008086
    %E15B8NC.DeviceDesc%            = E15B8.10.0.1,       PCI\VEN_8086&DEV_15B8&SUBSYS_00011179

    Et collez les après le bloc suivant:

    [Intel.NTamd64.10.0]
    ; DisplayName                   Section        DeviceID
    ; -----------                   -------        --------
    %E153ANC.DeviceDesc%            = E153A,       PCI\VEN_8086&DEV_153A
    %E153ANC.DeviceDesc%            = E153A,       PCI\VEN_8086&DEV_153A&SUBSYS_00008086
    %E153ANC.DeviceDesc%            = E153A,       PCI\VEN_8086&DEV_153A&SUBSYS_00011179
    %E155ANC.DeviceDesc%            = E155A,       PCI\VEN_8086&DEV_155A
    %E155ANC.DeviceDesc%            = E155A,       PCI\VEN_8086&DEV_155A&SUBSYS_00008086
    %E155ANC.DeviceDesc%            = E155A,       PCI\VEN_8086&DEV_155A&SUBSYS_00011179
    %E15A0NC.DeviceDesc%            = E15A0,       PCI\VEN_8086&DEV_15A0
    %E15A0NC.DeviceDesc%            = E15A0,       PCI\VEN_8086&DEV_15A0&SUBSYS_00008086
    %E15A2NC.DeviceDesc%            = E15A2,       PCI\VEN_8086&DEV_15A2
    %E15A2NC.DeviceDesc%            = E15A2,       PCI\VEN_8086&DEV_15A2&SUBSYS_00008086
    %E15A2NC.DeviceDesc%            = E15A2,       PCI\VEN_8086&DEV_15A2&SUBSYS_00011179
    %E156FNC.DeviceDesc%            = E156F,       PCI\VEN_8086&DEV_156F
    %E156FNC.DeviceDesc%            = E156F,       PCI\VEN_8086&DEV_156F&SUBSYS_00008086
    %E156FNC.DeviceDesc%            = E156F,       PCI\VEN_8086&DEV_156F&SUBSYS_00011179
    %E15B7NC.DeviceDesc%            = E15B7,       PCI\VEN_8086&DEV_15B7
    %E15B7NC.DeviceDesc%            = E15B7,       PCI\VEN_8086&DEV_15B7&SUBSYS_00008086
    %E15B7NC.DeviceDesc%            = E15B7,       PCI\VEN_8086&DEV_15B7&SUBSYS_00011179

    Vous devriez avoir ceci:

    image

    Sauvegardez le fichier et allez dans le Device Manager, sur votre carte réseau. Choisissez Update Driver:

    image

    Choisissez la 2ème option pour sélectionner le driver créé précédemment:

    image

    Donnez le chemin vers votre driver:

    image

    Vous allez avoir un message pour dire que le driver représente un risque, installez quand même:

    Le driver est maintenant installé:

    image

    image

    Vous pouvez donc accéder au réseau, via votre Intel NUC sur Windows Server 2016 TP5.

    La dernière étape est de réactiver la vérification de la signature des drivers, avec les commandes suivantes:

    bcdedit /set LOADOPTIONS ENABLE_INTEGRITY_CHECKS
    bcdedit /set TESTSIGNING OFF
    bcdedit /set nointegritychecks OFF

    Redémarrez le serveur. Et voila, vous avez maintenant le réseau ethernet qui fonctionne sur votre serveur.

    En espérant vous avoir aidé Sourire

    • 11/5/2016

    [Hyper-V] Erreur au démarrage d’une VM nested

    Avec Windows Server 2016 TP4, Microsoft a ajouter une nouvelle fonctionnalité, Nested Hyper-V. Cette fonctionnalité permet de faire de la virtualisation dans des VMs qui tournent sur Hyper-V.

    Le 27 Avril dernier, Microsoft a rendu disponible la version TP5 de Windows Server 2016. Utilisant comme hôte de test mon serveur Azure Stack, qui est sous Windows Server 2016 TP4, j’ai voulu testé Nested Hyper-V TP5 sur ce serveur. J’ai alors créer un Nano Server avec le rôle Hyper-V et j’ai créé une VM WS2016TP5 sur celle ci:

    SNAGHTML9682b64

    J’ai démarré cette VM et j’ai eu l’erreur suivante:

    Failed to start the virtual machine ‘WS2016TP5’ because one of the Hyper-V components is not running

    image

    Il s’avère que pour faire tourner la version TP5 de Nested Hyper-V, votre Hyper-V serveur doit être également sur TP5.

    En espérant vous avoir aidé Sourire

    • 11/5/2016

    [StarWind Virtual SAN] Intégration avec SCVMM 2012 R2

    StarWind Software

    Dans le précédent poste, nous avons vu comment installer et configurer StarWind Virtual SAN. Dans cette article, nous allons voir comment l’intégrer avec SCVMM 2012 R2 avec le connecteur SMIS, et donc, provisionner des LUNs directement depuis la console de SCVMM.

    Si vous avez installer StarWind en version Full, vous avez dû normalement installer l’agent SMIS. Lancez le logiciel StarWind SMI-S Agent Configurator. Attention à bien lancer la console en Administrateur, sinon vous aurez des soucis au moment de la sauvegarde, ceci n’est pas précisé dans la documentation officiel, dommage (Merci à Romain Serre pour le tip :-) ).

    image 
    Cette console est plutôt simple au premier abord. Suivant votre configuration vous devez/pouvez modifiez:

    • StorageSystemName : vous pouvez mettre ce que vous souhaitez
    • StorageSystemIPAddress: l’adresse IP du serveur StarWind Virtual SAN (si vous avez installé votre SMIS sur un autre serveur)
    • StorageSystemPassword: vous devez renseigner le mot de passe root du compte pour se connecter à la console (il est nul par défaut)
    • path: vous pouvez modifiez les différents path où seront stockés les disques

    image

    Cliquez sur OK  pour valider et redémarrez le service StarWind SMI-S Agent:

    Restart-Service StarWindSMISAgent

    image 
    En 5 minutes donc, vous avez un serveur qui vous permet de vous connecter en SMI-S très rapidement. Ceci est bien plus simple à configurer que l’agent SMI-S de NetApp ou encore EMC.
    Nous allons maintenant enregistrer le serveur SMI-S dans SCVMM. Dans votre console, allez dans Fabric > Providers > Add Storage Devices. Sélectionnez SAN and NAS devices discovered and managed by a SMI-S provider:

    image
    Choisissez comme protocole SMI-S CIMXML, renseignez l’IP ou le FQDN de votre serveur SMIS ainsi que le compte root que l’on a renseignez précedement:

    image 
    Vous devriez avoir votre StarWind, avec le nom que l’on a donné tout à l’heure (Storage):

    image 
    Associez votre pool à une classification:

    image
    Cliquez sur Finish:

    image 
    Notre serveur a bien été ajouté:

    imageimageimage 
    5 minutes de plus et votre solution StarWind est directement intégrée à votre environnement SCVMM, nice job Sourire

    Vous pouvez maintenant monter des LUNs directement sur votre cluster, depuis SCVMM:

    imageimage 
    Après quelques minutes, vous pouvez voir que la LUN est bien créée:

    imageimage 
    Pour résumer, l’installation et la configuration de la partie SMI-S de StarWind est vraiment très simple et vous permet donc, de gérer votre stockage simplement et rapidement, depuis une seule et même console.

    Si vous avez des questions n’hésitez pas.

    • 18/4/2016

    [WAP] Installation et configuration de Azure Pack Connector

    7217.Windows-Azure-logo-v_6556EF52

    Microsoft a rendu disponible fin Février une première version de Azure Pack Connector. Ce plugin vous permet, depuis l’interface de Windows Azure Pack, de déployer et gérer des VMs sur Azure. Le 5 Avril dernier, Microsoft a rendu disponible la version 1.1. C’est avec cette version que je vais vous montrer comment déployer cet outil.

    Assurez vous d’avoir un Azure Active Directory avant de commencer. Ensuite, téléchargez le Azure Pack Connector: https://github.com/Microsoft/Phoenix/releases/tag/v1.1

    Copiez les sources sur les serveurs qui hébergerons les 3 rôles que composent ce composant:

    • CMP Server
    • WAP Tenant Extension
    • WAP Admin Extension

    Connectez vous sur un serveur qui contient IIS et générez un certificat de type Self-Signed ou d’entreprise, via une PKI. Exportez ce certificat, via IIS et importez le sur les serveurs qui hébergerons les 3 rôles précédent. Vous devez l’importer dans le Current User et dans le Local Machine, en incluant bien toutes les propriétés et en choisissant de placer automatiquement le certificat dans le bon magasin. Ensuite, ouvrez une MMC, et ajoutez le snap-in Certificates sur le Local Computer. Ouvrez les clés privées et ajoutez le groupe Everyone:

    SNAGHTML960daa7

    image

    Ce certificat sera utilisé pour le chiffrement.

    Vous devez maintenant télécharger et installer les Feature Pack suivante de SQL Server 2014, sur chaque serveur qui aura le plugin installé:

    • Shared Management Objects (SMO)
    • Transact-SQL ScriptDom (SQLDOM)
    • System CLR Types (SQLSysClrTypes)

    Redémarrez les serveurs. Nous pouvons maintenant lancer l’installation du plugin. Décompressez l’archive que vous avez téléchargé sur le serveur où sera installé l’extension de la partie Admin et exécutez l’application SetupCMP.exe:

    image

    Choisissez d’ajouter de nouvelles fonctionnalités:

    image

    Ici, je vais sélectionner les 2 fonctionnalités suivantes:

    • CMP Server
    • WAP Admin Extension

    image

    Acceptez la licence:

    image

    Choisissez où installer les binaires:

    image

    Donnez le nom du serveur SQL qui hébergera la base de donnée, ainsi que son instance, pour la partie CMP Service:

    image

    Faites de même pour la partie WAP:

    image

    Je vais utiliser un compte de service pour faire tourner le service CMP. Ce compte doit être administrateur local de la machine. Choisissez également le certificat que vous avez généré au début:

    image

    Vous avez ici un résumé de votre installation:

    image

    L’installation est terminée:

    image

    Dans IIS Manager:

    image

    Dans la partie WAP Admin Portal:

    image

    Allez maintenant sur le serveur qui contient le site Tenant et exécutez le fichier SetupCMP.exe. L’installation est la même, sauf que vous allez choisir la partie WAP Tenant Extension:

    image

    Choisissez d’utiliser une base de donnée existante:

    image

    image

    Et choisissez le certificat que vous avez importé:

    image

    Installez le dernier composant:

    image

    image

    Allez maintenant sur l’instance SQL qui contient la base de donnée Microsoft.MgmtSvc.Store et exécutez la requête suivante pour créer un nouvel utilisateur et l’associer à la base de donnée. Vous pouvez changer le nom d’utilisateur/mot de passe:

    USE [master]
    GO
    CREATE LOGIN [MgmtSvc-CmpWapExtension] WITH PASSWORD=N'pass@word1', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
    GO
    USE [Microsoft.MgmtSvc.Store]
    GO
    CREATE USER [MgmtSvc-CmpWapExtension] FOR LOGIN [MgmtSvc-CmpWapExtension]
    ALTER USER [MgmtSvc-CmpWapExtension] WITH DEFAULT_SCHEMA=[dbo]
    ALTER ROLE [db_owner] ADD MEMBER [MgmtSvc-CmpWapExtension]
    GO

    image

    Il faut maintenant fournir la bonne chaine de connexion SQL à notre plugin. Allez sur le serveur qui contient l’extension CMP et ouvrez le fichier Web.config (en tant qu’administrateur) dans le dossier C:\inetpub\MgmtSvc-CmpWapExtension. Remplacez la chaine de connexion MicrosoftMgmtSvcStoreContext par la suivante, en adaptant avec vos données:

    <add name="MicrosoftMgmtSvcStoreContext" connectionString="Data Source=DEVOC-SQL-001\WAP;Initial Catalog=Microsoft.MgmtSvc.Store;Persist Security Info=True;User ID=MgmtSvc-CmpWapExtension;Password=pass@word1;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>

    image

    Modifiez les 2 chaines de connexions précédentes en ajoutant après la base de donnée, ;MultipleActiveResultSets=True”

    image

    Faites les 2 étapes précédentes sur chaque serveur CMP. Associez le certificat utilisé lors de l’installation au site IIS, sur chaque serveur:

    image

    Exécutez sur chaque serveur un iisreset pour prendre en compte les modifications. Sur un des serveurs, nous allons lancer le script qui permet d’enregistrer ce nouveau Resource Provider. Allez dans C:\inetpub\MgmtSvc-CmpWapExtension et exécutez le script Register-ResourceProvider.ps1. Vous devez fournir le nom du serveur qui contient l’extension d’administration et l’extension tenant:

    image

    Dans votre portail d’administration, le RP est enregistré correctement:

    image

    Téléchargez maintenant le script suivant : https://github.com/Microsoft/Phoenix/blob/master/tools/Create-AADSPN.ps1 et exécutez le sur un ordinateur qui contient le module AzureRM. Ce script va créer une application personnalisée dans votre Azure AD.

    SNAGHTML92708a6

    Nous allons maintenant ajouter le plugin à un plan. Vous aurez besoin des informations suivantes (ces informations sont disponibles dans la sortie du script que vous avez exécuté juste avant) :

    • Le numéro de la suscription Azure (subscriptionId)
    • Le numéro de votre Azure AD (tenantId)
    • La clé que vous avez renseigné lors de la création de l’application (appKey)
    • Le numéro de l’application de l’Azure AD (App ID)

    Depuis le portail d’administration, ajoutez le service CMP à un plan:

    image

    Vous devriez avoir une page semblable à celle ci, en ajoutant un compte:

    image

    Remplissez chaque case avec les informations que vous avez récolté:

    SNAGHTML93f812d

    Cliquez sur le bouton Add Subscription. Si tout est OK, vous aurez un bandeau vert avec un message de succès:

    SNAGHTML941ec03

    Ajoutez la suscription au Plan en cliquant sur Add Selected Subscription To Plan:

    image

    Choisissez les images disponibles ainsi que les tailles et cliquez sur Save:

    SNAGHTML94378bd

    Dans le portail client, vous pouvez maintenant déployer une VM sur Azure:

    image

    image

    image

    image

    Et avec le détail:

    SNAGHTML972cc38

    Ce nouveau plugin est très intéressant pour avoir la possibilité de déployer rapidement une VM sur Azure, mais certaines fonctionnalités sont manquantes, comme la possibilité de déployer une VM sur un Datacenter européen, des VMs linux, etc…

    Troubleshooting

    Erreur 1

    Après le déploiement, j’ai eu l’erreur suivante dans le journal d’évènement:

    Exception in SyncWorker.SynchWithCmp() : Exception in CmpClient.FetchCmpRequests() : Exception in GetAzureContainers() : The underlying provider failed on Open. - Cannot open database "CMP_DB" requested by the login. The login failed.
    Login failed for user 'DOMAIN\DEVOC-WAPTNT-01$'. :

    SNAGHTML9468d8f

    Les comptes ordinateurs de mes 2 VMs n’avaient pas les droits sur l’instance qui contient les DBs CMP. Je les ai donc rajouté sysadmin, et l’erreur a disparu.

    Erreur 2

    Si vous avez l’erreur suivante:

    Exception in SyncWorker.SyncWithAzure() : Exception in FetchServiceProviderAccountList() : Exception in Decrypt() : Keyset does not exist
    :

    SNAGHTML96a6121

    Assurez vous d’avoir bien donné la permission à Everyone en Full pour gérer les clés privés du certificat importé.

    • 4/4/2016

    [MVP] Première nomination

    image

    Et voilà, depuis le 1er Avril 2016, Microsoft m'a élu Microsoft MVP dans la catégorie Cloud and Datacenter Management (et ce n'est pas un poisson :) )

    Ce titre m'a été décerné pour mes différentes activités au sein de la communauté Microsoft.

    Je tiens à remercier les gens qui m'ont aidé et soutenu, Romain, JS, Benoit, Christophe, etc (désolé pour ceux que je n'ai pas pu citer, mais la liste est bien trop longue :) ) ainsi que vous les lecteurs.
    Mais celle que je remercie le plus est sans nul doute ma compagne, Alexandra, qui me supporte quand je travaille le soir/week-end pour vous apporter du nouveau contenu.

    La suite pour 2016:

    Et bien sur, continuer à blogger, rencontrer de nouvelles personnes, découvrir de nouveaux produits, etc.

    Merci encore à tous et à bientôt :)

    • 16/2/2016

    [Azure Stack] Déployer une WebApp personnalisée

    Pendant mes tests avec Azure Stack, J’ai essayé de déployer une WebApp personnalisée directement depuis Visual Studio. Avec Azure et Visual Studio, vous avez une option qui permet de se connecter à votre compte Azure et de choisir une suscription.

    Pour le moment, avec Visual Studio, vous ne pouvez pas faire ceci directement sur Azure Stack, parce que si vous vous connectez avec votre compte tenant, vous n’aurez pas de suscription (Azure). Donc pour déployer votre WebApp personnalisée, créez une nouvelle WebApp vide dans Azure Stack:

    image

    Maintenant, vous allez télécharger le fichier publish settings, en clqiuant sur Get publish profile. Un fichier va être téléchargé:

    image

    image

    Sur la VM ClientVM, ouvrez votre dans Visual Studio. Cliquez sur Build > Publish WebApp:

    image

    Dans la nouvelle fenêtre, cliquez sur Import:

    image

    Choisissez le fichier publish settings que vous avez téléchargé précédemment:

    image

    Ca va remplir automatiquement les champs. Cliquez sur Validate Connection pour être sur que la connexion est bonne:

    image

    Si vous voulez que votre site s’ouvre après le déploiement, copier l’url depuis votre web app et modifier le champ Destination URL dans Visual Studio:

    image

    image

    Cliquez sur Publish. Votre Web App vide est maintenant avec votre Web site personnalisée Sourire

    image

    • 12/2/2016

    [Azure Stack] Déployer le Resource Provider Web App

    Après le premier article concernant le déploiement du RP MySQL, et du second pour déployer le RP de SQL, je vais vous expliquer comment installer le RP pour les Web App.

    Pour ce RP, les prérequis sont les suivants:

    Connectez vous à votre VM ClientVM, démarrez PowerShell ISE en tant qu’administrateur et téléchargez le paquet suivant. Décompressez-le:

    image

    Dans une fenêtre PowerShell, exécutez le script Deploy-SqlServerDSC.ps1. Il vous demandera votre répertoire Azure AD, un mot de passe pour le compte Admin (qui sera utilisé pour se connecter à la VM SQL et à l’instance SQL Server) et un compte Global Admin de votre Azure AD et de Azure Stack:

    image

    image

    La VM SQL sera déployée dans un Resource Group nommé WebsitesSQL:

    image

    Pendant le déploiement, récupérez l’adresse IP privée de la VM SQL, 10.0.2.4 dans mon cas:

    image

    La VM SQL est maintenant déployée (le déploiement a duré 45 minutes pour moi):

    image

    Maintenant, nous allons installer la partie App Service. Commencez par télécharger le logiciel appservice.exe, sur la VM ClientVM. Démarrez le en tant qu’administrateur. Cliquez sur Deploy using Azure Resource Manager:

    image

    Acceptez la licence:

    image

    Acceptez la licence pour tous les produits qui seront déployés:

    image

    Après, il faut créer un nouveau compte de stockage qui sera utilisé pour le déploiement, dans la suscription Default Provider Subscription:

    image

    Que c’est terminé, récupérez le nom du compte de stockage ainsi que la clé pour y accéder:

    SNAGHTML35ebfe4

    Fournissez ces informations dans la fenêtre suivante, dans l’installateur App Service:

    image

    Le téléchargement de chaque produit commence, et après le téléchargement, ils seront envoyés sur votre compte de stockage créé précédemment:

    SNAGHTML360308b

    Le déploiement s’est terminé avec succès. Un nouveau bouton est apparu, Deploy to Azure Stack. Cliquez dessus:

    image

    Sur le popup qui apparaît, cliquez sur No. C’est important parce qu’en cliquant sur No, les commandes qui doivent être exécutées seront copiées dans votre clipboard. Ces informations peuvent être récupérées si vous lez perdez, via votre compte de stockage. Ces commandes seront utilisées pour déployer l’infrastructure du RP Web App. Collez les dans un notepad:

    image

    image

    Il est maintenant temps de déployer le RP WebApp. 0 cet étape, vous avez 2 solutions. En PowerShell avec ARM ou directement avec l’interface Web. Ici, je vais vous expliquer la façon avec l’interface Web (pour PowerShell, les explications sont ici). Ouvrez a deuxième URL que vous avez dans votre notepad:

    image

    Ici, vous avez besoin de plusieurs informations:

    1 – Le nom d’un compte de stockage, webappstorage par exemple
    2 – Un compte admin pour chaque VM
    3 – Un mot de passe pour chaque utilisateur admin
    4 – Un suffixe DNS pour accéder au RP WebApp, par exemple webapps.azurestack.local
    5 – L’I¨P address de la VM SQL que vous avez récupéré précédemment, pour moi 10.0.2.4
    6 – Le compte sysadmin, sa
    7 – Le mot de passe du compte sysadmin, le même que le compte local du serveur SQL

    image

    Vous pouvez adapter chaque valeur pour chaque VM. J’utiliserai ici qu’une seule instance pour chaque VM, mais je change la taille pour une Standard_A2:

    image

    Il est très important de déployer ce RP WebApp dans le même groupe de ressource que le serveur SQL. Dans mon cas, WebsitesSQL. Cliquez sur Create pour démarrer le déploiement de chaque machine:

    image

    Le déploiement est démarré:

    image

    6 VMs sont déployées:

    • CN0-VM: Cette VM est le controller primaire, pour gérer l’infrastructure WebApp
    • FS-VM : C’est le File Server, où les binaires des sites sont stockés mais aussi les sites web des clients
    • WW0-VM: Cet VM est le Web Worker, où les ressources disponibles pour vos clients (App Service) seront disponibles
    • MN0-VM: Cette VM est utilisé pour la partie Hosting Management
    • FTP0-VM: C’est la VM Publisher 
    • FE0-VM: C’est la VM Front End

    Le déploiement c’est correctement déroulé (40 minutes pour moi):

    image

    Nous allons maintenant créer l’entrée DNS pour le wild card *.webapps.azurestack.local. L’IP adress est l’IP du Load-Balancer FrontEndServersLoadBalancer, dans mon cas, 192.168.133.28:

    image

    L’entrée DNS de type A associée:

    image

    Ce * va créer un nouveau dossier nommé webapps dans votre DNS:

    image

    Récupérez maintenant l’IP adresse du Load-Balancer ManagementServerLoadBalancer, pour moi 192.168.133.29:

    image

    Créez une nouvelle entrée DNS de type A avec le nom management. Ce nom sera utilisé pour enregistrer le RP WebApp dans Azure Stack:

    image

    Nous allons créer/installer le certificat wildcard. Si vous avez déjà installé le RP SQL, ce certificat existe déjà. Dans le cas contraire, utilisez le début de cet article pour le créer. Connectez vous sur la VM management.azurestack.local et copiez le certificat wildcard sur votre bureau:

    image

    Ouvrez le et choisissez Local Machine:

    image

    Sélectionnez les 2 box Make this key as exportable… and Include all properties…:

    image

    Choisissez la première option, Automatically select…:

    image

    Importez-le:

    image

    L’import c’est effectué correctement:

    image

    Nous allons installer ce certificat sur la VM CN0-VM. Récupérez son IP depuis le portail:

    image

    Depuis le serveur management connectez vous au serveur CN0-VM . Copiez le certificat depuis le management, et collez le dans C:\Temp de la vm controller:

    image

    Exécutez le script PowerShell suivant, en remplaçant avec vos valeurs le mot de passe du PFX ainsi que l’URI de la dernière commande, en l’adaptant avec l’URL du management:

    Import-Module Websites

    $password="pfxPassword"
    Set-WebSitesConfig -Type Global -ManagementServerCertificateFileName "C:\Temp\Certificate.pfx" -ManagementServerCertificatePassword $password
    Set-WebSitesConfig -Type Global -ArmEndpoint "https://api.azurestack.local"
    Set-WebsitesConfig -Type Global -ArmResourceProviderUri 'https://management.azurestack.local/'

    SNAGHTML3e6dda7

    Exécutez le script:

    Get-WebSitesServer -ServerType ManagementServer | Repair-WebSitesServer
    Get-WebSitesServer -ServerType LoadBalancer | Repair-WebSitesServer
    Get-WebSitesServer -ServerType WebWorker | Repair-WebSitesServer

    image

    La fin est proche. Nous allons enregistrer le RP WebApp dans notre environnement Azure Stack. Connectez vous sur la VM ClientVM et allez sur https://portal.azurestack.local .Allez dans Resource Providers et cliquez sur Add:

    image

    Remplissez chaque champs:

    1 – Le nom du déploiement
    2 – L’URL de management, https://management.azurestack.local/
    3
    – Le nom d’utilisateur des VMs, admin
    4 – Le mot de passe des VMs
    5 – La location, local
    6 – Un groupe de ressource, WebAppsRG

    image

    L’enregistrement est terminé:

    image

    Le déploiement est terminé, nous pouvons l’ajouter à notre plan:

    image

    Nous allons maintenant ajouter un serveur, pour avoir la possibilité de déployer des site web sur des App Service de type Standard. J’ai déployé une nouvelle VM WS 2012 R2 (Standard_A3) pour l’utiliser en tant qu’App Service Medium. Cette VM est connecté sur le même réseau que mes autres VMs du RP WebApp et donc, dans le même groupe de ressource:

    image

    Connectez vous sur cette VM et ajoutez le même compte que vous avez utilisé pour votre ferme Web App (admin) avec le même mot de passe. Ce compte doit être administrateur local de la VM:

    image

    Exécutez la commande PowerShell suivant pour pouvoir vous connecter à distance (WinRM) avec un compte qui ne provient pas de ce serveur:

    Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1 -Force

    Allez sur votre Resource Providers web-apps:

    image

    Cliquez sur Roles:

    image

    Comme vous pouvez le voir, actuellement, les clients peuvent seulement créer des site sur une infrastructure de type Shared. Nous devons donc ajouter des serveurs pour les instances suivantes Small/Medium/Large. Cliquez sur Add Role Instance et fournissez l’adresse IP de la VM que vous venez de créer et choisissez la taille à laquelle vous voulez associer cette VM:

    image

    image

    Si vous allez sur la VM controller, et que vous ouvrez le raccourci sur le bureau Web Cloud Management Console, vous pouvez voir que le serveur que vous avez ajouté est en cours de configuration pour recevoir des nouvelles instances:

    image

    Le serveur est maintenant prêt à recevoir des instances (l’ajout a pris 30 minutes sur mon environnement):

    image

    Mon client peut maintenant déployer une WebApp. Cliquez sur New > Web + Mobile et choisissez un site:

    image

    Je vais déployer un wordpress. Pour le App Service, je vais utiliser le pricing tier Standard-Medium, car c’est celui que je viens d’ajouter:

    image

    Je vais le lier à une base de données existante:

    image

    image

    Après quelques minutes, vous pouvez naviguer sur votre nouveau site:

    imageimage

    Django:

    image

    Et pour.Net Nuke, avec une base de données SQL:

    image

    image

    image

    Si vous avez des questions, n’hésitez pas à me contacter Sourire

    • 11/2/2016

    [Azure Stack] Déployer le Resource Provider SQL Server

    Après avoir vu dans le 1er article comment déployer le RP de MySQL sur Azure Stack, je vais vous expliquer comment déployer le RP de SQL Server. Avant de commencer, assurez vous d’avoir une image Windows Server 2012 R2 Datacenter avec le Framework 3.5 (prérequis pour SQL Server) et d’avoir désactiver IE Enhanced Security Configuration. Pour commencer, connectez vous sur la VM ClientVM et désactivez IE Enhanced Security Configuration pour les administrateurs et les utilisateurs. C’est nécessaire pour pouvoir s’authentifier sans problème sur Azure AD:

    image

    Sur la VM ClientVM, installez la dernière version de Azure PowerShell (version 1.2.1), que vous pouvez télécharger ici:

    image

    C’est maintenant temps de créer un certificat wildcard pour autoriser la communication entre le Resource Provider et Azure Resource Manager. Connectez vous sur la VM PortalVM et ouvrez la console IIS:

    image

    Ici, allez dans PORTALVM > Server Certificates et cliquez sur Create Domain Certificate. Donnez comme valeur dans common name, *.azurestack.local. Donnez le même nom pour friendly name. Pour les autres paramètres, remplissez comme bon vous semble:

    image

    image

    Nous allons exporter le certificat. Ouvrez une MMC et connectez le certificat sur Local Computer. Dans la partie Personal, vous allez voir votre certificat wildcard:

    image

    Exportez le certificat avec la clé privée:

    image

    Choisissez les extensions Export all extended properties et Include all instances in the certificate path if possible:

    image

    Donnez un mot de passe pour protéger le certificat:

    image

    Choisissez où stocker le certificat:

    image

    Copiez le certificat dans \\SOFS\Share\Certificates\Wildcard :

    image

    Retournez dans votre VM ClientVM et téléchargez le RP SQL avec ce lien et décompressez le. Renommez le fichier AzureStack.SqlRP.Deployment.*.nupkg en AzureStack.SqlRP.Deployment.*.zip. Sur le disque D, créez un dossier nommé SQLRP et décompressez le dans le dernier dossier créé:

    image

    Copiez le fichier AzureStack.SqlRP.Setup.*.nupkg dans D:\SQLRP\AzureStack.SqlRP.Deployment.5.11.61.0\content\Deployment:

    image

    Dans ce dossier, créez un nouveau dossier nommé Certificate et copiez le certificat wildcard dedans. Renommez le en Certificate.pfx. Ceci est très important parce que le script utilise ce nom de certificat:

    image

    Retournez dans le dossier Deployment et allez dans Templates. Modifiez le fichier InstallSqlRpComplete-Parameters.json. Remplissez les valeurs adminPassword avec le mot de passe que vous allez utiliser pour votre RP SQL et le mot de passe du certificat PFX dans la certPassword. Vous pouvez fermer votre fichier.

    Faites la même chose dans le fichier InstallSqlRpPackage-Parameters.json.

    Changez la valeur du paramètre cseBlobStorage avec le nom de la nouvelle version, AzureStack.SqlRP.Setup.5.11.61.0.nupkg:

    image

    Ouvrez une fenêtre PowerShell en tant qu’administrateur et déplacez vous dans D:\SQLRP\AzureStack.SqlRP.Deployment.5.11.61.0\Content\Deployment:

    image

    Exécutez le script SqlRPTemplateDeployment.ps1 avec les paramètres suivant, en remplaçant par vos valeurs pour démarrer l’installation du RP:

    .\SqlRPTemplateDeployment.ps1 -AadTenantDirectoryName azurelabdvo.onmicrosoft.com -packageName "AzureStack.SqlRP.Setup.5.11.61.0.nupkg"

    Si vous avez l’erreur suivant, tapez Set-ExecutionPolicy Unrestricted:

    .\SqlRPTemplateDeployment.ps1 : File
    D:\SQLRP\AzureStack.SqlRP.Deployment.5.11.61.0\content\Deployment\SqlRPTemplateDeployment.ps1 cannot be loaded. The
    file D:\SQLRP\AzureStack.SqlRP.Deployment.5.11.61.0\content\Deployment\SqlRPTemplateDeployment.ps1 is not digitally
    signed. You cannot run this script on the current system. For more information about running scripts and setting
    execution policy, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
    At line:1 char:1
    + .\SqlRPTemplateDeployment.ps1
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : SecurityError: (:) [], PSSecurityException
        + FullyQualifiedErrorId : UnauthorizedAccess

    image

    Une fenêtre va apparaître pour vous demander un nom d’utilisateur/mot de passe qui est global admin de votre Azure AD:

    image

    Le déploiement de la VM est en cours:

    image

    La déploiement peut prendre jusqu’à 90 minutes pour se déployer car une nouvelle VM va être provisionnée avec SQL Server installé sur Windows Server 2012 R2 (moins de 60 minutes pour ma part). Le déploiement est maintenant terminé:

    image

    Allez sur la VM ADVM et créez une entrée DNS sqlrp avec l’adresse IP public que vous pouvez trouvez dans le portail Azure Stack dans Public IP:

    image

    image

    La dernière étape est d’enregistrer le RP SQL dans MAS. Exécutez le script Register-SqlRP.ps1 qui se trouve dans le dossier D:\SQLRP\AzureStack.SqlRP.Deployment.5.11.61.0\content\Deployment avec la commande suivante:

    .\Register-SqlRP.ps1 -AadTenantDirectoryName azurelabdvo.onmicrosoft.com

    Connectez vous sur votre Azure AD. Une fenêtre va apparaître pour vous demander un le mot de passe pour l’utilisateur sqlRpUsername . Renseignez le mot de passe suivant sqlRpPassw0rd

    image

    image

    Ajoutez le RP à une suscription existante:

    image

    Cliquez sur New > Data + Storage > Sql Server Database et choisissez le serveur créait plus tôt:

    image

    image Quand je lance le déploiement, j’ai l’erreur suivante:

    image

    Mark Scholman m'a donné la solution sur Twitter. Vous devez ajouter l’instance SQL avant de lancer un déploiement. Pour faire ceci, allez sur le portail d’administration et allez dans Resource Providers > SQL-LOCAL > SQL Service > SQL Hosting Servers (en cliquant sur 0 sous Servers) et cliquez sur Add. Renseignez le nom d’une instance SQL Server et le nom d’utilisateur/mot de passe pour se connecter à cette instance (et le port si besoin):

    image

    image

    Mon serveur SQL a été enregistré correctement et peut maintenant héberger des bases de données. Relancez votre création de base de donnée:

    image

    Vous pouvez vous connecter à cette base:

    image

    image

    Profitez-en bien Sourire

    • 11/2/2016

    [Azure Stack] Déployer le Resource Provider MySql

    Microsoft a rendu disponible Mardi 3 nouveaux services dans Azure Stack pour le Platform-As-A-Service (PaaS):

    • SQL Server
    • MySQL
    • Web Apps

    Dans 3 différents articles, je vais vous expliquer comment déployer chaque Resource Provider. Nous allons commencer par le déploiement du RP MySql. Pour commencer, connectez vous sur la VM ClientVM et désactivez IE Enhanced Security Configuration pour les administrateurs et les utilisateurs. Ceci est nécessaire pour s’authentifier sur Azure AD sans problème.

    Sur la VM ClientVM, installez la dernière version de Azure PowerShell (version 1.2.1), que vous pouvez télécharger ici:

    image_thumb21

    Quand ceci est terminé, téléchargez le fichier AzureStackMySQLforWebApps.zip et décompressez le dans D:\MySql:

    image

    Lancez un fenêtre de commande en tant qu’administrateur et déplacez vous dans D:\MySql. Exécutez l’outil Bootstrap.cmd. Ceci va lancer PowerShell ISE avec le script Bootstrap.ps1. Exécutez le:

    image

    Plusieurs nouveaux tabs vont s’ouvrir. Allez dans le tab Prepare MySql Prerequisites et exécutez le script New-SslCert.ps1 pour générer un certificat pour votre infrastructure MySQL. Le script va vous demander un mot de passe pour le PFX:

    image

    image

    Si vous allez dans D:\MySql\Prerequisites\BlobStorage\Container vous verrez votre certificat pour sécuriser les communications entre votre Rp et Azure Resource Manager. Maintenant, exécutez le script Download-MySqlServer.ps1 (ceci va télécharger MySQL) et cliquez sur Yes to All pour accepter la licence MySQL:

    image

    Dans D:\MySql\Prerequisites\BlobStorage\Container vous avez vos 2 MySQL packages:

    image

    Maintenant, exécutez le script Upload-Microsoft.MySql-RP.ps1. Ce script va copier les sources dans un blob storage. Fournissez votre nom Azure AD (dans mon cas, azurelabdvo.onmicrosoft.com) et fournissez un Username/Password qui est Global Admin de Azure AD et Admin de Azure Stack:

    image

    image

    Exécutez maintenant le script Publish-GalleryPackages.ps1. Ce script va ajouter 2 packages dans votre Market Place de Azure Stack. Donnez le nome de votre Azure AD comme paramètre:

    image

    Maintenant, vous avez normalement ces 4 packages dans D:\MySql\Prerequisites\BlobStorage\Container:

    image

    C’est maintenant temps de déployer le RP MySQL. Sur la VM ClientVM, allez dans Market Place > Resource Providers > MySql Resource Provider 1.0.1.0:

    image

    Cliquez dessus et choisissez un utilisateur/mot de passe Admin pour votre VM:

    image

    Descendez et donnez le mot de passe du PFX généré à la 1ère étape. Choisissez un nom d’utilisateur/mot de passe que vous utiliserez pour enregistrer le RP MySQL:

    SNAGHTML2e10c036

    Créez un nouveau Resource Group nommé MySQL01 et lancez la création:

    image

    Après une trentaine de minutes, les VMs et les services MySQL sont déployés:

    image

    Retournez dans PowerShell ISE et déplacez vous dans le tab Deploy MySql provider. Sélectionnez le script Register-Microsoft.MySql-fqdn.ps1 pour récupérer l’adresse IP public de la VM et créer le DNS associé. Pour ce script, vous devez fournir votre compte Azure AD:

    image

    image

    Pour terminer, lancez le dernier script, Register-Microsoft.MySql-provider.ps1 pour enregistrer votre RP MySQL. Donnez votre compte Azure AD et après, donnez le nom d’utilisateur/mot de passe du RP que vous avez renseigné un peu plus tôt:

    image

    Le RP MySQL est maintenant enregistré:

    image

    Allez dans votre interface Azure Stack, et déplacez vous dans Plans > YourPlan > Settings > Services > Add New. Choisissez le provider Microsoft.MySql:

    image

    Connectez vous avec votre compte utilisateur sur le portail et cliquez sur New > Data + Storage > MySql server/database. Complétez les informations:

    image

    Le déploiement est maintenant terminé:

    image

    Les informations concernant votre DB MySQL:

    image

    Pour vous connecter à cette instance, exécutez la commande suivante:

    mysql.exe -h mysql1.azurestack.local -u florent@mysqldb01 -p

    image

    Amusez vous bien Sourire

    • 5/2/2016

    [Azure Stack] Déployer une extension

    Comme dans la nouvelle version de Azure, il est possible de déployer des extensions tel que BGInfo, DSC, etc. Le seul problème est, que pour le moment, le bouton add n’existe pas. Il faut donc passer par PowerShell. Pour installer BGInfo, exécutez la commande suivante:

    # Add the Microsoft Azure Stack environment
    [net.mail.mailaddress]$AadFullMailAddress="florent@azurelabdvo.onmicrosoft.com"
    $AadTenantId=(Invoke-WebRequest -Uri ('https://login.windows.net/'+($AadFullMailAddress.Host)+'/.well-known/openid-configuration') -UseBasicParsing|ConvertFrom-Json).token_endpoint.Split('/')[3]

    # Configure the environment with the Add-AzureRmEnvironment cmdlt
    Add-AzureRmEnvironment -Name 'Azure Stack' `
        -ActiveDirectoryEndpoint ("https://login.windows.net/$AadTenantId/") `
        -ActiveDirectoryServiceEndpointResourceId "https://azurestack.local-api/"`
        -ResourceManagerEndpoint ("https://api.azurestack.local/") `
        -GalleryEndpoint ("https://gallery.azurestack.local/") `
        -GraphEndpoint "https://graph.windows.net/"

    # Authenticate a user to the environment (you will be prompted during authentication)
    $privateEnv = Get-AzureRmEnvironment 'Azure Stack'
    $privateAzure = Add-AzureRmAccount -Environment $privateEnv -Verbose
    Select-AzureRmProfile -Profile $privateAzure

    Set-AzureRmVMExtension -ExtensionName BGInfo -Publisher Microsoft.Compute -Version 2.1 -ExtensionType BGInfo -Location local -ResourceGroupName Compute -VMName W2012R2 -Verbose

    image

    Et dans l’interface Azure Stack:

    image

    J’ai testé les extensions suivantes:

    • BGInfo
    • DSC
    • VMAccessAgent
    • CustomScriptExtension

    Vous pouvez trouver une liste des extensions ici \\SOFS\CRP\GuestArtifactRepository. A voir si elles fonctionnent toutes.

    • 5/2/2016

    [Azure Stack] Déployer un item personnalisé dans le Market Place

    A partir de l’article suivant, je vais vous expliquer comment importer un item personnalisé dans le Market Place de Azure Stack.

    Pour commencer, créez une image personnalisé avec l’article suivant: http://scug.be/florent/2016/02/04/azure-stack-add-a-custom-image-to-your-library/

    Quand l’image est prête, récupérez les valeurs qui sont dans le manifest, au même endroit que votre VHD:

    image

    Nous pouvons maintenant créer notre Template. Téléchargez l’archive Azure Gallery Packaging Tool and a Sample Gallery Package avant de commencer la création. Ouvrez l’archive et renommer le fichier SimpleVMTemplate par le nom du Template que vous allez mettre dans Azure Stack:

    image

    Maintenant, créez un ARM template ou téléchargez en un depuis GitHub ou bien sur ce Github. Pour ma part, je vais en créer un nouveau, basé sur celui de Windows Server 2012 R2 qui est déjà déployé dans Azure Stack. Remplacez les valeurs de votre Template ARM dans la partie imageReference par les valeurs que vous avez récupéré dans le manifest du VHD:

    "imageReference": {
      "publisher": "FlorentAppointaire",
      "offer": "WindowsServer",
      "sku": "2016-TP4"
    },

    Vous pouvez tester votre Template ARM avant pour être sur qu’il fonctionne sans problème. Sauvegardez votre template dans le dossier DeploymentTemplates:

    image

    Vous pouvez changer les îcones dans le dossier Icons en utilisant des tailles bien spécifiques, disponibles ici. Vous pouvez également modifier les différents textes, dans le fichier strings/resources.json, avec les références suivantes.

    image

    Maintenant, nous allons modifier le manifest. Ouvrez le et modifiez le comme ceci:

    1 – Le même nom que votre nom de dossier
    2 – Le nom du Publisher, sans espace
    3 – La version de votre template
    4 – Le nom du Template que le client verra
    5 – Le nom du Publisher que le client verra
    6 – Le nom du Publisher légal
    7 – Le chemin où le fichier UIDefinition.json est stocké
    8 – Le chemin et le nom de votre Template ARM
    9 – Si vous en avez un second, renseignez le ici
    10 – Le chemin et le nom de chaque icones, small, medium et large sont obligatoires
    11 – Le nom de la catégorie où ce Template sera affiché. Vous pouvez ajouter plusieurs catégories

    image

    Sauvegardez votre fichier et ouvrez un command prompt. Déplacez vous dans le dossier qui contient AzureGalleryPackageGenerator:

    image

    Exécutez la commande suivante, en remplaçant par vos propre valeurs, pour générer un nouveau Template avec l’extension .azpkg:

    AzureGalleryPackager.exe package –m <path to manifest.json> -o <output location for the package>

    Dans mon cas:

    AzureGalleryPackager.exe package -m "C:\Users\flore\Downloads\Azure Stack Marketplace Item Generator and Sample\Azure Stack Marketplace Item\WindowsServer-2016-TP4\manifest.json" -o "C:\Users\flore\Downloads\Azure Stack Marketplace Item Generator and Sample\Azure Stack Marketplace Item"

    image

    Si aucune erreur n’apparait, ouvrez le dossier que vous avez renseigné comme chemin de sorti. Vous avez un nouveau fichier, avec la structure suivante:

    publisher.name.version.azpkg

    image

    Maintenant que nous avons le fichier, il est temps de l’importer dans Azure Stack. Copiez le fichier sur votre vm  ClientVM. Vous devez également avoir un compte administrateur pour l’importer. Assurez-vous également qu’un ResourceGroup est disponible. Pour la paramètre Name, donnez le nom de votre fichier, sans l’extension .azpkg.  Et pour le chemin, donnez le chemin où se trouve le fichier .azpkg. Ouvrez un prompt PowerShell et exécutez le script suivant pour importer la ressource dans la galerie, en l’adaptant avec vos valeurs:

    # Add the Microsoft Azure Stack environment
    [net.mail.mailaddress]$AadFullMailAddress="azurestack@azurelabdvo.onmicrosoft.com"
    $AadTenantId=(Invoke-WebRequest -Uri ('https://login.windows.net/'+($AadFullMailAddress.Host)+'/.well-known/openid-configuration') -UseBasicParsing|ConvertFrom-Json).token_endpoint.Split('/')[3]

    # Configure the environment with the Add-AzureRmEnvironment cmdlt
    Add-AzureRmEnvironment -Name 'Azure Stack' `
        -ActiveDirectoryEndpoint ("https://login.windows.net/$AadTenantId/") `
        -ActiveDirectoryServiceEndpointResourceId "https://azurestack.local-api/"`
        -ResourceManagerEndpoint ("https://api.azurestack.local/") `
        -GalleryEndpoint ("https://gallery.azurestack.local/") `
        -GraphEndpoint "https://graph.windows.net/"

    # Authenticate a user to the environment (you will be prompted during authentication)
    $privateEnv = Get-AzureRmEnvironment 'Azure Stack'
    $privateAzure = Add-AzureRmAccount -Environment $privateEnv -Verbose
    Select-AzureRmProfile -Profile $privateAzure

    # Select an existing subscription where the deployment will take place
    $Subscription = Get-AzureRmSubscription -SubscriptionName "Default Provider Subscription"  | Select-AzureRmSubscription
    $subId = Get-AzureRmSubscription -SubscriptionName "Default Provider Subscription" | Select SubscriptionId

    Add-AzureRMGalleryItem -SubscriptionId $subId.SubscriptionId -ResourceGroup MarketplaceItems -Name FlorentAppointaire.WindowsServer-2016-TP4.1.0.0 -Path C:\Temp\FlorentAppointaire.WindowsServer-2016-TP4.1.0.0.azpkg  -Apiversion "2015-04-01" –Verbose

    image

    Si le déploiement retourne un StatusCode à OK, votre fichier est bien importé. Allez sur https://portal.azurestack.local et dans le Market Place, allez dans la catégorie mentionnée dans le manifest. Vous devriez voir votre nouveau template:

    imageimage

    Ci-dessous, 2 Template que j’ai créé pour Azure Stack:

    Dites-moi si vous en souhaitez d’autres ou si vous avez des remarques/questions Sourire