当前位置: 首页 > Linux

使用WindowsLinuxSubsystem配置开发环境

时间:2023-04-06 01:35:40 Linux

微软日前发布了WindowsSubsystemLinux(以下简称WSL)。当时只有InsiderPreview支持安装。作为普通用户,我没有尝试。这两天不知道会伴随哪个更新。也可以安装标准专业版。我尝试配置了一下,发现效果还是比较满意的。它基本上可以替代以前的IIS或VirtualBox解决方案。在这里简单记录一下。(更新于2016-12-02)最新1607更新,家庭版也可以安装,效果基本一样。安装WSL开始>设置>系统>应用和功能>拖到底部“程序和功能”。然后点击“打开或关闭Windows功能”,找到“Linux的Windows子系统(测试版)”,并启动它。之后系统会要求重启,听一下。然后打开命令行(或PowerShell,下同),输入bash,会提示切换到开发者模式。按照提示切过去,然后再次运行bash,系统会安装需要的组件。这个过程会很长时间,估计源头在国外。安装完成后需要重启,WSL就安装成功了。再次打开命令行,输入bash,就可以进入linux子系统了。安装PHP和配置ApacheWSL其实是Ubuntu14.04.5,所以安装包直接用apt-get安装即可。太慢的话可以换成国内的源,不着急就让它慢慢更新吧。sudoapt-getupdatesudoapt-getupgrade然后添加PHP源。sudoadd-apt-repositoryppa:ondrej/php注意之前的ppa:ondrej/php5-5.6的源已经去掉,5.5到7.1使用的是ondrej/php的新源。如果非要用5.4,还有一个php5-oldstable源。顺便说一句,这里也安装了几个可能用到的组件。sudoapt-getinstallphpsudoapt-getinstallphp-mysqlsudoapt-getinstallphp-xdebugsudoapt-getinstallphp-apcusudoapt-getinstallphp-xmlsudoapt-getinstallphp-mcrypt这次准备使用Nginx,install上传后无法启动。按照Google的说法,好像是WSL对IPv6的支持有问题,所以卸载了继续用Apache。反正对于本地开发来说,性能并发不是问题。Ubuntu自带Apache2.4.7,直接运行sudoserviceapache2start即可。但是,我在这里遇到了虚拟主机问题。我配置的虚拟机没有生效。最后,我找到了堆栈溢出的解决方案。说000-default和customhost冲突,禁用默认配置就好了。sudoa2enmodvhost_aliassudoa2dissite000-defaultsudoa2ensite001-mysite然后需要调整模块,比如你要开发WordPress,需要保证重定向生效。sudoa2enmodphp7.1sudoa2enmodrewrite另外Apache2.4需要配置目录的“访问条件”,否则无法访问(会返回“403Forbidden”,改目录权限也没用),所以添加一行:...Requireallgranted#AllowallsourcesAllowOverrideAll#Allowredirection,WordPressmust...所有配置完成后,重启apache,访问配置好域名,大功告成。用cmder代替PowerShellPowerShell,还是自带的命令行,不好用。要么字体丑死了,要么中文输入有问题,不支持多窗口。这里推荐cmder,非常好用,体验也有明显提升。cmder支持打开窗口执行启动脚本,可以一键进入Linux控制台,只要按照下图配置即可。然后修改启动时的默认选项卡。Ruby-enabled版本的Ubuntu集成了rvm,通过rvmlist可以看到已经安装了Ruby2.3.0。但是直接运行ruby显示没有安装,运行rvmuse2.3.0提示RVM不是函数,用'rvmuse...'选择rubies是不行的。需要把终端设置改成允许shell登录。例如,请访问https://rvm.io/workflow/screen/。这很奇怪,我以前没有见过。按照谷歌的说法,这是因为默认登录方式没有读取~/.bash_login中的配置信息,也没有要求加载到rvm中的方法,所以需要在启动WSL的时候加上参数--login,所以回到上一步,修改启动脚本,问题解决。%windir%\system32\bash.exe~-cur_console:p--login(这里我也去掉了zsh,因为这台电脑好像没有安装这个包,不知道是不是默认没有安装。)安装原来的MySQL我以为安装MySQL是最简单的,没想到还有坑……主要是5.7的坑。我更喜欢较新的版本,所以我自然而然地为5.7做好了准备。Ubuntu自带的源是5.5或者5.6,先更新一下:wgethttp://dev.mysql.com/get/mysql-apt-config_0.6.0-1_all.debsudodpkg-imysql-apt-config_0.6.0-1_all.debsudoapt-getupdate搞定,那么直接安装即可:sudoapt-getinstallmysql-server根据提示信息安装MySQLServer5.7,设置root密码。大多数时候在这个阶段不会有问题。安装完成后,运行mysql-uroot-p,输入刚刚设置的密码,不出意外就可以进入MySQL控制台了。接下来,我们通常要设置开发用户,这时候问题就来了。(这个问题不时出现在我的几台机器上,包括VPS,所以我不确定会发生什么。)CREATEUSER'someone'@'localhost'IDENTIFIEDBY'password';执行此SQL将创建一个用户。貌似完全没有问题,结果却报错:ERROR1054(42S22):Unknowncolumn'plugin'in'mysql.user'(报错的列可能不一样,但原因是一样的).据谷歌了解,原来随着MySQL版本的升级,系统内置表的结构也发生了变化。5.7比5.5甚至5.4需要更多的字段。虽然我们直接安装了5.7,但是按照老结构建表也不耽误它。。。这时候有两种选择,一种是手动添加坏列,一种是运行官方的升级脚本mysql_升级。为了表达对官方的信任,我选择了后者。退出MySQL,返回SSH,执行脚本:mysql_upgrade--upgrade-system-tables-uroot-p升级完成后,再mysql-uroot-p,输入密码,无法登录!卧槽!发生了什么?!原来在5.7之后,开发组去掉了mysql.user表中的password字段,换成了authentication_string。但是这个字段并没有复制之前密码的值,所以原来的密码就失效了!这是什么鬼。。。这里有两个选择,一个是想办法修改root密码,一个是卸载重装。。。因为没找到真正的原因(就是同上),我选择了后者。现在推荐一个解决方案:安装完成后,进入MySQL控制台,输入DESCmysql.user;如果它返回45行(行),你不需要升级系统内置的表,为什么不改变它们呢?如果小于这个数,就要执行mysql_upgrade,不要移动上一个窗口,新开一个窗口,执行mysql_upgrade--upgrade-system-tables-uroot-p,执行完返回上一个窗口,并在MySQL环境中执行UPDATE`mysql`.`user`SET`authentication_string`=PASSWORD('password')WHERE`user`='root';文件互访在WSL中访问系统中的文件更简单,使用/mnt/盘符/路径即可。如果想在Windows中访问WSL中的文件,位于`C:UsersyyourusernameAppDataLocallxss`需要解决的问题有了WSL,各种依赖linux环境的东西都可以随便运行,使用apt-get安装而且更新也很方便。侦听端口非常好。但实际上,这两个环境是隔离的,Ubuntu不能在Windows中执行,反之亦然。因此,Phpstorm的FileWatcher等文件(包括测试)无法正常运行。解决方案还有待发现。暂时的解决办法是通过命令行启动各种watch,比如sasswatch总结一下时代在发展,科技在进步。根据GitHub刚刚发布的报告,微软已经是开源贡献最大的公司。Windows拥抱Linux之后,我们也可以在Windows下开发PHP。世界如此美好!顺便说一下,新版本的Ubuntu比旧版本更容易配置。当然,也可能是我之前不知道。首发于我的博客,双方尽量同步更新。http://blog.meathill.com/tech...参考:主要的PPAforPHP(5.5,5.6,7.0)withmanyPECLSupportforthenewWindows10bashshellInstallRVMandwhyRVMisnotafunctionHowToInstallMySQL在Ubuntu14.04上