Полное руководство по созданию кроссплатформенной среды разработки в Ubuntu для Windows10

Linux Mac Windows

Тема, которую часто обсуждают программисты: 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:

image

В windows/system32 можно найти файлы драйвера:

image

В основном это вызвано тем, что некоторые производители программного обеспечения используют устаревшие API от Microsoft.Например, у QQGame и некоторых программ VPN были подтверждены такие проблемы.Подтвердить причину легко.Для начала найдите соответствующий ключ реестра HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet в соответствии с именем ПО.\services, измените, как показано:

image

Перезагрузите компьютер и снова проверьте:

image

3. загрузка sshd

Как только процесс bash.exe закрыт, ssh не может подключиться. Есть три шага к решению этой проблемы:

  1. Добавьте элементы автозагрузки, чтобы bash.exe запускался случайным образом
  2. использовать командуsudo service ssh startЗапустить SSHD
  3. так как 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?

Ууху. Call.com/question/49…

[2] Как подключиться по SSH к «Bash на Ubuntu в Windows 10»?

superuser.com/questions/1…

[3] SSHD server is running but Connection refused on WSL #2376

GitHub.com/Microsoft/W…

[4] Issue with WLS listening to TCP ports #1554

GitHub.com/Microsoft/W…

[5] бросить Bash на запуск Windows и открыть SSHD

stray.love/IT subject-fried/…

[6] Установите pip под ubuntu16.04

blog.CSDN.net/WeChat_3791…