<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <atom:link href="http://blog.sysop.sh/rss.xml" rel="self" type="application/rss+xml"/>
    <title>Blog sysop</title>
    <link>http://blog.sysop.sh</link>
    <description>Hello world</description>
    <lastBuildDate>Tue, 01 Sep 2026 21:45:57 +0200</lastBuildDate>
    <item>
      <title>À propos</title>
      <link>http://blog.sysop.sh/a-propos</link>
      <image/>
      <description>&lt;h3&gt;Qui je-suis ?&lt;/h3&gt;
&lt;p&gt;Je suis un intégrateur système et réseaux passionné par la technologie qui, en parallèle, mène une double vie. D'un côté, je jongle avec des commandes complexes et des câbles réseau pour assurer le bon fonctionnement des systèmes. 
&lt;br/&gt;De l'autre, je suis un intégrateur système et réseaux au sein d'une ESN, où la rigueur est de mise. Et malgré tout cela, je trouve le temps de mettre à jour ce blog. 
&lt;br/&gt;Parce qu'après tout, qui a dit qu'on ne pouvait pas être sérieux tout en gardant un brin d'humour dans le monde de la technologie ? &lt;/p&gt;</description>
      <pubDate>Wed, 19 Aug 2026 20:44:37 +0200</pubDate>
      <guid isPermaLink="false">35725e8c34bafa5356d23ab178547111</guid>
    </item>
    <item>
      <title>Migration d’AlmaLinux (Cockpit) vers XCP-NG 8.3</title>
      <link>http://blog.sysop.sh/migration-d%E2%80%99almalinux-cockpit-vers-xcp-ng-8-3</link>
      <image/>
      <description>&lt;h2&gt;Contexte&lt;/h2&gt;
&lt;p&gt;Dans le cadre de la modernisation de mon infrastructure, j’ai décidé de migrer mes machines virtuelles depuis &lt;strong&gt;AlmaLinux (Cockpit/KVM)&lt;/strong&gt; vers &lt;strong&gt;XCP-NG 8.3&lt;/strong&gt;, un hyperviseur open source robuste basé sur XenServer.&lt;/p&gt;
&lt;p&gt;Cette migration nécessite principalement &lt;strong&gt;la conversion des disques&lt;/strong&gt; des VM depuis le format &lt;code&gt;qcow2&lt;/code&gt; vers &lt;code&gt;vhd&lt;/code&gt;, compatible avec XCP-NG.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Machine physique&lt;/h2&gt;
&lt;p&gt;Voici la configuration du mini PC hébergeant mes machines virtuelles :&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Composant&lt;/th&gt;
&lt;th&gt;Spécifications&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Nom&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SUKOTOP Mini PC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Processeur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Alder Lake N95 (jusqu'à 3.4 GHz, 15W)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mémoire RAM&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;16 Go LPDDR5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stockage&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;512 Go SSD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Wi-Fi&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2.4/5 GHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Réseau&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2 × RJ45 Gigabit Ethernet&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;État actuel (Cockpit)&lt;/h2&gt;
&lt;p&gt;Aperçu rapide de l’état de mon hyperviseur actuel sous Cockpit :&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blog.sysop.sh/bl-content/uploads/pages/d38d5f5eab9dcab0b68e67b84bc31ecf/VM.png" alt="État des VMs sous Cockpit" /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Migration logique&lt;/h2&gt;
&lt;p&gt;Voici une vue simplifiée de l’architecture avant et après migration :&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blog.sysop.sh/bl-content/uploads/pages/d38d5f5eab9dcab0b68e67b84bc31ecf/Migration.png" alt="Schéma de migration" /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Pré-requis&lt;/h2&gt;
&lt;p&gt;Avant de transférer les disques vers l’hôte &lt;strong&gt;XCP-NG&lt;/strong&gt;, il faut &lt;strong&gt;convertir les disques KVM (qcow2)&lt;/strong&gt; en &lt;strong&gt;VHD&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Conversion des disques&lt;/h3&gt;
&lt;p&gt;Sur votre hôte AlmaLinux, placez-vous dans le répertoire contenant les disques des VM, puis lancez la conversion via &lt;code&gt;qemu-img&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
&lt;strong&gt;Astuce :&lt;/strong&gt; arrêtez la machine avant la conversion pour garantir la cohérence des données.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo qemu-img convert -O vpc NOM_DE_VOTRE_VM.qcow2 NOM_DE_VOTRE_VM.vhd&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La conversion peut prendre un certain temps selon la taille du disque.&lt;/p&gt;
&lt;p&gt;Une fois terminée, transférez le fichier &lt;code&gt;.vhd&lt;/code&gt; vers votre hôte &lt;strong&gt;XCP-NG&lt;/strong&gt; via &lt;strong&gt;SCP&lt;/strong&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo scp NOM_DE_VOTRE_VM.vhd UTILISATEUR@IP:/run/sr-mount/&amp;lt;Storage_Repository&amp;gt;/&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
Le chemin &lt;code&gt;Storage_Repository&lt;/code&gt; correspond à l’espace de stockage local sur votre hôte XCP-NG.&lt;/p&gt;
&lt;p&gt;Pour l’identifier, exécutez :&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;df -Th&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h3&gt;Renommage du disque selon l’UUID&lt;/h3&gt;
&lt;p&gt;Une fois le disque transféré, renommez-le selon son &lt;strong&gt;UUID&lt;/strong&gt;, pour que XCP-NG l’intègre correctement à son &lt;strong&gt;Storage Repository (SR)&lt;/strong&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo mv VOTRE_VM.vhd "$(vhd-util read -p -n VOTRE_VM.vhd | awk '/UUID/ {print $3; exit}').vhd"&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!WARNING]
&lt;strong&gt;Pourquoi cette étape ?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;XCP-NG identifie chaque disque par un &lt;strong&gt;UUID unique&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Si le fichier ne porte pas cet identifiant, l’hyperviseur peut rencontrer des erreurs ou ignorer le disque lors de l’importation.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h3&gt;Intégration via Xen Orchestra&lt;/h3&gt;
&lt;p&gt;Depuis &lt;strong&gt;Xen Orchestra&lt;/strong&gt; :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Rendez-vous dans &lt;strong&gt;Home → Storage&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Sélectionnez votre stockage local (&lt;code&gt;Local storage (Default SR)&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Cliquez sur &lt;strong&gt;Rescan all disks&lt;/strong&gt; (en haut à droite).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="http://blog.sysop.sh/bl-content/uploads/pages/d38d5f5eab9dcab0b68e67b84bc31ecf/storage.png" alt="Rescan des disques" /&gt;&lt;/p&gt;
&lt;p&gt;Une fois l’analyse terminée, ouvrez votre espace de stockage, puis l’onglet &lt;strong&gt;Disks&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://blog.sysop.sh/bl-content/uploads/pages/d38d5f5eab9dcab0b68e67b84bc31ecf/local-storage.png" alt="Liste des disques détectés" /&gt;&lt;/p&gt;
&lt;p&gt;Un disque « sans nom » apparaîtra.&lt;/p&gt;
&lt;p&gt;Cliquez sur &lt;strong&gt;Click to edit&lt;/strong&gt; pour le renommer et l’associer à la machine virtuelle correspondante.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Installation des Guest Tools&lt;/h2&gt;
&lt;p&gt;Avant de redémarrer définitivement vos VM, &lt;strong&gt;désinstallez les Guest Tools QEMU&lt;/strong&gt; et &lt;strong&gt;installez ceux de Xen&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;Pour Alpine Linux&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;sudo apk add xe-guest-utilities&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sinon, vous pouvez monter l’ISO des Guest Tools fournie avec votre hôte XCP-NG.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
Petite astuce : si vous accédez à la console via Xen Orchestra, le clavier est en &lt;strong&gt;QWERTY&lt;/strong&gt; !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="http://blog.sysop.sh/bl-content/uploads/pages/d38d5f5eab9dcab0b68e67b84bc31ecf/querty.png" alt="Clavier QWERTY dans Xen Orchestra" /&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Cette migration m’a permis de centraliser la gestion de mes VM sur un hyperviseur plus performant et plus évolutif.&lt;/p&gt;
&lt;p&gt;XCP-NG offre une interface claire, une excellente compatibilité matérielle, et s’intègre parfaitement avec Xen Orchestra pour l’administration quotidienne.&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
&lt;strong&gt;Note de transparence&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cet article est basé sur mon contenu original.&lt;/p&gt;
&lt;p&gt;La mise en forme et certaines reformulations ont été réalisées avec l’aide d’un outil d’IA.&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <pubDate>Sun, 09 Feb 2025 19:35:38 +0100</pubDate>
      <guid isPermaLink="false">d38d5f5eab9dcab0b68e67b84bc31ecf</guid>
    </item>
    <item>
      <title>Installation de Technitium DNS Server sous Alpine Linux</title>
      <link>http://blog.sysop.sh/installation-de-technitium-dns-server-sous-alpine-linux</link>
      <image/>
      <description>&lt;h2&gt;Contexte&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://blog.sysop.sh/bl-content/uploads/pages/15850d7a238f4b4b55b41241f5e05869/Technitium.png" alt="Technitium DNS Server" /&gt;&lt;/p&gt;
&lt;p&gt;Officiellement, &lt;strong&gt;Technitium DNS Server&lt;/strong&gt; ne dispose pas de documentation officielle pour &lt;strong&gt;Alpine Linux&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Ce guide a donc pour objectif de vous proposer une &lt;strong&gt;méthode non officielle mais fonctionnelle&lt;/strong&gt; pour installer et exécuter Technitium sous Alpine 3.20.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Prérequis&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Alpine Linux &lt;strong&gt;3.20 minimum&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Accès root ou &lt;code&gt;sudo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Connexion Internet active&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;Installation des paquets nécessaires&lt;/h2&gt;
&lt;h3&gt;Ajouter les dépôts Edge&lt;/h3&gt;
&lt;p&gt;Éditez le fichier des dépôts :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;vi /etc/apk/repositories&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ajoutez les dépôts &lt;strong&gt;Edge&lt;/strong&gt; :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;http://dl-cdn.alpinelinux.org/alpine/edge/main
http://dl-cdn.alpinelinux.org/alpine/edge/community
http://dl-cdn.alpinelinux.org/alpine/edge/testing&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Installer les dépendances&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;apk add aspnetcore8-runtime bash sudo tar unzip curl&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Télécharger et installer Technitium DNS&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;curl -O https://download.technitium.com/dns/DnsServerPortable.tar.gz
sudo mkdir -p /opt/technitium/dns
sudo tar -zxf DnsServerPortable.tar.gz -C /opt/technitium/dns
chmod +x /opt/technitium/dns/start.sh&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;Création du service OpenRC&lt;/h2&gt;
&lt;p&gt;Créez le fichier de service :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;vi /etc/init.d/technitium-dns&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
&lt;strong&gt;Remarque :&lt;/strong&gt; Le script ci-dessous utilise un &lt;code&gt;kill -9&lt;/code&gt; pour forcer l'arrêt du processus. C'est un peu « sale », mais nécessaire ici à cause de la gestion incomplète du signal &lt;code&gt;TERM&lt;/code&gt; par dotnet sous Alpine.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Contenu du script &lt;code&gt;/etc/init.d/technitium-dns&lt;/code&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;#!/sbin/openrc-run

name="Technitium DNS Server"
description="Technitium DNS Server using dotnet"
command="/usr/bin/dotnet"
command_args="/opt/technitium/dns/DnsServerApp.dll"
command_user="root"
pidfile="/var/run/technitium-dns.pid"
directory="/opt/technitium/dns"

depend() {
    need net
}

start_pre() {
    if [ ! -f "${directory}/DnsServerApp.dll" ]; then
        eerror "DnsServerApp.dll not found in ${directory}"
        return 1
    fi

    export DOTNET_ROOT=/usr/lib/dotnet
    export PATH=$PATH:/usr/lib/dotnet

    return 0
}

start() {
    ebegin "Starting ${name}"
    ${command} ${command_args} &amp;gt; /opt/technitium/dns/technitium-dns.log 2&amp;gt;&amp;amp;1 &amp;amp;
    echo $! &amp;gt; ${pidfile}
    eend $?
}

stop() {
    ebegin "Stopping ${name}"

    if [ -f "${pidfile}" ]; then
        PID=$(cat ${pidfile})
        kill -9 $PID
        sleep 2

        if ps -p $PID &amp;gt; /dev/null; then
            eerror "Failed to stop ${name}. Process is still running."
            eend 1
        else
            rm -f ${pidfile}
            eend 0
        fi
    else
        eerror "No PID file found. Is the service running?"
        eend 1
    fi
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;Activer et démarrer le service&lt;/h2&gt;
&lt;p&gt;Rendez le script exécutable et ajoutez-le au démarrage :&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-shell"&gt;sudo chmod +x /etc/init.d/technitium-dns
sudo rc-update add technitium-dns
sudo rc-service technitium-dns start&lt;/code&gt;&lt;/pre&gt;
&lt;hr /&gt;
&lt;h2&gt;Accès à l'interface d'administration&lt;/h2&gt;
&lt;p&gt;Une fois le service démarré, accédez à l'interface Web de Technitium via :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[!TIP]
&lt;strong&gt;&lt;a href="http://IP_SERVEUR:5380/"&gt;http://IP_SERVEUR:5380/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Vous disposez maintenant d’un &lt;strong&gt;serveur DNS complet et léger&lt;/strong&gt; fonctionnant sous Alpine Linux grâce à &lt;strong&gt;Technitium DNS Server&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Malgré l’absence de documentation officielle, cette méthode s’avère fiable pour un usage personnel ou en labo.&lt;/p&gt;
&lt;hr /&gt;
&lt;blockquote&gt;
&lt;p&gt;[!NOTE]
&lt;strong&gt;Note de transparence :&lt;/strong&gt; Cet article est basé sur mon contenu original. La mise en forme et certaines reformulations ont été réalisées avec l'aide d'un outil d'IA.!&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <pubDate>Thu, 23 Jan 2025 23:00:37 +0100</pubDate>
      <guid isPermaLink="false">15850d7a238f4b4b55b41241f5e05869</guid>
    </item>
  </channel>
</rss>
