ブログトップ 記事一覧 ログイン 無料ブログ開設

それはそれ。これはこれ。 このページをアンテナに追加 RSSフィード

2003 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 03 | 04 | 05 | 06 | 07 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 11 | 12 |
2013 | 01 | 02 | 04 | 05 | 07 | 08 | 10 | 11 | 12 |
2014 | 02 | 03 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 05 | 06 | 07 | 11 |
2016 | 07 |
2017 | 01 | 03 | 06 | 07 | 11 |
2018 | 05 | 07 | 08 | 09 | 10 |

2018-08-26(日)

[]コンソールから切れたプロセス標準出力をつなげなおす コンソールから切れたプロセスの標準出力をつなげなおす - それはそれ。これはこれ。 を含むブックマーク コンソールから切れたプロセスの標準出力をつなげなおす - それはそれ。これはこれ。 のブックマークコメント

コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ に、gdbを使って稼働中プロセス標準出力標準エラー出力繋ぎ直す話が載っていた。

.bash_profileからscreenを起動しているので、ここに書かれた事態に陥ることはまず無いのだが、記憶するためにシェルスクリプトにしておく。

#!/bin/bash
usage(){
    cat <<-EOF >&2 ; exit $1
    Usage:
    既存プロセスの標準出力と標準エラー出力を割り当て直す
    ${0##*/} PID [[-a] OUTFILE]
EOF
}
error(){
    echo "$@" >&2 ; exit 1
}

pid="$1"
test -z "$pid" && usage 0
user=$(ps h p "$pid" o user 2>/dev/null) ||
error "プロセスが見つからない"

test "$USER" = root -o "$USER" = "$user" ||
error "プロセスオーナーが自分ではない"

FLAG=0001 # O_WRONLY

out="$2"
case "$out" in
"") out=/dev/$(ps h p $$ o tty) ;;
-a) FLAG=02001 # O_WRONLY | O_APPEND
    out="$3"
    test -z "$out" && usage 1 ;;
/*) ;;
*)  out=$PWD/$out ;;
esac
touch "$out" 2>/dev/null ||
error "出力先に書けない"

gdb -p "$pid" <<EOF
p close(1)
p open("$out", $FLAG)
p close(2)
p open("$out", $FLAG)
detach
quit
EOF

2018-05-02(水)

[]日本語マニュアルページの更新 日本語マニュアルページの更新 - それはそれ。これはこれ。 を含むブックマーク 日本語マニュアルページの更新 - それはそれ。これはこれ。 のブックマークコメント

Linux日本語マニュアルを最新化する。

1.https://linuxjm.osdn.jp/download.html から全体のアーカイブダウンロードして解凍

2.make config して適当に答える。全部インストールすると指定する

  ⇒ installman.sh が出来る

3.インストール済みのマニュアルのみ更新するように、インストールコマンド抽出

#!/bin/sh
# manファイルは /usr/share/man に、日本語manファイルは /usr/share/man/ja にあり、gzipされている前提
find /usr/share/man -type f |
awk '
FILENAME=="-"{w=$1;sub(/\.gz$/,"",w);man[w]=1;next}
FNR==1{ORS="\n\n";print;next}
{
split($0,line,/\n/)
split(line[4],word,/ /)
if(word[3] in  man) { print;next }
sub(/\/ja\//,"/",word[3])
if(word[3] in  man) { print }
}
' - RS= installman.sh > my-installman.sh

4.更新実行。sudo sh my-installman.sh

5.whatisDB更新sudo makewhatis


これを自動化すべきか。

2017-07-08(土)

[] Proxy経由でMastodonをインストールする  Proxy経由でMastodonをインストールする - それはそれ。これはこれ。 を含むブックマーク  Proxy経由でMastodonをインストールする - それはそれ。これはこれ。 のブックマークコメント

ファイアーウォールの中でProxyサーバー経由で、CentOS7にMastodonをインストールするときのメモ。

1.DockerデーモンのProxy設定

★/etc/systemd/system/docker.service.d/proxy.conf に

[Service]
Environment="HTTP_PROXY=http://prox-hostname:port/"
Environment="HTTPS_PROXY=http://prox-hostname:port/"

というファイルを作って、

systemctl daemon-reload

systemctl restart docker

で反映して、

docker info

で、Proxy情報が表示されることを確認する。


2.コンテナにに対してのProxy設定

Mastodonインストールディレクトリにある .env.production に、

http_proxy=http://prox-hostname:port
https_proxy=http://prox-hostname:port

を追加する。


3.apk や npm や yarn に対してのProxy設定

Mastodonインストールディレクトリにある Dockerfile に、環境変数を追加してみる。

ENV https_proxy=http://prox-hostname:port
ENV http_proxy=http://prox-hostname:port

しかし、これではapkのhttpsに対して効かない(何故??)ようなので、リポジトリのURLをhttpに変更する。

RUN echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \
  ↓
RUN echo "@edge http://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \

これで、apkはOK。

npmが環境変数を見ていないようなので、proxy設定を追加する。

 && npm config set proxy http://prox-hostname:port \
 && npm config set https-proxy http://prox-hostname:port \

yarnはコマンドラインで指定する。

 && yarn --proxy http://prox-hostname:port --https-proxy http://prox-hostname:port --ignore-optional \

ちゃんと環境変数 http_proxy https_proxy を見ないツールがあるのは何故だろう?

2017-03-19(日)

[][] CentOS6 に Owncloud のインストール  CentOS6 に Owncloud のインストール - それはそれ。これはこれ。 を含むブックマーク  CentOS6 に Owncloud のインストール - それはそれ。これはこれ。 のブックマークコメント

借りているVPSのディスクにかなりの余裕があるので、プライベートDropbox風サーバーソフトを入れてみることにする。


ググればいろいろ参考になるページはあるが、ここはきちんと本家サイト http://download.owncloud.org/download/repositories/9.1/owncloud/ の手順でやることにする。

CentOS_6 owncloud-9.1.4-2

Run the following shell commands as root to trust the repository.

rpm --import https://download.owncloud.org/download/repositories/9.1/CentOS_6/repodata/repomd.xml.key

Run the following shell commands as root to add the repository and install from there.

wget http://download.owncloud.org/download/repositories/9.1/CentOS_6/ce:9.1.repo -O /etc/yum.repos.d/ce:9.1.repo
yum clean expire-cache
yum install owncloud

ただ、これでやると、yum install の依存チェックでPHPバージョンが5.4以上でないといけないと出る。

ということで、CentOS6にPHP5.4以上にアップデートする回り道。REMIリポジトリにある。

PHP7はチャレンジングな気がするので、REMIのPHP5の中で一番新しいPHP5.6にする事にする。


REMIリポジトリのインストール
# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# vi /etc/yum.repo.d/remi.repo
で[remi-php56]をenabled=1に。
# yum clean all

PHPの更新
# rpm -qa "php*"

で、インストールされているPHPパッケージを調べる。下記の4つだけ。

# service httpd stop
# yum remove "php*"
# yum install php php-common php-cli php-mbstring
# service httpd start

で、既存のウェブコンテンツが影響を受けてないか確認する。駄目なら一旦戻して、PHPバージョンアップ対策。


再度Owncloudインストール
# yum clean all
# yum install owncloud

とりあえずインストールだけ完了。

2017-01-14(土)

[] 環境変数LESSOPEN  環境変数LESSOPEN - それはそれ。これはこれ。 を含むブックマーク  環境変数LESSOPEN - それはそれ。これはこれ。 のブックマークコメント

ふと、環境変数LESSOPENの値を見ると、"||/usr/bin/lesspipe.sh %s" になっている。

CentOS6.8だと、/etc/profile.d/less.sh でそのように設定されているが、"|/usr/bin/lesspipe.sh %s"が正しいんじゃないのか?

なぜ"|"が2つあるのか謎。

"|||/usr/bin/lesspipe.sh %s" と3つにするとエラー。

2015-06-28(日)

[]うるう秒対応 うるう秒対応 - それはそれ。これはこれ。 を含むブックマーク うるう秒対応 - それはそれ。これはこれ。 のブックマークコメント

借りているVPSでの、うるう秒対応。

# crontab -l
59 8 1 7 * bash -c "sleep 40;/sbin/shutdown -r now"

shutdown のTIMEで秒を指定する方法が分からない。

ググると、-t で指定できると書いてあるページもあるが、CentOS6.6のshutdownではそういうオプションは無い。

2014-11-07(金)

[][] サーバー移行  サーバー移行 - それはそれ。これはこれ。 を含むブックマーク  サーバー移行 - それはそれ。これはこれ。 のブックマークコメント

http://otnx.jp のサイトを、共用レンタルサーバーから、VPSに移行した。

本日、DNS の登録変更。


ようやくというか、移行しようと思ってから、2年半放っておいたのか。。。。。

あとまだメーリングリストの移行がある。

2014-10-10(金)

[] 同じ名前のファイルのリストアップ  同じ名前のファイルのリストアップ - それはそれ。これはこれ。 を含むブックマーク  同じ名前のファイルのリストアップ - それはそれ。これはこれ。 のブックマークコメント

テストしきってない気もするが、多分大丈夫そう。メモ。

ファイル名にタブや改行が含まれない前提。

find /usr/local -type f -printf '%f\t%p\n' | sort | awk -F$'\t' '{if($1==A){if(A!=B)print X;print};B=A;A=$1;X=$0}'

順番入れ替えれば uniq で出来るかと思ったけど、無理。

2014-08-13(水)

[] gnu sed のアンドキュメンテッドな機能  gnu sed のアンドキュメンテッドな機能 - それはそれ。これはこれ。 を含むブックマーク  gnu sed のアンドキュメンテッドな機能 - それはそれ。これはこれ。 のブックマークコメント

sed の s コマンドに、man sed に書かれていない機能が色々あるようだ。

s/正規表現/置換文字列/オプション のオプションで、

g … global(複数回置換)

p … print(置換後の文字列を表示)

i … ignore case(正規表現で英大文字小文字を区別しない)

は知られている。


$ for x in {0..9} {A..Z} {a..z};do echo -n $x:; echo a | sed s/a/b/$x; done

でエラーにならない文字を調べてみる。


ということで、機能を調べると、

数字 … 指定番目のマッチのみ置換

数字g … 指定番目以降のマッチを置換

e … 置換後の文字列をシェルコマンドとして実行してその出力で置換

m … 改行文字にマッチしない

w … 置換後の文字列をファイルに書き込む

がある。また、I と M はそれぞれ i と m と同じ。

$ echo {1..10} | sed 's/ /-/3'
1 2 3-4 5 6 7 8 9 10
$ echo {1..10} | sed 's/ /-/3g'
1 2 3-4-5-6-7-8-9-10

$ echo {1..10} | sed 's/ / + /g;s/.*/expr &/e'
55

$ seq 5 | sed 's/3/&&&/w/tmp/work'
1
2
333
4
5
$ cat /tmp/work
333

$ echo $'a\nb' | sed 'N;s/.../===/'
===
$ echo $'a\nb' | sed 'N;s/.../===/m'
a
b

数字のオプションは、man ed の s コマンドの所には書いてある。vim/ex の s コマンドでは使えないようだ。

m は、PerlやRuby等の正規表現の m オプションとは逆だが、これは元々の sed の機能が改行文字を対象にしていたからだろう。そういった意味では、大文字の M と書いた方が誤解されないだろう。そのために大文字も同じ機能だとすると、深い。

2013-05-13(月)

[][] Hikiインストール  Hikiインストール - それはそれ。これはこれ。 を含むブックマーク  Hikiインストール - それはそれ。これはこれ。 のブックマークコメント

http://hikiwiki.org/ja/ から、1.0.0.zip をダウンロードして、/opt/hiki で解凍

# mkdir /opt/hiki
# cd /opt/hiki
# wget https://github.com/hiki/hiki/archive/1.0.0.zip
# unzip 1.0.0.zip
# mkdir log

apacheでVirtual Hostの設定。

# vi /etc/httpd/conf.d/virtual.conf
<VirtualHost *:80>
    DocumentRoot /opt/hiki/hiki-1.0.0
    ServerName foo.example.com
    ErrorLog  /opt/hiki/log/error_log
    CustomLog /opt/hiki/log/access_log common
</VirtualHost>
<Directory "/opt/hiki/hiki-1.0.0">
    Options ExecCGI FollowSymLinks Includes
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
# service httpd reload

INSTALL.txtを見ながら設定。

# cd /opt/hiki/hiki-1.0.0
# mv dot.htaccess .htaccess
# cp -rp data/ ..
# cd ..
# chgrp -R apache data
# chmod -R g+w data
# cd hiki-1.0.0
# chmod go-rx ChangeLog Gemfile* Procfile doc data
# cp hikiconf.rb.sample hikiconf.rb
# vi hikiconf.rb
--- hikiconf.rb.sample  2013-03-30 00:46:59.000000000 +0900
+++ hikiconf.rb 2013-05-12 21:22:53.993588737 +0900
@@ -11,7 +11,7 @@
 #   ディレクトリを指定します。
 #   このディレクトリの「全ファイル」と「全ディレクトリ」は、WWWサーバの
 #   権限で書き込めるパーミッションにしておく必要があります。
-@data_path       = 'path to data'
+@data_path       = '/opt/hiki/data'
 # メールサーバ名【オプション】
 #   メールサーバ名を指定します。@mail_on_updateがtrueの場合に有効です。
# cp -p hiki.cgi hiki.cgi.orig
# vi hiki.cgi
--- hiki.cgi.orig       2013-03-30 00:46:59.000000000 +0900
+++ hiki.cgi    2013-03-30 00:46:59.000000000 +0900
@@ -1,4 +1,4 @@
-#!/usr/bin/env ruby
+#!/usr/local/bin/ruby
 # $Id: hiki.cgi,v 1.36 2008-01-24 15:42:11 znz Exp $
 # Copyright (C) 2002-2004 TAKEUCHI Hitoshi <hitoshi@namaraii.com>

http://foo.example.com にアクセスするとエラーが出るので、エラーメッセージを見て追加でgemをインストール

# gem install docdiff
# gem install hikidoc

無事に、FrontPage が表示されるので、「管理」をクリックしてパスワードを設定して、ログイン。

2012-05-29(火)

[]screen -R が仕様通り動かない screen -R が仕様通り動かない - それはそれ。これはこれ。 を含むブックマーク screen -R が仕様通り動かない - それはそれ。これはこれ。 のブックマークコメント

id:otn:20120512 で、

ログイン時に自動的に screen が起動されるように。

$ vi .bash_profile
 末尾に追加。
exec screen -R

と書いた。man screen に、

-R デタッチされている screen セッションのうち最初に見つかったものを再開しようと試みる。

と書いてあるが、実際にデタッチされいるセッションが複数あると、メッセージを出力して終了してしまう。


これでは駄目なので、書き換える。

$ screen -ls
There are screens on:
        31337.pts-5.XXXXXXXXXX  (Detached)
        20235.pts-0.XXXXXXXXXX  (Attached)
        31254.pts-3.XXXXXXXXXX  (Detached)
3 Sockets in /var/run/screen/S-t.

のようにセッションの状況が調べられるので、これを使って .bash_profile に下記のように書く。

for x in `screen -ls`
do case "$x" in
   *Detach*) exec screen -r "$y" ;;
   esac
   y="$x"
done
exec screen

2012-05-23(水)

[]「さくらのVPS」CentOS 初期設定4 〜 MHインストール 「さくらのVPS」CentOS 初期設定4 〜 MHインストール - それはそれ。これはこれ。 を含むブックマーク 「さくらのVPS」CentOS 初期設定4 〜 MHインストール - それはそれ。これはこれ。 のブックマークコメント

Fedora には nmh という MH のパッケージがあるのだが、CentOS にも EPEL にも無い。検索してみてもあまりいい情報は無いので、Fedora のソースパッケージをコンパイルしてみたらうまくいったようだ。

$ wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/16/Everything/source/SRPMS/nmh-1.3-4.fc15.src.rpm
$ rpm2cpio nmh-1.3-4.fc15.src.rpm | cpio --extract
$ ls nmh*
nmh.spec  nmh-1.1-inc_install.patch  nmh-1.3.tar.gz  nmh-1.3-4.fc15.src.rpm
$ tar xvf nmh-1.3.tar.gz
$ cd nmh-1.3/uip
$ patch < ../../nmh-1.1-inc_install.patch
$ cd ..
$ ./configure --with-locking=fcntl --with-editor=/usr/bin/vim --with-pager=/usr/bin/less
$ make
$ sudo make install
$ sudoedit /etc/profile.d/zzlocal.sh
 下記を追加して保存。
pathmunge /usr/local/nmh/bin
export MANPATH=:/usr/local/nmh/share/man

デフォルトで configure すると、maildrop ファイルのロック方式がロック用のファイルを別途作るオプションになる(--with-locking=dot)。従って、inc コマンドで /var/spool/mail ディレクトリに書ける必要があるため mail に setgid する必要がある。ロック方式を他に変えるとこれが不要になるので、--with-locking=fcntl を指定して、Makefile.in に inc インストール時に setgid しないようにするパッチを当てる。

また、コマンドインストール先が、/usr/local/bin でなく /usr/local/nmh/bin なので PATH に追加するように、および MANPATH を設定するように zzlocal.sh を修正しておく。


コマンドラインでメールを処理するのは、いまどきはどういうツールを使うのが主流なんだろう?

まつもとまつもと 2012/07/04 11:43 手前味噌ですが、CentOSでMH-6.8.4を使っています。
昔からMHを使い続けている人にしか需要は無いのかもしれません。

2012-05-13(日)

[]「さくらのVPS」CentOS 初期設定3 〜 Ruby・ウェブ関連設定 「さくらのVPS」CentOS 初期設定3 〜 Ruby・ウェブ関連設定 - それはそれ。これはこれ。 を含むブックマーク 「さくらのVPS」CentOS 初期設定3 〜 Ruby・ウェブ関連設定 - それはそれ。これはこれ。 のブックマークコメント

細かい物をインストール

$ sudo yum install nkf telnet logwatch

Rubyのインストール

まずは make してみる。http://www.ruby-lang.org/ja/downloads/ で、最新安定版の URL を調べる。

$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.#-p###.tar.bz2
$ tar xvf ruby-1.9.#-p###.tar.bz2
$ cd ruby-1.9.#-p###
$ ./configure
$ make

以前は、必要なライブラリが無いとエラーが出ていたが、最近は無くても configure や make はそれなりに通るようだ。

make のログを見て、必要そうなライブラリを追加でインストールして、やり直し。

$ sudo yum install readline-devel openssl-devel gdbm-devel libffi-devel
$ sudo yum --enablerepo=epel install libyaml libyaml-devel
$ ./configure
$ make && make test
$ sudo make install

gem と irb の設定。

$ sudo vi /root/.gemrc
 以下の内容で新規作成。
gem: --no-ri --no-rdoc
$ vi ~/.irbrc
 以下の内容で新規作成。Windows用で不要な部分もあるが、使い回しているのでそのまま。
begin
require "pp"
require "irb/completion" # メソッド補完
require "what_methods" # what? でメソッドを調べる
rescue ScriptError => e
p e
end

IRB.conf[:SAVE_HISTORY]=1000

module Kernel
  def m(obj=nil)
    if obj.instance_of?(Fixnum) and obj > 0
      k=self.class.ancestors[obj]
      k||=Object
      STDERR.puts "diff #{k}"
      (methods-k.instance_methods).sort
    elsif defined? WIN32OLE and is_a? WIN32OLE
      ole_methods.sort_by{|x| x.to_s} + (methods-obj.methods).sort
    elsif is_a? Module
      (methods-Module.methods).sort
    else
      (methods-obj.methods).sort
    end
  end
end
class String
  def save(filename)
    open(filename,"w"){|f| f.write self}
  end
end

m メソッドは、id:otn:20091202 で書いた物の改訂版。実際には引数をつけて実行することはほとんどないなあ。

save は、文字列をちょっとファイルに書きたい場合に使うが、存在をよく忘れる。


HTTP-proxy squidのインストール

バージョンが上がって squid.conf が簡素化されてしまったので、http://www.squid-cache.org/Doc/config/ を参考にする。

ポート番号は変更して、認証を掛ける。ダイジェスト認証の場合はパスワードは平文で格納する。

$ sudo yum install squid
$ sudo htpasswd -cbp /etc/squid/passwd USER PASSWORD
$ sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.orig
$ sudo vi /etc/squid/squid.conf
 下記の修正を反映。
--- squid.conf.orig     2012-05-10 17:28:12.000000000 +0900
+++ squid.conf  2012-05-13 22:19:20.435728182 +0900
@@ -52,14 +52,23 @@
 # Example rule allowing access from your local networks.
 # Adapt localnet in the ACL section to list your (internal) IP networks
 # from where browsing should be allowed
-http_access allow localnet
+#http_access allow localnet
 http_access allow localhost

+auth_param digest program /usr/lib64/squid/digest_pw_auth /etc/squid/passwd
+auth_param digest children 20 startup=0 idle=1
+auth_param digest realm Squid proxy-caching web server
+auth_param digest nonce_garbage_interval 5 minutes
+auth_param digest nonce_max_duration 30 minutes
+auth_param digest nonce_max_count 50
+acl password proxy_auth REQUIRED
+http_access allow password
+
 # And finally deny all other access to this proxy
 http_access deny all

 # Squid normally listens to port 3128
-http_port 3128
+http_port xxxxxx

 # We recommend you to use at least the following line.
 hierarchy_stoplist cgi-bin ?
@@ -75,3 +84,12 @@
 refresh_pattern ^gopher:       1440    0%      1440
 refresh_pattern -i (/cgi-bin/|\?) 0    0%      0
 refresh_pattern .              0       20%     4320
+
+request_header_access  X-Forwarded-For deny all
+request_header_access  Via deny all
+request_header_access  Cache-Control deny all
+visible_hostname example.com
+httpd_suppress_version_string on
+
+logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
+access_log /var/log/squid/access.log combined

ファイアーウォールで通すようにして起動。

$ sudo vi /etc/sysconfig/iptables
 TCPの許可の並びに下記を追加。
-A INPUT -p tcp -m state --state NEW -m tcp --dport xxxxx -j ACCEPT
$ sudo sh -c "iptables-restore  </etc/sysconfig/iptables"
$ sudo chkconfig squid on
$ sudo service squid start

http、PHP 関係のインストール

$ sudo yum install httpd php php-mbstring webalizer
Apacheの設定。
$ sudo cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.orig
$ sudo vi /etc/httpd/conf/httpd.conf
 下記の修正を反映。
--- httpd.conf.orig	2012-02-07 23:47:02.000000000 +0900
+++ httpd.conf	2012-05-13 20:51:45.397712646 +0900
@@ -41,7 +41,7 @@
 # Don't give away too much information about all the subcomponents
 # we are running.  Comment out this line if you don't mind remote sites
 # finding out what major optional modules you are running
-ServerTokens OS
+ServerTokens ProductOnly
 
 #
 # ServerRoot: The top of the directory tree under which the server's
@@ -73,7 +73,7 @@
 # KeepAlive: Whether or not to allow persistent connections (more than
 # one request per connection). Set to "Off" to deactivate.
 #
-KeepAlive Off
+KeepAlive On
 
 #
 # MaxKeepAliveRequests: The maximum number of requests to allow
@@ -100,11 +100,11 @@
 # MaxClients: maximum number of server processes allowed to start
 # MaxRequestsPerChild: maximum number of requests a server process serves
 <IfModule prefork.c>
-StartServers       8
+StartServers       5
 MinSpareServers    5
-MaxSpareServers   20
-ServerLimit      256
-MaxClients       256
+MaxSpareServers   10
+ServerLimit       64
+MaxClients        64
 MaxRequestsPerChild  4000
 </IfModule>
 
@@ -328,14 +328,14 @@
 # http://httpd.apache.org/docs/2.2/mod/core.html#options
 # for more information.
 #
-    Options Indexes FollowSymLinks
+    Options ExecCGI FollowSymLinks Includes
 
 #
 # AllowOverride controls what directives may be placed in .htaccess files.
 # It can be "All", "None", or any combination of the keywords:
 #   Options FileInfo AuthConfig Limit
 #
-    AllowOverride None
+    AllowOverride All
 
 #
 # Controls who can get stuff from this server.
@@ -399,7 +399,7 @@
 # negotiated documents.  The MultiViews Option can be used for the 
 # same purpose, but it is much slower.
 #
-DirectoryIndex index.html index.html.var
+DirectoryIndex index.html index.html.var index.cgi
 
 #
 # AccessFileName: The name of the file to look for in each directory
@@ -524,6 +524,8 @@
 # (Combined Logfile Format), use the following directive:
 #
 CustomLog logs/access_log combined
+RewriteLog logs/rewrite_log
+RewriteLogLevel 0
 
 #
 # Optionally add a line containing the server version and virtual host
@@ -533,7 +535,7 @@
 # Set to "EMail" to also include a mailto: link to the ServerAdmin.
 # Set to one of:  On | Off | EMail
 #
-ServerSignature On
+ServerSignature Off
 
 #
 # Aliases: Add here as many aliases as you need (with no limit). The format is 
@@ -793,7 +795,7 @@
 # To use CGI scripts outside of ScriptAliased directories:
 # (You will also need to add "ExecCGI" to the "Options" directive.)
 #
-#AddHandler cgi-script .cgi
+AddHandler cgi-script .cgi
 
 #
 # For files that include their own HTTP headers:
@@ -918,24 +920,24 @@
 # with the URL of http://servername/server-status
 # Change the ".example.com" to match your domain to enable.
 #
-#<Location /server-status>
-#    SetHandler server-status
-#    Order deny,allow
-#    Deny from all
-#    Allow from .example.com
-#</Location>
+<Location /server-status>
+    SetHandler server-status
+    Order deny,allow
+    Deny from all
+    Allow from mypc
+</Location>
 
 #
 # Allow remote server configuration reports, with the URL of
 #  http://servername/server-info (requires that mod_info.c be loaded).
 # Change the ".example.com" to match your domain to enable.
 #
-#<Location /server-info>
-#    SetHandler server-info
-#    Order deny,allow
-#    Deny from all
-#    Allow from .example.com
-#</Location>
+<Location /server-info>
+    SetHandler server-info
+    Order deny,allow
+    Deny from all
+    Allow from mypc
+</Location>
 
 #
 # Proxy Server directives. Uncomment the following lines to

余計な情報の抑止。

プロセス数の削減。

CGIその他の設定。

リライトログの定義。ただしこのままではログレベルゼロなので何も出力しない。

サーバー情報を自分のPCからは参照可能に( mypc は /etc/hosts で定義)。


webalizer の設定。

これはほとんど好みの世界。

$ sudo cp -p /etc/httpd/conf.d/webalizer.conf /etc/httpd/conf.d/webalizer.conf.orig
$ sudo vi /etc/httpd/conf.d/webalizer.conf
 下記を追加。
    Allow from mypc
$ sudo cp -p /etc/webalizer.conf /etc/webalizer.conf.orig
$ sudo vi /etc/webalizer.conf
 下記の修正を反映。
--- webalizer.conf.orig	2004-09-09 23:20:56.000000000 +0900
+++ webalizer.conf	2012-05-14 00:04:34.375724348 +0900
@@ -109,6 +109,8 @@
 PageType	cgi
 PageType        php
 PageType        shtml
+PageType        rhtml
+PageType        txt
 #PageType	phtml
 #PageType	php3
 #PageType	pl
@@ -299,16 +301,16 @@
 # search strings and usernames default to 20.  Tables may be disabled
 # by using zero (0) for the value.
 
-#TopSites        30
+TopSites        50
 #TopKSites       10
-#TopURLs         30
+TopURLs         50
 #TopKURLs        10
-#TopReferrers    30
+TopReferrers    50
 #TopAgents       15
 #TopCountries    30
 #TopEntry        10
 #TopExit         10
-#TopSearch       20
+TopSearch       100
 #TopUsers        20
 
 # The All* keywords allow the display of all URL's, Sites, Referrers
@@ -326,11 +328,11 @@
 # pages are generated for each month, which can consume quite a lot
 # of disk space depending on the traffic to your site.
 
-#AllSites	no
-#AllURLs	no
-#AllReferrers	no
+AllSites	yes
+AllURLs	yes
+AllReferrers	yes
 #AllAgents	no
-#AllSearchStr	no
+AllSearchStr	yes
 #AllUsers       no
 
 # The Webalizer normally strips the string 'index.' off the end of
@@ -391,6 +393,8 @@
 HideURL		*.png
 HideURL		*.PNG
 HideURL		*.ra
+HideURL		*.css
+HideURL		*.js
 
 # Hiding agents is kind of futile
 #HideAgent	RealPlayer
@@ -405,6 +409,20 @@
 
 #GroupSite	*.aol.com
 #GroupSite	*.compuserve.com
+GroupSite   *.crawl.yahoo.net
+HideSite    *.crawl.yahoo.net
+GroupSite   *.googlebot.com
+HideSite    *.googlebot.com
+GroupSite   rate-limited-proxy-*.google.com
+HideSite    rate-limited-proxy-*.google.com
+GroupSite   crawl-*.naver.jp
+HideSite    crawl-*.naver.jp
+GroupSite   msnbot-*.search.msn.com
+HideSite    msnbot-*.search.msn.com
+GroupSite  aiduspider-*.crawl.baidu.com
+HideSite   aiduspider-*.crawl.baidu.com
+GroupSite   *.crawl.*.yahoo.co.jp
+HideSite    *.crawl.*.yahoo.co.jp
 
 #GroupReferrer	yahoo.com/	Yahoo!
 #GroupReferrer	excite.com/     Excite
@@ -472,6 +490,9 @@
 
 #IgnoreSite	bad.site.net
 #IgnoreURL	/test*
+IgnoreURL	/usage/*
+IgnoreURL	/server-info/*
+IgnoreURL	/server-status/*
 #IgnoreReferrer	file:/*
 #IgnoreAgent	RealPlayer
 #IgnoreUser     root
@@ -514,9 +535,9 @@
 # engine, and the second is the URL variable used by that search engine
 # to define it's search terms.
 
-SearchEngine	yahoo.com	p=
+SearchEngine	yahoo	p=
 SearchEngine	altavista.com	q=
-SearchEngine	google.com	q=
+SearchEngine	google	q=
 SearchEngine	eureka.com	q=
 SearchEngine	lycos.com	query=
 SearchEngine	hotbot.com	MT=

php.ini の設定は、PuwkiWiki の設定時にすることにして、http を起動する。

$ sudo chkconfig httpd on
$ sudo service httpd start

2012-05-12(土)

[]「さくらのVPS」CentOS 初期設定2 〜 シェル・Vim関連設定 「さくらのVPS」CentOS 初期設定2 〜 シェル・Vim関連設定 - それはそれ。これはこれ。 を含むブックマーク 「さくらのVPS」CentOS 初期設定2 〜 シェル・Vim関連設定 - それはそれ。これはこれ。 のブックマークコメント

いろいろ設定する。


screenインストールと設定

まずは screen 。自宅のグローバルIPアドレスが数日ごとに変わる。と言うことはちょくちょく接続が切れているわけで、作業中に切れるとたまらないので、これは必須。

$ sudo yum install screen

好みで制御文字を変更して、ヴィジュアルベルを抑止*1

$ vi ~/.screenrc
 以下の内容で新規作成。
escape ^Z^Z
vbell_msg ""

ログイン時に自動的に screen が起動されるように。

$ vi .bash_profile
 末尾に追加。
exec screen -R

実は screen をログインシェルにしてみたのだが、他ホストから ssh でのコマンド実行や scp が出来なくなってしまったので、やめた。

ログインシェルにした場合は、SHELL=/bin/sh LANG=C で起動されるので、.screenrc に追加で下記が必要。ログインシェルが bash だと、LANG=ja_JP.UTF-8 になり、エンコードについてはよしなにやってくれるので記述不要。

shell -bash
defutf8 on
defencoding utf-8
encoding utf-8 utf-8

.bash_profile に exec screen -R を書いて、.screenrc に shell -bash を書くとループするので駄目。書くなら shell bash とかにしておく。


日本語関係の設定

$ sudo cp -p /etc/sysconfig/i18n /etc/sysconfig/i18n.orig
$ sudo vi /etc/sysconfig/i18n
 LANGの行を修正
LANG="ja_JP.UTF-8"

bash 関係の設定いろいろ

Fedora の EPEL ライブラリから bash-completion*2インストール。環境変数、alias 等の設定。root でも有効にしたいので、/etc/profile.d に置き、他の設定が動いた後で動くようにzzで始まる名前にする。

$ sudo yum --enablerepo=epel install bash-completion
$ sudo vi /etc/profile.d/zzlocal.sh
 以下の内容で新規作成。
alias m=less
alias ls="ls -xvF"
alias vi=vim
alias eman="LANG=C man"

unset  LS_COLORS
export LC_TIME=C
export LESS="-MXe~"
export PAGER=/usr/bin/less
case ":${LD_LIBRARY_PATH}:" in
*:/usr/local/lib:*) ;;
*) export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}/usr/local/lib ;;
esac

export HISTSIZE=9999
export HISTTIMEFORMAT="%m-%d %T "
export HISTCONTROL=ignoreboth:erasedups
shopt -s histappend

$ sudo cp -p /etc/inputrc /etc/inputrc.orig 
$ sudo vi /etc/inputrc
 末尾に追加。
"\C-d":delete-char-or-list
"\C-n":history-search-forward
"\C-p":history-search-backward
"\C-l":redraw-current-line

eman は英文マニュアル

LC_TIME=C は日時の表示を英語に。

LD_LIBRARY_PATH に /usr/local/lib を追加。

ヒストリ設定については man bash 参照。

Ctrl-P、Ctrl-N で、ヒストリーを上下する際に、文字列を入れてから押すとその文字列で始まるヒストリーだけが対象になる。

Ctrl-D、Ctrl-L は好みか。


vimの設定

$ sudo cp -p /etc/vimrc /etc/vimrc.orig 
$ sudo vi /etc/vimrc
 末尾に追加。
set fileencodings=ucs-bom,utf-8,eucjp
set ambiwidth=double
set incsearch smartcase nowrapscan viminfo+=h
set whichwrap= backspace=indent
set tabstop=4 shiftwidth=4
autocmd FileType * setlocal formatoptions-=ro

fileencodings は、ファイル読み込み時の文字コード自動判断の優先度。

ambwidth=double は、Unicodeで半角全角がフォントによって違う文字*3を全角と判断してカーソル移動をする。

検索の設定では、インクリメンタルサーチで、小文字入力時にはケース無視で、大文字入力時はケース無視しない。ファイル先頭と末尾をまたいで検索しない。起動時に前回の検索文字をハイライトしない。

whichwrap= は、左右のカーソル移動で行を越えない。

backspace= は、BSキーがインサート開始地点や行を越えない。

tabstop= は、タブ幅は4で空白には変換しない。shiftwidth= も、タブ幅4。

formatoption-=ro は、入力モードで、コメントを自動継続しない。


参考:

id:otn:20110501

MK’s Memorandum: 単純な .screenrc の紹介

vimの改行時に自動でコメントが挿入されるのをやめたい - 仙台 Ruby Vim JavaScript フリーランスプログラマ

*1:vbell offでもいいが、確か何か理由があってこうした

*2コマンドに応じたオペランド補完をしてくれる

*3id:otn:20090225

2012-05-06(日)

[]「さくらのVPS」CentOS 初期設定1 〜 セキュリティ関連設定 「さくらのVPS」CentOS 初期設定1 〜 セキュリティ関連設定 - それはそれ。これはこれ。 を含むブックマーク 「さくらのVPS」CentOS 初期設定1 〜 セキュリティ関連設定 - それはそれ。これはこれ。 のブックマークコメント

さくらのVPS 512Mコース(2Core/512MB/20GB/年10,780円)を使っていたのだが、3月のリニューアルで1Gコース(2Core/1GB/100GB)が同価格となり、乗り換えキャンペーンで約1ヶ月重ねて借りるのが可能になった。なお、乗り換えない場合でもメモリは1GBに増量される(ディスクはそのまま20GB)。システムイメージをそのままで移行とかは出来ないので、けっこう作り込んで記録を残していない人は乗り換えないのも手である。私の場合はまだ余り作り込んでいないのと、ディスク容量が魅力で乗り換えることにした。


契約手続きを行った後、OSをどうするか考えた。CentOSかScientificLinuxか。現在はCentOSで、RedHat系で行くことは決めている。ネットでの情報をあさると、結局どちらが今後続きそうかと信じるかに掛かっているわけだ。CentOSはver6対応が遅れたという実績があるが、一方Scientificのほうも最近中心人物がプロジェクトを離れたらしい。ということで、悩みはつきないが結局デフォルトのCentOSのままで行くことにした。


前回以上に記録を残すことにする。本日の記事はWindowsPCからTeratermでの作業が出来るようになるところまで書く。

以下はコントロールパネルからコンソールを使用しての作業。PC画面との間でコピペが出来ないので全部手入力が必要。なので、ssh でのログインは初回だけはパスワードでのログインを行ってそのときに公開鍵の設定をコピペで行う。


ユーザ登録関係作業

ユーザ登録とは関係ないが、ファイアーウォールの設定がデフォルトではオフのため、まずはネットワークを止める。

# service network stop

rootパスワード変更。

# passwd

作業用ユーザ作成

# useradd foo
# passwd foo
# usermod -G wheel foo

wheel グループのメンバーのみ root になれるように設定。

# cp -p /etc/pam.d/su /etc/pam.d/su.orig
# vi /etc/pam.d/su
 以下の行のコメントを外して保存。
auth            required        pam_wheel.so use_uid

wheel グループのユーザーで sudo で全コマンドをパスワード無しで実行できるように設定。

パスワード無しにするかどうかは検討要。ただ長いパスワードを毎回入れるのが面倒と、ユーザのパスワードを短くするようになると本末転倒。

# cp -p /etc/sudoers /etc/sudoers.orig
# visudo
 以下の行をコメントアウト((ssh sudo出来るようにするため))して、
#Defaults    requiretty
 以下の行のコメントを外して保存。
%wheel  ALL=(ALL)       NOPASSWD: ALL

sudoの設定を念のため確認。

# su - foo
$ sudo id
$ exit

root での ssh ログインを禁止するように、および ssh のポート番号を変更。

# cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
# vi /etc/ssh/sshd_config
 以下のように修正して保存。
Port 22222
PermitRootLogin no

ファイアーウォールの設定

出力は、ブロードキャストのみ制限でそれ以外は許可。入力は、ssh,http,smtp と icmp のみ許可。

state ESTABLISHED,RELATED は、本来 tcp 専用かと思ったけど、やってみると udp (DNS応答など) もこれで許可されるようだ。

state ESTABLISHED,RELATED と icmp の関係がよくわからない。man を見ると RELATED で icmpエラー関係も許可されるようだが、やってみると echo-request(ping要求) もこれで許可される。以前の iptables v1.3.5 ではそうではなかった(echo-request は別途許可が必要だった)。

DROP するものについてはある程度ログに書く。ただし、同一サブネット内に頻繁にブロードキャストを投げるやつが必ずいる(Windows関係とかDropboxとか)のでそれらをログに書くとうざいのでブロードキャストは単に DROP する。

# vi /etc/sysconfig/iptables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:INLOG - [0:0]
:OUTLOG - [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 192.168.0.255 -j DROP ← ifconfig でサブネットのブロードキャストアドレスを調べて書く
-A INPUT -d 255.255.255.255 -j DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW ! --syn -j INLOG
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22222 -j ACCEPT ← sshのポート番号
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -j INLOG
-A OUTPUT -d 192.168.0.255 -j OUTLOG ← ifconfig でサブネットのブロードキャストアドレスを調べて書く
-A OUTPUT -d 255.255.255.255 -j OUTLOG
-A OUTLOG -m limit --limit 6/hour -j LOG --log-level debug --log-prefix "ODROP:"
-A OUTLOG -j DROP
-A INLOG -m hashlimit --hashlimit-mode srcip --hashlimit-name drop --hashlimit-upto 6/hour --hashlimit-htable-expire 3600000 -j LOG --log-level debug --log-prefix "DROP:"
-A INLOG -j DROP
COMMIT

iptablesのログを記録。レベルは debug を使うので、本来の debug 情報も混ざるが。

# cp -p /etc/rsyslog.conf /etc/rsyslog.conf.orig
# vi /etc/rsyslog.conf
 下記行を追加する。= をつけないと debug 以上のすべてが記録される。- で書き込みごとにフラッシュしないようにする。
kern.=debug                        -/var/log/iptables
# vi /etc/logrotate.d/syslog
 最初の方に下記行を追加。
/var/log/iptables

ip6はとりあえずDROP

# vi /etc/sysconfig/ip6tables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
COMMIT

システム再起動。

# shutdown -r now

sshの鍵の設定

ここまでコンソール作業。以降は、Teraterm で作業。

まず、ssh で foo ユーザでパスワード方式でログインする。ポート番号がデフォルトでないので指定要。

ssh 鍵を作成していなければ、Teraterm 設定メニューの「SSH鍵設定」画面で RSA 鍵を作成する。生成ボタンを押した後、適当なパスフレーズを入れて、公開鍵と秘密鍵をそれぞれファイルに保存する。サーバー側で鍵ペアを作成して、秘密鍵をダウンロードする方法もあるが、秘密鍵を持ち運ぶのは間違ってる気がする。

公開鍵を格納。PCで公開鍵ファイルを開いてコピー。

$ mkdir .ssh
$ cat > .ssh/authorized_keys
 ここに公開鍵をペースト。
ctrl-D
$ chmod -R go-rwx .ssh

Teratermで鍵方式で先ほど作った秘密鍵ファイルとパスフレーズを入力してログインできることを確認。

パスワード方式でのログインを禁止。

# vi /etc/ssh/sshd_config
 以下のように修正して保存。
PasswordAuthentication no
# service sshd reload

システムをアップデートして再起動。

# yum update
# shutdown -r now

参考:

id:otn:20110502

id:otn:20110501

さくらのVPS サーバ構築メモ | コムギドットネット

連載記事 「習うより慣れろ! iptablesテンプレート集 改訂版」

2011-10-27(木)

[]「さくらのVPS」httpのproxyを作る 「さくらのVPS」httpのproxyを作る - それはそれ。これはこれ。 を含むブックマーク 「さくらのVPS」httpのproxyを作る - それはそれ。これはこれ。 のブックマークコメント

前に書いたような気がするけど、akamaiサーバーへのアクセスが遅いので、さくらのサーバーをproxyでかませてみると改善するかもしれないと、proxyサーバーを動かしてみる。

squid*1インストールして、ポート番号を変えて、ダイジェスト認証を掛ける。目的からしてhttpのみ対応。

設定は下記。

--- squid.conf.default  2010-03-31 16:46:03.000000000 +0900
+++ squid.conf  2011-10-27 22:54:18.000000000 +0900
@@ -141,6 +141,7 @@
 #      Then, set this line to something like
 #
 #      auth_param digest program /usr/libexec/digest_auth_pw /usr/etc/digpass
+auth_param digest program /usr/lib64/squid/digest_pw_auth /etc/squid/passwd
 #
 #      "children" numberofchildren
 #      The number of authenticator processes to spawn. If you start too few
@@ -566,7 +567,7 @@
 #Examples:
 #acl macaddress arp 09:00:2b:23:45:67
 #acl myexample dst_as 1241
-#acl password proxy_auth REQUIRED
+acl password proxy_auth REQUIRED
 #acl fileupload req_mime_type -i ^multipart/form-data$
 #acl javascript rep_mime_type -i ^application/x-javascript$
 #
@@ -634,6 +635,7 @@

 # And finally deny all other access to this proxy
 http_access allow localhost
+http_access allow password
 http_access deny all

 #  TAG: http_access2
@@ -918,7 +920,7 @@
 #      visible on the internal address.
 #
 # Squid normally listens to port 3128
-http_port 3128
+http_port ナイショ

 #  TAG: https_port
 #      Usage:  [ip:]port cert=certificate.pem [key=key.pem] [options...]
@@ -4276,6 +4278,7 @@
 #
 #Default:
 # forwarded_for on
+forwarded_for off

 #  TAG: cachemgr_passwd
 #      Specify passwords for cachemgr operations.

/etc/squid/passwd には、ユーザ名:パスワード の形で平文で書けば良いみたい。

*1:Version 2.6.STABLE21

2011-05-03(火)

[]「さくらのVPS」bash-completion インストール 「さくらのVPS」bash-completion インストール - それはそれ。これはこれ。 を含むブックマーク 「さくらのVPS」bash-completion インストール - それはそれ。これはこれ。 のブックマークコメント

id:otn:20110501 で書いた通り、CentOSにはbash-completionパッケージ*1が含まれていない。Fedoraでこれに慣れていると無しではいられないので、インストールする。


Fedoraプロジェクトが、RHELやCentOS向けに提供しているEPEL*2ライブラリに無いか探してみる。yum のリポジトリに追加してしまうと、今後、意図せず標準でないパッケージをインストールしてしまう可能性があるので、それはしない。

EPEL/ja - Fedora Project Wiki の、「利用可能なパッケージ: 」欄の EPEL5 の x86_64 のページを開いて探すと、System Tools の中にあった。これをインストール

# rpm -ivh http://download.fedora.redhat.com/pub/epel/5/x86_64/bash-completion-1.2-4.el5.2.noarch.rpm

*1:標準のbashの補完機能だとファイル名を補完するが、bash-completionを入れるとコマンドに合わせて適切なオペランドを補完してくれる

*2:Extra Packages for Enterprise Linux

2011-05-02(月)

[]「さくらのVPS」ファイアーウォール設定 「さくらのVPS」ファイアーウォール設定 - それはそれ。これはこれ。 を含むブックマーク 「さくらのVPS」ファイアーウォール設定 - それはそれ。これはこれ。 のブックマークコメント

iptablesについて調べて*1設定してみた。初期設定ではiptablesプロセスは起動するが全部通しになっている。

方針は、

  • 中継は使わないのでDROP
  • 送信はとりあえず全部通しだが、ブロードキャストだけDROPしておく
  • 受信は必要と思われる物だけ通して、他はDROP
  • DROPしたものはログに書いておく(件数制限も)

設定する方法として、

  1. iptablesコマンドで設定する
  2. ファイルに書いてiptables-restoreで読み込む

の二通りの方法があるようだが、コマンドは面倒なので後者のやり方で。


*filter
# INPUTチェーンのデフォルトは条件に合わない物は後でDROPするのでどっちでも良いがDROPと書いておく
:INPUT DROP [0:0]
# 中継はDROP
:FORWARD DROP [0:0]
# OUTPUTチェーンのデフォルトはACCEPT
:OUTPUT ACCEPT [0:0]
# ログに書いてDROPするというユーザー定義チェーンを作る
:DROPLOG - [0:0]
##### 入力パケットについて
# loopbackからはACCEPT
-A INPUT -i lo -j ACCEPT
# ICMPはとりあえずACCEPTにしておく。やっぱり止めるかも
-A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
# 通信途中の物はACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# 開始パケットはsshとhttpとsmtpはACCEPT。sshのポート番号は22でなく変更した物を書く
-A INPUT -p tcp -m state --state NEW -m tcp --dport sshポートの番号 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
# それ以外の物はログに書いてDROP
-A INPUT -j DROPLOG
##### 出力パケットについて
# ブロードキャストはログに書いてDROP
-A OUTPUT -d 255.255.255.255 -j DROPLOG
-A OUTPUT -d 自分のサブネットのブロードキャストアドレス -j DROPLOG
##### ユーザー定義チェーンの内容
# ログに書くのは1時間に3件まで。メッセージ先頭に目印を付ける
-A DROPLOG -m limit --limit 3/hour -j LOG --log-prefix "DROP:"
# ログを書いた後DROP
-A DROPLOG -j DROP
# 反映する
COMMIT

上記をファイル /root/iptables に書いて、

# iptables-restore < /root/iptables

この状態で一通りテストする。間違えてsshセッションが切れた場合は、管理パネルのコンソールからリブートすれば元に戻る。

問題がなければ、起動時に読み込む設定ファイルに書き込む。これで次回起動からも設定が生きる。

# iptables-save > /etc/sysconfig/iptables

Dropbox攻撃

ログを見てみると、そばのサーバーから17500ポートへUDPパケットが30秒ごとに2つずつ来ている。

ググルと、Dropbox のオプションによりそうなるようだ。

さくらへ、問い合わせフォームから要望を出しておく。

xx.xx.xx.xx から 30秒ごとに2回、ポート 17500 にUDPでブロードキャストが来ます。

上記サーバーのユーザに下記のメッセージを送ってください。

========================================

xx.xx.xx.xx の管理者殿

あなたのサーバーから周りの他のサーバーに大量の無駄なネットワーク通信が行われています。

通信内容から、Dropboxの設定で「Enable LAN sync」をオンにしていると思われますが、そのオプションは、同一LAN内の他のコンピューター上のDropboxと同期するための物です。

「あなたが xx.xx.xx.xx と同じLANに別のサーバーを借りていて両方のサーバーでDropboxを動かしていて、その間で同期をしたい」

と言うことでない限り、無意味なオプションですので、すぐにオフにして、他のサーバーへの迷惑を停止してください。

何が迷惑かというと、せっかくDROPしたパケット情報をログに書くことにしたのに、このパケットだらけになって無意味。

2011-05-01(日)

[]「さくらのVPS」いろいろ初期設定 「さくらのVPS」いろいろ初期設定 - それはそれ。これはこれ。 を含むブックマーク 「さくらのVPS」いろいろ初期設定 - それはそれ。これはこれ。 のブックマークコメント

管理者パスワード変更

コントロールパネルのパスワードと、初期設定OSのrootパスワードは同じだが、当然のことながら連動していないので、それぞれ変更。普段手で打ち込むことはないので、長い文字列にしておく。


一般ユーザを作る

# useradd ユーザ名
# passwd ユーザ名
# usermod -G wheel ユーザ名
# visudo で、"%wheel  ALL=(ALL)       NOPASSWD: ALL" の行を有効にする(パスワード無しでsudoできるよう)

このあたりまでは管理パネルのコンソールから


ssh設定

公開鍵認証にすることにして、かつポート番号を変える。

1. とりあえずTeratermを使って一般ユーザでパスワードでログイン

2. Teratermの設定>ssh鍵生成で、RSAにチェックして生成ボタンを

3. パスフレーズを適当に入れて、公開鍵(id_rsa.pub)と秘密鍵(id_rsa)をTeratermフォルダに保存

4. 専用接続用にTeratermのショートカットを作る。リンク先は、

"C:\Program Files\teraterm\ttermpro.exe"
  ssh://ユーザ名:パスフレーズ@IPアドレス:ポート番号 /auth=publickey /keyfile=id_rsa

5. Linux側で

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ vi ~/.ssh/authorized_keys
 公開鍵ファイルの中身をコピペ。
$ chmod 600 ~/.ssh/authorized_keys

6. 一旦、ポート番号22で公開鍵でログイン出来ることを確認

7. /etc/ssh/ssh_configを修正してパスワードログインを不可に等

・・・
#Port 22  =====>の下に
Port ポート番号
・・・
#PermitRootLogin yes  =====>の下に
PermitRootLogin no
・・・
PasswordAuthentication yes =====>の行を変更
PasswordAuthentication no
・・・

8. コンソールからsshdを再起動(service sshd restart)


いろいろインストール

1. まずは yum update =====> Kernel含めていろいろアップデートされる

2. yum install screen

3. yum install bash-completion =====> 無い! yum list をみたけど無さそう。別途 rpm からインストール

4. yum install vim-common vim-enhanced

5. yum install "php53*" <===== PHPは、5.1.6 と 5.3.3 がある

6. yum install readline-devel mysql-devel openssl-devel sqlite-devel <===== RubyやGemsのインストールに備えて

7. Ruby1.9.2をソースからインストール <===== yum でインストール出来るのは 1.8.5 !!


いろいろ設定

・/etc/sysconfig/i18nを修正
LANG="ja_JP.UTF-8"
・/etc/profile.d/local.shを作成
alias m=less
alias ls="ls -xvF"
alias vi=vim
alias eman="LANG=C man"

bind "\C-p:history-search-backward"
bind "\C-n:history-search-forward"

HISTSIZE=9999
HISTIGNORE="&: *" #直前の行と同じor行頭が空白の場合はヒストリに残さない
export HISTTIMEFORMAT="%m-%d %T "
shopt -s histappend #.historyファイルに追加書き

export LC_TIME=C #日付書式は英文で

addpath(){
    local w
    eval w=\$$1
    case ":$w:" in
    *:$2:*) ;;
    *) export $1="${w}${w:+:}$2" ;;
    esac
}
addpath LD_LIBRARY_PATH /usr/local/lib
・/etc/inputrc の末尾に追加
"\C-n":history-search-forward
"\C-p":history-search-backward
・/etc/screenrc の末尾に追加
escape ^z^z
vbell_msg ""
・/root/.gemrc を作成(Rubygems用)
gem: --no-ri --no-rdoc

2010-02-24(水)

[] .inputrc のメモ  .inputrc のメモ - それはそれ。これはこれ。 を含むブックマーク  .inputrc のメモ - それはそれ。これはこれ。 のブックマークコメント

"\C-d": delete-char-or-list
"\C-p": history-search-backward
"\C-n": history-search-forward
"\C-l": redraw-current-line

delete-char-or-list というのは、行末以外だと一文字削除で、行末の時は補完候補のリスト表示。タブキーの complete と違うのは候補表示だけで補完はしないこと。これは確か、tcshの C-d の機能。

history-search- は、ヒストリ補完。

2009-08-18(火)

[][]cgi界にはびこる民間療法 Premature end of script headers cgi界にはびこる民間療法 Premature end of script headers - それはそれ。これはこれ。 を含むブックマーク cgi界にはびこる民間療法 Premature end of script headers - それはそれ。これはこれ。 のブックマークコメント

「cgi界」という言葉があるかどうかは知らないが、「Premature end of script headers」というエラーに対して、都市伝説というか民間療法というか、そういうのがあるようだ。例えば、

#! /usr/bin/perl
。。。。

でこのエラーとなるときに、

#! /usr/bin/perl --
。。。。

とすれば「なぜかわからないが直る」(笑)と書いてある。


そもそも、このメッセージは、「cgiプログラムがContent-Type ヘッダを出力する前に終了した」ということを示すだけであって、ほとんどの場合、その前に本当のエラーメッセージが出ているはずだ。例えば、

(2)No such file or directory: exec of '/var/www/html/test.cgi' failed
Premature end of script headers: test.cgi

で、execが失敗していることがわかる。まあ、これから、#! 行がおかしいことに気づくことができない人も居るだろうけど。


ただ、レンタルサーバーなどで suExec でcgiが動く場合、おそらくエラーメッセージはこのようになる。

例えば、さくらインターネットの共用レンタルサーバーの場合など。

suexec failure: could not open log file
fopen: Permission denied
Premature end of script headers: test.cgi

これは、apacheがユーザ権限で suexec.log に「(2)No such file or directory: exec of '....' failed」のメッセージを書こうとして失敗していることを示すが、これは直感的ににわかりにくい。かといって、/var/log/httpd/suexec.log に全ユーザへの書き込み権限を認めるのも今ひとつだと思うので、できるならapacheに何とかして欲しいところ。


だらだら書いてきたので、Premature end of script headers への対処をまとめておく。

メッセージの意味

cgiプログラムがContent-Type ヘッダを出力する前に終了した

起動に失敗した
現象
次のいずれかのエラーが同時にerror_logに出ている。最後のメッセージの場合は suexec.log に詳細メッセージが出ている。
(2)No such file or directory: exec of '.......' failed
または
suexec failure: could not open log file
fopen: Permission denied
または
suexec policy violation: see suexec log for more details
原因
 
  • #!行のパス名が間違っている
  • 改行コードがDOS(CRLF)になっているので、#!行のCRがパス名にくっついて "/usr/bin/perl\r" などとなってしまっている

(この場合、#!/usr/bin/perl -- とすると\rが離れるので動く*1 → 民間療法)

  • ファイルのパーミッションがおかしい
    • 実行権限がない
    • suExec環境で、ファイルまたはディレクトリが他人から書き込み権限がある
対応
パス名を正しくする。改行コードをUnix(LF)にする。ファイル・ディレクトリのパーミッションをsuExec環境なら700にそうでなければ755とかに。
起動したがエラーで実行が止まった
現象
PerlなりRubyなりが何らかのエラーメッセージをerror_logに出しているはず。設定によっては何も出ないかもしれない?
原因
スクリプトのバグ
エラーではないが、何も出力せずに終了した*2
現象
他にはエラーメッセージ無し
原因
スクリプトのバグ

*1:PerlやRubyでは動くがどんなプログラムでも動くとは限らない

*2:Content-Typeヘッダを出さずに何か出力した場合は、「Premature end of script headers」でなく、「malformed header from script」というエラーになる

2009-06-21(日)

[]自宅サーバー(Postfix)から外へメールを送る その2 自宅サーバー(Postfix)から外へメールを送る その2 - それはそれ。これはこれ。 を含むブックマーク 自宅サーバー(Postfix)から外へメールを送る その2 - それはそれ。これはこれ。 のブックマークコメント

id:otn:20090604 の続き。

今度は、SMTP認証に。

プロバイダが nifty で、アカウントが foofoobar@nifty.com、パスワードが pasuwaado の場合。

(1) main.cf に設定追加

relayhost = [smtp.nifty.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/smtp_sasl_password
smtp_sasl_security_options = noanonymous
smtp_generic_maps = hash:/etc/postfix/sender_canonical   # これは前回のもの 2009-07-02 修正

smtp_sasl_security_options はデフォルトだとanonymousで認証掛けに行くんだろうか。書かないと認証エラーになる。ググって発見。

このあたりは相手サーバーによっても異なるかも。

(2) /etc/postfix/smtp_sasl_password ファイルの作成

[smtp.nifty.com]:587  foofoobar:pasuwaado

(3) マップの作成

$ postmap hash:/etc/postfix/smtp_sasl_password

(4) postfixの再起動/リロード


これで、submissionポートにSMTP認証して送るので、接続プロバイダ以外のメールサーバーにも送れるはず。


ちなみに、ドキュメントはここの日本語のものを参考にしている。http://www.postfix-jp.info/trans-2.2/

2009-06-04(木)

[]自宅サーバー(Postfix)から外へメールを送る 自宅サーバー(Postfix)から外へメールを送る - それはそれ。これはこれ。 を含むブックマーク 自宅サーバー(Postfix)から外へメールを送る - それはそれ。これはこれ。 のブックマークコメント

あまり必要性はないのだが、VMware上で時々起動しているLinuxOSから外にメールを送る設定の覚え書き。

何もしないと、Senderに送り返せないので駄目というエラーメールが返ってくる。

プロバイダが nifty で、アカウントが foofoobar@nifty.com、LinuxOSのホスト名が、myhost.local の場合。

(1) main.cf に設定

relayhost = [smtp.nifty.com]
sender_canonical_classes = envelope_sender
sender_canonical_maps = hash:/etc/postfix/sender_canonical

(2) /etc/postfix/sender_canonical ファイルの作成

@myhost.local  foofoobar@nifty.com

(3) マップの作成

$ postmap hash:/etc/postfix/sender_canonical

(4) postfixの再起動/リロード


これで、Envelope From が foofoobar@nifty.com に書き換えられて送られる。。。。んだけど、何故かヘッダの From: も書き換わっている。


2009-07-02 追記

ヘッダまで書き換わってしまう以上、この目的用に設けられた、smtp_generic_maps を使った方がいいので、そう変える*1。こっちだとローカル向けのメールは書き換わらない。

(1) main.cf に設定

relayhost = [smtp.nifty.com]
smtp_generic_maps = hash:/etc/postfix/sender_canonical

以下(2)(3)(4)同じ。

*1:smtp_generic_mapsだとヘッダが書き換わらないという意味じゃ無いよ

2009-05-22(金)

[]Linuxでソース表示時に4タブになっていて欲しいのだが Linuxでソース表示時に4タブになっていて欲しいのだが - それはそれ。これはこれ。 を含むブックマーク Linuxでソース表示時に4タブになっていて欲しいのだが - それはそれ。これはこれ。 のブックマークコメント

最近プログラムを書くときは4タブにしているのだが、cat や less でソースを表示させると8タブなのでインデントが乱れる。

expand -4 すればいいのだが面倒。ということで端末のタブを変更することを考える。


タブの展開は確か tty でやってたような記憶があったので、man stty してみたがそれらしいオプションはない。念のためBSDの man stty を見ると、oxtabs というオプションでタブのスペース展開を制御できることがわかった。しかし、Linuxにはそんなオプションはない上に、BSDでもいくつのスペースに展開するのかは指定できないみたい。


ということで、これは端末側で何とかするしかないのか。使っているのは Teratermだ。端末タイプは vt100。


man terminfoで、タブクリアとタブ設定のcapnameを調べる。全タブストップクリアが tbc で、該当位置へのタブストップセットが hts。

tput tbc|hexdump -c と tput hts|hexdump -c で、シーケンスを調べる。あとは、.bash_profile に書くだけ。

echo -e '\e[3g'
for((i=0; i<20; ++i)) do echo -e '    \eH\c'; done

タブ間隔を引数にした関数にしたいところだ。と、よく考えればtputのままでもいいのか。

tabset(){
    cols=$(tput cols)
    hts=$(tput hts)
    len=$(expr length "$hts")
    tput tbc
    for((i=0; i<$cols/$1; ++i)) do printf %$(($1+$len))s "$hts"; done
    printf '\r'
    unset cols hts len
}
tabset 4

2009-05-25追記:

くっ! less は自前でタブ展開してるのか。-x4 オプションでOK。

2009-05-03(日)

[]Pukiwikiの使用PHPをPHP5に(さくらのレンタルサーバー) Pukiwikiの使用PHPをPHP5に(さくらのレンタルサーバー) - それはそれ。これはこれ。 を含むブックマーク Pukiwikiの使用PHPをPHP5に(さくらのレンタルサーバー) - それはそれ。これはこれ。 のブックマークコメント

id:otn:20080130 に、さくらのレンタルサーバーで使用しているPukiwikiのPHP5への切り替えについて、

一般ユーザでのページ表示は問題ないが、私がパッチを当てた管理者ユーザ機能だとFrontPageしか表示できない。他のページへのリンクをクリックしてもFrontPageが表示されてしまう。

と書いたが、原因を調べて対応した。


URLを整形しているのだが、「http://otnx.jp/CMD/バグ」と書くとOKで、「http://otnx.jp/CMD/edit.php/バグ」だと「バグ」のページじゃなくてFrontPageが表示されると言うことだ。

問題切り分けのために、「http://otnx.jp/CMD/index.php/バグ」を試してみると、これもだめ。と言うことで、PATH_INFOが取れないと言うことのようだ。


id:otn:20060603に下記のように書いた。三年前だ。

cgiのため、直接にPATH_INFOは参照できず、php.iniに、

cgi.fix_pathinfo=1

指定した上で、ORIG_PATH_INFOを参照する。

デバッグコーディングを入れて、$_SERVER['ORIG_PATH_INFO'] を見ると空だ。その代わりに、$_SERVER['PATH_INFO'] に値が入っている。どうもこの点の仕様がPHP4からPHP5になったことで変わっているようだが、ぐぐってもそのあたりの情報がない。現実がそうなので、調査はほどほどにして、「ORIG_PATH_INFO」の部分を「PATH_INFO」に書き換えてOK。


もしかしてと思って、cgi.fix_pathinfo=0 にしてみたがエラーになるので、やっぱりこの設定は必要そう。

Tatsuya(レンタルサーバー好き)Tatsuya(レンタルサーバー好き) 2010/07/23 02:18 参考になります。
ありがとうございます。

2009-02-01(日)

[] Ruby1.9.1のmake  Ruby1.9.1のmake - それはそれ。これはこれ。 を含むブックマーク  Ruby1.9.1のmake - それはそれ。これはこれ。 のブックマークコメント

1.9.1が出たので、手元のFedora9にインストールしてみる。ruby19という名前を付けるのを1.9.0が出たときに調べたのだが忘れてしまい、また調べる。

次回?のためにメモしておく。

./configure --program-suffix=19
make
make test
make install

1.8.7からの仕様の差分は、

http://svn.ruby-lang.org/repos/ruby/tags/v1_9_1_0/NEWS

1.8.6からの1.8.7の仕様の差分は、

http://svn.ruby-lang.org/repos/ruby/tags/v1_8_7_101/NEWS


むー。例題付き日本語版が欲しい。。。

それにしても、Windows用 One-Click Installer は、未だ1.8.6で1.8.7は何時のことか。

2008-12-01(月)

[] tail +2 がエラー  tail +2 がエラー - それはそれ。これはこれ。 を含むブックマーク  tail +2 がエラー - それはそれ。これはこれ。 のブックマークコメント

Fedora9を使っているが、tail +2 がエラーになった。どうも、かなり前のあるバージョンからこのオプションが廃止になり、tail -n +2 等と書かないといけなくなったようだ。非互換の修正なので、過去のスクリプトが動かなくなると思われる。


何故廃止したかというのがよくわからない。more +2 や vi +2 file はOKなのに、何故tailだけ???

まあ、ソースパッケージを取ってきて変更履歴を見ればいいんだろうけど。

2007-01-02(火)

[]初インストールPlone2.5.1 初インストールは [[Plone]]2.5.1 - それはそれ。これはこれ。 を含むブックマーク 初インストールは [[Plone]]2.5.1 - それはそれ。これはこれ。 のブックマークコメント

Linux機にPloneをインストールしてみた。rootにはなれるのだが数人の共用機なのでまずはユーザーモードでのインストールを試みる。

以下のページを参考にした。

Plone
http://www.itmedia.co.jp/enterprise/articles/0412/21/news006.html
Zope
http://www.itmedia.co.jp/enterprise/articles/0412/17/news027.html

2年前の記事なのでそのままではいかないが、大きな流れは同じだ。


まずは、Plone の最新版を sourceforge からダウンロードしてドキュメントを読む。パッケージは、http://plone.org/products/plone を見ると

・Get Plone for Linux (32 MB) 
 "Universal" Linux/BSD/UNIX installer (builds Python and Zope from source)

・Get Plone for all platforms (8.3 MB) 
 Product package (requires Zope 2.9.4+ or Zope 2.8.7+ already installed)

の2つがあったが、Python は既に入っているので後者を選んだ。

wget http://jaist.dl.sourceforge.net/sourceforge/plone/Plone-2.5.1-final.tar.gz
tar xvfz Plone-2.5.1-final.tar.gz
cd Plone-2.5.1
less README.txt # → CMFPlone/README.txt を読めと書いてある
less CMFPlone/README.txt # → インストールは INSTALL.txt を読めと書いてある
less CMFPlone/INSTALL.txt

前提ソフトのポイントを抜粋すると、

- Zope 2.9.4+ (does not run natively on Zope 3)
   http://www.zope.org/Products/Zope/2.9.4
   **If you are running Zope 2.9.5+ you should consider removing the ``Five``
   Product included with Plone**

- Python Imaging Library 1.1.5 or newer
   Not included in the Plone tarball
   http://effbot.org/downloads/#Imaging

- Python ElementTree
   Not included in the Plone tarball
   http://effbot.org/downloads/#elementtree

これ以外は、「Included in the Plone tarball」となっている。


ということで、次は Zope のダウンロードインストールだ。http://www.zope.org/Products/ を見ると、

・Download Zope 2.10.1 (2006-11-21) the current Zope 2 stable release. 
・Download Zope 2.9.6  (2006-11-21) the current Zope 2 release from the previous stable branch. 
・Download Zope 3.3.0  (2006-09-21) the current Zope 3 stable release (more: Zope 3 Releases and Add-on Packages). 

の3つが表に出ている。Zope3 は駄目だということなので、Zope2 の最新版である 2.10.1 を入れたのだが、結果だけ書くと駄目。Zope 単体ではもちろん動くが、Plone を入れると白画面(headのみ)になり、ログにエラーメッセージも出ない。2.9.6 だとうまく行った。以下では最初から 2.9.6 を使ったというストーリーで行く。

wget http://www.zope.org/Products/Zope/2.9.6/Zope-2.9.6-final.tgz
tar xvfz Zope-2.9.6-final.tgz
cd Zope-2.9.6-final
less README.txt # → doc/INSTALL.txt を読めと書いてある
less doc/INSTALL.txt

前提ソフトだが、

* Python 2.4.2 or later installed somewhere in the system PATH
  (Python 2.5 is not supported)

なんと、現在入っている Python のバージョンは 2.3.5 だ。こんなことなら32MBのパッケージを選んでおけばよかった。ということで、Python2.4の最新版をダウンロードしてインストール

wget http://www.python.jp/pub/ftp.python.org/python/2.4.4/Python-2.4.4.tgz
tar xvfz Python-2.4.4.tgz
cd Python-2.4.4
./configure --prefix=~/python
make
make test # → なぜか繰り返しテストし続けるので c-C で中断
make install

このあと、PATH の先頭に ~/python/bin を追加して、python -V でバージョン確認。


ようやく Zope のインストールだ。

cd Zope-2.9.6-final
./configure --prefix=~/zope/app/2.10.1 --with-python=~/python/bin/python

しかし、エラーメッセージが出る。

The Python interpreter you are using does not appear to have the 'zlib' 
library module installed. 云々
'zlib.so' を 'lib-dynload' に置け。

ということで、locate zlib.so すると、Python用とRuby用が見つかったのでPython用をコピーしてやり直し。

locate zlib.so
cp -p /usr/lib/python2.3/lib-dynload/zlib.so ~/python/lib/python2.4/lib-dynload/
chmod +x ~/python/lib/python2.4/lib-dynload/zlib.so
make distclean
./configure --prefix=~/zope/app/2.10.1 --with-python=~/python/bin/python
make
make install

インスタンスを作成して、Zopeを起動する。ITMedia記事と違い、ユーザーモードで動かすため、zope.conf は変更しない。

~/zope/app/2.9.6/bin/mkzopeinstance.py
←ディレクトリは ~/zope/instance/PloneSite1 にした
←管理者ユーザ名とパスワード
~/zope/instance/PloneSite1/bin/zopectl start

ブラウザからhttp://host:8080/ で「Zope Quick Start」という画面が出て、http://host:8080/manage で管理画面にログオンできればOK。ITMediaの記事にある下記を実行しておく。

中央フレームに見えている「Properties」をクリックし、以下のようにNameの個所へ「management_page_charset」、Valueには「UTF-8」と記述し、「Add」ボタンをクリックする。


Zope が動いたので、残った前提ソフトをダウンロードしてインストールする。

wget http://effbot.org/downloads/Imaging-1.1.6.tar.gz
tar xvfz Imaging-1.1.6.tar.gz
cd Imaging-1.1.6
python setup.py install # 新しい python で動かす
wget http://effbot.org/downloads/elementtree-1.2.6-20050316.tar.gz
tar xvfz elementtree-1.2.6-20050316.tar.gz
cd elementtree-1.2.6-20050316
python setup.py install # 新しい python で動かす

次はいよいよ Plone のインストールだ。INSTALL.txt に Plone の Five は使うなと書いてある。見てみると、Zope にも Five があるので、Plone の方を隠すことにする。Plone のインストールは Products 下のプロダクトディレクトリのムーブだけだが、先ほど作ったインスタンスの Products は空なので、個別にムーブせずにシンボリックリンクを張ることにする。

cd ~/Plone-2.5.1
mkdir .dist ; move Five .dist # → この辺は適当に。rm -r Five でもいいし
cd ~/zope/instance/PloneSite1/
ls Products
mv Products ProductsX
ln -s ~/Plone-2.5.1 Products
bin/zopectl restart

http://host:8080/manage で、Products に Plone のものが増えていることを確認して、右上のプルダウンで "Plone Site" を add する。id は適当に plone1 とつける。http://host:8080/plone1 で Plone 画面が表示されればインストールは完了。


2006-01-08追記:

Ploneの書籍(「オープンソース徹底活用Ploneによる簡単Webコンテンツ管理」)を見て追加

wget http://ftp.python.jp/pub/JapaneseCodecs/JapaneseCodecs-1.4.11.tar.gz
tar xvfz JapaneseCodecs-1.4.11.tar.gz
cd JapaneseCodecs-1.4.11
python setup.py install
cd ~/zope/app/2.9.6/lib/python/
echo $'import sys\nsys.setdefaultencoding("utf-8")' > sitecustomize.py

2006-11-26(日)

[]chownのピリオドとコロン chownのピリオドとコロン - それはそれ。これはこれ。 を含むブックマーク chownのピリオドとコロン - それはそれ。これはこれ。 のブックマークコメント

今まで、当然のように chown user.group filename とやっていたが、ふと気づくと、あちこちで見るサンプルはユーザとグループをピリオドでなくコロンで区切っているケースばかりだ。


Linuxman chownしてみると、コロンになっている。

ちょっと「The FreeBSD Project」で調べてみると、FreeBSDやNetBSDでもコロンになっている。主要どころを見てみると、SunOS4.1.3ではピリオドだ。おそらく私がピリオドを使っているのはSunOS4由来と思われる。古きを訪ねると、4.4BSD liteがコロン、4.3BSD Renoがピリオド、4.3BSD NET/2がまたコロン。さらに古いと2BSDではピリオド。ほかにピリオドなのは、ULTRIX。


どうしてニ流派が生じたのだろうか?

二流派といっても現在ではピリオド派は滅びてコロン派ばかりだが。

hasegawayosukehasegawayosuke 2006/11/27 10:42 http://www.linux.or.jp/JM/html/gnumaniak/man1/chown.1.html
<quote>POSIX ではユーザー名にドットが使えるため</quote> だそうです。

たけおかたけおか 2006/11/27 12:04 chown のピリオド->コロンは、BSDが変わった時に、がっくり来ました。

まったく関係ないのですが…
ソースコード中のカンマとピリオドを間違えて、ロケットが海に落ちた、というのは、都市伝説(ガセビア)らしいです。
http://d.hatena.ne.jp/kmori58/20051208/p3
最近、よく言われてます。これ自身が、ガセだともっと面白いのですが…

otnotn 2006/11/29 00:02 hasegawayosukeさん、情報ありがとうございます。書いてみるもんですね。
しかし、JMに書いてあったとは不覚。
時期的に見てPOSIX以降かという気はしたのですが、ユーザ名に使える文字のせいとまでは思いもしませんでした。

otnotn 2006/11/29 00:09 >ソースコード中のカンマとピリオドを間違えて、

「FORMAT文のホラリス定数の文字数を数え間違えて」とかだともっと面白いのですが。