本篇文章給大家分享的是有關(guān)如何進(jìn)行Ubuntu on Windows10跨平臺(tái)開發(fā)環(huán)境搭建,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)是專業(yè)的精河網(wǎng)站建設(shè)公司,精河接單;提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行精河網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
程序猿經(jīng)常爭(zhēng)論的一個(gè)話題是:日常開發(fā)到底 Windows 好還是 Linux 好?進(jìn)而演化出另一個(gè)問題:到底選 MacBook 好還是 SurfaceBook 好?
選擇 Linux 系統(tǒng)或者 mac 筆記本的同學(xué)最核心的理由是 Linux/Mac 開發(fā)、編譯工具鏈比較完善,很多環(huán)境或者安裝包都系統(tǒng)自帶了,寫出來的程序可以很方便的通過開發(fā)、測(cè)試與線上系統(tǒng)對(duì)接,開發(fā)測(cè)試效率比較高,而 Windows 下開發(fā)的同學(xué)可能需要考慮開發(fā)、測(cè)試代碼的可移植性問題。就拿筆者來說,也曾經(jīng)遇到過某些 java/python API 不支持 Windows 的問題,這給日常開發(fā)帶來了不小的麻煩。
在 Windows10 以前,咱們?yōu)榱私鉀Q Windows 開發(fā)環(huán)境跨平臺(tái)的問題,往往會(huì)選擇 cygwin,這個(gè)項(xiàng)目本身已經(jīng)很成熟了,筆者也用了很多年,它能在 Windows 下模擬一套類 Linux 的環(huán)境,用它應(yīng)付一般的開發(fā)測(cè)試問題不大。但它的缺點(diǎn)在于組件、包管理器比較弱,對(duì)于日后的環(huán)境維護(hù)相當(dāng)麻煩,而且一些底層 API 模擬的并不完善,對(duì)于一些涉及 Linux 底層的系統(tǒng)調(diào)用等場(chǎng)景顯得很雞肋。幸運(yùn)的是2016 年微軟在 Windows10 WSL 里開始內(nèi)置 Ubuntu,之后又開始在 Microsoft Store 以 UWP APP 的形式發(fā)布各個(gè) Linux 系統(tǒng)。這樣對(duì)于需要搭建跨平臺(tái)開發(fā)環(huán)境的同學(xué)來說可以做到一套系統(tǒng)搞定多套平臺(tái)環(huán)境,又多了一個(gè)舍棄 Mac 的理由 :)
本文今天會(huì)詳細(xì)講解下怎樣在 Windows10 下安裝 Ubuntu、搭建 Linux 開發(fā)環(huán)境,碰到的一些坑及其解決方案。
首先更新你的 Windows10 系統(tǒng)到最新,然后開啟“開發(fā)人員模式”,最后在 Microsoft Store 里輸入 wsl(或 Ubuntu、linux ) 然后選擇安裝,成功后即可點(diǎn)擊啟動(dòng)。
注意:網(wǎng)上有些老的教程在命令行下用 lxrun /install 的形式安裝,這里不推薦,因?yàn)檫@是早期 WSL beta 版本的做法,現(xiàn)在正式版直接在 Microsoft Store 以 UWP APP 的形式獲取更便捷,也易于管理。
最終的系統(tǒng)安裝在如下目錄:
%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc
初始安裝時(shí),整個(gè)目錄大概 600MB 左右,我更新了一些軟件包并升級(jí)到 16.04 后,大小在 1G。
重裝openssh
sudo apt-get remove openssh-server sudo apt-get install openssh-server
修改 sshd 設(shè)置,添加以下配置到/etc/ssh/sshd_config
AllowUsers your-username PasswordAuthentication yes PermitRootLogin yes
重啟 sshd
sudo service ssh --full-restart
不出意外使用 ssh 客戶端應(yīng)該可以鏈接上 Bash on windows 了。
# /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
如果遇到如下錯(cuò)誤
Could not load host key: /etc/ssh/ssh_host_rsa_key
請(qǐng)執(zhí)行 /usr/bin/ssh-keygen -A 重新生成 host keys 再重啟 sshd 即可。
這個(gè)問題查起來還是比較復(fù)雜的,需要有比較系統(tǒng)的排查方法和理論,筆者這里折騰了不少時(shí)間。
現(xiàn)象就是 sshd 服務(wù)起來了,ps aux 和 top 都能見到,但是 ssh 連接的時(shí)候一直提示密碼錯(cuò)誤或者沒有權(quán)限,但密碼確認(rèn)是對(duì)的,包括新建賬戶也不行,按照上篇《記一次詭異的 ssh 互信免密碼登錄失敗》的排查思路發(fā)現(xiàn) sshd 服務(wù)壓根就沒有監(jiān)聽指定的 sshd 端口,換做其它端口也有同樣的問題:
nc -l 127.0.0.1 4444 #on powershell: netstat -a -n -q | findstr "4444"
那可能是系統(tǒng)層面的問題,進(jìn)一步分析 Windows 系統(tǒng)事件發(fā)現(xiàn)是 TDI 篩選器的問題:
在 windows/system32 下咱們可以找到這個(gè)驅(qū)動(dòng)文件:
重啟電腦,再次測(cè)試 ok:
一旦關(guān)掉 bash.exe 進(jìn)程,ssh 就無法連接了。解決這個(gè)問題分三個(gè)步驟:
添加啟動(dòng)項(xiàng),讓 bash.exe 隨機(jī)啟動(dòng)
使用命令 sudo service ssh start
啟動(dòng) sshd
因?yàn)?nbsp;sudo service ssh start
命令需要輸入密碼不能自動(dòng)化,所以需要 visudo 來免除輸入密碼的操作。
使用 vbs 啟動(dòng)隱藏窗口開啟 bash 和 運(yùn)行 sudo service ssh start
set ws=wscript.createobject("wscript.shell") ws.run "C:WindowsSystem32bash.exe",0 ws.run "C:WindowsSystem32bash.exe -c 'sudo /usr/sbin/service ssh --full-restart'",0
運(yùn)行 sudo visudo
,添加如下配置
toor ALL = (root) NOPASSWD: /usr/sbin/service
其中 toor 是我的用戶名。
添加vbs文件到windows 啟動(dòng)項(xiàng),將 vbs 文件放入到如下目錄下。
%AppData%MicrosoftWindowsStart MenuProgramsStartup
重啟,測(cè)試不出意外就可以連接上 ssh 了。
另外一種方案是使用windows自帶的定時(shí)任務(wù)計(jì)劃添加開機(jī)啟動(dòng)Ubuntu ssh服務(wù)的任務(wù):
搜索“任務(wù)計(jì)劃程序”,操作-- 創(chuàng)建基本任務(wù)
觸發(fā)器:當(dāng)計(jì)算機(jī)啟動(dòng)時(shí)
操作:?jiǎn)?dòng)程序
程序名:bash.exe
參數(shù)為-c "sudo /usr/sbin/sshd -D"" 意思是打開bash,執(zhí)行sshd命令開啟ssh服務(wù)
選擇“點(diǎn)擊完成打開屬性頁(yè)”按鈕,點(diǎn)擊完成,打開屬性頁(yè)
在屬性頁(yè)選擇“使用最高權(quán)限運(yùn)行”,避免錯(cuò)誤。
首先確保上述三步每一步的代碼都正確,其次看看系統(tǒng)日志是何原因失敗,我這里遇到的是 sudo 還需要密碼,導(dǎo)致開機(jī)的 VB 腳本執(zhí)行出錯(cuò)。仔細(xì)研究了下, 這個(gè)配置文件如下:
... # 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
可以看到我的配置加在了中間,后面還有幾條配置,導(dǎo)致我的配置被后面的覆蓋了。解決方案是把我的配置移動(dòng)到最后,再次試了下,sudo 不再需要密碼了。
這里的 secureCRT卡死/亂碼和字符集有關(guān),注意設(shè)置正確的終端字符集和系統(tǒng)字符集,Ubuntu on Windows 默認(rèn)字符集是 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
另外一種方案不修改配置,在bash中依次執(zhí)行如下命令:
apt-get update apt-get install language-pack-zh-hans update-locale LANG=zh_CN.UTF-8
這幾條命令安裝了中文補(bǔ)丁,并且把本地編碼改為了中文編碼。
然后重啟WSL(關(guān)掉窗口,重新打開),再執(zhí)行命令
echo $LANG
可以看到輸出為
zh_CN.UTF-8
之后可以看到終端中輸出的中文能夠正常顯示了。
(1)版本升級(jí) //更新軟件源,最后會(huì)讀取軟件包列表 sudo apt-get update sudo update-manager -c -d 然后選擇 upgrade:apt-get -y --force-yes upgrade (2)普通升級(jí)所有軟件包 sudo apt-get update sudo apt-get -y upgrade # apt-get -y --force-yes --fix-missing upgrade (3)升級(jí)單一軟件 sudo apt-get update sudo apt-get upgrade package_name_your_want_to_upgrade apt list --upgradable -a (4)全部升級(jí) //更新所有的軟件 sudo apt-get dist-upgrade (5) 從 16.04 升級(jí)到 18.04,事后記得更新 /etc/apt/sources.list 鏡像源版本為 boinc apt install update-manager update-manager-core sudo do-release-upgrade -d # autoremove 慎用 sudo apt autoremove
WSL 自帶的 Ubuntu 更新源國(guó)內(nèi)訪問非常慢,很容易出現(xiàn)部分源IP無法連接上,進(jìn)而部分索引文件下載失敗,最后導(dǎo)致整個(gè)更新失敗,這里推薦阿里云的鏡像比較穩(wěn)定可靠,當(dāng)然也可以參考國(guó)內(nèi)各個(gè)大學(xué)的鏡像源。
(1)Ubuntu 的軟件源配置文件是 /etc/apt/sources.list,先將系統(tǒng)自帶的該文件做個(gè)備份: (cd /etc/apt && sudo cp sources.list sources.list.bak.`date -I`) (2)將源文件中的 URL 替換為國(guó)內(nèi)任意源,比如阿里云: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 換成版本代號(hào)就好,比如:15.10 willy、14.04 trusty # 具體請(qǐng)參考: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:18.04source (3)sudo apt-get update,刷新列表使其生效。 # 注意:一定要選對(duì)版本 # 注意:一定要執(zhí)行刷新,重新加載配置
在 vim 中可以直接:
%s#deb http://archive.ubuntu.com/ubuntu/#deb http://mirrors.aliyun.com/ubuntu/#g %s#deb http://security.ubuntu.com/ubuntu/#deb http://mirrors.aliyun.com/ubuntu/#g
一切妥當(dāng)后:
X 窗口系統(tǒng)( X Window System,也常稱為 X11 或 X)是一種以位圖方式顯示的軟件窗口系統(tǒng)。最初是 1984 年麻省理工學(xué)院的研究,之后變成 UNIX、類 UNIX、以及 OpenVMS 等操作系統(tǒng)所一致適用的標(biāo)準(zhǔn)化軟件工具包及顯示架構(gòu)的運(yùn)作協(xié)議。X 窗口系統(tǒng)通過軟件工具及架構(gòu)協(xié)議來創(chuàng)建操作系統(tǒng)所用的圖形用戶界面,此后則逐漸擴(kuò)展適用到各形各色的其他操作系統(tǒng)上?,F(xiàn)在幾乎所有的操作系統(tǒng)都能支持與使用 X。更重要的是,今日知名的桌面環(huán)境——GNOME 和 KDE 也都是以 X 窗口系統(tǒng)為基礎(chǔ)建構(gòu)成的。
X Window System 主要由 X Server 和 X Client 兩部分組成。其中 X Server 負(fù)責(zé)接受對(duì)圖形輸出 (窗口) 的請(qǐng)求并反饋用戶輸入,而 X Client 則是使用圖形界面的應(yīng)用程序。由于 WSL 本身不支持圖形界面,我們需要額外安裝 X Server 并指定圖形輸出位置,使得帶有 GUI 的桌面程序可以被顯示和運(yùn)行。
Windows 上常用的 X Server 有:Xmanager, Xming, VcXsrv 等,簡(jiǎn)單比較一下:
Xmanager 是商業(yè)軟件,需要付費(fèi)
Xming 雖然是開源軟件,但是從從 2007 年最后一個(gè)免費(fèi)版本 (6.9.0.31) 之后,就需要捐助才能下載。不過免費(fèi)版本雖然老舊,但由于 X Windows System 近年來變化不大,免費(fèi)版還是基本夠用
VcXsrv 為開源免費(fèi)軟件,使用方式及界面與 Xming 極為相近,還在不斷更新,因此我最終選擇此軟件
下載 VcXsrv 并進(jìn)行安裝后,運(yùn)行 XLaunch,一直點(diǎn) Next 至啟動(dòng)完成。
啟動(dòng) X Server 后,需要在 WSL 中輸入如下兩條指令,重啟 Bash,即可運(yùn)行帶有圖形界面的 Linux 程序了
echo export DISPLAY=:0.0>>~/.bashrc sudo sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf
這里對(duì)這兩條指令簡(jiǎn)單解釋一下:
第一條指令
該指令將export DISPLAY=:0.0 指令添加進(jìn) ~/.bashrc 中,使得每次開啟新的 Bash 時(shí),自動(dòng)指定圖形程序顯示的位置。
也可直接輸入以下指令運(yùn)行程序,無需export,但作用效果只有一次,再運(yùn)行其他程序時(shí),還要重新輸入指令。
DISPLAY=:0.0 gvim & //gvim 為你想要打開的程序
tips:gvim 后的 & 不是必須要加,它表示程序以后臺(tái)啟動(dòng)的方式運(yùn)行,這樣在圖形界面運(yùn)行時(shí),命令行窗口還可以繼續(xù)使用。要是忘記加 &, 也可以在程序運(yùn)行時(shí)按ctrl+z, 將程序進(jìn)程掛起,并輸入bg,使其在后臺(tái)運(yùn)行
第二條指令(可選)
第一條輸入,重啟 Bash 后 , 理論上就可以運(yùn)行 Linux 程序了,但程序一般不會(huì)運(yùn)行很久就掛掉了,并會(huì)提示 D-Bus異常,該異常會(huì)使得許多 Linux 的圖形程序無法很好地運(yùn)行。 這是因?yàn)?D-Bus 需要使用socket來通信,但 WSL 目前并不支持 socket。
Reddit 上對(duì)此的解決方案為:用 tcp 代替 sockets 來使 D-Bus 運(yùn)行。
具體實(shí)現(xiàn)為:在 /etc/dbus-1/session.conf 中(需要 Root 權(quán)限),將<listen>unix:tmpdir=/tmp</listen>字段替換為 <listen>tcp:host=localhost,port=0</listen>,簡(jiǎn)單寫就是第二條指令了。
是因?yàn)槟愕?WSL 里沒有中文字體支持,所以需要安裝中文字體:
sudo apt install fonts-noto-cjk 或者 sudo apt install fonts-wqy-microhei fonts-wqy-zenhei xfonts-wqy
如有需要在 VcxSrv 輸入中文可以安裝 fcitx 中文輸入法,具體參考
#Windows Subsystem for Linux入門:安裝+配置圖形界面+中文環(huán)境+vscode
https://wu-kan.github.io/posts/linux/Windows-Subsystem-for-Linux
#windows 前端工作環(huán)境搭建指北
https://juejin.im/post/5a5f0e3ff265da3e290c3b78
如果還有問題,可以進(jìn)一步如下設(shè)置:
打開xlanch,一路下一步添加啟動(dòng)參數(shù)
-fp "C:/Windows/Fonts"
然后重啟xming
本地文件系統(tǒng)的各磁盤掛載在 /mnt 目錄下,如 C 盤在子系統(tǒng)中的位置是:/mnt/c ,WSL文件讀寫權(quán)限的配置方法:
cat /etc/wsl.conf [automount] enabled = true options = "metadata,fmask=022,dmask=022,umask=022" options = "metadata" mountFsTab = false
Ubuntu 子系統(tǒng)的根目錄位置:
[C:UsersusernameAppDataLocalPackagesCanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgscLocalStaterootfs]
需要將子系統(tǒng)中的文件拷貝到本地時(shí)可以直接訪問;但不建議在外部手動(dòng)更改子系統(tǒng)里的文件。
如果不小心把子系統(tǒng)搞崩潰了怎么辦?這里有兩種方法。
1、直接右鍵卸載,再?gòu)?Microsoft Store 重新安裝。
2、推薦!打開 PowerShell,運(yùn)行 ubuntu clean ,該命令會(huì)清除 Ubuntu 的所有文件和配置,但是不會(huì)卸載應(yīng)用,相當(dāng)于重置,省得重新安裝應(yīng)用了。
輸入 ubuntu help
可以查看更多指令。
子系統(tǒng)默認(rèn)登錄賬戶為我們初始化時(shí)設(shè)置的普通賬戶,我們可以把默認(rèn)賬戶更改為 root。
打開 windows 的 PowerShell,修改默認(rèn)賬戶為 root:
ubuntu config --default-user root
需要修改為其它賬戶的話,把命令中的 root 改為其它用戶名即可。
按圖操作:
wsl 2 已經(jīng)全面支持 docker,本文不再贅述,下面主要針對(duì) wsl 版本。
首先WSL命令行一定要用管理員身份啟動(dòng)。(用管理員打開Ubuntu程序,記住不是sudo,是Windows的“管理員打開”)
sudo apt update sudo apt install docker.io # sudo groupadd docker sudo usermod -aG docker $USER # 授予當(dāng)前用戶以root權(quán)限運(yùn)行Docker CLI
如果默認(rèn)安裝不通過,可以指定 docker 版本號(hào)安裝:【W(wǎng)SL+Docker】新手Win10下的WSL Ubuntu18并安裝使用Docker
https://zhuanlan.zhihu.com/p/61542198
隨后再以管理員啟動(dòng)WSL控制臺(tái),執(zhí)行
sudo cgroupfs-mount # 一個(gè)簡(jiǎn)易加載控制組文件的腳本 sudo service docker start
測(cè)試安裝結(jié)果(下面的命令不要再帶 sudo):
$ docker version Client: 。。。 Server: 。。。 $ docker run --rm hello-world $ docker run -it ubuntu bash
顯示如上信息,就表示可以正常使用了,需要注意的是每次電腦重啟后先執(zhí)行cgroupfs-mount再啟動(dòng)docker服務(wù),wsl 目前 docker 支持并不完善,可能會(huì)有很多問題,建議直接 linux 環(huán)境使用,或者 wsl 2 。
運(yùn)行 docker 提示: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc
Inside file /lib/systemd/system/docker.service change:
ExecStart=/usr/bin/dockerd fd://
with
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375
Inside file /etc/init.d/docker change:
DOCKER_OPTS=
with
DOCKER_OPTS="-H tcp://0.0.0.0:2375"
and then restart your computer(or admin: sudo service docker restart).
如果你的 Windows/Docker 版本不對(duì)也會(huì)有各種問題,可能 WSL 本身無法支持/兼容 docker engine,這時(shí)候我們?nèi)粝M?WSL 中運(yùn)行 docker(client) ,我們需要將 docker client 連接到 Windows 的 docker engine (這也是為什麼要安裝 windows docker 的原因),并且還需如下設(shè)置。
以上就是如何進(jìn)行Ubuntu on Windows10跨平臺(tái)開發(fā)環(huán)境搭建,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站名稱:如何進(jìn)行UbuntuonWindows10跨平臺(tái)開發(fā)環(huán)境搭建
鏈接分享:http://jinyejixie.com/article4/pgipie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈、定制開發(fā)、品牌網(wǎng)站制作、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)