首页 > Personal > Linux > 配置 windows10 Linux Subsystem ubuntu
2017
09-19

配置 windows10 Linux Subsystem ubuntu

很久之前就尝试过windows10上出的subsystem了,但是可能是由于我的win10是正版win8免费升级过来的,感觉有写问题,不管是用lxrun安装还是把系统升级到Insider Preview内部本版,在ubuntu里的所有网络服务包含ssh、mysql、nginx、mongodb、redis等等,都没办法生效,即便是在ubuntu本身用telnet端口都没有反应,一直以为可能是subsystem的bug,但是没有发下网上有人提到过,但是自己也没有办法解决,没有了这些服务的ubuntu和powershell、cygwin也就没什么区别了,所以一直也没仔细用过,这两天正好电脑有点问题,把win10重新安装了一下,在用lxrun安装了ubuntu发现神奇的网络服务都可能用了,以后使用频率应该会很高了吧。正好有时间整理一下。

Windows Subsystem Linux简称WSL,是微软官方出的一套在windows上模拟Linux的服务,最早是提供给Win10的Insider Preview内部本版的,现在正式版也可以安装。
如果是参加微软预览体验计划的Insider Preview内部本版,可以直接在应用商店搜索ubuntu安装,好处是可以断点续传。如果没有就要是用lxrun命令安装。两个我都装过好像区别不大。

关于配置
首先,要配置WIndows功能,开始 > 设置 > 应用和功能 >相关设置下 “程序和功能”。然后点击“启用或关闭 Windows 功能”,勾选“适用于 Linux 的 Windows 子系统(beta)”。
在 开始 > 设置 > 更新和安全 > 针对开发人员 中,选择开发人员模式。选中这个模式会自动安装 Windows开发人员模式包,我安装时是显示失败的,但是没有关系,在上面的“程序和功能”里点选“管理可选功能”,看里面有没有Windows开发人员模式,如果有就不用管了,如果没有,点“添加功能”把这个包装上。
配置好之后,如果是Insider Preview内部本版,如上面所说直接可以在应用商店安装,搜索ubuntu就可以了。另外还有两个SUSE版本的系统,我没有试过。
如果不是内部本版就要用lxrun来安装了,也可以在命令行或者PowerShell中运行bash来自动安装。我一般都是用lxrun来装的。
lxrun带有几个参数,/install 安装子系统,/uninstall 卸载子系统, /setdefaultuser 配置启动子系统的用户,/update 更新子系统索引包
lxrun /install
安装就可以了,唯一麻烦的就是源应该是国外的,连接非常不稳定,而且没有断点续传,安装纯粹要看人品了,要不就要用proxy来装了,不过包不大190多M,网上也有教程使用Fiddler监听下载地址做本地代理的,可以先下好包,可能更好一点。
如果包下载完了会,会出现一些配置选项,地区选择,用户名密码等等。都好了之后就可以用了。

因为WSL还是比较特殊的ubuntu,比像一般的虚拟机,所以还是会有一些限制,开始最麻烦的就是所有服务都没办法开机启动,即便使用sysv-rc-conf命令配置也不可以。不过还是比较好解决的,在用户目录写一个脚本start_up.sh,在快捷方式中加入”C:\Windows\System32\bash.exe” ~ -c “~/start_up.sh”, 第一个~是进入用户目录,-c是执行后面的脚本。
脚本内容如下
#!/bin/bash
pw=yourpassword
echo ‘Start ssh’
echo $pw | sudo -S service ssh start > /dev/null && echo -e ‘\nFinish start ssh’
$SHELL
就可以在里面添加想要启动的服务了,我只加了最需要的ssh,后面的$SHELL一定要加,如果不加,脚本运行完命令行就自动关闭了。
另外,bash只能启动一个实例,如果命令行关闭了,服务器也就相应关闭了。

如果在linux下访问windows文件,可以在/mnt/c/ 等相应硬盘目录访问。
如果在window访问linux文件,在C:\Users\yourname\AppData\Local\lxss中,里面可以访问到非系统文件夹,lxss是系统目录和隐藏目录,可以直接访问地址或者在文件夹选项中开启显示隐藏文件和关闭隐藏系统文件。

总之,用下来觉得还是要比虚拟机方便一些,做一个本地的简单的服务器应该是足够了,虽然有一些缺陷,但是不失为一个好的功能,有兴趣可以尝试一下。

因为是新装的机器,会新装一些软件,下午在使用linux时发现突然又出现了之前系统会出现的问题,所有网络服务不可用,并且启动ssh时会提示,getaddrinfo: Assertion `IN6_IS_ADDR_V4MAPPED (sin6->sin6_addr.s6_addr32)’ failed。这个之前也出现过。因为不知道什么原因而且之前好是好的,所以没办法只有把软件一个一个卸载了试,之后发现竟然是腾讯的WeGame一起的问题,这个是最近刚改名的应用,我之前系统里也装过,叫TGP,不确定它改了什么,反正只要装了就会出问题,写在了重启就好了。也算解决的一个困扰了自己好久的问题。

最后编辑:
作者:wy182000
这个作者貌似有点懒,什么都没有留下。