SQL Server 2008 R2 et sysprep

David BARBARIN

Intégrer une instance SQL Server à une image sysprep relève bien souvent du parcours du combattant pour les administrateurs système jusqu'à SQL Server 2008 R2. Microsoft a rectifié le tir et propose maintenant une intégration rapide et simple d'une instance SQL Server à une image sysprep Windows. ---- Commentez ♪

- Titre : SQL Server 2008 R2 et sysprep

- Auteur : David BARBARIN

- Parution : 17 février 2011

- Licence : Copyright ® 2011 David BARBARIN. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Le cycle d'installation

- III. La problématique avec SQL Server

- IV. Intégration avec sysprep

- IV-A. Limitations

- IV-B. Préinstallation d'une instance SQL Server

- IV-C. Préparation d'une image sysprep

- IV-D. Fin de configuration de l'instance SQL Server

- IV-E. Fin de configuration avec installation silencieuse

- V. Conclusion

- VI. Webographie

- VII. Remerciements

I - Introduction

La standardisation et l'industrialisation des installations de serveurs au sein des équipes IT permettent à ceux-ci une meilleure réactivité vis-à-vis de leurs clients finals. Que peut-on retrouver derrière les mots standardisation et industrialisation ? Tout d'abord il n'est pas rare de parler dans ce contexte de packaging d'installation. Cette méthode permet de définir un certain nombre d'applications qui seront installées par défaut avec le système d'exploitation en se référant à un standard d'entreprise défini (ou template). Celle-ci a l'avantage de minimiser les temps d'installation et de rendre ces dernières quasi automatiques. Ensuite on en vient à la notion de provisionning de serveur. Je me rappelle d'une mission chez un client où l'enjeu était de fournir rapidement les ressources nécessaires (entendez ici un serveur plus une configuration définie par un cahier des charges) aux différentes équipes de développement. Le mot « rapidement » ici prend tout son sens, car il fallait parfois pouvoir délivrer une machine prête à l'emploi dans l'heure qui suivait. Bien entendu ici les installations ne se faisaient pas « from scratch ». Plusieurs images virtuelles étaient utilisées et celles-ci servaient de référence selon la configuration demandée. On pouvait donc se retrouver avec des images virtuelles qui utilisaient sysprep de Windows, Ghost de Norton Ghost ou encore NewSID de sysinternals. Ces utilitaires permettent de donner ou redonner à une machine un identifiant unique sur le réseau (SID). Cependant si cette opération fonctionne parfaitement avec certaines applications, il n'en est pas de même avec SQL Server. Dans bien des cas, il fallait installer le serveur de bases de données après la restauration du système et du renouvellement du SID de la machine, ce qui bien entendu faisait perdre inévitablement du temps. Avec SQL Server 2008 R2 il est maintenant possible d'intégrer une installation d'instance de bases de données à une image sysprep sans interférence avec le renouvellement du SID de la machine. L'avantage ici et vous l'aurez compris est une optimisation de temps et de travail dans le cycle d'installation d'un serveur de bases de données.

II - Le cycle d'installation

Pour commencer, je tiens à clarifier ce que j'appelle un cycle d'installation dans notre contexte. Celui-ci comprend quatre phases :

- Packaging du serveur : on définit ici les applications qui seront installées en standard sur chaque machine ;

- Clone du serveur : une fois le serveur packagé, il suffit d'en faire une copie (ou clone) pour installer d'autres machines ;

- Renouvellement du SID : cette étape est nécessaire pour pouvoir identifier une machine sur le réseau de manière unique ;

- Configuration : cette dernière phase définit les derniers paramétrages ou dernières installations à effectuer avant mise en service de la nouvelle machine.

III - La problématique avec SQL Server

Pourquoi était-il difficile d'intégrer une instance SQL Server à une image sysprep ? Pour répondre à cette question, il faut comprendre ce que fait exactement cet utilitaire. Pourquoi faire un sysprep d'un serveur ? Tout simplement pour préparer une image préinstallée d'une configuration qui sera indépendante de toute architecture physique et logicielle. Une fois que l'image est générée, il est possible de la dupliquer et de s'en servir comme point de départ pour un nouveau système. Sysprep requiert lors du démarrage du nouveau système des étapes de paramétrage (renommage du nom de machine, configuration des paramètres régionaux, clé produite, etc.). Pendant cette phase un nouveau SID est également généré. Cette dernière phase de configuration provoque certains problèmes avec une instance SQL Server.

Tout d'abord le changement de nom d'un serveur d'une machine nécessite que celui-ci soit également répercuté dans l'instance SQL Server (avec les commandes bien connues sp_dropserver et sp_addserver). Ensuite les comptes système tels que SYSTEM et NETWORK SERVICE qui peuvent être utilisés en tant que compte de service pour une instance SQL Server obtiennent un nouvel SID et un nouveau mot de passe. C'est le cas également des groupes locaux créés durant l'installation de SQL Server par exemple MACHINE\SQLServer2005MSSQLUser$MACHINE$MSSQLSERVER (MACHINE est à remplacer ici par le nom du serveur sur lequel se trouve l'instance SQL Server concernée). Ce changement de SID peut provoquer d'autres problèmes avec SQL Server, car certains d'entre eux peuvent être stockés dans la base de données master d'une instance SQL Server et ne sont donc pas renouvelés automatiquement par sysprep. Bien entendu il existe des solutions qui sont plus ou moins fastidieuses à mettre en place en fonction de l'environnement système installé. Dans un contexte de déploiement rapide, celles-ci sont donc à proscrire.

IV - Intégration avec sysprep

Nous avons vu plus haut que l'intégration de SQL Server dans une image sysprep ne se faisait pas sans difficulté. Il était donc plus rapide de préparer une image du système d'exploitation et d'installer SQL Server ensuite. Avec SQL Server 2008 R2, Microsoft offre maintenant la possibilité d'intégrer une instance SQL Server à une image sysprep. La figure suivante montre comment cette intégration s'inscrit dans le cycle d'installation :

La préinstallation de SQL Server ne se fera qu'une seule fois pour une configuration donnée. Seule l'étape de configuration de SQL Server sera exécutée autant de fois qu'il y aura de serveurs à installer.

IV-A - Limitations

L'intégration de SQL Server 2008 R2 dans une image sysprep implique certaines limitations qui sont les suivantes :

- le moteur SQL Server et le serveur de rapport sont les seuls services qui peuvent être intégrés à une image sysprep ;

- les instances SQL Server en cluster ne peuvent pas être installées par le biais de cette méthode ;

- les outils de gestion SQL Server ne peuvent pas être inclus dans une image sysprep ;

- les architectures I64 ne sont pas prises en charge ;

- la réparation d'instance n'est pas supportée. Si un problème se produit pendant une des phases (préinstallation ou configuration), il faut procéder d'abord à une désinstallation ;

- l'intégration de SQL Server dans sysprep ne fonctionne qu'à partir de la version 2008 R2 ;

- le média d'installation doit être disponible durant les deux phases de préinstallation et de configuration.

IV-B - Préinstallation d'une instance SQL Server

La préinstallation d'une instance SQL Server peut s'effectuer de deux manières différentes : soit par l'interface GUI d'installation soit en ligne de commande en utilisant setup.exe avec les paramètres adéquats . J'utiliserai la méthode graphique dans le contexte de l'article : la première action est donc ici de préinstaller une instance SQL Server. Pour cela il faut se rendre dans les options avancées du menu d'installation et choisir l'option Image preparation of a stand-alone instance SQL Server

…

…

La fenêtre de sélection des fonctionnalités à installer permet de choisir celles qui pourront être installées et packagées dans une image sysprep. Comme nous l'avons vu précédemment, il n'y a que le moteur SQL Server et SQL Server Reporting Services qui peuvent être intégrés à une image sysprep.

La fenêtre suivante permet de choisir un numéro d'instance (Instance ID) et l'emplacement d'installation des binaires SQL Server. Ce numéro d'instance ne correspond en rien au nom de la future instance qui sera installée, mais permet en réalité de distinguer de manière unique celles qui sont préinstallées et qui serviront de modèle pour les installations futures.

…

…

…

L'étape de préinstallation est maintenant terminée !!

IV-C - Préparation d'une image sysprep

Nous verrons ici un exemple simple de préparation d'image sysprep avec un serveur Windows Server version 2008 R2. L'avantage d'utiliser une telle version est que l'utilitaire sysprep est directement intégré à l'installation de ce système d'exploitation. Celui-ci se trouve sous C:\Windows\System32\sysprep

L'exécution de sysprep ouvre la fenêtre suivante :

Les paramètres à définir sont les suivants :

- OOBE : cette option permet aux utilisateurs finals de personnaliser leur installation avant le démarrage final du système d'exploitation (langue, paramètres régionaux, etc.).

- Generalize : cette option permet de rendre l'image générée indépendante de toute composante physique. Il faut donc la cocher dans notre cas.

…

Une fois l'image prête le système d'exploitation s'arrête (comportement défini avec l'option shutdown de la fenêtre précédente). Cette dernière servira de référence pour les installations de nouveaux serveurs. Dans un environnement virtuel, il suffit de cloner la machine en dupliquant par exemple les fichiers liés à une machine virtuelle et de les intégrer en tant que nouvelle machine virtuelle. D'autres méthodes existent en fonction de l'application de virtualisation utilisée. Je vous laisse vous référer à vos documentations constructeur. Le but ici est simplement de voir le cycle d'installation avec intégration d'une instance SQL Server.

IV-D - Fin de configuration de l'instance SQL Server

Une fois la machine clonée, il suffit de la redémarrer. Un processus configuration est alors initié et concerne notamment la mise à jour du registre système …

.. Le paramétrage et le démarrage de services Windows

… L'installation et le paramétrage des périphériques propres à la machine physique hôte

… et pour finir un redémarrage de la machine

L'utilisateur final est maintenant invité à personnaliser certains paramètres du système comme la langue, les paramètres régionaux…

… La clé produit du système

…

Il faut ensuite configurer les paramètres réseau et intégrer la nouvelle machine dans le domaine Windows en lui donnant un nom significatif. À ce stade la machine possède déjà un nouveau SID.

…

Après avoir redémarré le serveur nous pouvons maintenant passer à la fin de configuration de notre instance SQL Server. Pour cela un nouveau menu est disponible dans le dossier Configuration Tools > Complete SQL Server 2008 R2 Installation du menu Démarrer. Il est également possible de passer par le média d'installation dans le menu Advanced > Image completion of a prepared stand-alone instance.

…

…

…

La fenêtre de sélection des instances préparées permet de lister l'instance préinstallée précédemment grâce à son identifiant (ID). À noter qu'il est tout à fait possible de préinstaller plusieurs instances sur un même serveur.

Nous retrouvons ensuite les fonctionnalités définies lors de la préinstallation de l'instance SQL Server.

Le reste de la configuration est la même que dans un processus normal d'installation d'instance SQL Server à savoir le choix d'une instance par défaut ou nommée…

… le paramétrage des comptes de service pour le moteur et l'agent SQL server et la collation (si besoin)

…

…

…

…

…

La configuration de l'instance SQL Server est terminée !!

IV-E - Fin de configuration avec installation silencieuse

Dans la section précédente, nous avons vu le processus de préinstallation et de configuration d'une instance SQL Server et ceci de manière graphique. En utilisant un fichier de configuration dans le cadre d'une installation silencieuse, il est encore possible d'accélérer et d'automatiser cette dernière phase de configuration. Dans le cadre de la définition de standards, on pourrait par exemple avoir plusieurs modèles de fichiers que l'on pourrait intégrer dans les différentes images sysprep servant de référence aux nouvelles installations de serveur. Ci-dessous un exemple de fichier de configuration qui pourrait être utilisé :

;SQLSERVER2008 Configuration File
[SQLSERVER2008]

; Specify the Instance ID for the SQL Server features you have specified. SQL Server directory structure, registry structure,
; and service names will reflect the instance ID of the SQL Server instance.
INSTANCEID="SYSPREP"

; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE. This is a required parameter.
ACTION="CompleteImage"

; Displays the command line parameters usage
HELP="False"

; Specifies that the detailed Setup log should be piped to the console.
INDICATEPROGRESS="False"

; Setup will not display any user interface.
QUIET="False"

; Setup will display progress only without any user interaction.
QUIETSIMPLE="False"

; Specifies that Setup should install into WOW64. This command line argument is not supported on an IA64 or a 32-bit system.
X86="False"

; Detailed help for command line argument ENU has not been defined yet.
ENU="True"

; Parameter that controls the user interface behavior. Valid values are Normal for the full UI, and AutoAdvance for a simplied UI.
UIMODE="Normal"

; Specify if errors can be reported to Microsoft to improve future SQL Server releases. Specify 1 or True to enable and 0 or False
; to disable this feature.
ERRORREPORTING="False"

; Specify that SQL Server feature usage data can be collected and sent to Microsoft. Specify 1 or True to enable and 0 or False to
; disable this feature.
SQMREPORTING="False"

; Specify a default or named instance. MSSQLSERVER is the default instance for non-Express editions and SQLExpress for Express editions.
; This parameter is required when installing the SQL Server Database Engine (SQL), Analysis Services (AS), or Reporting Services (RS).
INSTANCENAME="MSSQLSERVER"

; Agent account name
AGTSVCACCOUNT="TESTLLAB\sql2k8svcaccount"
AGTSVCPASSWORD = "RJ5p-Gp"

; Auto-start service after installation.
AGTSVCSTARTUPTYPE="Manual"

; A port number used to connect to the SharePoint Central Administration web application.
FARMADMINPORT="0"

; Startup type for the SQL Server service.
SQLSVCSTARTUPTYPE="Automatic"

; Level to enable FILESTREAM feature at (0, 1, 2 or 3).
FILESTREAMLEVEL="0"

; Set to "1" to enable RANU for SQL Server Express.
ENABLERANU="False"

; Specifies a Windows collation or an SQL collation to use for the Database Engine.
SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS"

; Account for SQL Server service: Domain\User or system account.
SQLSVCACCOUNT="TESTLLAB\sql2k8svcaccount"
SQLSVCPASSWORD = "RJ5p-Gp"

; Windows account(s) to provision as SQL Server system administrators.
SQLSYSADMINACCOUNTS="TESTLLAB\SQL Server 2008 Admins"

; The default is Windows Authentication. Use "SQL" for Mixed Mode Authentication.
SECURITYMODE="SQL"
SAPWD="RJ5p-Gp"

; Default directory for the Database Engine backup files.
SQLBACKUPDIR="E:\MSSQL\BACKUP"

; Default directory for the Database Engine user databases.
SQLUSERDBDIR="E:\MSSQL\DATA"

; Default directory for the Database Engine user database logs.
SQLUSERDBLOGDIR="E:\MSSQL\LOG"

; Directory for Database Engine TempDB files.
SQLTEMPDBDIR="E:\MSSQL\DATA"

; Directory for the Database Engine TempDB log files.
SQLTEMPDBLOGDIR="E:\MSSQL\LOG"

; Specify 0 to disable or 1 to enable the TCP/IP protocol.
TCPENABLED="1"

; Specify 0 to disable or 1 to enable the Named Pipes protocol.
NPENABLED="0"

; Startup type for Browser Service.
BROWSERSVCSTARTUPTYPE="Disabled"

Notez dans le fichier de configuration la section ACTION="CompleteImage" qui permet de gérer les scénarios d'intégration du serveur de bases de données dans une image sysprep. On peut utiliser ce fichier de configuration avec la commande setup.exe. L'ensemble peut être encapsulé dans un fichier de commande .bat de la façon suivante :

setup.exe /Q /CONFIGURATIONFILE=configurationfile.ini

La phase de préconfiguration d'une instance SQL peut également être automatisée en utilisant le paramètre ACTION= "PrepareImage" et les paramètres supplémentaires adéquats.

V - Conclusion

L'intégration de SQL Server avec sysprep facilite les déploiements de serveurs de bases de données. Cependant si cette fonctionnalité est intéressante dans un contexte de développement où les demandes peuvent être diverses et nombreuses on peut se demander si cette méthode présente un avantage réel dans un contexte de production où une configuration plus affinée est souvent nécessaire. Je vous laisse juge…

VI - Webographie

- Msdn

- Technet

VII - Remerciements

Merci à ma fiancée Patricia pour sa relecture.