打开新大门,使用 wsl 代替虚拟机的可行性方案

  在 Windows 上进行 web 开发,比较普遍的方案是使用 phpstudy 或者别的一些集成环境软件进行环境搭建,写好代码后将代码上传至版本管理工具 git/svn,再将代码同步到 Linux 服务器,这个过程当中开发者的开发环境(Windows)与代码最终执行的环境(Linux)不一致经常会导致一些奇奇怪怪的问题,想在 Windows 上进行 linux 下的 web 开发,不想用 mac(毕竟没钱买 mac),又不想使用虚拟机(虚拟机开机速度慢,添加站点需要重启,分配内存会导致机器变得卡顿),这时候,wsl 的出现就完美解决了这些问题。无需通过虚拟机以及双系统的形式体验 Linux ,并且可以实现系统级别的文件交互操作,实在是太具有吸引力了。


什么是 wsl

在 Windows 10 系统下内置了 Linux,子系统 Linux 运行在 Windows 10 上,微软将这个 Linux 系统命名为:Windows Subsystem for Linux。简称 WSL。

启动 Linux 子系统

系统要求:Windows 10 且必须是 64 位。在 『控制面板』 --> 『程序和功能』 --> 『启用和关闭 Windows 功能』 中勾选 『适用于 Linux 的 Windows 子系统』,确定后重启。重启后,在 Microsoft Store 中搜索 Linux,搜索结果当中我喜欢的 Linux 版本是比较通用的 Ubuntu,选择版本 16.04 LTS,点击安装,安装好了之后,在 『开始』 菜单中就可以找到 Ubuntu 应用了,这个应用就是 Windows 当中的子系统 Linux。

基本的设置

打开 Ubuntu 应用,第一次打开会进行初始化安装,一般持续几分钟,之后会提示设置 Linux 用户名和密码,按照提示进行操作即可。

更换 Linux 子系统的软件源并更新

使用 Ubuntu 系统的好处就是可以使用 『软件源』 进行软件安装,即从指定的地址下载软件,因为默认的软件源是 Ubuntu 的官网地址,需要设置成国内阿里的镜像以提高速度。

切换 root 用户

sudo -i

备份当前软件源

cp /etc/apt/sources.list /etc/apt/sources.list.old

编辑 『软件源』 管理文件

vim /etc/apt/sources.list

使用以下代码复制替换

# deb cdrom:[Ubuntu 16.04 LTS _Xenial Xerus_ - Release amd64 (20160420.1)]/ xenial main restricted
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

保存退出后执行跟新

apt-get update

这样就成功的将 Ubuntu 的软件源切换到阿里云的源了。

启动 ssh 并使用 ssh 客户端登录

在 Windows 10 当中使用 Ubuntu 应用需要通过 Windows 的 CMD 或者 PowerShell 来操作 Linux,对于大多数开发者来说不如直接使用 Xshell 或者 SFTP 来的更熟悉。因此配置 ssh 远程登录是非常必要的。为了避免使用 sudo -i 进行提权操作,需要为 root 用户设置密码并且切换为 root 用户进行操作

sudo passwd root // 为 root 用户设置密码
su root // 切换 root 用户

与修改 『软件源』 类似,需要对原始 ssh 配置文件进行备份,备份 ssh 相关配置文件

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

编辑 ssh 配置文件

sudo vim /etc/ssh/sshd_config

编辑调整以下 ssh 相关的设置项

Port 8022(更换新的端口)
(去掉前面的 #)ListenAddress 0.0.0.0
UsePrivilegeSeparation no(原来是 yes)
PermitRootLogin yes(修改成 yes)
(在前面加上 #)StrictModes yes
PasswordAuthentication yes(原来是 no)

配置完成后启动 ssh

sudo /etc/init.d/ssh start

接下来就可以使用 Xshell 来登录了,地址是 127.0.0.1,端口号 8022,用户名和密码分别是 root、刚才为 root 用户设置的密码。我登录的过程中遇到登录上然后瞬间断开的情况,这时候在 wsl 执行

sudo ssh-keygen -A

然后再登录就能正常连上了。

使用脚本搭建环境

徒手搭建环境需要一个个安装软件,容易漏装或者装错,这里我使用了脚本的方式进行 LNMP 环境部署,只需要一条命令即可完成环境部署,假如团队当中另外的小伙伴需要部署也是直接输入该命令即可,既提高了效率也有利于统一开发环境。具体如下:首先,执行sudo -H -s切换为 root 账户(需要注意的是这个脚本只支持 Ubuntu 14.04 LTS 和 16 的版本)

安装执行

wget -qO- https://raw.githubusercontent.com/summerblue/laravel-ubuntu-init/master/download.sh - | bash

此脚本会安装 Git、PHP 7.2、Nginx、MySql、Sqlite3、Composer、Nodejs 8、Yarn、Redis、Beansalkd、Memcached,安装结束会输出 Mysql 的 root 账号的密码,需要保存。

创建测试站点

利用脚本自带的命令,新增 Nginx 站点

./laravel-ubuntu-init/16.04/nginx_add_site.sh

会提示输入站点名称、域名,确认后会创建对于的 Nginx 配置并重启 Nginx,为了便于测试,我创建了两个项目,分别是 example、example2,域名为 example.com、example2.com,添加成功后将这两个域名添加到本地(Windows)的 Host 文件,配置好 nginx 配置文件后,创建软连接,重启 nginx,具体可参考 Linux nginx 配置多站点

service nginx restart

启动 php

在使用脚本命令安装好 php7.2-fpm 之后,发现直接启动会报错,执行以下命令即可

sudo mkdir -p /var/run/php
sudo service php7.2-fpm start

这时候浏览器访问 example.com 和 example2.com 应该可以显示网页内容了,不过会发现网页打开的速度极慢,通常需要一两分钟才能完全加载一个页面,需要修改 nginx 的配置文件/etc/nginx/nginx.conf,添加以下代码

...
http {
    fastcgi_buffering off;
}
...

再次刷新页面就可以正常打开了。

启动 Mysql

执行命令启动 mysql

sudo service mysql start

在 winsows 本地可以用 mysql 可视化工具直接访问,地址是 127.0.0.1,端口 3306,密码是搭建环境时脚本自动设置的密码。

共享 windows 文件夹

到这里,基本上标志着已经可以在 wsl 上进行 web 开发了,不过痛点是每次在 windows 上写好代码再同步到 wsl 上比较麻烦,可不可以直接将 windows 上的项目目录直接链接到 wsl 上呢?这样只要保存就可以在 wsl 上看到效果,不用复制粘贴代码岂不是美滋滋。答案是可以的,在 wsl 上可以找到 windows 的目录,路径是 /mnt/cmnt/dmnt/e,添加一个软连接,指向需要在 wsl 上执行的项目。比如:我 windows 上的 d 盘下存放着项目目录 www,我想把 www 目录下的 laravel_demo 项目放到 wsl 上执行,只需要执行

ln -s /mnt/d/www/laravel_demo /var/www/laravel_demo

这样,就在 wsl 上创建了一个 laravel_demo 项目,为其配置 nginx 站点文件

cp /etc/nginx/sites-avalible/example.conf /etc/nginx/sites-avalible/laravel_demo.conf
vim /etc/nginx/sites-avalible/laravel_demo.conf

...
server {
    ...
    server_name   laravel_demo.test www.laravel_demo.test; // 修改成对应的域名
    root        /var/www/laravel_demo/public; // 修改成项目的文件夹路径
    ...
}
...

将 laravel_demo.test 添加进 windows 本地 hosts 文件,这样在 windows 上编写的代码,执行保存后即可在 linux 上实时看到效果了,很方便有没有?

支持多版本 php

很多时候,不同的项目可能需要用到不同版本的 php,wsl 是支持同时运行多个版本的 php 的,只需要为不同的项目配置不一样的 php-fpm.sock 文件,这里以 nginx 为例。首先,安装所需要的 php 版本,装好之后,启动,例如,需要同时支持 5.6 和 7.2 版本的 php

service php5.6-fpm start
service php7.2-fpm start

为对应项目修改 nginx 配置文件的 php 分配,我这里将 example.com 项目配置为 php5.6 的环境下运行,laravel_demo.test 配置为 php7.2 的环境下运行

vim /etc/nginx/sites-avalible/example.conf

...
fastcgi_pass unix:/var/run/php5.6-fpm/php-fpm.sock;// 修改成 php5.6 版本
...

vim /etc/nginx/sites-avalible/laravel_demo.conf

...
fastcgi_pass unix:/var/run/php-fpm/php7.2-fpm.sock;// 修改成 php7.2 版本
...

重启 nginx 使其生效

service nginx restart

再次访问 example.com 和 laravel_demo.test 发现均能正常访问。折腾完毕,在 windows 上也可以进行 linux web 开发了,好好玩耍 php 吧!

如何卸载

有几种方式卸载这个子系统:

  • 在 『开始』 菜单找到 ubuntu 图标,把鼠标放到上面右键显示 『卸载』,直接卸载
  • 组合键win + x,选择 『运行』,输入 cmd 进入 windows 命令行界面,分为两种卸载:
    • 删掉 ubuntu 系统以及下载安装的组件,保留创建的账户信息,输入 lxrun /uninstall
    • 删掉 ubuntu 系统以及下载安装的组件,不保留创建的账户信息,输入 lxrun /unistall /full

遇到的一些报错以及解决办法

参考链接

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 6年前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 56
yema

好像win10必须支持虚拟化才可以使用。

6年前 评论
circle

@yema 微软从 Windows 10 周年更新(build 14393)就开始内置 Windows Subsystem for Linux 组件框架了。

6年前 评论

好像必须要专业版win10才支持吧

6年前 评论
circle

@gangpula 没有哦,我自己用的电脑不是专业版的,普通家庭版也可以的

6年前 评论

我用乞丐版 Surface Pro 4 试了以下,确实可行,然后我在 C:\Users\用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\LocalState\rootfs 文件夹中找到了这个子系统的目录结构,运行起来占用不大,多了几个进程。
file
试着编译前端 css,js 也没有出现之前的那些奇奇怪怪的问题,更难过的 PHP artisan storage:link 还没测试,是很不错的尝试。

然后,我还是滚回了 manjaro 。

6年前 评论
circle

@doderic 我已经用 wsl 来替代 homestead 了,用了一段时间目前看起来没啥问题,而且 linux水平也得以提高了一丢丢 :laughing:

6年前 评论

@circle 干掉 Windows ,实机上:laughing:

6年前 评论

这个是真不错,本来想去折腾docker的,但是花了五分钟,wsl开发配置妥当.已经过了折腾这些的年纪了,大赞这个方案!感谢楼主分享

6年前 评论
circle

@L学习不停 没事哈,社区就是分享学习的好地方

6年前 评论

折腾过,还是滚回VirtualBox+Docker了 :pensive:

6年前 评论
circle

@Dexter 就当一次学习经验咯 :smiley:

6年前 评论

看来得升级xi系统了

6年前 评论
ln -s /mnt/d/www/laravel_demo /var/www/laravel_demo

权限如何解决呢?

6年前 评论
circle

@Johnson16 我是用 root 用户执行这条命令创建的软连接,没有遇到权限的问题,你说的权限问题是指?

6年前 评论

@circle 我也是在root下进行的这个命令,然后链接到mnt/d/wwwroot之后,访问网站就会提示:

file

6年前 评论
circle

@Johnson16 看下最后10条错误日志 tail -n 10 /var/logs/nginx/error.log

6年前 评论

你说的error.log是这些:

2018/10/04 13:09:17 [alert] 457#457: *4 open socket #16 left in connection 4
2018/10/04 13:09:17 [alert] 457#457: aborting

/var/logs/laravel-error.log是这样的:

2018/10/04 16:16:04 [crit] 17982#17982: *33 connect() to unix:/var/run/php/php7.2-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 127.0.0.1, server: laravel.test, request: "POST /client_security_conf HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "sconf.f.360.cn"
2018/10/04 19:44:16 [crit] 17986#17986: *35 connect() to unix:/var/run/php/php7.2-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 127.0.0.1, server: laravel.test, request: "POST /safe_update HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "vconf.f.360.cn"
2018/10/04 20:10:55 [crit] 17983#17983: *37 connect() to unix:/var/run/php/php7.2-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 127.0.0.1, server: laravel.test, request: "POST /client_security_conf HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "sconf.f.360.cn"
2018/10/04 21:04:26 [crit] 17982#17982: *39 connect() to unix:/var/run/php/php7.2-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 127.0.0.1, server: laravel.test, request: "POST /commonquery HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "c.skconf.f.360.cn"
2018/10/04 21:04:35 [crit] 17982#17982: *41 connect() to unix:/var/run/php/php7.2-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 127.0.0.1, server: laravel.test, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "uhadmin.test"

/var/logs/laravel.log是这样的

127.0.0.1 - - [04/Oct/2018:14:11:15 +0800] "GET / HTTP/1.1" 502 173 "-" "-"
127.0.0.1 - - [04/Oct/2018:14:11:15 +0800] "POST /client/query2?&m=e61e3a092d6f1cf3aa97567114d23d3e&t=43872421&s=qingli_cleansoft HTTP/1.1" 502 575 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)"
127.0.0.1 - - [04/Oct/2018:15:16:04 +0800] "POST /VirusDetection.php HTTP/1.1" 502 173 "-" "Post_Multipart"
127.0.0.1 - - [04/Oct/2018:15:16:04 +0800] "POST /VirusDetection.php HTTP/1.1" 502 173 "-" "Post_Multipart"
127.0.0.1 - - [04/Oct/2018:16:16:04 +0800] "POST /client_security_conf HTTP/1.1" 502 173 "-" "Post_Multipart"
127.0.0.1 - - [04/Oct/2018:19:44:16 +0800] "POST /safe_update HTTP/1.1" 502 173 "-" "-"
127.0.0.1 - - [04/Oct/2018:20:10:55 +0800] "POST /client_security_conf HTTP/1.1" 502 173 "-" "Post_Multipart"
127.0.0.1 - - [04/Oct/2018:21:04:26 +0800] "POST /commonquery HTTP/1.1" 502 173 "-" "-"
127.0.0.1 - - [04/Oct/2018:21:04:35 +0800] "GET / HTTP/1.1" 502 575 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"
6年前 评论
circle

@Johnson16 我也遇到过这个情况,是因为版本的问题,laravel 5.6 好像不支持 php 7.2,你试下安装 php7.1 然后 nginx 也配置为 php7.1-fpm.sock

6年前 评论

@circle 我测试了Laravel 5.7也是这样的问题。看了一下文件的权限,应该是www-data,但是我的显示这个

file

如何修改呢?

6年前 评论
circle

@Johnson16 我试了下

  • 使用 root 用户在 wsl 中用命令composer create-project创建 laravel 项目,项目文件夹所有者是 root
  • 使用脚本自带的命令 /laravel-ubuntu-init/16.04/nginx_add_site.sh创建 laravel 项目,项目文件夹所有者是 www-data
  • 在 windows 上创建好项目,在 wsl 中执行 ln -s /mnt/d/www/laravel_demo /var/www/laravel_demo创建到该项目的链接,项目文件夹的所有者是 1000
    我用第三种方式创建的项目可读可写,第一种和第二种都均提示缺少写的权限。另外,尝试使用 chmod -R -777修改项目文件权限,发现并没有修改成功。
6年前 评论
circle

@Johnson16 对了,我不确定你的 php 是否已经启动,要不你试试在 example/public 下的 index.php 里面打印一下 phpinfo(),看看能否显示。

6年前 评论

@circle 我卸载了ubuntu然后重新安装了,结果在安装LNMP环境的时候,一直在

正在初始化系统...

另一篇文章说是权限问题,用管理员身份运行,我也试了,还是一样。。。
打算放弃了,还是回到Homestead吧。

6年前 评论
circle

@Johnson16 这个是软件源的问题,刚安装好的 ubuntu 用的时国外的源,切换成国内的阿里云试试。

6年前 评论

@circle 切换的是阿里云,按照你的步骤切换完了之后操作的,但是运行安装命令,会没反应,我设置了代理FQ,然后就卡在上面那一步了

6年前 评论
circle

@Johnson16 没反应,你安装的是 ubuntu 16 的版本吗,搜索商店里默认的 ubuntu 是 18 的,得自己选 16 的版本;设置了阿里的源之后不需要设置代理了,这样会起反作用的。

6年前 评论

@circle

file
是这个版本,刚才经过一番折腾,不知不觉就成功了,哈哈。。非常感谢耐心的教导。

6年前 评论
circle

@Johnson16 哈哈,没事 :smile:

6年前 评论
Bin

之前折腾过,现在我就想问一下,https://github.com/Microsoft/WSL/issues/393,https://www.zhihu.com/question/62495462
这两个问题解决掉了么?

6年前 评论
circle

@Bin 解决掉了,我在安装好 php 和 nginx 之后,直接启动 php 和 nginx sudo service php7.2-fpm startsudo service nginx start都成功了,以某一个 nginx 站点配置文件为例:
/etc/nginx/sites-available/example.conf里跟 php 相关的配置:

location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    #   fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;

        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }
6年前 评论
Bin

@circle 嗯,那挺好的,不过我又转回 Homestead 了,等下次有空再说吧,上次就这两个问题,害我搞了整整两天,还不如多写点代码呢,哈哈。

6年前 评论
circle

@Bin 嗯,Homestead 也是很好的选择,我用这个子系统主要是想尝试下新事物顺便拓展拓展视野,刚开始看到 wsl 的时候空有一堆想法,只是没想到真的一一实现折腾成功了,很不错的尝试,哈哈。

6年前 评论

最近用workerman的时候,就是在wsl里运行workerman,,,,

6年前 评论

这个能用CentOS吗

6年前 评论
circle

@tanyu 微软的软件商店没有找到 centos 的发行版,不过搜了下也有解决方案:CentOS on Windows Subsytem for Linux (WSL),可以尝试一下。

6年前 评论

wsl里面使用docker无法拉取镜像,有这个问题吗?我在好几台电脑上按照docker官方的ubuntu安装步骤,到拉取镜像的环节提示我docker没有启动,然而我刚刚才启动过...

5年前 评论
circle

@bruce_1110 我没在 wsl 上使用过 docker,不过微软已经宣布 wsl2 会支持 docker https://m.weibo.cn/detail/4369139466268113

5年前 评论

wsl2什么时候发布...

5年前 评论
circle

@bruce_1110 快了,估计这两个月?如果急需的话建议关注微软的微博

5年前 评论

我这没有看到 UsePrivilegeSeparation no(原来是 yes) ,其它修改后保存启动就是这样,试了很多方法都不行
Connecting to 127.0.0.1:9999...
Could not connect to '127.0.0.1' (port 9999): Connection failed.

5年前 评论
circle

@huzqzh 没有的话就不用管,版本不一样有差异,是不是你的端口已经被占用了

5年前 评论

@circle 当时也是觉得版本差异,就没去管了,只把其它四项做了修改保存。而且8023 和 9999都试过,应该不是端口问题

5年前 评论
circle

@xiaochen52113 不好意思,没用过这个,给不了建议

5年前 评论

wget -qO- https://raw.githubusercontent.com/summerbl... - | bash
这条命令为何无法下载了,没动静。

5年前 评论
circle

@bruce_1110 可能这两天 github 不太稳定吧

5年前 评论
zhengwhizz

配置假域名站点后,hosts也写了,假域名一直没法访问,只有default那个能访问。。。

5年前 评论
circle

@zhengwhizz 可能是 nginx 配置的问题吧,看下访问日志文件

5年前 评论

file

安装php环境到这一步就停了,请问是什么 原因?

这是最后几行安装日志

ondrej-ubuntu-php-bionic.list:3
W: Target Translations (main/i18n/Translation-en) is configured multiple times in /etc/apt/sources.list.d/ondrej-ubuntu-php-bionic.list:1 and /etc/apt/sources.list.d/ondrej-ubuntu-php-bionic.list:3
W: Target CNF (main/cnf/Commands-amd64) is configured multiple times in /etc/apt/sources.list.d/ondrej-ubuntu-php-bionic.list:1 and /etc/apt/sources.list.d/ondrej-ubuntu-php-bionic.list:3
W: Target CNF (main/cnf/Commands-all) is configured multiple times in /etc/apt/sources.list.d/ondrej-ubuntu-php-bionic.list:1 and /etc/apt/sources.list.d/ondrej-ubuntu-php-bionic.list:3
Reading package lists...
Building dependency tree...
Reading state information...
curl is already the newest version (7.58.0-2ubuntu3.6).
curl set to manually installed.
git is already the newest version (1:2.17.1-1ubuntu0.4).
git set to manually installed.
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 build-essential : Depends: libc6-dev but it is not going to be installed or
                            libc-dev
                   Depends: g++ (>= 4:5.2) but it is not going to be installed
                   Depends: dpkg-dev (>= 1.17.11) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
5年前 评论
circle

@轻描淡写 应该是下载的时候网络不太稳定的原因吧,我建议再重复执行那个脚本命令

5年前 评论

@circle 执行了十几次了,家里公司都试过了。 :joy: :joy:

5年前 评论
circle

@轻描淡写 你切换国内的源了吗,cat /etc/apt/sources.list 看看,切换后记得 sudo apt update

5年前 评论
circle

@轻描淡写 你可以试试单独安装 php ,执行以下命令 apt-get install -y php7.2-bcmath php7.2-cli php7.2-curl php7.2-fpm php7.2-gd php7.2-mbstring php7.2-mysql php7.2-opcache php7.2-pgsql php7.2-readline php7.2-xml php7.2-zip php7.2-sqlite3,脚本里面实际的命令也是这个

5年前 评论

有遇到文件读写慢的问题没

5年前 评论
circle

@Mortence 没呢,读写慢可能跟硬盘性能有关,我的电脑换了 ssd ,没碰到过

5年前 评论

@Mortence IO不行。目前好像一直都有这个问题

5年前 评论

项目名包含非法字符 Ubuntu 20.04 LTS

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!