Phantasy Garden

はじめに

これは管理人がLinuxを導入しようとした時のインストールメモ記録です。後でまたインストールし直さなければならなくなったときに、細かいカスタマイズをメモしておくほうが都合がいいと思うので。他にもバグや仕様上の不満を回避するための方法などもリストアップしていくので、他の人がLinuxを導入する際の参考になれば幸いです。

Linux 環境

  • システム: VMware Player 7.1.2
  • OS: CentOS 7 (64bit)

目次

現行システム設定

参考情報: 旧システム設定

既に該当システムの使用を止め、メンテナンスをしなくなった情報を以下に記している。これらの情報は該当システムのバージョンアップに伴い、古くなって通用しない又は誤動作を引き起こす可能性がある。参考までに掲載しているが、使用する際には十分な確認の下、自己責任で行うようにすること。

環境設定

インストールに関する基礎知識

Linuxをインストール後、各種プログラムのインストールにはコマンドライン端末を使う。背景が灰色、インデント有り、コマンドラインのシンボル($、#)があれば、コマンドの実行を示す。端末の立ち上げは、例えばCentOSでは左上のメニューから「アプリケーション」→ユーティリティ」→「端末」を実行する。

$ vi

上記のコマンドは、vi(汎用テキストエディタ)プログラムを実行する。他に、gedit、emacsなどのテキストエディタがある。マニュアルではviコマンドの実行指示があるが、各自の使いやすいエディタへ適宜読み替えること。

#        ← root権限で実行するコマンド
$        ← ユーザ権限で実行するコマンド

上記の表記の違いは、プログラムを実行する権限の違いを示している。権限の一時的な切り替えにはsuコマンドを用いる。{User_Name}は実際のユーザ名に読み替えること。

$ su {User_Name}
$ exit
$ su -
# exit
$

コマンドオプションにハイフンを用いると、そのユーザでのログインを行う。用いない場合、権限のみの変更となる。またユーザ名を省略するとrootでのログインを試す。ユーザの一時切り替えを終わるには、exitコマンドを用いる。

更新設定

インストール直後は、とりあえずyum(RedHat系Linuxにおける標準アップデートマネージャ)を使ってパッケージの更新を行っておくこと。入手したインストールCD/DVDは、たいていの場合既に古いパッケージとなっている。

# yum update

追加リポジトリの設定を施しておくこと。登録しておかないと、各種メーカーのドライバをyumでインストールできず、非常に面倒くさいことになりやすい。CentOSに入れるならExtra Packages for Enterprise Linux (EPEL)を導入する。

# yum install epel-release

セキュリティ上、必要以上にrootキーを入力するのは好ましくない。予め特定のユーザにsudoで権限を委譲しておき、root権限でのソフトウェア実行にはsudoコマンドを付加して使用するべきである。root権限を委譲したいユーザを、wheelグループに追加する。一旦ログオフした後に有効。

# gpasswd -a {User_Name} wheel

wheelグループのroot権限が明示されていなければ、visudoコマンドでsudoersに関する設定を更新する。wheelグループのみsuを実行できるようにするには/etc/pam.d/suを編集する。

# visudo
# vi /etc/pam.d/su
// ----------------  Edit the file ----------------
# Uncomment the following line to require a user to be in the "wheel" group.
auth            required        pam_wheel.so use_uid

環境設定

makeやコンパイラ などの開発環境の導入を行う。yumならばgroupinstall機能である程度まとめてインストールできる。

$ sudo yum groupinstall "development tools"

groupinstallされないパッケージのうち、よく使うものをインストールする。

$ sudo yum install jasper-*
$ sudo yum install hdf5-*
$ sudo yum install ncl-*
$ sudo yum install ncview
$ sudo yum install lapack64-*
$ sudo yum install openmpi-*
$ sudo yum install netcdf-*

Googleのリポジトリを登録しておく。Chromeなどをyumでインストール、アップデートできるようになるので、セキュリティ上はrpmを直接インストールするより推奨。

$ sudo vi /etc/yum.repos.d/google.repo
// ----------------  Edit the new file ----------------
[google]
name=Google - i386
baseurl=http://dl.google.com/linux/rpm/stable/i386
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

[google64]
name=Google - x86_64
baseurl=http://dl.google.com/linux/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

ブラウザ、メールソフト、文書作成やプレゼンテーション資料作成のためのオフィスソフトなどをインストールする。

$ sudo yum install google-chrome-stable
$ sudo yum install thunderbird
$ sudo yum install libreoffice-*

MSゴシックなどと互換性の高いIPAフォントを使用したい場合はインストールしておく。

$ sudo yum install ipa-*-fonts

標準で使用可能なPDFビューア、FTPクライアントなどをインストールしておく。

$ sudo yum install evince
$ sudo yum install filezilla

GNOMEでデスクトップの詳細な設定を行うには、gnome-tweak-toolを利用する。

$ sudo yum install gnome-tweak-tool

個人フォルダにある日本語ディレクトリを削除・変更したい場合、~/.configにある設定ファイルを編集する。

$ vi ~/.config/user-dirs.dirs

エイリアス等、基本的な環境設定を施した.bashrcは以下の通り。

$ vi ~/.bashrc
// ----------------  Edit the new file ---------------- 
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
  . /etc/bashrc
fi

# User specific aliases and functions
export PAGER=less

alias rm='rm -iv'
alias cp='cp -iv'
alias mv='mv -iv'
alias ls='ls -F'
alias l='ls -Fl --color=auto'
alias L='ls -Fl --color=auto | less'
alias h='history'

viを扱う時のために、.vimrcを作成しておく。以下、.vimrcの中身。

$ vi ~/.vimrc
//  ---------------- Edit the new file ---------------- 
" User original settings

set backup
set backupdir=~/tmp
set noautoindent
set number
set nowrap
set noexpandtab
set tabstop=2
set softtabstop=0
set shiftwidth=2
"set listchars=tab:>\ ,trail:-,eol:<
"set list
set clipboard+=unnamed
set guioptions+=b

highlight ZenkakuSpace guibg=grey
match ZenkakuSpace / /

augroup BinaryXXD
  autocmd!
  autocmd BufReadPre  *.bin let &binary =1
  autocmd BufReadPost * if &binary | silent %!xxd -g 1
  autocmd BufReadPost * set ft=xxd | endif
  autocmd BufWritePre * if &binary | %!xxd -r | endif
  autocmd BufWritePost * if &binary | silent %!xxd -g 1
  autocmd BufWritePost * set nomod | endif
augroup END

" 文字コードの自動認識
if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
  " iconvがeucJP-msに対応しているかをチェック
  if iconv("x87x64x87x6a", 'cp932', 'eucjp-ms') ==# "xadxc5xadxcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
  " iconvがJISX0213に対応しているかをチェック
  elseif iconv("x87x64x87x6a", 'cp932', 'euc-jisx0213') ==# "xadxc5xadxcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
  " fileencodingsを構築
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
    let &fileencodings = &fileencodings .','. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# '^(euc-jp|euc-jisx0213|eucjp-ms)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
  " 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
  function! AU_ReCheck_FENC()
    if &fileencoding =~# 'iso-2022-jp' && search("[^x01-x7e]", 'n') == 0
      let &fileencoding=&encoding
    endif
  endfunction
  autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  set ambiwidth=double
endif

参考サイト

Iptables

Linuxカーネル2.4以降の標準ファイアウォール。市販のファイアウォールなどよりもかなり細かく設定することができる。その分、中身を理解するのは面倒。セキュリティ関係の設定は他人に迷惑をかけることにもなりかねないので、自分で責任を負える人にのみ推奨。

Iptablesの設定は応用を利かせやすくするために、シェルスクリプトに記述して逐一設定するのがいい。以下、Iptablesの設定の流れ。

  1. 初期化と初期設定。(Initialized and Default Rules)
  2. フィルタリングの基本設定。(Basic Rules)
  3. 各種攻撃の防御設定。(IP Spoofing/Ping of Death/SYN Flood/Port Scan)
  4. フィルタリングの拡張設定。(Each Protocol Rules)
  5. ルールの保存。(Save Rules)

NICが一枚の場合、IP Spoofingでは自分のLANに対して拒否しないようにする。LAN上の他ホストと通信できなくなる可能性がある。実際に設定を適用するには、ルート権限でこのシェルスクリプトを実行するだけでよい。(iptablesを再起動する必要はない。下記コマンドは次節で説明するスクリプト実行ファイル)

# /root/bin/iptables-rule

iptables-saveを実行すると、現在の設定が保存される。iptablesを再起動して、実際に設定の変更が保存されているかどうかを確認する。確認方法は以下のコマンドを実行する。

# iptables -nvL

簡易フィルタリング設定

LAN内クライアントの場合の簡易セキュリティポリシー。

  • 外部からのパケットは基本的に破棄する。(指定許可方式)
  • 内部から出ていくパケットは基本的に許可する。(指定拒否方式)
  • ルータ使用はないので、転送パケットは全て破棄する。
  • localhost(自分自身)からのアクセスは無制限に許可する。
  • 接続が確立したパケットについてはアクセスを許可する。

Iptablesはリストの上から順に評価し、条件にマッチした場合にターゲット(ACCEPT・DROP等)を実行する。よって記述の順序にも意味があるということを意識しておく。外部に接続するインターフェースは全てeth0。NIC二枚差し等の場合はeth1等々、インターフェースの設定は変更しなければならないかもしれない。使用インターフェースはifconfigで確認。以下、スクリプトが記述されたiptables-client-ruleの内容。実行可能ファイルにしておき、/usr/local/sbinや/root/bin以下にインストールする。

# vi /root/bin/iptables-rule
// ----------------  Edit the new file  ----------------
#!/bin/bash

# Values Setting
LO_IP="127.0.0.1"
LO_IF="lo"
LAN_IF0="eth0"

# Initialized and Default Rules
iptables -F
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Basic Rules
iptables -A INPUT -p all -i $LO_IF -s $LO_IP -d $LO_IP -j ACCEPT
iptables -A OUTPUT -p all -o $LO_IF -s $LO_IP -d $LO_IP -j ACCEPT
iptables -A INPUT -p all -i $LAN_IF0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p all -o $LAN_IF0 -j ACCEPT

# Each Protocol Rules

# Save Rules
iptables-save

サーバ設定

NIC二枚差しでLinuxをルータ化して使い、LAN内クライアントにサーバを公開する場合の設定。WAN側には公開しない。使用インターフェースはeth0とeth1とする。ファイアウォールの設定の他、LinuxサーバでIPフォワードを許可する設定を行わなければならない。以下のコマンドを実行。

echo 1 > /proc/sys/net/ipv4/ip_forward

または/etc/sysctl.confを設定することで、OSブート時に自動で設定することができる。

# vi /etc/sysctl.conf
// ----------------  Edit the file  ----------------
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1 # IP Spoofingの防御
net.ipv4.tcp_syncookies = 1   # SYN Flood攻撃への対処

/etc/sysctl.confは各防御設定も組み込める。必要に応じて設定を有効化する。

実際の設定例。外部ネットワークはeth0側、内部ネットワークはeth1側とする。

# vi /root/bin/iptables-rule
// ----------------  Edit the new file  ----------------
#!/bin/bash

# Values Setting
LO_IP="127.0.0.1"
LAN_IP="192.168.0.1"
LAN_NET="192.168.0.0/24"
LO_IF="lo"
WAN_IF="eth0"
LAN_IF="eth1"
LAN_BCAST="192.168.0.255"

# Initialized and Default Rules
iptables -F
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Basic Rules
iptables -A INPUT -p all -i $LO_IF -s $LO_IP -d $LO_IP -j ACCEPT
iptables -A OUTPUT -p all -o $LO_IF -s $LO_IP -d $LO_IP -j ACCEPT
iptables -A INPUT -p all -i $WAN_IF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p all -o $WAN_IF -j ACCEPT
iptables -A INPUT -p all -i $LAN_IF -d $LAN_IP -s $LAN_NET -j ACCEPT
iptables -A OUTPUT -p all -o $LAN_IF -s $LAN_IP -j ACCEPT
iptables -A INPUT -p all -i $LAN_IF -d $LAN_BCAST -j ACCEPT

# IP Masquerade and Transport
iptables -t nat -A POSTROUTING -o $WAN_IF -s $LAN_NET -j MASQUERADE
iptables -A FORWARD -p all -o $WAN_IF -i $LAN_IF -s $LAN_NET -j ACCEPT
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

# IP Spoofing
iptables -N TCP-DROP
iptables -A TCP-DROP -p tcp ! --syn -m state --state NEW -j LOG --log-level info --log-prefix "INVALID TCP Packet: "
iptables -A TCP-DROP -p tcp ! --syn -m state --state NEW -j DROP
iptables -A TCP-DROP -i $WAN_IF -s 0.0.0.0/8 -j DROP
iptables -A TCP-DROP -i $WAN_IF -s 10.0.0.0/8 -j DROP
iptables -A TCP-DROP -i $WAN_IF -s 127.0.0.0/8 -j DROP
iptables -A TCP-DROP -i $WAN_IF -s 169.254.0.0/16 -j DROP
iptables -A TCP-DROP -i $WAN_IF -s 172.16.0.0/12 -j DROP
iptables -A TCP-DROP -i $WAN_IF -s 192.0.2.0/24 -j DROP
#iptables -A TCP-DROP -i $WAN_IF -s 192.168.0.0/16 -j DROP
iptables -A TCP-DROP -i $WAN_IF -s 224.0.0.0/4 -j DROP
iptables -A TCP-DROP -i $WAN_IF -s 240.0.0.0/5 -j DROP
iptables -A TCP-DROP -i $WAN_IF -s 248.0.0.0/5 -j DROP
iptables -A TCP-DROP -i $WAN_IF -s 255.255.255.255/32 -j DROP

# Ping of Death
iptables -N PING-OF-DEATH
iptables -A PING-OF-DEATH -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A PING-OF-DEATH -i $WAN_IF -j LOG --log-level info --log-prefix "PING-OF-DEATH: "
iptables -A PING-OF-DEATH -j DROP
iptables -A INPUT -p icmp --icmp-type echo-request -j PING-OF-DEATH
iptables -A FORWARD -p icmp --icmp-type echo-request -j PING-OF-DEATH

# SYN Flood
iptables -N SYN-FLOOD
iptables -A SYN-FLOOD -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A SYN-FLOOD -i $WAN_IF -j LOG --log-level info --log-prefix "SYN-FLOOD: "
iptables -A SYN-FLOOD -j DROP
iptables -A INPUT -p tcp --syn -j SYN-FLOOD
iptables -A FORWARD -p tcp --syn -j SYN-FLOOD

# Port Scan
iptables -N PORT-SCAN
iptables -A PORT-SCAN -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A PORT-SCAN -i $WAN_IF -j LOG --log-level info --log-prefix "PORT-SCAN: "
iptables -A PORT-SCAN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j PORT-SCAN
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j PORT-SCAN

# Each Protocol Rules

# Save Rules
iptables-save

LAN内のクライアントに対しては、無制限に接続を許可するというあまり厳しくないセキュリティポリシー。これが問題ある場合、無制限許可のルールをコメントアウトし、各パケット・ホストのフィルタリングルールを作成する必要がある。

インターネットに直接接続するホストでスタンドアロンで動く場合は、IPマスカレード・パケット転送辺りの設定をコメントアウトすれば良い。

参考サイト

GrADS

正式名称はGrid Analysis and Display System。気象解析データの可視化ソフトウェアの一種。

バイナリインストール

GrADS Downloadで、対応するOSのバイナリが配布されていればそれを利用するのも良い。FedoraはRHEL互換なので、RHELのバイナリでも動作することが期待される。

バイナリのインストールは、圧縮ファイルを解凍したものを所定の場所に置くだけで良い。ソースコンパイルの項目を省略し、インストール後処理を行う。

# cd /tmp
# tar zxvf grads-2.0.1-*-x86_64.tar.gz
# mv grads-2.0.1 /opt

ソースコンパイル

目的のバイナリが配布されてない場合、もしくはバイナリの性能に不満がある場合はソースコンパイルが必要となる。

GrADS Downloadからソースファイルをダウンロード。解凍し、ディレクトリへ移動。

# cd /tmp
# tar zxvf grads-2.0.a9-src.tar.gz
# cd grads-2.0.a9

supplibsを作成し、この中にconfigureで必要なライブラリ等をコピーしていく。

# mkdir supplibs
# cd supplibs
# mkdir bin
# mkdir include
# mkdir lib
# mkdir src

yumのgroupinstall機能で、開発ツール・ライブラリをまとめてインストールしておく。

# yum groupinstall "development tools"
# yum groupinstall "development libraries"
# yum groupinstall "x software development"

グループインストールされない開発ライブラリをyumのinstall機能で個別に追加する。

# yum install freeglut-devel
# yum install readline-static
# yum install ncurses-static
# yum install zlib-static
# yum install libpng-static
# yum install libjpeg-static
# yum install g2clib-devel
# yum install udunits-devel
# yum install libxml2-static
# yum install libtiff-static

静的ライブラリをコピー。

# cp /usr/lib64/libz.a /tmp/grads-2.0.a9/supplibs/lib
# cp /usr/lib64/libpng12.a /tmp/grads-2.0.a9/supplibs/lib
# cp /usr/lib64/libjpeg.a /tmp/grads-2.0.a9/supplibs/lib
# cp /usr/lib64/libgrib2c.a /tmp/grads-2.0.a9/supplibs/lib
# cp /usr/lib64/libudunits.a /tmp/grads-2.0.a9/supplibs/lib
# cp /usr/lib64/libxml2.a /tmp/grads-2.0.a9/supplibs/lib
# cp /usr/lib64/libtiff.a /tmp/grads-2.0.a9/supplibs/lib

libsxはそのままでは静的ライブラリがインストールされないので、ソースを変更してインストールする必要がある。yumdownloaderを使って、ソースRPMをダウンロードし、インストール。

# cd ~
# yumdownloader --source libsx
# rpm -ivh *rpm

rpmbuildに移動する。RPMBUILDはOS環境に依存するので、ソースインストール先が~/rpmbuildではない場合もあることに注意。

# cd ~/rpmbuild

libsx.specに対する修正パッチを適用。修正内容はAppendix参照

# patch -p0 < libsx.patch

SPECSディレクトリへ移動し、specファイルからrpmを作成。

# cd SPECS
# rpmbuild -bb libsx.spec

rpmファイルをインストールする。

# rpm -ivh ~/rpmbuild/RPMS/x86_64/libsx-*.rpm

これで/usr/lib64以下に、libsx.aの静的ライブラリが配置される。作成したファイルをコピー。

# cp /usr/lib64/libsx.a /tmp/grads-2.0.a9/supplibs/lib

Libssh2を公式サイトから圧縮データをダウンロードする。圧縮データの解凍後、ソースディレクトリに移る。

# cd /tmp
# tar zxvf libssh2-1.2.7.tar.gz
# cd libssh2-1.2.7

ソースコンパイルのために、インストール用スクリプト(ここではinstallというファイル名とする)をエディタで記述する。

# vi install
// ---------------- Edit the new file ----------------
#!/bin/bash
DIR="/tmp/grads-2.0.a9/supplibs/src"

mkdir $DIR/ssh2
./configure --prefix=$DIR/ssh2
make
make install

スクリプトを実行する。

# sh install

作成したファイルをコピー。

# cd /tmp/grads-2.0.a9/supplibs/src/ssh2
# cp lib/*.a /tmp/grads-2.0.a9/supplibs/lib

GdをGrADS Supplibsからダウンロード。圧縮データの解凍後、ソースディレクトリに移る。

# cd /tmp
# tar zxvf gd-2.0.34.tar.gz
# cd gd-2.0.34

インストール用スクリプトをエディタで記述する。

# vi install
// ---------------- Edit the new file ----------------
#!/bin/bash
DIR="/tmp/grads-2.0.a9/supplibs/src"

mkdir $DIR/gd
./configure --prefix=$DIR/gd
make
make install

スクリプトを実行する。

# sh install

作成したファイルをコピー。

# cd /tmp/grads-2.0.a9/supplibs/src/gd
# cp lib/*.a /tmp/grads-2.0.a9/supplibs/lib
# mkdir /tmp/grads-2.0.a9/supplibs/include/gd
# cp include/* /tmp/grads-2.0.a9/supplibs/include/gd

JasperをGrADS Supplibsからダウンロード。圧縮データの解凍後、ソースディレクトリに移る。

# cd /tmp
# tar zxvf jasper-1.701.0.tar.gz
# cd jasper-1.701.0

インストール用スクリプトをエディタで記述する。

# vi install
// ---------------- Edit the new file ----------------
#!/bin/bash
DIR="/tmp/grads-2.0.a9/supplibs/src"

mkdir $DIR/jasper
./configure --prefix=$DIR/jasper
make
make install

スクリプトを実行する。

# sh install

作成したファイルをコピー。

# cd /tmp/grads-2.0.a9/supplibs/src/jasper
# cp lib/*.a /tmp/grads-2.0.a9/supplibs/lib

SzipをGrADS Supplibsからダウンロード。圧縮データの解凍後、ソースディレクトリに移る。

# cd /tmp
# tar zxvf szip-2.1.tar.gz
# cd szip-2.1

インストール用スクリプトをエディタで記述する。

# vi install
// ---------------- Edit the new file ----------------
#!/bin/bash
DIR="/tmp/grads-2.0.a9/supplibs/src"

export LIBS="-lm"

mkdir $DIR/szip
./configure --prefix=$DIR/szip
make
make install

スクリプトを実行する。

# sh install

作成したファイルをコピー。

# cd /tmp/grads-2.0.a9/supplibs/src/szip
# cp lib/*.a /tmp/grads-2.0.a9/supplibs/lib

HDF4をGrADS Supplibsからダウンロード。圧縮データの解凍後、ソースディレクトリに移る。

# cd /tmp
# tar zxvf HDF4.2r3.tar.gz
# cd HDF4.2r3

インストール用スクリプトを記述する。

# vi install
// ---------------- Edit the new File ----------------
#!/bin/bash
DIR="/tmp/grads-2.0.a9/supplibs/src"

export LD_LIBRARY_PATH="$DIR/szip/lib:${LD_LIBRARY_PATH}"
export LIBS="-lm"

mkdir $DIR/hdf
./configure --prefix=$DIR/hdf \
  --disable-netcdf --disable-fortran \
  --with-szlib=$DIR/szip
make
make install

スクリプトを実行する。

# sh install

作成したファイルをコピー。

# cd /tmp/grads-2.0.a9/supplibs/src/hdf
# cp lib/*.a /tmp/grads-2.0.a9/supplibs/lib
# mkdir /tmp/grads-2.0.a9/supplibs/include/hdf
# cp include/* /tmp/grads-2.0.a9/supplibs/include/hdf

HDF5をGrADS Supplibsからダウンロード。圧縮データの解凍後、ソースディレクトリに移る。

# cd /tmp
# tar zxvf hdf5-1.8.4-patch1.tar.gz
# cd hdf5-1.8.4-patch1

インストール用スクリプトを記述する。

# vi install
// ---------------- Edit the new File ----------------
#!/bin/bash
DIR="/tmp/grads-2.0.a9/supplibs/src"

mkdir $DIR/hdf5
./configure --prefix=$DIR/hdf5 \
  --disable-fortran \
  --with-szlib=$DIR/szip
make
make install

スクリプトを実行する。

# sh install

作成したファイルをコピー。

# cd /tmp/grads-2.0.a9/supplibs/src/hdf5
# cp lib/*.a /tmp/grads-2.0.a9/supplibs/lib
# mkdir /tmp/grads-2.0.a9/supplibs/include/hdf5
# cp include/* /tmp/grads-2.0.a9/supplibs/include/hdf5

CurlをGrADS Supplibsからダウンロード。圧縮データの解凍後、ソースディレクトリに移る。

# cd /tmp
# tar zxvf curl-7.19.6.tar.gz
# cd curl-7.19.6

インストール用スクリプトを記述する。

# vi install
// ---------------- Edit the new File ----------------
#!/bin/bash
DIR="/tmp/grads-2.0.a9/supplibs/src"

mkdir $DIR/curl
./configure --prefix=$DIR/curl \
  --without-ssl --without-libidn \
  --enable-static --disable-ldap
make
make install

スクリプトを実行する。

# sh install

作成したファイルをコピー。

# cd /tmp/grads-2.0.a9/supplibs/src/curl
# cp lib/*.a /tmp/grads-2.0.a9/supplibs/lib

NetCDFをGrADS Supplibsからダウンロード。圧縮データの解凍後、ソースディレクトリに移る。

# cd /tmp
# tar zxvf netcdf-4.1.1-rc2.tar.gz
# cd netcdf-4.1.1-rc2

インストール用スクリプトを記述する。

# vi install
// ---------------- Edit the new file ----------------
#!/bin/bash
DIR="/tmp/grads-2.0.a9/supplibs/src"

mkdir $DIR/netcdf
./configure --prefix=$DIR/netcdf \
  --disable-f77 --enable-netcdf4 --enable-dap \
  --with-hdf5=$DIR/hdf5 \
  --with-szlib=$DIR/szip \
  --with-curl=$DIR/curl
make
make install

スクリプトを実行する。

# sh install

作成したファイルをコピー。

# cd /tmp/grads-2.0.a9/supplibs/src/netcdf
# cp lib/*.a /tmp/grads-2.0.a9/supplibs/lib
# mkdir /tmp/grads-2.0.a9/supplibs/include/netcdf
# cp include/* /tmp/grads-2.0.a9/supplibs/include/netcdf
# cp bin/* /tmp/grads-2.0.a9/supplibs/bin

DapをGrADS Supplibsからダウンロード。圧縮データの解凍後、修正パッチを適用し、ソースディレクトリに移る。修正内容はAppendix参照

# cd /tmp
# tar libdap-3.7.8.tar.gz
# patch -p0 < libdap-3.7.8.patch
# cd libdap-3.7.8

インストール用スクリプトを記述する。

# vi install
// ---------------- Edit the new file ----------------
#!/bin/bash
DIR="/tmp/grads-2.0.a9/supplibs/src"

mkdir $DIR/dap
./configure --prefix=$DIR/dap \
  --with-curl=$DIR/curl
make
make install

インストール用スクリプトを実行。

# sh install

作成したファイルをコピー。

# cd /tmp/grads-2.0.a9/supplibs/src/dap
# cp lib/*.a /tmp/grads-2.0.a9/supplibs/lib

GadapをGrADS Supplibsからダウンロード。圧縮データの解凍後、修正パッチを適用し、ソースディレクトリに移る。修正内容はAppendix参照

# cd /tmp
# tar gadap-2.0.tar.gz
# patch -p0 < gadap-2.0.patch
# cd gadap-2.0

インストール用スクリプトを記述する。

# vi install
// ---------------- Edit the new file ----------------
#!/bin/bash 
DIR="/tmp/grads-2.0.a9/supplibs/src"

export LDFLAGS="-L$DIR/ssh2/lib"
export PATH="$DIR/dap/bin:${PATH}"

mkdir $DIR/gadap
./configure --prefix=$DIR/gadap
make
make install

インストール用スクリプトを実行。

# sh install

作成したファイルをコピー。

# cd /tmp/grads-2.0.a9/supplibs/src/gadap
# cp lib/*.a /tmp/grads-2.0.a9/supplibs/lib
# mkdir /tmp/grads-2.0.a9/supplibs/include/gadap
# cp include/* /tmp/grads-2.0.a9/supplibs/include/gadap

GeotiffをGrADS Supplibsからダウンロード。圧縮データの解凍後、ソースディレクトリに移る。

# cd /tmp
# tar libgeotiff-1.2.5.tar.gz
# cd libgeotiff-1.2.5

インストール用スクリプトを記述する。

# vi install
// ---------------- Edit the new file ----------------
#!/bin/bash 
DIR="/tmp/grads-2.0.a9/supplibs/src"

mkdir $DIR/geotiff
./configure --prefix=$DIR/geotiff \
  --enable-incode-epsg --enable-static
make
make -B install

インストール用スクリプトを実行。

# sh install

作成したファイルをコピー。

# cd /tmp/grads-2.0.a9/supplibs/src/geotiff
# cp lib/*.a /tmp/grads-2.0.a9/supplibs/lib
# mkdir /tmp/grads-2.0.a9/supplibs/include/geotiff
# cp include/* /tmp/grads-2.0.a9/supplibs/include/geotiff

ShapelibをGrADS Supplibsからダウンロード。圧縮データの解凍後、ソースディレクトリに移る。

# cd /tmp
# tar shapelib-1.2.10.tar.gz
# cd shapelib-1.2.10

makeを実行。

# make lib

作成したファイルをコピー。

# cp .libs/libshp.a /tmp/grads-2.0.a9/supplibs/lib
# mkdir /tmp/grads-2.0.a9/supplibs/include/shapelib
# cp shapefil.h /tmp/grads-2.0.a9/supplibs/include/shapelib

GrADSのソースディレクトリへ移動。インストール用スクリプトを記述する。

# cd /tmp/grads-2.0.a9
# vi install
// ---------------- Edit the new file ----------------
#!/bin/bash
DIR="/opt/grads-2.0.a9"

mkdir $DIR
./configure --prefix=$DIR
make
make install

インストール用スクリプトを実行。

# sh install

インストール後処理

次にデータ及びスクリプトファイルをダウンロード、インストールする。wgetを使用し、FTPサイトからデータを取得する。

# cd /opt/grads-2.0.a9
# mkdir data
# wget ftp://grads.iges.org/grads/data.tar.Z
# tar zxvf data.tar.Z -C data
# rm -f data.tar.Z
# mkdir scripts
# cd scripts
# wget ftp://grads.iges.org/grads/scripts/*
# chown 0:0 -R .

インストールが完了したら、環境設定を記述しておく。

# vi ~/.bashrc
// ---------------- Add to end of the file ----------------
# GrADS
export GRADS="/opt/grads-2.0.a9"
export PATH="${GRADS}/bin:${PATH}"
export GASCRP="${GRADS}/scripts"
export GADDIR="${GRADS}/data"

環境設定を有効にしたら終了。

# . ~/.bashrc

Appendix

GrADSのソースコンパイル時に使用する修正パッチ。内容はダウンロード後、確認のこと。

参考サイト

参考情報:旧システム設定

ATOK X3

Linuxでは珍しい商用ソフトであるが、日本語変換ソフトとしてはフリーソフトよりも遙かに優れ、数千円を払う価値があると思わせてくれるソフト。日本人のデスクトップ環境においては日本語変換ソフトの能力が業務効率に直接響いてくるものであるため、Linuxを使われる場合は是非とも使用を検討して欲しいものである。

ATOK X3のインストール

Atok X3 for Linuxの内部名称はatokx3になる。FedoraでのATOKの導入は、基本的にFedora 10でのインストール方法(参考記事)の通り。また、ウィンドウ左下に現れるIIIMFステータスを非常時にする設定を行う。

ダウンロード版のインストール方法を示す。ダウンロードした圧縮ファイルを解凍後、解凍したディレクトリに移動し、ルート権限でsetupatok.shを起動させる。DVD版はアップデートモジュールがあるので要確認。2011年3月現在、ダウンロード版ではアップデートモジュールが適用済みなので、これを適用する必要はない。

# tar zxvf /tmp/atokx3.tar.gz
# cd ATOKX3
# ./setupatok.sh

IIIMFステータス非表示ツールをダウンロード、解凍し、所定の場所に置く。

# gunzip /tmp/iiimf_status_hide.gz
# chown 0:0 /tmp/iiimf_status_hide
# chmod 755 /tmp/iiimf_status_hide
# mv /tmp/iiimf_status_hide /opt/atokx3/sample

インストールが完了したらセットアップ用のスクリプトを起動する。

# /opt/atokx3/sample/setting_redhat5.sh

64bit版OSでは、そのままではATOKが起動できない。64bit-OSの設定で、32bit版ソフトウェアをインストールする。さらに、/etc/X11/xinit/xinput.d/iiimf.confの修正が必要。

# vi /etc/X11/xinit/xinput.d/iiimf.conf
// ---------------- Edit the file  ---------------- 
XIM=iiimx
XIM_PROGRAM=iiimx
XIM_ARGS=-iiimd
GTK_IM_MODULE=iiim
QT_IM_MODULE=xim
#gnome-im-settings-daemon >/dev/null
DISABLE_IMSETTINGS=true

export HTT_DISABLE_STATUS_WINDOW=t
export HTT_GENERATES_KANAKEY=t
export HTT_USES_LINUX_XKEYSYM=t
export HTT_IGNORES_LOCK_MASK=t
export JS_FEEDBACK_CONVERT=t
/opt/atokx3/sample/iiimf_status_hide

以前のバージョンのATOKを使用したことがあれば、ホームディレクトリ直下に.xinputrcが存在することがある。これは邪魔になる可能性があるので削除しておく。

$ rm -f ~/.xinputrc

これで再起動すればATOK X3 for Linuxが使用可能。

アップデート時にscimが更新されないよう、yumの設定ファイルに例外設定を行う。

# vi /etc/yum.conf
// ---------------- Add the end of file ---------------- 
exclude=scim*

Firefox/Thunderbirdは、GTK_IM_MODULEをXIMにしておかなければ、終了時にクラッシュする。修正するには起動スクリプトに環境設定を書き込む。

# vi /usr/bin/firefox
// ---------------- Add the lines before launch program ---------------- 
# For ATOK X3
export GTK_IM_MODULE=xim

Thunderbirdも同様に行う。

GNOME3ではGTK3関連アプリ(GNOME端末、GEdit等)でATOKの入力切り替えが行えない。これを修正するために、まずGTK関連ライブラリをインストール。

# yum install gtk2* gtk3*

ATOKX3のソースへアクセス。

# cd ~
# tar zxvf atokx3.tar.gz
# cd ATOKX3/src/IIIMF

iiimfのパッチ済みソースファイルを解凍。パッチを当てる前のソースとパッチファイルが解凍されるので、そのソースを解凍。

# tar zxvf iiimf-trunk_r3104-js3.src.tar.gz
# tar zxvf iiimf-trunk_r3104.tar.gz

GTK3対応パッチをダウンロードし、パッチをあてて一旦ビルド。

# wget http://mikeforce.net/trac/iiimgcf/export/f172ca85e90cbd7fd10f007c01182243db2fd16d/patches/iiimgcf-build_with_gtk+_3.0.1.patch
# cd trunk
# patch -p0 < ../timeout.patch
# patch -p0 < ../delaycommit.patch
# patch -p0 < ../unload_aux.patch
# patch -p0 < ../iiimgcf-build_with_gtk+_3.0.1.patch
# make build

iiimgcfディレクトリに移動し、im-iiim.soファイルをビルド。

# cd iiimgcf
# ln -s ../lib/iiimcf/.libs/libiiimcf.la .
# cd .libs
# ln -s ../../lib/iiimcf/.libs/libiiimcf.so .
# cd ..
# make
# chmod a+r .libs/im-iiim.so

im-iiim.soファイルを所定のディレクトリにコピーし、モジュールを登録する。OSが64ビット版であることに注意。

# cp .libs/im-iiim.so /usr/lib64/gtk-3.0/3.0.0/immodules/
# /usr/bin/gtk-query-immodules-3.0-64 > /usr/lib64/gtk-3.0/3.0.0/immodules.cache

ログアウトして、GTKアプリでATOKが使えることを確認する。

参考サイト

LaTeX

フリーな組版ソフトウェア。論文執筆において、使いこなせればかなり便利な代物。論文投稿もTeX形式での投稿が可能なため、学術誌投稿を見据えた論文を作成するならTeXを覚えておいて損はないと思う。

最新版のLaTeXをインストールするため、リポジトリ登録と日本語化環境を導入する。

# rpm -ivh http://jnovy.fedorapeople.org/texlive/2011/packages.fc16/texlive-release.noarch.rpm
# yum install texlive texlive-collection-langcjk

TimesやHelveticaフォントをインストール。

# yum install texlive-txfonts texlive-times texlive-helvetic

参考サイト

Samba

Sambaは元々LinuxがWindowsドメインに参加するために必要なサーバだが、Windowsに限らずLinux同士のファイルサーバとしても使うことが出来る。つまりはNFSと同じような機能を持っているが、NFSではパスワードを用いずユーザIDのみの制限となるためネットワーク越しに接続するにはセキュリティ上の問題がある。Sambaは認証にユーザID、パスワードを用いるので、NFSよりは柔軟な運用が可能である。問題が多かった日本語対応についても、バージョンが3に上がって大部分が解決した。

Sambaサーバのインストール

たいていのLinuxディストリには標準でSambaが付属している。aptやyumなど、各OSの更新用フロントエンドで簡単にインストールできるだろう。

# yum install samba

設定は、/etc/samba以下のディレクトリで行う。メインの設定ファイルはsmb.confになる。以下、設定例。

# vi /etc/samba/smb.conf
//  ----------------  Edit the file ---------------- 
[global]
; 文字コード設定について:
;   UTF-8ならutf8
;   EUC-JPならeucJP-ms
;   DOS用はcp932
        unix charset = utf8
        dos charset = cp932
        display charset = utf8
        workgroup = Workgroup
        server string = Samba %v on %h
        hosts allow = localhost, 192.168.0.
        security = user
        encrypt passwords = Yes
        username map = /etc/samba/smbusers
        dns proxy = No

[data]
        comment = Data Directory
        path = /mnt/data
        browseable = Yes
        writeable = Yes

各セクション名は[]で囲み、セクションの設定はその直下に記述される。globalは特殊セッション。他にも特殊セッション名はあるが、ここでは省略。詳しくは参考サイトを参照。global設定の内容は以下。

  1. 文字コードは、UNIX系がEUC-JP(Vine Linux)、DOS系がCP932(Windows)。UTF-8(Fedora Core等)を用いる場合はutf8と記述。
  2. workgroupは、ワークグループ名としてWindowsドメインのネットワーク上に表示される。
  3. hosts allowは、Sambaサーバへの接続を許す範囲を与える。localhostで自分自身を含めないと一般ユーザがsmbpasswdなどを利用できない。
  4. セキュリティレベルはuserがデフォルト。ユーザ情報は/etc/samba/smbpass。

各セクションでは個別に設定を行える。詳しいパラメータは参考サイトを参照。パラメータの中には同意味の項目もある(read only = No と writeable = Yes は同等の解釈がなされる。つまり、どちらも書き込み可能な権限を与える)。

サーバの設定が終了したら、testparmコマンドで記述のチェックを行える。

# testparm

次に利用できるSambaユーザを指定する。/etc/passwdをもとにSambaユーザのリストを作成する。

# mksmbpasswd.sh < /etc/passwd > /etc/samba/smbpasswd
# chmod 600 /etc/samba/smbpasswd

ユーザの追加はsmbpasswdのコマンドで追加できる。

# smbpasswd -a {USER_NAME}

Sambaユーザリストのファイル権限は必ず600にし、root以外のユーザが閲覧できないようにする。この状態ではまだパスワードが設定されていないため、Sambaを利用できない。smbpasswdを用い、パスワードを設定する。

# smbpasswd {USER_NAME}

smbpasswdは一般ユーザでも使用できる。その場合{USER_NAME}は必要ないが、OLD Passwordを訊かれる。

設定が終わったら、Sambaを再起動。またLinux起動時に自動で立ち上がるようにchkconfigなどを設定する。

# service smb restart
# chkconfig smb on

Samba with Iptables

記述方式はIptablesのサーバの設定に従うとする。開けるポートは、137番〜139番及び445番のTCP/UDPである。以下、例を示す。

LAN_IF0="eth0"
LAN_NET="xxx.xxx.xxx.0/24"

# Each Protocol Rules
iptables -A INPUT -p tcp -i $LAN_IF0 -s $LAN_NET --dport netbios-ns:netbios-ssn -j ACCEPT
iptables -A INPUT -p udp -i $LAN_IF0 -s $LAN_NET --dport netbios-ns:netbios-ssn -j ACCEPT
iptables -A INPUT -p tcp -i $LAN_IF0 -s $LAN_NET --dport microsoft-ds -j ACCEPT
iptables -A INPUT -p udp -i $LAN_IF0 -s $LAN_NET --dport microsoft-ds -j ACCEPT

この例では、特定のインターフェース(eth0)からアクセスしてきたIPアドレス範囲(xxx.xxx.xxx.0/24)のみSambaへの接続が認められる。 またファイアウォールを通過したとしても、Sambaへの接続は無論smb.confで指定したhosts allowでも制限を受けるということに留意する必要がある。

Sambaクライアントのインストール

Sambaサーバが適切に設定されていれば、クライアントはクライアントソフトを用いてアクセスできる。WindowsではSambaを利用するのに追加プログラムは必要なく、ネットワーク上のSambaサーバにユーザIDとパスワードを用いてログインするだけである。Linuxではsamba-clientを導入する必要がある。

# yum install samba-client cifs-utils

導入が終了すれば、smbclientを用いてSambaサーバにアクセスできる。しかし通常利用する上でsmbclientを毎回使うのは不便に過ぎるので、Sambaサーバの共有ディレクトリをマウントしてしまうのが早い。以下、smbmountを用いたマウントの一例。

# mount -t smbfs -o uid=500,gid=500,iocharset=euc-jp,codepage=cp932,credentials=/etc/cred.smb //{Samba_Server}/public /mnt/tmp

マウントの種類にsmbfsを使うことで、Sambaサーバへのマウントが可能になる。オプションを指定し、Samba_ServerにSambaサーバのIPアドレスもしくは名前解決可能な名前を設定し、マウント先を指定する。詳しいオプションは参考サイトを参照。

マウント時にユーザIDとパスワードが必要になるが、/etc/fstabなどに直接そのような情報を書き込むのはセキュリティ上好ましくない。この場合、credentialsオプションを用いて、別ファイルからユーザIDとパスワードを読み込む。

# touch /etc/cred.smb
# chmod 600 /etc/cred.smb
# vi /etc/cred.smb
// ----------------  Edit the new file ---------------- 
username={User_Name}
password={Password}

一例として/etc/cred.smbというファイルを作成し、その中にユーザIDとパスワードを書き込んでいる。このファイルのアクセス権限は600にしておくのが良い。空パスワードの指定を許可されており、空パスワードを用いていたとしても、password行は必須である。その場合、{Password}には何も記入しないでおく。

また、Fedora Coreなどではsmbmountが廃止され、その後継となるCommon Internet File System (CIFS)に移行している。マウントの種類にcifsを用いる場合は幾つかオプション指定が異なる。以下、cifsを用いたマウントの一例。

# mount -t cifs -o iocharset=utf8,credentials=/etc/cred.smb //{Server_Name}/public /mnt/tmp

CIFSではオプションのcodepageがなくなり、またUnix extensionが有効であるとuid/gidの設定が無視される。サーバとクライアントでuid/gidを統一してあれば問題ない。smbfsと比較して、cifsの方が処理速度が速く、またUTF-8のファイルが扱える。将来的にはcifsが主流になっていくと考えられる。ただし、CIFSに対応していない古いSambaサーバの場合は無論使用できない。

smbclient with autofs

Sambaの共有ディレクトリをマウントする際に/etc/fstabへそのマウント情報をひたすら書き込んでも問題はないが、autofsを用いた方がよりスマートに解決できる。Sambaの共有ディレクトリが増えた際にも、わざわざ/etc/fstabにその情報を書き込まなくても良い。

autofsをインストールすると、/etc/auto.masterなどがインストールされる。Sambaのautofs用スクリプトが/etc/auto.smbとしてあるので、これを書き換えるか、コピーして使用する。二つ以上のSamba接続先が存在する場合、コピーして使用する方が柔軟に対応できる。

# yum install autofs
# cp /etc/auto.smb /etc/auto.server1
# cp /etc/auto.smb /etc/auto.server2
# vi /etc/auto.master
// ---------------- Add to end of the file  ---------------- 
...
/smb    /etc/auto.server1
/smb    /etc/auto.server2

auto.smbの内容は以下の通りであり、存在しなければこのスクリプトを用いるのがよい。

#!/bin/bash

# This file must be executable to work! chmod 755!

key="$1"
opts="-fstype=cifs"

for P in /bin /sbin /usr/bin /usr/sbin
do
  if [ -x $P/smbclient ]
  then
    SMBCLIENT=$P/smbclient
    break
  fi
done

[ -x $SMBCLIENT ] || exit 1

$SMBCLIENT -gNL $key 2>/dev/null| awk -v key="$key" -v opts="$opts" -F'|' -- '
  BEGIN { ORS=""; first=1 }
  /Disk/  {
      if (first)
      print opts; first=0
      dir = $2
      loc = $2
      # Enclose mount dir and location in quotes
      # Double quote "$" in location as it is special
      gsub(/\$$/, "\\$", loc);
      print " \\\n\t"/" dir "\"", "\"://" key "/" loc "\""
    }
  END   { if (!first) print "\n"; else exit 1 }
  '

ここでマウントオプションをoptsで設定する。以下、一例。

# vi /etc/auto.server1
// ---------------- line: 8 ---------------- 
opts="-fstype=cifs,rw,iocharset=utf8,credentials=/etc/cred.smb"

optsが"-fstype=smbfs"となっていれば、cifsに変更する。chmodでファイル権限を755にし、スクリプトが実行可能なようにしておく。

autofsを再起動し、/smb/{Server_Name}にアクセスすれば共有ディレクトリの一覧が見られる。{Server_Name}はIPアドレスかもしくは名前解決可能なサーバ名である。

# service autofs restart
# ls /smb/{Server_Name}

参考サイト

CUPS

Common Unix Printing Systemの略で、Linuxで用いられる標準的な印刷システム。元々ネットワーク越しに印刷要求されることを前提に設計されているので、ネットワーク印刷が簡単に行える。ここではCUPSを用いたネットワーク印刷設定について記述する。

CUPSの設定

CUPSはOSインストール時に標準でインストールされることが多い汎用システムであるが、もしインストールされてなければOSのパッケージ管理システム等でインストールする。

# yum groupinstall "printing support"

CUPSの設定は/etc/cups/cupsd.confにある。エディタで編集する。改変箇所のみ記す。

# vi /etc/cups/cupsd.conf
// ---------------- Edit the file ---------------- 

... 中略

# Only listen for connections from the local machine.
#Listen localhost:631
#Listen /var/run/cups/cups.sock
Listen 631

... 中略

# Restrict access to the server...
<Location />
  Order allow,deny
  Allow localhost
  Allow 192.168.1.0/24
</Location>

# Restrict access to the admin pages...
<Location /admin>
  Encryption Required
  Order allow,deny
  Allow localhost
  Allow 192.168.1.0/24
</Location>

Raw印刷を有効にするため、次の2ファイルを編集。

# vi /etc/cups/myme.types
// ---------------- Edit the lines: 166-172 ---------------- 
# Raw print file support...
#
# Comment the following type to prevent raw file printing.
#

application/octet-stream
# vi /etc/cups/myme.convs
// ---------------- Edit the lines: 103-110 ---------------- 
# Raw filter...
#
# Uncomment the following filter to allow printing of arbitrary files
# without the -oraw option.
#

application/octet-stream  application/vnd.cups-raw  0 -

設定が終わったらCUPSを再起動する。

# service cups restart

クライアントアクセス

クライアント側でブラウザを起動し、アドレスバーに「https://{CUPSが起動しているサーバのIPアドレス}:631」を入力してCUPSサーバへ接続する。この時、SSL接続証明の警告が出るが無視して良い。CUPSの設定が正しければ、正常に接続を行うことが出来る。

管理→プリンタの追加からプリンタを追加する。ここで重要なことは、メーカ/製造元に「Raw」、モデル/ドライバに「Raw Queue」を選択すること。デバイス選択時に特定のメーカを選択し自動でメーカのドライバページに進んだ場合、何も選択せずに「プリンタの追加」のボタンを押すと、メーカの選択からやり直せる。このRawタイプのプリンタ設定が終われば、ネットワーク上のWindows/Linux等の別PCからネットワーク越しに印刷を要求できる。

ネットワーク上のプリンタを設定する場合、アドレスを「http://{CUPSが起動しているサーバのIPアドレス}:631/printers/{プリンタ名}」と入力する。プリンタ名は先ほどのRawタイプのプリンタに設定した名称。ドライバの選択は通常通り。LinuxではOpenPrintingなどからプリンタドライバを選択できる。設定が正しければ、ネットワーク越しに印刷が可能となる。

CUPS with Iptables

記述方式はIptablesのサーバの設定に従うとする。開けるポートは、631番のTCP/UDPである。以下、例を示す。

LAN_IF0="eth0"
LAN_NET="xxx.xxx.xxx.0/24"

# Each Protocol Rules
iptables -A INPUT -p tcp -i $LAN_IF0 -s $LAN_NET --dport ipp -j ACCEPT
iptables -A INPUT -p udp -i $LAN_IF0 -s $LAN_NET --dport ipp -j ACCEPT

ippは/etc/servicesでポート番号631番に関連づけられている。

参考サイト

DHCP

DHCPサーバは規定されたIPアドレスをDHCPクライアントに自動で割り当てて配布するのが主なサービスであるが、LinuxのDHCPデーモンはその他柔軟な設定が可能である。LANで使う場合、LANケーブルを指せば後は自動で外部ネットワークにも接続できるようになるなどのクライアント側の負担を減らすことも出来る。

DHCPサーバ設定

設定ファイルは/etc/dhcpd.confのみ。デーモン起動時に読み込まれ、編集したらデーモンを再起動するだけで構わない。以下に設定内容例を示す。

# vi /etc/dhcpd.conf

// ----------------  Edit the file  ----------------
ddns-update-style interim;
ignore client-updates;

subnet 192.168.0.0 netmask 255.255.255.0 {
  option routers      192.168.0.1;
  option subnet-mask    255.255.255.0;

  option domain-name    "example.jp";
  option domain-name-servers  192.168.0.1;

  option time-offset    -18000; # Eastern Standard Time

  range dynamic-bootp 192.168.0.128 192.168.0.255;
  default-lease-time 21600;
  max-lease-time 43200;
}

プライベートIPを使った設定はこのような例のようになるだろう。また、DHCPサーバははクライアントの/etc/resolv.conf、/etc/yp.conf、/etc/ntp.confを設定することが出来る。元の設定は/etc/*.conf.svというファイルにリネームされる。これにより、クライアント側の設定の手間を省くことが出来る。設定オプションの例を以下に示す。

# /etc/resolv.confに対する設定
option domain-name    "example.jp";
option domain-name-servers  192.168.0.1, 192.168.0.2, 192.168.0.3;

# /etc/yp.confに対する設定
option nis-domain   "example-nis-domain";
option nis-servers    192.168.0.1, 192.168.0.4;

# /etc/ntp.confに対する設定
option ntp-servers    192.168.0.1, 192.168.0.5;

その他、色々と柔軟な設定が可能。詳しくは参考サイトを参照のこと。

DHCPクライアント設定

既に市販のルータなどでDHCP設定を行っている場合、DHCPクライアントとなっていることが多い。dhcpcdというDHCPクライアントデーモンを用いる。/etc/sysconfig/network-scripts/ifcfg-eth0等、ネットワーク設定ファイルでインターフェースの設定からクライアントになる。以下、設定例。

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

// ----------------  Edit the file  ----------------
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes

デバイス名eth0、IPアドレスはDHCPから自動取得、ブート時に自動起動モードで設定。DHCPサーバ側から送られてくるデータが正しければ、クライアントはこれだけでネットワークに接続できるはずである。

DHCPサーバは上記で説明したように各種の設定を配布するが、dhcpcdではクライアント側でそれを拒否することも出来る。dhcpcdの起動時に-R、-Y、-Nを渡すことで/etc/resolv.conf、/etc/yp.conf、/etc/ntp.confの設定を置き換えなくなる。ただしDHCPサーバの設定は柔軟に対応できるので、特別の事情がない限りDHCPサーバが配布する設定を使用すべき。一応、/etc/sysconfig/network-scripts/ifcfg-*にて、オプションを指定することで置き換えを禁止できる。

DHCPCDARGS="-R -Y -N"

参考サイト

NTP

ネットワークタイムプロトコル(Network Time Protocol: NTP)を導入することで、時刻の自動調整を行うことができる。PCの内部時計は、日に数分もずれが生じる程度の精度なので、定期的に時刻サーバにアクセスし調整する必要がある。例えば、サーバでログをとる際に時刻のずれが激しいとログの意味をなさなくなるなどの問題が考えられる。

NTP設定

NTPサーバとクライアントは同一プログラムを用いる。便宜的に時刻を提供する側をサーバ、時刻を確認しに行く側をクライアントと呼ぶ。国内には幾つかのNTPサーバがあり、その時刻と同期させるのが最良であるが、個々のパソコンがそれぞれにアクセスしてしまうとネットワーク帯域を食いつぶしてしまう。LAN内にあるパソコンは、そのLAN内などにローカルNTPサーバが提供されていないかどうかを確認すべき。ネットワーク管理者は、NTPサーバをLANで提供し、そのサーバだけが外部NTPサーバと通信するように配慮する。

NTPをインストールする。Fedoraならyum、Vineならapt-getで簡単にインストールできる。フロントエンドもデーモンもまとめてインストールされる。デーモンの設定は/etc/ntp.confで行う。以下、LAN内の上位NTPサーバ用設定。

# vi /etc/ntp.conf

// ----------------  Edit the file  ----------------
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
server ntp.nict.jp prefer
server ntp.nict.jp
server ntp.nict.jp
server ntp1.jst.mfeed.ad.jp
server ntp2.jst.mfeed.ad.jp
server ntp3.jst.mfeed.ad.jp
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10  
driftfile /var/lib/ntp/drift
keys /etc/ntp/keys
logfile /var/log/ntp.log
multicastclient                 # listen on default 224.0.1.1
broadcastdelay  0.008

nict.jpやmfeed.ad.jpは国内の一般公開上位NTPサーバ。プロバイダなどがNTPサーバを提供していれば、混雑緩和のためにそちらを優先して使用すること。

次はLAN内クライアント用設定。

# vi /etc/ntp.conf

// ----------------  Edit the file  ----------------
restrict default noquery notrust nomodify
restrict 127.0.0.1
restrict 192.168.0.0 mask 255.255.255.0
restrict 192.168.0.1
server 192.168.0.1
restrict 127.127.1.0
server 127.127.1.0
driftfile /etc/ntp.drift
logfile /var/log/ntp.log

この場合、まず192.168.0.1のLAN内NTPサーバにアクセスしに行き、なければ次にローカルホストにアクセスする。サーバ用設定のように、外部にアクセスするようにはしない。

ブート時に自動起動するように設定。デーモンを起動。

# chkconfig ntpq on
# service ntpd start

NTPデーモンは起動後しばらくしてからサーバにアクセスする。ログを見て、正しくアクセスしているかどうか確認する。ntpqは現在のNTPデーモンの状態を、ntptimeは時刻の確認ができる。

# ntpq -pn
# ntptime

ntpdateは、ntpdが起動していないときに手動でNTPサーバにアクセスして時刻を調整できる。ntpdが起動していると使用できない。cronを使用して定期的に時刻調整を行いたい場合は、ntpdateを用いてスクリプトを構成する。

# service ntpd stop
# ntpdate 192.168.0.1

DHCPクライアントであれば、DHCPサーバからNTP情報が配布されることがある。DHCPの項目を参照。この場合、/etc/ntp.confはDHCPによって自動で設定される。手動で設定されていたファイルは/etc/ntp.conf.svとして保存される。

NTP with Iptables

記述方式はIptablesのサーバの設定に従うとする。開けるポートは、123番のTCP/UDPである。以下、例を示す。

WAN_IF="eth0"
WAN_NET="xxx.xxx.xxx.0/24"

# Each Protocol Rules
iptables -A INPUT -p tcp -i $WAN_IF -s $WAN_NET --dport ntp -j ACCEPT
iptables -A INPUT -p udp -i $WAN_IF -s $WAN_NET --dport ntp -j ACCEPT

この例では、特定のインターフェース(eth0)からアクセスしてきたIPアドレス範囲(xxx.xxx.xxx.0/24)のみNTPへの接続が認められる。

参考サイト

PPPoE

ADSLやFTTH等の回線を使ってインターネットに接続する場合、PPPoE(Point to Point Protocol:PPP over Ethernet)で接続するのが一般的。ここではLinuxにフリーで実装されているrp-pppoeを使用してインターネットへの接続を行う。

rp-pppoeの設定

rp-pppoeはパッケージとして提供されているものを使う。設定ファイルは/etc/ppp/pppoe.conf等に記述されるが、ここではコマンドラインから起動する対話式アプリを使って設定する。

# adsl-setup

上記コマンドを実行すると対話式での設定が行われる。ユーザID、使用するインターフェース、回線自動切断の可否、DNSサーバ、パスワード、ファイアウォール設定の順に設定していく。

Welcome to the Roaring Penguin ADSL client setup.  First, I will run
some checks on your system to make sure the PPPoE client is installed
properly...

Looks good!  Now, please enter some information:

USER NAME

>>> Enter your PPPoE user name (default test@test.net):

プロバイダから指定されているユーザIDを入力する。形式はID@ホストドメインとなる。ここではユーザIDはtest、ホストドメインはtest.netとする。

INTERFACE

>>> Enter the Ethernet interface connected to the ADSL modem
For Solaris, this is likely to be something like /dev/hme0.
For Linux, it will be ethn, where 'n' is a number.
(default eth0):

PPPoE接続に使うインターフェースを指定する。Linuxであればeth0、eth1等。

Do you want the link to come up on demand, or stay up continuously?
If you want it to come up on demand, enter the idle time in seconds
after which the link should be dropped.  If you want the link to
stay up permanently, enter 'no' (two letters, lower-case.)
NOTE: Demand-activated links do not interact well with dynamic IP
addresses.  You may have some problems with demand-activated links.
>>> Enter the demand value (default no):

回線の自動切断までの時間を秒数で入力する。自動切断を行わないのであれば、noを入力。

DNS

Please enter the IP address of your ISP's primary DNS server.
If your ISP claims that 'the server will provide DNS addresses',
enter 'server' (all lower-case) here.
If you just press enter, I will assume you know what you are
doing and not modify your DNS setup.
>>> Enter the DNS information here:

DNSの設定を行う。プロバイダからDNSサーバの指定があればそれを、なければserverと入力する。

PASSWORD

>>> Please enter your PPPoE password:
>>> Please re-enter your PPPoE password:

プロバイダから指定されているパスワードを入力する。

FIREWALLING

Please choose the firewall rules to use.  Note that these rules are
very basic.  You are strongly encouraged to use a more sophisticated
firewall setup; however, these will provide basic security.  If you
are running any servers on your machine, you must choose 'NONE' and
set up firewalling yourself.  Otherwise, the firewall rules will deny
access to all standard servers like Web, e-mail, ftp, etc.  If you
are using SSH, the rules will block outgoing SSH connections which
allocate a privileged source port.

The firewall choices are:
0 - NONE: This script will not set any firewall rules.  You are responsible
          for ensuring the security of your machine.  You are STRONGLY
          recommended to use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
                for a LAN
>>> Choose a type of firewall (0-2):

ファイアウォールの設定を番号で指定する。自分でファイアウォールを構築する場合は0を、スタンドアロンで動かす標準ファイアウォールは1を、ネットワークのゲートウェイとして動かす場合は2を選択する。

最後に設定の間違いがないかどうかの確認が行われ、yを入力すれば設定が反映される。PPPoE接続はインターフェスが起動していると接続できないので、/etc/sysconfig/network-scripts/ifcfg-eth0等でブート時に起動しないようにする。

### exsample: /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=no

※ Vine 3.2での設定時、eth0とeth1がインストールされている時にeth0を自動起動しないようにすると、eth1がeth0として起動されてしまうというトラブルがあった。これを回避するためにeth0の設定もONBOOT=yesにしておき、それ以外は設定しないでおくことでPPPoE接続が可能となった。

また、/etc/sysconfig/networkにGATEWAYが記述されていれば、その項目を削除しておく。そうしないと接続できない場合がある。

これらの設定が完了したら、システムを再起動させる。再起動後、以下のコマンドを入力し、接続を確認する。

# adsl-start
# adsl-stop

接続が成功すれば、成功メッセージを返す。他にadsl-statusで接続状態を確認できる。起動時に自動でPPPoE接続を行うにはサーバを起動するようにしておく。

# chkconfig adsl on

接続に成功したら、インターフェースはppp0として扱われる。iptables等を適宜設定しておくこと。

参考サイト

Postfix

sendmailにとってかわって主流になりつつあるMail Transfer Agent (MTA)。sendmailと比べると、設定の仕方が単純で管理しやすい。その分sendmailよりも複雑なことは出来ないが、通常のメールサーバとして使う範囲で困ることはほとんど無いだろう。

Postfix設定

CentOSなどではsendmailが標準でインストールされているが、Postfixは入っていないことが多い。sendmailを停止した上で自動起動を止め、Postfixを導入する。

# service sendmail stop
# chkconfig sendmail --level 12345 off
# yum install postfix

設定は/etc/postfix/main.cfで行う。コメントが豊富で設定項目を読みながら把握できるが、早急に設定したい場合は以下の項目だけ設定する。元のコメント、空白行を削除して例を示す。

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix

# FQDN・ドメイン・ネットワーク設定
myhostname = mail.example.jp
mydomain = example.jp
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
unknown_local_recipient_reject_code = 550
mynetworks = 192.168.0.0/24, 127.0.0.0/8
relay_domains = $mydestination
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mail_spool_directory = /var/spool/mail
smtpd_banner = $myhostname ESMTP unknown

# デバッガ及び関連ファイル
debug_peer_level = 2
debugger_command =
          PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
          xxgdb $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES

# セキュリティ設定
notify_classes = resource,software,policy
allow_percent_hack = yes
swap_bangpath = yes
disable_vrfy_command = yes
smtpd_recipient_restriction =
 permit_mynetworks,
 check_relay_domains,
 reject

FQDNをmail.example.jp、ドメインをexample.jpとし、ネットワーク外のメールをリレーしないようにしている。セキュリティ設定は書き換えではなく、ファイルの末尾に加える。

この設定ではネットワーク外から送信ができないためやや不便となるが、例えばSMTP-Auth等の認証機能と併用するのであればネットワーク外からの送信を認めても良い。SMTP-Authを使った設定などは参考サイトを参照。

RedHat系ではMTAを切り替えるのにalternativesコマンドを使用する。

# alternatives --config mta

この中からpostfixを選択。Postfixを起動し、自動起動設定をonにする。

# service postfix start
# chkconfig postfix on

受信メールサーバ

メールを送信するMTAとメールを受信するMail Retrieval Agent (MRA)があり、受信したメールを読み込むにはMRAを起動しておく必要がある。CentOSではDovecotというMRAがあるので、それを利用する。

# yum install dovecot

Dovecotの設定は/etc/dovecot.confであるが、基本的には設定する必要はない。protocolsで、imap/imaps/pop3/pop3sが設定されていることを確認する。

Dovecotを起動し、自動起動設定をonにする。

# service dovecot start
# chkconfig dovecot on

SMTP/POP3 with Iptables

記述方式はIptablesのサーバの設定に従うとする。開けるポートは、25番及び110番のTCP/UDPである。以下、例を示す。

WAN_IF="eth0"

# Each Protocol Rules
iptables -A INPUT -p tcp -i $WAN_IF --dport smtp -j ACCEPT
iptables -A INPUT -p udp -i $WAN_IF --dport smtp -j ACCEPT
iptables -A INPUT -p tcp -i $WAN_IF --dport pop3 -j ACCEPT
iptables -A INPUT -p udp -i $WAN_IF --dport pop3 -j ACCEPT

この例では、特定のインターフェース(eth0)からアクセスがSMTP及びPOP3への接続が認められる。

外部からの接続確認

ポートチェックを行いPOP3が外部から確認できることや、メール不正中継チェックで匿名アクセスからのメール送信ができないことを確認する。これがうまくいってないとメールが受信できなかったり、迷惑メールを送り出す踏み台になってしまう可能性があるので、チェックは十分に行うこと。

参考サイト

SELinux

SELinuxはSecurity Enhanced Linuxの略称。通常のファイル権限に加え、強制アクセス制御などによりrootの特権システムをさらに制御する。FedoraやCentOSなどのRedHat系システムで採用されている。ただ比較的新しいセキュリティの概念であり、まだ市民権を得ているとは言い難い状況のため、SELinuxを無効にして運用しているケースが多々ある。ここではSELinuxを有効にしたまま、各サーバに必要なポリシーの設定を行う。

SELinuxは、FedoraやCentOSではデフォルトで有効な状態にある。SELinuxの有効・無効を確認するにはgetenforceコマンドを、一時的に有効・無効にしたい場合はsetenforceコマンドを、恒久的に有効・無効を設定したい場合は/etc/sysconfig/selinuxを編集する。

# setenforce 1
# getenforce
Enforcing    // SELinuxが有効
# setenforce 0
# getenforce
Permissive    // SELinuxが無効(監視状態)

# vi /etc/sysconfig/selinux

// ---------------- line: 6 ---------------- 
SELINUX=enforcing    // SELinuxを有効にして起動
SELINUX=permissive    // SELinuxを無効(監視状態)にして起動
SELINUX=disabled    // SELinuxを完全無効にして起動

ちなみにSELinuxのタイプはtargetedを選択している。これにより、ネットワークを使用するデーモンのみSELinuxのプロテクトを受けることとなる。

ログを使用した簡易設定

SELinuxを有効のままLinuxを使用していると、SELinuxが元でエラーを起こし、正常にサービスを行えない場合がある。このとき、まず本当にSELinuxが原因なのかを見極めるため、setenforceで一時的に無効化してみて試してみる。もしSELinuxが無効で正常に動作し、有効にするとエラーを起こすのであればSELinuxの問題である可能性が高い。auditdが起動していればログが保存されているので、エラー内容を見てみる。

# setenforce 0
# getenforce
Permissive

// ここでSELinuxにプロテクトされる操作を行う

# less /var/log/audit/audit.log

SELinuxの知識があればこのログで何が問題なのかが分かるが、慣れないと読むのは困難である。しかし、このログを使用して簡単にポリシーを作成することが可能。

# audit2allow -m local -i /var/log/audit/audit.log > local.te
# audit2allow -m local -l -i /var/log/audit/audit.log > local.te

このようにログからポリシーの元ととなるテキストファイルを作成できる。-lオプションを加えることで、semoduleのリロード後の動作のみを対象とすることができる。

local.teを用い、新たにポリシーモジュールを作成、インストールする。

# checkmodule -M -m -o local.mod local.te
# semodule_package -o local.pp -m local.mod
# semodule -i local.pp
# setenforce 1
# getenforce
Enforcing

local.ppが最終的に組み込まれるポリシーモジュールのバイナリとなる。semoduleコマンドで組み込まれているモジュールの一覧やモジュールの追加、削除が行える。

# semodule -l    // ポリシーモジュール一覧を表示
# semodule -i {MODULE_FILE}    // ポリシーモジュールを追加
# semodule -r {MODULE_NAME}    // ポリシーモジュールを削除

モジュールを組み込めば、SELinuxにプロテクトされていた操作を行うことが出来るようになる。失敗するならば、さらに設定を細かく行う。

ポリシーファイルの記述

local.teはテキストファイルなので、viなどで開くことが可能。これを編集することで、不必要なルールの削除及び必要なルールの追加が行える。ここではSamba、NTP、Postfix、Dovecotが動作しているサーバ上でのルールを一例として紹介する。

# vi local.te

// ----------------  Edit the file ---------------- 
module local 1.0.0;

require {
  type binfmt_misc_fs_t;
  type dosfs_t;
  type dovecot_t;
  type etc_t;
  type file_t;
  type mnt_t;
  type ntpd_t;
  type postfix_local_t;
  type samba_log_t;
  type smbd_t;
  type sysctl_fs_t;
  type var_lib_nfs_t;

  class dir { read write create setattr getattr search remove_name add_name rename rmdir reparent };
  class file { read write create setattr getattr link unlink lock rename execute execute_no_trans append };
  class lnk_file { read write create setattr getattr link unlink lock rename append };
}

#============= dovecot_t ==============
allow dovecot_t file_t:dir { write search read remove_name create add_name };
allow dovecot_t file_t:file { rename read lock create write getattr link unlink };
allow dovecot_t mnt_t:dir search;
allow dovecot_t sysctl_fs_t:dir search;
allow dovecot_t var_lib_nfs_t:dir search;

#============= ntpd_t ==============
allow ntpd_t dosfs_t:file read;

#============= postfix_local_t ==============
allow postfix_local_t file_t:dir search;
allow postfix_local_t mnt_t:dir search;

#============= smbd_t ==============
allow smbd_t binfmt_misc_fs_t:dir getattr;
allow smbd_t etc_t:file { write create setattr };
allow smbd_t file_t:dir { read write create setattr getattr search remove_name add_name rename rmdir reparent };
allow smbd_t file_t:file { read write create setattr getattr link unlink lock rename execute execute_no_trans append };
allow smbd_t file_t:lnk_file { read write create setattr getattr link unlink lock rename append };
allow smbd_t samba_log_t:file { write rename unlink };

同様にモジュールバイナリを作成、インストールする。同じポリシー名ならばポリシーが上書きされることに注意。

# checkmodule -M -m -o local.mod local.te
# semodule_package -o local.pp -m local.mod
# semodule -i local.pp

参考サイト

XMMS

Fedoraでは、ライセンス問題が解決していないソフトは収録しない方針。ゆえにxmmsの初期インストール状態ではMP3などの楽曲データを再生することができない。Googleでxmms-mp3を検索し、rpmをダウンロード・インストールすればOK。xmms RPM packages for Red Hat/FedoraIndex of /pub/freshrpms/redhat/9/xmms-mp3など。

日本語を表示するにはxmmsの日本語化パッチが必要。yumでインストールするxmmsでは表示不可。なので、ソースをrpmでまとめて管理する。

xmms-enhancedのsource archiveから最新版のソースtarボールをダウンロード。/usr/src/redhat/SOURCES等のrpm作成ディレクトリのソースに置く。このtarボールを解凍し、specファイルを取り出す。中身を幾つか修正してrpmに丸める。以下、修正したソースと元との差分表示。

2c2
< %define       version 1.2.10j_20060524
---
> %define       version 1.2.10j
44c44
< Source:               %{name}-%{version}.tar.gz
---
> Source0:      %{name}-%{version}.tar.bz2
142c142
< mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/pixmaps/mini
---
> mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/pixmaps
146c146
<       ${RPM_BUILD_ROOT}%{_datadir}/pixmaps/mini/xmms_mini.xpm
---
>       ${RPM_BUILD_ROOT}%{_datadir}/pixmaps/xmms_mini.xpm
149c149
< mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/X11/wmconfig
---
> mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/applications/wmconfig
151c151
<       ${RPM_BUILD_ROOT}%{_sysconfdir}/X11/wmconfig/xmms
---
>       ${RPM_BUILD_ROOT}%{_datadir}/applications/wmconfig/xmms
154d153
< mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/X11/applnk/Multimedia/
156c155
<       ${RPM_BUILD_ROOT}%{_sysconfdir}/X11/applnk/Multimedia/
---
>       ${RPM_BUILD_ROOT}%{_datadir}/applications/xmms.desktop
167,168c166,167
< %{_sysconfdir}/X11/wmconfig/xmms
< %{_sysconfdir}/X11/applnk/Multimedia/xmms.desktop
---
> %{_datadir}/applications/wmconfig/xmms
> %{_datadir}/applications/xmms.desktop
187c186
< %{_datadir}/pixmaps/mini/xmms_mini.xpm
---
> %{_datadir}/pixmaps/xmms_mini.xpm

さらにxmms/xmms.desktopも修正する。

22a23
> Categories=Application;AudioVideo;Audio;Player;

このxmms.desktopによってアプリケーション/マルチメディア項目にxmmsが追加される。修正後はbzip2で圧縮しておく。tarボールの名前も変更する。

最後にバージョン等々も間違っていないか確認しておく。修正したspecファイルを/usr/src/redhat/SPECS等にコピーし、rpmbuildでrpmに丸める。最終的なsrc.rpmとFC5環境でコンパイルしたrpmを置いておく。

インストールが完了したら、オプションで日本語表示の設定を行う。入出力プラグインで「Mpeg Layer 1/2/3 プレイヤー」という入力プラグインの設定のうち、タイトルタブの設定を修正。読み込み時に適当な文字コードからロケール推測にしておく。あとはフォント設定で適当な2バイト文字フォントを設定しておく。

参考サイト

NFS

NFSはNetwork File Systemの略。NFSサーバにログインの必要なくサーバ上のディスクを扱えるようになる。ユーザはNFSで提供されるファイルシステムの特性やそもそもディスクがサーバにある事を意識することなく、ローカルのディスクのように扱う事が出来る。NFSは便利だがシステム的には時代遅れの感がある。セキュリティ性能に乏しく、Iptables等と組み合わせて使わなければならない。NFSサーバの提供は簡単だが、セキュリティと利便性を天秤にかけてシステムを構築する必要がある。ともあれ、それでもまだまだネットワークのファイルを扱うときにUNIX系では主流として用いられるシステムでもある。

NFSサーバの設定

まずはNFSサーバをインストールする。FedoraやVineなどではnfs-utilsというパッケージで提供されている。これをインストールする。設定を行うファイルは/etc/exports、/etc/hosts.allow、/etc/hosts.denyの三つ。後者二つはサービス提供には関係ないが、セキュリティ上設定しておくのが無難である。/etc/exportsにはNFSクライアントに対して接続を認めるディレクトリ、その接続を認めるNFSクライアントのIPとオプションを指定する。例は以下の通り。

/usr/local 192.168.0.1(ro) 192.168.0.2(ro)
/home      192.168.0.0/255.255.255.0(rw)

接続を認めるNFSクライアントの指定は、IPアドレスもしくはネットワークで指定する。指定後の括弧内にオプションを記述するが、このときオプションの前にスペースを挿入してはいけない。記述の意味が変わってしまう。エクスポート時の注意点としては、あるディレクトリをエクスポート後にその子ディレクトリをエクスポートすることはできないこと、FAT等のマルチユーザを考慮していないファイルシステムはエクスポートしないようにすべきであること等。詳細は参考サイトを参照のこと。

/etc/exportsはNFSサーバが起動するときに読み込まれる。既に起動しているならば、次のコマンドで再読込させる。

# exportfs -ra

/etc/hosts.allow、/etc/hosts.denyはNFSで使用するポートへのアクセス可否を決定する。セキュリティを考慮するならば設定しておくべきである。記述は以下の通り。

# /etc/hosts.allow
portmap: 192.168.0.0/255.255.255.0
lockd: 192.168.0.0/255.255.255.0
rquotad: 192.168.0.0/255.255.255.0
mountd: 192.168.0.0/255.255.255.0
statd: 192.168.0.0/255.255.255.0

# /etc/hosts.deny
portmap: ALL
lockd: ALL
rquotad: ALL
mountd: ALL
statd: ALL

サーバの動作は、/etc/hosts.allowで一致すれば許可、次に/etc/hosts.denyで一致すれば拒否となる。/etc/hosts.denyにはALL:ALLと記述する事も出来るが、他の新しいサービスを開始したときに拒否されてしまうかもしれない。NFSサーバの基本設定は以上の通り。NFSサーバを起動すればサービスが開始される。NFSサーバ上で次のコマンドを入力してサービスを確認。

# rpcinfo -p

このとき、最低限portmapper・nfs・mountdが起動している必要がある。なければデーモンを再起動しなければならない。ここで表示されるポートにアクセスすればNFSクライアントから接続できる。デフォルトでportmapperは111、nfsは2049に固定されているが、mountd、lockd、rquotad、statdのポートは動的に設定される。このポートを固定するには、Redhat系では/etc/sysconfig/nfsに次のように記述する。

STATD_PORT=32765
STATD_OUTGOING_PORT=32766
MOUNTD_PORT=32767
LOCKD_UDPPORT=32768
LOCKD_TCPPORT=32768
RQUOTAD=no

上記はrquotadを使用していない場合。rquotadを使用する場合や、これらのrc変数を使えない場合は以下のコマンドを実行する。

# statd -p 32765 -o 32766
# mountd -p 32767
# rquotad -p 32769

lockdはカーネルモジュールとして使用するので、オプションを直接渡す事は出来ない。この場合、/etc/modules.confに以下のように記述する。

# /etc/modules.conf
options lockd nlm_udpport=32768 nlm_tcpport=32768

lockdをモジュールとして扱わず、カーネルに組み込んである場合はカーネルのブート時にパラメータを渡すようにする。

vmlinuz 3 root=/dev/hda1 lockd.udpport=32768 lockd.tcpport=32768

Redhat系でrquotadを使用しない場合は/etc/sysconfig/nfsに記述するだけなので非常に簡潔。通常、rquotadは使用しなくてもNFSサービスは正常に動作する。ポートが固定されれば、Iptablesでパケットフィルタリングを設定する事が出来る。上記のようなポート固定の設定であれば、以下のように記述する。

iptables -A INPUT -s $lan_net -p tcp --dport 32765:32768 -j ACCEPT
iptables -A INPUT -s $lan_net -p udp --dport 32765:32768 -j ACCEPT
iptables -A INPUT -s $lan_net -p tcp --dport nfs -j ACCEPT
iptables -A INPUT -s $lan_net -p udp --dport nfs -j ACCEPT
iptables -A INPUT -s $lan_net -p tcp --dport sunrpc -j ACCEPT
iptables -A INPUT -s $lan_net -p udp --dport sunrpc -j ACCEPT

$lan_netはIptablesでの設定中にある変数で、LAN内のネットワークを指す。nfsはポート2049、sunrpcはポート111を指す。/etc/servicesに記述されている通りに書く。

NFSクライアントの設定

まずmountプログラムが十分新しいこと(NFSv3を使うなら2.10m以降が必要)を確認し、クライアントマシンがNFSマウントをサポートしているかどうかを確認する。カーネル2.2以降なら/proc/filesystemsを見てみる。NFSクライアントにするにはポートマッパの起動、NFSでファイルロックを使うならrpc.statd、rpc.lockdがサーバとクライアントで起動している必要がある。現在のディストリビューションはほとんどがブート時に自動で起動する。サービスが起動したら、通常のマウントと同じようにファイルシステムをマウントできるようになる。

# mount -t nfs 192.168.0.1:/home /home

/etc/hosts等で名前解決されていれば、サーバのIPアドレスにはホスト名を使うことも可能。自動起動するには/etc/fstabに記述する。

192.168.0.1:/usr/local    /usr/local   nfs    auto,ro,hard,intr    0 0
192.168.0.1:/home         /home        nfs    auto,rw,hard,intr    0 0

オプションの指定で、autoがあればクライアント起動時に自動でマウントする。その際、_netdevを指定すればネットワークが起動されるまでマウントされない。ファイルの破壊を防ぐには、hardとintrオプションを指定しておいた方が無難である。その他のオプションは環境によって設定を変えること。

NFSマウントの最適化

NFSマウントが遅い、NFSマウントしているファイルシステムからプログラムを起動するのが遅い等々、NFSの性能に不満があれば自分のネットワークに合わせて最適化する必要がある。とくに非同期書き込み、パケットサイズの指定、NFSロックを使用しないなどの設定は、ネットワークの状況によっては劇的に速くなる場合がある。ただし、その場合ファイルが壊れてしまう可能性も孕んでいるので、クリティカルなファイルシステムは同期、ロックを用い、速度優先のファイルシステムは非同期、ロック無しにするという柔軟な対応が考えられる。

NFSサーバ側では、書き込みを同期させるか非同期にするかを決定できる。/etc/exportsのオプションに設定する。

/usr/local 192.168.0.0/255.255.255.0(ro,async)
/home      192.168.0.0/255.255.255.0(rw.async)
/imagesa      192.168.0.0/255.255.255.0(rw,sync)

/usr/localと/homeは非同期書き込みで、/imagesaは同期書き込みでNFSマウントさせる。/imagesaは重要なファイルが保存されているので、速度よりもファイルシステムの頑丈さを優先している。

NFSクライアント側では、パケットサイズの指定やロックの使用を設定できる。/etc/fstabのオプションに指定する。

192.168.0.1:/usr/local    /usr/local   nfs    auto,ro,hard,intr,nolock,rsize=8192,wsize=8192 0 0
192.168.0.1:/home         /home        nfs    auto,rw,hard,intr,nolock,rsize=8192,wsize=8192 0 0
192.168.0.1:/imagesa         /imagesa        nfs    auto,rw,hard,intr,nosuid,rsize=8192,wsize=8192 0 0

パケットサイズの最適な設定方法は、参考サイトのNFSの最適化に詳しい。他、NFSオプションは多様な設定を行える。自分の使用している環境とセキュリティを考慮して設定する。

参考サイト

NIS

Network Information Serviceのこと。Yellow Pages(=YP)とも呼ばれるが、これは英国にあるBritish Telecom社の登録商標でもあるため、NISと呼ばれるようになる。ネットワーク上で必要な情報を共有できるサービス。具体的にはpasswd、group、hosts、shadow等のユーザ/グループ情報や、オートマウンタに必要なauto.*等を共有できる。これにより、全てのNISクライアントで同一のログイン情報を扱え、一元的に管理できる。NISを拡張したNIS+というサービスも存在するが、NIS+はサービスの設定が煩雑かつ管理が困難であり、LinuxのNIS+ではバグが多く開発がストップしているので、大学の研究室などの中小規模ネットワークではNISで十分。ここではNISマスターサーバ、NISクライアントの設定のみを扱う。NISスレーブサーバは設置しない。管理が必要な場合は参考サイトを参照のこと。

NISマスターサーバ設定

GNU C Library 2.x(libc6)を用いたNISを扱う。libc5以下では扱いが面倒。最近のディストリビューションではlibc6以上が主流だと思うけど。NISサーバのインストールは、ypservが要る。他、NISスレーブサーバ転送用のypxfrd、パスワード変更デーモンのyppasswddも必要に応じてインストール。ここではパスワードの管理も考えるので、ypservとyppasswddをインストールする。ypservがインストールされると/varにypディレクトリが作成される。ypservの設定項目は、/etc/ypserv.conf、/etc/sysconfig/network、/var/yp/securenets、/var/yp/Makefileである。まず、NISドメイン名を決定する。

# nisdomainname (NISドメイン名)

NISドメイン名はDNSドメイン名と異なるようにしておくべき。そうすると、外部のクラッカーがNISにアクセスするのを多少難しくすることができる。NISドメイン名を設定したら、/etc/sysconfig/networkに記述してブート時に設定されるようにしておく。またポートマップに登録する番号も設定する。

# /etc/sysconfig/network
NISDOMAIN="(NISドメイン名)"
YPSERV_ARGS="-p 834"
YPXFRD_ARGS="-p 835"

/var/yp/securenetsを設定する。

# /var/yp/securenets
255.0.0.0 127.0.0.0
255.255.255.0 192.168.0.0

securenetsはネットマスク、ネットワークの順に記述する。次に/etc/ypserv.confを設定する。

# /etc/ypserv.conf
# Host                     : Domain  : Map              : Security
192.168.0.0/24             : *       : passwd.byname    : port
192.168.0.0/24             : *       : passwd.byuid     : port
192.168.0.0/24             : *       : shadow.byname    : port
192.168.0.0/24             : *       : passwd.adjunct.byname : port

Hostはネットワークを、DomainはNISドメイン名を、Mapは共有するマップファイルを、Securityはnone・port・denyを記述する。HostやDomainやMapではアスタリスクをワイルドカードとして使う事が出来る。Securityのnoneはポート制限なし、portはポート1024未満のみアクセス許可、denyはアクセス拒否する。

NISサーバの詳細な設定は/var/yp/Makefileで行う。

# /var/yp/Makefile
MINUID=500
MINGID=500
MERGE_PASSWD=false
MERGE_GROUP=false

all: passwd group hosts shadow auto.master auto.home

設定箇所はMERGE_*変数と100行目付近のall:項目にNISで配布する情報を設定する。ここではユーザのログイン関係情報とオートマウンタ関係情報を配布する。オートマウンタの設定はまた後述する。他、配布するユーザの最小UID・GID(Linuxは通常500)を設定しなければNISサーバのシステム用ユーザ情報まで配布してしまうことになる。

設定が完了したら、makeで配布するマップファイルを作成する。

# cd /var/yp
# make

この時点でypservを起動させれば、NISサーバが正常に起動するはずである。chkconfig等でブート時にypservが自動起動するようにしておく。ypservが起動したらNISマスターサーバ情報を設定する。次のコマンドを実行して設定する。

# /usr/lib/yp/ypinit -m

NISサーバの登録情報が決定したら、ctrl+Dを入力してプログラムを終了する。

NISパスワードデーモン設定

NISのログイン情報を使ってログインしていると、通常のpasswdコマンドが使えない。パスワードの変更にはyppasswdを用いることになる。このプログラムを扱うには、NISサーバがyppasswddを起動している必要がある。NISサーバにyppasswddをインストールし、/etc/sysconfig/yppasswddを設定する。

ETCDIR=/etc
YPPASSWDD_ARGS="--port 836"

/etc/sysconfig/yppasswddはyppasswdd起動時に読み込まれるだけなので、yppasswddを再起動しておく。

NISクライアント設定

NISクライアントに必要なのは、ypbindのみである。NISスレーブサーバになるには、NISサーバになると同時にNISクライアントにもならなければならないし、NISマスターサーバでも設定確認に使えるのでypbindはインストールしておいても構わない。NISクライアントの設定には、/etc/yp.conf、/etc/nsswitch.conf、ログイン関係情報をNISで取得するなら/etc/passwd、/etc/group、/etc/shadowも設定する必要がある。また、上記のサーバ設定を行っていない純粋な新規NISクライアントであれば、サーバの項目で説明したNISドメイン名を設定する必要がある。

NISドメイン名を設定後、/etc/yp.confにはNISサーバのアドレスを設定する。

ypserver  192.168.0.1

IPアドレスにはホスト名を記述することもできるが、NISサーバから受け取るhosts情報ではなくローカルの/etc/hostsにホスト名が登録されている必要がある。特別の事情でもない限り、IPアドレスで記述する方がいい。

別のLinuxでDHCPサーバを立ち上げ、NISクライアントをDHCPクライアントにしている場合、/etc/yp.confはDHCPサーバの設定で置き換えられる。その場合はクライアント側で/etc/yp.confを設定する必要はない。DHCPサーバの設定は後述する。

/etc/nsswitch.confを設定する。このファイルはネームサービスの選択順を設定する。

passwd:     compat
group:      compat
# For libc5, you must use shadow: files nis
shadow:     compat

passwd_compat: nis
group_compat: nis
shadow_compat: nis

hosts:      nis files dns

services:   nis [NOTFOUND=return] files
networks:   nis [NOTFOUND=return] files
protocols:  nis [NOTFOUND=return] files
rpc:        nis [NOTFOUND=return] files
ethers:     nis [NOTFOUND=return] files
netmasks:   nis [NOTFOUND=return] files
netgroup:   nis
bootparams: nis [NOTFOUND=return] files
publickey:  nis [NOTFOUND=return] files
automount:  nis
aliases:    nis [NOTFOUND=return] files

大幅に入れ替えるので、元々あったnsswitch.confはnsswitch.conf.old等、別ファイルとして保存しておく方がいいかもしれない。automount:項目は、オートマウンタを使うのであればnisを、使わなければfilesを指定する。ここでは後述するオートマウンタ設定と併せて設定するので、nisに設定する。

必要があれば、さらに/etc/passwd、/etc/group、/etc/shadowに適宜設定を追加する。

# /etc/passwd ":"は6個
+::::::

# /etc/group ":"は3個
+:::

# /etc/shadow ":"は8個
+::::::::

/etc/nsswitch.confと併せて、これでNISから情報を受け取ってユーザ/グループ情報を追加することができる。

この時点でypbindを再起動する。ちなみに最低限起動に必要なのは、/var/ypディレクトリとNISドメイン名である。上手く起動すればNISサーバを発見し、情報の共有が可能となる。ypwhichで接続先NISサーバの確認、ypcatで各ファイルの確認ができる。

# ypwhich
# ypcat passwd
# ypcat hosts

Mapのファイル名は正確にはpasswd.byname、passwdbyuid、hosts.byaddr等であるが、NISサーバの/var/yp/nicknamesで通称が指定されていればそれを使うことも出来る。shadow.bynameは通称がないのでypcat shadow.bynameと入力しなければならない。また、shadowファイルは一般ユーザからはypcatで閲覧できず、root権限が必要となる。

Iptablesとの併用

NISはセキュリティの問題が多く、Iptables等のファイアウォールでこれに少しでも対処する必要がある。通常、ypserv、yppasswdd、ypxfrd等の使用ポートは1024未満で動的であるが、上記の設定中にポートを固定する設定を施してあるので、これを利用する。NISサーバに以下の情報を登録する。

iptables -A INPUT -s $lan_net -p tcp --dport 834:836 -j ACCEPT
iptables -A INPUT -s $lan_net -p udp --dport 834:836 -j ACCEPT

参考サイト

AutoFS

オートマウンタはファイルシステムを必要なときに自動マウントし、必要が無くなれば自動でアンマウントするサービスである。オートマウンタを利用するメリットは色々あるが、大きくはNISと併用することでネットワーク内のパソコンのマウントテーブルを効率よく管理できることである。オートマウンタはNFSマウントプロトコルを拡張したものであり、NFSとNISを併せて使うときに用いる。オートマウンタにはautofsやamdがあるが、ここではautofsを用いて説明する。

AutoFSサービス設定

オートマウンタを使うにはマップという概念を理解する必要がある。このマップがいわゆる/etc/fstabに記述される情報と等しく、またNISで管理することが出来るものである。マップは基本的にマスタマップ、直接マップ、間接マップがあり、このうちNISで管理するマップはマスタマップと間接マップのみ。一応、直接マップの記述も付記しておくが、ローカルなマップとしてしか使えないことに注意。

オートマウンタを利用するには、まず管理すべきディレクトリを考えなければならない。ここではNISでログイン情報を管理するので、同時に/homeもネットワーク管理するようにした方がスマートだと思う。また、小規模なネットワークでは/usr/localのような追加インストールするためのディレクトリも同時に管理した方が、ネットワーク内のユーザに対して同一のプログラムを使用させることが可能になる。それ以外にマウントする必要があるものは、/nfs以下で管理することにする。

上記の構成をオートマウンタで管理するには、間接マップとして/etc/auto.home、/etc/auto.nfsが必要となる。/usr/localに対しては後述するとして、まずはこれらの間接マップを設定する。前提として、クライアントのユーザ名はuser01、サーバ名はserver01、server01はNFSサーバとして/export/*をエクスポートしているとし、/exportには/export/home、/export/local、/export/imagesa01、/export/imagesa02が存在しているとする。

# /etc/auto.home
user01  -rw,hard,intr server01:/export/home/user01

# /etc/auto.nfs
local -ro,hard,intr server01:/export/local
data01  -rw,hard,intr,nosuid  server01:/export/imagesa01
data02  -rw,hard,intr,nosuid  server01:/export/imagesa02

間接マップの記述は、マップキー、NFSオプション、マウントするファイルシステムを表すサーバ名:パス名の順である。マップキーは最終的なマウントポイントの要素を意味する。つまり、これらは次のようにマウントされることを期待している。

# /etc/auto.home
/home/user01

# /etc/auto.nfs
/nfs/local
/nfs/imagesa01
/nfs/imagesa02

auto.*という風に、マップ名のサフィックスとマウントポイントの名前が一致する必要はないが、一致させておいた方が両者の関連が理解しやすい。これらは/etc/fstabに次のように記述するのと同等の意味を持つ。

# /etc/fstab
server01:/export/home/user01  /home/user01  nfs rw,hard,intr  0 0
server01:/export/local  /nfs/local  nfs ro,hard,intr  0 0
server01:/export/imagesa01  /nfs/imagesa01  nfs rw,hard,intr  0 0
server01:/export/imagesa02  /nfs/imagesa02  nfs rw,hard,intr  0 0

次に直接マップの記述であるが、基本的には間接マップの記述と大して差はない。マップキーに絶対パスを用いるというだけである。例として、以下に/etc/auto.directを設定する。

/usr/local  -ro,hard,intr server01:/export/local

直接マップを用いる利点は、オートマウンタが1つのディレクトリエントリ上にマウントできるということである。ここでは/usr/localにserver01:/export/localがマウントされる。これが/usr/localに対する間接マップでのマウントだと、/usr/binや/usr/lib等が見えなくなってしまう。他にエントリが存在するディレクトリに対して間接マップを使用することは出来ない。しかし前述の通りNISでは直接マップが扱えないため、/usr/localをオートマウントするにはこれを回避する必要がある。設定は後述する。

上記のマップ群を扱うメタマップがマスタマップである。これは/etc/auto.masterに設定する。

/home auto.home -nobrowse
/nfs  auto.nfs  --timeout=600
/-  /etc/auto.direct

auto.masterの記述は、ディレクトリ、マップ、NFSオプションの順である。間接マップ等の記述順と違うことに注意。マップが絶対パスであればローカルファイルを意味し、/etc/プレフィックスを省略していればNISとローカルファイルのどちらにも対応でき、これは/etc/nsswitch.confの設定に基づいて判断される。ディレクトリの指定には、間接マップはマウントポイントを設定する。直接マップはプレースホルダである/-を使用する。繰り返すが、NISでは直接マップを扱わないことに注意する。

NISでこれらのマップを配布するには、/var/yp/Makefileを設定しなければならない。ターゲットallの定義に、auto.master、auto.home、auto.nfsを記述する。デフォルトのMakefileには既にauto.master、auto.homeの情報が設定されているかもしれない。auto.nfsについては、次のコードを挿入する。

AUTO_NFS    = $(YPSRCDIR)/auto.nfs

all:  passwd group hosts shadow auto.master auto.home auto.nfs

auto.nfs: $(AUTO_NFS) $(YPDIR)/Makefile
  @echo "Updating $@..."
  -@sed -e "/^#/d" -e s/#.*$$// $(AUTO_NFS) | $(DBLOAD) 
    -i $(AUTO_NFS) -o $(YPMAPDIR)/$@ - $@
  -@$(NOPUSH) || $(YPPUSH) -d $(DOMAIN) $@

auto.masterやauto.homeも同様の定義がなされているので、それらを参考にすると間違いないだろう。オートマウンタマップのキーがNISマップのキーになるので、これをmake後にypcatで確認することが出来る。

オートマウンタのサービスが起動するときにオートマウンタマップを参照するので、NISで適切にマップが配布されていればブート時にオートマウンタが起動するように設定しておくだけでクライアント側ではオートマウンタを利用できる。既にオートマウンタサービスが起動しているなら、次のコマンドでオートマウンタマップだけ再読込すればよい。

# service autofs reload

/homeをマウントするのであれば、クライアントマシンを一度再起動した方が混乱が少ないかもしれない。またオートマウンタで設定されているマウントポイントは自動で作成されるが、一応/nfsはmkdirで作成しておいた方がいいだろう。オートマウンタが起動しても/nfsをlsするだけでは見えないが、/nfs/localをlsするなどしてアクセスすれば見えるようになる。

直接マップ変換

NISでは直接マップを扱えないので、/usr/localなどをオートマウンタでマウントしたいときはそれに代わる手段を用いる必要がある。これは非常に単純で、間接マップで配布されるlocalに対してシンボリックリンクを作成すればよい。

# Original Direct-Map
/usr/local  -ro,hard,intr server01:/export/local

以下のように変換する。

# /etc/auto.master
/nfs  auto.nfs  --timeout=600

# /etc/auto.nfs
local -ro,hard,intr server01:/export/local
# ln -s /nfs/local /usr

このようにすることで、/usr/localへのアクセスが発生したときにそのシンボリックリンクを辿って/nfs/localへとアクセスする。/nfs/localはオートマウンタで管理されているので、これによってserver01:/export/localがオートマウントされる。同様に/usr/man等、直接マップとして扱いたいエントリを全て1つの間接マップで扱い、そのシンボリックリンクを作成することで直接マップを間接マップとして置き換えることが出来る。

キー置換・変数置換

実際のところ、/usr/local以下全てのエントリを配布するのであれば、直接マップやその変換で配布する必要はない。/usr/localそのものではなく、それより下のエントリを間接マップで配布すればいいだけである。ただし、全てのキーを登録するのは面倒なので、キーの置換を行ったほうが便利。これは/homeのような不特定多数が使用するディレクトリで、エントリの命名規則が一定しないものにも有効な方法といえる。それ以外にも、変数置換という方法がある。

# /etc/auto.local
bin -ro,hard,intr server01:/export/local/bin
lib -ro,hard,intr server01:/export/local/lib
man -ro,hard,intr server01:/export/local/man
sbin  -ro,hard,intr server01:/export/local/sbin
# ... 以下キーの指定が続くとする

# /etc/auto.master
/usr/local  auto.local  --timeout=600

これは次のように置き換えられる。

# /etc/auto.local
bin -ro,hard,intr server01:/export/local/&
lib -ro,hard,intr server01:/export/local/&
man -ro,hard,intr server01:/export/local/&
sbin  -ro,hard,intr server01:/export/local/&

# /etc/auto.master
/usr/local  auto.local  --timeout=600

さらに次のように簡略化できる。

# /etc/auto.local
* -ro,hard,intr server01:/export/local/&

# /etc/auto.master
/usr/local  auto.local  --timeout=600

このとき、/usr/local/bin/testにアクセスがあると、オートマウンタはbinをキーにして、server01:/export/local/bin/testにアクセスしようとする。/usr/local/man/man1ならオートマウンタはmanをキーにする。このように、アクセス時にマップキーがワイルドカード(アスタリスク表示)にあたり、アンパサンドで該当するキーの名前に変換する方法をキー置換という。ワイルドカードマップエントリは全てのマップキーに一致するので、固有マップエントリはこれより前に記述する必要がある。

変数置換はシェルスクリプトを記述したことがあるならば、馴染みのある置換である。例を示す。

# /etc/auto.direct
/usr/local/bin  -ro server01:/export/local/bin.$ARCH

組み込み変数は以下の通り。

  • ARCH:アーキテクチャ(uname -m)
  • CPU:プロセッサタイプ(uname -p)
  • HOST:ホスト名(uname -n)
  • OSNAME:オペレーティングシステム(uname -s)
  • OSREL:OSのリリース(uname -r)
  • OSVERS:OSのバージョン(uname -v)

NISでオートマウンタを管理する場合、異なるアーキテクチャやバージョンのOSも同じマップで扱うことになるので、このような変数でマウント先を変えた方がいい場合がある。クライアントのOSとバージョンを固定していれば、変数置換はあまり使わないかもしれない。

また、自分で独自変数を組み込むことも出来る。automountの-Dオプションを使って追加定義する。

# automount -D MACHINE=`/bin/uname -m`

このようにすると、MACHINE変数と組み込み済みのARCH変数は同一の意味を持つ。ただし、独自に変数を追加するには起動スクリプトを編集して-Dオプションを加える必要があるので、組み込み変数で定義されているものはそれを使うべき。

この他に、同一マップでのNISとローカルファイルの混在、間接マップの階層化、実行可能な間接マップ等々、複雑なマップの設定方法があるがここでは扱わない。必要な場合は参考サイトを参照のこと。

参考サイト

Squid

Squidはプロキシサーバの他、ウェブキャッシュサーバとしてもよく利用される。特にLAN内に多数のクライアントが存在する場合、キャッシュを有効活用することでネットワークの負担を減らすことができ、ウェブブラウジングの速度も快適になる。ここではSquid 2.5を透過プロキシサーバとして、クライアント側に設定を施さずにhttpリクエストに対してプロキシを利用させるようにする。透過プロキシは、クライアントがリクエストを要求する経路上に存在(ルータとプロキシサーバが同一)するほうが設定が単純になる。

Squidはyumやapt-get等パッケージマネージャで簡単にインストールできる。設定するファイルは/etc/squid/squid.conf。英語だが詳細なマニュアルが記述されており、最新の情報を得るにはこのファイルを読むのが良い。インストール直後はsquid.conf.defaultと同一であり、設定だけを施すのでsquid.confを一旦削除し、新たにsquid.confを作成する。

# rm /etc/squid/squid.conf
# vi /etc/squid/squid.conf
### /etc/squid/squid.conf
# Basic Option
visible_hostname localhost
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl localnet src 192.168.1.0/24
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access allow localnet
http_access deny all

# Transparent-Proxy Option
http_port 3128 transparent
http_port 3128 vhost
http_port 3128 vport=80
http_port 3128 protocol=http
forwarded_for off
header_access Via deny all
header_access X-Forwarded-For deny all

# Cache Option
cache_mem 64 MB
cache_dir ufs /var/spool/squid 256 16 256
cache_effective_user squid
cache_effective_group squid

基本設定ではサーバのポート番号、アクセス制限等を記述している。LAN内のアクセスのみ有効とする。透過プロキシ設定はこの通りに設定する。キャッシュ設定は、キャッシュによるアクセス速度の向上を考えるならば多めにとったほうが良い。

squid 2.6 stable6のアップデート以降、httpd_accel系のオプションが使えず。http_portのオプションにアクセラレートモードがあるので、こちらに切り替わった?

設定が終了したら、キャッシュディレクトリを確保する。

# squid -z

次に透過プロキシとして動くように、iptablesを用いてhttpへの要求をプロキシサーバへ送る。ルータとプロキシサーバが別の場合、整合性をとるための設定を追加する必要がある。

LAN_IP="192.168.0.1" # ルータIP
LAN_NET="192.168.0.0/24"
LAN_IF="eth1"
PROXY_IP="192.168.0.100" # プロキシサーバIP
PROXY_PORT="3128"

# ルータとプロキシサーバが同一
iptables -t nat -A PREROUTING -i $LAN_IF -p tcp --dport http -j REDIRECT --to-port $PROXY_PORT

# ルータとプロキシサーバが別
iptables -t nat -A PREROUTING -i $LAN_IF -s ! $PROXY_IP -p tcp --dport http -j DNAT --to $PROXY_IP:$PROXY_PORT
iptables -t nat -A POSTROUTING -o $LAN_IF -s $LAN_NET -d $PROXY_IP -j SNAT --to $LAN_IP
iptables -A FORWARD -s $LAN_IP -d $PROXY_IP -i $LAN_IF -o $LAN_IF -p tcp --dport $PROXY_PORT -j ACCEPT

Squidをブート時に起動するように設定。サービスを開始する。

# chkconfig squid on
# service squid start

参考サイト

BOINC

BOINCは、CPUの空き時間を利用して各種の科学計算を行うためのクライアント。BOINCクライアントを実行すると、各々の科学プロジェクトから依頼された計算をCPUの空き時間を利用して計算し、その結果をネットワークを介してサーバへと送り返すだけである。ネットワーク上の幾万を超えるコンピュータが連動して行えば、CPU時間にして数億とかかるような計算も現実的な時間内に終了する。クライアント側で行うべき作業はBOINCのインストールと実行、プロジェクトへの参加だけ。ネットワークを介したボランティアのようなもの。

BOINCのインストールと設定

Fedoraや一部のLinuxでは、アップデート用のリポジトリ内に既にBOINCクライアントがダウンロードできるよう整備されている。このようなOSでは、それぞれのプログラム管理サービスでインストールを指示するだけで良い。Fedoraではyum、Ubuntuではaptなど。

# yum install boinc-*

BOINCを実行する際に必要なものがインストールされる。リポジトリでBOINCが管理されていない場合、公式サイト(BOINC in Japanese)などからクライアントプログラムをダウンロードし、適当な場所にインストールする必要がある。

Fedoraにおいてyumを経由してインストールした場合、クライアント用のサーバが設定される。PCの起動時に自動でBOINCが実行されるようにするには、chkconfigでBOINCのサービスをONにする。

# chkconfig boinc-client on

次にBOINCクライアントマネージャを実行する。次のコマンドでマネージャが起動する。

# boincmgr

GUIアプリが立ち上がるが、プロジェクトに登録していないのでBOINCはまだ何もしていない。"Advanced View"ボタンをクリックし、詳細表示を行うウィンドウに移る。"高度な操作"タブから"コンピュータの選択"をクリックし、ホスト名に"localhost"、/var/lib/boinc/gui_rpc_auth.cfgにあるパスワードを入れ、OKボタンをクリック。

ここで新規プロジェクトへの参加を促すウィザードが立ち上がる。プロジェクトへ参加するには、そのプロジェクトのURL(例えばWCGではhttp://www.worldcommunitygrid.org/、SETI@homeではhttp://setiathome.berkeley.edu/など)を入れるだけでよい。ただし、WCGなどの一部プロジェクトではWebページ上で先にユーザ登録を済ませておく必要がある。SETI@homeやclimateprediction.netなどでは、ユーザ登録はプロジェクト参加時に同時に行える。

プロジェクトを追加するには、BOINCクライアントマネージャから"ツール"から"プロジェクトへ参加"をクリックする。同じようにウィザードが立ち上がるので、入力に従うだけで良い。複数のプロジェクトに登録した場合でも、タスクの振り分けはBOINCクライアントが自動で行う。

参考サイト

Comment

名前:

機械的スパムを防止するための検証です。以下の画像に書かれている文字列(半角英数字)を入力してください。
Captcha Image
認証:

Information

About this website

サイト名『空想庭園』。御巫 悠が自由気ままに運営しているサイトです。役に立たないコラム書きがメインなのかもしれません。

本サイトはクリエイティブ・コモンズ表示4.0 国際ライセンスの下に提供されています。

Recent Weblog

Recent Comment

Weblog Search

Weblog Category

Friend Links