Ubuntu 18.04 LTSによるLTSP5

# 概要
## モチベーション
研究室に10人～20人の学生さんがいるとする．
学生さんなので毎年人が入れ替わる．
そんな状況下で，各PCにubuntuをインストールし必要なソフトウエアをインストールし実験などが恙なく行われるようにメンテナンスし続けることは煩雑すぎて嫌である．

LTSPはサーバ側でOSイメージを持ちネットワーク経由で各PCにOSイメージを配布し起動するものとなる．
システムの一括管理が出来て楽そう，ということで導入している．

## LTSPにまつわる情報
各PCはクライアント(client)となりますが，その形態はthin clientとfat clientがある．thin clientはOS起動後，ソフトを使ったりする処理をサーバ側で行うものでfat clientは各PC自身で処理を行うものである．

またサーバの実現の仕方(サーブの仕方)?としては，chrootを使ったものとchrootlessなものがある([公式](http://wiki.ltsp.org/wiki/Installation/Ubuntu#Installing_LTSP))．
以前はchrootが推奨されていたが18.04からchrootlessが推奨になっている．

更にクライアントの管理としては18.04からepoptesが利用できるようになった．
これはクライアントの電源の情報・画面の取得などができるものである．
本ページでは説明省略．

## 前提
当研究室のシステム構成は[このようなもの](https://qiita.com/NeK/items/70f994b271b0c1a48590)を使っている．
ここで関係のある部分は以下のとおり．

- LTSPサーバ
    - Ubuntu Desktop 18.04
    - chrootless
    - NICは1枚
- 各PC
    - PXE boot可(でないとLTSPのクライアントになれない．biosで設定)
- dns, dhcpサーバ
    - 既にあるdns, dhcpサーバを利用．
- ユーザ認証
    - 既にあるldapサーバを利用

dns, dhcpサーバを外部に持つことが一番通常と違うと思われる．たぶん普通はLTSPサーバインストール時に用意・設定されるdns, dhcpを使用することになる(dnsmasq, systemd-resolv?)．

また本ページで記載しているIPは全部適当(頭脳乱数により生成)

## dns, dhcpサーバおよびユーザ認証について
既に設定されているサーバを使用するため，ここでは各サーバの構築方法などは説明しない．

# 準備
## LTSPサーバの準備
Ubuntu Desktop 18.04をインストール．ユーザが使用するであろう通常のDesktopとして設定．

- 利用ソフトウエアのインストール
    - nfsなどシステム利用のためのものからchromeやvimなどのアプリケーションまで
- homeディレクトリをNFSで外部からマウントしたい場合，LTSPサーバではマウントしないよう設定
    - クライアントではlts.confの中のfstabに関する項目でマウントするので大丈夫
- 認証の設定
    - ldap認証できるようにしておく
- その他
    - ntp，システムアップデート，etc.


# LTSPサーバ構築
## インストール
インストールとepoptesがクライアント管理するための設定


```Bash:terminal
$ sudo add-apt-repository --yes ppa:ts.sch.gr
$ sudo apt update
$ sudo apt install --yes --install-recommends ltsp-server-standalone ltsp-client epoptes
$ sudo gpasswd -a ${SUDO_USER:-$USER} epoptes
```

## 初期イメージ作成

```Bash:terminal
$ sudo ltsp-update-image --cleanup /
```

作られるディレクトリ・ファイル

- /opt/ltsp/images/
- /var/lib/tftpboot/
- /etc/nbd-server/conf.d/swap.conf
- /etc/nbd-server/conf.d/ltsp_amd64.conf

## 設定ファイル作成

```Bash:terminal
$ sudo ltsp-config dnsmasq --overwrite
$ sudo ltsp-config lts.conf
```

作られるディレクトリ・ファイル

- /etc/dnsmasq.d/ltsp-server-dnsmasq.conf
- /var/lib/tftpboot/ltsp/[arch]/lts.conf
    - 最近のPCだと
        - /var/lib/tftpboot/ltsp/amd64/lts.conf

## dnsmasqの設定

- 対象ファイル
    - /etc/dnsmasq.conf
    - /etc/dnsmasq.d/ltsp-server-dnsmasq.conf
- 編集アプローチ
    - dns, dhcp機能を全部offに
    - tftp機能のみ有効に

### ファイルの編集
- dnsの無効
    - port=0
- dhcpサーバ無効
    - dhcp-*** を全部コメントアウト


## dhcpサーバの設定
現在利用しているdhcpサーバの設定ファイルを編集．
クライアントにipが割り振られる時，PXEブートするのか，PXEブートするならOSファイルを配布するLTSPサーバのIPは何かを設定する．

- 対象ファイル
    - /etc/dhcp/dhcpd.conf
- 対象のsubnetの中に記載
- 例は関係する一部を抜粋

```dhcpd.conf
subnet .... {

  next-server 192.168.0.10; # LTSPサーバ(tftpサーバ)のIPを記載
  if substring( option vendor-class-identifier,0,9 ) = "PXEClient" {
    filename "/ltsp/amd64/pxelinux.0"
  }

}
```

## resolv.conf

- 対象ファイル
    - /etc/systemd/resolv.conf

```resolv.conf
DNS=192.168.0.20 # DNSサーバのIP．例では192.168.0.20
Domain=my.local.ac.jp # 自分のところのドメイン名
```

## lts.conf

クライアントをどのように起動するかの設定．
詳しくは[こちら](http://manpages.ubuntu.com/manpages/bionic/man5/lts.conf.5.html)．

- 対象ファイル
    - /var/lib/tftpboot/[arch]/lts.conf


```lts.conf
[default]
LTSP_FATCLIENT=True # fat clientで起動
TIMEZONE="Asia/Tokyo"
CUPS_SERVER=192.168.0.30 # cupsを使っているならcupsサーバのIPかFQDN
LDM_PASSWORD_HASH=True # 画面ロックできるようになる
XKBLAYOUT=jp

# fstabの設定
# 例ではhomeディレクトリをサーブするhome-serverとsamba用(/sambaをサーブ)のsamba-serverがある
# IPで指定でもいいが例では名前で指定．
CONFIGURE_FSTAB=True # fstabの設定
FSTAB_0="home-server:/home /home nfs4 _netdev,auto 0 0"
FSTAB_1="samba-server:/samba /samba nfs4 _netdev,auto 0 0"
NBD_SWAP=True

[MACアドレス] # 固有のMACアドレスを書くことで，そのPCのみの設定が可
LTSP_FATCLIENT=false

# その他，[ラベル名]などでグルーピングもできる
# LIKE指定を使う．

[Lab]
X_MODE_0 = 1024x768

[01:23:45:67:89]
LIKE=Lab
```

### fstabの設定について
<Details><summary>LTSPサーバの/etc/fstabでなくlts.confの中で設定する理由</summary>
chrootlessによりLTSPサーバの環境 = クライアントの環境として構築できる．そのためLTSPサーバの/etc/fstabに記入することで，クライアントでも同じようにNFSマウントが行われる．しかし敢えてLTSPサーバではfstabを使わない．
理由:
homeディレクトリをhome-serverによりNFSマウントする状況を考える．
home-serverを再起動した時，NFSマウントしているPCがハングアップする可能性がある．
- もし，LTSPサーバがhomeディレクトリをマウントしていた場合，LTSPサーバもハングアップしてしまう．管理者がいないと復旧できない．
- もし，LTSPサーバがhomeディレクトリをマウントしていない場合，クライアントのみハングアップするので，クライアントのみ強制再起動すれば直る．管理者がいなくても復旧できる．
よって，LTSPサーバの/etc/fstabでhomeディレクトリをマウントせず，lts.confの中でfstab設定するようにする．
<Details>

## クライアントの設定
クライアントのBIOSでPXEブートを有効・起動順位を適正に設定．

## クライアントの起動
ちゃんとLTSPクライアントとして起動しているか確認

# 運用
## システムアップデート・ソフトウエア追加など変更があった場合

1. LTSPサーバに変更を適用する
    - アップデート or ソフトウエア追加など
1. 変更したLTSPサーバをもとにクライアント用OSイメージを作成

```terminal
$ sudo ltsp-update-image -c /
```

クライアントを再起動して新しいOSイメージでブートさせると完了．

# その他