ラベル CentOS の投稿を表示しています。 すべての投稿を表示
ラベル CentOS の投稿を表示しています。 すべての投稿を表示

2015-03-20

sudo初回実行時のレクチャメッセージを改めて表示する

■Cent OS 6.xの場合
# find / -name <ユーザ名>
/var/spool/mail/<ユーザ名>
/var/db/sudo/<ユーザ名>
/home/<ユーザ名>
な感じでひっかかってくるので
# rm -rf /var/db/sudo/<ユーザ名>

■Cent OS 5.xの場合
# find / -name <ユーザ名>
/var/spool/mail/<ユーザ名>
/var/run/sudo/<ユーザ名>
/home/<ユーザ名>
な感じでひっかかってくるので
# rm -rf /var/run/sudo/<ユーザ名>

これでsudoを実行すると改めて表示されます

2014-09-11

Apache on CentOSでクライアント証明書認証を設定

まずは、apacheとmod_sslのインストール
yum install httpd mod_ssl

次に、証明書の準備
ここでは、オレオレ証明書で準備(-daysを3650日の10年にセット)
openssl genrsa 2048 > /etc/httpd/conf/server.key
openssl req -new -key /etc/httpd/conf/server.key -subj "/C=JP/ST=Tokyo/L=my city/O=my company/CN="`hostname` > /etc/httpd/conf/server.csr
openssl x509 -days 3650 -req -signkey /etc/httpd/conf/server.key < /etc/httpd/conf/server.csr > /etc/httpd/conf/server.crt

そして、クライアント証明書の検証のため

を発行したCA局の公開鍵を/etc/httpd/conf/cacert.pemに設置

デフォルトで用意される/etc/httpd/conf.d/ssl.confには色々と長ったらしく書かれているけれど

次の内容で置き換え

とりあえず、ここでは

SSL_CLIENT_S_DN_CN

の値を用いて、これがUser1かUser2の場合のみアクセスを許可するという設定

他に利用できる値は

http://httpd.apache.org/docs/2.2/mod/mod_ssl.html
を参照

Listen 443 https

SSLSessionCache  shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 300
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin


LogFormat "%h %l %{SSL_CLIENT_S_DN_CN}x %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" ssl_access
ErrorLog logs/ssl_error_log
CustomLog logs/ssl_access_log ssl_access
LogLevel warn

SSLEngine on
SSLProtocol all -SSLv2
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/server.key
SSLCACertificateFile /etc/httpd/conf/cacert.pem
SSLVerifyClient require
SSLVerifyDepth 10


SSLRequire %{SSL_CLIENT_S_DN_CN} in {\
"User1",\
"User2"\
}


BrowserMatch "MSIE [2-5]" \
  nokeepalive ssl-unclean-shutdown \
  downgrade-1.0 force-response-1.0


ここまで設定したらhttpdを起動してとりあえずクライアント証明書がインストールされたブラウザでアクセスしてみる
service httpd start
すると、利用するクライアント証明書を聞かれるので選択

これで/var/log/httpd/ssl_access_logにSSL_CLIENT_S_DN_CNの値が出力されるので

適宜SSLRequireのところの許可リストをいじってあげればOK

2014-06-17

CentOSでSOCKS4,SOCKS5 Proxy構築

パッケージのダウンロード&必要パッケージのインストール&rpm作成&rpmからインストール
# wget http://www.inet.no/dante/files/dante-1.4.0.tar.gz
# yum install -y gcc make bison flex rpm-build openldap-devel pam-devel openssl-devel libgssapi-devel
# rpmbuild -ta dante-1.4.0.tar.gz
# rpm -ivh rpmbuild/RPMS/x86_64/dante-1.4.0-1.el6.x86_64.rpm rpmbuild/RPMS/x86_64/dante-server-1.4.0-1.el6.x86_64.rpm

設定ファイル(/etc/sockd.conf)の編集
logoutput: syslog stdout /var/log/sockd.log
internal: eth0 port = 1080
external: eth0
socksmethod: username none
clientmethod: none
user.privileged: sockd
user.unprivileged: sockd
compatibility: sameport
client pass {
    from: x.x.x.x/x port 1-65535 to: 0.0.0.0/0
}
socks pass {
    from: x.x.x.x/x to: 0.0.0.0/0
    protocol: tcp udp
}

設定ファイル(/etc/socks.conf)の編集
route {
 from: 0.0.0.0/0 to: 0.0.0.0/0 via: direct
 proxyprotocol: socks_v5
}

再起動
# service sockd restart

これで、とりあえずはx.x.x.x/xからの接続に関して認証なしでどこへでも行ける状態で稼働するので、適宜認証入れたり行先絞ったりしましょう

2014-06-02

yum,rpmコマンドが固まってしまって応答しない場合の対処法

# yum list
Loaded plugins: downloadonly, fastestmirror, security
な感じで固まってしまって、CTRL+Cも応答しなくなってしまった

rpmのデータベースが壊れてしまうとこのような症状になるらしい

その場合は
rpm -qa
も同様に応答しなくなってしまう



そこで、その対処法

1. 稼働中のyum,rpm関連のプロセスを強制終了
# pkill -9 yum
# pkill -9 rpm

2. 既存のrpmデータベースを削除
# rm /var/lib/rpm/__db.*

3.rpmのデータベースを再構築する
# rpm --rebuilddb
※これは数秒で終了しました

このあとはyum,rpmコマンドいずれも応答が返ってくるようになり正常に戻りましたヾ(*・∀・)ノ"

2013-07-23

s3cmd version 1.5.0-alpha3入れたらjsonが無いと言われた

s3cmdで5GB以上のファイルをアップロードするには、1.1.0 beta2以降で

--multipart-chunk-size-mb=5120

をつけてアップロードしてあげれば良いらしいのだが

$ s3cmd --version
Traceback (most recent call last):
  File "/usr/bin/s3cmd", line 28, in ?
    import S3.Exceptions
  File "/usr/lib/python2.4/site-packages/S3/Exceptions.py", line 6, in ?
    from Utils import getTreeFromXml, unicodise, deunicodise
  File "/usr/lib/python2.4/site-packages/S3/Utils.py", line 22, in ?
    import Config
  File "/usr/lib/python2.4/site-packages/S3/Config.py", line 14, in ?
    import json
ImportError: No module named json

というエラーがでてしまう

どうやらpython-jsonを入れてあげれば良いらしい
# yum install -y python-json

$ s3cmd --version
s3cmd version 1.5.0-alpha3
これで解決ヾ(*・ω・)シ

2013-04-26

EC2上のCentOS6.3にChef Server 11.0.6をインストールしてみた

■サーバ側

インスタンスタイプはm1.mediumを利用した→m1.smallでもいけた
ダウンロードサイトよりChef ServerのOmnibus Installerのダウンロード
wget https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.6-1.el6.x86_64.rpm
yumコマンドでインストール
yum install -y --nogpg chef-server-11.0.6-1.el6.x86_64.rpm
設定
chef-server-ctl reconfigure
テスト
chef-server-ctl test
あとはこのサーバの443番ポートを自分の環境と、Chefで管理しようとしている対象ノードからアクセスできるように設定しておく
ここまで行えば、https://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com/にブラウザでアクセスすればWeb管理画面が表示される
インストール処理の過程でいわゆるオレオレ証明書が作成されるのでSSL証明書の警告がでる。

■ワークステーション側

ダウンロードサイトよりChef ClientのOmnibus Installerのダウンロードしてインストール
レポジトリの雛形をダウンロードしてきて展開
cd ~/
wget https://github.com/opscode/chef-repo/archive/master.zip
unzip master.zip
mv chef-repo{-master,}
ワークステーション上にknifeの設定ファイルを作成
mkdir ~/chef-repo/.chef
cat <<"EOF" > ~/chef-repo/.chef/knife.rb
current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "admin"
client_key               "#{current_dir}/admin.pem"
validation_client_name   "chef-validator"
validation_key           "#{current_dir}/chef-validator.pem"
chef_server_url          "https://xxx.xxx.xxx.xxx"
cache_type               'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path            ["#{current_dir}/../cookbooks"]
EOF
Chef Serverからインストール時に作成される認証情報を入手して、ワークステーション側の~/chef-repo/.chef/に配置する
Chef Server上のこのファイル↓
/etc/chef-server/admin.pem
/etc/chef-server/chef-validator.pem
クライアントリストを取得してみて動作確認
$ cd ~/chef-repo
$ knife client list
chef-validator
chef-webui

■ノード側

ワークステーションからbootstrapを実行
※ワークステーションからノードの22番ポートに、ノードからChef Serverの443番ポートにアクセスできるよう設定しておく
knife bootstrap yyy.yyy.yyy.yyy -i ssh_key_file
ワークステーションからノードが登録されたことを確認
$ knife node list
new_node
これでとりあえずはChef Serverからノードを管理できる環境が整いましたヾ(*・ω・)シ

---------- P.S. -----------
※正式なSSL証明書がある場合は、SSL証明書の警告がでないよう置き換えておけば良さそう
/var/opt/chef-server/nginx/ca/chef11.crt
※cookbookのアップロードに失敗する場合はアップロード先URLの設定を書き換えて再起動
/var/opt/chef-server/erchef/etc/app.config
# {s3_url, "[hostname]"},
chef-server-ctl restart

2012-09-07

AWS EC2上のCentOS5.8でhttpd-2.4.3(Apache2.4.3)のrpmを作成

まずは依存モジュールをyumで削除&インストール
yum -y erase apr
yum -y install db4-devel expat-devel postgresql-devel sqlite-devel freetds-devel unixODBC-devel nss-devel mysql-devel distcache-devel libuuid-devel lksctp-tools-devel doxygen openldap-devel openssl-devel pcre-devel lua-devel
yumでは入らない依存モジュールのダウンロード&ビルド&インストール
wget http://ftp.jaist.ac.jp/pub/apache/apr/apr-1.4.6.tar.bz2
rpmbuild -tb apr-1.4.6.tar.bz2
yum install --nogpgcheck /usr/src/redhat/RPMS/x86_64/apr-*

wget http://ftp.jaist.ac.jp/pub/apache/apr/apr-util-1.4.1.tar.bz2
rpmbuild -tp --nodeps apr-util-1.4.1.tar.bz2
sed -i "s/libuuid-devel/e2fsprogs-devel/" /usr/src/redhat/BUILD/apr-util-1.4.1/apr-util.spec
mv apr-util-1.4.1.tar.bz2 /usr/src/redhat/SOURCES
rpmbuild -bb /usr/src/redhat/BUILD/apr-util-1.4.1/apr-util.spec
とやったところ、テストでエラー(´・ω・`)
teststrmatch        : SUCCESS
testuri             : SUCCESS
testuuid            : SUCCESS
testbuckets         : SUCCESS
testpass            : SUCCESS
testmd4             : SUCCESS
testmd5             : SUCCESS
testcrypto          : 
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_128/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)                                                          passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)                                                          passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_ECB nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_3DES_192/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
passphrase: KEY_AES_256/MODE_CBC nss native error -8128:  (SEC_ERROR_NO_MODULE)
FAILED 6 of 13
testldap            : SUCCESS
testdbd             : SUCCESS
testdate            : SUCCESS
testmemcache        : SUCCESS
testxml             : SUCCESS
testxlate           : SUCCESS
testrmm             : SUCCESS
testdbm             : SUCCESS
testqueue           : SUCCESS
testreslist         : SUCCESS
Failed Tests            Total   Fail    Failed %
===================================================
testcrypto                 13      6     46.15%
Programs failed: testall
make: *** [check] エラー 1
+ exit 1
エラー: /var/tmp/rpm-tmp.35396 の不正な終了ステータス (%check)
調べてみた感じだとこのあたりにバグ報告されてて解決されてない??
てことで、とりあえずテストすっ飛ばしてビルドしちゃいました(…大丈夫か?)
sed -i "s/libuuid-devel/e2fsprogs-devel/" /usr/src/redhat/BUILD/apr-util-1.4.1/apr-util.spec
sed -i "s/make check || exit 1/make check || \"continue\"/" /usr/src/redhat/BUILD/apr-util-1.4.1/apr-util.spec
rpmbuild -bb /usr/src/redhat/BUILD/apr-util-1.4.1/apr-util.spec
yum install --nogpgcheck /usr/src/redhat/RPMS/x86_64/apr-util-*
wget http://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.4.3.tar.bz2
rpmbuild -tp httpd-2.4.3.tar.bz2
mv httpd-2.4.3.tar.bz2 /usr/src/redhat/SOURCES
sed -i "s/%{epoch}://g" /usr/src/redhat/BUILD/httpd-2.4.3/httpd.spec
rpmbuild -bb /usr/src/redhat/BUILD/httpd-2.4.3/httpd.spec
yum install --nogpgcheck /usr/src/redhat/RPMS/x86_64/httpd-*
で、出来上がりヾ(*・ω・)シ

yumでUnicodeDecodeError

rpmを作成してyumでインストールしようとしたらこんなエラー吐かれました(´・ω・`)
$ yum install hoge.rpm

・・・中略・・・

Downloading Packages:
Running rpm_check_debug
ERROR with rpm_check_debug vs depsolve:
Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in 
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 276, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 211, in main
    return_code = base.doTransaction()
  File "/usr/share/yum-cli/cli.py", line 530, in doTransaction
    print to_utf8(msg)
  File "/usr/lib64/python2.6/codecs.py", line 351, in write
    data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 25: ordinal not in range(128)
どうやらLANGの設定によってこのエラーが発生するようです。
LANG=Cとしてあげれば解消するようなので
$ LANG=C yum install hoge.rpm
としてみたら通りましたよヾ(*・ω・)シ

2012-08-24

CentOSにGlusterFSをセットアップ

Amazon Web Servicesなどのクラウドサービスでも利用できる分散ファイルシステムなGlusterFSをAmazon EC2上のCentOSにセットアップしてみました
まずはソースコードをダウンロードしてきて展開してconfigure
wget http://download.gluster.org/pub/gluster/glusterfs/LATEST/glusterfs-3.3.0.tar.gz
tar zxvf glusterfs-3.3.0.tar.gz
cd glusterfs-3.3.0
./configure
・
・
・
configure: error: OpenSSL crypto library is required to build glusterfs
まぁ、怒られますね。。。
openssl-develを入れてリトライ
yum -y install openssl-devel
./configure
・
・
・
configure: error: python does not have ctypes support
yum install python-ctypes
./configure
・
・
・
GlusterFS configure summary
===========================
FUSE client        : yes
Infiniband verbs   : no
epoll IO multiplex : yes
argp-standalone    : no
fusermount         : no
readline           : no
georeplication     : yes
make
make install
これでインストールは完了
gluster --version
glusterfs 3.3.0 built on Aug 24 2012 08:44:05
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2011 Gluster Inc. <http://www.gluster.com>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GlusterFS under the terms of the GNU General Public License.
今回は単純にサーバ側は1ノードで構成してみます
mkdir /gfs
service glusterd start
gluster volume create gv0 10.xxx.xxx.xxx:/gfs
gluster volume start gv0
※10.xxx.xxx.xxxはサーバ自身のInternal IPアドレス
情報を見てみます
gluster volume info

Volume Name: gv0
Type: Distribute
Volume ID: 2c09d301-1fda-4d91-8a50-15a8c71d0be8
Status: Started
Number of Bricks: 1
Transport-type: tcp
Bricks:
Brick1: 10.xxx.xxx.xxx:/gfs
これで、サーバ側は準備完了
続いてクライアント側
サーバ同様にGlusterFSをインストールして、fuseも入れます
yum -y install fuse
あとはマウントするだけ
mkdir /gfs
mount -t glusterfs 10.xxx.xxx.xxx:/gv0 /gfs
dfで状態を見てみるとちゃんとマウントできています
glusterfs#10.xxx.xxx.xxx:/gv0
                      10321152   3587840   6209024  37% /gfs

CentOSでnfsをセットアップ

まずはサーバ側にnfsをインストール
yum -y install nfs-utils
共有するディレクトリと共有先、権限を設定ファイルへ記入
/nfsというディレクトリを10.から始まるIPに対してread/write権限で許可
mkdir /nfs
chmod 777 /nfs
echo "/nfs 10.0.0.0/255.0.0.0(rw)" >> /etc/exports
そして、いざnfsサービスを起動してみると怒られちゃいました(´・ω・`)
service nfs start
NFS サービスを起動中:                                      [  OK  ]
NFS クォータを起動中: サービスを登録できません: RPC: 受け取れません; errno = 接続を拒否されました
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
                                                           [失敗]
NFS デーモンを起動中:                                      [失敗]
これはportmapサービスが起動していないと発生するそうなのでインストールして起動してみます
yum -y install portmap
service portmap start
そして、改めてnfsを起動
service nfs start
NFS サービスを起動中:                                      [  OK  ]
NFS クォータを起動中:                                      [  OK  ]
NFS デーモンを起動中:                                      [  OK  ]
NFS mountd を起動中:                                       [  OK  ]
OKですヾ(*・ω・)シ
続いて、クライアント側の設定
こちらも同様にportmapとnfsをインストールして起動してあげます。
yum -y install nfs-utils portmap
service portmap start
service nfs start
あとは、マウント先のディレクトリを作成してマウントしてあげるだけです
mkdir /nfs
mount -t nfs 10.xxx.xxx.xxx:/nfs /nfs
dfを見てみると
10.xxx.xxx.xxx:/nfs   10321280   3587712   6209280  37% /nfs
な感じでちゃんとマウントされてますね

2012-08-15

/var/log/messagesがauditログで埋まる

いつしか/var/log/messagesにこんなログが毎分吐かれて埋まってしまうようになりました・・・
Aug  1 04:03:02 clbackup kernel: type=1101 audit(1343761382.089:923481): user pid=6459 uid=0 auid=0 msg='PAM: accounting acct="root" : exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'
Aug  1 04:03:02 clbackup kernel: type=1103 audit(1343761382.090:923482): user pid=6459 uid=0 auid=0 msg='PAM: setcred acct="root" : exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'
Aug  1 04:03:02 clbackup kernel: type=1006 audit(1343761382.091:923483): login pid=6459 uid=0 old auid=0 new auid=0 old ses=1010 new ses=147330
Aug  1 04:03:02 clbackup kernel: type=1101 audit(1343761382.091:923484): user pid=6458 uid=0 auid=0 msg='PAM: accounting acct="root" : exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'
Aug  1 04:03:02 clbackup kernel: type=1103 audit(1343761382.091:923485): user pid=6458 uid=0 auid=0 msg='PAM: setcred acct="root" : exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'
Aug  1 04:03:02 clbackup kernel: type=1006 audit(1343761382.091:923486): login pid=6458 uid=0 old auid=0 new auid=0 old ses=1010 new ses=147331
Aug  1 04:03:02 clbackup kernel: type=1105 audit(1343761382.133:923487): user pid=6458 uid=0 auid=0 msg='PAM: session open acct="root" : exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'
Aug  1 04:03:02 clbackup kernel: type=1105 audit(1343761382.134:923488): user pid=6459 uid=0 auid=0 msg='PAM: session open acct="root" : exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'
Aug  1 04:03:02 clbackup kernel: type=1104 audit(1343761382.182:923489): user pid=6459 uid=0 auid=0 msg='PAM: setcred acct="root" : exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'
Aug  1 04:03:02 clbackup kernel: printk: 3 messages suppressed.
Aug  1 04:03:02 clbackup kernel: type=1104 audit(1343761382.211:923491): user pid=6458 uid=0 auid=0 msg='PAM: setcred acct="root" : exe="/usr/sbin/crond" (hostname=?, addr=?, terminal=cron res=success)'
実行されているのはcronだし、res=successだしログとしては必要なさそうなので止めたいものです
ということで調べてみるとこんな記事に行き着きました。
/etc/audit/audit.rulesの-Dとなっているところを-e 0に置き換えてあげれば良いよってことなので、置換してauditdを起動、停止
sed -i "s/-D/-e 0/" /etc/audit/audit.rules
service auditd start
service auditd stop
としてあげれば出力されなくなりましたよヾ(*・ω・)シ

2012-06-22

Rails3.2.6アプリケーションにCoolなデザインを適用してApache+Unicornで起動!

Railsアプリケーションに簡単にCoolなデザインを適用できるWeb App Themeなのですが、Rails3.2.6だとassetsに対応したバージョンが入ってくれず、苦労したのでメモしておきます。
まずは、アプリケーション作成
cd /var/www
rails new web-app-theme -d mysql
そして、説明通り
echo "gem 'web-app-theme', '~> 0.8.0'" >> Gemfile
bundle install
とやってみたところ
Bundler could not find compatible versions for gem "rails":
  In Gemfile:
    web-app-theme (~> 0.8.0) ruby depends on
      rails (~> 3.1.0.rc6) ruby

    rails (3.2.6)
な感じで怒られてしまい、Rails3.2.6は3.1.0.rc6より新しいと認識してくれないようです(ノ゚⊿゚)ノ
仕方なくGemfileから, '~> 0.8.0'の記述を削除してbundle installすると0.7.0が入ってくれました。
とりあえず、サンプルでscaffold実行
rails g scaffold task name:string memo:string  

>>/usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs/runtimes.rb:51:in `autodetect': Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes. (ExecJS::RuntimeUnavailable)
        from /usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs.rb:5:in `'
        from /usr/local/lib/ruby/gems/1.9.1/gems/execjs-1.4.0/lib/execjs.rb:4:in `'
        from /usr/local/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `require'
        from /usr/local/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee_script.rb:1:in `'
        from /usr/local/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `require'
        from /usr/local/lib/ruby/gems/1.9.1/gems/coffee-script-2.2.0/lib/coffee-script.rb:1:in `'
        from /usr/local/lib/ruby/gems/1.9.1/gems/coffee-rails-3.2.2/lib/coffee-rails.rb:1:in `require'
        from /usr/local/lib/ruby/gems/1.9.1/gems/coffee-rails-3.2.2/lib/coffee-rails.rb:1:in `'
        from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.1.4/lib/bundler/runtime.rb:68:in `require'
        from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.1.4/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
        from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.1.4/lib/bundler/runtime.rb:66:in `each'
        from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.1.4/lib/bundler/runtime.rb:66:in `block in require'
        from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.1.4/lib/bundler/runtime.rb:55:in `each'
        from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.1.4/lib/bundler/runtime.rb:55:in `require'
        from /usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.1.4/lib/bundler.rb:119:in `require'
        from /var/www/web-app-theme/config/application.rb:7:in `'
        from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.6/lib/rails/commands.rb:24:in `require'
        from /usr/local/lib/ruby/gems/1.9.1/gems/railties-3.2.6/lib/rails/commands.rb:24:in `'
        from script/rails:6:in `require'
        from script/rails:6:in `
'
何か足りないようです(´・ω・`)
てな訳で足りないものをGemfileに追記してbundle install再実行
cat <<"EOF" >> Gemfile
gem 'execjs'
gem 'therubyracer'
EOF

bundle install
scaffoldリトライ!
rails g scaffold task name:string memo:string
今度はうまく行ってくれましたヾ(*・ω・)シ
あとは、静的ファイルの配信用としてApacheをインストールしておきます
yum -y install httpd
そして、バーチャルホストの設定ファイルをつくっておきます
cat <<"EOF" > /etc/httpd/conf.d/rails.conf

  ServerName www.exapmle.com
  DocumentRoot /var/www/web-app-theme/public
  CustomLog logs/access.log combined
  ErrorLog  logs/error.log

  ProxyRequests Off
  
    Order deny,allow
    Allow from all
  

  ProxyPass /images !
  ProxyPass /assets !
  ProxyPass /stylesheets !
  ProxyPass /javascripts !
  ProxyPass /robots.txt !
  ProxyPass /favicon.ico !

  ProxyPass / http://localhost:3000/
  ProxyPassReverse / http://localhost:3000/

EOF
あとは、Apacheを実行してApache側の設定はおしまい!
service httpd start
Rails側の処理をunicornでさせるためにインストールしておきます
Gefileに予め記述があるのでこれをコメントアウトしてbundle install
sed -i "s/# gem 'unicorn'/gem 'unicorn'/" Gemfile
bundle install
で、unicorn用にはproduction用の設定を作成しておきます
cat <<"EOF" > config/production.conf
# See http://unicorn.bogomips.org/Unicorn/Configurator.html for complete
# See also http://unicorn.bogomips.org/examples/unicorn.conf.rb for
rails_env = 'production'
worker_processes 5
working_directory '/var/www/web-app-theme'
port = 3000
listen port, :tcp_nopush => true
timeout 30
pid 'tmp/pids/unicorn.pid'
preload_app  true
stderr_path 'log/unicorn_err.log'
stdout_path 'log/unicorn.log'

before_fork do |server, worker|
  # この設定はpreload_app trueの場合に必須
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  # この設定はpreload_app trueの場合に必須
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection
end
EOF
あとは、DBの設定とassetsのprecompile
rake db:create RAILS_ENV=production
rake db:migrate RAILS_ENV=production
rake assets:precompile RAILS_ENV=production
あとはunicornにこの設定ファイルを読み込ませてデーモンモードで起動
unicorn_rails -D -c /var/www/web-app-theme/config/production.conf -E production
あとはブラウザでアクセスしてみれば起動してますねヾ(*・ω・)シ

お次は、ようやくWeb App Themeを使ってデザイン適用です
rails g web_app_theme:theme --app-name="web-app-theme" --theme=amro
そして、assetsのrecompileをしてunicornの再起動
rake assets:precompile RAILS_ENV=production
kill `cat /var/www/web-app-theme/tmp/pids/unicorn.pid`
unicorn_rails -D -c /var/www/web-app-theme/config/production.conf -E production
いざブラウザでアクセスしてみるとエラーが・・・
/var/www/web-app-theme/log/production.logにはこんなのがでてました
ActionView::Template::Error (web-app-theme/base.css isn't precompiled):
    2: 
    3: 
    4:   web-app-theme
    5:   <%= stylesheet_link_tag "web-app-theme/base", "web-app-theme/themes/amro/style", "web-app-theme/override", :cache => true %>
    6:   <%= javascript_include_tag :defaults, :cache => true %>
    7:   <%= csrf_meta_tag %>
    8: 
  app/views/layouts/application.html.erb:5:in `_app_views_layouts_application_html_erb__2208883353270545151_259086380'
  app/controllers/tasks_controller.rb:7:in `index'
これだとassetsに対応していないので書き換え
sed -i "s/<%= stylesheet_link_tag.*web-app-theme.*>/<%= stylesheet_link_tag \"application\" %>/" /var/www/web-app-theme/app/views/layouts/application.html.erb
sed -i "s/<%= javascript_include_tag.*defaults.*>/<%= javascript_include_tag \"application\" %>/" /var/www/web-app-theme/app/views/layouts/application.html.erb
cssの方も書き換え
cat <<"EOF" >> /var/www/web-app-theme/app/assets/stylesheets/application.css
//=web-app-theme/base
//=web-app-theme/themes/Amro/style.css
//=web-app-theme/override.css
EOF
そして、一式をassetsに移動
mv /var/www/web-app-theme/public/stylesheets/web-app-theme/ /var/www/web-app-theme/app/assets/stylesheets/
あとは、もう一度compileしてunicorn再起動
rake assets:precompile RAILS_ENV=production
kill `cat /var/www/web-app-theme/tmp/pids/unicorn.pid`
unicorn_rails -D -c /var/www/web-app-theme/config/production.conf -E production
これで、動きましたヾ(*・ω・)シ

2012-06-21

CentOS5でRails3.2.6がgemで入らない!

ruby -v
>> ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
gem -v
>> 1.8.24
な環境で試してみたところ
gem install rails --no-ri --no-rdoc
>> ERROR:  While executing gem ... (Gem::DependencyError)
    Unable to resolve dependencies: railties requires rake (>= 0.8.7), rack-ssl (~> 1.3.2), thor (< 2.0, >= 0.14.6), rdoc (~> 3.4); actionmailer requires mail (~> 2.4.4); activerecord requires arel (~> 3.0.2), tzinfo (~> 0.3.29); actionpack requires journey (~> 1.0.1), sprockets (~> 2.1.3), erubis (~> 2.7.0)
と怒られてしまいます。
そんなときはbundlerを使うと良いようです。
早速インストール
gem install bundler --no-ri --no-rdoc
railsをインストールするために設定ファイルを作成
cat <<"EOF" > Gemfile
source 'https://rubygems.org'
gem 'rails', '3.2.6'
EOF
そして、いざインストール実行!
bundle install
>> Fetching gem metadata from https://rubygems.org/.........
Installing rake (0.9.2.2)
Installing i18n (0.6.0)
Installing multi_json (1.3.6)
Installing activesupport (3.2.6)
Installing builder (3.0.0)
Installing activemodel (3.2.6)
Installing erubis (2.7.0)
Installing journey (1.0.4)
Installing rack (1.4.1)
Installing rack-cache (1.2)
Installing rack-test (0.6.1)
Installing hike (1.2.1)
Installing tilt (1.3.3)
Installing sprockets (2.1.3)
Installing actionpack (3.2.6)
Installing mime-types (1.19)
Installing polyglot (0.3.3)
Installing treetop (1.4.10)
Installing mail (2.4.4)
Installing actionmailer (3.2.6)
Installing arel (3.0.2)
Installing tzinfo (0.3.33)
Installing activerecord (3.2.6)
Installing activeresource (3.2.6)
Using bundler (1.1.4)
Installing json (1.7.3) with native extensions
Installing rack-ssl (1.3.2)
Installing rdoc (3.12)
Installing thor (0.15.3)
Installing railties (3.2.6)
Installing rails (3.2.6)
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
Post-install message from rdoc:
Depending on your version of ruby, you may need to install ruby rdoc/ri data:

<= 1.8.6 : unsupported
 = 1.8.7 : gem install rdoc-data; rdoc-data --install
 = 1.9.1 : gem install rdoc-data; rdoc-data --install
>= 1.9.2 : nothing to do! Yay!
そして、確認
rails -v
>> Rails 3.2.6
はい、入りましたヾ(*・ω・)シ しかし、いざrakeコマンド実行してみると
rake aborted!
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
な感じで怒られてしまいました(´・ω・`)
execjsとtherubyracerをインストールしてあげれば良いみたいなので
cat <<"EOF" >> Gemfile
gem 'execjs'
gem 'therubyracer'
EOF
として、bundle updateしてあげればrakeもちゃんと動きました。

2012-06-18

Linux(CentOS)で利用ポートごとの帯域制御を行う

tc(traffic control)コマンドを用いると制御できるようなのでこれを使うことにしました。
この設定のwrapperとしてcbqというコマンドがあったのでこれを用いて設定します。

まずは、既存設定ファイルの確認
ls -l /etc/sysconfig/cbq/     
合計 8
-rw-r--r-- 1 root root 11  2月 23 23:32 avpkt
-rw-r--r-- 1 root root 79  2月 23 23:32 cbq-0000.example
これはサンプルなので消しちゃいました
rm -f /etc/sysconfig/cbq/*
そして、新たに設定ファイルの書き出し
cat <<"EOF" >> /etc/sysconfig/cbq/cbq-hoge
DEVICE=eth0,1000Mbit,100Mbit
RATE=100Kbit
WEIGHT=10Kbit
PRIO=1
RULE=:80
RULE=:443
RULE=:20,
RULE=:21
EOF
DEVICEで対象デバイスと速度を指定
/dev/eth0を1Gbpsのデバイスってことで設定

RATEで制限したい値を設定
KbitとなっているけれどKByte/secだそうなのでbpsの1/8の値を設定
WEIGHTはRATEの1/10の値を設定しておくと良いらしい
PRIOで複数の設定をした場合の優先順位を指定
RULEは複数定義できて、:に続けてポート番号を指定する
最後に「,」をつけるとsource port,つけないとdestination portになる模様

そして設定ファイルのコンパイル
cbq compile
find: warning: you have specified the -maxdepth option after a non-option argument (, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.
...(以下略)
・・・なにやらエラーが(;´Д`)
調べてみると、findコマンドの仕様が変わってwrapperスクリプトに記述されているfindコマンドの書式ではエラーとなる模様
どんな記述になっているか確認
grep maxdepth /sbin/cbq
  -not -name '*~' -maxdepth 1 -printf "%f\n"| sort`
    -not -name '*~' -maxdepth 1| xargs sed -n 's/#.*//; \
  [ `find $CBQ_PATH -maxdepth 1 -newer $CBQ_CACHE| \
maxdepthの位置が悪いみたいなのだけど、これならなくても問題ないよ・・・ね?
てことで削除
sed -i "s/ -maxdepth 1//" /sbin/cbq
そして、コンパイルのリトライ
cbq compile
/sbin/tc qdisc del dev eth0 root
/sbin/tc qdisc add dev eth0 root handle 1 cbq bandwidth 1000Mbit avpkt 3000 cell 8
/sbin/tc class change dev eth0 root cbq weight 100Mbit allot 1514

**CBQ: class ID of cbq-hoge must be in range <0002-FFFF>!
...(以下略)
すると、また違うエラーが(;´Д`)
設定ファイルの-hogeって名前がいけないようで0002-FFFFの範囲に収めないといけないらしい?
なので0002にリネーム
mv /etc/sysconfig/cbq/cbq{-hoge,-0002}
そして、今度こそ!
cbq compile      
/sbin/tc qdisc del dev eth0 root
/sbin/tc qdisc add dev eth0 root handle 1 cbq bandwidth 1000Mbit avpkt 3000 cell 8
/sbin/tc class change dev eth0 root cbq weight 100Mbit allot 1514

/sbin/tc class add dev eth0 parent 1: classid 1:2 cbq bandwidth 1000Mbit rate 100Kbit weight 10Kbit prio 1 allot 1514 cell 8 maxburst 20 avpkt 3000 bounded
/sbin/tc qdisc add dev eth0 parent 1:2 handle 2 tbf rate 100Kbit buffer 10Kb/8 limit 15Kb mtu 1500
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dport 80 0xffff classid 1:2
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dport 443 0xffff classid 1:2
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip sport 20 0xffff classid 1:2
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dport 21 0xffff classid 1:2
通ったようですヾ(*・ω・)シ
これでwgetとかやってみればdport 80の設定が効いて速度が抑えられてることが確認できます。
wget http://hoge.com/piyo.zip
0% [                 ] 1,520,399    510K/s 

2012-03-07

CentOSでgitサーバ構築

CentOSにyumでgit git-daemonをインストールして設定変更を行う
yum -y install git git-daemon
cat <<"EOF" > /etc/xinet.d/git
# default: off
# description: The git dæmon allows git repositories to be exported using \
#       the git:// protocol.

service git
{
        disable         = no
        socket_type     = stream
        wait            = no
        user            = git
        server          = /usr/bin/git-daemon
        server_args     = --base-path=/mnt/git-repos --export-all --user-path=public_git --syslog --inetd --verbose
        log_on_failure  += USERID
        # xinetd does not enable IPv6 by default
#       flags           = IPv6
}
EOF
起動ユーザを追加、レポジトリ用ディレクトリの作成、カラのレポジトリの作成をしてxinetdを再起動
useradd git
mkdir -p /mnt/git-repos
git init --bare /mnt/git-repos/test.git
chown -R git:git /mnt/git-repos
service xinetd restart
クライアントからpushとcloneのテスト push TortoiseGitをインストールしてwindowsからテストを行った。
PuTTY Key Generatorでサーバに接続するための秘密鍵を作成するかputty用に変換する
TourtoiseGitのsettingsでGit->RemoteのところにRemoteレポジトリの設定をする
URLはssh://UserName@xxx.xxx.xxx.xxx/mnt/git-repos/test.git
ローカルレポジトリを作成してpushしてみる

clone
TourtoiseGitのGit Cloneを選択し、URLにgit://176.34.35.143/test.gitを入力して実行

※はまりどころ
* flagsのIPv6の行をコメントアウトしてあげないとdaemonが起動しなかった
* gitプロトコルでpushできるようにするには/etc/xinet.d/gitのserver_argsに--enable=receive-packを追加しなくてはいけない
* gitプロトコルのgit://のURLでは少なくともwindowsのgitクライアントからはpushできなかった

Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6)
な感じで止まってしまう。
* pushの際のサーバ側のパスは/からのフルパスで指定するssh://xxx.xxx.xxx.xxx/mnt/git-repos/hoge.git