計算サーバの構築
インストールメディア
- <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)