我的 Linux 一萬小時

Lex發表於2016-05-23

這不是一篇雞湯文,因為我並沒有在使用 Linux 一萬小時後成為 Linux 達人,甚至在很多方面,我連新手都算不上。我走的這些彎路能篇成一本很有參考價值的反面教材,下面,我來講講我用 Linux 都折騰了啥。

Gentoo

在 Ubuntu 還沒有出生的年代,各種發行版百花齊放。以包管理機制區分的話,可以分為兩派:直接安裝二進位制可執行檔案的和下載原始碼自行編譯的,Gentoo 算是後者中一個比較知名的專案。為了使硬體發揮出更好的效能,Gentoo 的 emerge 命令提供了不少編譯引數讓使用者調教。從核心到日常用的所有工具,都需要用包管理工具自動下載原始碼後編譯,這對於像我這樣的 Linux 新人來說的確能學少不少東西。而且每次編譯滿螢幕日誌飛滾非常酷,改用綠色文字就有種黑客帝國的即視感。

不過,這個機制有個顯而易見的缺點,有時候做一些很小的事情都需要花上好長時間編譯大量的依賴包。而像我這樣的強迫症,總覺得下一次編譯換一個引數也許可以使程式執行得更快,以至於很多常用工具我都編譯了不下三遍。另外編譯核心和格式化硬碟重灌 Gentoo 的事真是數也數不清了。最慘的是,有次同事讓我幫忙裝一臺 1U,他用 Debian 可以分分鐘把 LAMP 搞定上架,而我硬是想用 Gentoo 壓榨效能。我編譯了一個下午,反覆編譯核心浪費了大量時間沒能把兩塊網路卡搞定,最後無奈的讓他上了 Debian。

Gentoo 給我的教訓是,大量零散的編譯調優時間累積在一起會消耗很多寶貴的青春和電費,它們帶來的收益微乎其微,不如直接買更好的硬體。選一個有成熟包管理機制,社群活躍的發行版能節省大把精力把真正要做的事做好。這也是後來我只用 Debian 的一個主要原因。

桌面美化,WM

曾經每天看 DistroWatch.com,除了瞭解各種發行版的動向,還希望看到一個介面更加美觀的發行版,因為感覺大部分發行版的開發者審美太非主流。我用了很長時間尚且還看得過去的 XFCE 和 FVWM-Crystal,也用過臃腫浮誇的 KDE 和 Gnome。試了不少佈局和配置,下載過很多 GTK 皮膚和圖示庫,玩過酷炫的 Compiz,調教過中文字型的顯示效果。但不管怎麼改都感覺哪兒不完美,直到後來接觸到同事 Apple iBook G4 上的 Mac 系統,便掉進了在 Linux 上模仿 Mac 系統介面的深淵。這個 Flickr 相簿 裡有不少那些年的痕跡。

這同樣是一件沒有什麼收益的事情,2006 年後我放棄治療,改用 Mac 系統。

wine

周圍的人問我為什麼不用 Windows 這種主流的作業系統,倒喜歡用小眾的作業系統的時候,我都只是一笑而過,後來我用 Mac 的時候也常常遇到這樣的問題。有意思的是,現在這個問題在大部分網際網路公司裡變成了:『為什麼你不用 Mac?』

我一開始用 Linux 作為開發主力機的確發現有諸多不便。比如同事給我發個 Microsoft Office 生成的檔案;比如做網頁要在 Internet Explorer 裡除錯;比如要上 QQ。不過我並沒有感覺到 Linux 不主流,有很多線上論壇有大量熱心的 Linux 使用者能幫你解決各種技術問題。而同一時期那些 Windows 相關的社群全在共享盜版軟體。

在還沒有虛擬機器技術的時候,很長一段時間裡我是用 GRUB 啟動多系統的。後來漸漸地用 wine 這個工具跑起了大部分 Windows 下的程式,接著完全乾掉 Windows,再後來因為要流暢地跑魔獸世界內測不得不裝回 Windows。

生產工具海選

對於開發人員來說,一個非常費神的事情是開發工具,尤其是文字編輯器。我用遍了市面上幾乎所有收費或免費的編輯器,都沒有找到一款像 Windows 下的 EditPlus 那樣好用的產品。主流的推薦是 Vim 和 Emacs,我試著去學好 Vim,但當時並沒有多少好用的外掛,加上自己不熟悉各種快捷鍵,文字編輯效率並不高。幸好後來改用 Mac,很長一段時間被 TextMate 拯救了。

在我的 title 還是前端開發工程師和 Flash 開發工程師的日子裡,在 Linux 下繪圖也不是一件輕鬆的差事,我一直用不慣 GIMP 和 InkScape。有試著用 wine 跑過 Flash 的 IDE 和 Macromedia Fireworks。為了能在 Linux 下愉快地開發 Flash 程式,我還把整個專案改用 MTASC 編譯。我很後悔沒有早點明白,在 Linux 下繪圖這件事就是自討苦吃,同一時期在 Windows 下的各種繪圖體驗會愉快很多。

運維

因為會使用 Linux,所以在開發過程中時不時地會承擔一些簡單的運維任務。為什麼只是簡單的,因為更復雜的任務會由那些有 RedHat 證書的專業運維負責。在我這些年的工作經歷中,我曾跑過十多次機房,管理過一些 1U 伺服器,但都只停留在裝系統和配置服務環境的階段,並沒有機會接觸那些需要大量伺服器攜同工作的任務。而這些安裝和配置的任務,在 Debian 下又過份地簡單,apt-get install 裝好的東西一般不用再多折騰就能很好地使用。所以我沒能在運維這一塊更加深入,只是變成一個初級熟練工而已。

前幾年因為虛擬幣的泡沫,我開始有動力自學配置管理工具,學了一點點 Chef 和 Puppet,感覺略複雜個人用不上,所以學了相對簡單好用且不需要 master 伺服器的 Ansible。有一段時間我控制近 50 臺虛擬機器挖虛擬幣,最高的一個月有 6000 元的收入。

隨後我試著把一些日常開發中經常需要反覆做的事寫成 Ansible Playbook,於是便有了ios-dev-playbook。期間為了和牆做鬥爭,從 vpn-deploy-playbook 這個倉庫中也學到不少實用技能。但是,很多線上服務其實比某些開源的程式做得好,有時候自己運維往往省不下幾個錢。舉個例子,Git 倉庫,我曾經很喜歡自己在 Linode 虛擬器上搭建 GitLab 或者 Gogs,但是後來發現 GitHub 無論是在社群工具鏈整合度以及易用性上都甩開其它競品好幾條街。

另外,這幾年,為了滿足各種創業公司對高生產效率和低成本的需求,IaaS、PaaS、SaaS 以及 Docker 開始流行,創業公司不再需要專職的運維,開發人員寫幾個配置檔案,在網頁裡點幾下滑鼠就能把一個完整的系統弄上線。

所以,我掌握的這些簡單的 Linux 運維的技能,幾乎已經被淘汰完了。

我試著去學 Goolge Kubernetes 和 AWS Lambda,但感覺業餘精力不夠,也沒有專案可以實踐。

總結

如果我晚十年出生,或者早點用上 Mac OS,或者考了一張 RedHat 證書,應該就不會這麼折騰了。

相關文章