私たちは2005年にインストールされた古いサーバー(Fedora Core 4)を持っています。このサーバーは更新されませんでした。外部世界と直接接続しなくても生産ラインを監視できる特殊ソフトウェアを実行する。
システムのアップグレードに問題はありません。
一部のユーティリティにはエラーがあるか、オプションがありません。いくつかの他のユーティリティがありません。
このサーバーにいくつかのスクリプトをインストールする必要があります。最大の問題は、Bashが本当に古くて便利なものが欠けていることです。私はよくテストされたスクリプトをハックするという考えが好きではありません。
システムを変更せずに最新のBashを実行して新しいプログラムをインストールする方法はありますか?
BusyBoxのような?それともchroot内で? chrootの問題は、実際のシステムにアクセスするのが難しいことです。たとえば、私のバックアップスクリプトは機能しません。
答え1
私の考えの最も簡単な方法は、別のインストールのプログラムとライブラリを別々のディレクトリに一括コピーすることです。たとえば、数百メガバイトにすぎず、必要なものすべてを含めることができるsystemrescuecdなどのライブCDから/opt/new/にコピーします。これにより、どのライブラリが必要かを検索/検索/推測/テストすることなく複製できます。
LD_LIBRARY_PATH=/opt/new/lib/ ; /opt/new/bin/diff
その後、このプログラムを使用または実行できますLD_LIBRARY_PATH=/opt/new/lib/ ; /opt/new/bin/bash
。これは、ユーティリティが理解できなくなった古い設定ファイルを読み取らなくなるまで完全に機能します。それとも悪いことは、彼らが書くのをやめるまでです。
成功したら、新しいライブラリを/ lib /にコピーしてLD_LIBRARY_PATHトリックを忘れることができます。ファイル名が競合しない限り、これは安全です(他の提案も大歓迎です)。
大胆に古いバイナリを新しいバイナリに置き換えることもできます(選択したバイナリのみ)、これは本番サーバーには適していない可能性があります。
答え2
専用ユーザーのホームディレクトリに必要なツールをコンパイルしてインストールできます。
専用ユーザーの環境変数PATH
はLD_LIBRARY_PATH
。
必要なステップは次のようになります。
- 新しいユーザーを作成する:
cooluser
~cooluser/Local
ディレクトリの作成~cooluser/.profile
必要に応じて設定環境を編集します。PATH=${HOME}/Local/bin:${PATH}
LD_LIBRARY_PATH=${HOME}/Local/lib:${LD_LIBRARY_PATH}
- 必要なツールをダウンロードできるソース
- intselfがインストールされるようにツールを設定します。
~cooluser/Local
- 例えば
./configure --prefix=~cooluser/Local
- 例えば
- コンパイルとインストール
gcc
明らかに、お使いのコンピュータには他の多くの開発ツールが必要です。そのツールがない場合は、一部のバージョンのOSを実行している別の(仮想?)コンピュータでツールをコンパイルし、準備ができたら~cooluser/Local
ディレクトリを転送できます。
答え3
インストールされているプログラムが多い場合は、手動でメンテナンスするのが難しい場合があります。 chrootに最新のディストリビューションをインストールすることをお勧めします。
慣れたら、Fedoraをインストールすることもできます。 chrootにツールをインストールするのが役に立つかどうかわかりません。そうでなければ、Debianとその派生物がそうします。ブート防止プログラム。このガイド役に立つかもしれません。これらの以前のバージョンのFedoraにはschrootはありませんが、まだrpmをインストールできます。
schrootを操作できない場合は、バインドマウントでchrootを手動で入力してください。ディストリビューションをインストールしたが/new
schrootを使用しない場合は、次のエントリを次に追加します/etc/fstab
。
/ /new/old rbind rbind
/dev /new/dev rbind rbind
/home /new/home rbind rbind
/tmp /new/tmp rbind rbind
proc /new/proc proc defaults
sysfs /new/sys sysfs defaults
バインドマウントを使用するため、バインドマウントディレクトリを通過しないようにバックアップスクリプトを構成する必要があります。それ以外の場合は、元の場所に1回、新しい場所に1回、合計2回バックアップします。
答え4
Bashはlibcに依存していますが、これは古すぎるため、成功したコンパイルの可能性が非常に制限されています。おそらくあなたのbashのバージョンが何であるかを知らせるのは役に立ちます。