• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于國(guó)產(chǎn)操作系統(tǒng)對(duì)開(kāi)源軟件編譯方法的研究與應(yīng)用

      2023-07-10 13:45:55李森劉先群

      李森 劉先群

      關(guān)鍵詞:開(kāi)源軟件;編譯安裝;軟件包構(gòu)建方法;信創(chuàng)終端;國(guó)產(chǎn)操作系統(tǒng)

      中圖法分類號(hào):TP316 文獻(xiàn)標(biāo)識(shí)碼:A

      近年來(lái),信息技術(shù)應(yīng)用創(chuàng)新(以下簡(jiǎn)稱“信創(chuàng)”)產(chǎn)業(yè)蓬勃發(fā)展。然而,在推進(jìn)信創(chuàng)工作中卻發(fā)現(xiàn)廣大用戶以國(guó)產(chǎn)軟件的生態(tài)系統(tǒng)不完善、應(yīng)用程序不豐富、缺乏相應(yīng)的軟件體系和軟件工程方法等為由而放棄使用。誠(chéng)然,目前信創(chuàng)平臺(tái)的生態(tài)產(chǎn)品不夠豐富,尚未形成以操作系統(tǒng)為核心的軟件生態(tài),部分Windows平臺(tái)常用或好用的軟件無(wú)法找到替代方案,軟件數(shù)量匱乏、功能缺少、操作體驗(yàn)差等因素也降低了用戶對(duì)信創(chuàng)終端的使用信心。

      開(kāi)源軟件,即一種版權(quán)持有人向公眾公開(kāi)軟件源代碼,并允許公眾下載、編譯的軟件。國(guó)產(chǎn)操作系統(tǒng)基于開(kāi)源Linux內(nèi)核研發(fā),開(kāi)源軟件是國(guó)產(chǎn)軟件發(fā)展的基礎(chǔ)。開(kāi)源軟件在整個(gè)軟件行業(yè)中占有重要地位,其開(kāi)發(fā)模式成為技術(shù)創(chuàng)新和推動(dòng)軟件產(chǎn)業(yè)發(fā)展的主要方式。引入主流Linux社區(qū)的開(kāi)源軟件生態(tài)能很好地增添當(dāng)下國(guó)產(chǎn)軟件生態(tài)的多樣性,豐富用戶的信創(chuàng)終端使用體驗(yàn),軟件業(yè)的發(fā)展也為國(guó)產(chǎn)操作系統(tǒng)的發(fā)展提供了基礎(chǔ)性的技術(shù)支持。

      本文通過(guò)對(duì)優(yōu)質(zhì)的開(kāi)源軟件進(jìn)行重新編譯、部署安裝,首創(chuàng)了一套基于開(kāi)源軟件在國(guó)產(chǎn)化平臺(tái)上編譯安裝的方法。該方法基于Linux與國(guó)產(chǎn)操作系統(tǒng)的特性進(jìn)行編制,采用一站化的方式對(duì)開(kāi)源軟件的二進(jìn)制包執(zhí)行軟件包構(gòu)建,降低用戶對(duì)國(guó)產(chǎn)操作系統(tǒng)的學(xué)習(xí)成本,快速上手感受豐富的開(kāi)源軟件生態(tài)。該方法能夠快速有效地豐富信創(chuàng)軟件生態(tài)產(chǎn)品,促進(jìn)信創(chuàng)軟件從“可用”到“好用”的轉(zhuǎn)變。

      1開(kāi)源軟件的編譯與運(yùn)行

      開(kāi)源軟件在Linux系統(tǒng)上的運(yùn)行離不開(kāi)編譯,用戶自行按照軟件作者提供的編譯指引將軟件的源碼包編譯為二進(jìn)制包,從而完成編譯到運(yùn)行。國(guó)產(chǎn)操作系統(tǒng)在開(kāi)源Linux內(nèi)核的基礎(chǔ)上進(jìn)行研發(fā),繼而可從Linux上的編譯方法引申出國(guó)產(chǎn)操作系統(tǒng)上的編譯方法。下文將介紹開(kāi)源軟件中的源碼包與二進(jìn)制包關(guān)系以及3種主流編程語(yǔ)言的編譯方法,為后續(xù)軟件包部署方法打下基礎(chǔ)。

      1.1源碼包與二進(jìn)制包

      源碼包就是一大堆源代碼程序,是由程序員按照特定的格式和語(yǔ)法編寫出來(lái)的。計(jì)算機(jī)只能識(shí)別機(jī)器語(yǔ)言,即二進(jìn)制語(yǔ)言,所以源碼包的安裝需要一名“翻譯官”將“abcd”翻譯成二進(jìn)制語(yǔ)言,這名“翻譯官”通常被稱為編譯器。常規(guī)的開(kāi)源軟件發(fā)行版中的源碼包文件名都帶有src,并且是gz等壓縮包格式。

      所謂二進(jìn)制包,是指源碼包經(jīng)過(guò)成功編譯成二進(jìn)制字節(jié)碼之后產(chǎn)生的文件集。只需下載和解包(安裝)它們之后,就可立即使用。軟件包的內(nèi)容是01二進(jìn)制代碼(通常以16進(jìn)制顯示),即這些文件是計(jì)算機(jī)能直接識(shí)別的(計(jì)算機(jī)只能識(shí)別處理01二進(jìn)制)。

      各種開(kāi)發(fā)語(yǔ)言的編譯器或者解釋器都無(wú)法做到同源異構(gòu),但是二進(jìn)制包能夠做到一處編譯各處運(yùn)行。二進(jìn)制包通過(guò)編譯完成后的可執(zhí)行文件運(yùn)行,開(kāi)源作者一般提供的二進(jìn)制包后綴為tar.gz,tgz等,有時(shí)會(huì)帶有版本號(hào)、適應(yīng)平臺(tái)、適應(yīng)的硬件類型等,例如eclipse-jee-2022-03-R-linux-gtk-aarch64.tar.gz。

      而二進(jìn)制包的表現(xiàn)形式有2種,1種是上文提到的gz后綴的壓縮包形式,另1種則是基于前種形式構(gòu)建而成的軟件包形式,例如rpm和dpkg。

      1.2不同開(kāi)發(fā)語(yǔ)言的編譯方式

      1.2.1 Java

      通常而言,在開(kāi)發(fā)Java應(yīng)用時(shí),先使用Java編譯器把Java源代碼(.java)文件編譯為字節(jié)代碼(.class文件),可以說(shuō)Java程序是由若干個(gè).class文件組成的。因此,從源碼包到可運(yùn)行JAR包,其實(shí)就已經(jīng)完成了編譯過(guò)程。

      以下為開(kāi)源軟件創(chuàng)建可運(yùn)行JAR文件包的幾種常見(jiàn)的方式。

      (1)使用IDE(集成開(kāi)發(fā)環(huán)境)進(jìn)行創(chuàng)建。Java語(yǔ)言知名的IDE均內(nèi)置了創(chuàng)建可運(yùn)行JAR文件包的功能,例如Eclipse,IntelliJ IDEA等。

      (2)使用MVN命令進(jìn)行構(gòu)建。當(dāng)下較多的Java開(kāi)源項(xiàng)目都使用了Maven這個(gè)跨平臺(tái)的項(xiàng)目管理工具,Maven項(xiàng)目的標(biāo)志性在于根目錄下會(huì)存放1個(gè)pom.xml文件。

      (3)使用開(kāi)發(fā)者文檔中推薦的創(chuàng)建方式。有些開(kāi)發(fā)者會(huì)有符合自己開(kāi)發(fā)習(xí)慣的創(chuàng)建方法,建議參照?qǐng)?zhí)行。

      (4)也可使用命令jar cvfm test.jar manifest.mf test構(gòu)建,manifest.mf即為Java程序的一種配置文件。不過(guò),這種方式較為煩瑣,不推薦使用。

      1.2.2 Python

      使用Python語(yǔ)言開(kāi)發(fā)的開(kāi)源軟件,其編譯安裝的核心在于Python環(huán)境的搭建,而Java,Python軟件的依賴包均需要手動(dòng)安裝。部分Python開(kāi)源軟件也會(huì)提供一個(gè)requirements.txt來(lái)指導(dǎo)用戶安裝所需的依賴包。由于其開(kāi)發(fā)規(guī)則與用途的多元性,導(dǎo)致編譯安裝方式繁多。但也存在較多的Python開(kāi)源項(xiàng)目源碼包中配置好了可直接運(yùn)行的主方法或可執(zhí)行文件,一般在源碼包的根目錄下。當(dāng)然,這種形式并非完全不需要編譯安裝,運(yùn)行時(shí)還是會(huì)受到依賴缺失或沖突的影響報(bào)錯(cuò)。不過(guò),這種方式可以配合Pylnstaller工具,實(shí)現(xiàn)重編譯輕安裝,幾乎無(wú)需將編譯安裝留給用戶。

      Pylnstaller主要的功能是將.py文件打包為二進(jìn)制字節(jié)碼的可執(zhí)行文件,只要編譯安裝的環(huán)境依賴正常并能成功執(zhí)行Python開(kāi)源軟件,那么使用該工具生成的可執(zhí)行文件則能做到處處運(yùn)行,無(wú)需額外安裝依賴。Pylnstaller推薦使用將所有相關(guān)文件打包成一個(gè)可執(zhí)行文件的方式,命令參考如下:

      pyinstaller-F目標(biāo)文件.py

      1.2.3 C/C++

      使用C/C++開(kāi)發(fā)的開(kāi)源軟件,不僅需要C/C++依賴環(huán)境的搭建,還需根據(jù)軟件作者的指引進(jìn)行編譯。C/C++開(kāi)源軟件最基本的編譯安裝方法就是使用Makefile,軟件作者通常會(huì)自己編寫一份Makefile來(lái)指導(dǎo)make的編譯,在軟件根目錄輸入以下基本的編譯命令即可:

      ./configure&&make

      #注意這些命令大多需要獲取root權(quán)限

      在./configure那一步就會(huì)告知環(huán)境里是否缺少必要依賴,若依賴滿足,執(zhí)行make后通常會(huì)在軟件根目錄下生成對(duì)應(yīng)的二進(jìn)制可執(zhí)行文件。這一整個(gè)過(guò)程就相當(dāng)于從源碼包到二進(jìn)制包的轉(zhuǎn)換。

      目前主流的編譯工具基于make,但是需要安裝不同的依賴,執(zhí)行命令和方式也有所改變,本文主要介紹qmake和cmake。

      (1)qmake需要完整的安裝qtbase系列的依賴包,使用qmake編譯的軟件通常其作者會(huì)有特別說(shuō)明,或者是查看軟件根目錄中是否存在.pro后綴的文件。大致的編譯流程命令如下(根據(jù)軟件的不同可能會(huì)有所變化):

      qmake該軟件的.pro&&make

      (2) cmake需要安裝cmake軟件包。同qmake,可以通過(guò)查看軟件根目錄中是否存在CMakeLists.txt的文件來(lái)識(shí)別是否使用cmake編譯。大致的編譯流程命令如下:

      mkdir build&&cd build

      cmake..

      之后編譯安裝生成的二進(jìn)制可執(zhí)行文件以及相關(guān)文件都會(huì)在build目錄下。

      2開(kāi)源軟件打包方法設(shè)計(jì)與實(shí)現(xiàn)

      基于Debian

      Linux的軟件包構(gòu)建(打包)方法本質(zhì)上就是將二進(jìn)制包構(gòu)建成軟件包,方便用戶安裝和使用。上文已闡述了Java,Python和C/C++這3種常見(jiàn)開(kāi)發(fā)語(yǔ)言編譯生成二進(jìn)制包的方法,然而不同語(yǔ)言編譯生成的二進(jìn)制包,該如何構(gòu)建并方便用戶安裝和使用的軟件包?下文通過(guò)對(duì)Debian Linux以及國(guó)產(chǎn)操作系統(tǒng)的打包方法進(jìn)行分析之后,設(shè)計(jì)并實(shí)現(xiàn)了一套通用的打包方法。

      2.1軟件包部署方式

      國(guó)產(chǎn)操作系統(tǒng)其軟件部署方式也是源于Linux平臺(tái)下的軟件部署方式。該方式主要通過(guò)軟件包管理系統(tǒng)來(lái)實(shí)現(xiàn),具有代表性的2類包管理系統(tǒng)為rpm(RedHat Package Manager)和dpkg (DebianPackager)。dpkg是Debian Linux操作系統(tǒng)使用的軟件包管理系統(tǒng),其文件后綴為.deb,通過(guò)apt工具安裝,其中統(tǒng)信桌面操作系統(tǒng)、銀河麒麟桌面操作系統(tǒng)V10均是采用dpkg來(lái)進(jìn)行軟件部署。

      2.2 Debian Linux的打包方法

      (1)構(gòu)建打包目錄。

      構(gòu)建1個(gè)用于存放打包文件的臨時(shí)文件夾,文件夾命名為應(yīng)用名稱,以下是打包目錄的結(jié)構(gòu):

      DEBIAN文件夾中存放的是應(yīng)用的描述性文件,如control, rules, changelog, install, copyright。/opt/apps/com.apps.demo文件夾中存放的是應(yīng)用相關(guān)的文件。例如,子目錄entries/applications下存放的是應(yīng)用的桌面啟動(dòng)器文件(類Windows下的快捷方式),entries/icons下存放的是應(yīng)用的圖標(biāo),entries/files下存放的則是應(yīng)用的二進(jìn)制包。

      (2)修改control,rules,install等描述性文件。

      control文件記錄了軟件的相關(guān)信息,rules文件指定了軟件的安裝規(guī)則,install文件指定了軟件安裝的目的路徑。

      (3)創(chuàng)建.desktop文件(桌面啟動(dòng)器)。

      語(yǔ)法解釋如下:

      [Desktop Entry] #文件頭

      Name #英文名稱

      Comment #軟件英文注解

      Exec #軟件運(yùn)行文件絕對(duì)路徑

      Icon #圖標(biāo)名

      Terminal #是否使用終端

      Type #啟動(dòng)器類型

      Categories #應(yīng)用類型

      (4)放人源文件與圖標(biāo)文件。

      將矢量圖格式(后綴名為SVG)的圖標(biāo)文件放入打包目錄下的/us r/share/ic ons/hic olor/sc alable/apps,若是其他格式(如PNG格式),則需要放入打包目錄下的/usr/share/icons/hicolor/128×128/apps,其中128×128為圖標(biāo)文件的分辨率。

      軟件的源文件則需要解壓后,將所有文件放人打包目錄下的/opt/apps/軟件名稱/目錄。

      (5)構(gòu)建deb包并驗(yàn)證安裝。

      使用命令dpkg-deb--build“構(gòu)建的打包目錄”,來(lái)構(gòu)建deb軟件包。構(gòu)建成功后,使用sudo dpkg-i對(duì)該軟件包.deb進(jìn)行驗(yàn)證安裝,看軟件包是否可以在啟動(dòng)器上顯示圖標(biāo),正常運(yùn)行即可。

      2.3國(guó)產(chǎn)桌面操作系統(tǒng)打包方法異同

      2.3.1統(tǒng)信桌面操作系統(tǒng)V20(UOS)

      UOS的打包目錄與Debian Linux的區(qū)別主要在于根目錄中多出了1個(gè)info文件,其作用是應(yīng)用的描述文件,使用json格式,info內(nèi)容如下:

      2.3.2銀河麒麟桌面操作系統(tǒng)V20(Kylin)

      Kylin的打包方法與Debian Linux基本一致,打包目錄結(jié)構(gòu)差異不大,主要的改動(dòng)在于補(bǔ)齊了桌面啟動(dòng)器.desktop文件中的軟件中文注解,具體如下:

      [Desktop Entry]

      #文件頭

      Name #英文名稱

      Name[zh_CN] #中文名稱

      Comment #軟件英文注解

      Comment[zh_CN]#軟件中文注解

      Exec #軟件運(yùn)行文件絕對(duì)路徑

      Icon #圖標(biāo)名

      Terminal #是否使用終端

      Type #啟動(dòng)器類型

      Categories #應(yīng)用類型

      2.3.3打包方法異同分析

      由上文可知,統(tǒng)信UOS打包方法相較于Debian Linux與麒麟Kylin,最大的差異在于取消了打包目錄下的/usr/share/目錄,軟件的icons圖標(biāo)文件以及桌面啟動(dòng)器.desktop文件均放人打包目錄下的/opt/apps/軟件包名/。UOS官方的說(shuō)明為軟件包不允許直接向$ HOME目錄直接寫入文件,后期系統(tǒng)將會(huì)使用沙箱技術(shù)重新定向$ HOME,任何依賴該特性的行為都可能失效。

      統(tǒng)信UOS強(qiáng)調(diào)自己獨(dú)特的生態(tài)建立,而麒麟Kylin選擇的是擁抱Debian Linux,以尋求更廣泛的軟件適用性。

      2.4國(guó)產(chǎn)桌面操作系統(tǒng)通用打包方法設(shè)計(jì)

      (1)主要改動(dòng)點(diǎn)。

      基于國(guó)產(chǎn)操作系統(tǒng)通用打包方法的設(shè)計(jì),可以讓開(kāi)源軟件在任意的國(guó)產(chǎn)操作系統(tǒng)甚至Debian Linux上都能完成打包并正常運(yùn)行。

      首先,結(jié)合二者的差異點(diǎn),保留打包目錄下的/usr/share目錄,將桌面啟動(dòng)器文件.desktop分別放入/usr/share/applications/,/opt/apps/軟件名稱/entries/applications這2個(gè)目錄下,保證兼容兩家的桌面啟動(dòng)器規(guī)則。其次,不新增打包目錄下的info文件,實(shí)驗(yàn)中發(fā)現(xiàn)在統(tǒng)信UOS上使用DEBAIN/control文件和桌面啟動(dòng)器.desktop文件可以滿足軟件信息的描述。最后,軟件的icons文件僅放人/opt/apps/軟件名稱/entries/icons目錄,在桌面啟動(dòng)器.desktop文件中指向?qū)?yīng)圖標(biāo)即可,實(shí)驗(yàn)中發(fā)現(xiàn)這種方式在麒麟Kylin上得到了很好的表現(xiàn),圖標(biāo)可以正常展示。

      (2)打包目錄調(diào)整。

      改動(dòng)后的打包目錄如下:

      (3)一站式打包腳本設(shè)計(jì)。

      以知名的開(kāi)源性能測(cè)試工具軟件——Jmeter為例,完整的打包腳本設(shè)計(jì)如下:

      #! /bin/sh

      #包名--也是相對(duì)文件的目錄名

      dpkg-deb--build $ APPDIR

      #刪除臨時(shí)文件夾

      rm-rf $ APPDIR

      2.5打包過(guò)程與結(jié)果展示

      本次打包實(shí)驗(yàn)均在國(guó)產(chǎn)桌面整機(jī)上完成,仍以JMeter為例,具體配置信息如表1所列。

      (1)將腳本與軟件文件夾放在同級(jí)目錄下,修改軟件文件夾名稱為包名(或其他名稱與腳本內(nèi)一致即可),然后執(zhí)行腳本。具體如1所示。

      (2)打好的deb包在統(tǒng)信桌面操作系統(tǒng)V20、銀河麒麟桌面操作系統(tǒng)Vl0下均能正常安裝,軟件運(yùn)行與使用體驗(yàn)與二進(jìn)制包的原生版本一致。具體如圖2、圖3、圖4所示。

      3結(jié)束語(yǔ)

      本文對(duì)不同開(kāi)發(fā)語(yǔ)言的開(kāi)源軟件在國(guó)產(chǎn)操作系統(tǒng)上的編譯進(jìn)行了歸納分析,并對(duì)不同國(guó)產(chǎn)操作系統(tǒng)上的打包方式進(jìn)行了總結(jié)分析,得出一套通用的打包方法,填補(bǔ)了這方面的空白。經(jīng)過(guò)實(shí)驗(yàn)可以看到,同一個(gè)安裝包即可在不同的國(guó)產(chǎn)操作系統(tǒng)上完成安裝,使用體驗(yàn)良好。通過(guò)提升開(kāi)源軟件編譯安裝部署的便利性,有助于推廣信創(chuàng)生態(tài)和提升信創(chuàng)生態(tài)的用戶黏性,更能加快國(guó)產(chǎn)軟件行業(yè)的適配與發(fā)展。

      本文的不足在于沒(méi)能研究得出編譯到部署安裝的一套方法,開(kāi)源軟件的編譯過(guò)程仍需要一定的Linux知識(shí)以及編程能力。展望未來(lái),希望更多的開(kāi)源軟件能夠擁抱信創(chuàng)生態(tài),為國(guó)產(chǎn)操作系統(tǒng)進(jìn)行適配,降低用戶的使用門檻、豐富信創(chuàng)軟件生態(tài)。

      作者簡(jiǎn)介:

      李森(1981—),碩士,高級(jí)工程師,研究方向:計(jì)算機(jī)應(yīng)用與網(wǎng)絡(luò)安全。

      劉先群(1988—),本科,研究方向:軟件編程和軟件測(cè)試。

      葵青区| 林芝县| 蒲江县| 呈贡县| 天气| 江川县| 凭祥市| 休宁县| 松江区| 沙田区| 六安市| 当涂县| 积石山| 略阳县| 平罗县| 龙山县| 芮城县| 苏尼特左旗| 湄潭县| 东至县| 泊头市| 遂宁市| 金昌市| 增城市| 丰顺县| 农安县| 成都市| 郴州市| 南宁市| 安徽省| 铜鼓县| 苏尼特右旗| 清河县| 洪泽县| 桃园市| 达孜县| 河曲县| 阆中市| 红河县| 赣榆县| 昌乐县|