2017-09-23 初成文
2018-08-06 更新完整示例
一娘荡、準(zhǔn)備工作:
需要linux環(huán)境(虛擬機(jī)也可)
標(biāo)準(zhǔn)的適用樹(shù)莓派的IMG鏡像文件
基本的linux知識(shí)+強(qiáng)大的搜索資料解決問(wèn)題的能力
二干旁、介紹:
目前樹(shù)莓派多系統(tǒng)啟動(dòng)主要是noobs和berryboot
兩個(gè)各有優(yōu)缺點(diǎn),berryboot可以直接在berryboot界面?zhèn)浞菹到y(tǒng)或數(shù)據(jù)它改,缺點(diǎn)也不少疤孕,比如分區(qū)是共享的,img是只讀的央拖,官方系統(tǒng)支持更新慢等祭阀。
noobs是官方工具,各個(gè)系統(tǒng)之間是獨(dú)立的鲜戒,一個(gè)系統(tǒng)掛了另一個(gè)仍然能夠正常啟動(dòng)专控,資料相對(duì)較多。
另外還有一個(gè)PINN基于noobs的增強(qiáng)版遏餐,添加一些功能伦腐,比如無(wú)人值守自動(dòng)安裝、wifi自動(dòng)配置等失都,可按此文自定義安裝第三方系統(tǒng)柏蘑。
本文示例使用noobs從u盤(pán)安裝kali(VM下制作)并拓展至最大分區(qū)幸冻。
這里先說(shuō)一下noobs的相關(guān)內(nèi)容,從v1.5版本開(kāi)始安裝后會(huì)自動(dòng)建立一個(gè)fat32格式的RECOVERY分區(qū)(主分區(qū))咳焚,用來(lái)存放noobs啟動(dòng)文件和一個(gè)ext4格式的SETTINGS分區(qū)(邏輯分區(qū))用來(lái)存放noobs相關(guān)信息如已安裝系統(tǒng)boot/root位置洽损。余下拓展分區(qū)用來(lái)安裝系統(tǒng)。
三革半、NOOBS里的系統(tǒng)至少需要4個(gè)文件:
os.json //系統(tǒng)描述
partitions.json //分區(qū)描述
boot.tar //boot分區(qū)文件
root.tar //root分區(qū)文件
上面四個(gè)文件是必須的碑定,缺一不可,其它則是不必須的:
slides或slides_vga //文件夾內(nèi)放說(shuō)明性圖片,安裝時(shí)在主界面以幻燈片播放,如官方提供則可由marketing.tar解壓得https://downloads.raspberrypi.org/
Logo.png //Logo名字須與文件夾名字相同又官,大小40x40
partition_setup.sh //分區(qū)腳本延刘,在系統(tǒng)安裝完成后立即執(zhí)行,如無(wú)則需要在cmdline.txt設(shè)定root分區(qū)位置
1六敬、os.json示例
{
"description": "Kali Linux for RasPi added to NOOBS Bootloader",
"kernel": "4.4",
"name": "Kali",
"release_date": "2017-05-25",
"supported_hex_revisions": "1040,1041,2082",
"supported_models": [
"Pi 2",
"Pi 3"
],
"url": "https://www.kali.org/",
"version": "2017.1"
}
其中碘赖,
name必須與文件夾名字相同,最好不要留空格
description為系統(tǒng)簡(jiǎn)介外构,出現(xiàn)在選擇界面
release_date如為官方系統(tǒng)崖疤,為避免從網(wǎng)絡(luò)下載更新版本可改為更晚的日期
supported_hex_revisions:"2,3,4,5,6,7,8,9,d,e,f,10,11,12,14,19,1040,1041,0092,0093,2082"表示兼容所有pi,2082對(duì)應(yīng)樹(shù)莓派3b
2典勇、partitions.json示例
{
"partitions": [
{
"label": "boot",
"filesystem_type": "FAT",
"partition_size_nominal": 100,
"want_maximised": false,
"uncompressed_tarball_size": 51
},
{
"label": "root",
"filesystem_type": "ext4",
"partition_size_nominal": 3867,
"want_maximised": true,
"mkfs_options": "-O ^huge_file",
"uncompressed_tarball_size": 3133
}
]
}
其中
label必須與兩個(gè)tar名字一致;
filesystem_type文件系統(tǒng)類(lèi)型/boot為fat劫哼,/root為ext4;
uncompressed_tarball_size:boot.tar/root.tar解壓后的大小
partition_size_nominal:設(shè)定分區(qū)大小
want_maximised:一旦設(shè)定為true,noobs就會(huì)自動(dòng)將可用空間分配到該分區(qū)割笙,因而當(dāng)設(shè)置為true時(shí)partition_size_nominal設(shè)置多大也無(wú)所謂了权烧。
mkfs_options:mkfs命令,hugefile表示允許文件大于2TB
3伤溉、下面制作boot.tar和root.tar
①?gòu)?a target="_blank" rel="nofollow">官網(wǎng)下載最新版的kali鏡像般码。
②vm虛擬機(jī)設(shè)置共享文件夾(或直接使用linux實(shí)體機(jī))
③掛載上面的文件系統(tǒng)后乱顾,切換到share目錄下板祝,比如我的是/mnt/hgfs/share(后文同樣,需切換到自己實(shí)際的目錄)
cd /mnt/hgfs/share
sudo mkdir /mnt/img1 //創(chuàng)建兩個(gè)掛載點(diǎn)來(lái)掛載
sudo mkdir /mnt/img2
sudo kpartx -av kali-2017.01-rpi2.img //裝載映像文件
輸出IMG內(nèi)部?jī)蓚€(gè)分區(qū):
add map loop0p1 (253:0): 0 125000 linear 7:0 1
add map loop0p2 (253:1): 0 14209047 linear 7:0 125001
創(chuàng)建boot.tar
mount -o loop,ro,noexec /dev/mapper/loop0p1 /mnt/img1
cd /mnt/img1
bsdtar --numeric-owner --format gnutar -cvpf /tmp/boot.tar .
ls /tmp/boot.tar -l --block-size=1MB
xz -9 -ev /tmp/boot.tar
創(chuàng)建root.tar并卸載剛才掛載的映像
mount -o loop,ro,noexec,noload /dev/mapper/loop0p2 /mnt/img2
cd /mnt/img2
bsdtar --numeric-owner --format gnutar --one-file-system -cpvf /tmp/root.tar .
xz -9 -ev /tmp/root.tar
sudo kpartx -dv kali-2017.01-rpi2.img
此時(shí)走净,已經(jīng)生成boot.tar和root.tar在/tmp目錄下券时,將其移出虛擬機(jī)與上面的兩個(gè)json文件組成kali文件夾放在/os文件夾下即可。
mv /tmp/boot.tar.xz /mnt/hgfs/share
mv /tmp/boot.tar.xz /mnt/hgfs/share
為了最大化利用sd卡空間伏伯,只把noobs除了os文件夾外的文件放于sd卡根目錄下橘洞,os文件夾放于u盤(pán)根目錄下,這樣noobs會(huì)自動(dòng)調(diào)整分區(qū)recovery為最小说搅,只占用大概63M左右而剩余空間幾乎全部用來(lái)安裝系統(tǒng)炸枣。
遇到的一個(gè)坑是默認(rèn)啟動(dòng)boot和root分區(qū)是mmcblkp1和mmcblkp2,而實(shí)際應(yīng)該是mmcblkp6和mmcblkp7。后來(lái)直接把Raspbian的partition_setup.sh借來(lái)用(也可手動(dòng)修改)适肠,跟上面4個(gè)文件一起放到/os/kali同一文件夾下霍衫,logo可自制40x40像素,如下圖:
水平有限侯养,時(shí)間倉(cāng)促慕淡,難免有誤,歡迎指正沸毁。
完整示例:
主要參考文章:
1.Nitrus/noobs
2.raspberrypi/noobs
3.NOOBS安裝自定義系統(tǒng)
4.QUAD BOOT – RASPBIAN ‘PIXEL’, RETROPIE, RASPLEX, KODI