標籤:windows 線上安裝 media linux 離線
How to make Windows 10 IoT Core offline install media for Raspberry Pi
前幾天在樹莓派上更新Receiver for Linux 13.4,又嘗試在Pi上安裝Visual Studio Code,結果覺得系統有點不正常了,於是打算重新刷一遍。
之前的系統使用了一張16 GB的TF卡,直接使用NOOBS lite進行線上安裝。之前說了這樣安裝有個好處,就是安裝檔案本身不佔太多的空間,更多的空間可以給系統使用。
可是……下載好慢啊……最關鍵是,下載Windows 10 IoT Core的時候,總是出錯!好不容易下載完了,安裝結束出現了MBR的HASH錯誤!
原因估計是GFW對HTTPS的幹擾,SSL通訊,你懂的。
N次線上安裝失敗之後,我怒了,搞個離線安裝的卡!
說來容易,做來困難。Raspbian有離線安裝的NOOBS下載,就是官網1 GB左右的那個壓縮包。可是Windows 10 IoT Core怎麼辦呢?
搜尋了半天,沒有進展。後來我注意到,當網路失敗時NOOBS會提示從一個網站下載內容失敗。這個網站看上去是在Azure的CDN:
https://iottools.blob.core.windows.net/win10iotnoobs/
於是,通過人為製造網路斷開,獲得了幾個檔案的失敗請求:
Windows_IoT.png, os.json, partitions.json, partition_setup.sh, marketing.tar
對照Raspberry的安裝目錄,感覺還缺安裝啟動鏡像和安裝鏡像。我記得之前安裝時會有FFU檔案在Windows IoT的安裝目錄,嘗試了一下,不行。開啟marketing.tar,和slides_vga目錄的一致,先解個壓放好。
回到安裝Windows IoT失敗的系統,通過Raspbian掛載的那幾個分區,挨個開啟看。有一個叫Srcatch的分區吸引了我,裡面有大量的LOG檔案,最重要的,有一個ISO檔案,難道這就是安裝鏡像?先複製過來!還有一些Linux下的檔案例如installtool-1.0之類。再次嘗試啟動,當然還是失敗了……
感覺這樣是不夠的。既然Windows自己會建立這些分區,那麼這些下載和複製的初始化動作一定有跡可選,嗯,蛛絲馬跡應該在json檔案和sh檔案裡。
先開啟partitions.json,從名字來看,這是個分區描述檔案,很快就讓我發現的蛛絲馬跡:
650) this.width=650;" title="image" style="border-left- 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://s3.51cto.com/wyfs02/M02/88/5C/wKiom1fyLk6j_J5FAAEgrmn5ubs453.png" width="606" height="283" />
圖中高亮部分,就是類似啟動安裝環境的壓縮包。你看到的這個“tarball”參數,已經被我替換成猜測的本地路徑而不是需要下載的遠程路徑。當然,我也順手下載了一份放到我前面做的檔案夾裡。
這樣看來,啟動需要的檔案已經齊了。可再次安裝時,還是去網上下載,離線失敗……
繼續。接下來是查看partition_setup.sh,我感覺這個檔案完成了整個安裝過程。為了能夠明白這個過程,我這個Linux小白仔細地讀起了Shell檔案。看了兩邊之後,感覺需要改兩個地方,一個是URL(後來發現這是由instaltool產生的,有時間在研究吧),一個是Image路徑。於是,把第一個參數也改成我猜測的掛載路徑。
650) this.width=650;" title="image" style="border-left- 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://s3.51cto.com/wyfs02/M00/88/5C/wKiom1fyLk-Rx0ugAAG3TRMXB4g108.png" width="604" height="282" />
再次啟動NOOBS,終於能離線安裝了……淚奔……可是,為啥Windows IoT在NOOBS選擇的時候,沒有表徵圖呢?我不是處女座,可我也不能忍……
繼續改os.json。
650) this.width=650;" title="image" style="border-left- 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px" border="0" alt="image" src="http://s3.51cto.com/wyfs02/M01/88/5C/wKiom1fyLlCzzUDHAADmXshlXH0355.png" width="604" height="282" />
這一次,終於完美……
對了,其實一開始我失敗了好多次,就是做完卡啟動後,一直卡在NOOBS初始化階段,等了一晚都不好使。於是我去NOOBS的github上看說明:
https://github.com/raspberrypi/noobs
recoevry.cmdline中在試了很多參數,都沒效果。最後,發現一個神秘的參數:runinstaller。這個參數會自動開啟分區調整,然後啟動NOOBS的安裝過程。
為了方便,可以直接從github上下載修改過的上述json和sh檔案:
https://github.com/HaoHoo/Windows-10-IoT
如果需要ISO檔案的話,可以留言我放網盤。
最後的最後,小結一下整個過程:
1、使用SDformatter來格式化SD/TF卡,如果之前已經做過NOOBS,可以使用diskpart的clean清除卡上的所有分區。格式化時,務必開啟“邏輯大小調整”
650) this.width=650;" title="clip_image001" style="border-left- 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image001" src="http://s3.51cto.com/wyfs02/M01/88/5C/wKiom1fyLlHAQrOjAACH3jPmomo642.png" width="300" height="243" /> 650) this.width=650;" title="clip_image001[4]" style="border-left- 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; padding-right: 0px; border-top-width: 0px" border="0" alt="clip_image001[4]" src="http://s3.51cto.com/wyfs02/M02/88/5D/wKiom1fyLlGDOV6fAAAOau7aRw4610.png" width="266" height="183" />
2、下載NOOBS的壓縮包,可以選擇1 GB的,解壓到SD/TF卡
3、在os目錄下,建立Windows_10_IoT_Core目錄,並將前面提及的檔案全部複製進去。記住,Linux區分大小寫!
4、修改recovery.cmdline檔案,加入runinstaller。(第一次解壓的檔案包含,可選。以後如果再次換卡使用,記得修改)
5、插卡啟動樹莓派,開始安裝過程。
Windows 10 IoT Core對SD/TF卡的要求要高於Raspbian,如果可以,選擇16GB Class 10以上的卡為佳。
玩轉樹莓派——製作包含Windows 10 IoT Core和Raspbian的離線安裝介質