No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 56 | 57 | 58 || Next»

Chainer のインストールに手こずる

Chainer というより CuPy のインストールに四苦八苦.最初に CUDA 9 を入れたらダメっぽいので CUDA 8 に入れ直してみたり,その後に cuDNN が有効になってないとか warning が出ているので cuDNN を入れて諸々して pip install --no-cache-dir -I で何度か再コンパイルするも cuDNN が全然認識されなかったり.結局 cuDNN は無くても動くことがわかったので諦めた.

んで,Chainr のサンプル train_mnist.py を time で測ってみたら CPU(8コアx2)で 6分,GPU(1080)で 50秒.GPU のが 7倍くらい速い.cuDNN 有効にしたらもっと速くなるのだろうか?

とりあえずこれで DL で遊べる環境が出来たので,何かネタ学習をやらせてみようかね.

LDAP で ssh の公開鍵管理

ホームディレクトリを共有しないマシン達で ssh の公開鍵だけでも共有したいなと.何やら LDAP に置けるらしいのでやってみた.

とりあえず,LDAP サーバでスキーマ追加.sshPublicKey を持ち得る ldapPublicKey というオブジェクトクラスを定義する.

cat > openssh-lpk.ldif <<'EOF'
dn: cn=openssh-lpk,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: openssh-lpk
olcAttributeTypes: ( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey'
  DESC 'MANDATORY: OpenSSH Public key'
  EQUALITY octetStringMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 )
olcObjectClasses: ( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' SUP top AUXILIARY
  DESC 'MANDATORY: OpenSSH LPK objectclass'
  MAY ( sshPublicKey $ uid )
  )
EOF
sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f openssh-lpk.ldif

次に,ssh サーバにスクリプトを置いて LDAP から鍵を取れるようにする(ドメインとかはテキトウな値を書いている).

cat > get_pubkey_LDAP <<'EOF'
#!/bin/bash
if test ${EUID:-${UID}} != 0; then
    echo "run as root"
    exit 0
fi
if test "x$1" = "x"
then
  echo "usage: $0 UID"
  exit
fi
uid=$1
dcs="dc=fuga,dc=hoge,dc=jp"
ldapsearch -x -H ldapi:/// -b $dcs -LLL -D cn=admin,$dcs -w admin_pass_here "(& (objectClass=posixAccount) (uid=${uid}))" "sshPublicKey" | sed -e '1d;s/^ //' | sed -e 'H;$!d;g;s/\n//g' | sed -e 's/sshPublicKey: /\n/g' | sed -e '1d'
EOF
chmod 700 get_pubkey_LDAP
sudo cp get_pubkey_LDAP /etc/ssh/get_pubkey_LDAP

そして /etc/ssh/sshd_config にこのスクリプトを使うように追記:

AuthorizedKeysCommand /etc/ssh/get_pubkey_LDAP
AuthorizedKeysCommandUser root

もともと ~/.ssh/authorized_keys が有効なら,これで authorized_keys と LDAP と両方見に行ってくれる.

あとはユーザアカウント毎に鍵を LDAP に入れる.そのためにまずアカウントを ldapPublicKey クラスに入れる:

username="your_account_name"
dcs="dc=fuga,dc=hoge,dc=jp"
cat << << EOF | ldapadd -x -H ldapi:/// -D cn=admin,$dcs -w admin_pass_here
dn: uid=$username,ou=people,$dcs
changetype: modify
add: objectClass
objectClass: ldapPublicKey
EOF

そしてユーザの鍵を追加する:

username="your_account_name"
dcs="dc=fuga,dc=hoge,dc=jp"
pubkey=$( cat $YOUR_PUBLIC_KEY )
cat << EOF | ldapadd -x -H ldapi:/// -D cn=admin,$dcs -w admin_pass_here
dn: uid=$username,ou=people,$dcs
changetype: modify
add: sshPublicKey
sshPublicKey: $pubkey
EOF

なお,LDAP に鍵は複数個登録可能.あとは ssh サーバに置くスクリプトが複数の鍵に対応してればいい(と思う).

StrongSwan

Ubuntu を 12.04 とかからアップデートしたら,VPN が通らなくなった.何が悪いんだろうかとログを見てみたらどうも OpenSwan が消えてなくなったようで.いつの間に?

ということで,設定そのままで sudo apt-get install strongswan と叫んで StrongSwan を入れたら普通に動いた.めでたしめでたし.

expect コマンド

「こういう文字列がターミナルに来たら,文字出力とかをしろ」というのをやってくれるコマンド.条件と動作を簡単な言語で書ける.

パスワード認証しかできない ssh サーバに繋いで自動で何かをさせるとかいうのに有用.とりあえず裏でパスワード入れてくれて何もなかったかのように振る舞うだけのもの:

ssh_connect() {
expect <(echo '
  set timeout -1
  proc password_input {} {
    global password
    send $password
    send "\n"
    expect "password:" password_input "Password:" password_input "Last login:" begin_interact
  }
  proc begin_interact {} {
    log_user 1
    interact
  }
  log_user 0
  eval spawn -noecho /usr/bin/ssh -t -o StrictHostKeyChecking=no user@ssh_host
  expect "Password:" password_input "password:" password_input "Last login:" begin_interact
')
}

閑話休題.

サーバによって "password: " だったり "Password:" だったりでハマった.どうも一部のマシンに入れないなぁと思っていたら一文字目の大文字小文字が違ったとは.

Mailman で ML の設定をコマンドラインから

何やら config_list とかいうコマンドがあるようで.config_list -o mlconf.py list_name とかやると各種設定を代入する python プログラム片が手に入る(-o の後のファイルに書き出される)ので,必要なところだけ代入値を書き換えてあげて config_list -i mlconf.py list_name とすれば設定できる.

書き換える必要のない代入は無くてもいいので,例えば複数のリストに対して footer を空にする設定を反映したければ,msg_footer = '' とだけ書いたファイルを用意して for でリスト名をぶん回せばいい.

まあ,年度ごとに ML を用意するときとかに“いつもの設定”をファイルに書いておけば ML の用意がスクリプト一発になるので便利.GUI でやるのは面倒すぎる.

aliases の :include:

エイリアスをメーリングリスト的に使うときに転送先のアドレスを別のファイルに書いて置ける機能.今までカンマ区切りで一行に列挙してたよ……(大きなサイズの ML は Mailman だったし).

ということで,hoge-ml というメーリングリストのメンバーを /etc/mail-aliases/hoge-ml-members に書き並べておいて,/etc/aliases に次を書いて newaliases すればよいと.

hoge-ml:	:include:/etc/mail-aliases/hoge-ml-members

これでファイル内に列挙されたメンバーに送られる.しかもこのメンバーを列挙したファイルの更新時には newaliases はいらないので楽という.

メンバーを列挙したファイルを使うと Mailman と違ってメンバーのメタ情報をコメントとしてかなり自由に書いておけるので,メタ情報を含めてのメンバー管理に便利かもしれない.Mailman でも"名前"として文字列を保存できるけど変なものを書くと事故りそうだし.

だがしかし,やっぱりメールヘッダに連番入れたくなるので Mailman と連携し始めるとかいうオチかな.

«Prev || 1 | 2 | 3 |...| 56 | 57 | 58 || Next»
Search
Feeds

Page Top