マシンにメモリが足りない場合、どのようにコンパイルしますか?

マシンにメモリが足りない場合、どのようにコンパイルしますか?

IRCバウンサーとしてZNCが設定された低コストのVPSがあり、素晴らしい実行されます。約128MBのフラッシュがあり、使用したいモジュールの1つをコンパイルするのに十分ではありません。znc-push

仮想マシンでファイルをコンパイルして転送しようとした後にモジュールをロードしようとすると、「無効なELFヘッダー」エラーが発生します。このモジュールをリモートでコンパイルして転送する方法は?実行するのに十分なメモリがありますが、コンパイルされません。 distccを試しましたが、使用方法に関する信頼できる情報が見つかりませんでした。

そして、スワップファイルを作成してみましたが、このVPSでは許可されていないか不可能です。

答え1

明らかに、そのような機械には資源がなく、開発目的には適していません。

この種の作業のために(インテル)Debianの基本アーキテクチャを盲目的にコンパイルすることはできません。これは明らかに小規模なサーバーのためのエイリアンのアーキテクチャ/バイナリです。

ターゲットアーキテクチャのバイナリを生成するには、ソースコードをコンパイルするリモートシステム/ Debian 7にクロスコンパイラ(クロス)ツールチェーンを構築する必要があります。

多くの場合、クロスツールチェーンには特定のインストール手順があり、環境に合わせていくつかの調整が必要になる場合があります。

クロスコンパイラは、コンパイラが実行されているプラ​​ットフォーム以外のプラットフォームで実行可能なコードを生成できるコンパイラです。

1つのシステムで複数のプラットフォーム用にコンパイルするには、クロスコンパイラが必要です。これは、組み込みシステム用のマイクロコントローラなど、コンパイラが実行されているプラ​​ットフォームでは実行できない可能性があります。これはオペレーティングシステムが含まれていないためです。

例えば、

GCCクロスコンパイラをビルドする方法

もう1つの例は、NetBSD / ARM用Debianでクロスコンパイラを設定したことです。たとえば、openwrt / 32ビットMIPS用のバイナリが必要な場合は、uClibと32ビットに一致するクロスコンパイル環境を確保する必要がありました。 MIPS - 私のMIPベースのルータには96MBのRAMと128MB(または256MB)しかありませんか? )フラッシュ。

しかし、一部の組み込み/小型ルータ環境ではユークリップこれは、スペースを節約するために、glibcの代わりにuClibがglibcよりはるかに小さいためです。

uClibcは、組み込みシステムおよびモバイルデバイス用のLinuxカーネルベースのオペレーティングシステム用の小型C標準ライブラリです。

uClibcはほとんど最初から書かれていますが、glibcや他のプロジェクトのコードを統合しています。

uClibcは、LinuxカーネルとμClinuxシステムコールを取り巻くラッパーです。 uClibcは、Linuxディストリビューションで一般的に使用されるCライブラリglibcよりはるかに小さいです。 glibcはさまざまなハードウェアとカーネルプラットフォームですべての関連C標準を完全にサポートするように設計されていますが、uClibcは特に組み込みLinuxに焦点を当てています。スペース要件に応じて機能を有効または無効にできます。

あなたも何度も忙しい箱lsたとえば、Linuxでバイナリユーティリティの単純なバージョンを置き換えて提供すると、それとは異なり、より強力でfind作業するオプションが少ないことがわかります。

BusyBoxは、単一の実行可能ファイルに複数のコンパクトUnixツールを提供するソフトウェアです。 Linux、Android[7]、FreeBSD[8]など、さまざまなPOSIX環境で動作しますが、提供されているツールの多くは、Linuxカーネルが提供するインタフェースと連携するように設計されています。リソースは非常に限られた組み込みオペレーティングシステム用に特別に構築されています。

違いはここでは終わりません。 Apacheがないかもしれませんが、OpenSSHの代わりにLuciがあります。水滴クマSSH。

Dropbearは比較的小さなSSHサーバーであり、クライアントです。 Dropbearは、ワイヤレスルーターなどの「組み込み」タイプのLinux(または他のUnix)システムに特に役立ちます。

また、最新バージョンである必要はありませんが、非常に単純なLinuxカーネルを持つことになります。一部の中国のマザーボードでは、非標準ハードウェアをサポートするために何らかの方法で「ハッキング」することができ、ユーザー(およびしばしばベンダー)は新しいバージョンに合わせて再コンパイルできません。

小規模なシステム環境についてさらに調査が必要であることを申し訳ありません。また、この回答があなたが本格的なLinuxサーバーのようなあらゆる方法で組み込みLinuxを扱いたくないことを理解するのに役立つことを願っています。

いつものように、ツールを装備することに加えて、ツールも知る必要があります。

答え2

ストレージスペースが十分な場合は、スワップを介してRAMを拡張できます。

Ubuntuの場合:

  1. sudo fallocate -l 4G /swapfile && sudo chmod 600 /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile && sudo nano /etc/fstab
  2. 次に、/etc/fstabに次の行を手動で追加します。/swapfile none swap sw 0 0
  3. 再起動

RAMエラーなしでコンパイルされます。頑張ってください!

関連情報