計算サーバの構築

インストールメディア

  • <URL:https://www.debian.org/CD/netinst/> より, ネットワークインストール用インストーラを取得する.
  • 取得したイメージを USB メモリに焼く. Linux から焼く場合は dd コマンドを用いればよい. 以下では iso イメージを焼く先の USB メモリのデバイス名が /dev/sdb であることを仮定している.

    $ sudo dd if=debian-10.7.0-amd64-netinst.iso of=/dev/sdb bs=1m

Debian のインストール

  • Debian GNU/Linux インストーラで以下の設定をする.
    • 言語:日本語
    • パーテーション:
      • 全領域を使うお任せ設定
    • ネットワーク 10.100.100.0/24 のアドレスを設定
    • ユーザ情報:適宜設定.
    • タスクセルでは, SSH server と標準システムのみ選択. デスクトップ環境は入れない.

Debian の初期設定

/etc/apt/sources.list の編集

contrib, non-free も使うよう設定する.

# /etc/apt/sources.list

  deb http://dennou-k.gfd-dennou.org/debian/ buster main contrib non-free
  deb-src http://dennou-k.gfd-dennou.org/debian/ buster main contrib non-free

  deb http://security.debian.org/debian-security buster/updates main contrib non-free
  deb-src http://security.debian.org/debian-security buster/updates main contrib non-free

  deb http://dennou-k.gfd-dennou.org/debian/ buster-updates main contrib non-free
  deb-src http://dennou-k.gfd-dennou.org/debian/ buster-updates main contrib non-free

使いそうなソフトウェアの追加

よく使いそうなものを入れておく.

# apt-get update

管理的なツール

# apt-get install net-tools screen pciutils openssh-server fail2ban sudo build-essential rsync git lhasa software-properties-common dnsutils

エディタ

# apt-get install emacs vim

ページャー

# apt-get install lv

テキストブラウザ

# apt-get install w3m 

Ruby

# apt-get install ruby

Jupyter で必要なパッケージ

# apt-get install npm nodejs libnode64

コンパイラ

# apt-get install gfortran clang f2c

LAPACK, BLAS

# apt install libblas3 liblapack3 libblas-dev liblapack-dev

GNU 科学ライブラリ (GSL)

# apt-get install gsl-bin libgsl-dev

FFTW

# apt-get install libfftw3-long3 libfftw3-quad3 libfftw3-single3 libfftw3-bin libfftw3-dev python-fftw ruby-fftw3 libcufftw9.2

NetCDF

# apt install libnetcdf13 libnetcdf-dev libnetcdff6 libnetcdff-dev 

X11 関係

# apt-get install xvfb x11-apps x11-utils x11-xserver-utils dbus-x11

画像系

# apt-get install imagemagick qiv ffmpeg 

解析ツール

# apt-get install grads

sudo の設定

/etc/group を編集し, sudo グループにユーザを加える.

ネットワークインターフェイスの設定.

必要なパッケージのインストール

# apt-get install ifenslave

ifconfig すると, すでに 100G イーサネットが見えている. 100G インターフェイスのボンディングの設定を行う. https://forums.freebsd.org/threads/lagg-and-bonding-with-debian.37796/ を参考にした.

# /etc/network/interfaces

  auto bond0
  iface bond0 inet static
     address 10.0.100.23
     network 10.0.100.0
     netmask 255.255.255.0
     gateway 10.0.100.254
     mtu 9000
     bond-mode 802.3ad
     bond-miimon 100
     bond-slaves none

  auto enp216s0f0
  iface enp216s0f0 inet manual
     bond-master bond0
     bond-primary enp216s0f0 enp216s0f1

  auto enp216s0f1
  iface enp216s0f1 inet manual
     bond-master bond0
     bond-primary enp216s0f0 enp216s0f1

再起動

# reboot

再起動後に /var/log/syslog を確認してエラーが出ていないことを確認する. また, ping が通るか確認する.

# ping 10.0.100.28
  .....

IPv6 無効化

# vi /etc/sysctl.conf  

  # disable IPv6
  net.ipv6.conf.all.disable_ipv6 = 1

有効化

# sysctl -p

確認

# ifconfig

ssh X11 forwarding

IPv6 サポートを切っている場合は,以下の設定を入れておかないと ssh -Y をした時に自動的に DISPLAY 環境変数が設定されない.

# vi /etc/ssh/sshd_config 

  AddressFamily inet

実際に試してみる.

(PC) $ ssh 10.0.100.24 -Y

(Server)$ echo $DISPLAY

   localhost:10.0

ディスクの設定

ncsv1, ncsv2, ncsv3, ncsv4

10 TB ディスクをローカルディスク (/lwork) としてマウントする. 特にバックアップは取らない.

# mkdir /lwork

# apt-get install parted

# parted /dev/sdb   (ntc1 は /dev/sda)

  (parted) mkpart
  Partition name?  []?
  File system type?  [ext2]? ext4
  Start? 0
  End? -0

# parted -l   (確認)

# mkfs.ext4 /dev/sdb1  (ntc1 は /dev/sda1)

/etc/fstab の設定

# ls /dev/disk/by-partuuid/ -l    (UUID の確認)

# vi /etc/fstab

  PARTUUID=355fb3c1-5b58-4419-b718-61fb84a9231c /lwork   ext4    defaults 0       1 

マウント

# mount -a

# df  (確認)

iSCSI (ログインノードのみ)

ログインノードで iSCSI Initiator の設定をおこない,ファイルサーバの公開しているディスクを受ける.

# apt-get install open-iscsi

# vi /etc/iscsi/iscsid.conf

  node.session.auth.authmethod = CHAP  
  node.session.auth.username = XXXXX
  node.session.auth.password = XXXXXX

  discovery.sendtargets.auth.authmethod = CHAP
  discovery.sendtargets.auth.username = XXXXXXXX
  discovery.sendtargets.auth.password = XXXXXXXXXX

  node.startup = automatic

# systemctl restart iscsid open-iscsi

サーバで公開しているターゲットの確認

# iscsiadm --mode discovery --type sendtargets --portal 10.0.100.25

個別的なアクセス (login, logout)

# iscsiadm  -m node  --targetname "iqn.2021.matsue.ncsv:zfs.raidz0.ncsv-1" --portal "10.0.100.25:3260" --login
# iscsiadm  -m node  --targetname "iqn.2021.matsue.ncsv:zfs.raidz0.ncsv-1" --portal "10.0.100.25:3260" --logout

登録ノードの表示,削除. discovery したものが入るので,余計なものは消す

# iscsiadm --mode node 
# iscsiadm --mode node --op delete --targetname iqn.2021.matsue:zfs.raidz1.redn-4

# iscsiadm --mode node 
  10.0.100.28:3260,-1 iqn.2021.matsue:zfs.raidz1.ncsv-4
  10.0.100.25:3260,-1 iqn.2021.matsue:zfs.raidz0.ncsv-1
  10.0.100.27:3260,-1 iqn.2021.matsue:zfs.raidz1.ncsv-3
  10.0.100.26:3260,-1 iqn.2021.matsue:zfs.raidz1.ncsv-2

ターゲットにまとめてログイン

# iscsiadm --mode node --login

# ls /dev/disk/by-path/  -l
  lrwxrwxrwx 1 root root  9  5月  5 17:48 ip-10.0.100.25:3260-iscsi-iqn.2021.matsue:zfs.raidz0.ncsv-1-lun-0 -> ../../sde
  lrwxrwxrwx 1 root root  9  5月  5 17:48 ip-10.0.100.26:3260-iscsi-iqn.2021.matsue:zfs.raidz1.ncsv-2-lun-0 -> ../../sdg
  lrwxrwxrwx 1 root root  9  5月  5 17:48 ip-10.0.100.27:3260-iscsi-iqn.2021.matsue:zfs.raidz1.ncsv-3-lun-0 -> ../../sdf
  lrwxrwxrwx 1 root root  9  5月  5 17:48 ip-10.0.100.28:3260-iscsi-iqn.2021.matsue:zfs.raidz1.ncsv-4-lun-0 -> ../../sdd

# iscsiadm --mode node --logout

/etc/iscsi/iscsid.conf で "node.startup = automatic" にする前に discovery した場合は, 自動ログインの設定を手動で行わねばならない.

# iscsiadm --mode node  --op update --targetname iqn.2021.matsue:zfs.raidz0.ncsv-1  --op=update --name=node.startup --value=automatic

# cat /etc/iscsi/nodes/iqn.2021.matsue\:zfs.raidz0.ncsv-1/10.0.100.25\,3260 

ZFS (ログインノードのみ)

ログインノードで設定を行う

  • backports の設定.

    # vi /etc/apt/sources.list 
    
      (以下を追加)
      # Backports repository
      deb http://deb.debian.org/debian buster-backports main contrib non-free 
  • パッケージのインストール. backports からパッケージを入れる.

    # apt update
    # apt install linux-headers-`uname -r`
    # apt install -t buster-backports dkms spl-dkms
    # apt install -t buster-backports zfs-dkms zfsutils-linux
    
    # reboot
  • ディスクプールの作成
    • ディスクのラベルの確認. 0x5000cca0b0cbf588 といった ID はディスクに印字されているので, それを使うことにする.

      # ls -l /dev/disk/by-id/
    • raidz1 で作成

      # zpool create pool0 raidz ip-10.0.100.25:3260-iscsi-iqn.2021.matsue:zfs.raidz0.ncsv-1-lun-0   ip-10.0.100.26:3260-iscsi-iqn.2021.matsue:zfs.raidz0.ncsv-2-lun-0 ip-10.0.100.27:3260-iscsi-iqn.2021.matsue:zfs.raidz0.ncsv-3-lun-0 ip-10.0.100.28:3260-iscsi-iqn.2021.matsue:zfs.raidz0.ncsv-4-lun-0      
  • zfs ファイルシステムの作成. -o atime=off をつけるべき

    # zfs create -o atime=off pool0/work
    # zfs set mountpoint=/work pool0/work

備忘録

もし起動時に ZFS のディスクがマウントされていなかったら,以下を行う.

# zfs import
# zfs import pool0
# zfs list
# zfs status pool0

NFS の設定

サーバ (ログインノード)

# apt-get update
# apt-get install nfs-kernel-server

ダミーの /etc/exports を作っておく

# echo "/mnt localhost(ro)" >> /etc/exports
# sudo systemctl start nfs-kernel-server.service

ZFS の sharenfs 機能を使う

# zfs set sharenfs=on pool0/work
# zfs get sharenfs pool0/work

  NAME        PROPERTY  VALUE     SOURCE
  pool0/work  sharenfs  on        local

# showmount -e localhost

  Export list for localhost:
  /work *
  /mnt  localhost

オプションの設定

# zfs set sharenfs="rw=@10.0.100.0/24,no_root_squash,subtree_check" pool0/work

# zfs get sharenfs pool0/work

  NAME        PROPERTY  VALUE                                                                SOURCE
  pool0/work  sharenfs  rw=@10.0.100.0/24,no_root_squash,subtree_check  local

クライアント (ログインノード以外)

注: なぜか一度 reboot しないと nfs mount 出来なかった. なぜ?

# apt-get install nfs-common

テスト

# mkdir /work 
# mount -t nfs 10.0.100.24:/work /work
# umount /work

AutoFS

# apt-get install autofs

# echo "/-  /etc/auto.mount" >> /etc/auto.master
# echo "/work -fstype=nfs4,rw 10.0.100.24:/work" >> /etc/auto.mount

# systemctl restart autofs

"ls /work/sugiyama/" してから df コマンドを実行すると,/work にマウントされていることがわかる.

firewall

インストール

# apt-get update
# apt-get install ufw 

IPv6 無効化

# /etc/default/ufw

  IPV6=no

設定

# ufw default allow incoming   (全ての受信パケットを許可)
# ufw default deny outgoing    (全ての送信パケットを拒否)
# ufw logging on  (ログの有効化)
# ufw allow out  to 10.0.100.0/24    (10.0.100.0/24 宛ての全ての送信パケットを許可)
# ufw reject out to 10.0.0.0/8 app 'WWW Full'      (http, https を内部ネットワークへ送信することは許可しない)
# ufw allow out 'WWW Full'                         (外部への http, https を許可)
# ufw allow out to 10.0.0.1 app DNS                 (名前引き)
# ufw allow out to 10.0.0.7 app DNS           (名前引き)
# ufw allow out ntp                                 (NTP)
# ufw enable          (ufw を有効化)

確認

# ufw status verbose

  Status: active
  Logging: on (low)
  Default: allow (incoming), deny (outgoing), disabled (routed)
  New profiles: skip

  To                         Action      From
  --                         ------      ----
  10.0.100.0/24              ALLOW OUT   Anywhere                  
  10.0.0.0/8 80,443/tcp (WWW Full) REJECT OUT  Anywhere                  
  80,443/tcp (WWW Full)      ALLOW OUT   Anywhere                  
  10.0.0.1 53 (DNS)          ALLOW OUT   Anywhere                  
  10.0.0.7 53 (DNS)          ALLOW OUT   Anywhere                  
  123/udp                    ALLOW OUT   Anywhere           

TODO: SMTP は?

Infiniband <==> Ethernet

AMD EPYC 搭載サーバは, MCX556A-ECA という FiberChannel と Ethernet の 両方で使えるカードが搭載されている. デフォルトでは FiberChannel のモードに なっているので, mstflint ツールを用いて設定変更を行う.

Mellanox の説明では, mlxconfig というコマンドを使うことになっているが, パッケージを入れても mlxconfig コマンドが見当たらなかった.... なぜ?

# apt-get install mstflint

# lspci | grep Mellanox

  21:00.0 Infiniband controller: Mellanox Technologies MT27800 Family [ConnectX-5]
  21:00.1 Infiniband controller: Mellanox Technologies MT27800 Family [ConnectX-5]

# lspci -d 15b3:
# mstflint -d 21:00.0 q
# mstflint -d 21:00.1 q

# mstconfig -d 21:00.0 q

  ずらずら設定が流れる. 

# mstconfig -d 21:0.0 set LINK_TYPE_P1=2 LINK_TYPE_P2=2

  Device #1:
  ----------

  Device type:    ConnectX5
  Name:           MCX556A-ECA_Ax
  Description:    ConnectX-5 VPI adapter card; EDR IB (100Gb/s) and 100GbE; dual-port QSFP28; PCIe3.0 x16; tall bracket; ROHS R6
  Device:         21:0.0

  Configurations:                              Next Boot       New
           LINK_TYPE_P1                        IB(1)           ETH(2)
           LINK_TYPE_P2                        IB(1)           ETH(2)