User Tools

Site Tools


Sidebar

自作クラスタ計算機:nisの基本設定

概要

  • プライベートLAN内でコンピュータの設定(ユーザー情報など)を共有するシステムをNetwork Information Service (NIS) と呼びます
  • 複数人でクラスタ計算機を使用するとき、それぞれの計算ノードに各自のアカウントを一つずつ作成するのは非常に手間であるので、このシステムを使います
  • 共有する設定を管理するサーバをNISサーバと呼び、今回は管理ノードをその役割に当てます
  • 現在ではNISはレガシーなので(例えば以下で述べるアップデート関係の問題も一向に対処されません)、LDAPなど別の手段も検討してください

設定方法

管理ノード

  1. NISのパッケージをインストールする
    sudo apt install nis
    • 途中でNISドメイン名を聞かれので、好きなように設定してください(以下では kanri.nis とします)
    • 「NISドメイン名」はNISにより設定を共有するコンピュータのグループの名前のことで、DNSのドメイン名とは別物です
    • NISドメイン名は /etc/defaultdomain に保存されるので、変更したくなったらこのファイルを編集してください
    • 設定したNISドメイン名は次のコマンドで確認できます
      $ domainname 
  2. /etc/defalut/nis に管理ノードをNISサーバとすることを指定する
    $ sudo vi /etc/defalut/nis
    nis
    ...
    # Are we a NIS server and if so what kind (values: false, slave, master)?
    NISSERVER=master
    
    # Are we a NIS client?
    NISCLIENT=false
    ...
  3. /etc/yp.conf にNISサーバのIPアドレスまたはホスト名を指定する
    $ sudo vi /etc/yp.conf
    yp.conf
    ypserver 192.168.0.1
  4. /etc/ypserv.securenets の最終行をプライベートLANのネットマスクとIPアドレスに変更する
    $ sudo vi /etc/ypserv.securenets
    ypserv.securenets
    (略)
    # This line gives access to everybody. PLEASE ADJUST!
    #0.0.0.0	0.0.0.0
    255.255.255.0	192.168.0.0	
    • これによりプライベートネットワークからのみNISサーバへの接続を許可します
  5. NISを再起動します
    $ sudo systemctl restart rpcbind nis 
  6. NISデータベースを更新する
    $ sudo /usr/lib/yp/ypinit -m
    
    At this point, we have to construct a list of the hosts which will run NIS
    servers.  kanri is in the list of NIS server hosts.  Please continue to add
    the names for the other hosts, one per line.  When you are done with the
    list, type a <control D>.
            next host to add:  kanri
            next host to add:  # Ctrl + D キー
    The current list of NIS servers looks like this:
    
    kanri
    
    Is this correct?  [y/n: y]  y
    We need a few minutes to build the databases...
    (以下略)

計算ノード

  1. NISによってUbuntuがハングアップするのを防ぎます。
    $ sudo vim /lib/systemd/system/systemd-logind.service
    # IPAddressDeny=any をコメントアウト
    $ sudo systemctl daemon-reload
  2. NISのパッケージをインストールする
    $ sudo apt install nis
    • NISドメイン名は管理ノードで設定したものと同じにする
  3. /etc/yp.conf にNISドメイン名とNISサーバのIPアドレスを指定する
    $ sudo vi /etc/yp.conf
    yp.conf
    domain kanri.nis server 192.168.0.1
  4. /etc/nsswitch.conf に、/etc/ にある passwd, group, shadow, hosts はNISサーバのものを使用するように指定する(OSのバージョンによって微妙に変わってくるが、それぞれの項目の先頭に nis を付け加えるだけでオーケー)
    $ sudo vi /etc/nsswitch.conf
    nsswitch.conf
    (略)
    passwd:         nis files systemd
    group:          nis files systemd
    shadow:         nis files
    gshadow:        files
    
    hosts:          nis files dns
    (略)
    • ユーザ情報に加えてNISサーバで行われる名前解決も共有するようにしています
    • これにより、各計算ノードで /etc/hosts を編集する必要がなくなります
    • グループの管理は管理ノードのみで行いたいため、gshadow(グループのパスワードが暗号化されて入っているファイル)は共有しません
  5. NISを再起動します(やたら時間がかかります。10分くらい、原因不明)
    $ sudo systemctl restart rpcbind nis 
  6. どのマシンの情報が共有されているかを見て、正しく設定されたか確認します
    $ ypwhich
    kanri

使い方

  1. ユーザーを追加するには、管理ノードで次のようにします(以下はユーザーsugimotoを追加する場合)
    $ sudo adduser sugimoto
    $ sudo make -C /var/yp
    • NISサーバの共有する情報を変更したとき(つまりユーザーの追加したり、ホストファイルを編集したりしたとき)は、その都度 make -C /var/yp を実行する必要があります
  2. 新しいユーザで計算ノードにログインできるか確認します
    $ ssh sugimoto@keisan11

補足

ログインにやたら時間がかかる場合

  • Ubuntu18.04で発生を確認
  • Ubuntu20.04では未確認
$ sudo vim /lib/systemd/system/systemd-logind.service
# IPAddressDeny=any をコメントアウト
$ sudo systemctl daemon-reload

udevのアップデートに失敗する場合

  • apt upgrade をすると次のエラーを吐きます
    Job for systemd-udevd.service failed because a timeout was exceeded.
    See "systemctl status systemd-udevd.service" and "journalctl -xe" for details.
    invoke-rc.d: initscript udev, action "restart" failed.
    ● systemd-udevd.service - udev Kernel Device Manager
         Loaded: loaded (/lib/systemd/system/systemd-udevd.service; static; vendor preset: enabled)
         Active: activating (start) since Xxx xxxx-xx-xx xx:xx:xx UTC; 20ms ago
    TriggeredBy: ● systemd-udevd-kernel.socket
                 ● systemd-udevd-control.socket
           Docs: man:systemd-udevd.service(8)
                 man:udev(7)
       Main PID: 50463 (systemd-udevd)
          Tasks: 1
         Memory: 940.0K
         CGroup: /system.slice/systemd-udevd.service
                 └─50463 /lib/systemd/systemd-udevd
    
    xxx xx xx:xx:xx keisan11 systemd[1]: Starting udev Kernel Device Manager...
    dpkg: error processing package udev (--configure):
     installed udev package post-installation script subprocess returned error exit status 1
  • Ubuntu 18.04, 20.04 で発生を確認
$ sudo vim /lib/systemd/system/systemd-udevd.service
# IPAddressDeny=any をコメントアウト
$ sudo systemctl daemon-reload
$ sudo apt update
$ sudo apt upgrade

参考

自作クラスタ計算機/nisの基本設定.txt · Last modified: 2024/01/20 17:32 by koudai