マイコンピュータのプログラムをサーバー上で実行する

マイコンピュータのプログラムをサーバー上で実行する

1 台のサーバーに SSH で接続できますが、そのサーバーの大容量 HDD スペースは使用できません。プログラムを実行したいのですが、プログラムの容量が大きく、サーバーにコピーすることはできません。 SSHを介してサーバーのマイコンピュータでプログラムを実行する方法はありますか?

(私のコンピュータとサーバーは両方とも同じLAN上にあり、Linux Mintを実行しており、サーバーはCentOSバージョン5.9(最終)を実行しています。)

ベストアンサー1

サーバーがプロセスの1つでELFバイナリ(Pythonインタプリタなど)を実行するには、それをメモリにマッピングできる必要があります。これは、ファイルが仮想ファイルシステムにあり、それを提供するファイルシステムでサポートされている場合にのみ実行できます。

したがって、実行可能ファイル(およびその依存関係)を書き込みアクセス権を持つマウントされたファイルシステムの1つのサーバーにコピーするか、sshfsなどの一部のネットワークファイルシステムを介してミントマシンにコピーする必要があります。pythonファイルシステムはサーバーにマウントされます。 nfsまたはcif。

ファイルシステムをマウントするには、スーパーユーザー権限が必要であるか、少なくともその一部を付与する必要があります(例:suid実行可能ファイルを介してfusermount)。サーバー管理者は、この権限が乱用され、追加の権限を取得できるほど強力であるため、信頼できるユーザーにのみこの権限を付与します。

ファイルシステムをマウントできない場合、他のオプションはqemu。プログラムがアクセスする必要があるサーバーのどのリソースは何ですか?これらのリソースをキャスティングマシンに公開し、そこでソフトウェアを実行することはできませんか?プログラムがサーバーの仮想マシンで実行されている場合でも、同様の操作を実行する必要があります。

Mintマシンのコピーとしてサーバー上でqemu VMを起動するには、MintマシンでLVMを使用し、そこに1つのファイルシステム(ルートファイルシステム)しかないとします/dev/mint_VG/root

  • /dev/mint_VG/rootサーバー上のVMのルートファイルシステムになるLVMスナップショットを作成します。

    sudo lvcreate -s -L10G -n root_vm_on_server mint_VG/root
    
  • ネットワークブロックデバイスにエクスポートする:

    sudo nbd-server -C /dev/null 12345 /dev/mint_VG/root_vm_on_server
    
  • カーネルとinitrdイメージをサーバーに転送します。

    scp /boot/{vmlinux,initrd.img}-"$(uname -r)" server:
    
  • サーバーで次qemuのように実行します(screenまたはで可能ですtmux)。

    qemu -drive file=nbd:mint-machine:12345,if=virtio -m 4096 \
       -kernel vmlinuz-xxx -initrd initrd.img-xxx \
       -append 'root=/dev/vda ro init=/bin/bash' -monitor stdio -vnc :4 \
       -smp 8,core=8
    

(ここでは8つの仮想CPUと4 GBまたはRAMを使用し、最初はbashVMでのみ実行します。)

VNCビューアを使用してグラフィックコンソールを取得するserver-machine:4か、グラフィックが必要ない場合はシリアルコンソールを使用してください。

サーバーのシステム管理者がそれを使用するように説得できる場合kvm(書き込み許可/dev/kvm)、より効率的になります。

おすすめ記事