RedHat EL7にDKMSをインストール

RHELファイルシステムの拡張を行うために、Kernel Moduleをインストールする必要があるのだが、その際にDKMS(Dynamic Kernel Module Supportという機能を使うことができる。だが、当然DKMS自体をインストールする必要がある。

DKMSのインストール方法をあちこち探して要約見つけた。

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm;
# yum install dkms kernel-devel-$(uname -r) kernel-headers-$(uname -r);
...
...
# dkms
Usage: /usr/sbin/dkms [action] [options]
  [action]  = { add | remove | build | install | uninstall | match | autoinstall
               | mkdriverdisk | mktarball | ldtarball | mkrpm | mkkmp | mkdeb | status }
  [options] = [-m module] [-v module-version] [-k kernel-version] [-a arch]
              [-d distro] [-c dkms.conf-location] [-q] [--force] [--all]
              [--templatekernel=kernel] [--directive='cli-directive=cli-value']
              [--config=kernel-.config-location] [--archive=tarball-location]
              [--kernelsourcedir=source-location] [--no-prepare-kernel] [--no-initrd]
              [--binaries-only] [--source-only] [-r release (SuSE)] [--verbose]
              [--size] [--spec=specfile] [--media=floppy|iso|tar] [--legacy-postinst=0|1]
              [--no-depmod]
Error! No action was specified.

おお・・入った入った!

OpenLDAPとKerberos認証の統合について

OpenLDAPの設定にslapd.dが用いられることが一般的になってしまい、OpenLDAPとKerberos認証に苦労していたのですが、ここにまとめがありました。

これを参考にしてようやくRaspberryPIで認証とユーザー・グループ管理の統合がようやくうまくいきました。

http://www.rjsystems.nl/en/2100-d6-openldap-provider-kerberos.php

必須文房具リスト

チームワークを行う際に必要な文房具のリスト

購入するためのリンクもつけておきました。

起業に向けたCorporate Sloganの作り方

起業に向けたCorporate Sloganの作り方です。

おそらく色々な作り方があると思うのですが、以下の五つの質問に答えることによって自然と文章が組み立てられる方法です。

  • 何が目的か
  • 自分たちの長所は
  • ターゲットとする顧客は
  • リソース(人的、経済的)にリミットが無ければ何をする
  • 最終的にどうなりたいか

(ゴール)のために(長所)をもって、(顧客)に(理想)をもたらし(最終目標)を目指す会社。

統合認証のIDはフルネーム表記にするべきか、ハンドル名にするべきか

企業によってはActive DirectoryやKerberosの統合認証のログインIDに、例えば"yusuke.izumi@EXAMPLE.COM"といったように、フルネーム表記で統一しているところもあると思います。この命名規則は基本的におすすめしません。国籍にもよると思いますが、基本的に1,000人位の企業になってくると、ローマ字表記で同姓同名のスタッフ出てくるからです。そうすると"yusuke.izumi2@EXAMPLE.COM"といったようなIDを作らざるを得ない非常に残念な運用になってしまいます。

その点、ハンドル名の場合は、はじめのイズミユウスケさんであれば「yizumi@EXAMPLE.COM」にし、二人目のイズミユウスケさんは「yusukeiz@EXAMPLE.COM」にしてしまえば何も問題ありません。厳格なルールは持たずに、本人がその組織に入った時に自分で8文字のIDを決めさせてしまうのもいいかもしれません。ハッカーコミュニティーの人たちはその世界でユニークなハンドル名で通っている敏腕エンジニアの方もいるので「chubaccaにしたい!」とかいう変人がいても嫌な顔せずに稟議を通していいと思います。不思議なことに、こういう人たちのハンドル名はみんなちゃんと8文字に収まっています。(昔から使っているUnixのIDをコミュニティーのハンドル名にしている人が多いので、別に不思議でもなんでもないんです!)

また、たいした事ではないのですが「ユーザIDは最大8文字」という前提で出力のフォーマットを決めているコマンドも多数あるので、8文字以上になるとIDが切れてしまったり、フォーマットが崩れたりすることもあります。

結論的には、統合認証のIDは最大8文字のハンドル名で運用することを強くお勧めします。

「メールアドレスは社外の人にも露出しないといけないので、奇妙なハンドル名はダメ!」という人もいますが、それはメールサービスの方でいかようにでも設定できるのであまり気にすることはないかと。ログインIDとは関係のない話です。

OpenAFS (Introduction)

OpenAFSとは?

AFS(Andrew File System)は分散型ファイルシステム(Distributed File System)の一種です。1983年にカーネギーメロン大学が開発を開発し、商用化・販売するのにTransarc社(後のIBM Pittsburg Labs)が設立され、オープンコミュニティーでも利用できるようにしたものがOpenAFSです。現在は大学などの教育機関、大企業、行政などで広く使われています。Network File Server(NFS)は単一のサーバーでファイルを管理・共有するのに対し、DFSは複数のファイルサーバーで同期を取りながらファイルを共有することができるためSPOFになる心配もなく、大量のホストで同じバイナリ―を共有して分散型システムを構築したり、他部署とのミドルウェアの共有などにも使用することが出来ます。

AFSの特徴はいくつかありますが、代表的な特徴をいくつか挙げると

クロスプラットフォーム
  • クライアントはMac, Linux, Windowsに対応している
  • どのプラットフォームのホストからも同一パスでファイルを参照することができる
  • 特殊シンボリックリンク(@sys)を使って、特定アーキテクチャでしか動かせないバイナリ―も同一パスで扱うことができる

バイナリ―に関しては、アーキテクチャーの差異も吸収できるので、例えばruby/python/javaも一回そのアーキテクチャ用にコンパイルさえしておけば、どのホストからも利用できるので、新サーバーのミドルウェアの設定が飛躍的に楽になります。

特殊シンボリックリンク(@sys)はかなり強力な機能で、例えばLocalのMacでテストしたrubyスクリプトもshebang行のパス情報も変えることすらなく、いきなり違うアーキテクチャーのホスト本番Linuxサーバーで実行することが出来ます。(後述します)

スケーラビリティ
  • NFSの場合だとそのホストのキャパシティーに依存してしまうが、OpenAFSの場合Volumeという単位でディレクトリを分解することができるため、あるパスの容量が不足したら、そのパスだけ別のボリュームサーバーに移動したり、パス内をさらに小さいVolumeに分解したりしていくらでも増やすことが出来る。
  • 参照頻度の高いファイルはMaster Slave方式で分散させることもできる。(更新頻度の高い地域に合わせてMasterの地理的場所を移動させる等のウルテクも可能です)

事前のキャパシティープラニングなどしなくても、後追いでいくらでも設定変更が可能ということです。

セキュリティ
  • 認証システムはKerberosを利用している。
  • どのユーザが(またはどのグループのユーザが)リスト権限、アクセス権限、書き込み権限、ロック権限をもつかが細かく設定できる。(フォルダに対してもファイルに対しても)これによりプロダクション用のパスワードが入ったファイルはプロダクション用IDしか読めない、とすることが出来る。(もちろんパスワードをファイル管理する運用はおすすめしませんが、MySQL等Kerberosをネイティブで対応できないミドルウェアも多数あるので)

ボリュームの概念図
f:id:panda4126:20130205100850j:plain

OpenAFSを使う前に

OpenAFSをインストールする前に色々と準備しておかないといけません。NTP, DNS, LDAPは一般の社内ネットワークなら十分整備されていると思いますが、Kerberosはあまりメジャーではないように思えます。

NTP

全ホストの時間を同期させる必要があります。主にはKerberos認証を正しく動作させるためですが、運用上はログのタイムスタンプ、DBサーバーならアプリケーションにおいて「取引時間の記録」等正確に記録する必要があるので、一般的にもホストの時間の同期は必須です。

DNS

ホストがQualified Nameでないとホスト認証が出来なくなり、結果Kerberosコマンドが使えなくなってしまいます。

http://panda4126.hatenablog.com/entry/installing-djbdns

Kerberos

KerberosのKの文字を見ただけで暗い顔をされる人もいるようですが、Kerberosをうまく使いこなせれば、統合ログインやSingle Sign-Onの基盤にもなりえますし、今後色々な成長業界にかかる色々な情報技術系の規制にも柔軟に対応できるでしょう。統合認証にActive Directoryを採用されている企業は多く、Active Directoryなら統合認証プロトコルにKerberosVを採用しているので、これで代用できるらしいのですが、まだ自分も実験中です。

LDAP

OpenAFSには必須ではないですが、Kerberosでホストへのログインを統合認証させたらユーザの管理はLDAPで行うべきでしょう。LDAPのホームディレクトリ設定を利用して、どのホストにログインしても、同じホームディレクトリがアクセスできる、というウルテクも可能です。

djbdnsの設定(Debian)

参考
http://network.station.ez-net.jp/special/djbdns/index.asp

Daemontoolsの設定

# apt-get install make gcc patch
# mkdir /package
# cd /package
# wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
# tar xvfz daemontools-0.76.tar.gz
# cd admin/daemontools-0.76/src
# vim error.h
-extern int errno;
+include <errno.h>
# cd admin/daemontools-0.76
# package/install
# ps -auxw | grep service
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
root      6381  0.0  0.2   1580   356 ?        S    19:36   0:00 svscan /service
root      6382  0.0  0.2   1408   276 ?        S    19:36   0:00 readproctitle service errors: ................................................................................................................................................................................................................................................................................................................................................................................................................
root      7979  0.0  0.4   1712   624 pts/0    S+   21:14   0:00 grep service

ucspi-tcpの設定

# cd /usr/local/src
# wget http://www.emaillab.org/djb/tools/ucspi-tcp/ucspi-tcp-0.88.tar.gz
# tar xvfz ucspi-tcp-0.88.tar.gz
# cd ucspi-tcp-0.88
# make
# make setup check

djbdnsの設定

# apt-get install dnsutils
# cd /package
# wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz 
# cd djbdns-1.05
# 
# groupadd djbdns
# useradd -d /dev/null -g djbdns -s /bin/true tinydns
# useradd -d /dev/null -g djbdns -s /bin/true dnslog
# useradd -d /dev/null -g djbdns -s /bin/false dnscache
# /usr/local/bin/tinydns-conf tinydns dnslog /etc/tinydns 127.0.0.1
# cd /etc/tinydns/root
# ./add-ns home.local 192.168.0.4 # Name-server record
# ./add-ns 0.168.192.in-addr.arpa 192.168.0.4 # reverse lookup record
# ./add-host dns1.home.local 192.168.0.4 # host name
# make
# ln -s /etc/tinydns /service
# ps -efa | grep tinydns
root      8482  6381  0 21:20 ?        00:00:00 supervise tinydns
tinydns   8483  8482  5 21:20 ?        00:00:00 /usr/local/bin/tinydns
root      8489  5208  0 21:20 pts/0    00:00:00 grep tinydns
# dig dns1.home.local @127.0.0.1

; <<>> DiG 9.6-ESV-R4 <<>> krb1.home.local @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20496
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;dns1.home.local.               IN      A

;; ANSWER SECTION:
dns1.home.local.        86400   IN      A       192.168.0.4

;; AUTHORITY SECTION:
home.local.             259200  IN      NS      a.ns.home.local.

;; ADDITIONAL SECTION:
a.ns.home.local.        259200  IN      A       192.168.0.4

;; Query time: 17 msec
;; SERVER: 192.168.0.4#53(192.168.0.4)
;; WHEN: Sat Oct 13 21:34:25 2012
;; MSG SIZE  rcvd: 84

dnscacheの設定

# dnscache-conf dnscache dnslog /etc/dnscache 192.168.0.4
# cd /etc/dnscache/root/ip
# touch 192.168.0
# cd ../servers
# echo 127.0.0.1 > home.local
# echo 127.0.0.1 > 0.168.192.in-addr.arpa
# ln -s /etc/dnscache /service/dnscache
# svstat /service/dnscache
/service/dnscache: up (pid 8835) 5 seconds
# dig www.google.com @127.0.0.1 # test the lookup of an external ip address

; <<>> DiG 9.6-ESV-R4 <<>> www.google.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24568
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:
www.google.com.         300     IN      A       74.125.235.147
www.google.com.         300     IN      A       74.125.235.144
www.google.com.         300     IN      A       74.125.235.146
www.google.com.         300     IN      A       74.125.235.145
www.google.com.         300     IN      A       74.125.235.148

;; Query time: 557 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sat Oct 13 21:40:56 2012
;; MSG SIZE  rcvd: 112

dnsの登録

# vim /etc/resolv.conf
-nameserver 192.168.0.1
+nameserver 192.168.0.4