タグ: CentOS

CentOSでの自動ログイン

VMWare上に構築した開発環境で毎回ログインするのが面倒なので、下記を参考に設定しました。

[Linux] CentOS 6.2で自動ログイン – SUNONE BLOG

例:自動ログインさせたいユーザ名をusernameとして、ログイン画面表示1秒後に自動ログインさせたい場合

#vi /etc/gdm/custom.conf

daemonセクションに以下の3行を追加
[daemon]
TimedLoginEnable=true
TimedLogin=username
TimedLoginDelay=1

CentOS6.3にSkypeBot(Skype4Py)を構築

CentOS 6.3にSkypeとSkype4PyをインストールしてSkypeBotサーバとするためのメモ

勉強会やカンファレンスに行くと、開発プロセスの中でIRCを使って、CIやデプロイを行っている話をよく聞きます。
参考: ニコニコ静画(電子書籍)の作り方 ~みんながニコニコしてくれる読書体験を届けるために~

それを見ていると、勤めている会社でも導入したいなと思いますが、IRCを新規に導入するのは面倒なので、普段使用しているSkypeで何とかできないかなと検索した結果、Skype4Pyなるものがあると知りました。

そこで試しにVMWare上にSkypeBotサーバを構築してみました。

SkypeはGUIアプリなのでX環境が必要ですが、サーバは非GUI環境を想定して、GNOMEなどの統合デスクトップ環境をインストールせず、Xvfb上でSkypeを動かし、Skypeに対する操作はx11vncを使ってVNCを使う方法がありましたので、今回はそれで行います。

#はルートユーザのコマンドプロンプトです。
ファイル編集中の+や-は追加と削除を意味します。

初期準備・設定

用意したもの

  • SkypeのBot用アカウント取得
  • Skypeで自身のアカウントの連絡先にBotアカウントを追加しておく
  • VMwareにCentOS-6.3-i386-minimal.isoを使ってインストール。puttyなどでSSHでアクセスする。

SELinuxを無効

# vi /etc/sysconfig/selinux
 -SELINUX=enforcing
 +SELINUX=disabled

ファイアウオール無効

便宜上無効に、実運用時はきちんと設定するように。

# yum install -y system-config-firewall-tui
# system-config-firewall-tui
 ファイアーウォールの有効のチェックを外して、OK

設定を反映するため再起動

Skype本体インストール

参考サイト:HowTos/Skype – CentOS Wiki

# yum install -y glibc.i686 nss-softokn-freebl.i686 alsa-lib.i686 libXv.i686 \
 libXScrnSaver.i686 libtiff.i686 glib2.i686 libSM.i686 libXrender.i686 fontconfig.i686 \
 pulseaudio-libs.i686 alsa-plugins-pulseaudio.i686

# cd /tmp
# curl -L -O http://download.skype.com/linux/skype_static-4.0.0.8.tar.bz2
# cd /opt
# tar xjvf /tmp/skype_static-4.0.0.8.tar.bz2
# ln -s skype_staticQT-4.0.0.8 skype
# ln -s /opt/skype /usr/share/skype
# ln -s /usr/lib/libtiff.so.3 /usr/lib/libtiff.so.4
# ln -s /opt/skype/skype /usr/bin/skype

Skype起動スクリプトと起動

参考サイト:HTTPでSkypeにBOT投稿(CentOS5編) – IT 東京 楽しいと思うこと

起動スクリプト

# yum install -y sudo xorg-x11-xauth xorg-x11-server-Xvfb
# curl -L -O https://gist.githubusercontent.com/mistymagich/9806631/raw/9c5b74769969efcf4e982949c0470561ed6c096c/launch-skype.sh
(※リンク先がなくなっていたのでForkしたものを使っています。)

設定ファイル
# vi launch-skype.sh

 ## SkypeBot用アカウントのIDパスワードに変更
 USERNAME=echo123
 PASSWORD=blah

 ## Skypeデータ保存先の変更
 -DBPATH=/srv/skype/conf
 +DBPATH=/var/db/skype

実行ユーザを登録
# useradd skype

必要なディレクトリと権限の設定
# mkdir /var/db/skype /var/run/skype/ /var/log/skype/
# chown skype:skype /var/db/skype /var/run/skype/ /var/log/skype/
# chmod 755 launch-skype.sh

起動テスト

# ./launch-skype.sh start
Starting skype: [ OK ]

# ps ax
1542 pts/0 S 0:00 Xvfb :20 -screen 0 800x600x8 -nolisten tcp
1548 pts/0 Sl 0:07 /opt/skype/skype --dbpath=/var/db/skype --pipelogin

# ./launch-skype.sh stop
Stopping skype: [ OK ]

サービスとして登録、自動起動設定

# mv launch-skype.sh /etc/init.d/skype
# chkconfig --add skype
# chkconfig skype on

launch-skype.shは内部でsudoを使っているが、sudoは初期設定でttyを必須としているため、そのままだと自動起動ができない。そこで設定を変更する。

# visudo

Defaults requirettyのところを
#Defaults requiretty

または

Defaults requirettyの後ろに
Defaults:skype !requiretty
を追記

VNCでサーバに接続

VNCで接続して、初期準備で登録した連絡先登録要求の承認や、Skype4.pyで作成したBotスクリプトの実行承認を行う。

参考サイト:Linux上で動くSkype用のbotを作る方法 – muddy brown thang

# yum install -y --nogpgcheck http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
# yum install -y x11vnc ipa-gothic-fonts

※必要であればFluxboxをここでインストール(詳細は下に)

# /etc/init.d/skype start

# x11vnc -display :20
   :
   :
   :
   :
05/03/2013 08:01:24
05/03/2013 08:01:24 WARNING: You are running x11vnc WITHOUT a password. See
05/03/2013 08:01:24 WARNING: the warning message printed above for more info.
05/03/2013 08:01:24

The VNC desktop is: ******.local:0
PORT=5900

******************************************************************************
Have you tried the x11vnc '-ncache' VNC client-side pixel caching feature yet?

The scheme stores pixel data offscreen on the VNC viewer side for faster
retrieval. It should work with any VNC viewer. Try it by running:

x11vnc -ncache 10 ...

One can also add -ncache_cr for smooth 'copyrect' window motion.
More info: http://www.karlrunge.com/x11vnc/faq.html#faq-client-caching

VNCクライアントで接続

VNCクライアント(Ultra VNCなど)を用意して、VMware上のサーバに接続。
ポート番号は上記の「PORT=5900」のように指定されるのでそれで接続。

利用規約の同意。

Skype利用規約の承諾

連絡先の追加リクエストを承認

起動直後のポップアップ

初回起動後、コンタクト追加通知

しばらくすると、ポップアップが消えて、Skypeの通知部分に表示されます。

初回起動後、コンタクト追加通知ポップアップ消去後

連絡先の追加要求ダイアログ

コンタクト追加通知ボタン押下後

追加後

コンタクト許可後

Skype4Pyのインストール~メッセージ送信テスト

Skype4Pyのインストール

別ターミナルを立ち上げる。

# yum install -y python-setuptools dbus-python pygobject2 dbus-x11
# service messagebus start
# easy_install Skype4Py

メッセージ送信テスト

# export DISPLAY=:20

# python
Python 2.6.6 (r266:84292, Jun 18 2012, 14:10:23)
[GCC 4.4.6 20110731 (Red Hat 4.4.6-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Skype4Py
>>> skype = Skype4Py.Skype(Transport='x11')
>>> skype.Attach()
>>>

ここで、Skypeからプログラムのアクセス要求ダイアログが表示されるので承認する。(初回のみ)

Skype4Pyからのアクセス許可ダイアログSkype4Pyからのアクセス許可ダイアログ(チェックボックスON)

つづけて、メッセージを送信する。

>>> chat = skype.CreateChatWith("自分のSkype名")
>>> chat.SendMessage(u"テストメッセージ!")

成功すると、自分のSkypeにBotからメッセージが送られる。

Skype4Pyメッセージ送信後

※ウィンドウマネージャー(Fluxbox)のインストール

XvfbだけでSkypeを起動すると、ウィンドウ枠がないため、ウィンドウを閉じる等の操作ができない。
(方法があるかもしれませんが、わかりませんでした。)
そこで、軽量のウィンドウマネージャーのFluxboxをインストールして操作性を向上します。

# rpm -Uvh http://mirrors.coreix.net/fedora-epel/6/i386/epel-release-6-8.noarch.rpm
# yum install -y fluxbox
# /etc/init.d/skype start
# export DISPLAY=:20
# /usr/bin/startfluxbox &

Redis 2.4.17 x CentOS 6.3

/opt/srcにソースを、/opt/redisに実行ファイル、設定ファイル、ログを配置する。

準備

ビルドに必要なツールをインストール。

 yum install -y make gcc (makeに必要)
 yum install -y tcl (make testに必要)

ビルド

#mkdir /opt/src
#cd /opt/src
#curl -o redis-2.4.17.tar.gz http://redis.googlecode.com/files/redis-2.4.17.tar.gz
#tar -xvf redis-2.4.17.tar.gz
#cd redis-2.4.17
#make

    cd src && make all
    make[1]: ディレクトリ `/opt/src/redis-2.4.17/src' に入ります
    MAKE hiredis
    :
    :
    :
    CC slowlog.o
    CC bio.o
    CC memtest.o
    LINK redis-server

    Hint: To run 'make test' is a good idea ;)

#make test

    cd src && make test
    make[1]: ディレクトリ `/opt/src/redis-2.4.17/src' に入ります
    /usr/bin/tclsh8.5
    Cleanup: may take some time... OK
    Starting test server at port 11111
    [ready]: 18539
    Testing unit/printver
    :
    :
    :
    \o/ All tests passed without errors!

    Cleanup: may take some time... OK
    make[1]: ディレクトリ `/opt/src/redis-2.4.17/src' から出ます

インストール

PREFIXがないと/usr/local/binにインストールされます。

#PREFIX=/opt/redis make install

設定ファイルと起動スクリプトの設置

このスクリプトでは、/etc/init.dに配置されるファイル名がredis_ポート番号となる。
今回は一台のみで名前をredisにしたいので、一部修正する。

#cd utils/
#vi ./install_server.sh

下記行のIF文のの間にスペースを入れる。

61行目

if [ !"$REDIS_CONFIG_FILE" ] ; then
↓
if [ ! "$REDIS_CONFIG_FILE" ] ; then

71行目

if [ !"$REDIS_LOG_FILE" ] ; then
↓
if [ ! "$REDIS_LOG_FILE" ] ; then

80行目

if [ !"$REDIS_DATA_DIR" ] ; then
↓
if [ ! "$REDIS_DATA_DIR" ] ; then

起動スクリプトのファイル名を変更する

104~105行目

INIT_SCRIPT_DEST="/etc/init.d/redis_$REDIS_PORT"
PIDFILE="/var/run/redis_$REDIS_PORT.pid"
↓
INIT_SCRIPT_DEST="/etc/init.d/redis"
PIDFILE="/var/run/redis.pid"

168~169行目

chkconfig --add redis_$REDIS_PORT && echo "Successfully added to chkconfig!"
chkconfig --level 345 redis_$REDIS_PORT on && echo "Successfully added to runlevels 345!"
↓
chkconfig --add redis && echo "Successfully added to chkconfig!"
chkconfig --level 345 redis on && echo "Successfully added to runlevels 345!"

172行目

/etc/init.d/redis_$REDIS_PORT start || die "Failed starting service..."
↓
/etc/init.d/redis start || die "Failed starting service..."

インストールスクリプトの実行

#mkdir -p /opt/redis/log
#PATH=/opt/redis/bin:$PATH ./install_server.sh

    Welcome to the redis service installer
    This script will help you easily set up a running redis server

    Please select the redis port for this instance: [6379]
    Selecting default: 6379
    Please select the redis config file name [/etc/redis/6379.conf] /opt/redis/etc/redis.conf
    Please select the redis log file name [/var/log/redis_6379.log] /opt/redis/log/redis.log
    Please select the data directory for this instance [/var/lib/redis/6379] /opt/redis/data
    Please select the redis executable path [/opt/redis/bin/redis-server]
    Copied /tmp/6379.conf => /etc/init.d/redis
    Installing service...
    Successfully added to chkconfig!
    Successfully added to runlevels 345!
    Starting Redis server...
    Installation successful!

動作確認

#service redis start (install_server.sh直後であればすでに起動しているので不要)

#/opt/redis/bin/redis-cli
    redis 127.0.0.1:6379> set foo bar
    OK
    redis 127.0.0.1:6379> get foo
    "bar"
    redis 127.0.0.1:6379> quit

CentOS 6.3にXymon 4.3.10をインストール

Xymonの4.3.10にRPMパッケージがあったので、CentOS6.3にインストールしてみました。

手順

#yum install -y wget rpm-build make gcc pcre-devel rrdtool-devel

#yum install -y openssl-devel    ([option]SSLサポートが必要であれば)
#yum install -y openldap-devel   ([option]LDAPサポートが必要であれば)

#cd
#wget http://downloads.sourceforge.net/project/xymon/Xymon/4.3.10/RHEL6/xymon-4.3.10-1.src.rpm
#rpmbuild --rebuild xymon-4.3.10-1.src.rpm
#yum localinstall rpmbuild/RPMS/i386/xymon-4.3.10-1.i386.rpm

pingの代わりにfpingを利用したい場合は、Xymonのrpmbuildの前に導入しておく。

#wget http://downloads.sourceforge.net/project/xymon/Xymon/4.3.10/RHEL6/fping-3.2-0.src.rpm
#rpmbuild --rebuild fping-3.2-0.src.rpm
#yum localinstall rpmbuild/RPMS/i386/fping-3.2-0.i386.rpm

ソースコードからRPMファイルを作ることもできる

  1. SourceForge.netからwgetなどでソースコード(xymon-4.3.10.tar.gz)を入手
  2. 展開
    tar -xvzf xymon-4.3.10.tar.gz
    
  3. 展開したディレクトリに移動し、makerpmを実行
    cd xymon-4.3.10
    ./build/makerpm.sh 4.3.10
    
  4. rpmbuildディレクトリが生成され、中にRPMパッケージが生成される
  5. 生成されたRPMをrpmやyumでインストール

参考元

CentOS5にSubversion1.7.6をソースからインストール

RPMで入っているSubversionが古いので、最新のSubversionをソースからインストールする。

条件

  • mod_dav_svnは今回使わないのでインストールしない
    (すでにRPMでインストールされているものを上書きしない)
  • 個人的にしか使わないので、/usr/localにインストールするのではなく、$HOME/local以下でビルドとインストールを行う
  • PATHは/usr/binよりも$HOME/local/binが上位になるように定義しておく
    export PATH=$HOME/local/bin:$PATH

手順

ソースのダウンロード

$ cd $HOME/local/src
$ wget http://ftp.tsukuba.wide.ad.jp/software/apache/subversion/subversion-1.7.6.tar.bz2
$ tar -xvf subversion-1.7.6.tar.bz2
$ cd subversion-1.7.6

Makefileの作成

$ ./configure --prefix=$HOME/local --without-apxs

RPMで入っているSQLiteのバージョンが要件を満たしていないとの表示

checking sqlite library version (via pkg-config)... none or unsupported 3.3
no

An appropriate version of sqlite could not be found. We recommmend
3.7.6.3, but require at least 3.6.18.
Please either install a newer sqlite on this system

or

get the sqlite 3.7.6.3 amalgamation from:
http://www.sqlite.org/sqlite-amalgamation-3.7.6.3.tar.gz
unpack the archive using tar/gunzip and copy sqlite3.c from the
resulting directory to:
$HOME/local/src/subversion-1.7.6/sqlite-amalgamation/sqlite3.c

configure: error: Subversion requires SQLite

インストールしたくないので、後者の指示に従ってSQLiteの最新ソースコードを入手して配置する

$ wget http://www.sqlite.org/sqlite-amalgamation-3071400.zip
$ unzip sqlite-amalgamation-3071400.zip
$ mv sqlite-amalgamation-3071400 sqlite-amalgamation

再度configure && make

$ ./configure --prefix=$HOME/local --without-apxs
$ make

make中にエラーが発生

libtool: link: only absolute run-paths are allowed
make: *** [subversion/mod_dav_svn/mod_dav_svn.la] エラー 1

直前のコマンド

cd subversion/mod_dav_svn && /bin/sh $HOME/local/src/subversion-1.7.6/libtool --tag=CC --silent --mode=link gcc -g -O2 -g -O2 -pthread -D_LARGEFILE64_SOURCE -DNE_LFS -rpath -avoid-version -module -o mod_dav_svn.la activity.lo authz.lo deadprops.lo liveprops.lo lock.lo merge.lo mirror.lo mod_dav_svn.lo posts/create_txn.lo reports/dated-rev.lo reports/deleted-rev.lo reports/file-revs.lo reports/get-location-segments.lo reports/get-locations.lo reports/get-locks.lo reports/log.lo reports/mergeinfo.lo reports/replay.lo reports/update.lo repos.lo util.lo version.lo ../../subversion/libsvn_repos/libsvn_repos-1.la ../../subversion/libsvn_fs/libsvn_fs-1.la ../../subversion/libsvn_delta/libsvn_delta-1.la ../../subversion/libsvn_subr/libsvn_subr-1.la

をよくみると、libtoolの -rpath の引数がない。Makefileを確認すると

-rpath $(APACHE_LIBEXECDIR)

という箇所があり、APACHE_LIBEXECDIRをたどっていくと

APACHE_LIBEXECDIR = $(DESTDIR)

にたどり着くが、DESTDIRを定義している箇所がない。
これはapxsを省略したための模様。

とりあえずインストール先のlibを指定してビルドを続行させる。

$ DESTDIR=$HOME/local/lib make

インストール

$ make install
$ svn --version
svn, バージョン 1.7.6 (r1370777)

参考

複数ユーザで1つのscreenセッションの共有

参考:Leverage OSS:screenで遠隔教育 (1/2) – ITmedia エンタープライズ

1.事前準備

  • OSはCentOSで、yum install screenでscreenコマンドをインストール
  • screenコマンドをsetuid rootに設定
    chmod u+s /usr/bin/screen
  • /var/run/screenのパーミッションを755に設定
    chmod 755 /var/run/screen
  • コマンド文字はCtrl + Aとする(以降^Aと表記)
  • 共有するscreenセッションを持つユーザをuserAとする
  • userAのscreenセッションにアクセスするユーザをuserBとする

2.userAの作業

  1. 「screen -S SESSION_NAME」でscreenセッションを開始する。
    (SESSION_NAMEは任意の文字列)
  2. ^Aを押し、「:multiuser on」と入力してエンターを押す。(マルチディスプレイモードを有効化)
  3. ^Aを押し、「:acladd userB」と入力してエンターを押す。(このセッションへのuserBのアクセスを許可)

3.userBの作業

  1. 「screen -ls userA/」と実行して、リストにSESSION_NAMEが入っていることを確認する。
  2. screen -x userA/SESSION_NAMEでscreenセッションにアタッチする。

CentOS 6のインストール後のメモ

CentOS5のxenでvirt-installを使ってCentOS6をインストールした後、CentOS5のときと同じように設定しようと思ったら、いろいろ変わっていたのでメモ