Тема, которую часто обсуждают программисты: Windows или Linux лучше для повседневной разработки? Тогда возникает другой вопрос: что лучше выбрать MacBook или SurfaceBook?
Основная причина, по которой учащиеся выбирают систему Linux или ноутбук Mac, заключается в том, что цепочка инструментов для разработки и компиляции Linux/Mac относительно полна.С системой поставляется множество сред или установочных пакетов, а написанные программы можно легко разрабатывать, тестировать и размещать в сети. , Системная стыковка, эффективность разработки и тестирования относительно высока, и учащимся, разрабатывающим под Windows, может потребоваться учитывать переносимость кода разработки и тестирования. Возьмем, к примеру, автора. Я также столкнулся с проблемой, что некоторые API-интерфейсы java/python не поддерживают Windows, что доставляет много хлопот в ежедневную разработку.
До Windows 10, чтобы решить кроссплатформенную проблему среды разработки Windows, мы часто выбирали cygwin.Этот проект сам по себе очень зрелый, и автор использовал его в течение многих лет.Он может имитировать набор Linux-подобных сред. под Windows, и использовать его. Это не большая проблема, чтобы заняться общей разработкой и тестированием. Однако его недостатком является то, что компоненты и менеджеры пакетов относительно слабы, что довольно проблематично для будущего обслуживания среды, а некоторые низкоуровневые симуляции API не идеальны, что очень безвкусно для некоторых сценариев, связанных с системными вызовами нижнего уровня Linux. к счастью в В 2016 году Microsoft начала собирать Ubuntu в Windows 10 WSL, а затем начала выпускать различные Linux-системы в виде UWP APP в Microsoft Store. Таким образом, для студентов, которым необходимо создать кроссплатформенную среду разработки, одна система может работать с несколькими платформами, и это еще одна причина отказаться от Mac :)
Эта статья подробно объяснит, как установить Ubuntu под Windows 10, создать среду разработки Linux, некоторые ямы, столкнувшись и их решения.
1. Установите Ubuntu в Windows 10.
Сначала обновите систему Windows 10 до последней версии, затем включите «Режим разработчика» и, наконец, введите «Ubuntu» в Магазине Microsoft и выберите «Установить». После успеха нажмите «Пуск».
Примечание: некоторые старые туториалы в интернете устанавливаются в виде lxrun /install из командной строки.Это не рекомендуется здесь, так как это практика ранней бета-версии WSL.Теперь официальная версия доступна напрямую в Microsoft Store в виде приложения UWP более удобно и просто в управлении.
2. Включить sshd
2.1 Настройка SSHD
-
Переустановите опенсш
sudo apt-get remove openssh-server sudo apt-get install openssh-server
-
Измените настройки sshd, добавьте следующую конфигурацию в /etc/ssh/sshd_config
AllowUsers yourusername PasswordAuthentication=yes
-
перезапустить sshd
sudo service ssh --full-restart
Неудивительно, что использование клиента ssh должно иметь возможность подключаться к Bash в Windows.
2.2 Вопрос 1: ошибка запуска sshd
# /etc/init.d/ssh restart
sshd: ../sysdeps/posix/getaddrinfo.c:2603: getaddrinfo: Assertion `IN6_IS_ADDR_V4MAPPED (sin6->sin6_addr.s6_addr32)' failed. Aborted (core dumped)
Причина в проблеме ipv6, измените конфигурацию sshd_config, чтобы добавить ListenAddress 0.0.0.0
sudo vi /etc/ssh/sshd_config
2.3 Вопрос 2: SSH-соединение выдает ошибку пароля
Эта проблема еще относительно сложна для исследования и требует более систематических методов и теорий исследования, на что автор потратил много времени.
Феномен в том, что служба sshd поднята, ps aux и top видно, но при подключении по ssh всегда выдает, что пароль неверный или нет разрешения, но подтверждение пароля верное, в том числе и для новой учетной записи.«Помните странную ошибку входа в систему без пароля для взаимного доверия ssh»Я обнаружил, что служба sshd вообще не слушает указанный порт sshd, и с другими портами такая же проблема:
nc -l 127.0.0.1 4444
#on powershell:
netstat -a -n -q | findstr "4444"
Это может быть проблема системного уровня. Дальнейший анализ системных событий Windows показал, что это была проблема с фильтром TDI:
В windows/system32 можно найти файлы драйвера:
В основном это вызвано тем, что некоторые производители программного обеспечения используют устаревшие API от Microsoft.Например, у QQGame и некоторых программ VPN были подтверждены такие проблемы.Подтвердить причину легко.Для начала найдите соответствующий ключ реестра HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet в соответствии с именем ПО.\services, измените, как показано:
Перезагрузите компьютер и снова проверьте:
3. загрузка sshd
Как только процесс bash.exe закрыт, ssh не может подключиться. Есть три шага к решению этой проблемы:
- Добавьте элементы автозагрузки, чтобы bash.exe запускался случайным образом
- использовать команду
sudo service ssh start
Запустить SSHD - так как
sudo service ssh start
Команды, требующие пароля, не могут быть автоматизированы, поэтому требуется visudo, чтобы избежать операции ввода пароля.
3.1 Уточнение идей Далее запишите некоторые процессы:
- Используйте vbs, чтобы запустить скрытое окно, откройте bash и запустите
sudo service ssh start
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe",0
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/service ssh --full-restart'",0
- бегать
sudo visudo
, добавьте следующую конфигурацию
toor ALL = (root) NOPASSWD: /usr/sbin/service
где toor - мое имя пользователя.
- Добавьте файл vbs в элемент автозагрузки Windows и поместите файл vbs в следующий каталог.
%AppData%\Microsoft\Windows\Start Menu\Programs\Startup
Перезапустите, проверьте без происшествий, и вы можете подключиться к ssh.
3.2 Проблема 1: Нет процесса sshd после перезагрузки/загрузки
Во-первых, убедитесь, что код в каждом из трех вышеперечисленных шагов правильный, а затем посмотрите в системном журнале, почему это не удалось.Я столкнулся здесь с тем, что sudo также требует пароль, что приводит к ошибке при выполнении сценарий VB, который загружается. После внимательного изучения конфигурационный файл выглядит следующим образом:
...
# User privilege specification
root ALL=(ALL:ALL) ALL
my-username ALL=(ALL) NOPASSWD: ALL # ---> the line added by me
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
Вы можете видеть, что моя конфигурация добавлена посередине, а сзади есть еще несколько конфигураций, из-за чего моя конфигурация перезаписывается последней. Решение состояло в том, чтобы переместить мой конфиг в конец, попробовать еще раз, sudo больше не нужен пароль.
3.3 Проблема 2: secureCRT завис/искажен
Застрявший/искаженный код secureCRT здесь связан с набором символов.Обратите внимание на установку правильного набора символов терминала и системного набора символов.Набор символов Ubuntu по умолчанию в Windows — латиница.
sudo vim /etc/default/locale
LANG=zh_CN.UTF-8
LANGUAGE=”zh_CN:zh”
#################################
# sudo dpkg-reconfigure locales
# en_US.UTF-8、zh_CN.GBK、zh_CN.UTF-8
#################################
WARNING! Your environment specifies an invalid locale.
The unknown environment variables are:
LC_CTYPE=zh_CN.UTF-8 LC_MESSAGES=zh_CN.UTF-8 LC_ALL=
This can affect your user experience significantly, including the
ability to manage packages. You may install the locales by running:
sudo apt-get install language-pack-zh
or
sudo locale-gen zh_CN.UTF-8
To see all available language packs, run:
apt-cache search "^language-pack-[a-z][a-z]$"
To disable this message for all users, run:
sudo touch /var/lib/cloud/instance/locale-check.skip
4. Обновление WSL Ubuntu
4.1 Обновление системы Ubuntu:
(1)版本升级
//更新软件源,最后会读取软件包列表
sudo apt-get update
sudo update-manager -c -d
然后选择 upgrade:apt-get -y --force-yes upgrade
(2)普通升级
sudo apt-get update
sudo apt-get -y upgrade
# apt-get -y --force-yes --fix-missing upgrade
(3)升级单一软件
sudo apt-get update
sudo apt-get upgrade package_name_your_want_to_upgrade
(4)全部升级
//更新所有的软件
sudo apt-get dist-upgrade
4.2 Измените источник зеркала Ubuntu:
Источник обновления Ubuntu, который поставляется с WSL, очень медленный при внутреннем доступе, и легко привести к тому, что некоторые исходные IP-адреса не смогут подключиться, а затем не удастся загрузить некоторые индексные файлы, что, в конечном итоге, приведет к сбою всего обновления. Рекомендуемый здесь образ Alibaba Cloud относительно стабилен и надежен.Конечно, вы также можете обратиться кЗеркальный источник различных университетов Китая.
(1)Ubuntu 的软件源配置文件是 /etc/apt/sources.list,先将系统自带的该文件做个备份:
cp /etc/apt/sources.list {,.bak}
(2)将源文件中的 URL 替换为国内任意源,比如阿里云:http://mirrors.aliyun.com/ubuntu
deb http://cn.archive.ubuntu.com/ubuntu/ trusty main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
# 如要用于其他版本,把 trusty 换成版本代号就好,比如:15.10 willy、14.04 trusty
# 具体请参考:http://wiki.ubuntu.org.cn/%E6%BA%90%E5%88%97%E8%A1%A8 http://wiki.ubuntu.org.cn/%E6%A8%A1%E6%9D%BF:14.04source
(3)sudo apt-get update,刷新列表使其生效。
# 注意:一定要选对版本
# 注意:一定要执行刷新
Ссылаться:
[1] Можно ли обновить bash на Windows до 16.04?
[2] Как подключиться по SSH к «Bash на Ubuntu в Windows 10»?
[3] SSHD server is running but Connection refused on WSL #2376
[4] Issue with WLS listening to TCP ports #1554
[5] бросить Bash на запуск Windows и открыть SSHD
[6] Установите pip под ubuntu16.04