Showing posts with label CentOS5. Show all posts
Showing posts with label CentOS5. Show all posts

June 7, 2011

CentOS5におけるPython2.6の導入

CentOS5(RHEL5)のPythonは2.4系で色々辛いのでPython2.6を導入する。
CentOS6になればPython2.6系になるのだけど…

迂闊な事をするとpythonをつかっているスクリプトに影響を与える可能性があるので注意。
可能性の中で一番辛いのはyumが死ぬこと。
要は現状のpython(/usr/bin/pythonと/usr/lib/python2.4以下)を傷つけなければ問題ない。
DLして解凍
# cd /usr/local/src
# wget http://www.python.org/ftp/python/2.6.7/Python-2.6.7.tgz
# tar zxvf Python-2.6.7.tgz 
# cd Python-2.6.7
Modules/Setup.dist内のzlibに関するコメントアウトを解除する
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
↓
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
CheckInstallでrpm化して導入、libを登録
# ./configure --enable-shared
# make
# checkinstall
# rpm -ihv /usr/src/redhat/RPMS/x86_64/Python-2.6.7-1.x86_64.rpm 
# echo "/usr/local/lib" > /etc/ld.so.conf.d/python2.6.conf
# ldconfig
で、旧来のpython(/usr/bin/python)とは別に新しいpython(/usr/local/bin/python)が導入された。
PATHの設定にもよるが、デフォルトでは/usr/local/binが先に書かれているはずなので、
コマンドラインでpythonとだけ指定すると新しい方が呼ばれるはず。
最後にeasy_installが2.4系にしか入っていないので、新たに入れ直す。
# wget http://peak.telecommunity.com/dist/ez_setup.py
# python ez_setup.py
これでeasy_installが2.6系でも使えるようになった。
と、ここまで書いてeasy_install自体もpacoで管理すれば良かったことに気がつくもときすでに遅し…
pacoって"make install"にあたる部位で-オプションをつけると
pacoへのオプションだと認識されてしまうようでにっちもさっちも!まぁいいか…
で、最後に便利系を入れておく。
# paco -p pip easy_install pip
# paco -p virtualenv easy_install virtualenv
# paco -p virtualenvwrapper easy_install virtualenvwrapper
以上

pacoの導入

前回CheckInstallを導入した。
"make install"するソフトはCheckInstallするとして、
easy_install経由でインストール方法をとるパッケージの管理をするために、pacoを導入する。
(他にも使えるだろうけど。ついでにいえばpip使えよって話かもだけど。)
これもcheckinstallでrpm化して導入する。
# cd /usr/local/src
# wget http://downloads.sourceforge.net/paco/paco-2.0.9.tar.gz
# tar zxvf paco-2.0.9.tar.gz 
# cd paco-2.0.9
# ./configure --disable-gpaco
# make
# checkinstall
# rpm -ihv /usr/src/redhat/RPMS/x86_64/paco-2.0.9-1.x86_64.rpm 
以上

CheckInstallの導入

ソースから導入するソフトウェアは一定数存在する。
しかしRHELではrpmでパッケージ管理を行っている。
可能ならばrpmですべてのパッケージ管理を行いたい。
そこでCheckInstallを導入する。
CheckInstallを使えば、"make install"する類のパッケージをrpm化することができる。
(Ubuntuなどで採用されているdeb形式にも出力できる)
rpmは/usr/src/redhat/RPMSに生成される。
# cd /usr/local/src/
# wget http://www.asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz
# tar zxvf checkinstall-1.6.2.tar.gz 
# cd checkinstall-1.6.2
# make
# make install
で導入する。
CheckInstall自体もrpmで管理するため、CheckInstallもrpm化して上書きする。
# checkinstall
# rpm -ihv /usr/src/redhat/RPMS/x86_64/checkinstall-1.6.2-1.x86_64.rpm
以上

April 8, 2011

CentOS5におけるDell Open Manage導入

Dellのハードウェア管理系ツールとしてOpenManageがDell社から提供されている。
数々の恩恵に与れるため是非とも導入したい。

RHELはサポート対象であるがCentOSは対象外であるため、小細工をする。
/etc/redhat-releaseを
Red Hat Enterprise Linux Server release 5.6 (Tikanga)
と書き換える。これでOpenManageのインストール時のチェックは回避できる。

次に、OpenManageを導入する。
公式を確認し最新のOpenManageを確認する。執筆時では、6.4が最新である。
レポジトリを導入し、OpenManage,FirmwareTools,最新ファームウェアまでをインストールする。
# wget -q -O - http://linux.dell.com/repo/hardware/OMSA_6.4/bootstrap.cgi | bash
# yum install srvadmin-all
# yum install dell_ft_install
# yum install $(bootstrap_firmware)
インストールが終わったら
# /opt/dell/srvadmin/sbin/srvadmin-services.sh start
# omreport chassis
でステータスが出れば導入は成功。使い方はmanを参照のこと

RHEL5.6におけるapcupsdを用いた APC SmartUPS1500 with AP9630 による電源保護

知人の会社のUPSをシリアル接続からネットワーク接続に変更したので
そのときの作業メモ。

AP9630は、ネットワーク経由でのUPSとの通信を可能とするオプションボードである。
まず、AP9630をUPSに導入する。UPSの電源を落とし(電源スイッチ長押しでDCも切る)、商用電源側・負荷側すべての電源ケーブルを抜く。背面のスロットのカバーを外し、AP9630を挿入し、ねじで固定する。

商用電源側の電源ケーブルを接続し、付属のシリアルケーブルを用いAP9630とノートPCを接続する。
9600bps, データビット 8, パリティ なし, ストップビット 1, フロー制御 なし
でシリアルポートを設定した後、UPSに電源を投入する。

起動後、ターミナルにプロンプトが出るのでID,PASSを入力しAP9630にログインする
(デフォルトではapc:apc)
# tcpip -i 192.168.1.100
# tcpip -g 192.168.1.254
# tcpip -s 255.255.255.0
# reboot
などと設定して、Etherケーブルを接続する。
apcupsdの導入は、rpmファイルを公式からDLしてきて
# yum install net-snmp net-snmp-libs
# rpm -ihv apcupsd-3.14.8-1.el5.x86_64.rpm
設定は、/etc/apcupsd/apcupsd.confを
UPSCABLE ether
UPSTYPE snmp
DEVICE 192.168.1.100:161:APC:public
と変更する。
# chkconfig apcupsd on
# service apcuspd start
# service apcupsd status
でUPSのステータスが表示されれば完了。

各種パラメータの設定はWebを参照のこと。

April 7, 2011

CentOS5.5からCentOS5.6へのUpgrade

待望のCentOS5.6が公開された!!リリースノート
ext4 正式サポート
仮想化API libvirt 0.8.2
Ethernet ブリッジファイアウォールebtables の追加
PHP5.3
と素敵な内容である。早急にupgradeしたい!
(追記:4/10現在、もはや下記のyumレポジトリをいじる操作は必要ない、読み飛ばしていただきたい)
しかし、まだyumレポジトリが切り替えられていない。
待ちきれないので設定ファイルを一時的にいじってUpgradeしてしまう。
# cd /etc/yum.repos.d/
# cp CentOS-Base.repo CentOS-Base.repo.orig
# sed -ie "s/\$releasever/5.6/g" CentOS-Base.repo 
# sed -ie "s/mirrorlist/#mirrorlist/g" CentOS-Base.repo
# sed -ie "s/#baseurl/baseurl/g" CentOS-Base.repo 
で5.6を参照するようになる。
(追記:4/10現在、必要なのは下記手順のみである)
ここからあとはクリティカル気味なのでscreen等をつかって接続が切れないように気をつける。
# yum clean all
# yum update glibc\*
# yum update yum\* rpm\* pyth\*
# yum clean all
# yum update mkinitrd nash
# yum update selinux\*
# yum update
# shutdown -r now
でUpgrade完了。時期を見てCentOS-Base.repo.origを書き戻す。
CentOS6もこの勢いで公開されると大変に素敵である。
CentOSチームを応援している。

March 31, 2011

RHEL5からCentOS5への移行

ローカルネットに設置後、なんだかんだで落としっぱなしになっていたRHEL5.4のサーバを実験に使おうと思って立ち上げたらサブスクリプションが切れていた。(愚劣の極み…)
せっかくなのでCentOS5にレポジトリを切り替えてみる。

公式にマイグレーションの手引きがあるのでそれに従う。
公式はi386用の例なので、x86_64ならば
# cp /etc/redhat-release /etc/redhat-release-orig
# rpm -e --nodeps redhat-release-notes redhat-release yum-rhn-plugin redhat-logos
# rpm -ihv \
  http://mirror.centos.org/centos/5/os/x86_64/CentOS/centos-release-5-5.el5.centos.x86_64.rpm \
  http://mirror.centos.org/centos/5/os/x86_64/CentOS/centos-release-notes-5.5-0.x86_64.rpm \
  http://mirror.centos.org/centos/5/os/x86_64/CentOS/redhat-logos-4.9.99-11.el5.centos.noarch.rpm
# yum clean all
# yum update
といった感じ。

参考:
http://wiki.centos.org/HowTos/MigrationGuide

March 24, 2011

CentOS5における独自yum repositoryの設置

自前のyum repositoryを設置する。これは、自社ネットワークの配下にある数百台の仮想サーバが、アップデートなどのために一斉に外部のレポジトリにアクセスすると、帯域圧迫が激しいためである

レポジトリの実態を/var/yumrepos、レポジトリの管理者ユーザーをreposmanとして
# mkdir -p /var/yumrepos/centos/5.5
# ln -s /var/yumrepos/centos/5.5 /var/yumrepos/centos/5
# useradd reposman
# chown -R reposman. /var/yumrepos
# chkconfig httpd on
と環境を作り、公開のために/etc/httpd/conf.d/yumrepos.confを作成し
Alias /yumrepos /var/yumrepos
<Directory /var/yumrepos>
   Options Indexes FollowSymLinks
</Directory>
を記入し、httpdをスタート。(httpd.confでAllowOverride Allにしておく必要有り)
当然iptablesの80番portは開けておく。
また、レポジトリ作成のためにcreaterepoを導入する
# yum install createrepo
以下の作業はreposmanユーザーにて行う。
まず、外部のレポジトリからファイルを丸ごとコピーしてくる
$ rsync -avrt --exclude='/isos/' --exclude='i386/' --exclude='SRPMS' --exclude='repodata/' rsync://ftp.riken.jp/centos/5.5/ /var/yumrepos/centos/5.5/
このコピーは大変に相手方のサーバーに負荷をかけてしまう
実行時間帯には気を配るべき
また、インストールディスクを所持しているならiso/x86_64以下にコピーして、--exclude='/iso/'をオプションに追加すれば/os以下分負荷を減らせる

コピーが終わったらグループファイルを配置しておく
$ mkdir -m 775 /var/yumrepos/centos/5.5/os/x86_64/repodata
$ mkdir -m 775 $mkdir -m 775 /var/yumrepos/centos/5.5/extras/x86_64/repodata
$ cd /var/yumrepos/centos/5.5/os/x86_64/repodata
$ wget http://ftp.riken.jp/Linux/centos/5/os/x86_64/repodata/comps.xml
$ cd /var/yumrepos/centos/5.5/extras/x86_64/repodata
$ wget http://ftp.riken.jp/Linux/centos/5/extras/x86_64/repodata/yumgroups.xml
createrepoを実行する。
extras,osにはグループファイルがあるのでそれを適用する。
$ createrepo /var/yumrepos/centos/5.5/addons/x86_64/
$ createrepo /var/yumrepos/centos/5.5/contrib/x86_64/
$ createrepo /var/yumrepos/centos/5.5/fasttrack/x86_64/
$ createrepo /var/yumrepos/centos/5.5/updates/x86_64/
$ createrepo /var/yumrepos/centos/5.5/centosplus/x86_64/
$ createrepo -g /var/yumrepos/centos/5.5/extras/x86_64/repodata/comps.xml /var/yumrepos/centos/5.5/extras/x86_64/
$ createrepo -g /var/yumrepos/centos/5.5/os/x86_64/repodata/yumgroups.xml /var/yumrepos/centos/5.5/os/x86_64/
終了したら他のマシンで/etc/yum.repos.d/CentOS-Base.repoから
・mirrorlist行をコメントアウト
・baseurl行を復活、自前のレポジトリを参照するよう変更
させて、
# yum clean all
# yum update
などと実行して問題なく終了すれば完成

March 21, 2011

CentOS5におけるudevを用いたiSCSIのデバイス名固定 とパーティションノードの作成に関して

iSCSIのデバイス名が固定されず不便なので、udevをつかってデバイス名を固定する
この手順は、multipath を使用していないホストのためだけに使用
multipathを使用する場合はこちら

まず、/etc/scsi_id.config ファイルを編集
options=-b の行がコメントアウトしてあることを確認し、以下の行を追加
options=-g
次に対象のiSCSIデバイス(/dev/sdX)のUUIDを調べる
# scsi_id -g -s /block/sdX
3600a0b800013275100000015427b625e
最後に、/ect/udev/rules.d/20-iscsi.rulesを作成し
KERNEL=="sd*", BUS=="scsi", PROGRAM="/lib/udev/scsi_id -g -s /block/%k", RESULT=="3600a0b800013275100000015427b625e", NAME="mydevice"
を記述して終わり
再接続すれば/dev/mydeviceができている.

[2011/11/15追記]
この手法でiscsiのブロックデバイスの名前を固定しても各パーティションまでは名前が固定されない。
つまり、
# parted /dev/mydevice
などとしてパーティションを切っても、mydevice1は見えず、/dev/sd*1だけが見える。
仮想マシンにブロックデバイスごと提供する場合は問題ないが、マウントして使う場合はだいぶ難儀なので、これを解決するためにパーティションノードも作成する。/ect/udev/rules.d/20-iscsi.rulesを
KERNEL=="sd*", BUS=="scsi", PROGRAM="/lib/udev/scsi_id -g -s /block/%k", RESULT=="3600a0b800013275100000015427b625e", NAME{all_partitions}="mydevice"
とする。これでmydevice1~15が作成される。
(1つしかパーティションを切ってなくても15個できるがキニシナイ)
cf. http://www.gentoo.gr.jp/transdocs/udevrules/udevrules.html#usbstorage-extra

検索で引っかかるサイトの記述が細かいところで抜けていて死ぬ

参考
http://www.gentoo.gr.jp/transdocs/udevrules/udevrules.html
http://docs.redhat.com/docs/ja-JP/Red_Hat_Enterprise_Linux/5/html/Virtualization/sect-Virtualization-Virtualized_block_devices-Configuring_persistent_storage_in_Red_Hat_Enterprise_Linux_5.html

March 19, 2011

CentOS5におけるiSCSIイニシエータの導入・設定

iSCSIイニシエータ環境を整える
# yum install iscsi-initiator-utils
# chkconfig iscsid on
# service iscsid start
でイニシエータを導入・起動

前回設定したターゲットを登録・接続テストを行う
# iscsiadm -m discovery --type sendtargets -p targetip
# iscsiadm -m node targetip,1 -T targetname -l
# iscsiadm -m session -P 3
できちんと出てきていれば問題なし
ログアウトしておく
# iscsiadm -m node targetip,1 -T targetname --logout
一度接続したターゲットに関しては/var/lib/iscsi/nodes 以下にコンフィグファイルが配置される
iscsi(not iscsid)を有効にしておくとコンフィグファイルを読み込んで自動で接続する
iscsi(not iscsid)はlibvirtを使う場合はバッティングするため無効にしておく必要がある
iscsiを有効にしている環境で、自動接続したくない場合は/var/lib/iscsi/nodes以下のdefaultファイルを
node.startup=automatic

node.startup=manual
と修正するか
# iscsiadm --mode node --op update --targetname targetname --name=node.startup --value=manual
を実行する

/etc/iscsi/iscsid.confのnode.startupを変更しておけばnode 登録をした時に automatic になるか manual になるかの規定値を変更できる

また、iscsi-targetは、イニシエータが正常なログアウト処理を行わずに停止した場合、そのイニシエータに対するセッションを保持し続ける。このイニシエータがログアウト処理をせずに再起動され、ターゲットにログインしようとすると、ターゲット側には同一パス・同一イニシエータ名のセッションが残っているため、ターゲットはこのログインを拒否する。このため、このイニシエータはストレージにアクセスできなくなってしまう。これを避けるためイニシエータの起動スクリプトを変更する。
サービスiscsiおよびiscsidの起動スクリプト(initscript)/etc/init.d/{iscsi,iscsid}を修正する。これらのスクリプト中、再起動・停止(RUNLEVEL 6および0)のときに以降の処理を行わない部分があるので、これをコメントアウトし、ターゲットからのログアウトを実行するように変更する。
上記二つの起動スクリプトのstopに対し
#if [ "$RUNLEVEL" = "6" -o "$RUNLEVEL" = "0" -o "$RUNLEVEL" = "1" ]; then
#        success
#        return
#fi
と、該当箇所をコメントアウトする。
ただし、lvm, dm, mdなどマウントしたあとのiSCSIボリュームをいじっているモノとの
RUNLEVEL6,0時の挙動に関しては注意が必要

以上

参考:
http://ken-etsu-tech.blogspot.com/2008/03/rhcs-iscsi-dm-mp-clvm-and-gfs4iscsi.html
http://www.asahi-net.or.jp/~aa4t-nngk/iscsi.html

CentOS5におけるiSCSIターゲットの導入・設定

iSCSIターゲット環境を整える
iSCSI Enterprise Tagetを導入する
# cd /usr/local/src
# wget http://downloads.sourceforge.net/project/iscsitarget/iscsitarget/1.4.20.2/iscsitarget-1.4.20.2.tar.gz
現在運用してるkernelにあわせてkernel-develを導入しておく。
また、現在運用していないkernel,kernel-develはremoveしておくとWarningが出ない。
kernel,kernel-develの準備ができたら
# rpmbuild -ta iscsitarget-1.4.20.2.tar.gz
# cd /usr/src/redhat/RPMS
# rpm -ihv iscsitarget* kmod-iscsitarget*
で導入完了。
続いて、設定を行う。設定ファイル/etc/iet/ietd.confを編集する
以下の内容を追記
Target iqn.2011-03.com.example,iscsi:lvm01
 Lun 0 Path=/dev/VolGroup00/lvm01,Type=blockio
 MaxConnections 1
ここでTarget に設定する文字列は "iqn.[ドメイン取得年]-[ドメイン取得月].[ドメイン名 (逆順)]:[任意の識別子]" という形式で指定する必要がある
また、上記の例ではLVMの論理ボリュームをブロックデバイスとして供出している
/etc/sysconfig/networkに設定されたhost名等と相違無いことを確認
# chkconfig iscsi-target on
して再起動
再起動後/var/log/messagesにエラーがはかれていないことを確認
iptablesを設定している場合はiscsi-targetのためにudp,tcpの3260番を解放
アクセス制限は/etc/iet/initiators.allowにて行う
現在動いている設定は
# cat /proc/net/iet/volume
現在のTargetへの接続状況については
# cat /proc/net/iet/session
で確認できる。

正しく設定されているかをイニシエータを用意して確認、別のマシンで
# yum install iscsi-initiator-utils
# chkconfig iscsi on
# service iscsi start
でイニシエータを導入・起動
接続テストを行う
# iscsiadm -m discovery --type sendtargets -p targetip
# iscsiadm -m node targetip,1 -T targetname -l
# iscsiadm -m session -P 3
できちんと出てきていれば問題なし
ログアウトは
# iscsiadm -m node targetip,1 -T targetname --logout
また、経路の多重化を行う場合は下記を参照
http://ken-etsu-tech.blogspot.com/2008/03/rhcs-iscsi-dm-mp-clvm-and-gfs3iscsi.html
http://ken-etsu-tech.blogspot.com/2008/03/rhcs-iscsi-dm-mp-clvm-and-gfs5device.html

以上

March 18, 2011

CentOS5におけるSkype4Pyを使ったSkypeBotの作成

Skype4Pyを用いて、Skypeボットを作成する。
前回前々回でCentOSにSkypeを導入し、デーモン化を行った。

今回も
http://d.hatena.ne.jp/moriyoshi/20100926/1285517353
を参考に進める

まず、easy_installを導入する
# curl -O http://peak.telecommunity.com/dist/ez_setup.py
# python ez_setup.py
そして、
# easy_install Skype4Py
# easy_install ctypes
以上でSkype4Pyが導入された

一般的にはDBUSを用いたプロセス間通信を行うが、
どうにもうまくいかなかったのでx11経由で通信を行う
>>> import Skype4Py
>>> skype = Skype4Py.Skype(Transport='x11')
>>> skype.Attach()
上記のコマンドを初回に実行するとPublicAPI利用の許諾等がでるので、許可し記憶させておく
ここまでくれば、あとはPythonの話となる
適当なBotを書いて
$ env DISPLAY=:20 XAUTHORITY=/var/run/skype/Xauthority python bot.py
で実行すればよい

ドキュメントは
http://skype4py.sourceforge.net/doc/html/
を参照のこと

CentOS5におけるSkypeのデーモン化

SkypeをCentOS5.5のデーモンとして扱えるようにする
CentOS5.5はX環境込みでインストール済みとする
前回、CentOS5環境にSkypeを導入した

これを
http://d.hatena.ne.jp/moriyoshi/20100926/1285517353
http://yusukezzz.net/blog/archives/2006
を参考にデーモン化する

まず、必要なパッケージ、
仮想フレームバッファを提供するXvfbと、接続するためのx11vncの導入を行う
Xvfbはおそらく導入済み
x11vncは正規のレポジトリにないのでRPMForgeから導入
# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
# http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
# rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
# yum -y update rpmforge-release
# yum install x11vnc
スクリプトを用意する、上記サイトからlaunch-skype.sh
#!/bin/bash
#
# Init file for daemonized Skype service
#
### BEGIN INIT INFO
# Provides:          skype
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Default-Start:     3 4 5
# Default-Stop:      0 1 2 6
# X-Interactive:     false
# Short-Description: Start/stop daemonized Skype service
### END INIT INFO
#
# chkconfig: 345 80 10
#
# processname: skype
#
# pidfile: /var/run/skype.pid
#

if [ -r /etc/rc.d/init.d/functions ]; then
    . /etc/rc.d/init.d/functions
    log_daemon_msg() {
        msg=$1
        prog=$2
        echo -n $"$msg $prog: "
    }
    log_end_msg() {
        if [ "$1" = "0" ]; then
            success
        elif [ "$1" = "1" ]; then
            failure
        fi
        echo
    }

elif [ -r /lib/lsb/init-functions ]; then
    . /lib/lsb/init-functions
else
    echo "Could not find a helper script needed to run this script."
    exit 1
fi

DAEMON_USER=skype
PROGNAME=`basename $0`
PIDFILE=/var/run/skype.pid
XSERVERNUM=20
XAUTHFILE=/var/run/skype/Xauthority
LOGFILE=/var/log/skype/error.log
DBPATH=/srv/skype/conf
XAUTHPROTO=.
SKYPE=/opt/skype/skype
USERNAME=echo123
PASSWORD=blah

[ -f /etc/sysconfig/skype ] && . /etc/sysconfig/skype

prog="skype"
RETVAL=0

dircheck() {
    if [ ! -d `dirname "$1"` ]; then
        echo "`dirname \"$1\"` does not exist"
        return 1
    else
        return 0
    fi
}

start() {
    log_daemon_msg "Starting" "skype"
    if ! dircheck "$LOGFILE" || ! dircheck "$XAUTHFILE"; then
        log_end_msg 1
        echo
        RETVAL=1
        return 
    fi 
    MCOOKIE=`mcookie` && \
    sudo -u "$DAEMON_USER" env XAUTHORITY=$XAUTHFILE sh -c "xauth add \":$XSERVERNUM\" \"$XAUTHPROTO\" \"$MCOOKIE\" >> \"$LOGFILE\" 2>&1" && \
    sudo -u "$DAEMON_USER" env XAUTHORITY=$XAUTHFILE sh -c "Xvfb :$XSERVERNUM -screen 0 800x600x8 -nolisten tcp >> \"$LOGFILE\" 2>&1 & echo \$!" >"$PIDFILE" &&
    sleep 3 && \
    (sudo -u "$DAEMON_USER" env DISPLAY=:$XSERVERNUM XAUTHORITY=$XAUTHFILE SKYPE="$SKYPE" sh -c "echo \"$USERNAME $PASSWORD\" | nohup \"$SKYPE\" --dbpath=\"$DBPATH\" --pipelogin &") >> "$LOGFILE" 2>&1 && \
    (log_end_msg 0 && [ -d /var/lock/subsys ] && touch /var/lock/subsys/skype || true) \
        || (RETVAL=$?; kill -TERM `cat $PIDFILE`; log_end_msg 1)
}

stop() {
    log_daemon_msg "Stopping" "skype"
    if [ -e "$PIDFILE" ]; then
        kill -TERM `cat $PIDFILE` && \
        rm -f $PIDFILE && \
        if [ -d /var/lock/subsys ]; then rm -f /var/lock/subsys/skype; fi && \
        log_end_msg 0 || log_end_msg 1
    else
        log_end_msg 1
        RETVAL=1
    fi
}

usage() {
    echo "Usage: $PROGNAME {start|stop|restart}"
}

case $1 in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    *)
        usage
        RETVAL=255
        ;;
esac

exit $RETVAL
をダウンロードして/etc/init.d/skypeとして保存
スクリプトで変更が必要なのは
DAEMON_USER :どのユーザーでSkypeを起動するか(root以外が望ましい)
DBPATH :どこに履歴等の情報を確保するか
USERNAME :どのSkypeアカウントでログインするか
PASSWORD :上記USERNAMEのアカウントのパスワード
DBPATHは、テスト運用時などに便利なので/home/user/.Skypeを指定するのがオススメ
上記に加えて冒頭を
# chkconfig: 345 99 10 ←(変更)
# description: skype launch script←(追記)
# processname: skype
と編集
また、スクリプトのために
/var/log/skype,/var/run/skypeをDAEMON_USERが読み書きできるように作成
さらに、DBPATHもDAEMON_USERが読み書きできるように作成
以上が終了したら
# chkconfig --add skype
# chkconfig skype on
# service skype start
で自動起動に登録して起動
あとは、
# x11vnc -display :20 -xauth /var/run/skype/Xauthority
とした後に適当なVNCクライアントで接続、利用許諾へのサインや、必要なコンタクトを追加を行う

CentOS5へのSkype導入

SkypeをCentOS5.5のデーモンとして扱えるように環境を整える
CentOS5.5はX環境込みでインストール済みとする
http://wiki.centos.org/HowTos/Skype
を参考に導入を行う
まず、依存パッケージの導入(x86_64環境でもi386系のパッケージの導入が必須なことに注意)
# yum install glib2.i386 qt4.i386 zlib.i386 alsa-lib.i386 libX11.i386 libXv.i386 libXScrnSaver.i386
次は、Skypeのダウンロード
オフィシャルページのリンクをたどってLinux向けのstatic versionパッケージをDL
static versionなので展開するだけで動作する
/optに展開するのがオフィシャルらしい
# cd /tmp
# wget http://www.skype.com/go/getskype-linux-beta-static
# cd /opt
# tar jxvf /tmp/skype_static-2.1.0.81.tar.bz2
# ln -s skype_static-2.1.0.81 skype

最後に、ALSAとかとの連携なんかのためにシンボリックリンクを張って終了

# ln -s /opt/skype /usr/share/skype
# ln -s /opt/skype/skype /usr/bin/skype

あとは一般ユーザーのコマンドラインから$skype &で起動する

導入されたskypeはコマンドラインから--pipeloginなどのオプションが使える
また、環境変数をいじることで出力先などを変えられる