2010年開始正式接觸Linux,入門發行版是Ubuntu 10.10,後來過渡到Ubunu 11.04,這其中也嘗試了很多其他主流的發行版。進入實驗室之後,開始用CentOS 5,然後是CentOS 6,現在進化到CentOS7。
使用了四年的Linux,前三年都是在瞎折騰,浪費了不少時間,也得到了不少經驗與教訓。現在可能是真的老了,已經不願意折騰了,只希望配置好一個系統之後,就一直使用下去。
使用Linux尤其是CentOS會遇到一些坑,或是一些有潔癖的人不能忍的事情:
在經歷了幾次重裝CentOS之後,特總結出如下幾條軟件安裝的方法與原則,以盡可能保證當前系統的穩定、整潔,盡可能降低系統潔癖引起的重裝沖動。
以下所說,僅限於CentOS7,對其他發行版,或許有借鑒意義。
CentOS自帶的四個官方源中,默認打開的有base、updates、extras,這三個源中包含了約9000個軟件包,是最穩定、也是最值得信賴的源。
因而若一個軟件包在官方源內,則應通過官方源安裝:
sudo yum install PackageName
官方源雖然包含了很多軟件包,但無法滿足日常需求。幸好有第三方源,可以作為官方源的補充。
在使用第三方源的過程中,最怕遇到這兩個問題:
這兩個問題經常是致命的,出現各種預料不到的後果,因而選擇第三方源要遵循如下原則:
就CentOS而言,根據以上的原則,使用如下第三方源:
因而,若一個軟件包位於EPEL、ELRepo中,或一些小型的第三方源中,則添加該第三方源,並用yum命令安裝:
sudo yum install PackageName
大部分非開源的軟件,在CentOS官方源或EPEL中是沒有的。有些軟件的官方網站會提供官方rpm包。此時可以從官方網站下載與當前系統對應的rpm包,直接用如下命令安裝:
sudo rpm -i PackageName.rpm
比如,WPS forLinux就是其中一個。在安裝的過程中rpm命令會自動檢查依賴關系,若該軟件所依賴的包在官方源和EPEL源中可以找到,則自動安裝。
直接安裝rpm包的做法相當省事,但該軟件不能由yum更新,稍稍麻煩一點。有些軟件,比如前面提到的Google、Dropbox和Adobe其實也可以通過這種方法安裝,在安裝的同時會給系統添加源,對於這類軟件依然可以很方便的更新與刪除。
有些軟件,官方提供了壓縮包,解壓之後即可直接運行其中的二進制文件,比如很多Java寫的軟件。這類軟件沒有給源代碼,而是給了可以在當前平台下直接執行的二進制文件。大多數非開源的商業軟件都采取這種辦法。
Linux下的習慣是,商業軟件或第三方軟件都安裝到/opt目錄下,這也是大多數商業軟件包的默認安裝路徑,盡量遵循該習慣。
有些軟件,CentOS源和EPEL源中找不到,官方又沒有提供rpm包,但是其他第三方源提供了rpm包。分情況討論:
不同的發行版使用不同的軟件包管理器,CentOS使用yum,Ubuntu使用apt-get。近些年又出現了一些與發行版無關的第三方包管理器,比如Linuxbrew、GentooPrefix、pkgsrc。
Linuxbrew是由OSX平台下非常流行的Homebrew移植到Linux下的。Linuxbrew可以作為系統自帶的包管理器的一個補充。其特色在於:
試用了一下,一個比較坑的地方是,linuxbrew會自己內部解決依賴問題。比如,我試著通過linuxbrew安裝terminator,然後發現terminator依賴於Python,盡管系統已經安裝了python,linuxbrew還是會安裝一份python,又由於python依賴於更多的東西,導致又安裝了更多軟件包在home下。而且,linuxbrew是從源碼編譯軟件的,所以相對來說速度較慢。
大部分軟件用前面的幾種方法應該都能安裝上了。如果沒安裝上,那就得問問自己,真的需要安裝這個軟件麼。如果不是非常必要的話就不要安裝啦。如果是必須的軟件,那就必須要手動編譯了。
常見的源碼編譯,一般也就是如下幾步。當然,具體情況具體對待:
tar -xvf xxxx.tgz./configure --prefix=/opt/xxxxmakesudo make install
一般來說,這類軟件的默認安裝目錄都是/usr/local,最終文件會被分別放在/usr/local的bin、lib、share、man目錄下。
我個人非常不喜歡這種方式,因為作為一個通過源碼編譯的軟件來說,意味著編譯者要完全負起管理該軟件的義務,這樣的放置方式會來更新或卸載軟件帶來很多麻煩。所以我總是會在configure的時候加上prefix手動指定安裝路徑。要卸載該軟件就直接刪除/opt下對應的目錄,要更新的話,也可以先刪除,再重新編譯一遍。這樣做稍微麻煩的一點是,需要手動將該軟件的bin目錄加入到PATH中,還有可能需要修改LD_LIBRARY_PATH。但是一般來說,需要編譯源碼的軟件很少,所以不會造成太大的麻煩。
好吧,其實我不知道該怎麼起標題了。。
前一節“編譯源碼”主要針對的是一些大型軟件包,這一節“編譯代碼”指的是對一些專業性很強的小代碼包的處理方式。比如有些軟件包編譯之後實際需要的只是一個二進制文件,這個時候就沒有必要安裝到/opt了,合適的方式是在自己的HOME下建立bin目錄,並將其路徑加入到.bashrc中,然後將編譯生成的二進制文件復制到該目錄下即可:
mkdir ${HOME}/binecho 'export PATH=${HOME}/bin:$PATH' >> ~/.bashrc
比如我的${HOME}/bin目錄下有如下文件:
不要隨便什麼二進制文件都往bin裡放,這裡只應放一些常用的命令或很通用的工具。
有一類軟件,其擁有眾多模塊或包,為了管理這眾多的模塊,就需要擁有一個自己的模塊/包管理器。這其中以TeX、Perl和Python為代表。對於這一類軟件,其眾多的模塊是最大的優勢,也是最值得利用的資源,因而我通常會選擇手動安裝它們,原因如下:
當然,即便是使用系統自帶的版本,也依然可以用該軟件自帶的包管理器來安裝模塊。但將導致:
這一方面會導致模塊管理的混亂,另一方面用軟件自帶的包管理其安裝模塊時,可能會依賴於其他模塊的最新版本,若該模塊是通過系統yum安裝的較舊的版本,則可能導致模塊的安裝失敗。
因而,對於這類軟件,一般單獨安裝,並用各自的包管理器管理模塊:
有規則總有例外。
mosquito-myrepo是一個私人維護的源,其中包含了中文輸入法、QQ、飛信、為知筆記、有道詞典、百度雲以及若干音頻、視頻播放器。我對這個源的態度是又愛又恨,其提供了很多中國人需要的軟件,但因為其依賴於除EPEL外的其他第三方軟件源,進而可能導致包沖突。所以對該源的使用,要保持謹慎。
簡單總結一下:
http://www.bkjia.com/Linuxjc/1191932.html TechArticle