Monthly Archives: July 2012

Automount de vos partitions ZFS sous Linux

zfs-automount

Aujourd'hui j'ai voulu mettre en automount mes différents raidz afin qu'ils se montent automatiquement au démarrage de mon serveur Linux.

Pour cela, il suffit d'éditer le fichier /etc/default/zfs 

~$ cat /etc/default/zfs 
# Automatically run `zfs mount -a` at system startup if set non-empty. 
ZFS_MOUNT='yes' 
#ZFS_MOUNT='' 
 
# Automatically run `zfs unmount -a` at system shutdown if set non-empty. 
ZFS_UNMOUNT='yes' 
#ZFS_UMOUNT=''

[.Net] Fonction de convertion d’un double dans le format Human Readable

Microsoft-dotnet

Aujourd'hui j'ai fait une petite fonction qui convertit un double en format Human Readable. C'est tout simple et je me suis inspiré d'une fonction JavaScript:

'Fonction de convertion d'un double dans le format Human Readable
Public Function ConvertToHumanReadable(ByVal value As Double, Optional ByVal NbDecimal As Integer = 2) As String
	If Double.IsNaN(value) Then Return String.Empty
	Dim units As String() = {"", "K", "M", "G", "T", "P", "E", "Z", "Y"}
	Dim amountOf2s As Double = Math.Floor(Math.Log(Math.Abs(value)) / Math.Log(2))
	If amountOf2s < 1 Then amountOf2s = 0
	Dim i As Integer = CInt(Math.Floor(amountOf2s / 10))
	value = value / Math.Pow(2, 10 * i)
	If (value.ToString().Length > Math.Round(value, NbDecimal).ToString().Length) Then
		value = Math.Round(value, NbDecimal)
	End If
	Return value & units(i)
End Function

[.Net] Classe Wake On Lan en Vb.Net

wake on lan

Afin de démarrer vosordinateurs via le réseau, vous pouvez utiliser le Wake On Lan (WOL).

Pour ceux qui ne connaissent pas le Wake On Lan, je vous invite à aller sur la page de Wikipedia.

Pour automatiser le démarrage de mes machines, j'ai donc codé une petit classe en Vb.Net (qui sera facile de convertir en C#):

Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Globalization

Public Class WOL
    ''' 
    ''' Fonction qui lance un WOL
    ''' 
    ''' 
    ''' 
    ''' 
    Public Shared Sub WakeUp(ByVal MacAddress As String, Optional ByVal BroadCast As String = "255.255.255.255")
        Dim udp As New UdpClient With {.EnableBroadcast = True}
        Try
            udp.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1)
            Dim offset As Integer = 0
            Dim buf(512) As Byte

            'les 6 premiers bytes sont &HFF
            For i As Integer = 0 To 5
                buf(offset) = &HFF
                offset += 1
            Next

            'on repete l'addresse MAC 16 fois
            For i As Integer = 0 To 15
                Dim n As Integer = 0
                For j As Integer = 0 To 5
                    buf(offset) = Byte.Parse(MacAddress.Substring(n, 2), NumberStyles.HexNumber)
                    offset += 1
                    n += 2
                Next
            Next

            'on envoie le wol
            udp.Send(buf, 512, New IPEndPoint(IPAddress.Parse(BroadCast), &H1))

        Catch ex As Exception
            udp.Close()
            Throw ex
        End Try
    End Sub
End Class

Et pour ceux qui souhaite, j'ai mis à disposition une archive contenant le projet Wake On Lan. Il est disponible ici.



        

Créer un alias sous Linux

alias

Aujourd'hui j'ai voulu créer des alias dans mon environnement console (bash) car je me suis aperçu que j'utilise toujours les même commandes shell.

Les commandes que j'utilise étant particulièrement longues à taper, j'ai donc décidé d'en faire des alias, des raccourcis.

Pour cela, il faut éditer le fichier "bashrc" se trouvant sur le root:

nano ~/.bashrc

Ensuite il suffit d'ajouter votre alias à la fin de ce fichier:

alias ur='unrar e *.rar'

Dans ce cas, je n'aurai plus qu'à exécuter la commande "ur" pour dézipper les archives Winrar.

Télécharger des fichiers en utilisant Curl

curl

Curl, tout comme Wget, est un logiciel qui permet de télécharger des fichiers en utilisant les protocoles HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP ou FILE.

Il est disponible sous Linux, Windows et Mac. Cet outil est très complet et simple d'utilisation. Il propose plusieurs fonctionnalités intéressantes:

  • Support des proxy
  • Authentification
  • Upload de fichiers en FTP
  • Connections SSL
  • Support des cookies
  • Reprise de téléchargement et d'upload

Télécharger un fichier HTTP ou FTP avec Curl

Voici les différentes commandes que vous pouvez utiliser pour télécharger un fichier sur un site HTTP, HTTPS ou sur un FTP.

curl -o output.file http://site.com/file1.zip
curl --remote-name http://site.com/file1.zip

Vous pouvez également télécharger une page d'un site internet et la stocker en local sur votre machine:

curl -o page.html http://site.com/page.html

Vous pouvez également télécharger plusieurs fichiers d'un coup:

curl -O http://site.com/file1.zip -O http://site.com/file2.zip

Télécharger un fichier SSH avec Curl

Il est possible de télécharger un fichier sur un serveur SSH en utilisant Curl et SFTP:

curl -u username sftp://server-ssh/file1.zip

Il est également possible de télécharger un fichier sur un serveur SSH en utilisant Curl et SCP avec une clé privée d'authentification:

curl -u username: --key ~/.ssh/id_rsa --pubkey ~/.ssh/id_rsa.pub scp://server-ssh/file1.zip

Ici on a:

  • -u username: pour préciser le login de connection
  • -u username:password: pour préciser le login et le mot de passe de connection
  • –key ~/.ssh/id_rsa: permet de spécifier la clé privée
  • –pubkey ~/.ssh/id_rsa.pub: permet de spécifier la clé publique

Télécharger un fichier sur un FTP sécurisé en utilisant Curl

Il suffit de spécifier un login et un password:

curl ftp://username:password@ftp.monsite.com:21/file.zip
curl -u username:password ftp://ftp.monsite.com:21/file.zip

Pour télécharger un fichier sur un serveur FTP SSL, on utilisera:

curl --ftp-ssl -u username:password ftp://ftp.monsite.com:21/file.zip

Télécharger un fichier sur un site web HTTP sécurisé en utilisant Curl

Pour télécharger un fichier sur un site Web qui requiert une authentification de type HTACCESS, on utilisera:

curl http://username:password@site.com/file.zip
curl -u username:password http://site.com/file.zip

Trouver les répertoires cachés et les fichiers cachés sous Linux

hidden-file

Aujourd'hui j'ai été amené à chercher des répertoires cachés sur mon serveur afin de pouvoir en supprimer certains.

Pour trouver un fichier caché ou un dossier caché, il faut utiliser la commande suivante:

find /dossier/parent/ -name nom_du_dossier_cache

Ainsi pour trouver le répertoire caché ".films" j'utilise la commande:

find $HOME -name .films

ou

find ~ -name .films

Pour ne pas prendre en compte la casse et être "case insensitive", vous pouvez utiliser:

find $HOME -iname .films

Cette petite commande est simple à utiliser et s'avère bien pratique.

[.Net] JSonSerializer, classe pour sérialiser vos objets

json-serializer

Voila une classe dotnet bien pratique qui permet de sérialiser des objets en json.

Imports System.IO
Imports System.Text
Imports System.Runtime.Serialization

Public Class JSONSerializer
    Public Shared Function Serialize(ByVal BaseType As Object) As String
        Dim ExactName As String = BaseType.GetType.ToString
        Dim Ser As String = p_Serialize(BaseType)
        Dim oList As New List(Of String)
        oList.Add(ExactName)
        oList.Add(Ser)
        Return p_Serialize(oList)
    End Function
    Public Shared Function Deserialize(ByVal s As String) As Object
        Dim oList As New List(Of String)
        oList = DirectCast(p_Deserialize(s, oList), List(Of String))
        Dim Instance As Object = Nothing
        Instance = Activator.CreateInstance(Type.GetType(oList.Item(0)))
        Return p_Deserialize(oList.Item(1), Instance)
    End Function

    Private Shared Function GetStringFromMemoryStream(ByVal m As MemoryStream) As String
        If (m Is Nothing) Or m.Length = 0 Then
            Return ""
        End If
        m.Flush()
        m.Position = 0
        Dim UTF8 As Encoding = UTF8Encoding.UTF8
        Dim sr As New StreamReader(m, UTF8Encoding.UTF8)
        Dim s As String = sr.ReadToEnd()
        Return s
    End Function
    Private Shared Function GetMemoryStreamFromString(ByVal s As String) As MemoryStream
        If (s Is Nothing) OrElse s.Length = 0 Then
            Return Nothing
        End If
        Dim a() As Byte = System.Text.Encoding.UTF8.GetBytes(s)
        Dim m As New System.IO.MemoryStream(a, True)
        m.Position = 0
        Return m
    End Function
    Private Shared Function p_Serialize(ByVal BaseType As Object) As String
        If BaseType Is Nothing Then
            Throw New ArgumentNullException()
        End If
        Dim dcs As New DataContractSerializer(BaseType.[GetType]())
        Dim ms As New MemoryStream()
        dcs.WriteObject(ms, BaseType)

        Return Encoding.UTF8.GetString(ms.GetBuffer(), 0, CInt(ms.Position))
    End Function
    Private Shared Function p_Deserialize(ByVal s As String, ByVal BaseType As Object) As Object
        Dim dcs As New DataContractSerializer(BaseType.GetType())
        Dim m As MemoryStream = GetMemoryStreamFromString(s)
        If m IsNot Nothing Then
            BaseType = dcs.ReadObject(m)
        End If
        Return BaseType
    End Function
End Class

Trouver la taille d’un répertoire sous Linux

directory-size

Aujourd'hui j'ai eu un blanc sur comment faire pour récupérer la taille d'un répertoire en ligne de commande sur mon serveur Ubuntu.

Du coup après plusieurs recherches, j'ai décidé de poster un petit récapitulatif pour récupérer la taille d'un répertoire en ligne de commande:

$ du /home/jhd

Retourne la liste des dossiers du répertoire et leur taille. La dernière ligne indique la taille total du répertoire incluant les sous répertoires. Notez que par défaut les tailles indiquées sont en kylobytes.

$ du -h

Permet d'afficher la taille dans un format humain (human readable format).

$ du -ah

Cette commande affiche également les fichiers présents dans chaque répertoire.

$ du -s

Cette commande donne un récapitulatif de la taille d'un répertoire. C'est probablement la manière la plus simple de récupérer la taille d'un dossier.

$ du -S

Affiche la taille d'un répertoire en excluant la taille des sous répertoires. Cela retourne uniquement la taille des fichiers présents dans le répertoire.

$ du --exclude=mp3

Permet d'exclure certains fichiers.