ほげり道
2007年04月18日
シェルスクリプトでforkしているコマンドの実行結果が
失敗となると都合が悪い時の対処方法。
$ [ command ] || true
#!/bin/sh
command || true
command || true
command || true
command || true
command || true
使用例) インストーラのユーザー管理
・ユーザーが存在している状態でadduserしてもコマンドは成功扱い
・ユーザーが存在していない状態でdeluserしてもコマンドは成功扱い
失敗となると都合が悪い時の対処方法。
$ [ command ] || true
#!/bin/sh
command || true
command || true
command || true
command || true
command || true
使用例) インストーラのユーザー管理
・ユーザーが存在している状態でadduserしてもコマンドは成功扱い
・ユーザーが存在していない状態でdeluserしてもコマンドは成功扱い
2007年04月12日
どうもpuppetを思い通りに動かせないのでcfengineを触り始めた。
最低限やりたい事はファイルの配布なのでcfengineで事足りる。
▼参考ページ
・cfengineによるシステム管理の自動化: その1
・cfengine [1/3] : A simple overview of cfengine
・Cfengine-Tutorial
・Cfengine-Reference
とりあえず無事に動いた。
あとは内容理解を深め、cfengineの効率良い管理方法の考察。
これでシステム管理コストを大幅に減らせる。
最低限やりたい事はファイルの配布なのでcfengineで事足りる。
▼参考ページ
・cfengineによるシステム管理の自動化: その1
・cfengine [1/3] : A simple overview of cfengine
・Cfengine-Tutorial
・Cfengine-Reference
とりあえず無事に動いた。
あとは内容理解を深め、cfengineの効率良い管理方法の考察。
これでシステム管理コストを大幅に減らせる。
2007年04月11日
scpでファイル転送ではなくftpで転送しようとした。
しかし、検証サーバにFTP接続しようとしても接続出来ない。
■検証サーバの環境
OS: Debian GNU/Linux
proftpd: 1.3.0
補足: proftpdはtcpserver経由で起動、daemontoolsで管理
該当エラーメッセージ
2007-04-11 10:08:25.832790500 tcpserver: status: 1/40
2007-04-11 10:08:25.832797500 tcpserver: pid 26014 from 127.0.0.1
2007-04-11 10:08:25.832801500 tcpserver: ok 26014 0:::ffff:127.0.0.1:21 :::ffff:127.0.0.1::41493
2007-04-11 10:08:25.900058500 hansode - error opening scoreboard: No such file or directory
2007-04-11 10:08:25.901804500 tcpserver: end 26014 status 0
2007-04-11 10:08:25.901812500 tcpserver: status: 0/40
何だコレは。初めて見た。scoreboardが無いと言われている。
ちなみにproftpdのバージョンはこれ。
$ /usr/sbin/proftpd -v
- ProFTPD Version 1.3.0
以前は不要だったscoreboardファイルは、
とあるバージョンからか使うようになった様だ。
とりあえずstringsでproftpdを調べてみる。
$ strings /usr/sbin/proftpd | grep scoreboard
...(省略)...
error opening scoreboard: bad version (too new)
/var/run/proftpd/proftpd.scoreboard
...(省略)...
なるほど。
ディレクトリが存在していないのでディレクトリを作成。
$ ls -l /var/run/proftpd
ls: /var/run/proftpd: No such file or directory
$ sudo mkdir /var/run/proftpd
$ sudo svc -t /service/proftpd
$ telnet localhost 21
Trying 127.0.0.1...
Connected to black.
Escape character is '^]'.
Connection closed by foreign host.
まだ駄目か。
2007-04-11 10:14:05.020934500 tcpserver: status: 1/40
2007-04-11 10:14:05.020942500 tcpserver: pid 26750 from 127.0.0.1
2007-04-11 10:14:05.050110500 tcpserver: ok 26750 0:::ffff:127.0.0.1:21 :::ffff:127.0.0.1::41507
2007-04-11 10:14:05.240759500 hansode - error setting IPV6_V6ONLY: Protocol not available
2007-04-11 10:14:05.240895500 hansode - Failed binding to ::, port 21: Address already in use
2007-04-11 10:14:05.240944500 hansode - Check the ServerType directive to ensure you are configured correctly.
2007-04-11 10:14:05.242199500 tcpserver: end 26750 status 256
2007-04-11 10:14:05.242206500 tcpserver: status: 0/40
作業前にproftpd.confを上書きしてしまったのを思い出す。
$ grep ServerType /etc/proftpd/proftpd.conf
ServerType standalone
このproftpdはtcpserver経由で起動するようなrunスクリプトにしている。
standaloneだとtcpserver経由で起動するはずが無い。inetdへ書き換え。
$ grep ServerType /etc/proftpd/proftpd.conf
ServerType inetd
$ sudo svc -t /service/proftpd
$ telnet localhost 21
Trying 127.0.0.1...
Connected to black.
Escape character is '^]'.
220 ProFTPD 1.3.0 Server (Debian) [::ffff:127.0.0.1]
^]
telnet> close
Connection closed.
proftpdを再起動したら無事に接続出来た。
proftpdを触ったのは久しぶりだ。
しかし、検証サーバにFTP接続しようとしても接続出来ない。
■検証サーバの環境
OS: Debian GNU/Linux
proftpd: 1.3.0
補足: proftpdはtcpserver経由で起動、daemontoolsで管理
該当エラーメッセージ
2007-04-11 10:08:25.832790500 tcpserver: status: 1/40
2007-04-11 10:08:25.832797500 tcpserver: pid 26014 from 127.0.0.1
2007-04-11 10:08:25.832801500 tcpserver: ok 26014 0:::ffff:127.0.0.1:21 :::ffff:127.0.0.1::41493
2007-04-11 10:08:25.900058500 hansode - error opening scoreboard: No such file or directory
2007-04-11 10:08:25.901804500 tcpserver: end 26014 status 0
2007-04-11 10:08:25.901812500 tcpserver: status: 0/40
何だコレは。初めて見た。scoreboardが無いと言われている。
ちなみにproftpdのバージョンはこれ。
$ /usr/sbin/proftpd -v
- ProFTPD Version 1.3.0
以前は不要だったscoreboardファイルは、
とあるバージョンからか使うようになった様だ。
とりあえずstringsでproftpdを調べてみる。
$ strings /usr/sbin/proftpd | grep scoreboard
...(省略)...
error opening scoreboard: bad version (too new)
/var/run/proftpd/proftpd.scoreboard
...(省略)...
なるほど。
ディレクトリが存在していないのでディレクトリを作成。
$ ls -l /var/run/proftpd
ls: /var/run/proftpd: No such file or directory
$ sudo mkdir /var/run/proftpd
$ sudo svc -t /service/proftpd
$ telnet localhost 21
Trying 127.0.0.1...
Connected to black.
Escape character is '^]'.
Connection closed by foreign host.
まだ駄目か。
2007-04-11 10:14:05.020934500 tcpserver: status: 1/40
2007-04-11 10:14:05.020942500 tcpserver: pid 26750 from 127.0.0.1
2007-04-11 10:14:05.050110500 tcpserver: ok 26750 0:::ffff:127.0.0.1:21 :::ffff:127.0.0.1::41507
2007-04-11 10:14:05.240759500 hansode - error setting IPV6_V6ONLY: Protocol not available
2007-04-11 10:14:05.240895500 hansode - Failed binding to ::, port 21: Address already in use
2007-04-11 10:14:05.240944500 hansode - Check the ServerType directive to ensure you are configured correctly.
2007-04-11 10:14:05.242199500 tcpserver: end 26750 status 256
2007-04-11 10:14:05.242206500 tcpserver: status: 0/40
作業前にproftpd.confを上書きしてしまったのを思い出す。
$ grep ServerType /etc/proftpd/proftpd.conf
ServerType standalone
このproftpdはtcpserver経由で起動するようなrunスクリプトにしている。
standaloneだとtcpserver経由で起動するはずが無い。inetdへ書き換え。
$ grep ServerType /etc/proftpd/proftpd.conf
ServerType inetd
$ sudo svc -t /service/proftpd
$ telnet localhost 21
Trying 127.0.0.1...
Connected to black.
Escape character is '^]'.
220 ProFTPD 1.3.0 Server (Debian) [::ffff:127.0.0.1]
^]
telnet> close
Connection closed.
proftpdを再起動したら無事に接続出来た。
proftpdを触ったのは久しぶりだ。
2007年04月03日
嫌われがちなDebianを使おうと計画中。
どうも所属部署の偉い人にはDebian嫌いが多いんだよね。
『ったく、Linux使えねー!!』とデカイ声で罵声を浴びせる某上長。
これはDebianを使わせない為のパワハラだろう(笑)。
そんなの事は置いておいてDebian Debian。
考えているのはUML(User Mode Linux)を使う事。
ホスト環境は最小構成にしてゲスト環境はガッツリ構築して行く。
・コピーを作りやすい
・要らなくなったら停止
・必要になったら起動
何だかんだで所属グループにおける効率の良い開発環境作りが進ん
でいないので、1つの開発スタイルとして作業工程をまとめ、報告
してみるのは良い機会だろう。
どうも所属部署の偉い人にはDebian嫌いが多いんだよね。
『ったく、Linux使えねー!!』とデカイ声で罵声を浴びせる某上長。
これはDebianを使わせない為のパワハラだろう(笑)。
そんなの事は置いておいてDebian Debian。
考えているのはUML(User Mode Linux)を使う事。
ホスト環境は最小構成にしてゲスト環境はガッツリ構築して行く。
・コピーを作りやすい
・要らなくなったら停止
・必要になったら起動
何だかんだで所属グループにおける効率の良い開発環境作りが進ん
でいないので、1つの開発スタイルとして作業工程をまとめ、報告
してみるのは良い機会だろう。
2007年02月25日
気軽に使え、そして手軽にデザインを切り替えられるような
テンプレートを探していた。
そして見つけたのが『CSS着せ替えテンプレートプロジェクト』
> このプロジェクトは『htmlファイルには一切手を加えず、CSSファ
> イルと画像を変更することでデザインをチェンジする』ことを可能
> とする、htmlテンプレートを作ろうという試みです。最終的には複
> 数のテンプレート配布サイトが同じhtmlを基にCSSを描いていくこと
> で、多くのデザインを服を着せ替えるようにチェンジできるように
> できれば、と考えております。基本的な構想は、zen gardenの影響
> を強く受けています。
テンプレートを欲しかった理由は、作っているアプリケーションが
あまりにも素のデザインで作っている最中のやる気がどうも上がら
ない。ある程度の見栄えがあればやる気は上がるだろうと思ってテ
ンプレートを探した事が動機となっている。
ベースのHTMLさえ崩さなければCSSの切替のみで見栄えを変更可能。
テンプレートを探していた。
そして見つけたのが『CSS着せ替えテンプレートプロジェクト』
> このプロジェクトは『htmlファイルには一切手を加えず、CSSファ
> イルと画像を変更することでデザインをチェンジする』ことを可能
> とする、htmlテンプレートを作ろうという試みです。最終的には複
> 数のテンプレート配布サイトが同じhtmlを基にCSSを描いていくこと
> で、多くのデザインを服を着せ替えるようにチェンジできるように
> できれば、と考えております。基本的な構想は、zen gardenの影響
> を強く受けています。
テンプレートを欲しかった理由は、作っているアプリケーションが
あまりにも素のデザインで作っている最中のやる気がどうも上がら
ない。ある程度の見栄えがあればやる気は上がるだろうと思ってテ
ンプレートを探した事が動機となっている。
ベースのHTMLさえ崩さなければCSSの切替のみで見栄えを変更可能。
2007年01月07日
リポジトリのあるサーバの22番ポートには接続元制限をかけている。
接続拒否される環境からCVSを使おうとしたら接続出来なかった。
22番ではないポート番号で接続元制限をかけていないsshdを立ち上
げている。そっちに接続すれば解決する。しかし、ポート番号指定
で少々手こずった。
$ export CVS_RSH="ssh -p [port]"
これで解決できると思ったら -p をコマンドとして認識してくれな
かった。configを書く事で解決できるのを思い出して解決した。
$ vi ~/.ssh/config
Host [remote]
Port [port]
無事に解決。
接続拒否される環境からCVSを使おうとしたら接続出来なかった。
22番ではないポート番号で接続元制限をかけていないsshdを立ち上
げている。そっちに接続すれば解決する。しかし、ポート番号指定
で少々手こずった。
$ export CVS_RSH="ssh -p [port]"
これで解決できると思ったら -p をコマンドとして認識してくれな
かった。configを書く事で解決できるのを思い出して解決した。
$ vi ~/.ssh/config
Host [remote]
Port [port]
無事に解決。
実用SSH 第2版―セキュアシェル徹底活用ガイド
posted with amazlet on 07.01.07
Daniel J. Barrett Richard E. Silverman Robert G. Byrnes 小島 肇 坂井 順行 鹿田 幸治 園田 道夫 高橋 基信 根津 研介 宮本 久仁男
オライリー・ジャパン
売り上げランキング: 75599
オライリー・ジャパン
売り上げランキング: 75599
2006年11月01日
2006年10月26日
2006年09月27日
検証環境が欲しくなった。
UMLは手軽に検証環境を構築出来るのが良い。
■環境
Windows XP / 10.x.x.x
|
coLinux(Debian) / 192.168.0.10
|
UML(Debian) / 192.168.0.100
■作業内容
$ ./uml-manager.sh build spam
$ ./uml-manager.sh setup spam
$ ./uml-manager.sh boot spam
無事にbootしたらnetworkの設定
colinux:~# vi /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.10
colinux:~# /etc/init.d/network restart
colinux:~# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.0.10 0.0.0.0 UG 0 0 0 eth0
■uml-manager.sh
#!/bin/sh
#
#
# var
#
uml_root=$2
work_dir=${uml_root}/mnt
root_file=${uml_root}/root_fs
root_size=512
root_type=ext3
swap_file=${uml_root}/swap_fs
swap_size=128
linux_mem=128M
linux_tap=192.168.0.10
debian_name=sid
#
# local function
#
_usage() {
cat <<EOS
usage:
$(basename $0) [build |setup|boot] [dir]
EOS
exit 1
}
_mount() {
sudo mount -o loop ${root_file} ${work_dir}
}
_umount() {
sudo umount ${work_dir}
}
_dircheck() {
[ -d ${uml_root} ] || {
echo no such directory ${uml_root}
exit 1
}
}
#
# main
#
[ -z "$2" ] && _usage
case "$1" in
build)
[ -z "${uml_root}" ] && {
echo usage: $(basename $0) setup [dir]
exit 1
}
mkdir ${uml_root}
mkdir ${uml_root}/mnt
dd if=/dev/zero of=${root_file} seek=${root_size} count=1 bs=1M
dd if=/dev/zero of=${swap_file} seek=${swap_size} count=1 bs=1M
yes | /sbin/mkfs -t ${root_type} ${root_file}
/sbin/mkswap -f ${swap_file}
_mount
sudo /usr/sbin/debootstrap ${debian_name} ${work_dir} ftp://ftp.jp.debian.org/
debian
sudo chroot ${work_dir} sh -c 'cd dev && ./MAKEDEV ubd'
_umount
;;
setup)
_dircheck
_mount
cat <<EOS | sudo tee ${work_dir}/etc/fstab >/dev/null
/dev/ubda / ext3 errors=remount-ro 0 1
/dev/ubdc none swap sw 0 0
proc /proc proc defaults 0 0
EOS
sudo perl -pi -e 's,1:2345:respawn:/sbin/getty 38400 tty1,0:2345:respawn:/sbin
/getty 38400 tty0,' ${work_dir}/etc/inittab
sudo perl -pi -e 's,^tty1$,tty0,' ${work_dir}/etc/securetty
_umount
;;
boot)
_dircheck
linux rw \
umlid=${uml_id} \
mem=${linux_mem} \
ubda=${root_file} \
ubdc=${swap_file} \
eth0=tuntap,,,${linux_tap} \
con=pts con0=fd:0,fd:1
;;
*)
echo none
echo ${uml_root}
;;
esac
exit 0
UMLは手軽に検証環境を構築出来るのが良い。
■環境
Windows XP / 10.x.x.x
|
coLinux(Debian) / 192.168.0.10
|
UML(Debian) / 192.168.0.100
■作業内容
$ ./uml-manager.sh build spam
$ ./uml-manager.sh setup spam
$ ./uml-manager.sh boot spam
無事にbootしたらnetworkの設定
colinux:~# vi /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.10
colinux:~# /etc/init.d/network restart
colinux:~# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.0.10 0.0.0.0 UG 0 0 0 eth0
■uml-manager.sh
#!/bin/sh
#
#
# var
#
uml_root=$2
work_dir=${uml_root}/mnt
root_file=${uml_root}/root_fs
root_size=512
root_type=ext3
swap_file=${uml_root}/swap_fs
swap_size=128
linux_mem=128M
linux_tap=192.168.0.10
debian_name=sid
#
# local function
#
_usage() {
cat <<EOS
usage:
$(basename $0) [build |setup|boot] [dir]
EOS
exit 1
}
_mount() {
sudo mount -o loop ${root_file} ${work_dir}
}
_umount() {
sudo umount ${work_dir}
}
_dircheck() {
[ -d ${uml_root} ] || {
echo no such directory ${uml_root}
exit 1
}
}
#
# main
#
[ -z "$2" ] && _usage
case "$1" in
build)
[ -z "${uml_root}" ] && {
echo usage: $(basename $0) setup [dir]
exit 1
}
mkdir ${uml_root}
mkdir ${uml_root}/mnt
dd if=/dev/zero of=${root_file} seek=${root_size} count=1 bs=1M
dd if=/dev/zero of=${swap_file} seek=${swap_size} count=1 bs=1M
yes | /sbin/mkfs -t ${root_type} ${root_file}
/sbin/mkswap -f ${swap_file}
_mount
sudo /usr/sbin/debootstrap ${debian_name} ${work_dir} ftp://ftp.jp.debian.org/
debian
sudo chroot ${work_dir} sh -c 'cd dev && ./MAKEDEV ubd'
_umount
;;
setup)
_dircheck
_mount
cat <<EOS | sudo tee ${work_dir}/etc/fstab >/dev/null
/dev/ubda / ext3 errors=remount-ro 0 1
/dev/ubdc none swap sw 0 0
proc /proc proc defaults 0 0
EOS
sudo perl -pi -e 's,1:2345:respawn:/sbin/getty 38400 tty1,0:2345:respawn:/sbin
/getty 38400 tty0,' ${work_dir}/etc/inittab
sudo perl -pi -e 's,^tty1$,tty0,' ${work_dir}/etc/securetty
_umount
;;
boot)
_dircheck
linux rw \
umlid=${uml_id} \
mem=${linux_mem} \
ubda=${root_file} \
ubdc=${swap_file} \
eth0=tuntap,,,${linux_tap} \
con=pts con0=fd:0,fd:1
;;
*)
echo none
echo ${uml_root}
;;
esac
exit 0
2006年06月13日
『wgetやfetchのように手軽にftp putしたい』と思った。
$ curl -u [user]:[pass] -T [file] ftp://[host]/
$ curl -u [user]:[pass] -T [file] ftp://[host]/[path]
これで行けた
$ man curl
-T/--upload-file
This transfers the specified local file to the remote URL. If
there is no file part in the specified URL, Curl will append the
local file name. NOTE that you must use a trailing / on the last
directory to really prove to Curl that there is no file name or
curl will think that your last directory name is the remote file
name to use. That will most likely cause the upload operation to
fail. If this is used on a http(s) server, the PUT command will
be used.
Use the file name "-" (a single dash) to use stdin instead of a
given file.
You can specify one -T for each URL on the command line. Each -T
+ URL pair specifies what to upload and to where. curl also sup-
ports "globbing" of the -T argument, meaning that you can upload
multiple files to a single URL by using the same URL globbing
style supported in the URL, like this:
curl -T "{file1,file2}" http://www.uploadtothissite.com
or even
curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
$ curl -u [user]:[pass] -T [file] ftp://[host]/
$ curl -u [user]:[pass] -T [file] ftp://[host]/[path]
これで行けた
$ man curl
-T/--upload-file
This transfers the specified local file to the remote URL. If
there is no file part in the specified URL, Curl will append the
local file name. NOTE that you must use a trailing / on the last
directory to really prove to Curl that there is no file name or
curl will think that your last directory name is the remote file
name to use. That will most likely cause the upload operation to
fail. If this is used on a http(s) server, the PUT command will
be used.
Use the file name "-" (a single dash) to use stdin instead of a
given file.
You can specify one -T for each URL on the command line. Each -T
+ URL pair specifies what to upload and to where. curl also sup-
ports "globbing" of the -T argument, meaning that you can upload
multiple files to a single URL by using the same URL globbing
style supported in the URL, like this:
curl -T "{file1,file2}" http://www.uploadtothissite.com
or even
curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
2006年06月02日
とある作業中にダンプしたくなった。
http://dev.mysql.com/doc/refman/4.1/ja/general-security.html
ナルホド
$ sudo tcpdump -l -i eth0 -w - src or dst port 3306 | strings
見えた
http://dev.mysql.com/doc/refman/4.1/ja/general-security.html
ナルホド
$ sudo tcpdump -l -i eth0 -w - src or dst port 3306 | strings
見えた
2006年05月31日
2006年05月26日
夜中にDebianパッケージを作っていて気付いた事
http://search.cpan.org/~rickm/DateTime-Format-Strptime-1.0700/
$ wget http://search.cpan.org/CPAN/authors/id/R/RI/RICKM/DateTime-Format-Strptime-1.0700.tar.gz
$ tar zxvf DateTime-Format-Strptime-1.0700.tar.gz
$ cat DateTime-Format-Strptime-1.0700/META.yml
#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
name: DateTime-Format-Strptime
version: 1.0601
version_from: lib/DateTime/Format/Strptime.pm
installdirs: site
requires:
Params::Validate: 0.64
DateTime: 0.1402
DateTime::Locale: 0.02
DateTime::TimeZone: 0.25
distribution_type: module
generated_by: ExtUtils::MakeMaker version 6.12
何故に『version:1.0601』
このままdebianパッケージを作ろうとすると怒られる。
該当箇所を修正して対応。
http://search.cpan.org/~rickm/DateTime-Format-Strptime-1.0700/
$ wget http://search.cpan.org/CPAN/authors/id/R/RI/RICKM/DateTime-Format-Strptime-1.0700.tar.gz
$ tar zxvf DateTime-Format-Strptime-1.0700.tar.gz
$ cat DateTime-Format-Strptime-1.0700/META.yml
#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
name: DateTime-Format-Strptime
version: 1.0601
version_from: lib/DateTime/Format/Strptime.pm
installdirs: site
requires:
Params::Validate: 0.64
DateTime: 0.1402
DateTime::Locale: 0.02
DateTime::TimeZone: 0.25
distribution_type: module
generated_by: ExtUtils::MakeMaker version 6.12
何故に『version:1.0601』
このままdebianパッケージを作ろうとすると怒られる。
該当箇所を修正して対応。
2006年05月24日
目標は『apt-get install plagger』
$ dh-make-perl --cpan Plagger
Unquoted string "tests" may clash with future reserved word at Plagger-0.7.0/Makefile.PL line 255.
ここで止まってしまう。
$ perl Makefile.PL && make test
これが問題なくてもダメ。dh-make-perlに問題ありのようだ。
http://www.kunitake.org/chalow/2006-02-16.html#2006-02-16-1
んー…。
$ cp /usr/bin/dh-make-perl ./.
$ vi dh-make-perl
$ diff /usr/bin/dh-make-perl ./dh-make-perl
571c571,572
> die "Error: $error\n" if $error;
---
< #die "Error: $error\n" if $error;
< warn "Error: $error\n" if $error;
$ dh-make-perl --cpan Plagger
チカラワザ
$ cd Plagger-0.7.0
$ dpkg-buildpackage -uc -us -rfakeroot
...
dh_testdir
dh_testroot
dh_installdocs assets/plugins/Filter-EntryFullText/news_com.yaml assets/plugins/Filter-EntryFullText/newsforge.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/news_com.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/newsforge.yaml
cp: cannot stat `Plagger-0.7.0/assets/plugins/Filter-EntryFullText/news_com.yaml': そのようなファイルやディレクトリはありません
dh_installdocs: command returned error code 256
make: *** [binary-indep] エラー 1
debian/rules 67行目のdh_installdocsで止まっている。
プライベートパッケージなのでドキュメントは不要。
67行目をコメントアウト
$ vi debian/rules
$ diff /tmp/rules debian/rules
67c67
< dh_installdocs assets/plugins/Filter-EntryFullText/news_com.yaml assets/plugins/Filter-EntryFullText/newsforge.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/news_com.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/newsforge.yaml
---
> #dh_installdocs assets/plugins/Filter-EntryFullText/news_com.yaml assets/plugins/Filter-EntryFullText/newsforge.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/news_com.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/newsforge.yaml
$ dpkg-buildpackage -uc -us -rfakeroot
$ ls ../libplagger-perl_0.007000-1_all.deb
$ sudo dpkg -i ../libplagger-perl_0.007000-1_all.deb
$ dpkg -l | grep plagger
ii libplagger-perl 0.007000-1 Pluggable RSS/Atom Aggregator
とりあえず入った。conf作って動作を確認した。
後日綺麗なパッケージを作り直そう。
$ dh-make-perl --cpan Plagger
Unquoted string "tests" may clash with future reserved word at Plagger-0.7.0/Makefile.PL line 255.
ここで止まってしまう。
$ perl Makefile.PL && make test
これが問題なくてもダメ。dh-make-perlに問題ありのようだ。
http://www.kunitake.org/chalow/2006-02-16.html#2006-02-16-1
んー…。
$ cp /usr/bin/dh-make-perl ./.
$ vi dh-make-perl
$ diff /usr/bin/dh-make-perl ./dh-make-perl
571c571,572
> die "Error: $error\n" if $error;
---
< #die "Error: $error\n" if $error;
< warn "Error: $error\n" if $error;
$ dh-make-perl --cpan Plagger
チカラワザ
$ cd Plagger-0.7.0
$ dpkg-buildpackage -uc -us -rfakeroot
...
dh_testdir
dh_testroot
dh_installdocs assets/plugins/Filter-EntryFullText/news_com.yaml assets/plugins/Filter-EntryFullText/newsforge.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/news_com.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/newsforge.yaml
cp: cannot stat `Plagger-0.7.0/assets/plugins/Filter-EntryFullText/news_com.yaml': そのようなファイルやディレクトリはありません
dh_installdocs: command returned error code 256
make: *** [binary-indep] エラー 1
debian/rules 67行目のdh_installdocsで止まっている。
プライベートパッケージなのでドキュメントは不要。
67行目をコメントアウト
$ vi debian/rules
$ diff /tmp/rules debian/rules
67c67
< dh_installdocs assets/plugins/Filter-EntryFullText/news_com.yaml assets/plugins/Filter-EntryFullText/newsforge.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/news_com.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/newsforge.yaml
---
> #dh_installdocs assets/plugins/Filter-EntryFullText/news_com.yaml assets/plugins/Filter-EntryFullText/newsforge.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/news_com.yaml Plagger-0.7.0/assets/plugins/Filter-EntryFullText/newsforge.yaml
$ dpkg-buildpackage -uc -us -rfakeroot
$ ls ../libplagger-perl_0.007000-1_all.deb
$ sudo dpkg -i ../libplagger-perl_0.007000-1_all.deb
$ dpkg -l | grep plagger
ii libplagger-perl 0.007000-1 Pluggable RSS/Atom Aggregator
とりあえず入った。conf作って動作を確認した。
後日綺麗なパッケージを作り直そう。
2006年05月23日
認証がうまく行かなくて行かなくて…謎は解けたのでここに書き記す。
結論としては、Basic認証の設定を入れろと言う事。
『どうせ中の人しか使わないんだからBasic認証なくて良いじゃない
そう思い、認証部分を設定しないまま動かそうとした。
trac-adminコマンドにはパスワード設定する項目が無いし、どこで
パスワード設定するんだろうか…。認証に関わるものはBasic認証し
かない。Basic認証の設定を入れたら動いた。
$ sudo apt-get install subversion libapache2-svn cvs2svn
$ sudo apt-get install trac trac-ja-resource
$ mkdir /home/svn/
$ cvs2svn --use-cvs -s /home/svn/project /home/cvs/
$ mkdir /home/trac/
$ trac-admin /home/trac/project initenv
Project Name [My Project]> Hansode
Database connection string [sqlite:db/trac.db]>
Path to repository [/var/svn/test]> /home/svn/project
Templates directory [/usr/share/trac/templates]>
$ htpasswd2 -c /home/trac/trac.passwd hansode
$ sudo chown www-data:www-data -R /home/svn
$ sudo chown www-data:www-data -R /home/trac
$ cd /etc/apache2/sites-available/
$ sudo vi hansode
$ cat hansode.sigalrm
<LocationMatch "/[[:alnum:]]+/login>
AuthType Basic
AuthName "Trac Authentication"
AuthUserFile /home/trac/trac.passwd
Require valid-user
</LocationMatch>
<Location "/svn/project">
DAV svn
SVNPath /home/svn/project
</Location>
ScriptAlias /trac/project /usr/share/trac/cgi-bin/trac.cgi
<Location /trac/project>
SetEnv TRAC_ENV "/home/trac/project"
</Location>
$ sudo /usr/sbin/a2ensite hansode.sigalrm
$ ls -l /etc/apache2/sites-enabled/
$ sudo svc -t /service/apache2
結論としては、Basic認証の設定を入れろと言う事。
『どうせ中の人しか使わないんだからBasic認証なくて良いじゃない
そう思い、認証部分を設定しないまま動かそうとした。
trac-adminコマンドにはパスワード設定する項目が無いし、どこで
パスワード設定するんだろうか…。認証に関わるものはBasic認証し
かない。Basic認証の設定を入れたら動いた。
$ sudo apt-get install subversion libapache2-svn cvs2svn
$ sudo apt-get install trac trac-ja-resource
$ mkdir /home/svn/
$ cvs2svn --use-cvs -s /home/svn/project /home/cvs/
$ mkdir /home/trac/
$ trac-admin /home/trac/project initenv
Project Name [My Project]> Hansode
Database connection string [sqlite:db/trac.db]>
Path to repository [/var/svn/test]> /home/svn/project
Templates directory [/usr/share/trac/templates]>
$ htpasswd2 -c /home/trac/trac.passwd hansode
$ sudo chown www-data:www-data -R /home/svn
$ sudo chown www-data:www-data -R /home/trac
$ cd /etc/apache2/sites-available/
$ sudo vi hansode
$ cat hansode.sigalrm
<LocationMatch "/[[:alnum:]]+/login>
AuthType Basic
AuthName "Trac Authentication"
AuthUserFile /home/trac/trac.passwd
Require valid-user
</LocationMatch>
<Location "/svn/project">
DAV svn
SVNPath /home/svn/project
</Location>
ScriptAlias /trac/project /usr/share/trac/cgi-bin/trac.cgi
<Location /trac/project>
SetEnv TRAC_ENV "/home/trac/project"
</Location>
$ sudo /usr/sbin/a2ensite hansode.sigalrm
$ ls -l /etc/apache2/sites-enabled/
$ sudo svc -t /service/apache2
2006年05月18日
先日のcoLinuxでuser-mode-linuxの訂正
結論: 無事に動いた
$ /sbin/ifconfig eth0 | grep -w inet
inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
$ linux rw mem=128M ubd0=root_fs ubd1=swap_fs eth0=tuntap,,,192.168.0.10 con=null con0=fd:0,fd:1
TUN/TAPのIPアドレス指定に間違いあり。
UML用にアサインするIPアドレスを設定してしまっていたのが原因。
しっかりドキュメント読もうぜ…自分。
uml-colinux:~# cat /etc/network/interfaces
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.200
netmask 255.255.255.0
gateway 192.168.0.1
uml-colinux:~# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
uml-colinux:~# ping www.google.com
PING www.l.google.com (66.249.89.99) 56(84) bytes of data.
64 bytes from 66.249.89.99: icmp_seq=1 ttl=242 time=2.58 ms
64 bytes from 66.249.89.99: icmp_seq=2 ttl=242 time=2.35 ms
外界
|
GW
|
Windows XP (10.0.0.10)
|
coLinux Debian (192.168.0.10)
|
UML Debian (192.168.0.200)
こんなに隠して何をする
結論: 無事に動いた
$ /sbin/ifconfig eth0 | grep -w inet
inet addr:192.168.0.10 Bcast:192.168.0.255 Mask:255.255.255.0
$ linux rw mem=128M ubd0=root_fs ubd1=swap_fs eth0=tuntap,,,192.168.0.10 con=null con0=fd:0,fd:1
TUN/TAPのIPアドレス指定に間違いあり。
UML用にアサインするIPアドレスを設定してしまっていたのが原因。
しっかりドキュメント読もうぜ…自分。
uml-colinux:~# cat /etc/network/interfaces
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.0.200
netmask 255.255.255.0
gateway 192.168.0.1
uml-colinux:~# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
uml-colinux:~# ping www.google.com
PING www.l.google.com (66.249.89.99) 56(84) bytes of data.
64 bytes from 66.249.89.99: icmp_seq=1 ttl=242 time=2.58 ms
64 bytes from 66.249.89.99: icmp_seq=2 ttl=242 time=2.35 ms
外界
|
GW
|
Windows XP (10.0.0.10)
|
coLinux Debian (192.168.0.10)
|
UML Debian (192.168.0.200)
こんなに隠して何をする
2006年05月17日
普段使うコマンドのman
$ man basename
NAME
basename - strip directory and suffix from filenames
SYNOPSIS
basename NAME [SUFFIX]
basename OPTION
『basename NAME [SUFFIX]』と言う使い方があったとは…
$ basename /etc/resolv.conf
resolv.conf
$ basename /etc/resolv.conf .conf
resolv
なるほど。
別の拡張子に書き換えてみる
$ src=conf dst=hoge; for i in /etc/*.${src}; do
echo mv $i $(dirname $i)/$(basename $i .${src}).${dst}
done
なるほど…
しかし、使えるのを知ってもいつもの使い方しかしないかな。
$ man basename
NAME
basename - strip directory and suffix from filenames
SYNOPSIS
basename NAME [SUFFIX]
basename OPTION
『basename NAME [SUFFIX]』と言う使い方があったとは…
$ basename /etc/resolv.conf
resolv.conf
$ basename /etc/resolv.conf .conf
resolv
なるほど。
別の拡張子に書き換えてみる
$ src=conf dst=hoge; for i in /etc/*.${src}; do
echo mv $i $(dirname $i)/$(basename $i .${src}).${dst}
done
なるほど…
しかし、使えるのを知ってもいつもの使い方しかしないかな。
子環境を増殖させたい
手っ取り早く開発環境が欲しい。
そんな時に使えるはず。
$ ./uml-manager.sh [build|config|boot] [id]
$ ./uml-manager.sh build 01
$ ./uml-manager.sh config 01
$ ./uml-manager.sh boot 01
汎用性を求めるならオプション指定可能にするかな。
TUN/TAPのIPアドレスを192.168.1.254とする場合の話。
とりあえず決め打ち。
$ cat uml-manager.sh
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
export PATH
#
# var
#
uml_root=$2
work_dir=${uml_root}/mnt
root_file=${uml_root}/root_fs
root_size=512
root_type=ext3
swap_file=${uml_root}/swap_fs
swap_size=128
linux_mem=128M
linux_tap=192.168.1.254
debian_name=sid
#
# local function
#
_usage() {
cat <
usage:
$(basename $0) [build |setup|boot] [dir]
EOS
exit 1
}
_mount() {
sudo mount -o loop ${root_file} ${work_dir}
}
_umount() {
sudo umount ${work_dir}
}
#
# main
#
[ -z "$2" ] && _usage
case "$1" in
build)
[ -z "${uml_root}" ] && {
echo usage: $(basename $0) setup [dir]
exit 1
}
# mkdir ${uml_root}
mkdir ${uml_root}/mnt
dd if=/dev/zero of=${root_file} seek=${root_size} count=1 bs=1M
dd if=/dev/zero of=${swap_file} seek=${swap_size} count=1 bs=1M
yes | /sbin/mkfs -t ${root_type} ${root_file}
/sbin/mkswap -f ${swap_file}
_mount
sudo /usr/sbin/debootstrap ${debian_name} ${work_dir} ftp://ftp.jp.debian.org/debian
sudo chroot ${work_dir} sh -c 'cd dev && ./MAKEDEV ubd'
_umount
;;
setup)
_mount
cat </dev/null
/dev/ubda / ext3 errors=remount-ro 0 1
/dev/ubdc none swap sw 0 0
proc /proc proc defaults 0 0
EOS
sudo perl -pi -e 's,1:2345:respawn:/sbin/getty 38400 tty1,0:2345:respawn:/sbin/getty 38400 tty0,' ${work_dir}/etc/inittab
sudo perl -pi -e 's,^tty1$,tty0,' ${work_dir}/etc/securetty
_umount
;;
boot)
linux rw \
mem=${linux_mem} \
ubda=${root_file} \
ubdc=${swap_file} \
eth0=tuntap,,,${linux_tap} \
con=pts con0=fd:0,fd:1
;;
*)
echo none
;;
esac
exit 0
手っ取り早く開発環境が欲しい。
そんな時に使えるはず。
$ ./uml-manager.sh [build|config|boot] [id]
$ ./uml-manager.sh build 01
$ ./uml-manager.sh config 01
$ ./uml-manager.sh boot 01
汎用性を求めるならオプション指定可能にするかな。
TUN/TAPのIPアドレスを192.168.1.254とする場合の話。
とりあえず決め打ち。
$ cat uml-manager.sh
#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin
export PATH
#
# var
#
uml_root=$2
work_dir=${uml_root}/mnt
root_file=${uml_root}/root_fs
root_size=512
root_type=ext3
swap_file=${uml_root}/swap_fs
swap_size=128
linux_mem=128M
linux_tap=192.168.1.254
debian_name=sid
#
# local function
#
_usage() {
cat <
$(basename $0) [build |setup|boot] [dir]
EOS
exit 1
}
_mount() {
sudo mount -o loop ${root_file} ${work_dir}
}
_umount() {
sudo umount ${work_dir}
}
#
# main
#
[ -z "$2" ] && _usage
case "$1" in
build)
[ -z "${uml_root}" ] && {
echo usage: $(basename $0) setup [dir]
exit 1
}
# mkdir ${uml_root}
mkdir ${uml_root}/mnt
dd if=/dev/zero of=${root_file} seek=${root_size} count=1 bs=1M
dd if=/dev/zero of=${swap_file} seek=${swap_size} count=1 bs=1M
yes | /sbin/mkfs -t ${root_type} ${root_file}
/sbin/mkswap -f ${swap_file}
_mount
sudo /usr/sbin/debootstrap ${debian_name} ${work_dir} ftp://ftp.jp.debian.org/debian
sudo chroot ${work_dir} sh -c 'cd dev && ./MAKEDEV ubd'
_umount
;;
setup)
_mount
cat <
/dev/ubda / ext3 errors=remount-ro 0 1
/dev/ubdc none swap sw 0 0
proc /proc proc defaults 0 0
EOS
sudo perl -pi -e 's,1:2345:respawn:/sbin/getty 38400 tty1,0:2345:respawn:/sbin/getty 38400 tty0,' ${work_dir}/etc/inittab
sudo perl -pi -e 's,^tty1$,tty0,' ${work_dir}/etc/securetty
_umount
;;
boot)
linux rw \
mem=${linux_mem} \
ubda=${root_file} \
ubdc=${swap_file} \
eth0=tuntap,,,${linux_tap} \
con=pts con0=fd:0,fd:1
;;
*)
echo none
;;
esac
exit 0
2006年05月16日
$ whoami
uml-host
$ sudo apt-get install user-mode-linux
$ sudo apt-get install rootstrap
$ sudo usermod -G uml-net uml-host
$ mkdir umlroot
$ cd umlroot
$ dd if=/dev/zero of=root_fs seek=512 count=1 bs=1M
$ dd if=/dev/zero of=swap_fs seek=129 count=1 bs=1M
$ /sbin/mkfs.ext3 root_fs
$ /sbin/mkswap -f swap_fs
$ sudo mount -o loop ./root_fs mnt
$ sudo /usr/sbin/debootstrap sid mnt
$ sudo chroot ./mnt /dev/MAKEDEV ubd
$ linux rw mem=128M ubd0=root_fs ubd1=swap_fs con=null con0=fd:0,fd:1
2006年05月11日
Plagger入れてみよう
$ dh-make-perl --build --cpan Plagger
不足モジュールが多々あるので必要に応じてapt-getするなり
dh-make-perlをしてモジュールを追加しまくる。
$ apt-cache search libhoge-perl
$ sudo apt-get install libhoge-perl
.....
$ dh-make-perl --build --cpan Hoge
$ sudo dpkg -i libhoge-perl_x.y.z-1_all.deb
.....
$ sudo dpkg -i libplagger-perl_0.6.5-1_all.deb
$ dpkg -l libplagger-perl
ii libplagger-per 0.6.5-1 Pluggable RSS/Atom Aggregator
$ dh-make-perl --build --cpan Plagger
不足モジュールが多々あるので必要に応じてapt-getするなり
dh-make-perlをしてモジュールを追加しまくる。
$ apt-cache search libhoge-perl
$ sudo apt-get install libhoge-perl
.....
$ dh-make-perl --build --cpan Hoge
$ sudo dpkg -i libhoge-perl_x.y.z-1_all.deb
.....
$ sudo dpkg -i libplagger-perl_0.6.5-1_all.deb
$ dpkg -l libplagger-perl
ii libplagger-per 0.6.5-1 Pluggable RSS/Atom Aggregator
2006年05月08日
tinydnsのdataファイルとdata.cdbファイルの比較
dataとdata.cdbがほぼ同時刻に生成された事を確認したい。
$ man sh
file1 -nt file2
True if file1 is newer (according to modification date) than
file2, or if file1 exists and file2 does not.
file1 -ot file2
True if file1 is older than file2, or if file2 exists and file1
does not.
-nt でも -ot でも同時刻の場合にfalseを返して来る。
同時刻である場合の比較演算子が無いではないか!
そもそもそんな比較をするヤツは居ないく需要は低いのだろう。
秒単位ではなく分単位での比較をしている模様。
やりたい事を満たせるので結局こうした。
#!/bin/sh
is_same_mtime() {
[ $# = 2 ] || return 1
(! [ $1 -nt $2 ] && ! [ $1 -ot $2 ])
return $?
}
cronで実行しているからtinydns-dataの実行終了に60秒もかかる事
はないはずだ!サーバが高負荷の時は発生してしまうかも知れない。
dataとdata.cdbがほぼ同時刻に生成された事を確認したい。
$ man sh
file1 -nt file2
True if file1 is newer (according to modification date) than
file2, or if file1 exists and file2 does not.
file1 -ot file2
True if file1 is older than file2, or if file2 exists and file1
does not.
-nt でも -ot でも同時刻の場合にfalseを返して来る。
同時刻である場合の比較演算子が無いではないか!
そもそもそんな比較をするヤツは居ないく需要は低いのだろう。
秒単位ではなく分単位での比較をしている模様。
やりたい事を満たせるので結局こうした。
#!/bin/sh
is_same_mtime() {
[ $# = 2 ] || return 1
(! [ $1 -nt $2 ] && ! [ $1 -ot $2 ])
return $?
}
cronで実行しているからtinydns-dataの実行終了に60秒もかかる事
はないはずだ!サーバが高負荷の時は発生してしまうかも知れない。
2006年04月11日
2006年04月04日
いつぞやのネタの続編
バックエンドに接続元IPアドレスを教えてやるモジュールを追加
$ sudo apt-get install libapache-mod-rpaf
$ sudo svc -t /service/apache
dispatchの挙動が開発機と本番機に違う。何故……?
設定に違いがあるはずなので必至になって原因を追究。遂に発見…。
バックエンドapacheのKeepAliveがOffになっていた。Onにしないと
意図した振る舞いをしてくれない。アプリケーションに特化した使
い方をしていなかった頃に設定を変えたのだろう。
過去の自分が未来の自分をハメタ
バックエンドapacheのKeepAliveはOnにすべし
バックエンドに接続元IPアドレスを教えてやるモジュールを追加
$ sudo apt-get install libapache-mod-rpaf
$ sudo svc -t /service/apache
dispatchの挙動が開発機と本番機に違う。何故……?
設定に違いがあるはずなので必至になって原因を追究。遂に発見…。
バックエンドapacheのKeepAliveがOffになっていた。Onにしないと
意図した振る舞いをしてくれない。アプリケーションに特化した使
い方をしていなかった頃に設定を変えたのだろう。
過去の自分が未来の自分をハメタ
バックエンドapacheのKeepAliveはOnにすべし
2006年03月20日
2006年03月08日
とあるサーバ群のログ集計にWebalizerを使ってみた
ログをどのようにマージしようか迷っていた。何も考えずにwebalizer
でサーバごとに集計させると集計結果がおかしな事になる。原因は
時系列にログが並んでいない事。ググってみたらマージしつつ時系
列に並べてくれるものを見つけた。
その名も… MergeLog
読んで字のごとく。分かりやすい。
$ mergelog [file] [file] .... | webalizer -c webalizer.conf
$ zmergelog [file] [file] .... | webalizer -c webalizer.conf
zmergelogはgzipで圧縮されたファイルを扱ってくれる。
ログをどのようにマージしようか迷っていた。何も考えずにwebalizer
でサーバごとに集計させると集計結果がおかしな事になる。原因は
時系列にログが並んでいない事。ググってみたらマージしつつ時系
列に並べてくれるものを見つけた。
その名も… MergeLog
読んで字のごとく。分かりやすい。
$ mergelog [file] [file] .... | webalizer -c webalizer.conf
$ zmergelog [file] [file] .... | webalizer -c webalizer.conf
zmergelogはgzipで圧縮されたファイルを扱ってくれる。


