Автоматическая настройка после первой установки
В последней статье я описал начало перехода с Linux на Windows и как можно сделать флешку для инсталляции. Теперь поговорим о том как можно сделать этот переход более гладким.
За годы работы в IT я понял что хорошо иметь готовый шаблон для всех своих действий например если хочется повторить настройки своего сервера или понять кто сделал какие изменения и для чего. Это служит как “автоматическая” документация машины и так же позволяет быстро и безболезненно переиграть настройки компьютера.
Этот подход называется IaC (Infrastructure as Code) и давно применяется при администрации серверной инфраструктуры. В этом отношении Windows был всегда проблематичен так как основные программы для IaC написаны под разные *nix системы. Поэтому программы как Ansible или Salt не работают полноценно на этой системе. Но после знакомства с Powershell должен признаться что этого вполне хватает чтобы развернуть свежую инсталляцию. Конечно это не будет идемпотентная, декларативная конфигурация как при использовании Ansible, но десктоп и не должен быть абсолютно стабилен как сервер.
Установка пакетов и приложений
Линукс всегда отличался своей моделью хранилища приложений. Каждая версия какого то дистрибутива имела свое хранилище с приложениями и с помощью пакетного менеджера как apt, dnf, yum, zypper и пр. можно было устанавливать приложения из этого хранилища.
В Windows до сих пор нет таких хранилищ, но с версии Windows 10 1709 появился
пакетный менеджер winget
с помощью которого установка приложений стала
значительно проще.
Теперь больше не нужно заходить на разные сайты и качать .exe
файлы чтобы
устанавливать свои приложения.
Достаточно открыть powershell
и запустить winget install package.id
.
Следовательно подобный скрипт достаточно чтобы установить все ваши приложения.
# List of Winget Package ID's to be installed by default
$apps = @(
'git.git'
'Google.Chrome'
'Microsoft.Powershell'
'Microsoft.VisualStudioCode'
'Microsoft.WindowsTerminal'
)
function Install-Apps {
param (
$Apps
)
foreach ($app in $Apps) {
winget install --silent --accept-package-agreements --accept-source-agreements $app
}
}
Install-Apps $apps
Если у вас под рукой нет установленной винды то посмотреть подобные ID пакетов можно здесь. https://winget.run/
А как же с разработкой?
Веб разработка на Windows была всегда немного не удобной. Из за того что весь веб направлен на системы POSIX то Windows всегда хромал из за проблем как разные окончания строк, разные ПО на сервере и на машине разработчика.
Всегда была возможность запускать виртуальную машину или установить прослойку совместимости как cygwin. Но виртуальная машина довольно тяжеловесное решение с которым не удобно работать текстовыми редакторами. А cygwin часто проявлял мало заметные баги.
Решение этих проблем Microsoft предоставила в виде Windows Subsystem for Linux
в 2016 году. Первая версия представляла из себя прослойку совместимости котороая
переводила запросу к ядру Линукс в запросы к NT ядру. С такой архитектурой сильно
страдала скорость доступа к файлам. С 2019 года у нас есть WSL 2. В этой версии
Microsoft предоставили спец “упрощенное” ядро которое запускается с помощью
Hyper-V.
Таким образом у нас есть легкая виртуальная машина которая позволяет работать с линуксом и предоставляет ряд удобного функционала как
- использование .exe файлов внутри linux машины
- прокидывание графических приложений в Windows
- файловый доступ систем друг к другу.
В комбинации с редактором VSCode и его расширением для удаленной разработки WSL позволяет комфортно/безшовно писать web приложения.
Я погружусь в это схему разработки в следующей статье.
Для начала можно просто активировать WSL и попробовать как эта система работает.
function Install-WSL {
Enable-WindowsOptionalFeature -Online -FeatureName "Microsoft-Windows-Subsystem-Linux"
# We use ubuntu here because it has the best out of the box experience with WSL.
wsl --install ubuntu -n
wsl --set-default-version 2
}
Install-WSL
Но без командной строки жить не возможно!
Согласен, но оказывается и тут не приходится страдать. В мае 2019 года Microsoft публиковали программу Windows Terminal.
Удобный терминал с настройками в виде файла .json
, вкладками, панелями,
поддержкой Unicode и пр.
Powershell так же получила такие фреймворки как oh-my-posh
которые улучшают
интерактивное использование командной строки. С версии 6 powershell по
умолчанию использует кодировку UTF-8 что повышает совместимость с *nix системами
и уменьшает неочевидные баги.
Для установки Windows Terminal как основной терминал системы нужно изменить пару ключей в registry.
function Set-WindowsTerminal-As-Default-Console {
# GUID's are taken after using the graphical config method
$registryPathToDefaultConsoleSetting = "HKCU:\Console\%%Startup"
$delegationConsoleGuid = "{2EACA947-7F5F-4CFA-BA87-8F7FBEEFBE69}"
$delegationTerminalGuid = "{E12CFF52-A866-4C77-9A90-F570A7AA2C6B}"
if (!(Test-Path -Path $registryPathToDefaultConsoleSetting)) {
New-Item -Path HKCU:\Console\%%Startup
}
Set-ItemProperty -Path $registryPathToDefaultConsoleSetting -Name "DelegationConsole" -Type String -Value $delegationConsoleGuid
Set-ItemProperty -Path $registryPathToDefaultConsoleSetting -Name "DelegationTerminal" -Type String -Value $delegationTerminalGuid
}
Set-WindowsTerminal-As-Default-Console
После чего потребуется перезапуск системы, только тогда настройки применятся.
Итог
Готовый скрипт для настройки можно посмотреть здесь.
В него можно добавлять все что угодно для улучшения первоначальной настройки
вашей системы. Часть возможностей можно посмотреть с помощью get-command -all
.
Увидев этот список становится понятно что ограничений, на установку и настройку
чего либо, нет.