Ubuntu on Windows10 跨平台开发环境搭建权威指南

2018-02-27 11:49:07来源:oschina作者:xrzs人点击

分享

程序猿经常争论的一个话题是:日常开发到底Windows好还是Linux好?进而演化出另一个问题:到底选MacBook 好还是SurfaceBook好?


选择Linux系统或者mac笔记本的同学最核心的理由是Linux/Mac开发、编译工具链比较完善,很多环境或者安装包都系统自带了,写出来的程序可以很方便的通过开发、测试与线上系统对接,开发测试效率比较高,而 Windows下开发的同学可能需要考虑开发、测试代码的可移植性问题。就拿笔者来说,也曾经遇到过某些java/pythonAPI不支持Windows的问题,这给日常开发带来了不小的麻烦。


在Windows10以前,咱们为了解决 Windows开发环境跨平台的问题,往往会选择cygwin,这个项目本身已经很成熟了,笔者也用了很多年,它能在Windows下模拟一套类Linux的环境,用它应付一般的开发测试问题不大。但它的缺点在于组件、包管理器比较弱,对于日后的环境维护相当麻烦,而且一些底层 API模拟的并不完善,对于一些涉及 Linux底层的系统调用等场景显得很鸡肋。幸运的是在 2016年,微软在Windows10WSL里开始内置Ubuntu,之后又开始在MicrosoftStore以 UWPAPP 的形式发布各个Linux系统。这样对于需要搭建跨平台开发环境的同学来说可以做到一套系统搞定多套平台环境,又多了一个舍弃Mac的理由 :)



本文今天会详细讲解下怎样在Windows10下安装Ubuntu、搭建Linux开发环境,碰到的一些坑及其解决方案。


1、安装 Ubuntu on Windows10

首先更新你的 Windows10 系统到最新,然后开启“开发人员模式”,最后在MicrosoftStore里输入 “Ubuntu”然后选择安装,成功后即可点击启动。


注意:网上有些老的教程在命令行下用lxrun /install的形式安装,这里不推荐,因为这是早期WSLbeta版本的做法,现在正式版直接在MicrosoftStore以UWPAPP的形式获取更便捷,也易于管理。



2、开启sshd
2.1 设置 sshd

重装openssh

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 on 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服务起来了,psaux和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导致的,比如QQGame和一些VPN软件被证实存在这样的问题,确认原因就好办了,首先根据软件名字找到对应注册表项HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/services,按图修改:


image


重启电脑,再次测试ok:


image


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 了。


另外一种方案是使用windows自带的定时任务计划添加开机启动Ubuntu ssh服务的任务:



搜索“任务计划程序”,操作-- 创建基本任务


触发器:当计算机启动时 操作:启动程序 程序名:bash.exe 参数为-c /"sudo /usr/sbin/sshd -D/"" 意思是打开bash,执行sshd命令开启ssh服务 选择“点击完成打开属性页”按钮,点击完成,打开属性页 在属性页选择“使用最高权限运行”,避免错误。



3.2 问题1:重启/开机后无 sshd进程

首先确保上述三步每一步的代码都正确,其次看看系统日志是何原因失败,我这里遇到的是sudo还需要密码,导致开机的VB脚本执行出错。仔细研究了下, 这个配置文件如下:


...
# User privilege specification
rootALL=(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卡死/乱码和字符集有关,注意设置正确的终端字符集和系统字符集,UbuntuonWindows默认字符集是Latin。


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、WSLUbuntu 更新
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 镜像源:

WSL自带的Ubuntu更新源国内访问非常慢,很容易出现部分源IP无法连接上,进而部分索引文件下载失败,最后导致整个更新失败,这里推荐阿里云的镜像比较稳定可靠,当然也可以参考国内各个大学的镜像源。


(1)Ubuntu 的软件源配置文件是 /etc/apt/sources.list,先将系统自带的该文件做个备份:
(cd /etc/apt && sudo cp sources.list sources.list.bak.`date -I`)
(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%A8http://wiki.ubuntu.org.cn/%E6%A8%A1%E6%9D%BF:14.04source
(3)sudo apt-get update,刷新列表使其生效。
# 注意:一定要选对版本
# 注意:一定要执行刷新

Refer:

[1]bash on windows可以升级为16.04吗?


https://www.zhihu.com/question/49411626


[2]How can I SSH into “Bash on Ubuntu on Windows 10”?


https://superuser.com/questions/1111591/how-can-i-ssh-into-bash-on-ubuntu-on-windows-10


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


https://github.com/Microsoft/WSL/issues/2376


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


https://github.com/Microsoft/WSL/issues/1554


[5]折腾 Bash on Windows 开启 SSHD 并开机启动


https://stray.love/itshou-zha/bash-on-windows-kai-qi-ssh-bing-kai-ji-qi-dong


[6]ubuntu16.04下安装pip


http://blog.csdn.net/weixin_37911283/article/details/70799481

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台