使 linux ubuntu 伺服器保持最新的最佳實踐是什麼(建構包、dist-upgrade、alt repos…)
我們正在執行基於Ubuntu 9.10 Karmic Koala的生產伺服器,核心幾乎是最新的(2.6.38.2-grsec-xxxx-grs-ipv6-64),但karmic 軟體包儲存庫現在已經過時了,例如。Nginx 是 0.7.62 - 真的有問題 - 而最新的穩定版是 1.0.x!
此外,Karmic 剛到了生命的盡頭。
這個問題:使 UNIX 包保持最新的最佳實踐?看起來很相似,但實際上只包含一些關於包管理器的建議;根本不是我需要的!
所以我看到的選項是:
- 獲得一台新機器,從頭開始安裝,遷移
- 分銷升級
- 使用不同的儲存庫(launchpad/ppa / backport / pinning)
- 建立你自己的
#1 的缺點非常明顯。
不過,我不敢做 dist-upgrade 路徑,因為生產伺服器的停機時間和可能的災難性後果是無法預測的,目前主要是重新建構我自己需要的包。但我確定我可能會遺漏一些。
我並不清楚使用 Ubuntu 反向移植的風險(穩定性/兼容性)是什麼,此外,官方不再為 9.10 提供任何內容。Launchpad 是個人建構,類似的問題 - 這比我自己編譯好多少?
建構軟體包似乎很好,但是:
- 有時我無法重現正確的 ./configure 選項以重用我現有的配置文件
- 我確信有大量的包和依賴項現在已經過時並且可能是錯誤的來源
最後……最近發行版中的“舊”包呢?我想除了自己重建它們別無他法?2和4的組合最終是最好的路徑嗎?
關於什麼是最好的方法,或者我的一些選擇很好/不好的原因,是否有任何客觀的共識?
如果真的沒有,我會接受在創建無休止的執行緒之前問題已關閉!
維護自己的發行版是一項繁重的工作。即使您維護反向埠,您很快就會被安全問題所淹沒,並且不得不拉低級庫來不斷更新您的軟體,這可能會破壞其他東西(我維護執行有 6 年曆史的發行版的伺服器,它是不好玩)。
升級通常是一個很好的解決方案。
do-release-upgrade
製作精良,您應該能夠毫無問題地升級(特別是如果您只使用官方軟體包)。我最喜歡的解決方案可能是重新安裝路徑。更具體地說,您的伺服器應該使用配置管理系統進行管理,例如 Puppet、Cfengine 或 Chef。如果您的所有配置/軟體包需求都是使用此類工具指定的,並且您的數據在單獨的分區上是安全的,那麼快速重新安裝會容易得多。你只需安裝一個新的發行版而不刪除數據分區,然後執行配置管理工具來重置你的包/配置。我相信這是最乾淨的方法,特別是如果您要管理多台伺服器。
如果您使用的是非官方軟體包,您可能需要在升級/重新安裝之前辨識它們。maintenance-check可以幫助您辨識未由 Ubuntu 官方維護的軟體包:
$ bzr branch lp:ubuntu-maintenance-check $ cd ubuntu-maintenance-check $ ./maintenance-check -f n
如果要重新安裝,還可以導出已安裝包的列表:
$ dpkg --get-selections > myinstall.txt
和你的 debconf 數據庫:
$ debconf-get-selections > debconf.txt # from the debconf-utils package
請注意,由於您目前使用的是 Karmic,因此升級到 Lucid 可能不會太暴力,這是一個 LTS 版本,在 2015 年之前仍支持主要伺服器包。這應該讓您有足夠的時間為將來設置可行的自動化安裝。
當您詢問 Launchpad 軟體包時,我想您是指 PPA。有大量不同的 PPA。有些是實驗性的,有些是穩定的。有些是由官方的 Ubuntu 開發人員維護的,有些是由幾乎不知道如何正確打包的人維護的。一般來說,很難說您在 PPA 上找到的軟體包是否良好,沒有一般規則。在這種情況下,最好的提示可能是查看 PPA 的所有者,以了解其包裹的可能質量。