亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于國(guó)產(chǎn)操作系統(tǒng)獨(dú)立GUI應(yīng)用研究①

        2021-10-11 06:46:28趙正旭張慶海
        關(guān)鍵詞:函數(shù)庫(kù)圖形界面鏡像

        趙正旭,徐 棚,張慶海

        1(青島理工大學(xué) 機(jī)械與汽車(chē)工程學(xué)院,青島 266525)

        2(石家莊鐵道大學(xué) 信息科學(xué)與技術(shù)學(xué)院,石家莊 050043)

        基于Linux 內(nèi)核的國(guó)產(chǎn)操作系統(tǒng)發(fā)行版眾多,卻沒(méi)有一款操作系統(tǒng)完全取代微軟桌面系統(tǒng).根本原因是國(guó)產(chǎn)操作系統(tǒng)的軟件生態(tài)資源匱乏,軟件種類(lèi)不全面,數(shù)量不充足導(dǎo)致[1].為擴(kuò)大國(guó)產(chǎn)操作系統(tǒng)的應(yīng)用軟件資源,文獻(xiàn)[1-3]介紹了在國(guó)產(chǎn)操作系統(tǒng)NeoKylin環(huán)境中部署第三方開(kāi)源軟件的傳統(tǒng)方法.但是由于Linux 操作系統(tǒng)中開(kāi)源軟件依賴問(wèn)題,大部分開(kāi)源軟件無(wú)法通過(guò)傳統(tǒng)的軟件部署方法安裝,因此軟件依賴問(wèn)題是主要關(guān)注點(diǎn).

        開(kāi)源軟件依賴關(guān)系的問(wèn)題來(lái)源于操作系統(tǒng)中的函數(shù)庫(kù)文件.函數(shù)庫(kù)是為實(shí)現(xiàn)某種特定功能而編譯好的代碼或數(shù)據(jù),以文件的形式存在操作系統(tǒng)上,是操作系統(tǒng)的重要組成部分.Windows 或Linux 操作系統(tǒng)中有著大量的函數(shù)庫(kù)文件,函數(shù)庫(kù)被應(yīng)用程序調(diào)用,應(yīng)用軟件的運(yùn)行要依賴很多函數(shù)庫(kù)文件[4].

        Windows 作為商業(yè)系統(tǒng)其基礎(chǔ)函數(shù)庫(kù)相對(duì)固定,第三方軟件在此環(huán)境中開(kāi)發(fā),部署過(guò)程中不會(huì)有問(wèn)題.Linux 系統(tǒng)庫(kù)函數(shù)文件分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù).靜態(tài)庫(kù)在軟件開(kāi)發(fā)過(guò)程中會(huì)被包含在生成的二進(jìn)制文件中.共享庫(kù)在程序編譯時(shí)指定,程序運(yùn)行時(shí)調(diào)用,不被包含在軟件的二進(jìn)制文件中.而且開(kāi)源平臺(tái)上的軟件一般依賴第三方函數(shù)庫(kù)開(kāi)發(fā),從而形成軟件依賴關(guān)系.所以在國(guó)產(chǎn)操作系統(tǒng)中部署第三方軟件時(shí)會(huì)出現(xiàn)找不到依賴函數(shù)庫(kù)的問(wèn)題[5].

        隨著容器技術(shù)的發(fā)展,docker 容器技術(shù)能夠解決軟件依賴問(wèn)題,但其主要被用來(lái)運(yùn)行字符界面程序.針對(duì)GUI 應(yīng)用程序但不僅限于第三方GUI 應(yīng)用程序,本文的主要工作是:(1)分析GUI 應(yīng)用程序并將其部署在docker 鏡像內(nèi);(2)配置docker 容器與主機(jī)共享Linux系統(tǒng)圖形界面服務(wù),并根據(jù)GUI 應(yīng)用程序?qū)τ布Y源的要求,配置容器與主機(jī)共享顯卡等驅(qū)動(dòng)程序.

        1 相關(guān)背景

        1.1 國(guó)產(chǎn)操作系統(tǒng)

        在眾多國(guó)產(chǎn)操作系統(tǒng)中,以具有代表性的NeoKylin(中標(biāo)麒麟) 操作系統(tǒng)為例,基于Linux 內(nèi)核開(kāi)發(fā),是2010年國(guó)家核高基項(xiàng)目重點(diǎn)扶持的基礎(chǔ)軟件之一.當(dāng)前該桌面系統(tǒng)最新版本為V7.0,采用Linux 3.10 內(nèi)核.針對(duì)x86和國(guó)產(chǎn)CPU 平臺(tái)自主開(kāi)發(fā),打造具有安全可靠和自主可控等特性的國(guó)產(chǎn)操作系統(tǒng).NeoKylin 桌面版操作系統(tǒng)獨(dú)特的界面設(shè)計(jì)使其操作簡(jiǎn)單方便,系統(tǒng)內(nèi)置滿足日常辦公的應(yīng)用軟件[6].但是官方提供的應(yīng)用軟件資源,無(wú)法滿足用戶的日常需求.在NeoKylin 上安裝其他Linux 發(fā)行版的軟件,通常會(huì)因?yàn)檐浖蕾噯?wèn)題,無(wú)法安裝運(yùn)行.應(yīng)用軟件資源匱乏,嚴(yán)重制約國(guó)產(chǎn)操作系統(tǒng)的發(fā)展.

        1.2 容器技術(shù)

        容器技術(shù)(Linux container)中的容器通常被理解為集裝箱,它把應(yīng)用程序及程序運(yùn)行的環(huán)境封裝在容器內(nèi)部,實(shí)現(xiàn)應(yīng)用程序在容器中運(yùn)行[7].在容器的發(fā)展當(dāng)中,docker 容器發(fā)展較快其技術(shù)也相當(dāng)成熟,被視為容器的代表[8].Docker 容器支持應(yīng)用打包功能,把應(yīng)用程序運(yùn)行需要的依賴程序和庫(kù)打包在鏡像中,應(yīng)用程序就能夠在docker 容器中穩(wěn)定的執(zhí)行程序.容器是docker 運(yùn)行鏡像后產(chǎn)生的實(shí)體,容器被創(chuàng)建后可以執(zhí)行暫停和銷(xiāo)毀等操作.容器可看作宿主機(jī)上的進(jìn)程,某一個(gè)容器出現(xiàn)宕機(jī)問(wèn)題不會(huì)影響其他容器的正常運(yùn)行.雖然容器之間相互隔離,但是無(wú)論在同一臺(tái)宿主機(jī)還是在不同宿主機(jī)上的容器可以通過(guò)IP 地址或者link機(jī)制等其他方式實(shí)現(xiàn)容器之間的相互通信[9].Docker運(yùn)行架構(gòu)如圖1所示.

        圖1 Docker 容器架構(gòu)

        封裝后的鏡像可以放在任意docker的主機(jī)上運(yùn)行,docker 利用鏡像創(chuàng)建容器從而使用容器里的應(yīng)用程序,而容器內(nèi)部應(yīng)用程序運(yùn)行完全不依賴主機(jī)的運(yùn)行環(huán)境.封裝后的鏡像可以放在任意安裝docker的主機(jī)上運(yùn)行,docker 利用鏡像創(chuàng)建容器從而使用容器里的應(yīng)用程序[10].所以對(duì)于應(yīng)用程序,使用容器技術(shù)部署應(yīng)用軟件比傳統(tǒng)軟件部署方式更有實(shí)際意義.

        1.3 X11

        X11是X 協(xié)議的第11 個(gè)版本,也叫做X Window System,是一種以位圖顯示的網(wǎng)絡(luò)透明化窗口系統(tǒng)[11].X11 標(biāo)準(zhǔn)是開(kāi)發(fā)可攜性圖形界面的工業(yè)軟件標(biāo)準(zhǔn),它有一個(gè)重要的特性是與設(shè)備無(wú)關(guān)結(jié)構(gòu),任何支持X11協(xié)議的硬件,就能執(zhí)行應(yīng)用程序,顯示圖形界面窗口,這種特性使得根據(jù)X11 標(biāo)準(zhǔn)開(kāi)發(fā)的應(yīng)用程序,可運(yùn)行在不同環(huán)境下(個(gè)人電腦、大型計(jì)算機(jī))[12].

        X11是Linux 圖形界面環(huán)境的基礎(chǔ),Linux 本質(zhì)是命令行操作系統(tǒng),而X11 作為應(yīng)用程序運(yùn)行在Linux操作系統(tǒng)的應(yīng)用層,為操作系統(tǒng)提供圖形界面顯示服務(wù).X11 基于C/S 架構(gòu)如圖2所示,包括X server、X client和X protocol.X client是客戶端是運(yùn)行在Linux 系統(tǒng)上的應(yīng)用程序,X server是服務(wù)端,運(yùn)行在顯示設(shè)備主機(jī)上,X protocol是客戶端和服務(wù)端的通信協(xié)議.

        圖2 X11 架構(gòu)

        1.4 Equalizer

        Equalizer 一個(gè)成熟的并行渲染框架,它提供了大量的特性、算法和系統(tǒng)集成廣泛的現(xiàn)實(shí)世界研究和工業(yè)應(yīng)用[13].Equalizer 提供編譯運(yùn)行方式的Linux 系統(tǒng)有Ubuntu 16.04和RHEL 6.8[14],要編譯運(yùn)行Equalizer需要安裝大量的軟件依賴庫(kù),NeoKylin 雖然基于Linux操作系統(tǒng),但官方提供的軟件完全不足以編譯運(yùn)行Equalizer.NeoKylin 使用三方軟件,配置Equalizer 編譯運(yùn)行環(huán)境,需要進(jìn)行復(fù)雜的工作,第三方軟件還可能與系統(tǒng)自帶軟件沖突導(dǎo)致系統(tǒng)崩潰.Equalizer作為渲染框架,在NeoKylin 操作系統(tǒng)需要Linux 圖形界面服務(wù)X11的支持,對(duì)軟件運(yùn)行環(huán)境的穩(wěn)定性要求較高,并且需要使用GPU 等硬件.因此以Equalizer為目標(biāo)對(duì)象,進(jìn)行獨(dú)立GUI 應(yīng)用的實(shí)驗(yàn)論證.

        2 系統(tǒng)整體方案

        2.1 獨(dú)立應(yīng)用設(shè)計(jì)

        Docker 鏡像是容器運(yùn)行的實(shí)例,鏡像為容器提供文件系統(tǒng)資源.Docker 鏡像都是由基礎(chǔ)鏡像制作而成,而基礎(chǔ)鏡像是一般都是Linux 發(fā)行版的docker 鏡像,例如Ubunut、Fedora 等.

        Linux 操作系統(tǒng)由內(nèi)核空間和用戶空間組成.內(nèi)核空間是kernel,Linux 操作系統(tǒng)啟動(dòng)時(shí)會(huì)加載bootfs 文件系統(tǒng),bootfs 引導(dǎo)kernel 加載完成后就被卸載掉.Rootfs是用戶空間的文件系統(tǒng),rootfs 通常包含的是操作系統(tǒng)運(yùn)行所需的文件系統(tǒng)如/dev、/proc、/bin 等標(biāo)準(zhǔn)目錄.對(duì)于不同的Linux 發(fā)行版,其bootfs 基本一致,rootfs不同.

        Docker 鏡像采用分層的方式構(gòu)建,每一個(gè)鏡像都是由一層一層union 文件系統(tǒng)疊加組成.Docker的基礎(chǔ)鏡像的文件系統(tǒng)分為bootfs和rootfs 兩層,最底端是引導(dǎo)文件系統(tǒng)bootfs,在bootfs 之上的一層是rootfs.Docker 架構(gòu)下,沿用Linux 中rootfs 思想.當(dāng)docker daemon為docker 容器掛載rootfs的時(shí)候,與傳統(tǒng)Linux內(nèi)核類(lèi)似,將其設(shè)定為只讀模式.在rootfs 掛載完畢后,與Linux 內(nèi)核不同的是,docker daemon 沒(méi)有將docker容器的文件系統(tǒng)設(shè)為讀寫(xiě)模式,而是利用union mount的技術(shù),在這個(gè)只讀的rootfs 之上再掛載一個(gè)讀寫(xiě)的文件系統(tǒng),掛載時(shí)該讀寫(xiě)文件系統(tǒng)內(nèi)空無(wú)一物.可以把docker 基礎(chǔ)鏡像創(chuàng)建容器的文件系統(tǒng)理解為:只含只讀的rootfs和可讀寫(xiě)的文件系統(tǒng).

        容器與主機(jī)共享kernel,擁有獨(dú)立的rootfs,包含一個(gè)操作系統(tǒng)所必須的庫(kù)文件及軟件管理工具,在容器內(nèi)部部署軟件與主機(jī)系統(tǒng)環(huán)境無(wú)關(guān).因此docker 容器能夠解決軟件依賴問(wèn)題.

        接下來(lái)就是制作鏡像,把軟件及相關(guān)依賴程序打包在鏡像內(nèi)部制作成獨(dú)立的軟件鏡像.Docker 制作鏡像的方法有兩種:手動(dòng)制作和dockerfile 制作.一般情況下使用dockerfile 制作鏡像,但是基礎(chǔ)鏡像只包含操作系統(tǒng)基本函數(shù)庫(kù)文件,軟件需要的一些未知三方庫(kù)無(wú)法通過(guò)管理工具安裝,只能根據(jù)錯(cuò)誤提示查找,所以先通過(guò)手動(dòng)制作鏡像,再把制作鏡像的過(guò)程寫(xiě)成dockerfile或者shell 腳本實(shí)現(xiàn)自動(dòng)制作鏡像.

        2.2 GUI 顯示設(shè)計(jì)

        國(guó)產(chǎn)操作系統(tǒng)NeoKylin 采用X11 提供圖形桌面環(huán)境,其X server 版本號(hào)為1.19.3,X server在應(yīng)用層負(fù)責(zé)接收鍵盤(pán)和鼠標(biāo)的輸入.GUI 應(yīng)用程序作為X client,包含X lib和X protocol.X lib是X client的C 語(yǔ)言接口庫(kù),封裝了X protocol,主要提供X protocol的存取能力.X server 運(yùn)行在連接顯示屏的主機(jī)上,X server接收并處理來(lái)自X client的請(qǐng)求,在屏幕上繪制圖形.

        在NeoKylin 中,X11 通過(guò)DISPLAY 環(huán)境變量指定圖形顯示的屏幕窗口.DISPLAY的格式是[unix:端口]或[主機(jī)名:端口],前者表示使用本地的unix 套接字,后者表示使用TCP 套接字.X11 服務(wù)端默認(rèn)配置是服務(wù)端監(jiān)聽(tīng)本地的[unix:0]端口,DISPLAY的默認(rèn)值為0.當(dāng)系統(tǒng)運(yùn)行GUI 程序后,程序會(huì)通過(guò)本地的Unix套接字與X server 通信,然后X server在當(dāng)前主機(jī)屏幕繪制圖形界面.

        鏡像內(nèi)部打包的GUI 應(yīng)用程序,在主機(jī)屏幕顯示圖形界面,需要實(shí)現(xiàn)GUI 應(yīng)用程序透過(guò)容器的隔離機(jī)制與主機(jī)的X server 通信.Docker 提供了一種機(jī)制,能夠?qū)崿F(xiàn)把主機(jī)上的某個(gè)目錄與容器的某個(gè)目錄(掛載點(diǎn))關(guān)聯(lián)起來(lái),容器內(nèi)掛載點(diǎn)下的文件就是主機(jī)系統(tǒng)目錄下的文件,類(lèi)似Linux 操作系統(tǒng)下的mount 機(jī)制.通過(guò)掛載文件的方式,使主機(jī)與容器共享Unix 套接字,實(shí)現(xiàn)容器內(nèi)部的應(yīng)用程序與X server 通信.

        2.3 系統(tǒng)整體架構(gòu)

        Docker 基于基礎(chǔ)鏡像打包GUI 軟件制作獨(dú)立的GUI 應(yīng)用軟件鏡像.軟件鏡像創(chuàng)建容器,該容器可以看作獨(dú)立運(yùn)行GUI 應(yīng)用程序.實(shí)際上GUI 應(yīng)用程序是在docker 容器內(nèi)運(yùn)行,因?yàn)槿萜鞯母綦x特性,GUI 應(yīng)用程序不能直接與主機(jī)上的X server 通信.主機(jī)上GUI 程序都是通過(guò)套接字實(shí)現(xiàn)與X server 互傳信息,所以利用docker 文件掛載機(jī)制把主機(jī)上的套接字文件掛載到容器內(nèi)部,實(shí)現(xiàn)主機(jī)和容器共享套接字.容器內(nèi)部的第三方GUI 應(yīng)用程序作為X client,通過(guò)套接字與主機(jī)的X server 通信,X server 把GUI 應(yīng)用程序的圖形界面繪制在屏幕上.最終實(shí)現(xiàn)GUI 應(yīng)用軟件在國(guó)產(chǎn)操作系統(tǒng)環(huán)境中運(yùn)行.系統(tǒng)的整體架構(gòu)如圖3所示.

        圖3 系統(tǒng)整體架構(gòu)

        3 系統(tǒng)實(shí)現(xiàn)

        3.1 封裝獨(dú)立GUI 應(yīng)用

        Equalizer是開(kāi)源渲染框架,在Github 上公布的源碼,提供了Linux、Mac OS和Windows 三種編譯方式.本文利用docker 容器做封裝工具,選擇Linux 發(fā)行版Ubuntu16.04 系統(tǒng)鏡像,把Equalizer 編譯并封裝在鏡像中.獨(dú)立的應(yīng)用程序(應(yīng)用程序和程序運(yùn)行環(huán)境)占用計(jì)算機(jī)的存儲(chǔ)空間,在制作鏡像時(shí)要選擇占用存儲(chǔ)空間較小的鏡像.獨(dú)立的GUI 應(yīng)用程序制作步驟如下:

        (1)以Ubuntu16.04的鏡像為基礎(chǔ)鏡像,使用docker創(chuàng)建容器.在創(chuàng)建容器時(shí)注意通過(guò)在啟動(dòng)命令中添加--gpus all 參數(shù),把配置好的Nvidia 驅(qū)動(dòng)共享給容器.

        (2)進(jìn)入容器命令行,按照官方網(wǎng)站給出的Equalizer編譯環(huán)境配置方法操作,配置Equalizer的編譯環(huán)境.

        (3)下載Equalizer 源代碼,執(zhí)行編譯命令.

        (4)進(jìn)入編譯后的/bin 文件夾執(zhí)行示例,驗(yàn)證結(jié)果.

        (5)docker commit 命令,永久保存容器,生成鏡像,方便下次使用.

        Equalizer 封裝成鏡像之后,作為獨(dú)立的GUI 應(yīng)用使用.為方便使用,鏡像創(chuàng)建容器時(shí)調(diào)用容器內(nèi)部shell腳本,執(zhí)行容器內(nèi)部的應(yīng)用程序.

        3.2 解析X11 協(xié)議

        NeoKylin 操作系統(tǒng),采用Xorg 實(shí)現(xiàn)X11 協(xié)議,Xorg提供X server 服務(wù),當(dāng)系統(tǒng)內(nèi)有程序運(yùn)行時(shí),程序會(huì)與X server 通信,X server 接收鼠標(biāo)、鍵盤(pán)的輸入和管理屏幕輸出.Docker 內(nèi)部運(yùn)行的程序要在屏幕上顯示界面,應(yīng)用程序就必須要與X server 通信.

        基于國(guó)產(chǎn)操作系統(tǒng)上GUI 應(yīng)用程序的圖形界面展示原理,采用主機(jī)與容器共享X11的Unix 套接字的方式,實(shí)現(xiàn)X client的內(nèi)容從容器內(nèi)部傳遞到主機(jī)上的X server.把主機(jī)上的套接字目錄掛載到容器內(nèi)部,實(shí)現(xiàn)主機(jī)和容器共享Unix 套接字.

        主機(jī)上套接字文件在tmp 文件夾中,將其掛載到容器內(nèi)部,-v/tmp/.X11-unix:/tmp/.X11-unix,實(shí)現(xiàn)主機(jī)和容器共享套接字目錄.啟動(dòng)程序后,底層封裝的Xlib(C 語(yǔ)言接口庫(kù))通過(guò)共享unix 套接字,傳遞信息給X server.X server 代碼運(yùn)行,main 函數(shù)進(jìn)入一個(gè)循環(huán).每次循環(huán)都包含,初始化、處理X client 信息和退出.最后X server 根據(jù)X client 發(fā)送的請(qǐng)求,在主機(jī)顯示器上繪制圖形界面.

        4 實(shí)驗(yàn)論證

        本章節(jié)主要通過(guò)具體實(shí)驗(yàn),驗(yàn)證在國(guó)產(chǎn)操作系統(tǒng)環(huán)境中方案實(shí)施的可行性.

        4.1 實(shí)驗(yàn)平臺(tái)

        實(shí)驗(yàn)平臺(tái)的計(jì)算機(jī)軟件和硬件配置信息如表1所示,主要包括:CPU、內(nèi)存、顯卡、系統(tǒng)、內(nèi)核和容器版本信息.

        表1 實(shí)驗(yàn)軟硬件環(huán)境

        4.2 實(shí)驗(yàn)環(huán)境配置

        實(shí)驗(yàn)環(huán)境配置的軟件包含:Nvidia 顯卡驅(qū)動(dòng)、docker、Nvidia-container-toolkit 工具包.

        在NeoKylin 系統(tǒng)上安裝Linux 版本的Nvidia驅(qū)動(dòng),驅(qū)動(dòng)要與顯卡型號(hào)匹配,否則會(huì)安裝失敗.在安裝之前,禁用系統(tǒng)默認(rèn)的驅(qū)動(dòng),要把系統(tǒng)運(yùn)行級(jí)別更改為文本模式.使用chmod 命令設(shè)置驅(qū)動(dòng)程序可執(zhí)行權(quán)限,再進(jìn)行安裝.

        NeoKylin 操作系統(tǒng)上安裝docker 無(wú)法直接安裝,直接下載rpm 包強(qiáng)制安裝也無(wú)法運(yùn)行,因?yàn)楣俜皆粗袥](méi)有提供安裝docker的依賴包.首先需要給NeoKylin操作系統(tǒng)換源,更換centos7的源,然后引入docker 源,直接yum 下載安裝.Linux 系統(tǒng)下,應(yīng)用程序穩(wěn)定運(yùn)行的基礎(chǔ)就是依賴庫(kù)文件齊全.Yum 安裝docker 組件docker-ce、docker-ce-cli、containerd.io 時(shí),操作系統(tǒng)僅提示安裝container-seLinux 依賴和升級(jí)libseccomp 依賴軟件.系統(tǒng)能安裝的依賴軟件是保存在文件夾的庫(kù)文件對(duì)系統(tǒng)不會(huì)有影響,重點(diǎn)關(guān)注升級(jí)的依賴.Libseccomp包為L(zhǎng)inux 內(nèi)核的系統(tǒng)調(diào)用過(guò)濾機(jī)制提供了一個(gè)易于使用且獨(dú)立于平臺(tái)的接口,根據(jù)軟件向下兼容的特性,使其版本的升級(jí)對(duì)系統(tǒng)無(wú)影響.依賴庫(kù)文件配置齊全,docker 應(yīng)用在NeoKylin 系統(tǒng)中即可穩(wěn)定運(yùn)行.

        Equalizer是一個(gè)渲染框架,需要用到Nvidia 顯卡,安裝Nvidia-container-toolkit 工具包,使docker 內(nèi)部能夠調(diào)用Nvidia 驅(qū)動(dòng)程序.安裝方法參考Nvidiadocker 網(wǎng)站提供的安裝說(shuō)明[15],網(wǎng)站并沒(méi)有提供針對(duì)NeoKylin 操作系統(tǒng)的工具包,可使用CentOS7的工具包替代.

        NeoKylin 操作系統(tǒng),Xhost 命令是X server的訪問(wèn)控制工具.在當(dāng)前桌面顯示docker 容器內(nèi)的GUI 應(yīng)用程序,需要對(duì)X server 設(shè)置,允許docker 內(nèi)部的GUI程序在顯示器上顯示.終端執(zhí)行Xhost +,授予每個(gè)用戶訪問(wèn)X server的權(quán)限.

        以上是整個(gè)實(shí)驗(yàn)環(huán)境的配置,完成以上設(shè)置后,使用docker 制作Equalizer 渲染框架的鏡像.

        4.3 制作并運(yùn)行獨(dú)立GUI 應(yīng)用

        NeoKylin 環(huán)境中制作GUI 應(yīng)用程序鏡像并運(yùn)行步驟是:(1)基于Ubuntu16.04 鏡像創(chuàng)建容器,創(chuàng)建命令中配置掛載X11的Unix 套接字,并引入顯卡驅(qū)動(dòng)程序;(2)在容器內(nèi)部安裝部署Equalizer;(3)容器內(nèi)運(yùn)行Equalizer 程序,測(cè)試啟動(dòng)是否正常;(4)主機(jī)內(nèi)執(zhí)行命令,Equalizer 鏡像創(chuàng)建容器并自動(dòng)運(yùn)行Equalizer.

        編寫(xiě)shell 腳本,自動(dòng)配置以上操作.主要包括以下4 個(gè)腳本:

        1)腳本Run.sh在主機(jī)上運(yùn)行,負(fù)責(zé)運(yùn)行ubuntu16.04鏡像創(chuàng)建容器,主要內(nèi)容如下(#后為注釋):

        -v/tmp/.X11-unix:/tmp/.X11-unix #設(shè)置主機(jī)與容器共享套接字

        -gpus all #設(shè)置容器與主機(jī)共享顯卡驅(qū)動(dòng)

        2)腳本Equalizer.sh在容器內(nèi)部運(yùn)行,負(fù)責(zé)編譯Equalizer 源碼,主要內(nèi)容如下:

        apt-get install … #安裝編譯環(huán)境

        git clone … #下載源碼

        ninja #編譯

        3)腳本Init.sh在容器內(nèi)部運(yùn)行,負(fù)責(zé)啟動(dòng)Equalizer可執(zhí)行文件,主要內(nèi)容如下:

        cd/Equalizer/build/bin/#進(jìn)入編譯后的文件目錄

        ./eqPly #執(zhí)行可執(zhí)行文件

        4)腳本EqualizerRun.sh在主機(jī)上運(yùn)行,負(fù)責(zé)啟動(dòng)容器內(nèi)部GUI 程序,主要內(nèi)容如下:

        -v/tmp/.X11-unix:/tmp/.X11-unix #設(shè)置主機(jī)與容器共享套接字

        -v/Equalizer:/Equalizer#主機(jī)與容器共享文件夾

        -e DISPLAY=unix$DISPLAY #設(shè)置主機(jī)顯示屏

        -gpus all #共享顯卡驅(qū)動(dòng)

        Docker 運(yùn)行Equalizer 框架鏡像,使用分布式渲染時(shí),容器和主機(jī)要設(shè)置IP和端口號(hào),因?yàn)榉植际戒秩臼峭ㄟ^(guò)網(wǎng)絡(luò)實(shí)現(xiàn)通信.

        4.4 實(shí)驗(yàn)結(jié)果分析

        在NeoKylin 操作系統(tǒng)中直接配置Equalizer 編譯安裝環(huán)境,由于官方源提供的軟件不足以配置Equalizer的編譯環(huán)境,所以下載相關(guān)依賴軟件源碼編譯安裝,而該軟件又依賴其他軟件,整個(gè)過(guò)程陷入一個(gè)循環(huán)之中.在安裝軟件過(guò)程中,因?yàn)榈谌揭蕾囓浖?wèn)題多次導(dǎo)致系統(tǒng)無(wú)法啟動(dòng),未能成功安裝編譯.

        Equalizer 渲染框架源碼大小100.9 MB.在容器內(nèi)配置編譯環(huán)境需要安裝的軟件及相關(guān)依賴庫(kù)共394 個(gè),需要269 MB 存儲(chǔ)空間,安裝完成使用978 MB的額外磁盤(pán)空間.源碼編譯完成后制作的鏡像為2.82 GB,導(dǎo)出鏡像包為2.68 GB.

        為測(cè)試容器內(nèi)Equalizer 程序的穩(wěn)定性,對(duì)其進(jìn)行壓力測(cè)試.使用兩個(gè)節(jié)點(diǎn)渲染,增加渲染模型的大小比較模型加載時(shí)間和渲染的幀率.實(shí)驗(yàn)數(shù)據(jù)如表2所示.

        表2 Equalizer 渲染不同模型產(chǎn)生的數(shù)據(jù)

        實(shí)驗(yàn)結(jié)果表明,在NeoKylin 環(huán)境中使用docker 容器運(yùn)行Equalizer 渲染的模型越大,加載時(shí)間越久,幀率降低.雖然總體渲染效率下降,在該環(huán)境下Equalizer不僅能夠?qū)?.4 MB的小模型進(jìn)行渲染,而且能夠渲染1.05 GB的大模型,證明其具有穩(wěn)定性,也表明在國(guó)產(chǎn)操作系統(tǒng)NeoKylin 環(huán)境中,使用docker 容器運(yùn)行GUI應(yīng)用程序的方案是可行的.

        5 總結(jié)與展望

        本文對(duì)國(guó)產(chǎn)操作系統(tǒng)環(huán)境中制作并運(yùn)行獨(dú)立GUI應(yīng)用程序進(jìn)行探索,利用容器技術(shù)初步實(shí)現(xiàn)制作獨(dú)立GUI 應(yīng)用程序在國(guó)產(chǎn)操作系統(tǒng)上運(yùn)行.結(jié)果表明在Neo-Kylin 國(guó)產(chǎn)操作系統(tǒng)上,使用docker 容器技術(shù),可以實(shí)現(xiàn)第三方GUI 應(yīng)用程序獨(dú)立運(yùn)行.文中方案給國(guó)產(chǎn)操作系統(tǒng)兼容第三方GUI 應(yīng)用程序提供新思路,使用該方案可以增加國(guó)產(chǎn)操作系統(tǒng)的應(yīng)用軟件資源.但方案中還有許多細(xì)節(jié)問(wèn)題需要研究,包括容器和主機(jī)共享文件的機(jī)制,完善容器技術(shù)或可解決國(guó)產(chǎn)操作系統(tǒng)軟件資源匱乏的問(wèn)題,有助于加快國(guó)產(chǎn)操作系統(tǒng)的發(fā)展.

        猜你喜歡
        函數(shù)庫(kù)圖形界面鏡像
        Epigallocatechin-3-gallate exerts antihypertensive effects and improves endothelial function in spontaneously hypertensive rats
        用于優(yōu)化雷達(dá)信號(hào)處理的VSIPL函數(shù)庫(kù)
        基于Python的開(kāi)源GIS應(yīng)用開(kāi)發(fā)
        鏡像
        Scratch求最值和平均值
        基于BB60C的IQ數(shù)據(jù)采集與存儲(chǔ)系統(tǒng)設(shè)計(jì)
        鏡像
        小康(2018年23期)2018-08-23 06:18:52
        用VMRun快速置備千臺(tái)虛擬機(jī)
        重看圖形界面“扁平化”與“擬物化”之爭(zhēng)——關(guān)于設(shè)計(jì)思維的探討
        鏡像
        小康(2015年4期)2015-03-31 14:57:40
        亚洲熟女乱色综合亚洲图片| 国产专区国产精品国产三级| 亚洲av无码成人精品国产| 日本无码人妻波多野结衣| 成人无码h真人在线网站| 天堂视频一区二区免费在线观看| 久久精品国产亚洲av高清三区| 久久精品夜色国产亚洲av| 欧美人与动人物牲交免费观看| av黄片免费在线观看| 国产麻豆精品传媒av在线| 久久精品黄aa片一区二区三区| 麻豆精品网站国产乱子伦| 粗一硬一长一进一爽一a视频| 人妻少妇进入猛烈时中文字幕| 48沈阳熟女高潮嗷嗷叫| 国产精品自产拍在线观看免费| 久久精品亚洲成在人线av | 亚洲欧洲成人a∨在线观看| 欧美性性性性性色大片免费的| 亚洲AV秘 无码一区二区三区| 国产91在线播放九色快色| 潮喷失禁大喷水aⅴ无码| 九九热在线视频观看这里只有精品 | 丰满少妇呻吟高潮经历| 久久永久免费视频| av免费一区在线播放| 国产内射爽爽大片| 午夜不卡av免费| 国产丝袜精品丝袜一区二区 | 国产精品一区二区日韩精品| 日韩三级一区二区三区| 国产精品无码成人午夜电影 | 夜爽8888视频在线观看| 激情五月婷婷久久综合| 精品国产a一区二区三区v| 欧美aaaaaa级午夜福利视频| 韩国女主播一区二区在线观看| 丝袜美腿亚洲综合第一页| 国产又粗又黄又爽的大片| 国产精品久久码一区二区|