Вообще говоря, есть три метода:
1. Импортируйте напрямую через файлы GitHub.
2. Импортируйте через образ докера.
3、Установить через LxRunOffline
Любой дистрибутив Linux можно использовать в подсистеме Windows для Linux (WSL), импортировав его с помощью файла tar (даже если он недоступен в Microsoft Store).
-- отконтейнерсередина экспорт
docker pull centos:7.9.2009
docker run -d --name lhrcentos79 -h lhrcentos79 --privileged=true centos:7.9.2009 /usr/sbin/init
docker export lhrcentos79 > /mnt/f/lhrcentos79.tar
wsl --import centos79 F:\wsl2centos79 f:\lhrcentos79.tar
wsl --set-default centos79
wsl -d centos79
-- Решить не удалось to get D-Bus connection: Operation not permitted
mkdir -p /opt/distrod
cd /opt/distrod
wget https://github.com/nullpo-head/wsl-distrod/releases/latest/download/opt_distrod.tar.gz
tar xvf opt_distrod.tar.gz
rm -rf opt_distrod.tar.gz
/opt/distrod/bin/distrod enable --start-on-windows-boot
wsl --shutdown
wsl
systemctl status | cat
https://learn.microsoft.com/zh-cn/windows/wsl/use-custom-distro
ссылкаадрес: https://www.how2shout.com/how-to/install-centos-on-windows-10-subsystem-for-linux.html
Загрузите пакет образа CentOS Вот проект с открытым исходным кодом на Github, который обеспечивает загрузку CentOS, подсистемы Windows для Linux. https://github.com/mishamosher/CentOS-WSL
rootfs.tar.gz
, CentOS.exe
CentOS.exe
документ, Запуск от имени администратора
CentOS7.exe
Дважды щелкните проект, чтобы войти linux система
Другой способ: в cmd середина входить wsl
,Введите систему Linuxyum -y update
Чтобы удалить его, измените PowerShell Переключиться от имени администратора CentOS Оглавление, ./CentOS.exe clean
После установки системы CentOS в WSL2 не могут запускаться службы, основанные на systemctl или служебных командах, например докер nginx php-fpm mysql и т. д.
Chocolatey — это инструмент управления пакетами Windows, а LxRunOffline — программное обеспечение для управления WSL. Используйте choco для установки LxRunOffine, а затем используйте LxRunOffline для установки различных версий образов Linux.
NuGet (произносится как New Get) — это менеджер пакетов программного обеспечения для платформы разработки Microsoft .NET и расширения Visual Studio. Chocolatey — это менеджер пакетов, основанный на NuGet. Как и yum или apt в Linux, вы также можете использовать командную строку для установки программ в Windows 10.
Щелкните правой кнопкой мыши меню «Пуск», выберите Windows PowerShell (Администратор), откройте окно PowerShell с правами администратора, введите команду и нажмите Enter:
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
-- или
Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
После завершения,входить Заказ:choco
, если номер версии отображается правильно, установка прошла успешно.
LxRunOffline — очень практичное программное обеспечение для управления WSL. Оно может выполнять резервное копирование, создавать, восстанавливать и экспортировать подсистему WSL. Оно также может устанавливать любой дистрибутив Linux, адаптируемый к WSL. Оно может устанавливать подсистему WSL в любой каталог.
Введите команду в окне PowerShell, чтобы установить LxRunOffline, и перезапустите PowerShell после завершения установки.
choco install lxrunoffline -y
-- обновление
choco upgrade lxrunoffline
Если его невозможно установить и появляется следующая ошибка, вы можете загрузить пакет автономной установки: https://github.com/DDoSolitary/LxRunOffline/releases/download/v3.5.0/LxRunOffline-v3.5.0-msvc.zip
PS C:\Users\lhr> choco install lxrunoffline -y
Chocolatey v1.1.0
Installing the following packages:
lxrunoffline
By installing, you accept licenses for the packages.
Error retrieving packages from source 'https://community.chocolatey.org/api/v2/':
Основное подключение выполнено: При отправке произошла ошибка.
lxrunoffline not installed. The package was not found with the source(s) listed.
Source(s): 'https://community.chocolatey.org/api/v2/'
NOTE: When you specify explicit sources, it overrides default sources.
If the package version is a prerelease and you didn't specify `--pre`,
the package may not be found.
Please see https://docs.chocolatey.org/en-us/troubleshooting for more
assistance.
Chocolatey installed 0/1 packages. 1 packages failed.
See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
Failures
- lxrunoffline - lxrunoffline not installed. The package was not found with the source(s) listed.
Source(s): 'https://community.chocolatey.org/api/v2/'
NOTE: When you specify explicit sources, it overrides default sources.
If the package version is a prerelease and you didn't specify `--pre`,
the package may not be found.
Please see https://docs.chocolatey.org/en-us/troubleshooting for more
assistance.
И настройте переменные среды:
setx PATH "%path%;F:\LxRunOffline-v3.5.0-msvc"
исследовать:
C:\Users\lhr>LxRunoffline version
LxRunOffline v3.5.0
В окне командной строки используйте команду «LxRunoffline version», если номер версии успешно отображается, это означает, что установка прошла успешно.
Другие команды choco следующие:
choco -v Посмотреть версию choco choco list -li Просмотр локально установленного программного обеспечения choco выполните поиск nodejs, чтобы найти установочный пакет choco установить sublimetext3 скачать удаление choco, удаление sublimetext3 обновление choco обновление sublimetext3 обновление (обновление) Шоколадное обновление, шоколадное обновление, обновление шоколадного самостоятельно
Linux Изображение релиза доступно по адресу http://hub.docker.com иди найди,ссылка:https://github.com/RoliSoft/WSL-Distribution-Switcher
На примере CentOS откройте https://hub.docker.com/_/centos/.
Загрузите образ CentOS8:
https://raw.githubusercontent.com/CentOS/sig-cloud-instance-images/CentOS-8-x86_64/docker/centos-8-x86_64.tar.xz
Загрузите образ CentOS7:
https://raw.githubusercontent.com/CentOS/sig-cloud-instance-images/CentOS-7-x86_64/docker/centos-7-x86_64-docker.tar.xz
Другие адреса изображений: https://github.com/CentOS/sig-cloud-instance-images.
Формат командной строки для установки подсистемы WSL:
LxRunOffline install -n Настроить имя системы -d Установитьпуть к каталогу -f Установитьпуть к пакету.tar.xz
Перезапустите PowerShell и введите команду для установки образа CentOS:
LxRunOffline install -n CentOS8 -d f:/CentOS8 -f f:\centos-8-x86_64.tar.xz
LxRunOffline install -n CentOS7 -d f:/CentOS7 -f f:\centos-7-x86_64-docker.tar.xz
Эта строка команд означает, что CentOS Система установлена на ехать centos папку и назовите ее CentOS8. Примечание: Окна Путь к файлу в командной строке системы и Linux Система другая, вот каталог установки f:/
Хотите использовать Linux Обозначение режима обратной косой чертой предназначено для WSL Используйте и путь к установочному пакету; f:\
для LxRunOffline Используйте, да Windows путь вниз.
Просмотрите все установленные образы. Если Centos установлен, это означает, что установка прошла успешно.
LxRunOffline.exe list
Он также появится, если установка не удалась. centos Оглавление,Установитьне удалось повторно Установитькогда это необходимоудалитьзеркало,кроме того Установить Оглавлениесуществовать C При удалении диска могут возникнуть проблемы с разрешениями. Если каталог не удаляется после удаления, его можно удалить вручную.
Удалить образ системы WSL командой:
LxRunOffline.exe uninstall -n centos
Другие команды LxRunOffline:
//уже УстановитьизWSL
LxRunOffline list
//Восстанавливаем WSL
LxRunOffline install -n <wsl_name> -d <res_path> -f <back_path>
//удалитьWSL
LxRunOffline uninstall -n <wsl_name>
//Резервное копирование WSL
LxRunOffline export -n <wsl_name> -f <back_path>
eg:LxRunOffline export -n CentOS -f D:\LinuxSubSystem\WSL\centos7-diy-20210430.tar.xz
//запускатьодинWSL
LxRunOffline run -n <wslname>
`l` , `list` - Перечислить все Установитьиз Дистрибутив.
`gd` , `get-default` - получать bash.exe Используйте Дистрибутив по умолчанию.
`sd` , `set-default` - настраивать bash.exe Используйте Дистрибутив по умолчанию.
`i` , `install` - Установитьновыйиз Дистрибутив。
`sd` , `set-default` - настраивать bash.exe Используйте Дистрибутив по умолчанию.
`ui` , `uninstall` - удалить Дистрибутив。
`rg` , `register` - Зарегистрировать существующий каталог из Установить.
`ur` , `unregister` - Отмените регистрацию Дистрибутива, не удаляя каталог «Установить».
`m` , `move` - Переместите Дистрибутив в новый каталог.
`d` ,`duplicate` - существоватьновый Оглавлениесерединакопироватьсуществующий Дистрибутив。
`e`, `export` - Экспортировать файловую систему Дистрибутива в `.tar.gz` файл, который можно передать `install` Заказ Установить。
`r` , `run` - существовать Дистрибутивсерединабегать Заказ。
`di` , `get-dir` - получать Дистрибутивиз Установить Оглавление。
`gv` , `get-version` - получать Дистрибутивиздокументсистема Версия。
`ge` , `get-env` - получать Дистрибутивиз Переменные среды по умолчанию。
`se` , `set-env` - настраивать Дистрибутивиз Переменные среды по умолчанию。
`ae` , `add-env` - Добавлены переменные среды Дистрибутивиз по умолчанию.
`re` , `remove-env` - Из Дистрибутивиза переменная среды по умолчанию серединаудалить.
`gu` , `get-uid` - получать Дистрибутивиз Пользователь по умолчаниюиз UID。
`su` , `set-uid` - настраивать Дистрибутивиз Пользователь по умолчаниюиз UID。
`gk` , `get-kernelcmd` - получать Дистрибутивизядро по умолчанию Заказ ХОРОШО。
`sk` , `set-kernelcmd` - настраивать Дистрибутивизядро по умолчанию Заказ ХОРОШО。
`gf` , `get-flags` - получать Дистрибутивизнекоторые знаки。
`sf` , `set-flags` - настраивать Дистрибутивизнекоторые знаки。
`s` , `shortcut` - Создать запуск дистрибутива из ярлыка.
`ec` , `export-config` - Экспорт конфигурации дистрибутива в XML документ.
`ic` , `import-config` - от XML Импорт файлов конфигурации дистрибутива.
`sm` , `summary` - получать Дистрибутивиз Общая информация。
Введите команду и нажмите Enter, чтобы просмотреть установленную информацию WSL.
wsl -l -v
Установите соответствующую версию дистрибутива WSL на WSL2, формат команды:
wsl --set-version <Distro> 2
Информация должна соответствовать информации, запрошенной выше. В этом примере это centos. Введите следующую команду и нажмите Enter:
wsl --set-version centos 2
Введите следующую команду и нажмите Enter, чтобы установить дистрибутив по умолчанию:
wsl -d centos
В это время снова используйте команду wsl -l -v, чтобы проверить. Вы можете видеть, что ВЕРСИЯ centos изменилась на 2, а перед именем добавлен знак * (то есть система WSL по умолчанию).
-- Ошибка: Ошибка: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
cd ~ #Перейти в каталог пользователя
dnf -y install vim wget
dnf -y install net-tools #давать возможность ifconfig,netstat Подождите сети Заказ
dnf -y install git
dnf -y install make
dnf -y install initscripts #давать возможность service Заказ
(1) Создайте резервную копию исходного источника yum.
cd /etc/yum.repos.d
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-Extras.repo CentOS-Extras.repo.bak
mv CentOS-centosplus.repo CentOS-centosplus.repo.bak
mv CentOS-PowerTools.repo CentOS-PowerTools.repo.bak
mv CentOS-AppStream.repo CentOS-AppStream.repo.bak
(2) Загрузите репо-файл соответствующей версии.
# wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
vim CentOS-Base.repo
Вы можете видеть, что исходный код aliyun содержит следующие элементы: [base] [extras] [centosplus] [PowerTools] [AppStream], поэтому резервные копии этих источников были предварительно зарезервированы.
(3) Очистите старый кеш и создайте новый кеш.
# dnf clean all
# dnf makecache
Сам WSL2 запускается под управлением Windows, поэтому при использовании команды Tree или ps вы увидите, что корневой процесс не является systemd, что приведет к невозможности запуска демона системной службы Linux. Когда мы выполним команду systemctl, будет показано, что наша система инициализации (PID 1) не systemd, а /init, предоставленная Microsoft.
$ systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
$ ps u -q 1
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 908 592 ? Sl 10:31 0:00 /init
Возможно, в будущем будет реализован собственный systemd WSL, но что нам делать, если мы хотим иметь среду systemd сейчас?
Поскольку systemd должен выполняться с PID 1, systemd не может быть запущен напрямую, но использование пространства имен Linux позволяет нам создать новое пространство имен в WSL2 и выполнять systemd с PID 1. То есть добавление еще одного уровня пространства имен PID в WSL2 позволяет нам запускать среду systemd в этом новом пространстве имен.
dnf install dotnet-sdk-3.1
cd /home
wget http://repo.okay.com.mx/centos/8/x86_64/release/daemonize-1.7.8-1.el8.x86_64.rpm
rpm -ivh daemonize-1.7.8-1.el8.x86_64.rpm
Если он не установлен, при запуске genie будет сообщено об ошибке: daemonize не может быть найден.
git clone https://github.com/arkane-systems/genie.git
cd genie/genie
make
make install
ln -s /usr/libexec/genie/main/genie /usr/local/bin/genie
vim Makefile Просмотрите сценарий установки. Каталог установки по умолчанию — /usr/libexec/genie. Программная ссылка не настроена, поэтому используйте команду ln, чтобы добавить программную ссылку на последнем шаге.
Теперь вы можете запустить команду systemctl с помощью genie.
Вы также можете напрямую загрузить пакет rpm для установки:
https://github.com/arkane-systems/genie/tags
wget https://github.com/arkane-systems/genie/releases/download/v1.44/genie-1.44-1.fc34.x86_64.rpm
dnf install -y genie-1.44-1.fc34.x86_64.rpm
cat >> /root/.bashrc <<"EOF"
if [ "`ps -eo pid,lstart,cmd | grep systemd | grep -v -e grep -e systemd- | sort -n -k2 | awk 'NR==1 { print $1 }'`" != "1" ]; then
genie -s
fi
EOF
Последняя версия 2.4 требует Python 3.7 и libc.so.6 (GLIBC_2.34), в противном случае будет сообщено об ошибке:
-- Проверятьglibcиз Версия
strings /lib64/libc.so.6 | egrep ^GLIBC_
[root@lhrxxt soft]# dnf install genie-2.4-1.fc36.x86_64.rpm
Last metadata expiration check: 0:04:55 ago on Thu 22 Sep 2022 10:31:26 AM CST.
Error:
Problem: conflicting requests
- nothing provides libc.so.6(GLIBC_2.34)(64bit) needed by genie-2.4-1.fc36.x86_64
- nothing provides python3 >= 3.7 needed by genie-2.4-1.fc36.x86_64
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
[root@lhrxxt soft]#
[root@lhrxxt soft]# strings /lib64/libc.so.6 | egrep ^GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_2.18
GLIBC_2.22
GLIBC_2.23
GLIBC_2.24
GLIBC_2.25
GLIBC_2.26
GLIBC_2.27
GLIBC_2.28
GLIBC_PRIVATE
GLIBC_2.26
GLIBC_2.25
GLIBC_2.28
GLIBC_2.23
GLIBC_2.8
GLIBC_2.5
GLIBC_2.9
GLIBC_2.7
GLIBC_2.6
GLIBC_2.18
GLIBC_2.11
GLIBC_2.16
GLIBC_2.13
GLIBC_2.2.6
[root@lhrxxt soft]#
[root@lhrxxt soft]# cat /etc/redhat-release
CentOS Linux release 8.4.2105
У джинна есть три инструкции:
genie -i запускать systemd процесс
genie -s запускать systemd процесс и войдите в терминал среды
genie -c <command> запускать systemd процесс и выполнить соответствующие инструкции
Пример: установите openssh и запустите
dnf install openssh-server
genie -c systemctl start sshd
dnf -y install psmisc #Установитьpstree
pstree -ap #Проверятьпроцесс Дерево
Вы можете видеть, что пространство systemd, не используемое демоном, будет запускать все процессы systemd.
На этом этапе вы можете войти в эту систему CentOS с помощью ssh-клиента.
Кроме того, используйте команду: genie systemctl Enable sshd, которую нельзя запустить при загрузке.
Связанные отчеты об ошибках:
-- Невозможно запустить systemctl Ошибка заказа
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
Failed to get D-Bus connection: Operation not permitted
Authorization not available. Check if polkit service is running or see debug message for more information.
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables --wait -t nat -N DOCKER: iptables v1.8.4 (nf_tables): CHAIN_ADD failed (No such file or directory): chain PREROUTING
(exit status 4)
Есть как минимум три способа включить systemd в wsl2:
ссылка:https://github.com/gdraheim/docker-systemctl-replacement/blob/master/files/docker/systemctl.py
mv /usr/bin/systemctl /usr/bin/systemctl.old
curl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py > /usr/bin/systemctl
chmod +x /usr/bin/systemctl
Если сообщается об ошибке, скопируйте содержимое вручную.
Я запустил docker на centOS8 и получил ошибку:
failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables --wait -t nat -N DOCKER: iptables v1.8.4 (nf_tables): CHAIN_ADD failed (No such file or directory): chain PREROUTING
(exit status 4)
Решение не найдено.
недостаток: 1. Содержимое, возвращаемое этим методом, намного меньше, чем у обычных команд, и при самостоятельном тестировании возникает множество проблем.
ссылка:https://blog.csdn.net/m0_55155505/article/details/122995993
https://www.jianshu.com/p/e670ae82e97a
GitHub:https://github.com/nullpo-head/wsl-distrod
Distrod — это метадистрибутив WSL2 на базе systemd, который позволяет за минуту установить Ubuntu, Arch Linux, Gentoo и многие другие дистрибутивы с помощью systemd или запустить текущий дистрибутив с помощью systemd.
Distrod также предоставляет встроенную функцию автозапуска и услуги переадресации портов. Это позволяет запускать управляемую службу systemd при запуске Windows и делать ее доступной из-за пределов Windows.
(См. Интеграционный тест в Linux (имя_дистрибутива))
wsl --set-default-version 2
sudo /opt/distrod/bin/distrod enable --start-on-windows-boot
При этой установке systemd включен в дистрибутиве WSL 2.
curl -L -O "https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh"
chmod +x install.sh
sudo ./install.sh install
Этот скрипт устанавливает дистрибутив, но еще не включает его.
Если его не удается установить нормально, вы можете использовать следующие методы:
mkdir -p /opt/distrod
cd /opt/distrod
wget https://github.com/nullpo-head/wsl-distrod/releases/latest/download/opt_distrod.tar.gz
tar xvf opt_distrod.tar.gz
rm -rf opt_distrod.tar.gz
У вас есть два варианта. Если вы хотите, чтобы дистрибутив запускался автоматически при запуске Windows, включите дистрибутив с помощью следующей команды
/opt/distrod/bin/distrod enable --start-on-windows-boot
в противном случае
/opt/distrod/bin/distrod enable
Если вы захотите включить автозапуск в будущем, вы можете запустить его еще раз. with 。enable--start-on-windows-boot
Закройте терминал WSL. Откройте новое окно командной строки и выполните следующие команды.
wsl --terminate Distrod
После повторного открытия нового окна WSL оболочка запустится в сеансе systemd.
После завершения установки вы можете запустить следующую команду для запроса
systemctl status | cat
В официальной документации Distrod описывает, как это работает:
Короче говоря, Distrod — это двоичный файл, который создает простой контейнер с systemd в качестве процесса инициализации и запускает ваш сеанс wsl в этом контейнере. Для этого Distrod делает следующее:
/opt/distrod/bin/distrod
и Вложите другие ресурсы в rootfs。Фактически, Distrod работает аналогично genie и subsystemctl: создайте контейнер, запустите в контейнере systemd с pid 1 и используйте оболочку. Это также упоминается в официальной документации:
Пучок Distrod какодиннезависимыйиз Одноразовый Заказ:в этом случае, distrod работает как genie и subsystemctl。
Однако Distrod делает больше с автозапуском. Посредством вышеуказанных операций Дистрод выполнил:
--start-on-windows-boot
параметрназад,Distrod Зарегистрирую один windows задача, сделать wsl существовать windows run появится при загрузке.По сравнению с другими методами, требующими ручного написания сценариев оболочки для автоматического запуска, Distrod, который проще в установке и удобнее использовать, несомненно, пользуется большей популярностью среди пользователей.
1、рекомендоватьDistrodиз Оффлайн Установить,ужесуществоватьcentOS7、CentOS8、CentOS Stream release Тест пройден на 9, большинство норм, но пакетов много не бывает, в противном этот случай может привести к зависанию запуска systemctl,Какая это сумка?,я тоже не знаю:
mkdir -p /opt/distrod
cd /opt/distrod
wget https://github.com/nullpo-head/wsl-distrod/releases/latest/download/opt_distrod.tar.gz
tar xvf opt_distrod.tar.gz
rm -rf opt_distrod.tar.gz
/opt/distrod/bin/distrod enable
2、рекомендоватьбольшинство低использоватьCentOS 7.9.2009
Версия,Другая версия может сообщать об ошибке
3. Также бывают проблемы во время использования.,Иногда systemctl работает неправильно и sshd зависает.,иметьчасждатьdf -h
встречазастрявший
4、использоватьCentOS Stream release 9
изпроцесс,Я чувствую, что нет никаких проблем
5、о Использование команды systemctl в WSL2, рекомендуется подождать, пока Microsoft поддержит его. Фактически, Ubuntu. Это очень хорошо
-- Ошибка: Ошибка: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
https://github.com/mishamosher/CentOS-WSL https://github.com/CentOS/sig-cloud-instance-images
https://github.com/wsldl-pg/CentWSL/releases https://github.com/nullpo-head/wsl-distrod/ https://github.com/arkane-systems/genie/releases
https://github.com/systemd/systemd/issues/8036