title: ArchLinux On Win10
date: 2017-04-03 23:04:25
tags: [Windows,ArchLinux,分享]
折騰起因
- 清明期間無聊,又把電腦升級到Win10和Ubuntu雙系統(tǒng),這次為什么沒有是Arch+Win10呢,因?yàn)閁buntu出17.04了,常新一下,估計(jì)這一段時(shí)間我會使用Ubuntu代替Arch工作(原Arch之前備份了)。
- Win10還是要玩子系統(tǒng)的,默認(rèn)子系統(tǒng)是Ubuntu,我鐘愛于Arch,所以這次把子系統(tǒng)換成Arch玩玩,Github也有相關(guān)的項(xiàng)目(在文章最后我給分享給大家),本文也相對參考了,蘭陵N散記.所以 關(guān)鍵詞:分享
WSL介紹
- Windows Subsystem for Linux是一個(gè)為在Windows 10上能夠原生運(yùn)行Linux 二進(jìn)制可執(zhí)行文件(ELF 格式)的兼容層。 WSL提供了一個(gè)微軟開發(fā)的Linux兼容內(nèi)核接口(不包含Linux代碼)。它包含用戶模式和內(nèi)核模式組件,主要是由如下組成:
- 用戶模式會話管理器服務(wù),處理Linux實(shí)例的生命周期;
- Pico(可編程輸入輸出)提供驅(qū)動程序(lxss.sys,lxcore.sys),通過轉(zhuǎn)換的Linux系統(tǒng)調(diào)用模擬Linux內(nèi)核;
- 承載未經(jīng)修改的用戶模式Linux的Pico進(jìn)程,例如/bin/bash。
- 在用戶模式Linux程序和Windows內(nèi)核組件之間,通過將未修改Linux程序放入Pico進(jìn)程,我們讓Linux系統(tǒng)調(diào)用被引導(dǎo)至Windows內(nèi)核。lxss.sys和lxcore.sys驅(qū)動轉(zhuǎn)換Linux系統(tǒng)調(diào)用進(jìn)入NT API并模擬Linux內(nèi)核。
Bash on Ubuntu on Windows就是WSL的具體應(yīng)用。它是由微軟與Canonical公司合作開發(fā),目標(biāo)是使純正的 Ubuntu 14.04鏡像能下載和解壓到用戶的本地計(jì)算機(jī),并且鏡像內(nèi)的工具和實(shí)用工具能在此子系統(tǒng)上原生運(yùn)行。在最近的14959更新中,Ubuntu已是默認(rèn)為16.04。
Bash on Ubuntu on Windows
- 作為一名ArchLinux忠實(shí)愛好者(唉,原作者跟我一樣呀),自然想在WSL上運(yùn)行ArchLinux。參考了一些網(wǎng)上的資料,我已把Win10升級到14955,首先還是先得安裝Bash on Ubuntu on Windows:
- 開啟開發(fā)人員模式:設(shè)置-更新與恢復(fù)-針對開發(fā)人員-開發(fā)人員模式
- 開啟WSL子系統(tǒng):控制面板-程序和功能-啟用或關(guān)閉 Windows 功能-適用于 Linux 的 Windows 子系統(tǒng)(beta)
- 安裝Bash on Ubuntu on Windows: 命令提示符(cmd)-輸入bash-按提示完成安裝
- 由于需要下載Ubuntu需要從應(yīng)用商店下載,在天朝的網(wǎng)絡(luò),可能會比較慢,甚至?xí)B接不上,我就折騰好久。并且它居然沒有斷點(diǎn)續(xù)傳,好幾次下載到70%多,就斷開了,真讓人受不了。
由于后續(xù)把Ubuntu替換成Archlinux,需要使用到Archlinux的roofs。squashfs-tools工具是用于解壓sfs文件的,所以先把Ubuntu的更新源替換成國內(nèi)的,比如mirrors.163.com/ubuntu或mirrors.aliyun.com/ubuntu。
$ sudo apt-get update
$ sudo apt-get install squashfs-tools
Arch On Win10
- 首先從http://mirrors.aliyun.com/archlinux/iso/latest/下載最新的ArchISO。
從ArchISO中提取出/arch/x86_64/airoot.sfs文件放在Bash on Ubuntu on Windows 能讀取的目錄下。WSL系統(tǒng)會把Windows的磁盤掛載到/mnt目錄下,如D盤則是/mnt/d。
在Ubuntu中把a(bǔ)iroot.sfs解壓,建議在當(dāng)前Ubuntu的用戶Home目錄下執(zhí)行:
$ sudo unsquashfs airoot.sfs
- 然后把Bash窗口關(guān)掉,通過Windows的文件資源管理器進(jìn)行到C:\Users<用戶名>\AppData\Local\Lxss文件夾。由于AppData與Lxss都是隱藏目錄,可以在地址欄上直接輸入路徑就可以直接進(jìn)入,否則需要在文件夾選項(xiàng) 中把“隱藏受保護(hù)的操作系統(tǒng)文件”選項(xiàng)取消才能看到。
- 其中的rootfs文件夾就是Linux中的/,先把原有的rootfs修改其它名稱備份,還把之前airoot.sfs解壓的squashfs-root直接剪切到Lxss,重命名為rootfs。注意,squashfs-root不能在Windows下拷貝到Lxss\rootfs,由于在WSL與Windows對文件讀寫操作還是有區(qū)別,Windows下拷貝可能存在丟失文件。
先在命令提示符(cmd)用lxrun /setdefaultuser root 把默認(rèn)的用戶換成root。再輸入bash進(jìn)入Linux。
這個(gè)我們就把Ubuntu替換成Archlinux。我們就可以像使用Archlinux一樣來在WSL中使用Archlinux。比如創(chuàng)建新的用戶,設(shè)置locale,替換Archlinux的更新源。不過由于我最早是在14396版本中使用WSL,還是在使用過程遇到了幾個(gè)問題:
無法chroot,解決辦法:
升級到14936或以后的Insider Preview版本。
Archlinux無法更新或安裝新的軟件,由于keyringVerifying失敗,解決辦法:
# pacman-key --init
# pacman-key --populate
locale-gen失敗(找不到UTF-8的charmaps文件),解決辦法:
# cd /usr/share/i18n/charmaps
# tar zxvf UTF-8.gz
# locale-gen
編譯Go語言程序失敗(估計(jì)是系統(tǒng)調(diào)用沒有實(shí)現(xiàn),沒有proc),解決辦法:
升級到14959或以后的Insider Preview版本。
WSL 終端
windows下命令提示符(cmd),輸入bash可以直接進(jìn)入WSL,但它的使用體驗(yàn)無法跟Linux中的終端相比。好在網(wǎng)上已有同學(xué)先貢獻(xiàn)了終端模擬器,都是基于mintty,總算能找回一些在純Linux中使用終端的感覺。若使用下msys2的同學(xué)應(yīng)該對它比較熟悉。