Linux ubuntuサーバーを最新の状態に保つためのベストプラクティスは何ですか(ビルドパッケージ、dist-upgrade、alt repos…)


8

私たちはUbuntu 9.10 Karmic Koalaベースの本番サーバーを実行しています。カーネルはほぼ最新(2.6.38.2-grsec-xxxx-grs-ipv6-64)ですが、karmicパッケージリポジトリはとんでもなく古くなっています。Nginxは0.7.62-本当にバグがあります-一方、最新の安定版は1.0.xです!!

さらに、カルミックはちょうどその寿命に達しました。

この質問:UNIXパッケージを最新の状態に保つためのベストプラクティス?見た目は似ていますが、実際にはパッケージマネージャーに関するいくつかの提案しか含まれていません。必要なものはまったくありません!

だから私が見るオプションは:

  1. 新しいマシンを入手して、最初からインストールし、移行する
  2. ディストリビューションのアップグレード
  3. 別のリポジトリーを使用する(launchpad / ppa / backport / pinning
  4. あなた自身のものをつくる

1.の欠点は非常に明白です。

ただし、dist-upgradeパスを敢えて行うことはありません。ダウンタイムと壊滅的な結果の可能性は、運用サーバーでは予測不可能であり、現在、ほとんどの場合、必要なパッケージを再構築しています。しかし、私はいくつかを逃しているかもしれないと確信しています。

ubuntuバックポートを使用することのリスク(安定性/互換性)が何であるかは私には本当にはっきりしていません。さらに、9.10には公式には何も提供されていません。Launchpadは個別ビルドであり、同様の質問です-これは、独自にコンパイルするよりも優れています。

パッケージのビルドは問題ないように見えますが、1.既存の構成ファイルを再利用するために、正しい./configureオプションを再現できないことがあります。バグの

最後に...最近のディストリビューションの「古い」パッケージはどうですか?自分で再構築する以外に方法はないと思いますか?2.と4.の組み合わせが最終的に最適なパスですか?

これを行うための最良の方法は何か、または私のオプションの一部が問題ない/問題がある理由について、客観的なコンセンサスはありますか?

本当にない場合は、無限のスレッドを作成する前に質問が閉じられることを受け入れます!


1
これは、LTSバージョンのみをサーバーに使用する必要があることを現在経験しているためです。あなたの質問に答えて、あなたが#1または#2のいずれかを行うことができるまで、あなたは#4に行き詰まります。#3は、依存関係が利用できないため、時間が経過するにつれて失敗することがよくあります。
daemonofchaos、2011年

確かに、@ KayakJim、当時はそれを把握しておく必要がありましたが、サーバーの負荷が低い場合は、メンテナンスが許容範囲内であったため、十分に先を考えていませんでした。学んだ教訓(うまくいけば)。
Stefano、

回答:


4

独自のディストリビューションを維持するのは大変な作業です。バックポートを維持していても、修正するセキュリティの問題にすぐに圧倒され、ソフトウェアを更新し続けるために低レベルのライブラリをプルする必要があります。楽しくない)。

アップグレードは一般的に良い解決策です。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を使用しているため、メインサーバーパッケージで2015年までサポートされているLTSリリースであるLucidへのアップグレードはそれほど激しくないかもしれません。これにより、将来のために実行可能な自動インストールをセットアップするのに十分な時間を確保できます。

Launchpadパッケージについて質問するとき、私はPPAを意味していると思います。さまざまなPPAがたくさんあります。実験的なものもあれば、安定しているものもあります。一部は公式のUbuntu開発者によって保守されており、一部はパッケージを適切に実行する方法をほとんど知らない人々によって保守されています。PPAで見つけたパッケージが良いかどうか、一般的に言うのは難しいですが、一般的な規則はありません。この場合の最良のヒントは、PPAの所有者を調べて、パッケージの考えられる品質を把握することです。


もちろん、人形劇については考えていませんでした。当時の。しかし、実際に、再インストールパスに進む場合は、複製しやすいインストールを適切に準備することをお勧めします。PS。「特に公式パッケージのみを使用している場合は」もちろん、残念ながらそうではありません。
Stefano、

次に、最初に取るべきステップは、非公式パッケージを識別することです。maintenance-checkそれであなたを助けることができます(私の編集を参照してください)。
ℝaphink

conf管理システムやメンテナンスチェックの使用、PPAに関する追加のヒントの回答を選択しました。しかし、最新のリポジトリを調べたところ、パッケージが常に最新であるとは限らないことに気づきました。11.04でもnginxのバージョンはOLD(0.8.54-4)であり、そのディストリビューションで1.0.xに移行することはありません。それらの状況について何かアドバイスはありますか?
Stefano、

1
@Stefano:UbuntuはDebianと同じ種類のポリシーを使用しています。つまり、ソフトウェアはリリース後に(正確には機能がフリーズした後で)メインリポジトリでアップグレードされません。これは確かに、まだ維持されているリリースでソフトウェアの古いバージョンにつながる可能性があります(特にソフトウェアのリリースが速い場合)。バックポートを使用して新しいバージョンを取得できますが、安定性とセキュリティの更新が失われる可能性があります。前に述べたように、非常にコストがかかる独自のバックポートを維持する意思がない限り、これに対する完全な解決策はありません。
ℝaphink

2

サーバーが世界に公開されておらず、ユーザーを完全に信頼している場合(通常、それは良い考えではありません)、サーバーが機能している場合はそのままにしておくことができます。

それが何らかの方法で外部の世界にさらされている場合、および/または正当なユーザーがそれを違法に遊んでいるという考えを抱く場合、インストールされているソフトウェアの修正とパッチが絶対に必要です。

この場合、2つのオプションがあります。

  1. サポートされているディストリビューションを実行し、ソフトウェアのアップデートを入手する、または

  2. サポートされていないディストリビューションへのすべての修正をバックポートします。率直に言って、これは実現可能ではないようです。

私はUbuntuのユーザーではないので、オプション3で得られるパッチの完全性についてコメントすることはできませんが、疑問がある場合は、完全にはカバーしていません。

最良の解決策は、UbuntuのLTSバージョンに移行することです。これにより、しばらくの間、指定されたパッケージバージョンのサポートが提供されます。そのうち、一部のパッケージは古くなりますが、環境にはセキュリティパッチが適用され、安定します(パッケージバージョンのバンプはありません)。私の経験から、既知の作業環境の安定性は通常、新しい機能よりも価値があります。

あなたの現在の位置は維持できず、移動する必要があるようです。安全な唯一の方法は、2番目のマシン(または仮想マシン)を取得し、再現可能な手順が成功するまで移行をテストしてから、それを本番マシンに適用することです。バックアップを使用してテスト移行を行う場合は、バックアップ手順をテストする良い機会もあります。


@ Pawel-Brodackiに感謝します。サーバーは間違いなく公開されています!機能に対する安定性についてのあなたのポイントを理解しました。問題は、多くの場合、安定性はメジャーバージョンのステップに付属しています。例えば。nginx 1.0。*シリーズは、最新のnattyに含まれている0.8シリーズよりも安定しています。それについて何か提案はありますか?
Stefano、

1
現在十分な場合は、「破損していない場合は修正しない」というルールが適用されます。その後、それはビジネス計算です:安定性が追加され、自分でパッケージのセットを維持するのにかかるコストよりも節約できます。それが単にnginx、またはnginxと少数のライブラリである場合、自分でコンパイルし、テストと展開を行うことができます。ただし、その場合は、パッケージの開発を綿密に追跡して、発見されたバグを迅速に閉じることが賢明です。
パヴェルBrodacki

2

前進する唯一の現実的な方法は、ディストリビューションのアップグレードです。あなたはこれまでにいくつかのリリースを飛躍させることになるので(11.04がリリースされたばかりです)、あなたがそれについて緊張していることを理解できます。

このマシンでドライブのクローンを作成し、別のコンピューターを使用してクローンを実行し、それを使用して一連のテストアップグレードを実行することをお勧めします。発生したすべての問題を書き留め、すべての問題について明確な手順が見つかるまで繰り返します。次に、これをライブサーバーに適用します。

ダウンタイムが許されない場合は、移行が唯一の方法です。ピン留めとバックポートについては忘れてください。これは、限られた期間だけ生き続けるためのものです。また、「独自のロール」オプションは検討する価値さえありません。ちょうど私の2ペニーの価値があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.