На домашней машине у меня всё еще Winodws 10 стоит(домашние предпочитают удобные цепи закрытого софта вместо свободы), но доставать ноут каждый раз когда нужно управлять инфраструктурой через Ansible бывает сложно, самый практичный путь — поставить Debian в WSL2 и работать уже внутри него. Такой сценарий дает полноценную Linux-среду, не требует отдельной виртуальной машины и удобно бэкапится целиком через wsl –export в формат VHDX.

Ниже — полностью рабочая схема без Microsoft Store: ручная установка WSL2, импорт Debian, настройка uv, установка ansible-core, маппинг проекта на D:\ansible и резервное копирование через VHDX.

Что понадобится

Для WSL2 на Windows 10 нужна версия 2004 и сборка 19041 или новее, а также включенная аппаратная виртуализация в BIOS/UEFI. Установка WSL и Debian выполняется из PowerShell от имени администратора.

  • Windows 10 с поддержкой WSL2.
  • PowerShell с правами администратора.
  • Доступ к интернету для загрузки компонентов и пакетов.
  • Папка для WSL, например D:\WSL\Debian.
  • Папка для проектов, например D:\ansible.

Включаем WSL2 вручную

Если Microsoft Store недоступен или вы не хотите им пользоваться, включите компоненты Windows вручную:

1
2
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

После этого перезагрузи ПК. Эти два компонента нужны для работы WSL2, потому что дистрибутив запускается внутри легковесной виртуальной машины.

Затем задаём WSL2 как версию по умолчанию:

1
wsl --set-default-version 2

Устанавливаем Debian без Store

Для установки Debian без Microsoft Store удобнее использовать импорт rootfs-архива или готового VHDX-образа. Важно не искать случайные архивы по форумам, а брать Debian из официального источника или собирать rootfs на основе официального образа Debian.

На практике удобны два пути:

скачать официальный Debian-образ и подготовить из него rootfs;

либо сразу импортировать уже готовый rootfs-архив, если он у вас есть.

Пример импорта:

1
2
mkdir D:\WSL\Debian
wsl --import Debian D:\WSL\Debian D:\Downloads\debian-rootfs.tar --version 2

После этого запускаем Debian так:

1
wsl -d Debian

Если Debian уже был установлен из Store, его можно перенести в управляемый каталог через экспорт и повторный импорт, что особенно удобно для бэкапа и миграции.

Перенос Debian из Store

Сценарий переноса простой: экспортируем текущий дистрибутив, затем импортируем его в нужную папку. Microsoft документирует wsl –export, wsl –unregister и wsl –import как штатный путь для переноса и резервного копирования WSL-дистрибутивов. ​

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16

# Смотрим имя дистрибутива:
wsl -l -v

#Останавливаем WSL
wsl --shutdown

#Экспортируем Debian в архив
wsl --export Debian D:\Backup\Debian.tar

#Удаляем старую регистрацию, если нужен чистый перенос

wsl --unregister Debian

#Импортируем в управляемую папку
wsl --import Debian D:\WSL\Debian D:\Backup\Debian.tar --version 2

После этого Debian будет жить в D:\WSL\Debian, а не в Store-профиле пользователя, и им станет проще управлять и делать бэкап.

Настраиваем Ansible через uv

Для Ansible в WSL2 я рекомендую не системную установку и не pip в системный Python, а отдельное виртуальное окружение, управляемое через uv. Такой подход изолирует зависимости, не трогает системный Python Debian и позволяет легко воспроизводить окружение после восстановления из бэкапа.

ansible-core — это базовый движок Ansible. В отличие от полного пакета ansible, он содержит только ядро: выполнение playbook’ов, inventory-логику, CLI и основную инфраструктуру. Это делает установку легче, прозрачнее и удобнее для проектного workflow.

Минимальный набор для установки:

  • uv;
  • ansible-core;
  • openssh-client;
  • git;
  • python3.

После входа в Debian:

1
2
3
sudo apt update
sudo apt install -y curl git openssh-client python3
curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/uv/releases/download/0.11.7/uv-installer.sh | sh

После установки uv нужно переоткрытьshell-сессию или добавьте uv в PATH, если установщик это не сделал автоматически. uv умеет создавать виртуальные окружения и ставить пакеты внутрь них, а также работать с выбранным Python-интерпретатором.

Создаем окружение Если проект лежит в ~/ansible:

1
2
3
4
cd ~/ansible
uv venv
source .venv/bin/activate
uv pip install ansible-core

Если нужен линтер:

1
uv pip install ansible-core ansible-lint

Такой workflow хорош тем, что версию Ansible можно менять независимо от системы, а зависимости проекта не смешиваются с Debian-пакетами.

Почему ansible-core удобнее Для рабочей машины под Ansible ansible-core обычно удобнее, чем полный пакет ansible, по нескольким причинам. Во-первых, он меньше и чище, поэтому окружение проще поддерживать. Во-вторых, вы явно контролируете, какие коллекции и зависимости нужны именно вашему проекту. В-третьих, это снижает зависимость от версии, которую выдает системный репозиторий Debian.

Практически это означает следующее:

  • ansible-core ставится в проектный venv;
  • коллекции ставятся отдельно через ansible-galaxy или по requirements.yml;
  • при необходимости окружение можно пересоздать за пару минут.

Рекомендуемый workflow

1
2
3
4
5
mkdir -p ~/ansible
cd ~/ansible
uv venv
source .venv/bin/activate
uv pip install ansible-core

Дальше в репозитории храним:

  • playbook’и;
  • inventory;
  • requirements.yml;
  • ansible.cfg. Сами зависимости и .venv в Git не добавляем. Это делает проект переносимым и аккуратным.

Маппинг ~/ansible в D:\ansible

Если хотите хранить проект на диске Windows, используйте стандартный путь WSL: D:\ansible в Linux виден как /mnt/d/ansible. Это штатный механизм WSL, а для обратного преобразования путей существует wslpath. ​ Самый простой вариант:

1
cd /mnt/d/ansible

Если хотите, чтобы в Linux путь был именно ~/ansible, создайте символическую ссылку:

1
2
rm -rf ~/ansible
ln -s /mnt/d/ansible ~/ansible

После этого ~/ansible будет указывать на D:\ansible. Это удобно: в Ansible-проектах вы работаете с привычным Linux-путем, а файлы физически лежат на Windows-диске. ​

Команды управления WSL

Минимальный набор команд для повседневной работы:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# Показать все дистрибутивы и их версию
wsl -l -v

# Запустить Debian
wsl -d Debian

# Сделать Debian дистрибутивом по умолчанию
wsl --set-default Debian

#​ Полностью остановить WSL2
wsl --shutdown

# Остановить только Debian
wsl --terminate Debian

# Перевести Debian в WSL2, если он вдруг оказался в WSL1
wsl --set-version Debian 2

Бэкап через VHDX

Для WSL2 самый удобный резервный формат — VHDX. Microsoft прямо поддерживает экспорт дистрибутива в VHDX через wsl –export … –vhd, а затем импорт обратно через wsl –import … –vhd. Это сохраняет весь дистрибутив целиком, включая Ansible, Python-окружение, ключи, историю shell и рабочие файлы.

1
2
3
4
5
# Перед бэкапом обязательно останавливаем WSL
wsl --shutdown

# Затем создаtv бэкап
wsl --export Debian D:\Backup\Debian\Debian.vhdx --vhd

Это удобнее ручного копирования ext4.vhdx, потому что команда сразу создает переносимый снимок дистрибутива в формате VHDX.

Восстановление

Если нужно восстановить среду из такого бэкапа, импортируем VHDX как дистрибутив:

1
wsl --import DebianRestored D:\WSL\DebianRestored D:\Backup\Debian\Debian.vhdx --vhd --version 2

Если мы храним дистрибутив в отдельной папке и используете import-in-place, можно подключить существующий VHDX без распаковки. Это особенно удобно при переносе среды на другой диск или другой компьютер.

Практичная схема для работы

Для повседневного использования я бы рекомендовал такую схему:

  • Debian живет в WSL2;
  • Ansible ставится через uv в .venv;
  • проекты лежат в D:\ansible и маппятся через /mnt/d/ansible;
  • резервная копия делается через wsl –export … –vhd;
  • .venv в Git не хранится, а dependencies фиксируются в документации или requirements.yml.

Такой подход дает хорошую изоляцию, быстрый старт после восстановления и удобную миграцию между машинами. Для WSL2 это один из самых практичных способов использовать Ansible в Windows 10 без необходимости перезагрузки.