Nagios
統合監視ツールのNagiosについてまとめます。
- 環境
CentOS 5.x, Ubuntu 11.x (x86_64)
Nagios 3.2.x
プラグイン
よく利用されるNagiosプラグインについて整理する。
ディスク容量の監視 (check_disk)
check_disk -w <WARNING閾値> -c <CRITICAL閾値> [オプション]
HTTPサーバの監視 (check_http)
check_http -H <vhost> | -I <IP-address> [-u <uri>] [-p <port>] [-w <warn time>] [-c <critical time>] [-t <timeout>] [-L] [-a auth] [-b proxy_auth] [-f <ok|warning|critcal|follow|sticky|stickyport>] [-e <expect>] [-s string] [-l] [-r <regex> | -R <case-insensitive regex>] [-P string] [-m <min_pg_size>:<max_pg_size>] [-4|-6] [-N] [-M <age>] [-A string] [-k string] [-S] [--sni] [-C <age>] [-T <content-type>] [-j method]
ロードアベレージの監視 (check_load)
check_load [-r] -w WLOAD1,WLOAD5,WLOAD15 -c CLOAD1,CLOAD5,CLOAD15
MySQLサーバの監視 (check_mysql)
check_mysql [-d database] [-H host] [-P port] [-s socket] [-u user] [-p password] [-S]
MySQLサーバの監視 2 (check_mysql_query)
check_mysql_query -q SQL_query [-w warn] [-c crit] [-H host] [-P port] [-s socket] [-d database] [-u user] [-p password]
Zabbix
統合監視ツールのZabbixについてまとめます。
- 環境
CentOS 5.x, Ubuntu 11.x (x86_64)
Zabbix 2.0.x
テンプレート
Template App MySQL
Zabbixにデフォルトで入っているMySQL監視用テンプレートの設定について整理する。
- zabbix_agentd.conf
zabbix_agentd 稼働ホストの設定ファイルにMySQL監視用コマンドを追加する。# UserParameter=key,command UserParameter=mysql.status[*], /usr/bin/mysqladmin extended-status 2>/dev/null | awk '/ $1 /{print $$4}' UserParameter=mysql.ping, /usr/bin/mysqladmin ping | grep alive | wc -l UserParameter=mysql.version, /usr/bin/mysqladmin -V
実行するコマンドを ''UserParameter'' にキーと併せて設定する。ワイルドカードに入ってくる文字列値は $1 で参照できる。例えば、mysql.status[Uptime] で指定された場合は awk '/Uptime /{print $$4} ' と展開される。MySQLのユーザー認証情報は mysqladmin のオプションに適宜追加する。$ zabbix_get -s <対象のホスト名> -k 'mysql.ping' 1 $ zabbix_get -s <対象のホスト名> -k 'mysql.status[Uptime]' 3186761 $ zabbix_get -s <対象のホスト名> -k 'mysql.version' /usr/bin/mysqladmin Ver 8.42 Distrib 5.5.30, for Linux on x86_64
Supervisor: A Process Control System
Supervisor
Python製のプロセス管理ツール。コマンドラインの管理ツールやWebインタフェースも付属している。また、イベント機能 Events - supervisor を使えばプロセス管理だけでなく監視ツールとしても活用できる。フォアグラウンドで動作するプログラムをバックグラウンドで起動する(デーモン化)機能もあるので daemontools の代替ツールとして有用。
- インストール
インストールは easy_install や pip から簡単にできる。yum でインストールできるバージョンは古いので注意。$ pip install supervisor
configuration
設定項目については以下のエントリーの内容を参考にさせていただいた。
supervisord を使って Tornado をデプロイする
以下は設定ファイルの各セクションの説明(必須設定項目は太字)。サンプル設定は公式ドキュメントから引用。
- ''unix_http_server'' セクション
ローカルの supervisorctl から supervisord にアクセスするためのUNIXドメインソケットの設定。''file'' UNIXドメインソケットファイルのパス chmod UNIXドメインソケットファイルの権限(デフォルト 0700) chown UNIXドメインソケットファイルの所有者(デフォルトは supervisord を起動したユーザー) username 認証用のユーザー名 password 認証用のパスワード、平文かSHA1ハッシュを指定 - sample
[unix_http_server] file = /tmp/supervisor.sock chmod = 0777 chown= nobody:nogroup username = user password = 123
- sample
- ''inet_http_server'' セクション
ネットワーク経由で supervisorctl やWebブラウザから supervisord にアクセスするためのTCPソケットの設定。''port'' ホストとポートの指定 username 認証用のユーザー名 password 認証用のパスワード、平文かSHA1ハッシュを指定 - sample
[inet_http_server] port = 127.0.0.1:9001 username = user password = 123
- sample
- ''supervisord'' セクション
supervisord (デーモンプロセス)の設定。logfile ログファイルのパス名(デフォルト $CWD/supervisord.log) logfile_maxbytes ログファイルの最大ファイルサイズ(デフォルト 50MB) logfile_backups ログローテートで残すログファイル数(デフォルトは 10 で、 0 なら削除しない) loglevel 出力するログレベル(デフォルト info) pidfile pidファイルのパス名(デフォルト $CWD/supervisord.pid) umask supervisord プロセスの umask(デフォルト 022) nodaemon supervisord をフォアグラウンドで起動するか(デフォルト false) minfds supervisord の起動に必要なファイルディスクリプタの数(デフォルト 1024) minprocs supervisord の起動に必要なプロセスディスクリプタの数(デフォルト 200) nocleanup 起動時に古い子プロセスログを削除しないか(デフォルト false) childlogdir 子プロセスのログファイルを作成するパス(デフォルトは Python の tempfile.get_tempdir() の値) user supervisord の実行ユーザー(root で起動すると指定したユーザーにスイッチする) directory supervisord 起動時のカレントディレクトリの指定 strip_ansi エスケープシーケンスを削除するか(デフォルト false) environment 子プロセスに引き渡す環境変数を key1=value1,key2=value2 の形式で指定 Subprocess Environment identifier supervisord プロセスの識別子、RPCインタフェースで利用される - sample
[supervisord] logfile = /tmp/supervisord.log logfile_maxbytes = 50MB logfile_backups=10 loglevel = info pidfile = /tmp/supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 umask = 022 user = chrism identifier = supervisor directory = /tmp nocleanup = true childlogdir = /tmp strip_ansi = false environment = KEY1=value1,KEY2=value2
- sample
- ''supervisorctl'' セクション
supervisorctl (管理用コマンドラインツール)の設定。serverurl 接続する supervisord のURL、前述の unix_http_server または inet_http_server で指定した場所 (デフォルトは http://localhost:9001) username 認証用のユーザー名 password 認証用のパスワード prompt プロンプトとして表示する文字列(デフォルトは supervisor) history_file readline ライブラリで使う履歴ファイルのパス(デフォルトでは履歴ファイルを作成しない) - sample
[supervisorctl] serverurl = unix:///tmp/supervisor.sock username = chris password = 123 prompt = mysupervisor
- sample
- ''program:x'' セクション
管理対象のプログラムの設定。''command'' 起動する外部プログラムを指定 process_name プロセスの名前を定義する(デフォルト %(process_num)s) numprocs 起動するプロセス数(デフォルト 1) numprocs_start プロセス番号のオフセット(デフォルト 0) priority 起動/終了の優先順位、値が小さいほど先に開始し、後に終了する(デフォルト 999) autostart supervisord の起動時にプロセスを自動起動するか(デフォルト true) autorestart プロセス終了時の再起動の指定、true なら常に再起動、 false なら常に再起動しない、 unexpected なら 終了コードが exitcodes のあるもの以外なら再起動(デフォルト unexpected) startsecs ここに指定した秒数より早く終了したら、終了コードにかかわらず起動失敗とみなす(デフォルト 1) startretries 起動に失敗した場合にリトライする回数(デフォルト 3) exitcodes 正常終了とみなす終了コード(デフォルト 0, 2) stopsignal プロセスを終了させるために使うシグナル(デフォルト TERM) stopwaitsecs この秒数が経ってもプロセスが終了しない場合、 SIGKILL を送信する(デフォルト 10) killasgroup SIGKILL を送信する際にプロセスグループ全体に送信するか(デフォルト false) user プロセスの実行ユーザー(root で起動すると指定したユーザーにスイッチする) redirect_stderr 標準エラー出力を supervisord の標準出力にリダイレクトするか(デフォルト false) stdout_logfile 標準出力ログのファイル名 stdout_logfile_maxbytes 標準出力ログがこのサイズを超えたらローテートする(デフォルト 50MB) stdout_logfile_backups ログローテートで残すファイル数 (デフォルト 10) stdout_capture_maxbytes Capture Mode 時のバッファサイズ(デフォルト 0)Capture Mode stdout_events_enabled 標準出力への出力時に PROCESS_LOG_STDOUT イベントを発生させるか(デフォルト false)Capture Mode stderr_logfile 標準エラー出力のファイル名 stderr_logfile_maxbytes 標準エラー出力ログがこのサイズを超えたらローテートする(デフォルト 50MB) stderr_logfile_backups ログローテートで残すファイル数(デフォルト 10) stderr_capture_maxbytes Capture Mode 時のバッファサイズ(デフォルト 0) stderr_events_enabled 標準エラー出力への出力時に PROCESS_LOG_STDERR イベントを発生させるか(デフォルト false) environment プロセスに渡す環境変数を key1=value1,key2=value2 の形式で指定 directory 起動時のカレントディレクトリの指定(デフォルトは supervisord セクションの設定を継承) umask プロセスの umask の指定 (デフォルトは supervisord セクションの設定を継承) serverurl SUPERVISOR_SERVER_URL 環境変数に渡すURL(デフォルトは AUTO で自動設定 ) - sample
[program:cat] command=/bin/cat process_name=%(program_name)s numprocs=1 directory=/tmp umask=022 priority=999 autostart=true autorestart=true startsecs=10 startretries=3 exitcodes=0,2 stopsignal=TERM stopwaitsecs=10 user=chrism redirect_stderr=false stdout_logfile=/a/path stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/a/path stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB environment=A=1,B=2 serverurl=AUTO
''command に環境変数まで書いてしまうミスをたまに見かけるが、環境変数は environment に設定する。''
- sample
- ''include'' セクション
外部設定ファイルのパス設定。''files'' 外部設定ファイル名、スペース区切り、ワイルドカード指定も可能 - sample
[include] files = /an/absolute/filename.conf /an/absolute/*.conf foo.conf config??.conf
- sample
- ''group:x'' セクション
プロセスグループの設定。管理対象プロセスをグループ化して管理できる。''programs'' グループに属するプログラムの指定、カンマ区切り priority 起動/終了の優先順位、値が小さいほど先に開始し、後に終了する(デフォルト 999) - sample
[group:foo] programs=bar,baz priority=999
- sample
- ''evantlistener:x'' セクション
イベントリスナーの設定。例えば、プロセスが落ちたらメール通知などのイベントリスナーを設定したりできる。
まだ調査中。。。
- ''rpcinterface:x'' セクション
RPCインターフェースの設定。supervisorctl を使う場合は設定必須。基本的には以下のように設定しておけば良い。rpcinterface:x RPCインタフェースのファクトリ関数のエントリーポイントを指定 - sample
[rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
- sample
- sample
上述の各セクションをまとめた設定例を示す。## supervisord.conf [supervisord] user = supervisor logfile = /var/log/supervisord/supervisord.log logfile_maxbytes = 10MB logfile_backups = 3 loglevel = info pidfile = /var/run/supervisord/supervisord.pid nodaemon = false [inet_http_server] port = rest-term.com:9001 username = myuser password = myuserpassword [supervisorctl] user = supervisor serverurl = http://rest-term.com:9001 [include] files = supervisord.d/program.conf [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface ## supervisord.d/program.conf [program:resweb] command = /usr/local/sbin/resweb environment = RESWEB_SETTINGS=/usr/local/etc/resweb_settings.py user = supervisor group = wheel numprocs = 1 stdout_logfile = /var/log/supervisord/resweb_stdout.log stdout_logfile_maxbytes = 1MB stdout_logfile_backups = 3 stderr_logfile = /var/log/supervisord/resweb_stderr.log stderr_logfile_maxbytes = 1MB stderr_logfile_backups = 3 autostart = true autorestart = true
logging
- ログレベル
ログレベルは7段階。デフォルトは info になっている。
''critical/error/warn/info/debug/trace/blather''- sample
2007-09-08 14:43:22,886 DEBG 127.0.0.1:Medusa (V1.11) started at Sat Sep 8 14:43:22 2007 Hostname: kingfish Port:9001 2007-09-08 14:43:22,961 INFO RPC interface 'supervisor' initialized 2007-09-08 14:43:22,961 CRIT Running without any HTTP authentication checking 2007-09-08 14:43:22,962 INFO supervisord started with pid 27347 2007-09-08 14:43:23,965 INFO spawned: 'listener_00' with pid 27349 2007-09-08 14:43:23,970 INFO spawned: 'eventgen' with pid 27350 2007-09-08 14:43:23,990 INFO spawned: 'grower' with pid 27351 2007-09-08 14:43:24,059 DEBG 'listener_00' stderr output: /Users/chrism/projects/supervisor/supervisor2/dev-sandbox/bin/python: can't open file '/Users/chrism/projects/supervisor/supervisor2/src/supervisor/scripts/osx_eventgen_listener.py': [Errno 2] No such file or directory 2007-09-08 14:43:24,060 DEBG fd 7 closed, stopped monitoring <PEventListenerDispatcher at 19910168 for <Subprocess at 18892960 with name listener_00 in state STARTING> (stdout)> 2007-09-08 14:43:24,060 INFO exited: listener_00 (exit status 2; not expected) 2007-09-08 14:43:24,061 DEBG received SIGCHLD indicating a child quit
debug 以下を指定するとプログラムのSTDOUT/STDERRなどもログに出力されるので開発時に有用。
- sample
- Capture Mode
Capture Mode
プロセスのログ出力を検知して任意の処理を実行することができる。まだ調査中。。
supervisorctl
コマンドラインの管理ツール。supervisordや管理しているプロセスの起動/終了、ログの確認などが行える。
既存のプロセスの設定を変更した場合は、updateでプロセスの設定更新を忘れないように。
バックアップツール
ここではLinux OSで利用できるバックアップツールについて整理する。
- 環境
CentOS 5.x, Ubuntu 12.x (x86_64)
rdiff-backup
atodekaku
duplicity
librsync, gnupg が必要
- SYNOPSIS
duplicity [options] source_directory target_url duplicity [options] source_url target_directory duplicity full [options] source_directory target_url duplicity incremental [options] source_directory target_url duplicity restore [options] source_url target_directory duplicity verify [options] source_url target_directory duplicity collection-status [options] target_url duplicity list-current-files [options] target_url duplicity cleanup [options] [--force] target_url duplicity remove-older-than time [options] [--force] target_url duplicity remove-all-but-n-full count [options] [--force] target_url duplicity remove-all-inc-of-but-n-full count [options] [--force] target_url
atodekaku
ネットワーク関連
Linuxのネットワーク系コマンド関連のメモ
情報量が増えてきたので今後の更新はNetworkページで
tcpdump
tcpdump - ネットワークのトラフィックをダンプする tcpdump [ -adeflnNOpqRStvxX ] [ -c count ] [ -F file ] [ -i interface ] [ -m module ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ expression ]
ネットワークインターフェースを通過するパケットを監視し、expression(評価式)にマッチしたパケットの概要を表示する。
- オプション
-A 全てのパケットをASCII表示 -c 数値 指定した数のパケットを受信したら終了 -D tcpdump(8)でキャプチャできるネットワークインタフェース一覧を表示 -e 全てのパケットのリンクレベルヘッダを表示 -F ファイル名 評価式の入力に使用するファイルを指定 -i インタフェース 指定したネットワークインタフェースのパケットを監視 -l バッファを標準出力にも出力 -n アドレス、ポート番号の名前解決を行わない -N ホスト名のドメイン部分を表示しない -r ファイル名 パケットを-wオプションで作成したrawファイルから読み込む -S TCPシーケンス番号を相対値ではなく絶対値で表示 -t ダンプ表示に時間を表示しない -w ファイル名 パケット解析を指定したファイルにrawで出力 -x 出力を16進数で表示 -X 出力を16進数とASCIIで表示 expression 与えられない場合はネットワークインターフェースを通る全てのパケットを出力 - expression
type host/net/portを指定、デフォルトはhost dir src/dst/src or dst/src and dstを指定、デフォルトはsrc or dst proto ip/ip6/arp/icmp/tcp/udpを指定
- expression
## 192.168.2.98:80にアクセスするパケットヘッダを16進数とASCIIで出力 $ tcpdump -i eth0 -X dst host 192.168.2.98 and dst port 80
Deprecated Linux networking commands
ネットワーク関連のdeprecate対象のコマンドとその代替コマンドについて。
参考: Deprecated Linux networking commands and their replacements
ifconfig や netstat など普段からよく利用しているものも含まれているので注意しておこう。基本的に ip コマンドひとつで置き換えできそう。
NFS (Network File System)
以下、CentOS 6でのNFSv4サーバ構築手順を整理する。
- NFS関連パッケージのインストール (共通)
$ sudo yum install nfs-utils.x86_64
依存パッケージとして rpcbind なども一緒にインストールされる。 - rpcbind, nfsサービスの起動 (サーバ)
$ sudo service rpcbind start Starting rpcbind: [ OK ] $ sudo service nfs start Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ]
- rpcbind, nfsサービスの自動起動設定 (サーバ)
$ sudo chkconfig rpcbind on $ sudo chkconfig nfs on
- 公開ディレクトリの設定 (サーバ)
/etc/exports に公開するディレクトリやマウントを許可するIPなどを記述する。/mnt/data 192.0.1.0/24(rw)
- 設定を反映し、公開状態の確認 (サーバ)
$ sudo exportfs -ra $ sudo exportfs -v /mnt/data 192.0.1.0/24(rw,wdelay,root_squash,no_subtree_check)
- rpcbindサービスの起動 (クライアント)
$ sudo service rpcbind Starting rpcbind: [ OK ]
- 公開ディレクトリをNFSマウント (クライアント)
$ sudo mount -t nfs4 192.0.1.13:/mnt/data /mnt/data
- マウント状態を確認 (クライアント)
$ mount -t nfs4 192.0.1.13:/mnt/data on /mnt/data type nfs4 (rw,addr=192.0.1.13)
RHEL 6.x系以前で利用していた portmap は削除され、6.x系では rpcbind に集約されている。NFSv4はファイアウォールを通過してインターネット上で動作するため(TCPが必須となる)、実は rpcbind サービスは不要。iptablesが有効な場合はTCPポート 2049を開放しておくのを忘れないように。
無線LAN
- 環境
Ubuntu 14.04 LTS (kernel: 3.13.0-24-generic)
BUFFALO WLI-UC-GNM
最近のLinuxは無線LAN環境を比較的簡単に構築できる。まずはLANの無線子機を接続してOSから認識されるか確認。
lsusb | lsusb is a utility for displaying information about USB buses in the system and the devices connected to them. |
iwconfig | configure a wireless network interface |
iwlist | Get more detailed wireless information from a wireless interface |
wpa_supplicant | Wi-Fi Protected Access client and IEEE 802.1X supplicant |
$ lsusb Bus 002 Device 003: ID 0411:01a2 BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNM Wireless LAN Adapter [Ralink RT8070]
iwconfig コマンドは無線LANインタフェースの状態を表示、設定する。引数を与えない場合はネットワークインタフェースの無線情報を表示する。
$ iwconfig eth0 no wireless extensions. lo no wireless extensions. wlan0 IEEE 802.11bgn ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm Retry long limit:7 RTS thr:off Fragment thr:off Power Management:on
iwlist コマンドでアクセスポイントの検知を行うには scan サブコマンドを指定する。
$ iwlist scan eth0 Interface doesn't support scanning. lo Interface doesn't support scanning. wlan0 Scan completed : Cell 01 - Address: 00:1D:73:EF:E2:4C Channel:10 Frequency:2.457 GHz (Channel 10) Quality=61/70 Signal level=-49 dBm Encryption key:on ESSID:"PISCES" Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s 36 Mb/s; 48 Mb/s; 54 Mb/s Mode:Master Extra:tsf=0000012dd9943df5 Extra: Last beacon: 31424ms ago IE: Unknown: 0006504953434553 IE: Unknown: 010482848B96 IE: Unknown: 03010A IE: Unknown: 2A0100 IE: Unknown: 2F0100 IE: IEEE 802.11i/WPA2 Version 1 Group Cipher : TKIP Pairwise Ciphers (1) : TKIP Authentication Suites (1) : PSK IE: Unknown: 32080C1218243048606C ... 省略
ここではGUIから指定のアクセスポイントに接続したが、wpa_supplicant コマンドを利用した接続方法も後で試す。
システム管理
- 環境
CentOS 7.x (x86_64) , Ubuntu 14.04 LTS (x86_64)
起動関連
/etc/default/grub でCUI/GUIを切り替えることが出来る。(Ubuntuの場合)
GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" ## GUIモード #GRUB_CMDLINE_LINUX_DEFAULT="text" ## CUIモード GRUB_CMDLINE_LINUX=""
編集が完了したらGRUBを更新するのを忘れずに。
$ sudo update-grub Generating grub configuration file ... Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported. Linux イメージを見つけました: /boot/vmlinuz-3.13.0-24-generic Found initrd image: /boot/initrd.img-3.13.0-24-generic Found memtest86+ image: /boot/memtest86+.elf Found memtest86+ image: /boot/memtest86+.bin 完了
systemd
RHEL 7.x系から導入されたシステム管理デーモン(systemd,journald等)、ユーティリティツール(systemctl,journalctl等)。
- ユニットファイル
systemdは従来のサービス起動スクリプトの代わりにユニットファイルというものを作成する。
ユニットファイル例 (/usr/lib/systemd/system/daemon-test.service)[Unit] Description=daemon test [Service] ExecStart=/path/to/daemon-test.py ExecStop=/usr/bin/kill -TERM $MAINPID Restart=always Type=simple [Install] WantedBy=multi-user.target
内容は見ればだいたいわかると思うけど設定項目については後で整理する。 - ユーティリティ
サービス管理は従来の service コマンドに代わって systemctl コマンドを利用する。
atodekaku
また、ログはjournaldが管理しており、journalctl コマンドで確認できる。$ journalctl -u daemon-test
systemdは設計思想がUNIX哲学に反しているという理由から過去にいろいろと論争があったらしいが、僕自身はその世代から少し外れているので詳細はよく知らない。systemdに対する批判も少なくないようなので、歴史的な背景も含めて調べておきたい。systemdは少なくとも表面的には便利な仕組みに見えているのだけど。
firewalld
RHEL 7.x系から導入されたファイアウォール管理ツール。
atodekaku
swapの拡張
単一ファイルをスワップ領域として利用できるように設定する。
## 任意の名前、サイズのファイルを作成する $ sudo dd if=/dev/zero of=/newswap bs=1024 count=128000 128000+0 records in 128000+0 records out 131072000 bytes (131 MB) copied, 1.7639 seconds, 74.3 MB/s ## 作成したファイルをswap領域として利用できるように変換する $ sudo mkswap /newswap mkswap: /newswap: warning: don't erase bootbits sectors on whole disk. Use -f to force. Setting up swapspace version 1, size = 127996 KiB no label, UUID=91588fb6-ac01-47f6-bb42-064c1c7c4599 ## もし既にswap領域が存在する場合は一時的に外しておく ## swap内のデータはメモリに書き出されるのでメモリ残容量に注意 $ sudo swapoff /dev/vda2
## 作成したファイルをswap領域としてシステムに追加設定する $ sudo swapon /newswap
設定したswap用ファイルをOS再起動時に自動でマウントするように /etc/fstab を編集する。
/newswap swap swap defaults 0 0
sudo
- secure_path
/etc/sudoers の env_keep にPATHを追加しても引き継がれない場合は ''secure_path'' が設定されているか確認する。これはCentOS 5.x系では存在していない。Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
これをコメントアウトするのは良くないはずなので、/usr/local/bin とか必要最低限のPATHのみを追加するのが良いと思う。
- always_set_home
/etc/sudoers 内で ''always_set_home'' が設定されている場合は変身対象ユーザのホームディレクトリにセットされるので注意(つまりsudoで$HOMEは引き継がれない)。
package-clearnup (yum-utils)
OSアップデート後の古いパッケージ削除などを安全に行うためのユーティリティツール。/bootの容量が少なくなってカーネルアップデートに失敗するようになったら利用すると良い。
Usage: package-cleanup: helps find problems in the rpmdb of system and correct them usage: package-cleanup --problems or --leaves or --orphans or --oldkernels
## yum-utils パッケージをインストールする $ sudo yum install yum-utils ## oldkernels オプションを付けると古いカーネルを削除してくれる ## count オプションを付けると最新N個のカーネルを残す $ sudo package-clearnup --oldkernels --count=2
ただし、2.6系から3.1系へのカーネルアップデートをした際、2.6系のカーネルを残しておくと、他のrpmパッケージ(カーネルに依存するgrubbyパッケージ等)の更新で失敗することが多いので注意。
/etc/tmpfiles.d
CentOS7.x系では /run ディレクトリがtmpfsにマウントされているため、OSを再起動すると/run (=/var/run)に置かれたファイルは全て削除される。PIDファイルを /run 配下に置いている場合は注意。ここで、/etc/tmpfiles.d 配下に設定ファイルを作っておくと、OS起動時に指定したディレクトリが自動的に作成される。
$ cat /etc/tmpfiles.d/nginx.conf d /run/nginx 0755 root root
/usr/lib/tmpfiles.d 配下に既存の設定ファイルが置かれているので参考に。
その他
GCC
最適化オプションの確認。比較的新しいGCC(4.4以降?)では -Q オプションを利用することにより、有効化される最適化オプションを確認することができる。
## 例) -march=native を付けた時に有効化されるオプションを確認 $ gcc -Q --help=target -march=native ... 省略 -msse [enabled] -msse2 [enabled] -msse2avx [disabled] -msse3 [enabled] -msse4 [enabled] -msse4.1 [enabled] -msse4.2 [enabled] -msse4a [disabled] -msseregparm [disabled] -mssse3 [enabled] ... 省略
Python 2.x
gccがバージョン別に複数インストールされている場合は使いたい方を明示しよう。Unicodeの扱いはUCS-4でコンパイルした方が良い。
configureオプション
./configure --prefix=/usr/local/python-2.7.5 --enable-shared --enable-unicode=ucs4 CC=/usr/bin/gcc44 CXX=/usr/bin/g++44
makeするといくつかのモジュールが組み込めないと警告される(エラーではない)。
Python build finished, but the necessary bits to build these modules were not found: _tkinter bsddb185 dl gdbm imageop readline sunaudiodev To find the necessary bits, look in setup.py in detect_modules() for the module's name.
必要なものは入れておこう。もし上記リスト内に _ssl モジュールが挙げられていたら openssl-devel を入れておくこと。HTTPS通信を行うためには必要。
$ sudo yum install openssl-devel.x86_64
また、readline はCUIでの各操作が多い場合は入れておくことをオススメ。
$ sudo yum install readline-devel.x86_64
- SciPyのインストール
pipでSciPyをインストールするにはBLASとLAPACK, NumPyが環境にインストール済みな必要がある。## BLAS/LAPACK/ATLASのインストール ## ATLASはBLAS実装のひとつでリファレンス実装(CBLAS)より最適化されている $ sudo yum install blas-devel.x86_64 lapack-devel.x86_64 atlas-devel.x86_64 ## NumPyのインストール # sudo pip numpy ## SciPyのインストール $ sudo pip install scipy
コンパイル時間は長いので気長に待とう。
CMake
最近はOpenCVやMySQLなどビルドにCMakeを利用するプロダクトも増えてきた。しかし、yumで入るCMakeのバージョンはremiでもrpmforgeでも古いのでソースからコンパイルしてインストールする必要に迫られるかもしれない。
OpenSSL
SSL関連については別ページに整理する。
その他メモ
- 改行コード変換
trコマンドを利用する。## CRLF(Windows) -> LF(Unix) $ tr -d '\r' <windows.txt >unix.txt
- ターミナル起動
Ubuntu (Unity) では「Ctrl」+「Alt」+「T」で起動できる。