A. 關於linux的問題 謝謝
來看一篇「hacking是藝術還是科學」的文章,由此產生了一系列的聯想。由藝術聯繫到文化是再自然不過的事,人類的歷史既是科技的發展史,也是藝術的發展史。藝術(廣義上包括文學)和科技構成了文化。而當今似乎科技被從文化中分離開來,於是我們不得不重談文化。因為同商業主導的其他產物不同, Linux更是一種文化的象徵。
第一在linux的媒體上看到馬克思的頭像覺得很可笑,但是思索一番後方才醒悟:資訊難道不是一種生產資料嗎?開源與私有,恰恰就是資訊的分配方式的區別。
件同貨幣聯系起來時,資訊的圈地運動正式開始。並在幾年的你爭我奪中拼殺下來。同社會的發展不同的是,軟體業是直接從「原始的共產」跳向「資本」形式的。以貨幣來交換軟體的確在一定的時期對經濟起到很大的促進的作用。但是卻限制了更多的人生產形式更加多樣化的軟體的能力。長遠角度看這是對發展不利的。於是,共有的分配資訊的方式又被一些人重新重視起來。
這種共有資訊的復甦代表這軟體的文藝復興,也就是文化的復興。開源的意義在於,首先是傳播文化,文化產生軟體。如同藝術中很難找到兩部及其相似油畫一樣,社區中很難找到兩部概念過分接近的軟體。這就是開源社區的精神:知識的高度分享,而且高效的利用,最大限度地避免重復浪費。
初期的開源作者也是理想主義者。同早期的無產者一樣,資訊無產者也是理想主義者。理想主義者感染理想主義者,卻拒絕了更多的實用主義者。一定程度上限制的自身的發展。Eric不是理想主義者,所以當他提出開源作為商業模式時,就同人們第一次聽到中國改革開發一樣!事實證明這種決定是正確的!不同的文化中都有優秀特點、優秀的人。優秀的特點借鑒過來,優秀的人吸引過來,文化群體才能由此而壯大!相反,如果我們不能同其他群體的人和睦相處,對這些人進行人身攻擊和冷言嘲諷,認為linux具有高高在上的優越感。這樣非但不能為我們的群體吸引更多的優秀的支持者。也會使其他的群體產生我們本身的群體數字偏低的印象。
Linux同Windows,文化於市場的差別
我個人認為Linux同Windows不存在討論技術的差別的意義。因為很難指定出一種適普的標准來衡量它們。但是,他們身上一些特點的卻十分明顯地分別體現出文化與市場的特徵:
分發機制
最初的linux用戶真正的是from scratch。因為發布的內核同各類的GNU軟體分不在網路的各個角落。包括為了擁有圖形界面,也要在安裝X之後編譯大量的其他軟體。而為上市而開發的 windows卻是一個超大的軟體包。因為要做到真正的「友好」,不可能讓用戶用一個月的時間來安裝應用軟體,何況入門用戶還根本無法安裝應用軟體。大家記得身邊有些人是花多長時間理解「添加刪除程序的」。
同樣,普及或者商業化必然就要走集成的道路。從最早期的紅帽子,到GNOME,KDE的問世。社區已經盡力提供了各種手段來促進Linux的市場和普及。當然也越來越類似windows,一些操作方式開始向windows兼容。而近年來國內一個Linux廠商的發行本將這種趨勢推至極限,因此相當的受國際社區的反感。
第三方軟體的管理機制
除了歷史遺留問題和向DOS兼容問題。一些Windows的機制我認為不是一個Linux愛好者們所說的缺陷,而是最大限度的面向市場的結果。下面一一舉例說明:
1)目錄的管理方式和注冊表
windows使用相互獨立的第三方軟體目錄組織方式,並且盡量避免不必要的軟體安裝到系統的目錄下。這樣的組織正是市場最大化的結果。由於商業競爭,封閉源代碼的原因。每個廠商在開發軟體時的命名相互之間經常產生沖突,即使是共享庫之間也互不兼容。唯一的辦法就是放在各自的目錄下。但這樣運行程序的時候的路徑又成了問題,於是目錄的方式必然導致了注冊表的誕生,讓程序員通過注冊表解決路徑問題。同樣也捎帶解決了配置文件的路徑問題,可以盡量少的避免使用配置文件了。
linux向來就沒有第三方的軟體的概念,從unix被發明時起就是這樣。所有的軟體都裝在標準的幾個目錄下,而信息的高度共享是避免沖突的最有效的方式。這種方式可以把腳本的作用發揮到極限,以我個人的觀點:同樣是腳本,對windows和linux的意義有本質的區別。二者區別的根本原因就是目錄的組織。而由於是信息的透明,如存在操作系統對第三方軟體的保密問題,也不存在沖突問題。但是,也註定起不到windows那樣的商業效果。
2)病毒的肆虐,歷史遺留和市場綜合作用的結果
我個人不同意*nix上鮮有病毒是因為用戶數量過少的說法。我認為windows上的病毒肆虐主要有兩個因素:
首先是歷史遺留問題。unix從一開始就是多用戶多人的操作系統,所以首先從一開始就要為許可權等安全問題考慮,並且制定了一套在相當長一段時期行之有效的安全機制。而DOS的目標是在一個性能十分有限的微型計算機上提供一個簡單的系統。這是十分合理的!但是卻為後來的系統設計安全機制帶來了兼容的問題。這是作為一個廠商和封閉源代碼的軟體必須考慮的。也導致了早期windows的16位代碼等等。而且這些問題一直延伸到最新的操作系統和文件系統。最新的 NT內核的系統也從unix身上借鑒了一些特性。但受兼容性的束縛很多問題的解決幾乎是不可能的。很多問題不是微軟造成的,包括第三方的廠商甚至是用戶本身造成的。
具體來說現在裝機用戶很多都是用在零售商那裡的ghost的系統。不論多大的硬碟會被等分4-6個分區。而且全都FAT32的文件系統。而且大多數用戶在重新安裝系統時也不會將系統分區改成NTFS,更不會改動其他的分區。這樣就帶來了更多的病毒隱患,而很多病毒是在機制上早就解決了的。
另外,幾乎全部的XP的桌面用戶每天都在以超級用戶身份使用系統。一種原因是因為XP上默認的用戶許可權就是超級用戶。而令一個原因也迫使用戶不得不每天使用超級用戶,應該是廠商的水平和遺留問題。絕大部分的應用軟體,尤其是國產軟體在其他低許可權的用戶的登錄上是無法正常使用的。通常情況廠商限於水平無法同系統的安全機制達成一致。比如國產殺毒軟體很多,但注冊系統服務的不多。我所見的同windows的安全機制結合的最好的恐怕是諾頓的軟體。注冊系統服務。而且用戶數據保存在用戶的主目錄下(Do*****ents and Settings下的用戶名的文件夾下)等等措施保證了無論以任何身份運行登錄,殺毒軟體都能夠正常的起作用。而大多數的國產軟體以一個管理員的身份安裝之後,在另一個管理員的桌面和菜單上都找不到圖標!一些軟體將數據包存在安裝目錄下,這本來就是單用戶系統下的習慣。比如QQ,默認情況下低許可權用戶根本沒辦法使用正常,要設置Tencent文件夾的許可權才行,這樣這個文件夾又成了對所有用戶可寫的了!如果把用戶數據保存到Do*****ents and Settings下,每個用戶相互獨立有什麼困難?恐怕是照顧一些使用98的用戶或者自己的程序員吧!大家都使用超級用戶,好啊!病毒什麼的都懶得研究什麼許可權提升了!想改什麼就改什麼!記得一個同學叫我去殺毒!我一看現在的病毒真的是簡單了!直接把文件名一改省得感染文件了。然後在 autorun.ini里加上一條就可以保證運行傳播了!而這個病毒據說還是大名鼎鼎的流行!如果大家平時不用管理員的話,這個病毒恐怕根本沒有傳播的可能!所以IE和firefox都用漏洞,但IE可能就回感染系統,而firefox只能感染用戶。這不是系統的問題,只是用戶自身的問題,當然系統要對用戶養成這些毛病負責!
然後就是市場問題,記得*nix出現病毒或者蠕蟲的話。都是有人發布補丁的。蠕蟲這里不談,因為蠕蟲主要是通過服務傳播的,是服務的缺陷。*nix的每個病毒都象徵這一些機制的問題。於是這些機制一旦修正,所有同類的病毒就不會感染了!於是*nix下的殺毒軟體其實是查殺通過samba monnt的目錄上的windows病毒。但作為windows來講,病毒意味著意想不到的市場!而且這么大的經濟效益也能推動全球的經濟增長!用三個代表判斷也是對人民有利的!
3)IDE
我覺得不同意那些對linux下IDE環境的看法。對優秀的程序員來說,整個Linux就是一個IDE,只不過你同他打交道不是用滑鼠點擊,而是用命令和腳本程序。由於上面談到的目錄的優勢,所有的程序都被組織在一起了!其實是一個傳統IDE的不同功能模塊被在不同的幾個程序中實現了,而且合作起來也更加靈活。而這個IDE除了軟體開發還可辦公和娛樂,集成度顯然更高了!有些人甚至網頁之類的都用腳本來處理寫好的帶標記的文本來發行出去。如果說哪種IDE 更加高效的話,理所當然是這種全自動的方式。
Linux在中國,文化和市場
Linux在中國達到今天的規模完全是市場的作用,說實話教育界起到的微弱的作用讓人十分遺憾。人們透過媒體知道了Linux。不管是否處於宣傳者的本意,linux被扣上了「高深」的光環。「CLI」、「用於伺服器」之類的說法嚇走了一批觀望者,也有吸引了一批喜歡挑戰難度的人眼球。應該說這批人都是優秀的人,但不是全部優秀的人都會對Linux產生興趣。因為宣傳中透露出linux一個特點「不成熟」,「不成熟」意味著沒錢途。
人才的缺乏卻給了勇敢的人「錢途」。他們成了優秀的程序員或者系統管理員,開發了很多優秀的軟體。然而絕大多數為了公司,卻很少為了社區。也有人成為了商業unix系統的管理員。
客觀地講,Linux的文化向國內的傳播相對於市場向國內擴展是十分緩慢的。大陸的Linux廠商和產品比港台多,但是幾乎所有擁有中文化信息的國際開源社區中香港和台灣的參與者都比大陸的活躍,你可以看到支持GB的軟體遠少於BIG5,zh_CN的文檔遠少於zh_TW。成熟的程序員們也不願意些入門的文檔。只有少數人以論壇版主的身份整理文章和搜集資料。文檔的缺乏和語言的隔閡使我們遲遲不能真正的了解到國際社區的文化,更談不上回報社區。媒體上的報道全部以市場為中心……國際社區疑惑了,中國人到底對linux感不感興趣?
關於市場格局的報道太多,我手頭沒數據沒辦法評論。但是與一些報道不符的是,作為一種特殊的商業產品。linux的市場不能單單的拿訂單來衡量,也不能看政府的笑臉分析。在中國RedHat/Fedora的用戶數量占絕對的優勢(程序員背景的用戶較偏向debian和gentoo),只要到幾個中文的 Linux社區看看就知道了。這些目前的用戶將來一旦成了技術人員就是潛在的訂單。這種規模的用戶份額除了和國際市場的規模之外,主要和RedHat苦心經營的社區效應有關,通過fedora社區RedHat的開發人員幾乎同用戶和貢獻者們無縫地交流。相比之下急於開拓市場的紅旗卻沒有意識到這一點。多數用戶對紅旗的了解少得可憐。已經成為制約公司發展的瓶頸。以中國目前的現狀來看,社區的意義不僅在於潛在的市場和用戶,也是為公司自己培養人才。
個人雖然不贊成製作和發行帶有民族氣質性的linux發行版本,但還是希望國內誕生越來越多的基於社區發展起來的發行版本的開發團隊以及其他的開發人員社區。同市場的曇花一現相比社區的發展壯大才跟家的持久和有力。
文化角度的Linux未來展望
觀望這幾年國際linux和其他開源系統的發展。社區的發展遠遠比市場的發展要明顯得多,從文化的傳播的角度看來這是一種巨大的成功。為了保持和發揚這種成果,我們需要為社區吸引更多的用戶和開發人員。讓更多的軟體使用開源的許可協議。
在國內linux的用戶可能會從學校開始逐漸的擴大。但在市場上可能還是體現在更多的商業的Unix的優秀人才的增多。這些人才普遍是在linux社區成長起來的。另外國內的用戶會對國際的開源社區有更多的了解。更多的資料被翻譯成簡體中文。最重要的是國際社區中會出現更多的中國人。國內也會出現一些較為成熟、具有一定規模的開發社區。
Linux程序員和用戶身上的優秀的品質和文化氣息會吸引更多的人渴望了解和使用Linux面對他們社區的成員們應該比以前有更好的姿態去面對這些未來的同伴們。開源軟體除了影響本身的開發人員和用戶以外,也會對window下的程序員產生更大的影響,進而促進windows下的開發人員提高自己的水平,能夠編寫出同系統設計風格一致的軟體。在改進安全性的同時也意識到開源對於他們的重大意義。
在同商業模式結合方面我並沒有權力去做什麼展望。就想去預測股市一樣。Linux對未來的意義在於:通過文化的影響力讓一些被作為商品的技術盡快的被普及和貶值,以此來消除知識傳播的壁壘和刺激更新的技術的不斷更新。而對最新的技術開放源代碼也可以讓這些技術得到最快速的推廣和實現。
附:如何學習linux?
做為中國人的特殊情況,學習linux對中國人來說要做的事情相對多了一些:
1、以linux為榮耀,以幫助他人了解和學習linux為己任。
2、堅持訪問英文網站,尤其是一些大師的個人主頁。堅持閱讀英文文檔,並盡量翻譯你讀過的文檔發表到國內的社區上供他人閱讀和整理
3、了解unix的歷史,linux的歷史和hacker的歷史及文化。
4、盡可能聯系所以可以聯繫到Linux的愛好者,盡可能多的了解你能接觸到的最了解linux的人對linux的看法。並於自己的觀點相比較。
5、空閑時思索為什麼自己喜歡linux,別人為什麼喜歡linux。為什麼你們喜歡的理由不同?
6、閱讀各類的開源許可協議和商業的用戶許可協議。對比他們各有哪些問題和優勢。
以上使你了解開源文化,是作為一個合格的linux社區成員的前提。
7、安裝一個linux的發行版本。
8、盡你最大的能力把你的學習、娛樂或者工作的環境轉移到linux上來。盡量避免尋找linux功能類似的軟體,而是尋找linux下解決同樣問題的通用的方法。並且對比同windows下的解決方法哪種更加優越。
9、學會SHELL編程。SHELL幾乎可以作為一個入門語言來學習。最低的要求是能夠看懂你自己的版本的linux的配置腳本。理解為什麼一些帖子中里提到的配置方法回起作用,並了解你的發行版本怎樣從每個配置文件中把設置用環境變數的形式讀取並讓他生效的。
10、學會安裝以各種方式發行的程序,並且讓他們的安裝同你系統的慣例一致。熟悉X windows的運作方式。熟悉你的發行版本的安全機制,並且學會定製他們按你的需求工作。
如果僅僅是作為用戶並且部分體會unix的哲學,上面的幾點就足夠了。個人認為這幾點足夠成長為一個合格的Linux用戶了。甚至只要再稍稍的擴充就可以製作自己的發行版本了!而對於不同的用戶群體,比如辦公用戶或者科研人員等。第8條意味著不同的標准。
11、選擇一門或幾門語言社區常用的編程語言。
12、搜集社區或者hackers推薦的圖書或資料、網站、新聞組等。
13、選擇一個較小的用你當前學習的語言開發的開源項目。閱讀他的代碼,並且對比他的代碼和你形象的編寫方式是否相同?哪種更加優越?
14、嘗試按照TODO中的要求為這個軟體編寫代碼,並且同他的作者聯系。學習autoconf和automake等工具的用法。
15、你也可以不參與項目的開發,但仍然能從代碼閱讀中獲益。如果項目是一種你沒有接觸到的技術或者標準的實現,那麼搜集資料讀懂它!
16、學會使用linux下的調試工具,如果軟體還不太穩定,可以幫助找出BUG並且改正。並且學會製作patch發給作者。
17、如果曾是windows的程序員,嘗試把開發環境轉移到linux下來。或者開始在windows的開發工作中使用開源的開發工具和SDK。
18、如果是系統管理員,還要學會在linux部署更強的各類的安全方案。但這已經不屬於學習linux的范疇了。
上面介紹了幾條學習的要求,主要強調的是學習的態度。至於具體什麼樣的技術和自己應該在技術層次上的要求,按照上面介紹的方法應該會慢慢的體會到。
參考資料:
B. Linux平台如何編譯使用Google test寫的單元測試
(請參考readme文件)�0�2Step1.編譯gtest-all.cc和gtest_main.cc文件g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest-all.ccg++ -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest_main.cc�0�2Step2.將step1生成的gtest-all.o和gtest_main.o打包成靜態庫libgtest.aar -rv libgtest.a gtest-all.o gtest_main.o�0�2Step3.編譯要測試的代碼(假設文件名為sample.cpp)g++ -I${GTEST_DIR}/include -c sample.cpp�0�2Step4.編譯單元測試的代碼(假設文件名為test.cpp)g++ -I${GTEST_DIR}/include -c test.cpp�0�2Step5.與libgtest.a或其他需要的庫鏈接、生成可執行程序g++ -I${GTEST_DIR}/include test.o sample.o libgtest.a -o test�0�2其他的庫,如pthread庫。簡單版本all:g++ -I/usr/src/gtest-1.5.0/include -I/usr/src/gtest-1.5.0 -g -c /usr/src/gtest-1.5.0/src/gtest-all.ccg++ -I/usr/src/gtest-1.5.0/include -I/usr/src/gtest-1.5.0 -g -c /usr/src/gtest-1.5.0/src/gtest_main.ccar -rv libgtest.a gtest-all.o gtest_main.og++ -I/usr/src/gtest-1.5.0/include -g -c sample.cppg++ -I/usr/src/gtest-1.5.0/include -g -c test.cppg++ -I/usr/src/gtest-1.5.0/include -lpthread test.o sample.o libgtest.a -g -o testclean:rm test libgtest.a *.o�0�2實際上,其中將gtest-all.o和gtest_main.o壓縮為libgtest.a庫,可以省去,直接使用.o文件,如下。all:g++ -I/usr/src/gtest-1.5.0/include -I/usr/src/gtest-1.5.0 -g -c /usr/src/gtest-1.5.0/src/gtest-all.ccg++ -I/usr/src/gtest-1.5.0/include -I/usr/src/gtest-1.5.0 -g -c /usr/src/gtest-1.5.0/src/gtest_main.ccg++ -I/usr/src/gtest-1.5.0/include -g -c sample.cppg++ -I/usr/src/gtest-1.5.0/include -g -c test.cppg++ -I/usr/src/gtest-1.5.0/include -lpthread test.o sample.o gtest-all.o gtest_main.o -g -o testclean:rm test *.o正式版本# Google Test directoryGTEST_DIR = /usr/src/gtest-1.5.0�0�2# Flags passed to the preprocessor.CPPFLAGS += -I$(GTEST_DIR)/include�0�2# Flags passed to the C++ compiler.CXXFLAGS += -g -Wall -Wextra�0�2# All Google Test headers.�0�2Usually you shouldn't change this definition.GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h $(GTEST_DIR)/include/gtest/internal/*.h�0�2# All Google Test sourcesGTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)�0�2# All tests proced by this Makefile.�0�2Remember to add new tests you created to the list.TESTS = test�0�2all : $(TESTS)�0�2clean :rm -f $(TESTS) gtest.a gtest_main.a *.o�0�2gtest-all.o : $(GTEST_DIR)/src/gtest-all.cc�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 # $(GTEST_SRCS_)$(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c $(GTEST_DIR)/src/gtest-all.cc�0�2gtest_main.o : $(GTEST_DIR)/src/gtest_main.cc�0�2�0�2�0�2�0�2�0�2�0�2�0�2 # $(GTEST_SRCS_)$(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c $(GTEST_DIR)/src/gtest_main.cc�0�2gtest_main.a : gtest-all.o gtest_main.o$(AR) $(ARFLAGS) $@ $^�0�2sample.o : sample.cpp sample.h $(GTEST_HEADERS)$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c sample.cpp�0�2test.o : test.cpp sample.h $(GTEST_HEADERS)$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c test.cpp�0�2test : sample.o test.o gtest_main.a$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@$^代表依賴項,$@代表目標。
C. 如何在 linux 上配置持續集成服務
1. 安裝 Docker
首先,我們要安裝 docker,因為這是 Drone 的工作流的最關鍵的元素。Drone 合理的利用了 docker 來構建和測試應用。容器技術提高了應用部署的效率。要安裝 docker ,我們需要在不同的 linux 發行版本運行下面對應的命令,我們這里會說明 Ubuntu 14.04 和 CentOS 7 兩個版本。
Ubuntu
要在 Ubuntu 上安裝 Docker ,我們只需要運行下面的命令。
# apt-get update # apt-get install docker.io
安裝之後我們需要使用service命令重啟 docker 引擎。
# service docker restart
然後我們讓 docker 在系統啟動時自動啟動。
# update-rc.d docker defaults Adding system startup for /etc/init.d/docker ... /etc/rc0.d/K20docker -> ../init.d/docker /etc/rc1.d/K20docker -> ../init.d/docker /etc/rc6.d/K20docker -> ../init.d/docker /etc/rc2.d/S20docker -> ../init.d/docker /etc/rc3.d/S20docker -> ../init.d/docker /etc/rc4.d/S20docker -> ../init.d/docker /etc/rc5.d/S20docker -> ../init.d/docker
CentOS
第一,我們要更新機器上已經安裝的軟體包。我們可以使用下面的命令。
# sudo yum update
要在 centos 上安裝 docker,我們可以簡單的運行下面的命令。
# curl -sSL https://get.docker.com/ | sh
安裝好 docker 引擎之後我么只需要簡單使用下面的systemd命令啟動 docker,因為 centos 7 的默認初始化系統是 systemd。
# systemctl start docker
然後我們要讓 docker 在系統啟動時自動啟動。
# systemctl enable docker ln -s '/usrb/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service'
2. 安裝 SQlite 驅動
Drone 默認使用 SQlite3 資料庫伺服器來保存數據和信息。它會在 arb/drone/ 自動創建名為 drone.sqlite 的資料庫來處理資料庫模式的創建和遷移。要安裝 SQlite3 我們要完成以下幾步。
Ubuntu 14.04
因為 SQlite3 存在於 Ubuntu 14.04 的默認軟體庫,我們只需要簡單的使用 apt 命令安裝它。
# apt-get install libsqlite3-dev
CentOS 7
要在 Centos 7 上安裝需要使用下面的 yum 命令。
# yum install sqlite-devel
3. 安裝 Drone
最後,我們安裝好依賴的軟體,我們現在更進一步的接近安裝 Drone。在這一步里我們只簡單的從官方鏈接下載對應的二進制軟體包,然後使用默認軟體包管理器安裝 Drone。
Ubuntu
我們將使用 wget 從官方的 Debian 文件下載鏈接下載 drone 的 debian 軟體包。下面就是下載命令。
# wget downloads.drone.io/master/drone.deb Resolving downloads.drone.io (downloads.drone.io)... 54.231.48.98 Connecting to downloads.drone.io (downloads.drone.io)|54.231.48.98|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 7722384 (7.4M) [application/x-debian-package] Saving to: 'drone.deb' 100%[======================================>] 7,722,384 1.38MB/s in 17s 2015-11-06 14:09:28 (456 KB/s) - 'drone.deb' saved [7722384/7722384]
下載好之後,我們將使用 dpkg 軟體包管理器安裝它。
# dpkg -i drone.deb Selecting previously unselected package drone. (Reading database ... 28077 files and directories currently installed.) Preparing to unpack drone.deb ... Unpacking drone (0.3.0-alpha-1442513246) ... Setting up drone (0.3.0-alpha-1442513246) ... Your system ubuntu 14: using upstart to control Drone drone start/running, process 9512
CentOS
在 CentOS 機器上我們要使用 wget 命令從下載鏈接下載 RPM 包。
# wget downloads.drone.io/master/drone.rpm --2015-11-06 11:06:45-- http://downloads.drone.io/master/drone.rpm Resolving downloads.drone.io (downloads.drone.io)... 54.231.114.18 Connecting to downloads.drone.io (downloads.drone.io)|54.231.114.18|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 7763311 (7.4M) [application/x-redhat-package-manager] Saving to: 『drone.rpm』 100%[======================================>] 7,763,311 1.18MB/s in 20s 2015-11-06 11:07:06 (374 KB/s) - 『drone.rpm』 saved [7763311/7763311]
然後我們使用 yum 安裝 rpm 包。
# yum localinstall drone.rpm
4. 配置埠
安裝完成之後,我們要先進行配置才能工作起來。drone 的配置文件在/etc/drone/drone.toml。默認情況下 drone 的 web 介面使用的是80,而這也是 http 默認的埠,如果我們修改它,請按下面所示的修改配置文件里 server 塊對應的值。
[server] port=":80"
5. 集成 Github
為了運行 Drone 我們必須設置最少一個和 GitHub、GitHub 企業版,Gitlab,Gogs,Bitbucket 關聯的集成點。在本文里我們只集成了 github,但是如果我們要集成其他的服務,我們可以在配置文件做修改。為了集成 github 我們需要在github 的設置里創建一個新的應用
D. 導師給我個任務,就是怎麼用Linux命令來執行一些單元測試。。。。
那個評論寫起來麻煩,還是再這里回答你:
你要使用shell來調用java
java命令只能運行含有main方法的類。即使你使用其它的工具它的入口本質還是一個含有main方法的類。這點不用疑慮。
如果你想你自己都可以進行封裝
比如你讓含有main方法的類充當控制器角色,嘿嘿這個就考驗你程序設計能力了。
可以學習作框架一樣分層什麼的。比如你做一個
TestExecutor
,它含有main方法。
然後在這個類裡面根據傳入的參數去判斷你具體調用哪個測試類以及載入一些配置文件什麼的。。。
至於調用,你花哨一些增強你工具的性質。比如將參數什麼的寫入property文件或者xml用程序讀取
對於測試類的調用你就做一些介面或者抽象類什麼的,然後給他們做一個適配器(設計模式),如果你願意甚至可以封裝Junit測試中的代碼
簡化測試類編寫時候的復雜度。
然後你將你這個工程打成一個jar包,比如TestExecutor.jar
至於實際的測試你在重新做一個工程,引入你做的包。這樣適用范圍更廣。
然後將你的測試工程也可以打成一個jar包加入到上面的CLASSPATH中
調用的shell
就是
java
-cp
${CLASSPATH}
xxxx.TestExecutor
就可以了。
也就是shell調用的是一個控制器,對於自己寫的測試代碼只是這個控制器調用的對象而已。
工程沒有bin路徑。。。。
這個不要緊,你只要知道java是執行class文件的就行。我給你說的那些路徑只是一個例子。
你想想不用IDE,只用editplus之類的編輯器和jdk如何變異運行一個java工程的?
只要你能准確找到class就行。至於那些路徑根據自己喜好去設置。不用理會。
若有幫助還望採納
E. linux不執行unittest框架
在python中,unittest是Python中的單元測試框架。它擁有支持共享搭建、自動測試、在測試中暫停代碼、將不同測試迭代成一組。
而在我們自動化測試中unittest可以幫助我們實現數據參數化,窗口在執行出錯的時候自動截屏,自動生成測試報告等相關操作,其中的FixTure可以幫助我們節省大量的冗餘代碼。這也是我在傳智播客學習軟體測試的時候學到的,希望幫到你。
F. 請問下linux下c語言單元測試覆蓋率工具用什麼
哦........
Linux,我通常用
編輯器:vi的寫代碼,寫
編譯器:GCC不用說了酒吧
調試器:GDB
BR /> --------------------------------有點麻煩,使用便捷的圖形界面IDE ------- ----
的Eclipse + CDT + GCC + GDB
但是,只要配置好
開發效率是一個少有的好配置開發環境找到了感覺,在windows下開發的。
的Eclipse + CDT,可以自動生成makefile文件。
-------------------------------
下載新的版本。 Eclipse CDT的一個新的版本。
代碼智能和字體配置的問題,你看看在Eclipse的幫助文檔。
慢慢嘗試配置文件,它是不是很難看E文的惱怒。
下午1時,下午7點9月1日,2011
由gelosie
G. linux下 開源軟體主要使用哪些單元測試工具
太多了。。舉幾個,具體還得用度娘搜索了解 使用。。
C語言單元測試框架 CUnit
C++單元測試框架 crpcut
Objective-C的單元測試框架 CUT
Lua模擬測試工具 lmock
C/C++代碼診斷庫 NoBug
lua測試框架 ltest
Lua單元測試框架 busted
Haxe 單元測試框架 MUnit
MMIX單元測試框架 zMMIX