Crating doc for windows part boot from KVM
@@ -20,7 +20,9 @@
|
|||||||
:caption: Configuration côté utilisateur
|
:caption: Configuration côté utilisateur
|
||||||
:glob:
|
:glob:
|
||||||
|
|
||||||
xorg/*
|
xorg/urxvt/*
|
||||||
|
xorg/vscodium/*
|
||||||
|
xorg/kvmwindowspartboot/*
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
@@ -123,4 +125,4 @@ Iptables
|
|||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
Tout au long des manipulations, je vais créer les règles iptables pour sécuriser les outils que je mettrai en place.
|
Tout au long des manipulations, je vais créer les règles iptables pour sécuriser les outils que je mettrai en place.
|
||||||
Tout ce qu'il y a à connaitre sera reporté dans une documentation consacrée à iptables
|
Tout ce qu'il y a à connaitre sera reporté dans une documentation consacrée à iptables
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
rm -fr /tmp/sphinx-livereload/
|
|
||||||
sphinx-reload --build-dir /tmp/sphinx-livereload/ ./
|
|
||||||
BIN
xorg/kvmwindowspartboot/calculatesizeinsector.png
Normal file
|
After Width: | Height: | Size: 70 KiB |
209
xorg/kvmwindowspartboot/kvmwindowspartboot.rst
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
Booter une partition windows avec KVM
|
||||||
|
=====================================
|
||||||
|
|
||||||
|
Pour booter sur une partition windows depuis KVM, nous allons passer
|
||||||
|
par trois étapes :
|
||||||
|
|
||||||
|
#. Créer un disque à l'aide de ``mdadm`` enagrégeant des images au format ``raw``
|
||||||
|
et la partition, afin de recréer la table des partitions et la partition de boot.
|
||||||
|
#. Booter sur le disque créé et réinstaller la partition de boot à l'aide d'une
|
||||||
|
image d'installation Windows
|
||||||
|
#. Installer et paramétrer les drivers kvm pour Windows
|
||||||
|
|
||||||
|
|
||||||
|
Pour ce tutoriel, je me suis grandement inspiré de `ce tutoriel <https://simgunz.org/posts/2021-12-12-boot-windows-partition-from-linux-kvm/>`_.
|
||||||
|
|
||||||
|
Installation des prérequis
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
On installe d'abord les paquets nécessaires à la virtualisation et ceux à la création des disques :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
pacman -S qemu-full virt-manager dnsmasq mdadm dosfstools
|
||||||
|
|
||||||
|
Création du disque mdadm :
|
||||||
|
|
||||||
|
On se place dans le répertoire des images libvirt :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cd /var/lib/libvirt/images/
|
||||||
|
|
||||||
|
|
||||||
|
On créer ensuite les fichiers ``raw`` qui vont être agrégés à notre partition :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
dd if=/dev/zero of=efi1 bs=1M count=200
|
||||||
|
dd if=/dev/zero of=efi2 bs=1M count=1
|
||||||
|
|
||||||
|
On identifie ensuite notre partition windows, par exemple ``/dev/nvme0n1p3``.
|
||||||
|
|
||||||
|
On vérifie que les modes nécessaires sont bien chargés, sinon on les démarre à la main :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
lsmod | grep loop
|
||||||
|
lsmod | grep linear
|
||||||
|
# On charge les modules si nécessaire :
|
||||||
|
modprobe loop
|
||||||
|
modprobe linear
|
||||||
|
|
||||||
|
On regarde le device loop disponible et on monte ensuite les images en loopback :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
losetup -f
|
||||||
|
losetup /dev/loop0 /var/lib/libvirt/images/efi1
|
||||||
|
losetup -f
|
||||||
|
losetup /dev/loop1 /var/lib/libvirt/images/efi2
|
||||||
|
|
||||||
|
Pour finir on créer le disque md0 qui agrège les deux loop et notre partition.
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
mdadm --build --verbose /dev/md0 --chunk=512 --level=linear --raid-devices=3 /dev/loop0 /dev/nvme0n1p3 /dev/loop1
|
||||||
|
|
||||||
|
Pour supprimer le disque, on utilise les commandes suivantes :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
mdadm --stop /dev/md0
|
||||||
|
losetup -d /dev/loop0 /dev/loop1
|
||||||
|
|
||||||
|
Création de la table des partitions
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
Pour définir ou commence et ou finissent les partitions, il va falloir utiliser gparted avec les unités en secteur
|
||||||
|
et calculer la taille de nos fichiers raw en secteur.
|
||||||
|
|
||||||
|
On récupère la taille en bytes avec la commande ls -la, et on la divise par 512, la taille des secteurs que l'on a
|
||||||
|
choisie quand on à créé le disque ``mdadm`` avec l'option ``--chunk=512``.
|
||||||
|
|
||||||
|
.. image:: ./calculatesizeinsector.png
|
||||||
|
:width: 600px
|
||||||
|
|
||||||
|
On créer ensuite la table des partitions et la partiticon de boot :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
parted /dev/md0
|
||||||
|
(parted) unit s # use sector size
|
||||||
|
(parted) mktable gpt
|
||||||
|
(parted) mkpart EFI fat32 2048 409599 # depends on size of efi1 file
|
||||||
|
(parted) mkpart Windows ntfs 409600 -2049 # depends on size of efi1 and efi2 files
|
||||||
|
(parted) set 1 boot on
|
||||||
|
(parted) set 1 esp on
|
||||||
|
(parted) set 2 msftdata on
|
||||||
|
(parted) quit
|
||||||
|
|
||||||
|
Pour être sur que notre table des partitions est bien alignée sur la partition windows, on peut la monter :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
mount /dev/md0p2 /mnt
|
||||||
|
ls -lha /mnt
|
||||||
|
umount /mnt
|
||||||
|
|
||||||
|
Pour finir, on formate notre partition efi en fat 32 :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
mkfs.fat -F 32 /dev/md0p1
|
||||||
|
|
||||||
|
Premier boot et installation de la partition de démarrage Windows
|
||||||
|
-----------------------------------------------------------------
|
||||||
|
|
||||||
|
On peut télécharger l'iso d'installation de Windows `ici <https://www.microsoft.com/en-us/software-download/windows10ISO>`_
|
||||||
|
|
||||||
|
Lancement de la machine virtuelle et boot sur l'iso d'installation :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
qemu-system-x86_64 \
|
||||||
|
-bios /usr/share/ovmf/x64/OVMF_CODE.fd \
|
||||||
|
-drive file=/dev/md0,media=disk,format=raw \
|
||||||
|
-cpu host -enable-kvm -m 4G \
|
||||||
|
-cdrom /root/Downloads/Win10_22H2_English_x64v1.iso
|
||||||
|
|
||||||
|
On peut ensuite lancer une invite de commande pour installer la partition de boot Windows :
|
||||||
|
|
||||||
|
.. code-block:: msdos
|
||||||
|
|
||||||
|
diskpart
|
||||||
|
DISKPART> list disk
|
||||||
|
DISKPART> select disk 0 # Select the disk
|
||||||
|
DISKPART> list volume # Find EFI volume (partition) number
|
||||||
|
DISKPART> select volume 2 # Select EFI volume
|
||||||
|
DISKPART> assign letter=B # Assign B: to EFI volume
|
||||||
|
DISKPART> exit
|
||||||
|
bcdboot C:\Windows /s B: /f ALL
|
||||||
|
exit
|
||||||
|
|
||||||
|
On peut éteindre l'ordinateur et redémarrer sans l'iso d'installation pour être sur que tout
|
||||||
|
fonctionne bien :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
qemu-system-x86_64 \
|
||||||
|
-bios /usr/share/ovmf/x64/OVMF_CODE.fd \
|
||||||
|
-drive file=/dev/md0,media=disk,format=raw \
|
||||||
|
-cpu host -enable-kvm -m 4G
|
||||||
|
|
||||||
|
Création de la machine virtuelle dans virt-manager :
|
||||||
|
----------------------------------------------------
|
||||||
|
|
||||||
|
Création d'un script pour créer et supprimer ``/dev/md0``
|
||||||
|
---------------------------------------------------------
|
||||||
|
|
||||||
|
Pour faciliter la création et la suppression du volume mdadm, on peut utiliser un script tel que celui ci :
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
_WINPART="/dev/nvme0n1p3"
|
||||||
|
cd $(dirname "$0") || exit 1
|
||||||
|
_EFIDIR=$(pwd)
|
||||||
|
_LOOP1=""
|
||||||
|
_LOOP2=""
|
||||||
|
|
||||||
|
_start() {
|
||||||
|
set -e
|
||||||
|
#Do nothing if md0 exist
|
||||||
|
[[ -e /dev/md0 ]] && printf "/dev/md0 already exists" && exit 1
|
||||||
|
# Enable modules if not loaded
|
||||||
|
lsmod | grep loop || modprobe loop
|
||||||
|
lsmod | grep linear || modprobe linear
|
||||||
|
_LOOP1=$(losetup -f)
|
||||||
|
losetup "$_LOOP1" "$_EFIDIR/efi1"
|
||||||
|
_LOOP2=$(losetup -f)
|
||||||
|
losetup "$_LOOP2" "$_EFIDIR/efi2"
|
||||||
|
mdadm --build --verbose /dev/md0 --chunk=512 --level=linear \
|
||||||
|
--raid-devices=3 "$_LOOP1" "$_WINPART" "$_LOOP2"
|
||||||
|
echo "$_LOOP1 $_LOOP2" > .loop-devices
|
||||||
|
}
|
||||||
|
|
||||||
|
_stop() {
|
||||||
|
mdadm --stop /dev/md0
|
||||||
|
xargs losetup -d < .loop-devices
|
||||||
|
}
|
||||||
|
|
||||||
|
_usage() {
|
||||||
|
cat << EOF
|
||||||
|
usage :
|
||||||
|
md0.sh start Create md0 device
|
||||||
|
md0.sh stop Destroy md0 device
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ "$1" == "start" ]] && _start
|
||||||
|
[[ "$1" == "stop" ]] && _stop
|
||||||
|
[[ "$1" == "usage" ]] && _usage
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 174 KiB After Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 147 KiB After Width: | Height: | Size: 147 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 76 KiB |
@@ -49,18 +49,18 @@ Un thème sombre mais avec des contrastes meilleurs que celui de base.
|
|||||||
C'est le thème de base de l'éditeur Atom.
|
C'est le thème de base de l'éditeur Atom.
|
||||||
Il est dans le store, il suffit de tapper dark thème
|
Il est dans le store, il suffit de tapper dark thème
|
||||||
|
|
||||||
.. image:: ../images/atom_dark_theme_extension.png
|
.. image:: ./atom_dark_theme_extension.png
|
||||||
|
|
||||||
reStructuredText Syntax highlighting
|
reStructuredText Syntax highlighting
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Très pratique pour la documentation avec Sphinx. Disponible dans le store.
|
Très pratique pour la documentation avec Sphinx. Disponible dans le store.
|
||||||
|
|
||||||
.. image:: ../images/reStructuredText_extension.png
|
.. image:: ./reStructuredText_extension.png
|
||||||
|
|
||||||
emojisense
|
emojisense
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
Très pratique à utiliser avec sphinx pour agrémenter notre documentation de
|
Très pratique à utiliser avec sphinx pour agrémenter notre documentation de
|
||||||
petits emoji 😃. on lance l'intellisense avec ``Ctrl+i``.
|
petits emoji 😃. on lance l'intellisense avec ``Ctrl+i``.
|
||||||
|
|
||||||
.. image:: ../images/emoji_extension.png
|
.. image:: ./emoji_extension.png
|
||||||
|
|
||||||