日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android基于Docker容器的双系统多开实现和自动化部署

發(fā)布時間:2024/4/15 Android 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android基于Docker容器的双系统多开实现和自动化部署 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


GitHub:https://github.com/Pangu-Immortal

本文技術(shù)涉及基于Docker容器的移動端雙系統(tǒng)實現(xiàn)系統(tǒng)及方法,所述系統(tǒng)包括相互連接的內(nèi)核層及應(yīng)用程序?qū)?#xff0c;其中,應(yīng)用程序?qū)影―ocker模塊以及Docker模塊根據(jù)Docker創(chuàng)建的多個容器,所述內(nèi)核層包括LSM模塊,所述LSM模塊用于對多個容器內(nèi)的進程進行訪問控制。本文技術(shù)提供的基于Docker容器的移動端雙系統(tǒng)實現(xiàn)系統(tǒng)及方法,可有效阻止Docker容器進程對宿主機中沒有被隔離文件資源的訪問,完善了Docker容器與宿主機之間的訪問控制機制,可滿足多元場景的實用性及移動端的安全性,同時又可以省去多個移動端切換使用的復(fù)雜性。

前幾年預(yù)研加開發(fā)Android雙系統(tǒng),中途用過不少開源代碼或者研讀過大牛BLOG,現(xiàn)開放雙系統(tǒng)設(shè)計原理來回報社區(qū)。

Android容器技術(shù)已在Android 6 7 8 9 10 11 12版本中分別實現(xiàn)并應(yīng)用。

原型來自于哥倫比亞大學(xué)虛擬化實驗室的一篇論文(也有一個DEMO),后來一個以色列公司cellrox在2014年進行了商業(yè)化,2015年的時候浙大一個操作系統(tǒng)實驗室也出了一個DEMO(名稱叫Condroid)。

哥大論文地址:http://systems.cs.columbia.edu/projects/cells/
浙大項目地址:http://condroid.github.io/
以色列公司官網(wǎng):http://www.cellrox.com/

GitHub:https://github.com/Pangu-Immortal

浙大項目本來有源碼,由于一些原因目前只剩下文檔,對Android源碼比較熟悉能復(fù)原程序。

原理:
同docker、lxc、cells原理一致,利用kernel中的namespace+cgroup來實現(xiàn)Android容器系統(tǒng)。

容器啟動:
要有一個能啟動init進程的容器管理進程,該進程是rc service服務(wù)進程(celld),負責(zé)啟動、關(guān)閉和切換容器,管理和分配容器需要的系統(tǒng)資源。

【技術(shù)實現(xiàn)步驟摘要】

基于Docker容器的移動端雙系統(tǒng)實現(xiàn)系統(tǒng)及方法
本文技術(shù)涉及計算機安全,具體涉及一種基于Docker容器的移動端雙系統(tǒng)實現(xiàn)系統(tǒng)及方法。

技術(shù)介紹
隨著科技水平的發(fā)展,移動智能終端和移動互聯(lián)網(wǎng)也得到了充分的進步,搭載主流移動操作系統(tǒng)(IOS、Android)的移動智能終端數(shù)量呈現(xiàn)爆炸式增長。其中,由于Android手機有著相對優(yōu)勢的性價比,在市場中占有很大的比重,與此同時,Android應(yīng)用為了滿足用戶的需求也呈現(xiàn)出爆炸式增長的趨勢。如今,很多的人士由于業(yè)務(wù)的需要,往往需要攜帶兩部或者以上的手機來適應(yīng)不同的場景,比如生活和工作相分離的場景,對于一些特殊的人群(保密人員、公務(wù)員)等就一定需要考慮到安全的問題。雖然Android原生系統(tǒng)從底層內(nèi)核到上層app應(yīng)用添加了多種安全措施,確保手機系統(tǒng)的安全性,但是還依然存在著安全問題,比如Linux內(nèi)核的攻擊,對上層app應(yīng)用的攻擊。隨著惡意程序的增多,用戶的隱私及數(shù)據(jù)會受到很大的威脅。虛擬化技術(shù)是對系統(tǒng)硬件資源進行抽象化并進行管理,然后向上層提供統(tǒng)一的接口,加入虛擬化技術(shù)后,系統(tǒng)間的硬件的差異化就被透明化了,比如,當選擇一種操作系統(tǒng)時就可以不用關(guān)心底層硬件的處理器指令集。虛擬化技術(shù)的引入,慢慢解決了系統(tǒng)中軟硬件緊密耦合的關(guān)系,可以在同一個物理機上能夠同時運行多個操作系統(tǒng)實例,使得系統(tǒng)能夠充分利用硬件資源。目前,虛擬化技術(shù)解決方案可以在不同層次上實現(xiàn),不同的實現(xiàn)方式和抽象層次對應(yīng)的虛擬化有不同特性。按實現(xiàn)的技術(shù)不同,虛擬化可以分為指令級虛擬化、硬件級虛擬化、操作系統(tǒng)級虛擬化以及編程語言級虛擬化4種。指令級虛…

【技術(shù)保護點】

1.一種基于Docker容器的移動端雙系統(tǒng)實現(xiàn)系統(tǒng),其特征在于:所述移動端雙系統(tǒng)實現(xiàn)系統(tǒng)包括相互連接的內(nèi)核層及應(yīng)用程序?qū)?#xff0c;其中,應(yīng)用程序?qū)影―ocker模塊以及Docker模塊根據(jù)Docker創(chuàng)建的多個容器,所述內(nèi)核層包括LSM模塊,所述LSM模塊分別與應(yīng)用程序?qū)觾?nèi)的各容器連接,用于對多個容器內(nèi)的進程進行訪問控制。

【技術(shù)特征摘要】

  • 1.一種基于Docker容器的移動端雙系統(tǒng)實現(xiàn)系統(tǒng),其特征在于:所述移動端雙系統(tǒng)實現(xiàn)系統(tǒng)包括相互連接的內(nèi)核層及應(yīng)用程序?qū)?#xff0c;其中,應(yīng)用程序?qū)影―ocker模塊以及Docker模塊根據(jù)Docker創(chuàng)建的多個容器,所述內(nèi)核層包括LSM模塊,所述LSM模塊分別與應(yīng)用程序?qū)觾?nèi)的各容器連接,用于對多個容器內(nèi)的進程進行訪問控制。
  • 2.如權(quán)利要求1所述的基于Docker容器的移動端雙系統(tǒng)實現(xiàn)系統(tǒng),其特征在于,所述LSM模塊包括:系統(tǒng)調(diào)用模塊,用于通過命名控制機制對容器中的進程進行定位,以判斷內(nèi)核層中的進程是否是對應(yīng)的容器中的進程;錯誤檢查模塊,與系統(tǒng)調(diào)用模塊連接,用于對容器中的進程進行錯誤檢查;數(shù)字模擬轉(zhuǎn)換器,與錯誤檢查模塊連接,用于轉(zhuǎn)換容器中的進程文件的格式;安全決策模塊,與數(shù)字模擬轉(zhuǎn)換器連接,用于判斷容器中的進程文件是否是內(nèi)核層的保護文件;訪問權(quán)限判斷模塊,與安全決策模塊連接,用于根據(jù)安全決策模塊的判斷結(jié)果判斷容器中的進程是否具有訪問權(quán)限。
  • 3.如權(quán)利要求2所述的基于Docker容器的移動端雙系統(tǒng)實現(xiàn)系統(tǒng),其特征在于:所述系統(tǒng)調(diào)用模塊通過Open系統(tǒng)調(diào)用程序完成對容器中的進程的定位。
  • 4.如權(quán)利要求2所述的基于Docker容器的移動端雙系統(tǒng)實現(xiàn)系統(tǒng),其特征在于:所述安全決策模塊通過其內(nèi)設(shè)置的鉤子函數(shù)判斷容器中的進程文件是否是內(nèi)核層的保護文件。
  • 5.如權(quán)利要求2所述的基于Docker容器的移動端雙系統(tǒng)實現(xiàn)系統(tǒng),其特征在于:所述LSM模塊還包括錯誤信息返回模塊,與安全決策模塊連接,用于在容器中的進程文件不是內(nèi)核層的保護文件的情況下,返回錯誤信息,并結(jié)束容器中的進程的系統(tǒng)調(diào)用。

文件系統(tǒng):

容器的文件系統(tǒng)是在celld中構(gòu)建,用到chroot、mount、mnt namespace等技術(shù),android系統(tǒng)每個分區(qū)掛載實現(xiàn)機制如下:
1、根分區(qū)掛載:在主系統(tǒng)的data分區(qū)目錄中mount rootfs文件系統(tǒng),當做容器系統(tǒng)的根分區(qū)。
2、system分區(qū)掛載:將主系統(tǒng)的system目錄mount(bind)成容器系統(tǒng)的system分區(qū)。
3、data分區(qū)掛載:在主系統(tǒng)中創(chuàng)建一個臨時目錄,然后把這個臨時目錄mount成容器系統(tǒng)的data分區(qū)。
4、sdcard掛載:原理同data分區(qū)掛載機制一致,android 6以后sdcard實現(xiàn)機制一直在變,這里需要注意一下是否需要變更。
5、根分區(qū)的所有文件需要主動創(chuàng)建或者復(fù)制,system分區(qū)則不需要。

init進程:

在celld中主動啟動init進程,當做容器系統(tǒng)的init根進程,在celld源碼中有如下大致步驟:
1、利用clone系統(tǒng)調(diào)用啟動容器系統(tǒng)的init進程。
2、clone系統(tǒng)調(diào)用需要一系列namespace標記來創(chuàng)建屬于容器系統(tǒng)的命名空間。
3、然后需要給這個init進程分配cgroup資源。
4、最后需要調(diào)用chroot函數(shù)給容器系統(tǒng)分配根目錄,實際上它是主系統(tǒng)中的一個目錄而已。

binder設(shè)備的虛擬化:

這個驅(qū)動是android系統(tǒng)的核心,第一步一定要把它實現(xiàn)好,因為所有的android service都會注冊到binder驅(qū)動中,容器系統(tǒng)的android service同樣會注冊到binder驅(qū)動中的,那么問題來了,相同的實名binder服務(wù)名只能注冊一次,容器系統(tǒng)注冊相同名稱的binder服務(wù)會產(chǎn)生沖突。binder驅(qū)動是一個字符設(shè)備,所以binder驅(qū)動虛擬化就是重新構(gòu)造binder的數(shù)據(jù)結(jié)構(gòu),讓容器系統(tǒng)能在binder驅(qū)動中有其獨立的數(shù)據(jù)結(jié)構(gòu),這個驅(qū)動的源碼,在哥大的DEMO中是有的,有興趣的可以參考。此外binder驅(qū)動的虛擬化還要實現(xiàn)一個很重要的功能,就是容器之間能互相訪問對方的android service,這樣后續(xù)很多設(shè)備的虛擬化就可以在此基礎(chǔ)上實現(xiàn)。

display虛擬化:

顯示的虛擬化要利用容器系統(tǒng)間能互相訪問service才能實現(xiàn),主系統(tǒng)運行surfaceflinger,容器系統(tǒng)不運行surfaceflinger,而是通過binder驅(qū)動訪問主系統(tǒng)的surfaceflinger,當然surfaceflinger的代碼也得調(diào)整,讓主系統(tǒng)和容器系統(tǒng)的surface互相不干涉。這個驅(qū)動的虛擬化,在哥大的demo中也有實現(xiàn),不過哥大的demo是在android4.4的基礎(chǔ)上實現(xiàn)的,當時android源碼中還沒有ion這個驅(qū)動,android5.0以后有了ion這個驅(qū)動以后,哥大的display虛擬化方式是無效的,有興趣的可以看一看,它在內(nèi)核中實現(xiàn),簡單過程如下:
1、display虛擬化的重點在于,非當前系統(tǒng)也需要實時更新畫面,不能簡單粗暴的進行阻截,只是這個非當前系統(tǒng)的畫面要隱藏起來,不能投射到屏幕中。
2、當非當前系統(tǒng)使用mmap映射顯存時需要映射的是內(nèi)存,將所有像素數(shù)據(jù)保存在內(nèi)存中。
3、當發(fā)生系統(tǒng)切換時,就可以將內(nèi)存中的像素數(shù)據(jù)復(fù)制到顯存當中。

input虛擬化:

觸摸屏的虛擬化,哥大的demo也有,非常精良可以看看,主要思路就是:阻截非當前系統(tǒng)的event事件上報,同時需要注意系統(tǒng)切換時容易造成“留點”問題。

網(wǎng)絡(luò)的虛擬化:

網(wǎng)絡(luò)的虛擬化有兩塊,一個是wifi的,另一個則是數(shù)據(jù)流量的,但是二者實現(xiàn)原理都是一樣的,有三種虛擬化方式:
1、容器系統(tǒng)不隔離網(wǎng)絡(luò)namespace,所有容器系統(tǒng)和主系統(tǒng)共享七層網(wǎng)絡(luò),但會有很多問題需要解決,同時也不太安全,或者叫不太敢用,如local socket 不能同名、netlink socket ID不能相同等。
2、網(wǎng)絡(luò)設(shè)備運行在主系統(tǒng)中,利用veth網(wǎng)絡(luò)設(shè)備聯(lián)通容器系統(tǒng)和主系統(tǒng),而在第三層網(wǎng)絡(luò)中實現(xiàn)路由轉(zhuǎn)發(fā),這種方式與android原框架融合性比較好。
3、網(wǎng)絡(luò)設(shè)備運行在主系統(tǒng)中,利用veth網(wǎng)絡(luò)設(shè)備聯(lián)通容器系統(tǒng)和主系統(tǒng),而在第二層網(wǎng)絡(luò)中實現(xiàn)橋接,這種方式不適合wlan,因為wifi只有p2p模式和熱點模式,不能進行橋接,數(shù)據(jù)流量是可以的。


好了,到此一個運行于手機中的容器android基本就能跑起來了,其實只要實現(xiàn)binder的虛擬化和display的虛擬化就能跑起來了!

基本命令

搜索可用的鏡像 FarleydeMacBook-Air:~ Farley$ docker search tutorial下載容器鏡像 docker pull learn/tutorial在docker容器中運行 docker run learn/tutorial echo "hello"在容器中安裝新的程序 docker run learn/tutorial apt-get install -y ping保存對容器的修改 FarleydeMacBook-Air:~ Farley$ docker ps -l運行docker commit,可以查看該命令的參數(shù)列表。 FarleydeMacBook-Air:~ Farley$ docker commit 然后把這個鏡像保存為learn/ping。 docker commit 58e8 learn/ping運行新的鏡像 docker run learn/ping ping www.baidu.com發(fā)布docker鏡像 docker images命令 可以列出所有安裝過的鏡像。 docker push命令 可以將某一個鏡像發(fā)布到官方網(wǎng)站。

GitHub:https://github.com/Pangu-Immortal


總結(jié)

以上是生活随笔為你收集整理的Android基于Docker容器的双系统多开实现和自动化部署的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。