亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

操作系統(tǒng)的編譯方法和裝置與流程

文檔序號:12596550閱讀:477來源:國知局
操作系統(tǒng)的編譯方法和裝置與流程

本發(fā)明涉及計算機技術(shù)領(lǐng)域,尤其涉及一種操作系統(tǒng)的編譯方法和裝置。



背景技術(shù):

由于需要解決的問題越來越多,各種操作系統(tǒng)應用而生,但根據(jù)問題所在的環(huán)境不同,操作系統(tǒng)的跨平臺應用越來越廣泛,但一些操作系統(tǒng)不是支持所有的平臺,從而給操作系統(tǒng)的跨平臺應用帶來一些不便。

舉例來說,F(xiàn)edora(由全球社區(qū)愛好者構(gòu)建的面向日常應用的快速、穩(wěn)定、強大的操作系統(tǒng))社區(qū)提供的Fedora操作系統(tǒng)不支持MIPS(Microprocessor without interlocked piped stages,精簡指令集)架構(gòu),若需要在MIPS架構(gòu)上安裝Fedora操作系統(tǒng),需要下載用于建立Fedora操作系統(tǒng)的源碼數(shù)據(jù)包,源碼數(shù)據(jù)包可以為紅帽源碼包管理(Source RedHat Package Manager,簡稱SPRM)包,并對源碼數(shù)據(jù)包進行編譯得到編譯數(shù)據(jù)包,編譯數(shù)據(jù)包可以為紅帽包管理數(shù)據(jù)包(RedHat Package Manager,簡稱RPM)包;但在對各個源碼數(shù)據(jù)包進行編譯時,由于MIPS架構(gòu)的平臺不清楚各個源碼數(shù)據(jù)包之間存在單向依賴關(guān)系,不能直接對各個源碼數(shù)據(jù)包進行編譯;例如源碼數(shù)據(jù)包2依賴于源碼數(shù)據(jù)包1,則對源碼數(shù)據(jù)包2進行編譯時,需要以對源碼數(shù)據(jù)包1進行編譯得到編譯數(shù)據(jù)包1,基于安裝編譯數(shù)據(jù)包1得到的編譯環(huán)境,才可對源碼數(shù)據(jù)包2進行編譯,如果先對源碼數(shù)據(jù)包2進行編譯,則會編譯不成功;因此技術(shù)人員需要按照各個源碼數(shù)據(jù)包之間存在的單向依賴關(guān)系,對各個源碼數(shù)據(jù)包進行手動編譯。

但由于建立Fedora操作系統(tǒng)的源碼數(shù)據(jù)包的個數(shù)通常在百位數(shù)以上,因此上述單向依賴關(guān)系的信息量繁雜龐大,通過技術(shù)人員的手動編譯百位數(shù)以上的源碼數(shù)據(jù)包,基本是不現(xiàn)實的;即使通過技術(shù)人員的手動編 譯,所耗費的人力物力較大,不利于操作系統(tǒng)的跨平臺應用。



技術(shù)實現(xiàn)要素:

本發(fā)明提供一種操作系統(tǒng)的編譯方法和裝置,以實現(xiàn)在不可知源碼數(shù)據(jù)包之間存在的全部依賴關(guān)系的平臺上編譯操作系統(tǒng)的發(fā)行版,使得采用本發(fā)明提供的編譯方法編譯得到的操作系統(tǒng)的發(fā)行版可以在非Fedora開發(fā)社區(qū)官方支持的平臺上運行,擴展了操作系統(tǒng)的通用性。

第一方面,本發(fā)明提供一種操作系統(tǒng)的編譯方法,包括:

步驟一、獲取最小編譯數(shù)據(jù)包,所述最小編譯數(shù)據(jù)包用于提供所述操作系統(tǒng)編譯時所需的最小編譯環(huán)境;

步驟二、在當前平臺上,根據(jù)所述最小編譯數(shù)據(jù)包生成第一編譯環(huán)境;

步驟三、根據(jù)所述第一編譯環(huán)境在多個非基礎的源碼數(shù)據(jù)包中確定第一源碼數(shù)據(jù)包,所述第一編譯環(huán)境滿足編譯所述第一源碼數(shù)據(jù)包所需的依賴條件;

步驟四、根據(jù)所述第一編譯環(huán)境對所述第一源碼數(shù)據(jù)包進行編譯操作,得到第一編譯數(shù)據(jù)包;

步驟五、基于所述第一編譯環(huán)境安裝所述第一編譯數(shù)據(jù)包,建立第二編譯環(huán)境;

步驟六、將所述第二編譯環(huán)境作為新的第一編譯環(huán)境,執(zhí)行步驟三,直至所述多個非基礎的源碼數(shù)據(jù)包均已被編譯;

其中,所述操作系統(tǒng)的發(fā)行版所需的源碼集合由所述多個基礎的源碼數(shù)據(jù)包和所述多個非基礎的源碼數(shù)據(jù)包構(gòu)成,所述最小編譯數(shù)據(jù)包根據(jù)多個基礎的源碼數(shù)據(jù)包編譯得到。

在第一方面的第一種可能的實現(xiàn)方式中,所述根據(jù)第一編譯環(huán)境在所述多個非基礎的源碼數(shù)據(jù)包中確定第一源碼數(shù)據(jù)包,包括:

在所述多個非基礎的源碼數(shù)據(jù)包中選取任意一個未編譯的源碼數(shù)據(jù)包;

根據(jù)所述第一編譯環(huán)境,對在所述多個非基礎的源碼數(shù)據(jù)包中選取的當前源碼數(shù)據(jù)包進行解析判斷操作,得到判斷結(jié)果;

判斷是否根據(jù)當前的所述第一編譯環(huán)境對所述多個非基礎的源碼數(shù)據(jù)包中所有未編譯的源碼數(shù)據(jù)包進行過解析判斷操作,若否,則選擇任意一個未 進行過解析判斷操作的源碼數(shù)據(jù)包作為新的當前源碼數(shù)據(jù)包,返回執(zhí)行所述解析判斷操作;

將所述判斷結(jié)果為所述第一編譯環(huán)境符合編譯所述待編譯數(shù)據(jù)包所需的依賴條件的源碼數(shù)據(jù)包確定為所述第一源碼數(shù)據(jù)包。

根據(jù)第一方面的第一種可能的實現(xiàn)方式中,在第二種可能的實現(xiàn)方式,所述根據(jù)所述第一編譯環(huán)境,對在所述多個非基礎的源碼數(shù)據(jù)包中選取的當前源碼數(shù)據(jù)包進行解析判斷操作,包括:

對所述當前源碼數(shù)據(jù)包進行解析,獲得編譯所述當前源碼數(shù)據(jù)包所需要的依賴條件,所述依賴條件為編譯所述當前源碼數(shù)據(jù)包前需要預先安裝的編譯數(shù)據(jù)包的包名;

從所述第一編譯環(huán)境對應的倉庫索引中獲取所述第一編譯環(huán)境已經(jīng)安裝的編譯數(shù)據(jù)包的信息;所述倉庫索引中存儲了用于建立所述第一編譯環(huán)境的各個編譯數(shù)據(jù)包的包名

判斷所述第一編譯環(huán)境已經(jīng)安裝的編譯數(shù)據(jù)包的信息是否包含編譯所述當前源碼數(shù)據(jù)包前需要預先安裝的全部編譯數(shù)據(jù)包的包名。

根據(jù)第一方面的第二種可能的實現(xiàn)方式中,在第三種可能的實現(xiàn)方式,所述基于所述第一編譯環(huán)境安裝所述第一編譯數(shù)據(jù)包,建立第二編譯環(huán)境之后,所述編譯方法還包括:

將所述第一編譯數(shù)據(jù)包的包名添加至所述第二編譯環(huán)境對應的倉庫索引中,得到所述第二編譯環(huán)境對應的倉庫索引。

根據(jù)第一方面的第三種可能的實現(xiàn)方式中,在第四種可能的實現(xiàn)方式,在所述獲取最小編譯數(shù)據(jù)包之前,所述編譯方法還包括:

下載所述操作系統(tǒng)的發(fā)行版所需的源碼集合和預設的最小依賴規(guī)則,所述預設的最小依賴規(guī)則為能夠提供所述操作系統(tǒng)的最小編譯環(huán)境的多個基礎的源碼數(shù)據(jù)包的包名和所述多個基礎的源碼數(shù)據(jù)包的編譯順序;

從所述操作系統(tǒng)的發(fā)行版所需的源碼集合中獲取所述多個基礎的源碼數(shù)據(jù)包的包名對應的源碼數(shù)據(jù)包;

所述獲取用于提供所述操作系統(tǒng)編譯時所需的最小編譯環(huán)境的最小編譯數(shù)據(jù)包,包括:

按照所述預設的最小依賴規(guī)則,對所述多個基礎的源碼數(shù)據(jù)包中的每一 個源碼數(shù)據(jù)包依次進行編譯,得到多個所述基礎的源碼數(shù)據(jù)包對應的最小編譯數(shù)據(jù)包;

所述根據(jù)所述最小編譯數(shù)據(jù)包生成第一編譯環(huán)境,包括:

安裝所述多個基礎的源碼數(shù)據(jù)包對應的最小編譯數(shù)據(jù)包,生成所述第一編譯環(huán)境,并生成所述第一編譯環(huán)境對應的倉庫索引。

第二方面,本發(fā)明提供一種操作系統(tǒng)的編譯裝置,包括:

獲取模塊,用于獲取最小編譯數(shù)據(jù)包,所述最小編譯數(shù)據(jù)包用于提供所述操作系統(tǒng)的最小編譯環(huán)境,所述最小編譯數(shù)據(jù)包根據(jù)多個基礎的源碼數(shù)據(jù)包編譯得到;

建立模塊,用于在當前平臺上,根據(jù)所述最小編譯數(shù)據(jù)包生成第一編譯環(huán)境;

確定模塊,用于在當前平臺上,根據(jù)所述第一編譯環(huán)境在多個非基礎的源碼數(shù)據(jù)包中確定第一源碼數(shù)據(jù)包,所述第一編譯環(huán)境滿足編譯所述第一源碼數(shù)據(jù)包所需的依賴條件;

編譯模塊,用于根據(jù)所述建立模塊生成的所述第一編譯環(huán)境對所述確定模塊確定的所述第一源碼數(shù)據(jù)包進行編譯操作,得到第一編譯數(shù)據(jù)包;

所述建立模塊,還用于基于所述第一編譯環(huán)境安裝所述編譯模塊得到的第一編譯數(shù)據(jù)包,建立第二編譯環(huán)境;

所述建立模塊,還用于將所述第二編譯環(huán)境作為新的第一編譯環(huán)境,控制所述確定模塊執(zhí)行所述根據(jù)所述第一編譯環(huán)境在所述多個非基礎的源碼數(shù)據(jù)包中確定第一源碼數(shù)據(jù)包,直至所述多個非基礎的源碼數(shù)據(jù)包均已被編譯;

其中,所述操作系統(tǒng)的發(fā)行版所需的源碼集合由所述多個基礎的源碼數(shù)據(jù)包和所述多個非基礎的源碼數(shù)據(jù)包構(gòu)成,所述最小編譯數(shù)據(jù)包根據(jù)多個基礎的源碼數(shù)據(jù)包編譯得到。

在第二方面的第一種可能的實現(xiàn)方式中,所述確定模塊具體包括:

在所述多個非基礎的源碼數(shù)據(jù)包中選取任意一個未編譯的源碼數(shù)據(jù)包;

根據(jù)所述第一編譯環(huán)境,對在所述多個非基礎的源碼數(shù)據(jù)包中選取的當前源碼數(shù)據(jù)包進行解析判斷操作,得到判斷結(jié)果;

若所述當前源碼數(shù)據(jù)包對應的判斷結(jié)果為所述第一編譯環(huán)境不符合編譯 所述當前源碼數(shù)據(jù)包所需的依賴條件,則在所述多個非基礎的源碼數(shù)據(jù)包中,選擇除該當前源碼數(shù)據(jù)包以外的任意一個源碼數(shù)據(jù)包作為新的當前源碼數(shù)據(jù)包,返回執(zhí)行所述解析判斷操作;

將所述判斷結(jié)果為所述第一編譯環(huán)境符合編譯所述待編譯數(shù)據(jù)包所需的依賴條件的源碼數(shù)據(jù)包確定為所述第一源碼數(shù)據(jù)包。

根據(jù)第二方面的第一種可能的實現(xiàn)方式中,在第二種可能的實現(xiàn)方式,所述確定模塊具體用于

對所述當前源碼數(shù)據(jù)包進行解析,獲得編譯所述當前源碼數(shù)據(jù)包所需要的依賴條件,所述依賴條件為編譯所述當前源碼數(shù)據(jù)包前需要預先安裝的編譯數(shù)據(jù)包的包名;

從所述第一編譯環(huán)境對應的倉庫索引中獲取所述第一編譯環(huán)境已經(jīng)安裝的編譯數(shù)據(jù)包的信息;所述倉庫索引中存儲了用于建立所述第一編譯環(huán)境的各個編譯數(shù)據(jù)包的包名;

判斷所述第一編譯環(huán)境已經(jīng)安裝的編譯數(shù)據(jù)包的信息是否包含編譯所述當前源碼數(shù)據(jù)包前需要預先安裝的全部編譯數(shù)據(jù)包的包名。

根據(jù)第二方面的第二種可能的實現(xiàn)方式中,在第三種可能的實現(xiàn)方式,所述建立模塊還用于:

在基于所述第一編譯環(huán)境安裝所述編譯模塊得到的第一編譯數(shù)據(jù)包,建立第二編譯環(huán)境之后,將所述第一編譯數(shù)據(jù)包的包名添加至所述第二編譯環(huán)境對應的倉庫索引中,得到所述第二編譯環(huán)境對應的倉庫索引。

根據(jù)第二方面的第三種可能的實現(xiàn)方式中,在第四種可能的實現(xiàn)方式,

所述獲取模塊,還用于:

下載所述操作系統(tǒng)的發(fā)行版所需的源碼集合和預設的最小依賴規(guī)則,所述預設的最小依賴規(guī)則為能夠提供所述操作系統(tǒng)的最小編譯環(huán)境的多個基礎的源碼數(shù)據(jù)包的包名和所述多個基礎的源碼數(shù)據(jù)包的編譯順序;

從所述操作系統(tǒng)的發(fā)行版所需的源碼集合中獲取所述多個基礎的源碼數(shù)據(jù)包的包名對應的源碼數(shù)據(jù)包;

所述獲取模塊,具體用于:

按照所述預設的最小依賴規(guī)則,對所述多個基礎的源碼數(shù)據(jù)包中的每一個源碼數(shù)據(jù)包依次進行編譯,得到多個所述基礎的源碼數(shù)據(jù)包對應的最小編 譯數(shù)據(jù)包;

所述編譯模塊,還用于:

安裝所述多個基礎的源碼數(shù)據(jù)包對應的最小編譯數(shù)據(jù)包,生成第一編譯環(huán)境,并生成所述第一編譯環(huán)境對應的倉庫索引。

本發(fā)明提供的操作系統(tǒng)的編譯方法和裝置,通過利用各個源碼數(shù)據(jù)包對編譯環(huán)境的依賴條件,可基于第一編譯環(huán)境確定當前可進行編譯和安裝的源碼數(shù)據(jù)包,隨后建立新的第一編譯環(huán)境,繼續(xù)確定基于新的第一編譯環(huán)境可進行編譯和安裝的源碼數(shù)據(jù)包,以此類推自動地對各個源碼數(shù)據(jù)包進行編譯和安裝,直至多個非基礎的源碼數(shù)據(jù)包均被編譯,以完成操作系統(tǒng)的發(fā)行版所需的全部源碼數(shù)據(jù)包的編譯,從而實現(xiàn)了在不可知源碼數(shù)據(jù)包之間存在的全部依賴關(guān)系的平臺上編譯操作系統(tǒng)的發(fā)行版,由于在當前平臺上編譯得到的操作系統(tǒng)能夠在該當前平臺上安裝運行,使得采用本發(fā)明提供的編譯方法編譯得到的操作系統(tǒng)的發(fā)行版可以在非Fedora開發(fā)社區(qū)官方支持的平臺上運行,擴展了該操作系統(tǒng)的通用性。

附圖說明

圖1為本發(fā)明操作系統(tǒng)的編譯方法實施例一的流程圖;

圖2為本發(fā)明操作系統(tǒng)的編譯方法實施例二的流程圖;

圖3為本發(fā)明操作系統(tǒng)的編譯裝置實施例一的結(jié)構(gòu)圖。

具體實施方式

圖1為本發(fā)明操作系統(tǒng)的編譯方法實施例一的流程圖。如圖1所示,本實施例的執(zhí)行主體為操作系統(tǒng)的編譯裝置,該編譯裝置可采用軟件和/或硬件的方式實現(xiàn),優(yōu)選的,該編譯裝置可以集成在需要安裝操作系統(tǒng)的當前平臺上,該當前平臺可以是對編譯操作系統(tǒng)所需的多個源碼數(shù)據(jù)包之間存在的全部單向依賴關(guān)系不可知的,具體的,本實施例包括:

S101、獲取最小編譯數(shù)據(jù)包,所述最小編譯數(shù)據(jù)包用于提供所述操作系統(tǒng)編譯時所需的最小編譯環(huán)境。

S102、在當前平臺上,根據(jù)所述最小編譯數(shù)據(jù)包生成第一編譯環(huán)境。

S103、在當前平臺上,根據(jù)第一編譯環(huán)境在多個非基礎的源碼數(shù)據(jù)包中 確定第一源碼數(shù)據(jù)包。

在實際應用中,本實施例的當前平臺可以采用MIPS架構(gòu)的平臺,即需要在該MIPS架構(gòu)的平臺上編譯Fedora操作系統(tǒng)的發(fā)行版的全部源碼數(shù)據(jù)包,以生成可以在當前平臺上安裝的Fedora操作系統(tǒng)的發(fā)行版的可執(zhí)行的安裝文件,由于MIPS架構(gòu)不是Fedora開發(fā)社區(qū)官方支持的架構(gòu),因此,基于MIPS架構(gòu)的當前平臺不可知編譯Fedora操作系統(tǒng)的發(fā)行版所需的各個源碼數(shù)據(jù)包之間全部的單向依賴關(guān)系,不能直接對各個源碼數(shù)據(jù)包進行編譯;例如源碼數(shù)據(jù)包2依賴于源碼數(shù)據(jù)包1,則對源碼數(shù)據(jù)包2進行編譯時,需要以對源碼數(shù)據(jù)包1進行編譯得到編譯數(shù)據(jù)包1為編譯環(huán)境,基于安裝了編譯數(shù)據(jù)包1的編譯環(huán)境,才可對源碼數(shù)據(jù)包2進行編譯,如果先對源碼數(shù)據(jù)包2進行編譯,則會編譯不成功。

在本發(fā)明實施例中,通過S101獲取用于提供編譯所述操作系統(tǒng)的最小編譯環(huán)境的最小編譯數(shù)據(jù)包,并通過S102在當前平臺上,安裝所述最小編譯數(shù)據(jù)包生成第一編譯環(huán)境,得到所述操作系統(tǒng)的初始編譯環(huán)境。然后,通過S103根據(jù)所述第一編譯環(huán)境確定當前可進行編譯的非基礎的源碼數(shù)據(jù)包為第一源碼數(shù)據(jù)包,該第一編譯環(huán)境滿足編譯該第一源碼數(shù)據(jù)包所需的依賴條件;其中,S103獲取到的第一源碼數(shù)據(jù)包為根據(jù)第一編譯環(huán)境篩選出來的,S103所獲取的第一源碼數(shù)據(jù)包,均為其所需的編譯環(huán)境已被當前的第一編譯環(huán)境滿足的源碼數(shù)據(jù)包。也就是說,此時獲取到的第一源碼數(shù)據(jù)包必然能夠基于當前的第一編譯環(huán)境進行編譯。即S103選中的源碼數(shù)據(jù)包都能夠被成功編譯。

需要說明的是,編譯Fedora操作系統(tǒng)的發(fā)行版所需的多個源碼數(shù)據(jù)包分為多個基礎的源碼數(shù)據(jù)包和多個非基礎的源碼數(shù)據(jù)包,即多個基礎的源碼數(shù)據(jù)包和多個非基礎的源碼數(shù)據(jù)包構(gòu)成了操作系統(tǒng)編譯時所需的源碼集合。S101中的最小編譯數(shù)據(jù)包可以根據(jù)所述多個基礎的源碼數(shù)據(jù)包編譯得到??蛇x的,所述多個基礎的源碼數(shù)據(jù)包的包名可以由Federa開發(fā)社區(qū)提供,根據(jù)所述多個基礎的源碼數(shù)據(jù)包編譯得到的編譯數(shù)據(jù)包,能夠提供編譯系統(tǒng)需要的最小編譯環(huán)境。

還需要說明的是,本發(fā)明實施例的方法也可以應用于其他非Federa開發(fā)社區(qū)官方支持的平臺。

S104、根據(jù)所述第一編譯環(huán)境對所述第一源碼數(shù)據(jù)包進行編譯操作,得到第一編譯數(shù)據(jù)包。

上述第一源碼數(shù)據(jù)包為當前待操作的源碼數(shù)據(jù)包,當對該待操作的源碼數(shù)據(jù)包進行編譯操作后,得到的編譯數(shù)據(jù)包即為第一編譯數(shù)據(jù)包。

S105、基于所述第一編譯環(huán)境安裝所述第一編譯數(shù)據(jù)包,建立第二編譯環(huán)境。

其中,所述第二編譯環(huán)境包括所述第一編譯環(huán)境和安裝所述第一編譯數(shù)據(jù)包生成的編譯環(huán)境,例如,可以設置安裝第一編譯數(shù)據(jù)包輸出的編譯環(huán)境的目錄指向第一編譯環(huán)境的存儲目錄。

S106、判斷所述多個非基礎的源碼數(shù)據(jù)包是否全部被編譯,若否,執(zhí)行S107,若是,S108。

S107、將第二編譯環(huán)境作為新的第一編譯環(huán)境,返回執(zhí)行S103。

S108、結(jié)束編譯。

舉例來說,在T1時刻,S101中的第一編譯環(huán)境是通過安裝RPM1~RPM80建立的,當通過S102~S103安裝了RPM81,建立的了第二編譯環(huán)境,即該第二編譯環(huán)境是通過安裝RPM1~RPM81得到的,此時源碼集合中還剩余SRPM82~SRPM300,而建立Fedora操作系統(tǒng)需要將全部的源碼數(shù)據(jù)包進行編譯、安裝,因此在T2時刻,將第二編譯環(huán)境作為新的第一編譯環(huán)境,返回執(zhí)行前述“根據(jù)所述第一編譯環(huán)境在所述多個非基礎的源碼數(shù)據(jù)包中確定第一源碼數(shù)據(jù)包”,直至所述多個非基礎的源碼數(shù)據(jù)包均已被編譯時,就完成了所述操作系統(tǒng)的發(fā)行版的編譯。

其中第一源碼數(shù)據(jù)包的“第一”為相對概念,即在每一次執(zhí)行S103時,根據(jù)當前的第一編譯環(huán)境確定的源碼數(shù)據(jù)包,即為第一源碼數(shù)據(jù)包,例如在T1時刻,根據(jù)第一編譯環(huán)境確定的第一源碼數(shù)據(jù)包為SRPM81,隨后通過S104得到RPM81,再安裝RPM81,建立了第二編譯環(huán)境;隨后在T2時刻以第二編譯環(huán)境為第一編譯環(huán)境返回執(zhí)行S103時,此時的第一編譯環(huán)境滿足編譯SRPM100和SRPM110所需的依賴條件,則此時的第一源碼數(shù)據(jù)包可以為SRPM100和SRPM110。

通過每一次S103~S106的循環(huán),利用各個源碼數(shù)據(jù)包對編譯環(huán)境的依賴條件,自動地篩選并依次對各個源碼數(shù)據(jù)包進行編譯和安裝,即在當前平臺 不可知源碼集合中多個源碼數(shù)據(jù)包之間存在的全部單向依賴關(guān)系的情況下,仍然可完成操作系統(tǒng)的發(fā)行版的編譯。

本實施例中,通過利用各個源碼數(shù)據(jù)包對編譯環(huán)境的依賴條件,可基于第一編譯環(huán)境確定當前可進行編譯和安裝的源碼數(shù)據(jù)包,隨后建立新的第一編譯環(huán)境,繼續(xù)確定基于新的第一編譯環(huán)境可進行編譯和安裝的源碼數(shù)據(jù)包,以此類推自動地對各個源碼數(shù)據(jù)包進行編譯和安裝,直至多個非基礎的源碼數(shù)據(jù)包均被編譯,以完成操作系統(tǒng)的發(fā)行版所需的全部源碼數(shù)據(jù)包的編譯,從而實現(xiàn)了在不可知源碼數(shù)據(jù)包之間存在的全部依賴關(guān)系的平臺上編譯操作系統(tǒng)的發(fā)行版,由于在當前平臺上編譯得到的操作系統(tǒng)能夠在該當前平臺上安裝運行,使得采用本發(fā)明提供的編譯方法編譯得到的操作系統(tǒng)的發(fā)行版可以在非Fedora開發(fā)社區(qū)官方支持的平臺上運行,擴展了該操作系統(tǒng)的通用性。

圖2為本發(fā)明操作系統(tǒng)的編譯方法實施例二的流程圖。如圖2所示,本實施例是在圖1所示的實施例的基礎上,做出進一步的描述,本實施例可以包括:

圖1所示的實施例中的S101可以具體采用S203,在S203之前,所述編譯方法還可以包括S201和S202:

S201、下載建立操作系統(tǒng)所需的源碼集合和預設的最小依賴規(guī)則。

以Fedora操作系統(tǒng)為例,F(xiàn)edora開發(fā)社區(qū)可以提供用于建立Fedora操作系統(tǒng)的全部源碼數(shù)據(jù)包,則建立操作系統(tǒng)的處理裝置可以訪問Fedora開發(fā)社區(qū),以下載源碼集合至當前平臺上,且對源碼數(shù)據(jù)包進行編譯時需要一個初始的編譯環(huán)境,該初始的編譯環(huán)境是通過對源碼集合中的基礎的源碼數(shù)據(jù)包(通常為80個源碼數(shù)據(jù)包)進行編譯和安裝而建立的,而上述預設的最小依賴規(guī)則即用于Fedora開發(fā)社區(qū)向操作系統(tǒng)的編譯裝置指示建立用于提供編譯所述操作系統(tǒng)的最小的編譯環(huán)境所需的多個基礎的源碼數(shù)據(jù)包和所述多個基礎的源碼數(shù)據(jù)包的編譯順序。

S202、從所述操作系統(tǒng)的發(fā)行版所需的源碼集合中獲取所述多個基礎的源碼數(shù)據(jù)包的包名對應的源碼數(shù)據(jù)包。

S203、按照所述預設的最小依賴規(guī)則,對所述多個基礎的源碼數(shù)據(jù)包中 的每一個源碼數(shù)據(jù)包依次進行編譯,得到多個基礎的源碼數(shù)據(jù)包對應的最小編譯數(shù)據(jù)包。

在實際應用中,還需要在當前平臺上搭建編譯Fedora操作系統(tǒng)的發(fā)行版所需的編譯系統(tǒng),例如,可采用科吉koji系統(tǒng),該koji系統(tǒng)用于編譯Fedora操作系統(tǒng)的發(fā)行版所需的各個源碼數(shù)據(jù)包;在koji系統(tǒng)中按照預設的最小依賴規(guī)則,對每一個基礎的源碼數(shù)據(jù)包進行編譯,得到多個基礎的源碼數(shù)據(jù)包對應的多個最小編譯數(shù)據(jù)包,并將多個基礎的源碼數(shù)據(jù)包導入至koji系統(tǒng)中,該最小編譯數(shù)據(jù)包可用于在當前平臺安裝后得到編譯所述fedora操作系統(tǒng)的發(fā)行版所需的最小編譯環(huán)境。

相應的,圖1所示的實施例中的S102可以具體采用S204,S103可以具體采用S205-S208,在S105之后可以還包括S210:

S204、安裝所述多個基礎的源碼數(shù)據(jù)包對應的最小編譯數(shù)據(jù)包,生成所述第一編譯環(huán)境,并生成所述第一編譯環(huán)境對應的倉庫索引。

當該第一編譯環(huán)境建立之后,便可自動地按照S205、S206、S207、S208、S209、S104、S105、S210、S106循環(huán),將每一個源碼數(shù)據(jù)包編譯并安裝。

具體的,在每一次S205~S106的循環(huán)中,每一個第一編譯環(huán)境都與倉庫索引相關(guān)聯(lián),所述倉庫索引中存儲了用于建立所述第一編譯環(huán)境的各個編譯數(shù)據(jù)包的包名。

在S204中建立的第一編譯環(huán)境是初始的編譯環(huán)境,則此時的倉庫索引中存儲的編譯數(shù)據(jù)包的標識,即為上述通過編譯了基礎的源碼數(shù)據(jù)包得到的各個編譯數(shù)據(jù)包的包名。

例如初始的第一編譯環(huán)境是通過安裝RPM1~RPM80建立的,則建立的初始的第一編譯環(huán)境對應的倉庫索引中存儲了RPM1~RPM80各個編譯數(shù)據(jù)包的包名;

在實際應用中,可將上述多個編譯數(shù)據(jù)包安裝在當前平臺的“/fakeroot”目錄下,并將此目錄中的源指向koji系統(tǒng)自動生成的倉庫索引的地址。

S205、在所述多個非基礎的源碼數(shù)據(jù)包中選取任意一個未編譯的源碼數(shù)據(jù)包。

S206、根據(jù)所述第一編譯環(huán)境,對在所述多個非基礎的源碼數(shù)據(jù)包中選 取的當前源碼數(shù)據(jù)包進行解析判斷操作,得到判斷結(jié)果。

S207、判斷是否根據(jù)當前的所述第一編譯環(huán)境對所述多個非基礎的源碼數(shù)據(jù)包中所有未編譯的源碼數(shù)據(jù)包進行過解析判斷操作,若否,執(zhí)行S208,若是,執(zhí)行S209。

S208、選擇任意一個未進行過解析判斷操作的源碼數(shù)據(jù)包作為新的當前源碼數(shù)據(jù)包,返回執(zhí)行S206。

S209、將所述判斷結(jié)果為所述第一編譯環(huán)境符合編譯所述待編譯數(shù)據(jù)包所需的依賴條件的源碼數(shù)據(jù)包確定為所述第一源碼數(shù)據(jù)包。

需要說明的是,在第一次執(zhí)行S206時,上述第一編譯環(huán)境即為S204中建立的第一編譯環(huán)境;隨著不斷循環(huán)執(zhí)行S205~S208,則在每一次循環(huán)中,S206中的第一編譯環(huán)境則為當前時刻之前執(zhí)行下述S209得到的第一編譯環(huán)境。

具體的,所述根據(jù)所述第一編譯環(huán)境,對在所述多個非基礎的源碼數(shù)據(jù)包中選取的當前源碼數(shù)據(jù)包進行解析判斷操作,可以包括:

對所述當前源碼數(shù)據(jù)包進行解析,獲得編譯所述當前源碼數(shù)據(jù)包所需要的依賴條件;所述依賴條件為編譯所述當前源源碼數(shù)據(jù)包前需要預先安裝的編譯數(shù)據(jù)包的包名;

從所述第一編譯環(huán)境對應的倉庫索引中獲取所述第一編譯環(huán)境已經(jīng)安裝的編譯數(shù)據(jù)包的信息;所述倉庫索引中存儲了用于建立所述第一編譯環(huán)境的各個編譯數(shù)據(jù)包的包名;

判斷所述第一編譯環(huán)境已經(jīng)安裝的編譯數(shù)據(jù)包的信息是否包含編譯所述當前源碼數(shù)據(jù)包前需要預先安裝的全部編譯數(shù)據(jù)包的包名。

在實際應用中,所述操作系統(tǒng)的發(fā)行版所需的多個非基礎的源碼數(shù)據(jù)包有對應的SPRM列表,該SRPM列表內(nèi)存儲了各個非基礎的源碼數(shù)據(jù)包的包名,在SPRM列表上選擇任意一個非基礎的源碼數(shù)據(jù)包的包名,獲取該非基礎的源碼數(shù)據(jù)包的包名對應的非基礎的源碼數(shù)據(jù)包作為當前源碼數(shù)據(jù)包,導入到當前平臺,隨后在koji系統(tǒng)下使用“rpmbuild-nobuild”分析當前源碼數(shù)據(jù)包缺失的依賴條件,其中“rpmbuild”為命令,“nobuild”為參數(shù);舉例來說,對于當前源碼數(shù)據(jù)包來說,需要一些依賴條件才可進行編譯操作,即可以對當前源碼數(shù)據(jù)包通過“rpmbuild-nobuild”分析獲知該當前 源碼數(shù)據(jù)包所缺失的依賴條件,隨后使用yum命令的resolvedep在上述yum源指向的倉庫索引中進行查找,判斷當前的倉庫索引中是否有上述依賴條件的信息,若沒有則在所述多個非基礎的SRPM包中,選擇除該當前SRPM包以外的任意一個SRPM包作為新的當前SRPM包,返回執(zhí)行S206。

可選的,在實際應用中,當選擇除該當前源碼數(shù)據(jù)包以外的任意一個非基礎的源碼數(shù)據(jù)包作為新的當前源碼數(shù)據(jù)包時,可以將在S206中導入的當前源碼數(shù)據(jù)包刪除;舉例來說,T3時刻,S203中導入了當前源碼數(shù)據(jù)包SRPM 90,通過S207判斷后需執(zhí)行S206時,可以選擇將SRPM 90從當前平臺上刪除,則當T5時刻再次將SRPM 90作為當前源碼數(shù)據(jù)包時,則在執(zhí)行S206時,再次導入SRPM 90。

還需要說明的是,在實際應用中,在第一源碼數(shù)據(jù)包的標識還需將S208中確定的第一源碼數(shù)據(jù)包對應的非基礎的源碼數(shù)據(jù)包的包名在SRPM列表中標記為已編譯。

S210、將第一編譯數(shù)據(jù)包的包名添加至所述第一編譯環(huán)境對應的倉庫索引中,得到所述第二編譯環(huán)境對應的倉庫索引。

本實施例通過S205~S210的循環(huán),將每一個非基礎的源碼數(shù)據(jù)包編譯安裝,直至所述多個非基礎的源碼數(shù)據(jù)包均被編譯,以完成操作系統(tǒng)的的發(fā)行版的編譯。

本發(fā)明實施例的其他技術(shù)方案細節(jié)與圖1所示技術(shù)方案相同。

本實施例中,通過利用各個源碼數(shù)據(jù)包對編譯環(huán)境的依賴關(guān)系,可基于第一編譯環(huán)境確定當前可進行編譯和安裝的源碼數(shù)據(jù)包,隨后建立新的第一編譯環(huán)境,繼續(xù)確定基于新的第一編譯環(huán)境可進行編譯和安裝的源碼數(shù)據(jù)包,以此類推自動地對各個源碼數(shù)據(jù)包進行編譯和安裝,直至多個非基礎的源碼數(shù)據(jù)包均被編譯,以完成操作系統(tǒng)的發(fā)行版所需的全部源碼數(shù)據(jù)包的編譯,從而實現(xiàn)了在不可知源碼數(shù)據(jù)包之間存在的全部依賴關(guān)系的平臺上編譯操作系統(tǒng)的發(fā)行版,由于在當前平臺上編譯得到的操作系統(tǒng)能夠在該當前平臺上安裝運行,使得采用本發(fā)明提供的編譯方法編譯得到的操作系統(tǒng)的發(fā)行版可以在非Fedora開發(fā)社區(qū)官方支持的平臺上運行,擴展了該操作系統(tǒng)的通用性。

圖3為本發(fā)明操作系統(tǒng)的編譯裝置實施例一的結(jié)構(gòu)圖。如圖3所示,包 括:

獲取模塊31,用于獲取最小編譯數(shù)據(jù)包,所述最小編譯數(shù)據(jù)包用于提供所述操作系統(tǒng)的最小編譯環(huán)境,所述最小編譯數(shù)據(jù)包根據(jù)多個基礎的源碼數(shù)據(jù)包編譯得到;

建立模塊32,用于在當前平臺上,根據(jù)所述最小編譯數(shù)據(jù)包生成第一編譯環(huán)境;

確定模塊33,用于在當前平臺上,根據(jù)所述第一編譯環(huán)境在所述多個非基礎的源碼數(shù)據(jù)包中確定第一源碼數(shù)據(jù)包,所述第一編譯環(huán)境滿足編譯所述第一源碼數(shù)據(jù)包所需的依賴條件;

編譯模塊34,用于根據(jù)所述建立模塊32生成的所述第一編譯環(huán)境對所述確定模塊33確定的所述第一源碼數(shù)據(jù)包進行編譯操作,得到第一編譯數(shù)據(jù)包;

所述建立模塊32,還用于基于所述第一編譯環(huán)境安裝所述編譯模塊34得到的第一編譯數(shù)據(jù)包,建立第二編譯環(huán)境;

所述建立模塊32,還用于將所述第二編譯環(huán)境作為新的第一編譯環(huán)境,控制所述確定模塊33執(zhí)行所述根據(jù)第一編譯環(huán)境在所述多個非基礎的源碼數(shù)據(jù)包中確定第一源碼數(shù)據(jù)包,直至所述多個非基礎的源碼數(shù)據(jù)包中無源碼數(shù)據(jù)包,以完成操作系統(tǒng)的建立;

其中,所述操作系統(tǒng)的發(fā)行版所需的源碼集合由所述多個基礎的源碼數(shù)據(jù)包和所述多個非基礎的源碼數(shù)據(jù)包構(gòu)成,所述最小編譯數(shù)據(jù)包根據(jù)多個基礎的源碼數(shù)據(jù)包編譯得到。

本實施例中,通過利用各個源碼數(shù)據(jù)包對編譯環(huán)境的依賴關(guān)條件,可基于第一編譯環(huán)境確定當前可進行編譯和安裝的源碼數(shù)據(jù)包,隨后建立新的第一編譯環(huán)境,繼續(xù)確定基于新的第一編譯環(huán)境可進行編譯和安裝的源碼數(shù)據(jù)包,以此類推自動地對各個源碼數(shù)據(jù)包進行編譯和安裝,直至多個非基礎的源碼數(shù)據(jù)包均被編譯,以完成操作系統(tǒng)的發(fā)行版所需的全部源碼數(shù)據(jù)包的編譯,從而實現(xiàn)了在不可知源碼數(shù)據(jù)包之間存在的全部依賴關(guān)系的平臺上編譯該操作系統(tǒng)的發(fā)行版,使得采用本發(fā)明提供的編譯方法編譯得到的操作系統(tǒng)的發(fā)行版可以在非Fedora開發(fā)社區(qū)官方支持的平臺上運行,擴展了該操作系統(tǒng)的通用性。

可選的,在圖3所示的操作系統(tǒng)的編譯裝置的基礎上,本發(fā)明實施例還提供一種操作系統(tǒng)的編譯裝置的實施方式。

在本實施例中,確定模塊33可以具體用于:

在所述多個非基礎的源碼數(shù)據(jù)包中選取任意一個未編譯的源碼數(shù)據(jù)包;

根據(jù)所述第一編譯環(huán)境,對在所述多個非基礎的源碼數(shù)據(jù)包中選取的當前源碼數(shù)據(jù)包進行解析判斷操作,得到判斷結(jié)果;

若所述當前源碼數(shù)據(jù)包對應的判斷結(jié)果為所述第一編譯環(huán)境不符合編譯所述當前源碼數(shù)據(jù)包所需的依賴條件,則在所述多個非基礎的源碼數(shù)據(jù)包中,選擇除該當前源碼數(shù)據(jù)包以外的任意一個源碼數(shù)據(jù)包作為新的當前源碼數(shù)據(jù)包,返回執(zhí)行所述解析判斷操作;

將所述判斷結(jié)果為所述第一編譯環(huán)境符合編譯所述待編譯數(shù)據(jù)包所需的依賴條件的源碼數(shù)據(jù)包確定為所述第一源碼數(shù)據(jù)包。

進一步的,確定模塊33可以具體用于:

對所述當前源碼數(shù)據(jù)包進行解析,獲得編譯所述當前源碼數(shù)據(jù)包所需要的依賴條件,所述依賴條件為編譯所述當前源源碼數(shù)據(jù)包前需要預先安裝的編譯數(shù)據(jù)包的包名;

從所述第一編譯環(huán)境對應的倉庫索引中獲取所述第一編譯環(huán)境已經(jīng)安裝的編譯數(shù)據(jù)包的信息;所述倉庫索引中存儲了用于建立所述第一編譯環(huán)境的各個編譯數(shù)據(jù)包的標識;

判斷所述第一編譯環(huán)境已經(jīng)安裝的編譯數(shù)據(jù)包的信息是否包含編譯所述當前源碼數(shù)據(jù)包前需要預先安裝的全部編譯數(shù)據(jù)包的包名。

進一步的,建立模塊32還可以用于:

在基于所述第一編譯環(huán)境安裝所述編譯模塊得到的第一編譯數(shù)據(jù)包,建立第二編譯環(huán)境之后,將所述第一編譯數(shù)據(jù)包的包名添加至所述第二編譯環(huán)境對應的倉庫索引中,得到所述第二編譯環(huán)境對應的倉庫索引。

進一步的,獲取模塊31,還可以用于:

下載所述操作系統(tǒng)的發(fā)行版所需的源碼集合和預設的最小依賴規(guī)則,所述預設的最小依賴規(guī)則為能夠提供所述操作系統(tǒng)的最小編譯環(huán)境的多個基礎的源碼數(shù)據(jù)包的包名和所述多個基礎的源碼數(shù)據(jù)包的編譯順序;

從所述操作系統(tǒng)的發(fā)行版所需的源碼集合中獲取所述多個基礎的源碼數(shù) 據(jù)包的包名對應的源碼數(shù)據(jù)包;

獲取模塊31,可以具體用于:

按照所述預設的最小依賴規(guī)則,對所述多個基礎的源碼數(shù)據(jù)包中的每一個源碼數(shù)據(jù)包依次進行編譯,得到多個所述基礎的源碼數(shù)據(jù)包對應的最小編譯數(shù)據(jù)包;

建立模塊33,還可以用于:

安裝所述多個基礎的源碼數(shù)據(jù)包對應的最小編譯數(shù)據(jù)包,生成第一編譯環(huán)境,并生成所述第一編譯環(huán)境對應的倉庫索引。

本實施例中,通過利用各個源碼數(shù)據(jù)包對編譯環(huán)境的依賴關(guān)系,可基于第一編譯環(huán)境確定當前可進行編譯和安裝的源碼數(shù)據(jù)包,隨后建立新的第一編譯環(huán)境,繼續(xù)確定基于新的第一編譯環(huán)境可進行編譯和安裝的源碼數(shù)據(jù)包,以此類推自動地對各個源碼數(shù)據(jù)包進行編譯和安裝,直至多個非基礎的源碼數(shù)據(jù)包均被編譯,以完成操作系統(tǒng)的發(fā)行版所需的全部源碼數(shù)據(jù)包的編譯,從而實現(xiàn)了在在不可知源碼數(shù)據(jù)包之間存在的全部依賴關(guān)系的平臺上編譯操作系統(tǒng)的發(fā)行版,由于在當前平臺上編譯得到的操作系統(tǒng)能夠在該當前平臺上安裝運行,使得采用本發(fā)明提供的編譯方法編譯得到的操作系統(tǒng)的發(fā)行版可以在非Fedora開發(fā)社區(qū)官方支持的平臺上運行,擴展了該操作系統(tǒng)的通用性。

本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。

最后應說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分或者全部技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1