Files

254 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
date: '2026-04-26T04:58:44-04:00'
lastmod: '2026-04-26T04:58:44-04:00'
draft: false
title: 'Ansible в Windows 10 через WSL2: Debian, uv, VHDX и удобный рабочий процесс'
slug: 'ansible-controller-on-win10'
description: ''
categories:
- 'devops'
tags:
- 'devops'
- 'ansible'
- 'windows'
- 'iac'
keywords:
- 'wsl'
- 'win10'
- 'ansible'
- 'powershell'
- 'iac'
cover:
image: "hero.svg"
alt: "Ansible в Windows 10 через WSL2"
relative: true
---
На домашней машине у меня всё еще 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 вручную:
```powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
После этого перезагрузи ПК. Эти два компонента нужны для работы WSL2, потому что дистрибутив запускается внутри легковесной виртуальной машины.
Затем задаём WSL2 как версию по умолчанию:
```powershell
wsl --set-default-version 2
```
## Устанавливаем Debian без Store
Для установки Debian без Microsoft Store удобнее использовать импорт rootfs-архива или готового VHDX-образа. Важно не искать случайные архивы по форумам, а брать Debian из официального источника или собирать rootfs на основе официального образа Debian.
На практике удобны два пути:
скачать официальный Debian-образ и подготовить из него rootfs;
либо сразу импортировать уже готовый rootfs-архив, если он у вас есть.
Пример импорта:
```powershell
mkdir D:\WSL\Debian
wsl --import Debian D:\WSL\Debian D:\Downloads\debian-rootfs.tar --version 2
```
После этого запускаем Debian так:
```powershell
wsl -d Debian
```
Если Debian уже был установлен из Store, его можно перенести в управляемый каталог через экспорт и повторный импорт, что особенно удобно для бэкапа и миграции.
## Перенос Debian из Store
Сценарий переноса простой: экспортируем текущий дистрибутив, затем импортируем его в нужную папку. Microsoft документирует wsl --export, wsl --unregister и wsl --import как штатный путь для переноса и резервного копирования WSL-дистрибутивов.
​
```powershell
# Смотрим имя дистрибутива:
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:
```bash
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:
```bash
cd ~/ansible
uv venv
source .venv/bin/activate
uv pip install ansible-core
```
Если нужен линтер:
``` bash
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
```bash
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.
​
Самый простой вариант:
```bash
cd /mnt/d/ansible
```
Если хотите, чтобы в Linux путь был именно ~/ansible, создайте символическую ссылку:
```bash
rm -rf ~/ansible
ln -s /mnt/d/ansible ~/ansible
```
После этого ~/ansible будет указывать на D:\ansible. Это удобно: в Ansible-проектах вы работаете с привычным Linux-путем, а файлы физически лежат на Windows-диске.
​
## Команды управления WSL
Минимальный набор команд для повседневной работы:
```powershell
# Показать все дистрибутивы и их версию
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 и рабочие файлы.
```powershell
# Перед бэкапом обязательно останавливаем WSL
wsl --shutdown
# Затем создаtv бэкап
wsl --export Debian D:\Backup\Debian\Debian.vhdx --vhd
```
Это удобнее ручного копирования ext4.vhdx, потому что команда сразу создает переносимый снимок дистрибутива в формате VHDX.
## Восстановление
Если нужно восстановить среду из такого бэкапа, импортируем VHDX как дистрибутив:
```powershell
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 без необходимости перезагрузки.