「sheevaplug」カテゴリーアーカイブ

sheevaplug をついに手放した。

手放した、といっても、手元に置かなくなった、くらいの意味だったりする。
2009年8月くらいからずっと家において、NASの頭やバックアップとかのちょっとしたcronを仕込んで使っていたsheevaplugをついに実家においてきた。

実家側でIPアドレスをダイナミックDNSサーバに通知しておいて、必要に応じてバックアップ等のために遠隔で入っていろいろ手当てする予定。
とりあえずログインはできている。

webcalendarをやめた!

phpのwebcalendarで構築したカレンダー。何だかんだ言って、これのために毎回mysqlを立ち上げたり、一応バックアップをとったりしていて、サーバの入れ替えの時なんかに結構障害というか、面倒になっていた。もういやになったので、サーバでmysqldを止めてしまった。最近アップデートが出ていることには気づいていたけど、どうも1年くらいインストール時の不具合をリリース版には入れずに放置されていて、いつになったら安定するのかよく分からないし、、、。

まぁ便利に使えるとは思うんだけれども、googleとかのカレンダーが便利に使える今となっては、別にもうそこを頑張らなくてもいいかなぁ、と。いうことで、mysqldを切ってしまいました。バックアップデータもそのうち捨てようかな。

sheevaplugをfedora14にしてみた。

まずは、fedora14を入れるSDカードを用意。今回はamazonで安く仕入れた東芝の8GBを利用。

パーティションは

/boot ext3 300MiB

/   ext4 (ジャーナルなし) 残り全部

swap      500MiB

で切ってみた。

swapなんていらないよな〜なんて話もあるし、あまり使って無かった気がするけど、まぁ一応切っておく。SDカードも使い切らないから。

ジャーナルなしext4は、gpartedでパーティションを切ってから設定したので

tune2fs -O ^has_journal /dev/mmcblk0p2 した。

前はきっとjournalに書きまくったせいでSDカードが壊れたに違いないということです。はい。

このとき、fstabを書くときに楽をするため?、パーティションにラベルを設定。

tune2fs -L rootfs /dev/mmcblk0p2 みたいな感じ。

これをしておくと、fstabのデバイスのところに、LABEL=”rootfs” とかかける。

man tune2fs とか、 man fstab 参照。
fedora14のrootfsは、http://lists.fedoraproject.org/pipermail/arm/2011-December/002386.htmlで入手できるものを使用。まぁ多分使えてる。デフォルトのrootのパスワードは、fedoraarm

fstabは適当に編集。 /tmp /var/lock/subsysはtmpfsにした。

試しにtftpでカーネルを読み込んで、nfsで起動させようとしたが、うまくいかないので、こちらは断念。

SDカードからなら起動できた。(/bootに、最新のkernelをおいときました。 いつもの、http://sheeva.with-linux.com/sheevaから拾えるものです。)

次に、uImageからの起動時に、/のデバイスをfsckしに行って待ってしまうのを解消するために、uinitrdを作成する。

http://www.mulsys.net/blog/archives/2010/02/864.html (Wayback Machine経由) http://legacyos.homeip.net/sheeva/ (リンク切れ) を参考にして、まずはsheevaplugでfedora14に入ってから、

# cd /boot

mkinitrd ./initrd-3.2.5 3.2.5

mkimage -A arm -O linux -T ramdisk -C gzip -a 0x0 -e 0x0 -n "3.2.5 ramdisk" -d ./initrd-3.2.5 /boot/uInitrd-3.2.5

ln -s uInitrd-3.2.5 uInitrd

reboot

u-bootの設定に入って

>> setenv bootargs_mmc 'console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootdelay=3'

> setenv sd_prepare 'mmc init ; ext2load mmc 0:1 0x800000 /uImage; ext2load mmc 0:1 0x1100000 /uInitrd'
> setenv bootcmd_sd 'setenv bootargs $(bootargs_mmc); run sd_prepare; bootm 0x800000 0x1100000'
> setenv bootcmd 'run bootcmd_sd; run bootcmd_nand'
> saveenv
> reset

(bootcmd_nandには、以前設定した、nandフラッシュから立ち上げるためのコマンドが入っています。

u-bootを更新したので、mmc initとなっていることに注意。)

これで無事に起動できたので、早速いろいろインストール

yum install emacs mtd-utils* openssh-clients lzop nano git-all etckeeper w3m

ここらで、sheeva.with-linux.comから拾ったREADME-SHEEVA-UPDATE.sh をもう一度やって、一応アップデートしておく。

yum install httpd mysql ruby php ruby-irb rubygems php-mbstring php-mysql ruby-sqlite3

zabbix があったので、あとで遊んでみようと入れてみる。

yum install zabbix zabbix-web-sqlite3 zabbix-server-sqlite3 zabbix-agent zabbix-docs

以前使っていたものを思い出しながら入れていく。まずはプリンタ設定とntp。

yum install cups ntpdate ntp

ntp設定は不要なようだ。デフォルトで動く。

タイムゾーンをJSTに変えておく、、、。

cp /usr/share/zoneinfo/Japan /etc/localtime

ハードウェアクロックをUTCで保存するように、/etc/adjtime のLOCALをUTCに書き換え。(趣味)

hostname が、デフォルトで、fedora-armというのになっているので、 いつものやつに変える。

/etc/sysconfig/network の編集

作業は明日以降ということにしてここらで寝ます。

=====

続き

yum install screen nkf mysql-server sane xinetd sdparm

cupsの設定

以前同様 http://honana.com/system/cups.html に従って、、、

・/etc/cups/cupsd.confの編集

Listen 631 を追記

<Location /> <Location /admin > <Location /admin/conf>の中に allow 192.168.0.0/24を追記

・openssl req -new -nodes -x509 -keyout /etc/cups/ssl/server.key -out /etc/cups/ssl/server.crt -days 3650

・/etc/init.d/cups/restart

・https://192.168.0.2:631/admin でプリンタ追加。rawドライバを選択。(=sheevaplugのIPアドレスです。)
そろそろ疲れてきたので、etckeeperのgitで、バックアップのetcから、設定ファイルのへんこうになっているところを探してみる。

cd /etc

git remote add f12 /path/to/back/up/etc # パスは嘘です!

git fetch f12

git diff --summary f12/master master

うーん、多い。とりあえず、httpd/conf.dと、手で書いたanacronのシェルは復旧しておく。

# cd /etc/httpd/conf.d

git checkout f12/master -- .

これで一応  git diff を見て、変更を確認。 うーん。便利。

====

sambaの設定。sambaのパスワードをどうやって移すのか調べた。

まずは yum install samba

とりあえず、バックアップしてあった以前の環境にchrootして、

# pdbedit -i tdbsam -e smbpasswd:aaa

してから、chrootから抜けて、aaaファイルを適当な場所に移して

# pdbedit -i smbpasswd:aaa -e tdbsam

してユーザアカウントを移す。

次に、またetckeeperのgitを見ながらsmb.confを移して、

/etc/init.d/smb start && chkconfig smb on
/etc/init.d/nmb start && chkconfig nmb on

====

スキャナも使えるようにする。

yum install sane xinetd

設定はhttps://ttandai.info/archives/734で以前やった通り。だけど、まぁ、etckeeperでcheckoutするだけ。

/etc/xinetd.d/saned はこんな感じ

# default: off

description: The sane server accepts requests

for network access to a local scanner via the

network. copied from manpage of sane.

service sane-port
{
port = 6566
socket_type = stream
wait = no
user = root

user = saned

group = saned

server = /usr/sbin/saned
}

====

php、mysqlも、設定をetckeeperから引いて、走らせるだけで終わり。

====

メールはまたeximに入れる。いい加減postfixとかにするべきかとも思うが、以前設定したものをそのまま使うので、、。

====

anacronジョブでやっていたバックアップものを復旧。

====

pukiwikiもちゃんと動いた。でもそろそろdokuwikiにしようかな。

====

バックアップ用のハードディスクに、メインのものと同じ容量のハードディスクを用意したので、そこに移して、おしまい。
全体的に、etckeeper便利ってことでした。

u-boot更新@sheevaplug

DENXで配っているu-boot、をビルドしたらしいものがここで配っているので入れてみた。

操作は全然むずかしくない。指示どおり。fedora16の母艦でtftpでつなげるようにして、

setenv serverip 192.168.1.2 # IP of your TFTP server
setenv ipaddr 192.168.1.200
tftpboot 0x0800000 u-boot.kwb
nand erase 0x0 0x60000
nand write 0x0800000 0x0 0x60000

だけ。MACアドレスも含めて設定がすべて上書きされるので、そこだけ注意。
自分の場合は、screenの ctrl+a,Hでprintenvのログを出してから、整形(sedで、 s/^/setenv / s/=/ ‘/ s/$/’/ だったかな?)してからテキストファイルに保存、for i in `cat setting` ; do echo $i > /dev/ttyUSB1 ; sleep1 ;done みたいな感じでu-bootの設定を書いて、u-bootの画面でprintnevで確認してからsaveenvした。(分かりにくい書き方で申し訳ないです。 screenで端末につないでいますが、echoで書き込んでいるときは、screenの端末を閉じています。同時に二つ開くとろくなことにならない。)

mmcinitコマンドが mmc init になっているくらいの変更点はあったが、他は特になさそう。

u-bootの環境変数がだいぶすっきりしたけど、http://www.denx.de/wiki/DULG/UBootEnvVariablesを眺める限りでは今まで書いてあったものが解説されていないので、ここは気にしないということで。

SDカードが壊れた!

sheevaplugのOS(fedora12)をつっこんでいたSDカードが壊れた。1年持ったかもたないかくらい。どうも起動する度に壊れるファイルがあり、ファイルシステムに不具合が出るような感じがしていたので怪しいとは思っていたんだが、確信に変わったので心置きなく捨てられる。
ext4が悪いのかと思って、ext3でフォーマットして、その直後に1GBくらいの適当なファイルおいてfsckしたら、いきなり破損ファイルあり。fsck -c したあとにdumpe2fs -b しても、badblockは出てこないけど、物理的に壊れていると解釈するべきなんでしょう。
windowsで、checkflashというのを試してみたら、こちらでも必ずCRCエラーが出てくるので、(特定のブロックが壊れている分けではないが)不具合があるとみている。

まぁ、OS動かしてたわけだから、書き込み回数過多で死んだってとこでしょう。vabatimのclass6、16GB。容量が大きければウェアレベリングがきいて寿命が長いかとも思ったけど、そうでもなかったということかなぁ。1割くらいしかつかっていなかったんだけれども。

まぁもう壊れたものはしかたがないので、u-bootをアップデートしつつ、OSもfedora14にしてみようと思う。

ってか、OSインストールするのを考えたら、圧倒的にHDDとx86なcpuの方が楽だよなぁ、、、と思う次第。需要と供給なのかなぁ。次は、epsonのちいちゃいやつでも買おうかなぁと画策してみたり。sheevaplug自体が壊れるにはまだまだだいぶ時間がかかりそうだけれども、、、。

というわけで明日以降作業したら追記する。
SDカードのガワはずして眺めてみようかな。

==

その後、追加のSDカードを買ったので、壊れたSDカードを割ってみた。
SDカードは、verbatimのクラス6 16GB。
中のチップは、TOSHIBA TH58NVG6D2ETA20 が2枚(台湾製かな?)。 ぎちぎちにつまっているけど、コントローラのようなチップが見当たらないんですけど、、、。独立したチップじゃないのかなぁ、、、。
以前予備として買っておいたA-DATAのSDカードは大丈夫なんだろか、、、、。いろいろ不安だ。

amahiをsheevaplugにインストール中。

インストール用シェルスクリプトをちゃんと読まずにやったのでちょっと手間取った。http://wiki.amahi.org/index.php/Amahi_Plug_Edition

SDカードにイメージを入れるところまではいったが、どうにもうまく起動しない。つうか、sheevaplugって、/bootがあまり大きいとうまく起動しないからいろいろ面倒なことをしないといけないはずだったけど、今回のインストールプロセスではその辺が書いてないことに気付いた。うーん。2GBのSDカード用意するのか??

途中で邪魔が入ったので今日のところはこの辺でおしまい。

しかし、ちょうどタイムリーにhttp://blog.amahi.org/2011/06/21/apple-hits-amahi-with-a-cease-and-desist-wait-what/
こういう話もあって、だんだんAppleが嫌いになるね。

 

 

sheevaplug をバックアップから復旧

前の記事でだいぶ悪くなったsheevaplugをバックアップから復旧した。

こんなこともあろうかと、cron.weeklyで、rsyncする形でシステムのバックアップをとっていたのが幸いした。まぁ大体のファイルはこわれていなかったであろうといいことで、まるっとコピー。次回からは、rsyncの戻り値に異常があったらメールするようにしておこう、、、。

この1週間節電対策で落としたり珍しく中身をいじっていたので、面倒だ。。。まぁしかたあるめい。

たまにはfsckしないとだめねーっと思いきや、なかなかできない。他のシステムでfsckするとジャーナルから復旧とか何とか、精神衛生によくないことを言ってくれる。/forcefsckをtouchしておくと起動してくれるが、fstabに1をつけておくと起動できない。なぜだ。

まぁいいや、とっととamahi環境を試すべく、adataのclass10なsdhcカードを用意した。dynabookazをlinuxで試したら次はそっちだ!

最近、globalscaleがguruplugに続いてdreamplugというのを出したらしい、、、インターフェースが増えていて良さげ。esataな外付けHDDはもう出回っているのかな?ほしいなぁ〜。

sheevaplugを起動していたSDカードがやばげ?

/var/log/messages に
EXT4-fs error (device mmcblk0p2): htree_dirblock_to_tree:586: inode #16360: block 159825: comm find: bad entry in directory: inode out of bounds – offset=132(132), inode=134234094, rec_len=28, name_len=18

なメッセージが出始めた。fsckしていいものか、、、。

とりあえず、
# cd /
# find -xdev -inum 16360
してみたら、/var以下の、yumのキャッシュが引っ掛かった。
/varはSDカードじゃなくて外付けHDDにしといた方が良かったかもしれない。。。

再起動したら、、、
/etc/rc.d/rc3.d/K01smartd のシンボリックリンクが壊れた。
というか、dmesgしたらいろいろとエラーが出ている。もうだめかも、、、。
とりあえず必要なデータとcronで仕込んだジョブのバックアップだけはしておく。

さて、久々にdmesgを眺めてiptablesでブロードキャストが全部はじかれてた(240.0.0.0/4をけってました)のを治したり。(前使ってたルータは255.255.255.255に投げてなかったのかな?全然気づいてなかった)

ファイルシステムが壊れていて、おそらくファイルが消せないので、もう仕方ないなぁ、ということで、OSが入っているSDカードを他のシステムにつないでfsckすることにする。


fsckしてファイルシステムこわしたっぽい。
さすがに1000000ブロック以上書き換えるような無茶を要求してくるのはもうだめだと判断。明日買ってくるにする。
debugfsしても壊れたinodeはディレクトリのもんだったので、割とどうしたらいいのかわからなかった。
えーいままよとアンリンクしたらもうどうしようもないことに。とりあえずマウントはできるので、あとでまぁファイルをうつそう。(いや、バックアップからとるべきかな)
etckeeperしていたのが実地で役立つとは〜〜
gitのレポジトリも復旧させられるし、なんか別に問題ないのかな〜。。。ということにしといてください。ぢつは結構痛いです。。。

samba の設定

sambaから以下のエラーログが延々表示されていた。多分LANにつながったwindows7なマシンがスリープしている時とかに出ていた?

lib/util_sock.c:539(read_fd_with_timeout)
lib/util_sock.c:1491(get_peer_addr_internal)
getpeername failed. Error was 通信端点が接続されていません
read_fd_with_timeout: client 0.0.0.0 read 

manに、

smb ports = 445 は、云々かんぬん書いてあったので,

smb ports = 139 と書いてみる。とりあえずこれで様子見。

sheevaplugでamahiが使えるらしい

amahiという、ホームサーバ向けディストリビューションがsheevaplugでも使えるらしい。
http://wiki.amahi.org/index.php/Amahi_Plug_Edition

fedoraはあまりメンテナンスされていないような感じなので、これを突っ込んでみようかなぁ、なんて思っている。ついこの前までは、debian6かなぁ、とは思っていたが、やっぱりfedoraというか、redhat系じゃないと、作法がわからんくて戸惑うので、いれてみようかなぁ。

pogoplugなんか、出始めのときは全然欲しいとも思わなかったが、最近softbankが国内で売りはじめているようだし、これからもっとARMなLinuxが国内でも活発になってこないかなぁ。まぁ、androidは別ということで、、、。

sheevaplug のカーネルアップグレード

そろそろカーネル2.6.32.8から1年近くたったこともあるし、stableになってからそろそろ1ヶ月くらい立ってる2.6.37にあげた。ext4関連でアップデートが結構あったはず。とりあえず動いたから問題ないんだろう。多分。

アップデートはいつもの通りhttp://sheeva.with-linux.com/sheeva/(リンク切れ) http://www.xilka.com/sheeva/ここから
README-なんとかいうのをダウンロードして実行するだけ。

ちなみに今回はcp932のカーネルモジュールを構築しなかった。一度も使わなかったからね〜。

 

ところで、国内でpogoplugが出るらしい。
http://pc.nikkeibp.co.jp/article/news/20110202/1029973/
http://internet.watch.impress.co.jp/docs/news/20110202_424424.html
これ、たしかsheevaplugと同時期にアメリカあたりでは出ていたはずだから、1年半のおくれか?
しかし、これのソフトがsheevaplugでも使えるようにならんかなぁ,,,,。

外付けハードディスクの回転を止める

sheevaplugに付けた外付けHDDを勝手に止めるようにする。
http://www.nslu2-linux.org/wiki/FAQ/SpinDownUSBHarddisks#method3
ほとんどここにあったスクリプトのパクリ
ポイントはいくつかあるが、、、

まずはsdparmを使う点。
syncだったところをsdparm –command=sync
scsi-idleをsdparm –command=stop にする。
(–command=syncしたあとじゃないと、stopしても止まらないので注意。)

次に、ディスクのデバイスファイルは、さしなおしたりしたときに毎回同じにふられるとは限らないので、とりあえずマウントポイントから、起動時にmountコマンドをつかってデバイスファイルに関連付け。(/dev/disk/by-uuidからls -lでリンク先を見ればデバイスファイル名を取れるが、ディスク入れ替え時にいちいち対応しないといけないので、、、ちょっと迷ったがこっちの方式で利用。)

最後に、一つのスクリプトで複数のディスクを(何個でも)扱えるようにした点。
ま、見ての通り。

スクリプトはこんな感じ

#!/bin/sh
mount=(/mnt/disk /mnt/backup)
num=${#mount[@]}
interval=4000
for ((i=0; i < num;i++)); do
  tmp=(`mount |grep ${mount[i]}`)
  [ x"$tmp" = x ] && continue
  tmp1=${tmp[0]#/dev/}
  disk[i]=${tmp1%[0-9]}
  state[i]=`grep " ${disk[i]} " /proc/diskstats`
  up[i]=1
  count[i]=$interval
done
while [ true ]; do
  sleep 600
  for ((i=0;i < num;i++)); do
    count[i]=$((${count[i]}-600))
    newstate[i]=`grep " ${disk[i]} " /proc/diskstats`
    [ `echo ${newstate[i]} | wc -l` -eq 1 ] || continue
    if [ "${state[i]}" = "${newstate[i]}" ]; then
      if [ ${count[i]} -lt 0 ]; then
        count[i]=$interval
        if [ ${up[i]} -eq 1 ]; then
          echo -e "spin-down: /dev/${disk[i]}"
          sdparm --command=sync /dev/${disk[i]}
          state[i]=`grep " ${disk[i]} " /proc/diskstats`
          sdparm --command=stop /dev/${disk[i]}
          up[i]=0
        fi
      fi
    else
      echo -e "drive is up: /dev/${disk[i]}"
      count[i]=$interval
      state[i]="${newstate[i]}"
      up[i]=1
    fi
  done # for i
done # for while loop

で、このスクリプトを適当に保存して、rc.localからバックグラウンドで起動する。
(最初は多重起動対策とか考えないといけないのかな?とか思っていたが、rc.localは、起動時に/var/lock以下にロックファイルを作成するため、ランレベル変更時など、さらに起動されることはないようだ(/etc/rc参照)
起動時にはK*を殺してからS*を起動するというのは知っていたが、この仕組みは知らなかったので、ちょっと迷った。2重起動対策はしなくてOK)

その後、sdparmにsda1など、パーティション番号の数字?を入れると/var/log/messagesに sending ioctl 2285 to a partition! というのがたくさん出てくるので、最後の数字をとるように変えました。

sheevaplugに外付けHDDでファイルサーバいろいろ

ファイルサーバの整理をした。

構成は、sambaで、
sheevaplugにusb外付けHDDが2台(160GB,500GBのヘテロ構成)ついている。
RAIDは当然使えないが(まぁ、HDDの玉が壊れたときに再構築するのも面倒っぽい。)
rsyncで適当に大事なファイルだけコピーする感じ。

この辺の処理はanacronにやらせるのがちょうどいいので、/etc/cron.weeklyにスクリプトを入れる。

ファイル置き場の構成は、基本的には
週一回バックアップを取るDaijiフォルダ、適当に置くだけのOkibaフォルダ、
atimeが2週間くらいより古くなったら消すkariokiフォルダの3本立て構成
(消す方のスクリプトは、find $DIR -type f -atime +14 |xargs rm とかなんとか
 ディレクトリはrmdirするのがよさげ)
(ほかにも設定ファイルのバックアップとか、いろいろバックアップ取っているのがある)

HDDの回転が割とうるさい時があるので、正直止めたいが、
一日に何度も回り始めると困るので、どういうスクリプトを組んだものか正直迷っている。

止めるだけなら
sdparm –command=stop /dev/sda
みたいな感じでできるが、ちょっとどうしようか思案中。

git を使ってみた

sheevaで動かしているcronのジョブをgitで管理することにした。
自分一人で使うなら、svnの方が使いやすいかなぁ。

で、gitwebをyumで入れて設定してみた。
レポジトリを二つ作ったのだが、gitwebで見るには、その両方のレポジトリが両方見えるところにrepositoryrootを置かないといけないらしい。まぁとりあえずprojectrootをホームディレクトリに置いておいて,シンボリックリンクで逃げた。
よくわからん。

ついでに、、毎日webcalのDBをmysqldumpして、gzipして保存していたcronジョブを、
テキストでgitにコミットするようにして、gzipは保存しないようにした。
どうせ中身はテキストなのでこんなもんでいいでしょ。

コミットされた時は標準出力かエラーのどっちかに出力があるので、それを
cronのエラーに出すように、 1>&2 みたいなことをしておく。
これで何か吐かれたらローカルにメールが飛んで,コミットされたときがわかる。

これでだいたいsheevaがサーバっぽくなってきたかなぁ。
でもそろそろfit-pc2が欲しかったりするけどな。

sheevaplug @ fedora12 のeximで外にメールを投げる

https://ttandai.info/archives/1913の方に、mailxコマンドで同じことをする記事を書いたので、シェルスクリプトからメールを送りたいなー、くらいのことなら、こっちを参考にした方がよいと思います。

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

だいぶ安定稼働しているsheevaplugで、メール送信できるようにしてみる。
といっても、プロバイダのsmtpサーバにメール送信を丸投げするような設定だけだけど。

eximははじめから入っているので、インストールは不要。
(バージョンは4.69)
で、/etc/exim/exim.confをいじる。

まずは、primary_hostname に適切なホスト名を書く。
次にdnslookupの項目をコメント。
その下のsmarthostをコメント解除。

(650行めよりちょっと前くらい)
smarthost:
driver = manualroute
domains = ! +local_domains
transport = remote_smtp
# transport = remote_msa
route_data = smarthost.myisp.net
no_more

# smarthost.myisp.netは使っているプロバイダのsmtpサーバを入れる。
# 25番ポートに適当に投げるときはこれでOK。25番に投げられるsmtpサーバのホスト名が
# なかなかわからなくて苦労した。
#
# remote_msaにすれば、587番ポートを使ってくれる(下の方に設定が書いてある。)
# 認証が必要で587番ポートに投げるときは以下の設定
# http://blog.bordercrossingmedia.com/2008/10/configuring-exim-under-centos-to-send-emails-through-an-isps-smtp-server/(リンク切れにつきWaybackMachine経由)を参考にして、、、

(900行めよりちょっと前くらい)

client_auth:
# driver = cram_md5
# public_name = CRAM-MD5
driver = plaintext
public_name = PLAIN
# client_name = username
# client_secret = password
client_send = ^username^password

# コメントを入れ替えればCRAM-MD5で認証できるはず、だけど、
# うちのプロバイダではうまくいかなかった.
# username と password はメールアカウントのIDとパスワードを入れる。

でOKっぽい。

pukiwiki plusのshowrssを修正とか、httpdのアクセスログを抑制とか

たいしたことじゃないんだけど、自分が使いやすいように修正。
92,93行目
$link = ‘<a href=”‘ . $link . ‘” title=”‘ . $title . ‘ ‘ .
$passage . ‘” rel=”nofollow”>’ . $title . ‘</a>’;
次に変更
$link = ‘<a href=”‘ . $link . ‘” title=”‘ . $title . ‘ ‘ .
$passage . ‘” rel=”nofollow” target=”_blank”>’ . $title . ‘</a>’;
a hrefを使っているのがここしかなかったのですぐにわかった。
要は、#showrssして表示されたrssからリンクで飛ぶとき、新しいウインドウ(実際は新しいタブだけど、そこはブラウザの設定で、、、)で開くようにする、というだけの変更。

で、大体ローカルで使うwikiができてきた感じなのでここらでhttpdの表示を抑えるようにする。
http://www.qxj.net/linux/accesslog.html を参考にして、
192.168.0.以下からのアクセスを全て記録しないようにした。まぁこの範囲からしかアクセスできないんだけど、、、。

/etc/httpd/conf/httpd.conf
SetEnvIf Remote_Addr 192.168.0. nolog を追加
CustomLog logs/access_log combined env=!nolog CustomLogを見つけて変更

とりあえずこんなもんでできたかな〜。

php webcalendar さらに続き

細かいスタイルの修正など。

・year.php
display_small_monthを呼んでいるときに、3番目の引数としてtrueをたすと、
年のカレンダーを呼んでいるときに、2010年8月、のように表示される。
月の表示があったほうが個人的に使いやすい。

・year.php
最後の方の、HTMLファイルを吐いているあたり。
month.phpとかday.phpはinclude/function.phpの中のdisplay_navigation関数を呼んで
タイトル周りのカテゴリーの表示などをしているが、year.phpだけは直接書いてある。
display_navigationで生成されるのに対応する部分と、divタグのclassが違っていたのでそろえる。
<div class=”title”>   →   <div class=”topnav”>
<span class=”date”>  →  <div class=”title”><span class=”date”>
{$catSelectStr}</div>   →   {$catSelectStr}</div></div>

・include/style.php
month.phpで矢印表示で次の月、前の月に移動するときに、
タイトルまわりにかなりスペースがあくのが気になるので修正。
.topnav のなかに width:100%; margin-top;5pxを追加
.title から widthの記述を削除

とりあえずこんなもんです。後はサーバーの日付を21時間ずらしてくれるのが気になりますがどこでいじってるのかわからないのでページを読み込むときに最初にincludeしているinclude/init.phpの中で、いろいろとファイルをinclude_onceした直後に
date_default_timezone_set($GLOBALS[‘TIMEZONE’]);
と書いておくことでとりあえずはなんとかなる。

ただ、データベースの中のwebcal_configの中のTIMEZONEにガッツリ値が書いてあるので、多分これが悪さしてるんだろうなぁという感じ。


よくよくデータベースとinclude/function.phpを眺めたらわかりました。
include/init.php→include/classes/Webcalendar.class の中の関数initializeSecondphase→include/functions.phpのload_global_settings、load_user_preferncesの二つの関数を順に呼ぶのだが、ここがまずい。
この二つの関数は、それぞれデータベースから設定を読んでグローバル変数GLOBALSに値を入れているのだけれども、date_default_timezone_setしているのはload_global_settingsの方だけ。しかし、load_global_settingsの方で呼ぶのはシステム設定の方の値。ここで設定されているTIMEZONEの値はインストール時に設定されたっきりのAmerica/New Yorkになっていて、インストールスクリプトをいじらないと変更できない(システム設定で選ぶタイムゾーンはSERVER_TIMEZONEという値)。load_user_preferences(プリファレンスの設定値)からはちゃんとTIMEZONEの値を設定したとおりAsia/Tokyoで持ってくるけど、その後php的にtimezoneの設定をしていなかったからダメ、というわけ。
正解はinclude/functioins.phpの中でload_global_settingの方のdate_default_timezone_setを消去、load_user_preferencesの中に適宜date_default_timezone_setを書く。というわけでした。

しかし、gooblogで<とか>とか含むページは編集が面倒くさいな。
&lt;とか&gt;とか書かないとちゃんと反映されない上に、編集しなおそうと思うと全部カッコにもどるし、、、。

pukiwikiにwebcalendarを埋め込む

どんなもんかなということで、こっそりpukiwikiplusに変えていました。
まぁpukiwikiにwebcalendarを埋め込むということですが、結局はプラグインひとつです。

http://pukiwiki.sourceforge.jp/?%E8%87%AA%E4%BD%9C%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%2Fiframe.inc.php
http://lsx.sourceforge.jp/?Plugin%2Fiframe.inc.php
のあたりから iframe.inc.phpをもってきて使いました。
繰り返しのスケジュールを簡単に打てないpukiwikiの各種カレンダーは使いにくいのでこんなかんじ。
ただ、webcalendarはちょっと使い勝手が悪いかなぁ。。。。今後に期待。
xoopsのpicalが使えりゃあまり気にしなくてよかったんだろうけどな、、、。

php webcalendarつづき

php webcalendar 1.2.3 をsheeva plug のfedora12、UTF-8、PHP5.3な環境に入れようとして月名が怪しかった辺りの話など。

生成されたHTTPのソース見ながらあたりをつけて原因を見つけました。

→打ち消し線の部分はウソでした。

正しくはinclude/function.phpの中のdate_to_strの計算がおかしかった。

$y = intval($indate /10000 );
$m = intval($indate /100)%100;
$d = $indate % 100;

を次のように直すのが正しかった。

$y=intval($indate)/10000 % 10000;
$m=intval($indate)/100 %100;
$d=intval($indate)%100;

結局、$indateがstring型になってるときがあっておかしくなってらしい。

・プルダウンメニューの月名表示がunknown-monthになる

→include/init.php のなかの358行目date_to_strのなかで、

date_to_str(…,false,true,0);

最後の0をトル。

・月表示の月名が化ける

→include/function.php のなかの1125行目 date_to_str(…,false,false,true);

最後のtrueをトル。

ちなみに、date_to_strはfunction.phpの中で定義されていますが最後の引数を使うところは全部コメントしてまう方がいいのかなぁ、、、とか思いつつ、コメントにしても、週表示の時は再びunknown-monthと出てしまうので、いかんともしがたいです。

で、週表示の方は(init.phpの似たようなところを似たように直しても駄目なので)もうどうしようもないので、諦め。
週を表示しないようにして(アクセス制御+週番号非表示) 見た目だけ解決。

その他の設定にはこのアタリにお世話になりました。

http://webcalendar.bbfriend.net/
さらに続きます