はじめに
某大の某研で学生用の計算サーバーを管理しています。
計算サーバーの増加にメンテナンスが追いついておらず、ソフトウェアの更新も激しいです。
そもそも、それぞれのサーバーにOSがインストールされていることが諸悪の根源です。
OSをLANからブートするPreboot eXecution Environment(PXE) ブート
で管理コストを削減します。
ホストの管理としてLinux Terminal Server Project(LTSP)
を使います。
PXE/LTSPで何ができるの?
https://ltsp.org/
何ができるのかざっくりと言うならば、
設定済みサーバーのコピーをポンポン作れる、超簡単に。
です。コピー先のOSをインストールする必要がありません。
そもそもSSHやHDDをセットアップする必要もないです。
0. 準備
準備するもの
- LAN環境
- PC二台
環境
PXEブートではDHCPの設定が必要ですが、今回はDHCPプロキシという機能を使います。
DHCPサーバーはルーター付属のものをそのまま使い、特別な設定はありません。
筆者の環境ではNIS
とNFS
でアカウントが管理されています。
これらの管理システムがない状態でも使うことができるように説明します。
しかし、可用性の観点からNISやNFSによるアカウント管理、データの冗長化をお勧めします。
この記事ではUbuntu Server 18.04.3
で動作確認します。
そこそこ良いワークステーションをホストにしましょう。
依存関係のトラブルは面倒なので、クリーンインストールした状態から説明を始めます。
GPU環境を導入する場合は、ホストとクライアントのどちらにもGPUを差しておいてください。
GPUドライバの都合、BIOSのセキュアブートをOFFにする必要があるかもしれません。
ホストにはGPUがなくても動作するかもしれませんが、未確認です。
Internet <--> Router(DHCP) <--(HUB)--> Host
|--> Client_1
NIS <--|--> Client_2
NFS <--|--> Client_n
1. LTSPの導入
インストール
ホストマシンにLTSPを導入します。
LTSPのインストールページの通りに進めます。
$ sudo apt -y purge --auto-remove indicator-application mate-hud snapd
$ sudo apt -y install synaptic
$ sudo add-apt-repository -y ppa:ltsp
$ sudo apt update
$ sudo apt -y install --install-recommends ltsp ltsp-binaries dnsmasq nfs-kernel-server openssh-server squashfs-tools ethtool net-tools epoptes
LTSPの初期設定
細かいオプションがありますが、ほとんどの環境ではデフォルト設定で良いです。
詳しくはLTSPのインストールページやドキュメントを見てください。
$ sudo ltsp dnsmasq
$ sudo install -m 0660 -g sudo /usr/share/ltsp/common/ltsp/ltsp.conf /etc/ltsp/ltsp.conf
$ sudo ltsp image /
$ sudo ltsp ipxe
$ sudo ltsp nfs
$ sudo ltsp initrd
この時点で、ブートができるようになっています。
クライアントから起動してログインできるか確認しましょう。
BIOSの設定からNetwork Boot(PXE BOOT)を有効にし、起動順序でLANを優先にします。
初期設定で既に、/homeがNFSでマウントされているため、環境によってはこれだけで十分かもしれません。
2. SSHリモートアクセスの設定(Option)
計算サーバーはSSHで接続する必要があります。
SSHの有効化と静的IPの設定をします。
各サーバーのMACアドレスが必要です。
クライアント用のSSHホスト鍵を作成
$ sudo mkdir -p /etc/ltsp/etc/ssh
$ sudo ssh-keygen -A -f /etc/ltsp
$ sudo mv /etc/ltsp/etc/ssh/ssh_host_* /etc/ltsp/ # 鍵が思った場所に生成されないので移動
$ sudo rm -r /etc/ltsp/etc/
SSHの設定を追加
$ sudo vim /etc/ltsp/ltsp.conf
[clients]
KEEP_SYSTEM_SERVICES="ssh"
POST_INIT_CP_KEYS="mv /etc/ltsp/ssh_host_* /etc/ssh/"
それぞれのクライアント用に静的IPの設定を追加
$ sudo vim /etc/ltsp/ltsp.conf
[00:11:22:33:44:55]
HOSTNAME="client1"
KERNEL_PARAMETERS="ip=192.168.0.10:\${srv}:\${gateway}:\${netmask}"
3. GPUの設定(Option)
NvidiaのGPUを使う場合はホストにnvidia-driver
をインストールします。
CUDAも一緒にインストールします。
LTSPの設定に追加は不要です。
ただし、ディスプレイをGPUに接続すると画面がはみ出します。(原因調査中)
$ wget https://developer.nvidia.com/compute/cuda/10.1/Prod/local_installers/cuda_10.1.105_418.39_linux.run
$ sudo sh cuda_10.1.105_418.39_linux.run --silent --driver --toolkit
4. NISとNFSの設定(Option)
ホストでNISを設定してください。ホストでNFSは設定しません。
クライアントでNFSを有効にするために、FSTABの記述を加える必要があります。
こちらの記事 CentOS7(研究室内新設サーバー)の設定メモ が参考になるかもしれません。
$ sudo vim /etc/ltsp/ltsp.conf
[clients]
FSTAB_HOME="file-server:/home /home nfs defaults"
5. 運用
ホスト環境やLTSPの設定を変更した場合は以下を実行する必要があります。
その後、クライアントを再起動すると反映されます。
$ sudo ltsp image /
$ sudo ltsp ipxe
$ sudo ltsp nfs
$ sudo ltsp initrd
さいごに
後任への引継ぎ資料も兼ねて、ここに備忘録を記します。
不明点や間違いの指摘があればコメントにお願いします。