<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Chanliau Gauthier - Blog</title>
	
	<link>http://blog.chanliau.fr</link>
	<description>My personal technical blog about Information Technology</description>
	<lastBuildDate>Sat, 04 Jun 2011 14:43:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Chanliau" /><feedburner:info uri="chanliau" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Active Directory/Powershell: Delegation et liste de controle d’acces</title>
		<link>http://feedproxy.google.com/~r/Chanliau/~3/NOr5h5FNn5E/</link>
		<comments>http://blog.chanliau.fr/2011/06/active-directorypowershell-delegation-et-liste-de-controle-dacces/#comments</comments>
		<pubDate>Sat, 04 Jun 2011 14:21:25 +0000</pubDate>
		<dc:creator>Gauthier</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://blog.chanliau.fr/?p=418</guid>
		<description><![CDATA[Peu de documentation en Français, mais cependant, pas mal d&#8217;explications sur MSDN, notamment concernant la classe &#34;ActiveDirectoryAccessRule&#34;&#160; permettant la délégation d&#8217;Active Directory/gestion des permissions en .NET (et donc en PowerShell).
&#160;
DACL/SACL &#38; ACE ?
Avant de rentrer dans le vif du sujet, il est important de bien comprendre les listes d&#8217;accès Active Directory. Une liste de contrôle [...]]]></description>
			<content:encoded><![CDATA[<p>Peu de documentation en Français, mais cependant, pas mal d&#8217;explications sur MSDN, notamment concernant la classe &quot;<a href="http://msdn.microsoft.com/fr-fr/library/system.directoryservices.activedirectoryaccessrule.aspx">ActiveDirectoryAccessRule</a>&quot;&#160; permettant la délégation d&#8217;Active Directory/gestion des permissions en .NET (et donc en PowerShell).</p>
<p>&#160;</p>
<h3>DACL/SACL &amp; ACE ?</h3>
<p>Avant de rentrer dans le vif du sujet, il est important de bien comprendre les listes d&#8217;accès Active Directory. Une liste de contrôle d&#8217;accès (ACL) est une liste d&#8217;entrées de contrôle d&#8217;accès (ACE). Chaque ACE dans une ACL identifie un &quot;<a href="http://msdn.microsoft.com/en-us/library/aa379637(v=vs.85).aspx">trustee</a>&quot; (Un compte utilisateur, un groupe, ou une session sur lequel un accès de controle (ACE) s&#8217;applique) et précise les droits d&#8217;accès autorisés, refusés ou vérifiés pour l&#8217;administrateur. Le descripteur de sécurité (security descriptor) pour un objet sécurisé peut contenir deux types d&#8217;ACL: une DACL et une SACL.</p>
<p>Une DACL (<em>Discretionary access control list</em>) identifie les &quot;trustees&quot; qui sont autorisés ou non à accéder à un objet. Quand un processus essaie d&#8217;accéder à un objet, le système vérifie l&#8217;ACE dans la DACL de l&#8217;objet pour déterminer s&#8217;il faut accorder l&#8217;accès. Si l&#8217;objet n&#8217;a pas de DACL, le système autorise l&#8217;accès complet à tout le monde. Si la DACL de l&#8217;objet n&#8217;a pas de ACE, le système refuse toutes les tentatives pour accéder à l&#8217;objet parce que la DACL ne permet pas de droits d&#8217;accès. Le système vérifie l&#8217;ACE dans l&#8217;ordre jusqu&#8217;à ce qu&#8217;il trouve une ou plusieurs entrées de contrôle qui permettent à tous les droits d&#8217;accès requis, ou jusqu&#8217;à ce que l&#8217;un des droits d&#8217;accès demandé soit refusé. </p>
<p>Une SACL (<em>System access control list</em>) permet aux administrateurs de logger les tentatives d&#8217;accéder à un objet. Chaque ACE précise les types de tentatives d&#8217;accès par un &quot;trustee&quot; qui a causé la génération d&#8217;un enregistrement dans le journal des évènements de sécurité. Une ACE dans une liste SACL peut générer des enregistrements d&#8217;audit lors d&#8217;une tentative d&#8217;accès échoue, quand elle réussit, ou les deux. </p>
<p>Rentrons maintenant dans le sujet, jouons avec <strong>les droits standard</strong>, les <strong>droits étendus</strong>, ou les <strong>droits spécifiques</strong>. Pour l&#8217;affection de droits, la classe System.DirectoryServices.ActiveDirectoryAccessRule sera utilisé. Commençons par découvrir les constructeurs. Si vous êtes allergique à MSDN, utilisons la commande suivante: </p>
<pre class="brush: ps">[System.DirectoryServices.ActiveDirectoryAccessRule].GetConstructors()</pre>
<p><a href="http://blog.chanliau.fr/wp-content/uploads/2011/06/img1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="img1" border="0" alt="img1" src="http://blog.chanliau.fr/wp-content/uploads/2011/06/img1_thumb.png" width="999" height="219" /></a></p>
<p>&#160;</p>
<h3>Les droits standards</h3>
<p>Commençons par les droits standards, en récupérant le SID de l&#8217;utilisateur qui recevra la délégation: </p>
<pre class="brush: ps">
$Login = &quot;Utilisateur-Test&quot;   
$NTAccount = New-Object system.security.principal.ntaccount($Login)    
$SID = $NTAccount.translate([system.security.principal.securityidentifier])
</pre>
<p>Ajoutons maintenant les droits AD en utilisant le constructeur:</p>
<pre class="brush: ps">
.ctor(    
&#160;&#160;&#160; System.Security.Principal.IdentityReference    
&#160;&#160;&#160; System.DirectoryServices.ActiveDirectoryRights    
&#160;&#160;&#160; System.Security.AccessControl.AccessControlType    
)
</pre>
<p>Spécifions les droits a ajouter et spécifions le type d&#8217;accès   </p>
<pre class="brush: ps">
$rights = &quot;GenericAll&quot;    
$AccessType = &quot;Allow&quot;
</pre>
</p>
<p>Ajoutons les droits et sauvegardons l&#8217;objet    </p>
<pre class="brush: ps">
$root = [adsi]&quot;LDAP://RootDSE&quot;    
$OU = [adsi]&quot;LDAP://ou=OU-Test,&quot;+$root.distinguishedName    
$ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($SID, $rights, $AccessType)    
$OU.psbase.get_objectsecurity().AddAccessRule($ace)    
$OU.psbase.CommitChanges()
</pre>
</p>
<p>&#160;</p>
<h3>Les droits étendus </h3>
<p>Passons maintenant aux droits étendus ainsi qu&#8217;aux droits spécifiques, nous allons utiliser le constructeur suivant:   </p>
<pre class="brush: ps">
.ctor(    
&#160;&#160;&#160; System.Security.Principal.IdentityReference    
&#160;&#160;&#160; System.DirectoryServices.ActiveDirectoryRights    
&#160;&#160;&#160; System.Security.AccessControl.AccessControlType    
&#160;&#160;&#160; System.Guid    
&#160;&#160;&#160; System.DirectoryServices.ActiveDirectorySecurityInheritance    
)
</pre>
</p>
<p>Pour les droits étendus, il est nécessaire de récupérer le GUID du droit (stocké dans la partition de configuration) stocké dans l&#8217;attribut &quot;rightsGUID&quot;. Pour ce faire, je vous propose la fonction suivante:    </p>
<pre class="brush: ps">
function Get-RightsGUID    
{    
&#160;&#160;&#160; Param ($ExtendedRight, $dse)    
&#160;&#160;&#160; 
&#160;&#160;&#160; $ER = [adsi](&quot;LDAP://cn=Extended-Rights,&quot;+$dse.configurationNamingContext)    
&#160;&#160;&#160; $OU = [adsi](&quot;LDAP://cn=&quot;+$ExtendedRight+&quot;,&quot;+$ER.distinguishedName)    
&#160;&#160;&#160; [system.guid]$guid = $OU.rightsGUID    
&#160;&#160;&#160; return $guid.ToString()    
}
</pre>
</p>
<p>Pour l&#8217;utiliser :    </p>
<pre class="brush: ps">
$guid = Get-RightsGUID &quot;Change-PDC&quot; $root
</pre>
</p>
<p>Même principe que précédemment pour les droits standards:   </p>
<pre class="brush: ps">
$Login = &quot;Utilisateur-Test&quot;    
$NTAccount = New-Object system.security.principal.ntaccount($Login)    
$Rights = &quot;ExtendedRight&quot;    
$AccessType = &quot;Allow&quot;    
$Inherit = [System.DirectoryServices.ActiveDirectorySecurityInheritance]&quot;All&quot;    
$ace&#160;&#160;&#160; = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($NTAccount, $Rights, $AccessType, $guid, $Inherit)    
$OU.psbase.get_objectSecurity().AddAccessRule($ace)    
$OU.psbase.CommitChanges()
</pre>
</p>
<p>&#160;</p>
<h3>Les droits spécifiques</h3>
<p>Pour les droits spécifiques, il est nécessaire de récupérer le GUID du droit (stocké dans la partition &quot;schéma&quot;) stocké dans l&#8217;attribut &quot;schemaIDGUID&quot;. Pour ce faire, je vous propose la fonction suivante:   </p>
<pre class="brush: ps">
function get-schemaGUID    
{    
&#160;&#160;&#160; Param ($OU, $dse)

&#160;&#160;&#160; $obj = [adsi]&quot;LDAP://cn=&quot;+$OU+&quot;,&quot;+$dse.schemaNamingContext   
&#160;&#160;&#160; [system.guid]$guid = $obj.schemaIDGUID[0]    
&#160;&#160;&#160; return $guid.ToString()    
}
</pre>
</p>
<p>&#160;</p>
<p>Pour l&#8217;utiliser:    </p>
<pre class="brush: ps">
$guid = get-schemaGUID &quot;computer&quot; $root
</pre>
</p>
<p>Même principe que précédemment:   </p>
<pre class="brush: ps">
$Login = &quot;Utilisateur-Test&quot;    
$NTAccount = New-Object system.security.principal.ntaccount($Login)    
$Rights = “ReadProperty, WriteProperty”    
$AccessType = &quot;Allow&quot;    
$Inherit = [System.DirectoryServices.ActiveDirectorySecurityInheritance]&quot;All&quot;    
$ace&#160;&#160;&#160; = New-Object System.DirectoryServices.ActiveDirectoryAccessRule($NTAccount, $Rights, $AccessType, $guid, $Inherit)    
$OU.psbase.get_objectSecurity().AddAccessRule($ace)    
$OU.psbase.CommitChanges()
</pre>
</p>
<p>&#160;</p>
<p>Voila qui conclu cette introductions aux ACL Active Directory. Vous trouverez plus d&#8217;informations sur la gestion de l&#8217;Active Directory en .NET sur <a href="http://msdn.microsoft.com/fr-fr/magazine/cc188700(en-us).aspx">MSDN</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chanliau.fr/2011/06/active-directorypowershell-delegation-et-liste-de-controle-dacces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.chanliau.fr/2011/06/active-directorypowershell-delegation-et-liste-de-controle-dacces/</feedburner:origLink></item>
		<item>
		<title>Outlook, overquota &amp; Powershell</title>
		<link>http://feedproxy.google.com/~r/Chanliau/~3/5q4oBfUVY30/</link>
		<comments>http://blog.chanliau.fr/2010/01/outlook-overquota-powershell/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 00:44:25 +0000</pubDate>
		<dc:creator>Gauthier</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Outlook]]></category>
		<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://blog.chanliau.fr/?p=388</guid>
		<description><![CDATA[On a tous un jour ou l&#8217;autre été confronté à  un problème de quota. Même si Exchange 2010 apporte des BAL plus larges dû aux coûts de stockages réduits, faire du tri dans sa boite aux lettres relève du calvaire. Pour ajouter à ça, il arrive bien souvent qu&#8217;on veuille supprimer une pièce jointe, [...]]]></description>
			<content:encoded><![CDATA[<p>On a tous un jour ou l&#8217;autre été confronté à  un problème de quota. Même si Exchange 2010 apporte des BAL plus larges dû aux coûts de stockages réduits, faire du tri dans sa boite aux lettres relève du calvaire. Pour ajouter à ça, il arrive bien souvent qu&#8217;on veuille supprimer une pièce jointe, mais conserver un mail&#8230;fonctionnalité non disponible sous Outlook<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2010/01/Outlook-Delete-Attachment.jpg"><img class="alignnone size-full wp-image-394" title="Outlook-Delete-Attachment" src="http://blog.chanliau.fr/wp-content/uploads/2010/01/Outlook-Delete-Attachment.jpg" alt="Outlook-Delete-Attachment" width="583" height="255" /></a></p>
<p>Pour palier à ça, je vous propose un script permettant de &laquo;&nbsp;dumper&nbsp;&raquo; dans un répertoire les fichiers plus gros qu&#8217;une taille définie, et de les supprimer du mail qui les contient, sans supprimer le mail en question.</p>
<p>Côté serveur en utilisant la console MMC Exchange Management Shell, les informations récupérées sont assez peu convaincantes, et surtout trop peu complètes pour pouvoir être exploitées.<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2010/01/GetMailboxFolderStats.jpg"><img class="alignnone size-full wp-image-392" title="GetMailboxFolderStats" src="http://blog.chanliau.fr/wp-content/uploads/2010/01/GetMailboxFolderStats.jpg" alt="GetMailboxFolderStats" width="656" height="196" /></a></p>
<p>L&#8217;avantage des produits Microsoft sont les synergies possibles entre ceux ci. Exploiter Outlook via Powershell est d&#8217;une simplicité déconcertante.</p>
<pre class="brush: ps">param(
    [int]$MaxSize = $(throw "Please specify size of max file"),
    [string] $DeleteAttachedFiles = $false
    )

# Attached files will be saved in this folder
$AttachmentsFolder = "C:\tmp\"

# Check folder existence
if (-not (test-path $AttachmentsFolder) )
{
    New-Item -ItemType Directory $AttachmentsFolder | out-null
}

# Attached files list
$ResultList = @()

# Create an outlook object
$OutlookObj = New-Object -ComObject Outlook.Application
$objNamespace = $OutlookObj.GetNamespace("MAPI")
$objFolder = $objNamespace.GetDefaultFolder(6)

# Get all items
$Items = $objFolder.Items 

# Items - Loop
foreach ($item in $Items)
{
    # Check if any file is attached
    if ($item.Attachments) { 

        # Attachments - Loop
        $item.Attachments | % {
            $FileName = $_.FileName
            $SavedName = join-path $AttachmentsFolder $FileName

            # Check size
            if( $($_.size) -ge $MaxSize )
            {
                # Save file
                $_.SaveAsFile($SavedName)

                $Result = new-Object -typename System.Object
                $Result | add-Member -memberType noteProperty -name "Subject" $Subject
                $Result | add-Member -memberType noteProperty -name "FileName" $FileName
                $Result | add-Member -memberType noteProperty -name "Size (Mb)" $(($_.size/1mb).tostring("0.000"))
                $ResultList += $Result

                if ($DeleteAttachedFiles -eq $true)
                {
                    # Delete attachment
                    $_.delete()
                    $item.save()
                    write-host "[Deleted] [$Subject] [$(($_.size).tostring("0.000"))] $FileName"
                }   

            }

        }
    }
}

# Close Outlook
$OutlookObj.quit()

$ResultList | sort size</pre>
<p>Une bride d&#8217;explications, l&#8217;objet <strong>$item</strong> est le mail en court de traitement, cet objet possède la propriété <strong>&laquo;&nbsp;Attachments&nbsp;&raquo; </strong>qui renvoie les pièces jointes du message. Les objets pièces jointes peuvent ensuite être utilisées en utilisant les méthodes <strong>&laquo;&nbsp;SaveAsFile&nbsp;&raquo;</strong> ou <strong>&laquo;&nbsp;Delete&nbsp;&raquo;</strong><br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2010/01/Attachments-GetMember1.jpg"><img class="alignnone size-full wp-image-400" title="Attachments-GetMember" src="http://blog.chanliau.fr/wp-content/uploads/2010/01/Attachments-GetMember1.jpg" alt="Attachments-GetMember" width="588" height="230" /></a></p>
<p>Une fois la pièce jointe supprimée du message, regardons les méthodes disponibles pour cet objet:</p>
<p><a href="http://blog.chanliau.fr/wp-content/uploads/2010/01/Item-Get-Member1.jpg"><img class="alignnone size-full wp-image-401" title="Item-Get-Member" src="http://blog.chanliau.fr/wp-content/uploads/2010/01/Item-Get-Member1.jpg" alt="Item-Get-Member" width="549" height="239" /></a></p>
<p>La méthode <strong>&laquo;&nbsp;Save&nbsp;&raquo;</strong> permet de faire ça!</p>
<p>Le script accepte deux paramêtres:<br />
- La taille au dessus de laquelle les fichiers seront dumpés<br />
- Le paramètre de suppression (non mandatory), par default défini à  $false. Si ce paramètre n&#8217;est pas défini, le script n&#8217;effectuera que le dump des fichiers, et ne les supprimeras pas de la boite aux lettres.</p>
<p><strong><span style="text-decoration: underline;">Exemple 1:</span></strong><br />
script.ps1 2mb -&gt; Dumperas les fichiers, aucune suppression</p>
<p><a href="http://blog.chanliau.fr/wp-content/uploads/2010/01/Example1.png"><img class="alignnone size-full wp-image-390" title="Example1" src="http://blog.chanliau.fr/wp-content/uploads/2010/01/Example1.png" alt="Example1" width="580" height="90" /></a></p>
<p><span style="text-decoration: underline;"><strong>Exemple 2:</strong></span><br />
script.ps1 2mb $true -&gt; Dumperas les fichiers, et supprimera les pièces jointes<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2010/01/Example2.png"><img class="alignnone size-full wp-image-391" title="Example2" src="http://blog.chanliau.fr/wp-content/uploads/2010/01/Example2.png" alt="Example2" width="659" height="141" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chanliau.fr/2010/01/outlook-overquota-powershell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.chanliau.fr/2010/01/outlook-overquota-powershell/</feedburner:origLink></item>
		<item>
		<title>Gestion des groupes Active Directory en Powershell</title>
		<link>http://feedproxy.google.com/~r/Chanliau/~3/4wF3rzswG1o/</link>
		<comments>http://blog.chanliau.fr/2009/11/gestion-des-groupes-active-directory-en-powershell/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 10:12:09 +0000</pubDate>
		<dc:creator>Gauthier</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[PowerShell]]></category>

		<guid isPermaLink="false">http://blog.chanliau.fr/?p=356</guid>
		<description><![CDATA[La gestion des groupes AD est assez simple en Powershell, et la synthaxe assez proche de celle qu&#8217;on pouvait trouver en VBS. Pour effectuer une requête LDAP sur un objet AD, il suffit de recuperer son Distringuished Name (DN)
$DNGroup = [Completer]
$dom = New-Object DirectoryServices.DirectoryEntry("LDAP://$DNGroup")

Les méthodes de l&#8217;objet $dom peuvent maintenant etre utilisées:
$dom &#124; get-member

Il est [...]]]></description>
			<content:encoded><![CDATA[<p>La gestion des groupes AD est assez simple en Powershell, et la synthaxe assez proche de celle qu&#8217;on pouvait trouver en VBS. Pour effectuer une requête LDAP sur un objet AD, il suffit de recuperer son Distringuished Name (DN)</p>
<pre class="brush: ps">$DNGroup = [Completer]
$dom = New-Object DirectoryServices.DirectoryEntry("LDAP://$DNGroup")</pre>
<p><img src="http://blog.chanliau.fr/wp-content/uploads/2009/11/AD1.png" alt="" width="651" height="133" /></p>
<p>Les méthodes de l&#8217;objet $dom peuvent maintenant etre utilisées:</p>
<pre class="brush: ps">$dom | get-member</pre>
<p><img src="http://blog.chanliau.fr/wp-content/uploads/2009/11/AD2" alt="" width="600" height="194" /></p>
<p>Il est maintenant assez facile de lister les membres</p>
<pre class="brush: ps">$dom.member</pre>
<p><img src="http://blog.chanliau.fr/wp-content/uploads/2009/11/AD3.png" alt="" width="538" height="38" /></p>
<p>Pour ajouter un utilisateur, il faut maintenant utiliser la methode add en passant en parametre le distringuishedName de l&#8217;utilisateur. Voila ce que ça donne</p>
<pre class="brush: ps">$dom.member.Add($DNUser)
$dom.setInfo()</pre>
<p><img src="http://blog.chanliau.fr/wp-content/uploads/2009/11/AD4.png" alt="AD4" width="468" height="76" /></p>
<p>Dans le cas d&#8217;une connexion Ã  un domaine non trusté. Il est nécessaire de recupérer les credentials de l&#8217;utilisateur</p>
<pre class="brush: ps">$cred = get-credential</pre>
<p><img src="http://blog.chanliau.fr/wp-content/uploads/2009/11/AD5.png" alt="AD5" width="322" height="251" /></p>
<p>Notre mot de passe est maintenant chiffré, mais la création d&#8217;un objet directory entry nécessite que le mot de passes ne soit pas chiffré. Pas de probleme, powershell fournis une méthode pour le faire</p>
<pre class="brush: ps">$pwd = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($cred.Password))</pre>
<p>Et maintenant, il ne reste plus qu&#8217;à  recreer l&#8217;objet directory entry en passant en parametre, la chaine ldap, le username ainsi que le mot de passe</p>
<pre class="brush: ps">$dom = New-Object DirectoryServices.DirectoryEntry("LDAP://$domain/$DNGroup",$cred.UserName,$pwd)</pre>
<p>Considérons maintenant que nous nous trouvons dans un domaine (DomaineA) et un autre domaine, qui sera trusté (DomaineB). Admettons maintenant que nous souhaitions ajouter dans un groupe de DomaineA, un utilisateur de DomaineB. Si nous utilisons la méthode vu plus haut</p>
<pre class="brush: ps">$dom.member.Add($DNUser)
$dom.setInfo()</pre>
<p><img src="http://blog.chanliau.fr/wp-content/uploads/2009/11/AD6.png" alt="" width="600" height="76" /></p>
<p>Lors du setinfo une erreur se produira, car il n&#8217;est pas possible d&#8217;ajouter une utilisateur d&#8217;un domaine étranger en passant son DN.</p>
<p>Il est nécessaire de passer par son SID. Pour recuperer le SID d&#8217;un utilisateur, il faut faire comme suit:</p>
<pre class="brush: ps">$User = "Domaine\Utilisateur"
$AccountSID = ((New-Object System.Security.Principal.NTAccount($User)).Translate([System.Security.Principal.SecurityIdentifier])).Value</pre>
<p>Une fois le SID recupéré, il est maintenant possible de l&#8217;ajouter dans le groupe en forgeant sa chaine ldap comme suit :</p>
<pre class="brush: ps">$LDAP = "LDAP:// &lt; SID=$AccountSID&gt;"
$dom.member.Add($LDAP)
$dom.setInfo()</pre>
<p><img src="http://blog.chanliau.fr/wp-content/uploads/2009/11/AD8.png" alt="" width="600" height="146" /></p>
<p>Et voila qui conclu pour cet article sur la gestion des groupes AD en powershell</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chanliau.fr/2009/11/gestion-des-groupes-active-directory-en-powershell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.chanliau.fr/2009/11/gestion-des-groupes-active-directory-en-powershell/</feedburner:origLink></item>
		<item>
		<title>PowerShell, WPF et MSChart</title>
		<link>http://feedproxy.google.com/~r/Chanliau/~3/aZtK6DDRHhY/</link>
		<comments>http://blog.chanliau.fr/2009/08/powershell-wpf-et-mschart/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 14:54:21 +0000</pubDate>
		<dc:creator>Gauthier</dc:creator>
				<category><![CDATA[MSChart]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://blog.chanliau.fr/?p=314</guid>
		<description><![CDATA[PowerShell Ã©tant basÃ© sur le Framework .NET il est possible d&#8217;utiliser Microsft Chart Controls directement en important les assemblies adaptÃ©es. L&#8217;objectif Ã©tant lors d&#8217;automatisation de tÃ¢ches de pouvoir grapher les rÃ©sultats les rendant ainsi beaucoup plus lisibles.
Le but Ã©tant de pouvoir gÃ©nÃ©rer des graphs de ce type

Ce dont on a besoinÂ :

 PowerShell V1 (ou [...]]]></description>
			<content:encoded><![CDATA[<p>PowerShell Ã©tant basÃ© sur le Framework .NET il est possible d&#8217;utiliser Microsft Chart Controls directement en important les assemblies adaptÃ©es. L&#8217;objectif Ã©tant lors d&#8217;automatisation de tÃ¢ches de pouvoir grapher les rÃ©sultats les rendant ainsi beaucoup plus lisibles.</p>
<p>Le but Ã©tant de pouvoir gÃ©nÃ©rer des graphs de ce type<br />
<img src="http://blog.chanliau.fr/wp-content/uploads/2009/08/grouping2-b1.png" width="114" height="80" /><img src="http://blog.chanliau.fr/wp-content/uploads/2009/08/fastpoint1.png" width="109" height="80" /><img src="http://blog.chanliau.fr/wp-content/uploads/2009/08/customattributes1.png" width="118" height="80" /></p>
<p>Ce dont on a besoinÂ :</p>
<ul class="unIndentedList">
<li> PowerShell V1 (ou supÃ©rieur)</li>
<li> Framework .NET 3.5</li>
<li> Microsoft Chart Controls</li>
</ul>
<p>PremiÃ¨re Ã©tape, on importe les assemblies</p>
<pre class="brush: ps">[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization")</pre>
<p>Pour gÃ©nÃ©rer notre graph nous allons simuler un traitement par lot ayant retournÃ© des codes retours de 3 types: OK, ERROR, UNKNOW</p>
<pre class="brush: ps">$nbError = random(1..10)
$nbOK = random(1..3)
$nbUnknow = random(1..10)

$labelError = "Erreur ("+$nbError.toString()+")"
$labelOK = "OK ("+$nbOK.toString()+")"
$labelUnknow = "Unknow ("+$nbUnknow.toString()+")"</pre>
<p>Nous crÃ©ons une liste contenant nos labels ainsi que le nombre qui lui est associÃ© en fonction de son type</p>
<pre class="brush: ps">$resultList = @{$labelError=$nbError.toString();
$labelOK=$nbOK.toString();
$labelUnknow=$nbUnknow.toString(); }</pre>
<p>Nous crÃ©ons maintenant l&#8217;objet graph et dÃ©finissons sa taille</p>
<pre class="brush: ps">$Chart = New-object System.Windows.Forms.DataVisualization.Charting.Chart
$Chart.Width = 500
$Chart.Height = 400
$Chart.Left = 50
$Chart.Top = 30</pre>
<p>On crÃ©e ensuite un <em>chartarea</em> dans lequel on ajoutera le graph</p>
<pre class="brush: ps">$ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
$Chart.ChartAreas.Add($ChartArea)</pre>
<p>On ajoute les donnÃ©es du graph Ã  partir de la liste</p>
<pre class="brush: ps">[void]$Chart.Series.Add("Data")
$Chart.Series["Data"].Points.DataBindXY($resultList.Keys, $resultList.Values)</pre>
<p>On dÃ©finit le type de graph</p>
<pre class="brush: ps">$Chart.Series["Data"].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::Pie</pre>
<p>On dÃ©finit ensuite les couleurs pour les donnÃ©es du Â graph. Par exemple ici, nous dÃ©finissons que la valeur minimum sera en rouge (et max en bleu) en utilisant la mÃ©thode <em>FindMinByValue </em><em>FindMaxByValue)</em></p>
<pre class="brush: ps">$maxValuePoint = $Chart.Series["Data"].Points.FindMaxByValue()
$maxValuePoint.Color = [System.Drawing.Color]::lightblue
$minValuePoint = $Chart.Series["Data"].Points.FindMinByValue()
$minValuePoint.Color = [System.Drawing.Color]::Red</pre>
<p>On dÃ©finit les options du graph</p>
<pre class="brush: ps">$Chart.Series["Data"]["PieLabelStyle"] = "Outside"
$Chart.Series["Data"]["PieLineColor"] = "Black"
$Chart.Series["Data"]["PieDrawingStyle"] = "Concave"
($Chart.Series["Data"].Points.FindMaxByValue())["Exploded"] = $true</pre>
<p>Pour afficher le graph, il est nÃ©cessaire de crÃ©er un objet de type <em>Windows.Form.Form</em> dans lequel on ajoutera l&#8217;objet graph</p>
<pre class="brush: ps">$Form = New-Object Windows.Forms.Form
$Form.Text = "Powershell/MSChart"
$Form.Width = 600
$Form.Height = 500
$Form.controls.add($Chart)
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog()</pre>
<p>Et voila le rÃ©sultat</p>
<p><img class="alignnone size-full wp-image-327" title="mschart1" src="http://blog.chanliau.fr/wp-content/uploads/2009/08/mschart1.jpg" alt="mschart1" width="480" height="400" /></p>
<p>Pour plus d&#8217;informations sur MSChart je viens invite a visiter cette <a href="http://code.msdn.microsoft.com/mschart">page </a>ou vous pourrez aussi trouver des samples (vbs/C#)</p>
<h2>Appeler des fonctions PowerShell depuis du WPF</h2>
<p>De la mÃªme faÃ§on, il est possible d&#8217;utiliser du WPF depuis PowerShell en important les assemblies adaptÃ©es. Dans cet exemple nous allons crÃ©er un mini <em>Task-Manager</em> permettant d&#8217;afficher les ressources utilisÃ©es par un processus.</p>
<p>On importe l&#8217;assembly</p>
<pre class="brush: ps">[Reflection.Assembly]::LoadWithPartialName("PresentationFramework")</pre>
<p>Il est nÃ©cessaire de crÃ©er une interface en XAML pour notre interface, Expression blend est parfait pour faire Ã§a<br />
<img class="alignnone size-full wp-image-328" title="xaml1" src="http://blog.chanliau.fr/wp-content/uploads/2009/08/xaml1.png" alt="xaml1" width="480" height="363" /></p>
<p>On stocke le code XAML gÃ©nÃ©rÃ© par blend</p>
<pre class="brush: ps">$xaml = [xml]'

Selectionner un process

'</pre>
<p>On rÃ©cupÃ¨re la liste des processus en cours d&#8217;exÃ©cution. Pour simplifier la suite du code, je fais fi des doublons en utilisant le pipe <em>unique</em></p>
<pre class="brush: ps">$Processes = Get-Process | unique | Sort-Object -Property WS | Select-Object Name,WS,ID
$ProcNames = @(foreach($Proc in $Processes){$Proc.Name})</pre>
<p>On utilise le code XAML pour crÃ©er notre fenÃªtre</p>
<pre class="brush: ps">$XAML=(New-Object System.Xml.XmlNodeReader $xaml)
$XAMLR=[Windows.Markup.XamlReader]::Load($XAML)</pre>
<p>On bind nos variables</p>
<pre class="brush: ps">$PR = $Form.FindName('ComBoxProcess')
$OU = $Form.FindName('TextBoxProcess')</pre>
<p>On itÃ©re sur les processus pour les ajouter Ã  notre liste</p>
<pre class="brush: ps">foreach ($row in $ProcNames) {
[void]$PR.Items.Add($row)
}</pre>
<p>On utilise la mÃ©thode <em>add_SelectionChanged </em> pour que lorsque qu&#8217;un processus diffÃ©rent est sÃ©lectionnÃ©, le <em>TextForm</em> soit actualisÃ© avec les bonnes donnÃ©es.</p>
<pre class="brush: ps">$PR.add_SelectionChanged({
$OU.clear()
$Proc = Get-Process -Name $PR.SelectedItem | unique
$disp = (($Proc.WS)/1MB).tostring()
$disp +=" MB"+[environment]::NewLine
$disp += ($Proc.Handles).tostring()
$disp +=" Handles"+[environment]::NewLine
$OU.AppendText($disp)
})</pre>
<p>Et enfin, on afficheÂ !</p>
<pre class="brush: ps">[void]$XAMLR.ShowDialog()</pre>
<p>Et voila le rÃ©sultat<br />
<img class="alignnone size-full wp-image-329" title="wpf" src="http://blog.chanliau.fr/wp-content/uploads/2009/08/wpf.png" alt="wpf" width="200" height="200" /><br />
Voila pour cette introduction aux interfaces et au graph au travers de Powershell, dans un prochain billet, je reviendrais plus en dÃ©tail sur les synergies .NET/Powershell</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chanliau.fr/2009/08/powershell-wpf-et-mschart/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://blog.chanliau.fr/2009/08/powershell-wpf-et-mschart/</feedburner:origLink></item>
		<item>
		<title>SharePoint Server 2010</title>
		<link>http://feedproxy.google.com/~r/Chanliau/~3/yNz5nraRBrM/</link>
		<comments>http://blog.chanliau.fr/2009/05/sharepoint-server-2010/#comments</comments>
		<pubDate>Sat, 23 May 2009 12:15:04 +0000</pubDate>
		<dc:creator>Gauthier</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://blog.chanliau.fr/?p=307</guid>
		<description><![CDATA[La team SharePoint a rÃ©cemment annoncÃ© que SharePoint 2010 serait uniquement livrÃ© en version 64 bits. Petit Ã  petit, Microsoft pousse les entreprises a se tourner uniquement vers des version 64 bits pour faire fi des limitations du 32 bits et ainsi sâ€™affranchir de devoir maintenir les versions pour deux architectures diffÃ©rentes (Windows Server [...]]]></description>
			<content:encoded><![CDATA[<p>La <a href="http://blogs.msdn.com/sharepoint/" target="_blank">team SharePoint</a> a rÃ©cemment annoncÃ© que <a href="http://blogs.msdn.com/sharepoint/archive/2009/05/07/announcing-sharepoint-server-2010-preliminary-system-requirements.aspx" target="_blank">SharePoint 2010 serait uniquement livrÃ© en version 64 bits</a>. Petit Ã  petit, Microsoft pousse les entreprises a se tourner uniquement vers des version 64 bits pour faire fi des limitations du 32 bits et ainsi sâ€™affranchir de devoir maintenir les versions pour deux architectures diffÃ©rentes (Windows Server 2008 R2 est lui aussi uniquement disponible en 64 bits).</p>
<p>Mais revenons en Ã  SharePoint Server 2010. Il ne sera utilisable que sur un Windows Server 2008 (64bits) ou Windows Server 2008 R2 (64 bits) et nÃ©cessitera obligatoirement un SQL Server 2005 ou 2008 (en 64 bits lÃ  encore).</p>
<p>Par ailleurs, nous apprenons que les navigateurs compatibles avec la nouvelle mouture seront Explorer 7+ et Firefox 3+ ainsi que Safari 3+ afin de respecter les standards XHTML 1.0 (Je vous lâ€™accorde Microsoft a toujours du mal a respecter les standards Web, et câ€™est encore le cas de IE 8).</p>
<p>En ce qui concerne Internet Explorer 6, lâ€™Ã©quipe a annoncÃ© quâ€™il ne sera pas officiellement supportÃ© malgrÃ© quâ€™il reprÃ©sente encore aujourdâ€™hui 20% des parts de marchÃ© des navigateurs (<a href="http://blog.britoweb.net/post/2009/04/02/Parts-de-marche-des-navigateurs" target="_blank">Mars 2009</a>). Cependant, le support dâ€™IE 6 sâ€™arrÃªtera officiellement en juillet 2010.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chanliau.fr/2009/05/sharepoint-server-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.chanliau.fr/2009/05/sharepoint-server-2010/</feedburner:origLink></item>
		<item>
		<title>Redimensionner une image disque VMware</title>
		<link>http://feedproxy.google.com/~r/Chanliau/~3/gGchvLPrWaM/</link>
		<comments>http://blog.chanliau.fr/2008/12/redimensionner-une-image-disque-vmware/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 20:30:58 +0000</pubDate>
		<dc:creator>Gauthier</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://blog.chanliau.fr/?p=270</guid>
		<description><![CDATA[Il vous est peut Ãªtre dÃ©jÃ  arrivÃ©, de monter une machine virtuelle VMware pour une maquette, mais de voir un peu court au niveau du disque dur. Une solution existe pour palier Ã  ce problÃ¨me, câ€™est VMware Converter.

VMware Converter permet entre autre de convertir des machines physiques locales et distantes en machines virtuelles, [...]]]></description>
			<content:encoded><![CDATA[<p>Il vous est peut Ãªtre dÃ©jÃ  arrivÃ©, de monter une machine virtuelle VMware pour une maquette, mais de voir un peu court au niveau du disque dur. Une solution existe pour palier Ã  ce problÃ¨me, câ€™est VMware Converter.<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/12/0.jpg"><img class="alignnone" style="border: 0pt none; display: inline;" title="0" src="http://blog.chanliau.fr/wp-content/uploads/2008/12/0-thumb.jpg" border="0" alt="0" width="320" height="180" /></a></p>
<p><span id="more-270"></span>VMware Converter permet entre autre de convertir des machines physiques locales et distantes en machines virtuelles, de rÃ©aliser plusieurs conversions simultanÃ©ment, de convertir d&#8217;autres formats de machines virtuelles comme Microsoft Virtual PC/Microsoft Virtual Server ou des images de sauvegarde de machines physiques comme Symantec Backup Exec LiveState Recovery ou Ghost 9 en machines virtuelles VMware, ou encore de cloner et sauvegarder des machines physiques en machines virtuelles dans le cadre d&#8217;un plan de rÃ©cupÃ©ration d&#8217;urgence.</p>
<p>Jâ€™avais crÃ©Ã© une machine virtuelle de Windows Server 2008 pour des dÃ©ploiements dâ€™OS, mais je me suis vite retrouvÃ© Ã  lâ€™Ã©troit avec seulement 10Go. Je vais vous prÃ©senter ici comment augmenter la taille du disque systÃ¨me<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/12/1.png"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="1" src="http://blog.chanliau.fr/wp-content/uploads/2008/12/1-thumb.png" border="0" alt="1" width="244" height="27" /></a></p>
<p>Tout dâ€™abord il est nÃ©cessaire de lancer une vÃ©rification du disque Ã  convertir afin de vÃ©rifier lâ€™intÃ©gralitÃ© des blocs de celui-ci. Si le disque prÃ©sente une ou plusieurs erreurs, la suite de la procÃ©dure Ã©chouera.<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/12/2.png"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="2" src="http://blog.chanliau.fr/wp-content/uploads/2008/12/2-thumb.png" border="0" alt="2" width="244" height="120" /></a></p>
<p>Une fois la vÃ©rification terminÃ©e, lancer VMware Converter, et choisissez Â« Convert Machine Â», sÃ©lectionnez Â« Other Â» puis spÃ©cifiez lâ€™emplacement de votre machine virtuelle<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/12/4.png"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="4" src="http://blog.chanliau.fr/wp-content/uploads/2008/12/4-thumb.png" border="0" alt="4" width="244" height="208" /></a></p>
<p>SÃ©lectionnez maintenant lâ€™option Â« resize or add space Â» puis, renseignez le champ Â« New disk space Â» avec lâ€™espace nÃ©cessaire pour votre utilisation.<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/12/5.jpg"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="5_" src="http://blog.chanliau.fr/wp-content/uploads/2008/12/5-thumb.jpg" border="0" alt="5_" width="244" height="209" /></a></p>
<p>Passez les quelques Ã©tapes suivantes en choisissant lâ€™emplacement du fichier vmdk avec la nouvelle taille, puis terminez lâ€™assistant. La conversion est maintenant en court<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/12/7.png"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="7" src="http://blog.chanliau.fr/wp-content/uploads/2008/12/7-thumb.png" border="0" alt="7" width="244" height="42" /></a></p>
<p>Une fois la conversion terminÃ©e, vÃ©rifiez le contenu des logs afin de confirmer quâ€™aucune erreur nâ€™est prÃ©sente<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/12/9.png"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="9" src="http://blog.chanliau.fr/wp-content/uploads/2008/12/9-thumb.png" border="0" alt="9" width="244" height="74" /></a></p>
<p>Votre fichier vmdk est crÃ©Ã©. Ouvrez maintenant votre logiciel VMware Server ou Workstation puis, rendez vous dans les settings afin de spÃ©cifier lâ€™emplacement de celui-ci<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/12/10.jpg"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="10" src="http://blog.chanliau.fr/wp-content/uploads/2008/12/10-thumb.jpg" border="0" alt="10" width="244" height="189" /></a></p>
<p>Et voila ! Votre machine virtuelle est prÃªte a Ãªtre utiliser</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chanliau.fr/2008/12/redimensionner-une-image-disque-vmware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://blog.chanliau.fr/2008/12/redimensionner-une-image-disque-vmware/</feedburner:origLink></item>
		<item>
		<title>Cluster Asterisk: IP virtuelle</title>
		<link>http://feedproxy.google.com/~r/Chanliau/~3/xklMdtdOh2M/</link>
		<comments>http://blog.chanliau.fr/2008/11/cluster-asterisk-ip-virtuelle/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 16:45:34 +0000</pubDate>
		<dc:creator>Gauthier</dc:creator>
				<category><![CDATA[Failover]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[PBX]]></category>
		<category><![CDATA[SIAPB]]></category>

		<guid isPermaLink="false">http://blog.chanliau.fr/?p=237</guid>
		<description><![CDATA[Après cette introduction à Asterisk, passons maintenant à la partie concrète de la mise en place de notre solution haute disponibilité (HA). Dans cet exemple nous considérons que nous avons deux serveurs organisés comme suis :

SrvAsterisk-1 : 192.168.1.201
SrvAsterisk-2 : 192.168.1.202
L&#8217;adresse P virtuelle pour y accéder sera : 192.168.1.200

Nous allons dans cet article nous atteler a [...]]]></description>
			<content:encoded><![CDATA[<p>Après cette <a href="http://blog.chanliau.fr/2008/11/asterisk-en-entreprise/">introduction à Asterisk</a>, passons maintenant à la partie concrète de la mise en place de notre solution haute disponibilité (HA). Dans cet exemple nous considérons que nous avons deux serveurs organisés comme suis :</p>
<ul>
<li>SrvAsterisk-1 : 192.168.1.201</li>
<li>SrvAsterisk-2 : 192.168.1.202</li>
<li>L&#8217;adresse P virtuelle pour y accéder sera : 192.168.1.200</li>
</ul>
<p>Nous allons dans cet article nous atteler a mettre en place une IP virtuelle qui assura une continuité de service lors de la perte d&#8217;un des serveurs.</p>
<p><span id="more-237"></span></p>
<h3><span style="text-decoration: underline;">Méthode 1 : Utilisation de Heartbeat</span></h3>
<p>Tout d&#8217;abord il est nécessaire de l&#8217;installer : sudo apt-get install heartbeat</p>
<p>Sa configuration repose sur 3 fichiers :</p>
<ul>
<li> /etc/ha.d/ha.cf</li>
<li> /etc/ha.d/haresources</li>
<li> /etc/ha.d/authkeys</li>
</ul>
<p>Voici en détail comment configurer ces trois fichiers.</p>
<ul>
<li><span style="text-decoration: underline;"><strong>/etc/ha.d/ha.cf<br />
</strong></span>bcast   eth0<br />
node  SrvAsterisk-1<br />
node  SrvAsterisk-2<br />
auto_failback off<br />
keepalive  2<br />
deadtime 30<br />
warntime 5<br />
initdead 60<br />
udpport 694<br />
debugfile  /var/log/ha-debug<br />
logfile /var/log/ha-log</p>
<p>Quelques éléments pour comprendre ce fichier de configuration :<br />
Bcast : Interface réseau<br />
Node : Spécifier ici vos serveurs a intégrer dans le cluster<br />
auto_failback : Si &nbsp;&raquo; On &nbsp;&raquo; lorsque SrvAsterisk-1 revient, il reprend le relai, si &nbsp;&raquo; Off &laquo;&nbsp;, SrvAsterisk-2 continu l&#8217;intérim jusqu&#8217;à une intervention humaine<br />
Keepalive : Fréquence de pouls<br />
Deadtime : Temps avant qu&#8217;on considère que le node est HS<br />
Warntime : Temps avant d&#8217;envoyer une alerte<br />
Initdead : Temps avant que le 2nd serveur prenne le relai<br />
Udpport : Port utiliser entre les deux serveurs pour communiquer<br />
debugfile/logfile : Emplacement des logs</li>
</ul>
<ul>
<li><span style="text-decoration: underline;"><strong>/etc/ha.d/haresources</strong></span> (Identique sur les deux serveurs)<br />
SrvAsterisk-1Â  IPaddr::192.168.1.200</p>
<p>Nous définissons ici que le serveur principal est SrvAsterisk-1</li>
</ul>
<ul>
<li><span style="text-decoration: underline;"><strong>/etc/ha.d/authkeys</strong></span><br />
auth 1<br />
1 md5 &laquo;&nbsp;!#@ClusterAsterisk/\&nbsp;&raquo;<br />
2 crc</p>
<p>Ce fichier contient le nécessaire pour que les deux serveurs puissent communiquer entre eux. Nous utilisons utiliser du md5 et la clé est &nbsp;&raquo; !#@ClusterAsterisk/\ &laquo;&nbsp;.</li>
</ul>
<p>Une fois toutes ces modifications effectuées il est nécessaire de relancer le service avec la commande : sudo /etc/init.d/heartbeat reload</p>
<p>Cependant, un pouls toute les deux secondes peut vite polluer votre réseau, c&#8217;est pourquoi je vous conseil grandement un lien dédié entre votre deux serveurs Asterisk.</p>
<h3><span style="text-decoration: underline;">Méthode 2 : Cron+Nmap+Arping</span></h3>
<p>Gregg Hansen, auteur du site <a href="http://www.thiscoolsite.com" target="_blank">thiscoolsite</a> a créé deux scripts (Flip1405) se plaçant en concurrent de Heartbeat. Je vous explique ici leurs fonctionnements.</p>
<p>Tout d&#8217;abord il est nécessaire de récupérer les deux fichiers</p>
<ul>
<li> <a href="http://blog.chanliau.fr/wp-content/uploads/2008/SrvAsterisk-1">SrvAsterisk-1</a></li>
<li> <a href="http://blog.chanliau.fr/wp-content/uploads/2008/SrvAsterisk-2">SrvAsterisk-2</a></li>
</ul>
<p>Ces fichiers sont configurés avec les IP spécifiés au début de ce post, il vous faut les changer pour adapter à vos serveurs. Copier chaque fichier sur le serveur adapté, puis éditer le contenu de contab (crontab â€“e)</p>
<ul>
<li><span style="text-decoration: underline;">SrvAsterisk-1 </span><br />
*/2 * * * * /emplacement/fichier/flip1405_primary</li>
<li><span style="text-decoration: underline;">SrvAsterisk-2</span><br />
*/2 * * * * /emplacement/fichier/flip1405_secondary</li>
</ul>
<p>Et voila ! Vos scripts seront lancés toutes les deux minutes. Si votre serveur principal venait à tomber, le serveur secondaire prendra le relai jusqu&#8217;au retour du serveur principal.</p>
<p>Ceci clos cet article sur la mise en place d&#8217;une adresse IP virtuelle de notre cluster Asterisk. Mon prochain article traitera de la mise en place de la synchronisation des données (Compte SIP/Messagerie) entre les différents noeuds.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chanliau.fr/2008/11/cluster-asterisk-ip-virtuelle/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.chanliau.fr/2008/11/cluster-asterisk-ip-virtuelle/</feedburner:origLink></item>
		<item>
		<title>Asterisk, le PBX open source par excellence</title>
		<link>http://feedproxy.google.com/~r/Chanliau/~3/160MgHgA1ew/</link>
		<comments>http://blog.chanliau.fr/2008/11/asterisk-en-entreprise/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 18:03:03 +0000</pubDate>
		<dc:creator>Gauthier</dc:creator>
				<category><![CDATA[Failover]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[PBX]]></category>

		<guid isPermaLink="false">http://blog.chanliau.fr/?p=221</guid>
		<description><![CDATA[

Cet article est les prÃ©misses dâ€™une sÃ©rie dâ€™articles Ã  venir sur Asterisk et sur sa mise en place via des solutions haute disponibilitÃ© (HA). Asterisk est un PABX open source pour systÃ¨mes GNU/Linux, publiÃ© sous licence GPL. Il permet, entre autres, la messagerie vocale, les confÃ©rences, les files d&#8217;attente, les agents d&#8217;appels, les musiques [...]]]></description>
			<content:encoded><![CDATA[<p><!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tableau Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-fareast-language:EN-US;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">Cet article est les prÃ©misses dâ€™une sÃ©rie dâ€™articles Ã  venir sur Asterisk et sur sa mise en place via des solutions haute disponibilitÃ© (HA). Asterisk est un PABX open source pour systÃ¨mes GNU/Linux, publiÃ© sous licence GPL. Il permet, entre autres, la messagerie vocale, les confÃ©rences, les files d&#8217;attente, les agents d&#8217;appels, les musiques d&#8217;attente et bon nombre de fonctionnalitÃ©s qui le placent au niveau des PBX les plus complexes.</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">Au sein des trÃ¨s grandes installations, il est courant de rÃ©partir les fonctionnalitÃ©s sur plusieurs serveurs. Lâ€™un sera dÃ©diÃ© au traitement des appels et celui-ci sera Ã©paulÃ© par des serveurs secondaires traitant dâ€™autres tÃ¢ches comme la base de donnÃ©es, les boÃ®tes vocales ou les confÃ©rences. Pour des installations plus petites, un serveur suffisamment costaud est capable de gÃ©rer lâ€™ensemble assez facilement et sera Ã©pauler par un serveur de backup.</span><span id="more-221"></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">Asterisk implÃ©mente les protocoles H.320, H.323 et SIP, ainsi que IAX (Inter-Asterisk eXchange). Ce protocole rend possible la communication entre un serveur est un client mais aussi la communication entre deux serveurs Asterisk en utilisant le port 4569 (en UDP) permettant de renvoyer les appels Ã  partir dâ€™un serveur Asterisk au travers <span> </span>dâ€™IAX. </span></p>
<p class="MsoNormal"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">Il comprend de base un nombre trÃ¨s Ã©levÃ© de fonctions pour rÃ©pondre Ã  la majoritÃ© des besoins en tÃ©lÃ©phonie permettant ainsi de remplacer totalement, par le biais de cartes FXO/FXS, un PABX propriÃ©taire, et d&#8217;y adjoindre des fonctionnalitÃ©s de ToIP pour le transformer en IPPBX. Certains modules tiers permettent de visualiser ou paramÃ©trer le PBX via une interface web ou via un client lÃ©ger. Asterisk est extensible par des scripts ou des modules Ã©crit en Perl, en Python, en C, voir en PHP permettant aux dÃ©veloppeurs de lâ€™adapter au maximum Ã  ses besoins.</span></p>
<p class="MsoNormal" style="text-align: center;"><a href="http://blog.chanliau.fr/wp-content/uploads/2008/11/illustration1.jpg" target="_blank"><img class="alignnone size-medium wp-image-225" title="illustration1" src="http://blog.chanliau.fr/wp-content/uploads/2008/11/illustration1-300x175.jpg" alt="" width="300" height="175" /><br />
Exemple d&#8217;un cluster Asterisk</a></p>
<p class="MsoNormal"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">Les serveurs Asterisk en entreprise joue un rÃ´le indispensable puisque lâ€™ensemble de la tÃ©lÃ©phonie repose dessus. Il est donc vital dâ€™avoir une solution haute disponibilitÃ©. Pour ce faire, certaines rÃ¨gles doivent Ãªtre respectÃ©es, je vous en livre quelques une, mais elles sont loin dâ€™Ãªtre exhaustives.</span></p>
<ul>
<li><!--[if !supportLists]--><span style="font-family: &quot;Calibri&quot;,&quot;sans-serif&quot;;"><span><span style="font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; font-family: &quot;Times New Roman&quot;;"> </span></span></span><!--[endif]-->Ne JAMAIS monter un serveur Asterisk en production hors dâ€™un cluster. Si votre serveur venait Ã  flancher, ce serait la catastrophe. Un minimum de deux serveurs est nÃ©cessaire en fonction de la charge qui sera demandÃ©. Cela permet de pouvoir mettre un serveur Ã  jour pendant que lâ€™autre/les autres continuent Ã  fonctionner et dâ€™assurer la continuitÃ© de service en cas de panne importante.</li>
<li>Il est nÃ©cessaire dâ€™effectuer des backups rÃ©guliers de vos serveurs. Il existe aujourdâ€™hui bon nombres de solutions de clichÃ©s instantanÃ©s (mÃªme gratuites). PrÃ©voyez aussi un plan de reprise aprÃ¨s incidentÂ ! On ne sait jamaisÂ <img src='http://blog.chanliau.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li>Monitorer vos serveurs en utilisant des outils adÃ©quats par exemple Cacti, Nagios/Centreon, Zabbix, HP OpenViewâ€¦Certains sont gratuits et permettent de monitorer et/ou gÃ©rer les pannes de faÃ§on efficace avec les remontÃ©es dâ€™alarmes, voir mÃªme de les anticiper.</li>
<li>Utiliser des outils de rÃ©plic<span style="color: #000000;">ation/</span><span class="__mozilla-findbar-search" style="padding: 0pt; display: inline; font-size: inherit; color: #000000;"><span class="__mozilla-findbar-search" style="padding: 0pt;  display: inline; font-size: inherit;">sync</span></span><span style="color: #000000;">hronisation pour garder vos diffÃ©rents serveurs Ã  jour.</span>
<ul>
<li><span style="color: #000000;"><strong><span style="font-size: 10pt; line-height: 115%; text-transform: uppercase; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">Heartbeat</span></strong><strong><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;"> :</span></strong></span><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #000000;"> Afin de pouvoir tester les <em><span style="font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">nodes</span></em> du cluster, chacune des machines va vÃ©rifier si les autres rÃ©pondent toujours en prenant le pouls des autres. Si une machine cesse de fonctionner, les autres assurent le service.</span></li>
<li><!--[endif]--><span style="color: #000000;"><span class="searchhit"><strong><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">DRBD</span></strong></span></span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #000000;"> : Câ€™est un module pour le kernel implÃ©mentant un pÃ©riphÃ©rique en mode bloc qui en plus d&#8217;Ã©crire l&#8217;information sur le disque physique de la machine, la transmet Ã  son homologue miroir qui se trouve sur l&#8217;autre (ou les autres serveurs). Cette solution permet la mise en miroir dâ€™un disque complet.</span></li>
<li><span style="color: #000000;"><strong><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">RSYNC/CSYNC2</span></strong></span><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #000000;"> : Cette solution permet dâ€™effectuer<span> </span>une <span class="__mozilla-findbar-search" style="padding: 0pt;  display: inline; font-size: inherit;"><span class="__mozilla-findbar-search" style="padding: 0pt;  display: inline; font-size: inherit;">sync</span></span>hronisation dans un intervalle de temps relativement court. Ce type de solution convient car les donnÃ©es ne changeant pas trop frÃ©quemment. Attention cependant si elle est utilisÃ©e dans une trÃ¨s grosse installation la limitation de R<span class="__mozilla-findbar-search" style="padding: 0pt; display: inline; font-size: inherit;"><span class="__mozilla-findbar-search" style="padding: 0pt;  display: inline; font-size: inherit;">sync</span></span> devient Ã©vidente. MÃªme en <span class="__mozilla-findbar-search" style="padding: 0pt;  display: inline; font-size: inherit;"><span class="__mozilla-findbar-search" style="padding: 0pt;  display: inline; font-size: inherit;">sync</span></span>hronisant les serveurs toutes les 2 minutes, nous risquons de perdre des donnÃ©es modifiÃ©es durant cet intervalle. <span style="text-decoration: underline;">Attention</span> dans certains cas, R<span class="__mozilla-findbar-search" style="padding: 0pt;  display: inline; font-size: inherit;"><span class="__mozilla-findbar-search" style="padding: 0pt;  display: inline; font-size: inherit;">sync</span></span> peut mettre vos serveurs Ã  genoux. Cette solution est beaucoup plus facile Ã  gÃ©rer et plus pratique si l&#8217;objectif est dâ€™avoir un miroir sur simplement quelques rÃ©pertoires</span></li>
</ul>
</li>
<li><span style="color: #000000;">Forcer la rotation de serveur tous les jours pour vÃ©rifier le bon fonctionnement. Si votre cluster est constituÃ© dâ€™un systÃ¨me Actif/Passif, forcer le failover chaque nuit, cela permettra de sâ€™assurer que les deux serveurs fonctionnent. Il est aberrant de voir des systÃ¨mes sans rotation jusquâ€™au jour ou la bascule est faite, mais Ã§a ne fonctionne pa<span>sâ€¦</span></span></li>
</ul>
<p class="MsoNormalIndent" style="margin-left: 0cm;"><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #000000;">Cela conclu cette introduction Ã  Asterisk, dans les prochains articles, nous rentrerons plus dans la partie technique en mettant les mains dans le cambouis. Il sera nÃ©cessaire dâ€™avoir de solides compÃ©tences des systÃ¨mes </span><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;">GNU/Linux </span><span style="font-size: 10pt; line-height: 115%; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: #000000;">afin de pouvoir effectuer ses manipulations. Si ce nâ€™est pas le cas, Google regorge de bons nombres de tutoriaux en tout genre afin de se faire la mainÂ <img src='http://blog.chanliau.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </span></p>
<p class="MsoNormal">
]]></content:encoded>
			<wfw:commentRss>http://blog.chanliau.fr/2008/11/asterisk-en-entreprise/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://blog.chanliau.fr/2008/11/asterisk-en-entreprise/</feedburner:origLink></item>
		<item>
		<title>Les WAFS</title>
		<link>http://feedproxy.google.com/~r/Chanliau/~3/AvVMufxz9TY/</link>
		<comments>http://blog.chanliau.fr/2008/11/les-wafs/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 21:27:50 +0000</pubDate>
		<dc:creator>Gauthier</dc:creator>
				<category><![CDATA[Divers]]></category>

		<guid isPermaLink="false">http://blog.chanliau.fr/?p=208</guid>
		<description><![CDATA[Jusquâ€™Ã  peu la gestion des sites distants Ã©tait un vrai calvaire pour les ressources informatiques dâ€™une entreprise. Le coÃ»t actuel de cet Ã©clatement informatique est jugÃ© exorbitant par bon nombre dâ€™entre elles que ce soit en termes de ressources, de matÃ©riel, ou de prestations. Les architectures montrant souvent trop d&#8217;hÃ©tÃ©rogÃ©nÃ©itÃ©, augmentant les coÃ»ts liÃ©s [...]]]></description>
			<content:encoded><![CDATA[<p>Jusquâ€™Ã  peu la gestion des sites distants Ã©tait un vrai calvaire pour les ressources informatiques dâ€™une entreprise. Le coÃ»t actuel de cet Ã©clatement informatique est jugÃ© exorbitant par bon nombre dâ€™entre elles que ce soit en termes de ressources, de matÃ©riel, ou de prestations. Les architectures montrant souvent trop d&#8217;hÃ©tÃ©rogÃ©nÃ©itÃ©, augmentant les coÃ»ts liÃ©s Ã  la prestation externe et Ã  l&#8217;utilisation des ressources internes. Ils engendrent par ailleurs des coÃ»ts d&#8217;administration importants notamment pour l&#8217;exÃ©cution des procÃ©dures de sauvegarde ainsi que pour les coÃ»ts de maintenance.</p>
<p>Pour faire face Ã  ces couts, lâ€™idÃ©e a Ã©tÃ© de centraliser les donnÃ©es, les bases de donnÃ©es, les serveurs antivirus et de messagerie ainsi que les applications mÃ©tiers dans un seul est mÃªme lieux, dans un Datacenter. Mais cette solution conduit le plus souvent Ã  diminuer fortement les performances du rÃ©seau pour les utilisateurs. Les temps d&#8217;accÃ¨s aux ressources ainsi que les besoins en bande passante sur la partie WAN du rÃ©seau explosent. En effet les protocoles de gestion de fichiers nâ€™ayant pas Ã©tÃ© conÃ§u pour une utilisation WAN, ils se rÃ©vÃ¨lent Ãªtre trÃ¨s bavard et donc trÃ¨s gourmands. Mais heureusement les WAFS ont fait leur apparition. <span id="more-208"></span></p>
<p>Quâ€™est ce quâ€™est concrÃ¨tement ? La technologie Wide Area Files Services (WAFS) apporte une rÃ©ponse aux problÃ©matiques WAN de latence, de fiabilitÃ© alÃ©atoire et de liens congestionnÃ©s des rÃ©seaux, dont peuvent parfois souffrir les utilisateurs des sites distants. Elle vise Ã  rÃ©duire les coÃ»ts tÃ©lÃ©coms (en bande passante), les coÃ»ts informatiques (moins de serveurs) ainsi que la complexitÃ© liÃ©e Ã  lâ€™administration du rÃ©seau et des serveurs de l&#8217;entreprise.</p>
<p>Pour bien comprendre lâ€™architecture le plus simple est encore un schÃ©ma. Celui-ci fait fi dâ€™un site de secours pour le Datacenter puisque simplifiÃ© au maximum, cependant la centralisation des donnÃ©es prÃ©sente un risque, il doit impÃ©rativement Ãªtre prÃ©vu pour assurer une continuitÃ© de service en cas de problÃ¨me.<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/11/riverbed-servervdiagram1.jpg"><img style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" title="riverbed_server-v-diagram" src="http://blog.chanliau.fr/wp-content/uploads/2008/11/riverbed-servervdiagram-thumb1.jpg" border="0" alt="riverbed_server-v-diagram" width="498" height="412" /></a></p>
<p>Chaque appliance WAFS communique avec les PC (client ou serveur) au travers dâ€™un protocole tel que CIFS ou NFS. Par contre les Ã©changes entre les appliances utilisent un protocole dÃ©diÃ©, optimisÃ© pour les rÃ©seaux WAN. Ce protocole, associÃ© Ã  un certain nombre d&#8217;optimisation, permet au WAFS d&#8217;Ã©liminer les principaux facteurs de latence.</p>
<p>Selon <a href="http://www.packeteer.com/">Packeteer</a> le WAFS permet de diviser les temps dâ€™attente pour lâ€™accÃ¨s au fichier par 10 lors quâ€™il sâ€™agit du premier accÃ¨s, et mÃªme plus encore dans le cas des accÃ¨s suivants grace Ã  son systÃ¨me de cache.<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/11/tt1-wafs-lg1.gif"><img style="display: inline" title="TT1_WAFS_lg" src="http://blog.chanliau.fr/wp-content/uploads/2008/11/tt1-wafs-lg-thumb1.gif" border="0" alt="TT1_WAFS_lg" width="494" height="224" /></a></p>
<p><span style="text-decoration: underline;">Quels avantages pour cette technologie ?</span></p>
<ul>
<li>Virtualisation des fichiers et des services</li>
<li>Suppression des serveurs sur les sites distants</li>
<li>Technologie transparente pour les utilisateurs</li>
<li>SÃ©curitÃ© optimale des donnÃ©es</li>
<li>DiminuÃ© au maximum les allers et venu sur ces sites distants pour des interventions</li>
<li>LibÃ©rÃ© du temps aux Ã©quipes informatiques pour dâ€™autres projets</li>
</ul>
<p>La technologie WAFS, qui, comme nous venons de le voir rÃ©pond Ã  de vrais besoins se prÃ©sente sur des systÃ¨mes tournant sur une base Linux ou Windows Storage Server. Nous parlons bien ici de technologie et non de protocole, ce qui implique que chaque constructeur est libre de rajouter des fonctions Ã  son appliance pouvant faire la diffÃ©rence en fonction de lâ€™entreprise.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chanliau.fr/2008/11/les-wafs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.chanliau.fr/2008/11/les-wafs/</feedburner:origLink></item>
		<item>
		<title>Déployer un OS Linux via WDS</title>
		<link>http://feedproxy.google.com/~r/Chanliau/~3/07Ctrh4_zZQ/</link>
		<comments>http://blog.chanliau.fr/2008/10/dployer-un-os-linux-via-wds/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 16:27:13 +0000</pubDate>
		<dc:creator>Gauthier</dc:creator>
				<category><![CDATA[Déploiement]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://blog.chanliau.fr/?p=178</guid>
		<description><![CDATA[Continuons dans la série WDS (Windows deployment Service). Déployer des Windows c&#8217;est bien, mais j&#8217;ai aussi besoin de déployer du Linux moi. Comment je fais, c&#8217;est pas possible ? Et bien si ! Je vous livre ici une méthode très inspirée de ce billet (US).
Nous allons ici déployer un Ubuntu 8.04 x86. Je vous invite [...]]]></description>
			<content:encoded><![CDATA[<p>Continuons dans la série WDS (Windows deployment Service). Déployer des Windows c&#8217;est bien, mais j&#8217;ai aussi besoin de déployer du Linux moi. Comment je fais, c&#8217;est pas possible ? Et bien si ! Je vous livre ici une méthode très inspirée de ce <a href="http://www.deployvista.com/Home/tabid/36/EntryID/65/language/en-US/Default.aspx">billet</a> (US).</p>
<p>Nous allons ici déployer un Ubuntu 8.04 x86. Je vous invite bien évidemment Ã  ne pas troller dans les commentaires sur les différentes distrib <img src='http://blog.chanliau.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong><span style="text-decoration: underline;">Pré-requis:</span></strong></p>
<ul>
<li>WDS installé. (Sinon, vous pouvez utiliser ce <em><a href="http://blog.chanliau.fr/2008/10/wds-sur-windows-serveur-2008/">tutorial</a></em>)</li>
<li>IIS installé et configuré.<span id="more-178"></span></li>
</ul>
<p><strong><span style="text-decoration: underline;">Fichiers nécessaires:</span></strong></p>
<ul>
<li><span style="text-decoration: underline;">Un CD d&#8217;Ubuntu</span> (Version alternate, elle ouvre une souplesse, et permet une automatisation)<br />
<a href="http://www.ubuntu-fr.org/telechargement">http://www.ubuntu-fr.org/telechargement</a></li>
<li><span style="text-decoration: underline;">Un Kickstart</span>. Ce kickstart correspond au fichier unattend.txt de Windows. Libre Ã  vous de le modifier pour changer le langue, la résolution ainsi que toutes les options.<br />
<em><a href="http://blog.chanliau.fr/wp-content/uploads/2008/10/kickstartscript.zip">http://blog.chanliau.fr/wp-content/uploads/2008/10/kickstartscript.zip<br />
</a></em></li>
<li><span style="text-decoration: underline;">Un fichier </span><span style="text-decoration: underline;">default</span> contenant les paramètres pour le déploiement.<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/10/default"><em>http://blog.chanliau.fr/wp-content/uploads/2008/10/default</em></a></li>
<li><span style="text-decoration: underline;">Syslinux</span>. Il contient pxelinux<br />
<a href="http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.71.zip">http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.71.zip</a></li>
<li><span style="text-decoration: underline;">Une image d&#8217;arrière-plan sympa</span></li>
</ul>
<p><span style="text-decoration: underline;"><strong>Partie 1:Â  Config de IIS</strong></span></p>
<ol>
<li><strong>Dans les paramètres de IIS<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/10/11.png"><img style="display: inline; border: 0px;" title="1" src="http://blog.chanliau.fr/wp-content/uploads/2008/10/1-thumb1.png" border="0" alt="1" width="175" height="244" /></a> </strong></p>
<ol>
<li>Créer un <strong>répertoire virtuel nommé Ubuntu </strong>(par ex. E:ISOUbuntuSysteme)<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/10/21.png"><img style="display: inline; border: 0px;" title="2" src="http://blog.chanliau.fr/wp-content/uploads/2008/10/2-thumb1.png" border="0" alt="2" width="244" height="200" /></a></p>
<p>Dans la partie configuration du répertoire virtuel de Ubuntu pour les types MIME, ajouter l&#8217;extension . * avec comme type MIME Â« text/plain Â» ainsi que .cfg<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/10/41.png"><img style="display: inline; border: 0px;" title="4" src="http://blog.chanliau.fr/wp-content/uploads/2008/10/4-thumb1.png" border="0" alt="4" width="244" height="139" /></a><a href="http://blog.chanliau.fr/wp-content/uploads/2008/10/5.png"><img style="border: 0px none; display: inline;" title="5" src="http://blog.chanliau.fr/wp-content/uploads/2008/10/5-thumb.png" border="0" alt="5" width="244" height="141" /></a></li>
<li>Créer un second <strong>répertoire virtuel nommé kickstart </strong>(par ex E:ISOUbuntuKickstart)<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/10/31.png"><img style="display: inline; border: 0px;" title="3" src="http://blog.chanliau.fr/wp-content/uploads/2008/10/3-thumb1.png" border="0" alt="3" width="244" height="197" /></a><a href="http://blog.chanliau.fr/wp-content/uploads/2008/10/5.png"><br />
</a></li>
</ol>
</li>
<li><strong>Extraire le CD Ubuntu</strong> dans le répertoire de votre choix (ici E:ISOUbuntuSysteme).<br />
Attention cependant, c&#8217;est un ISO 9660. Utiliser MagicISO pour ne pas avoir le problème des 255 caractères.</li>
<li><strong>Placer le kickstart (fichier Ubuntu_Desktop_32.cfg</strong>) dans votre dossier kickstart (ici E:ISOUbuntuKickstart). Le mot de passe chiffré est &laquo;&nbsp;ubuntu&nbsp;&raquo;.</li>
</ol>
<p><span style="text-decoration: underline;"><strong>Partie 2: Config de WDS</strong></span></p>
<ol>
<li>Copiez les fichiers <strong>initrd.gz</strong> et <strong>linux</strong> du dossier<br />
E:ISOUbuntuSystemeinstallnetbootubuntu-installeri386<br />
vers E:RemoteInstallBootx86Hardy32</li>
<li>Extraire syslinux (cf. FN), et copier dans le répertoire E:RemoteInstallBootx86<br />
syslinux-3.71com32menuvesamenu.c32<br />
syslinux-3.71corepxelinux.o<br />
Puis renommer pxelinux.o en pxelinux.com dans ce dernier.</li>
<li>Placer votre image d&#8217;arrière-plan (cf. FN) dans E:RemoteInstallBootx86<br />
Cette image doit se nommer: â€œDeploymentBackground.pngâ€</li>
<li>Dans le dossier E:RemoteInstallBootx86, faire une copie de pxeboot.n12 et le renommer en pxeboot.0</li>
<li>Configurer WDS pour qu&#8217;il utilise le fichier de démarrage pxelinux.com (Dans &laquo;&nbsp;propriétés du serveur&nbsp;&raquo; / &laquo;&nbsp;onglet démarrer&nbsp;&raquo;)<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/10/6.png"><img style="display: inline; border: 0px;" title="6" src="http://blog.chanliau.fr/wp-content/uploads/2008/10/6-thumb.png" border="0" alt="6" width="244" height="119" /></a></li>
<li>Dans le dossier E:RemoteInstallBootx86, créez un dossier appelé pxelinux.cfg</li>
<li>Dans le dossier E:RemoteInstallBootx86pxelinux.cfg, placer le fichier default (cf. FN)</li>
</ol>
<p>Et voila, vous pouvez déployer des stations Ubuntu depuis un serveur Windows&#8230;Elle est pas belle la vie ?<br />
<a href="http://blog.chanliau.fr/wp-content/uploads/2008/10/deploy.jpg"><img class="alignnone size-medium wp-image-196" title="deploy" src="http://blog.chanliau.fr/wp-content/uploads/2008/10/deploy-300x234.jpg" alt="" width="300" height="234" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chanliau.fr/2008/10/dployer-un-os-linux-via-wds/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://blog.chanliau.fr/2008/10/dployer-un-os-linux-via-wds/</feedburner:origLink></item>
	</channel>
</rss>

