HTML がわかっていず面倒なので <pre> と FireFox extension の It's All Text! emacsclient & auto-fill-mode & set-fill-column 72 あたりで (C-x f) 0. インストールの前に 直に/etc/passwd を触らせるのではなく PAM 経由。一応インストール前の 状態を確認 # cd /etc # ls -l passwd group shadow gshadow -rw-r--r-- 1 root root 820 Apr 30 14:03 group -rw-r----- 1 root shadow 679 Apr 30 14:03 gshadow -rw-r--r-- 1 root root 1584 Apr 30 14:03 passwd -rw-r----- 1 root shadow 1348 Apr 30 14:03 shadow # grep freerad passwd group shadow gshadowN # ls -l /etc/pam.d/radiusd ls: cannot access /etc/pam.d/radiusd: No such file or directory 1. インストール そのまま # aptitude install freeradius 何も問われず。で、何されたか? を確認 # ls -l passwd group shadow gshadow -rw-r--r-- 1 root root 849 Apr 30 15:26 group -rw-r----- 1 root shadow 705 Apr 30 15:26 gshadow -rw-r--r-- 1 root root 1630 Apr 30 15:26 passwd -rw-r----- 1 root shadow 1377 Apr 30 15:26 shadow # grep freerad passwd group shadow gshadow passwd:freerad:x:114:120::/etc/freeradius:/bin/false group:shadow:x:42:freerad group:ssl-cert:x:111:freerad group:freerad:x:120: shadow:freerad:*:15094:0:99999:7::: gshadow:shadow:*::freerad gshadow:ssl-cert:!::freerad gshadow:freerad:!:: # ls -l /etc/pam.d/radiusd -rw-r--r-- 1 root root 227 Sep 28 2010 /etc/pam.d/radiusd グループ shadow に freerad が加えられた。イコール freerad ユーザアカ ウントで /etc/shadow を読むことができる。/etc/pam.d/radiusd の中身は、 うん。特に... 3. 設定ファイル変更 How do I use PAM with FreeRADIUS? や rlm_pam の説明眺めながらファイル 三つ更新。どこかで見付けたパスワード生成ワンライナー # cat /dev/urandom | tr -dc '0-9A-Za-z' | fold -b16 | head -n1 ZkPbwZ17bCDEx7Kx を多用しつつ。余裕があるなら? もちろん /dev/random の方が良いらしい
2011年4月30日土曜日
freeradius rlm_pap on debian squeeze
2011年4月26日火曜日
TIPS: KVM (qemu) for debian squeeze - その 1
小さいネタをいくつか。
- netboot
- qemu pxe をキーワードに Google 先生に尋ねたところ最初のページや日本語の
最初のページ眺めると ROM-o-matic.net でブートイメージ作って。とあったの
で早速。 1.0.1 の Image Generator で NIC type の選択に virtio-net なんて
あったものだから、おぉと選択。フロッピーはないでしょ。もしかしたら今後
使うカモとか思いつつ output format に USB Keychain disk image を選んで
あとはシリアルコンソールとか。さて kvm を起動しようと、マニュアルでブー
トデバイスの指 定を眺めると...-boot [order=drives][,once=drives][,menu=on|off]
へっ? とお試し。
Specify boot order drives as a string of drive letters.
Valid drive letters depend on the target achitecture. The x86 PC uses:
a, b (floppy 1 and 2), c (first hard disk),d(first CD-ROM),
n-p (Etherboot from network adapter 1-4),
hard disk boot is the default.
To apply a particular boot order only on the first startup, specify it via once.- tftpd のインストールと netboot イメージ
# aptitude install tftpd-hpa (TFTP root directory: /srv/tftp) # cd /srv/tftp # wget http://ftp.jp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/netboot.tar.gz # tar xzf netboot.tar.gz # ls -1 debian-installer netboot.tar.gz pxelinux.0 pxelinux.cfg version.info
- dhcpd.conf の編集
filename に /pxelinux.0。next-server に tftpd サーバのアドレス
subnet 172.27.201.0 netmask 255.255.255.0 { option routers 172.27.201.1; option broadcast-address 172.27.201.255; pool { # ignore unknown-clients; # deny dynamic bootp clients; failover peer "poolish"; option domain-name-servers 172.27.129.1, 172.27.1.1; option domain-name "siesta.or.jp"; filename "pxelinux.0"; next-server 172.27.129.1; range 172.27.201.65 172.27.201.190; } }
こんな感じ。 - サーバ群再起動 & kvm 起動
# /etc/init.d/tftpd-hpa restart
# /etc/init.d/isc-dhcp-server restart
# cd ほにゃほにゃ
# kvm-img create netboot.img 8G
# kvm -net tap -net nic,model=virtio -boot n -curses netboot.img
- tftpd のインストールと netboot イメージ
- ルーティング
-
むやみやたらに kvm-qemu や lxc でゲスト作りまくっているとワケワカになって
えーいままよ。と大元のホスト筆頭に
ってやっちゃったりしない? うーん、それもどうかと思うけど、コレもどうかと。iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
でコレは OSPFv2 / IPv4 適当に動かしちゃう。- quagga のインストール
# aptitude install quagga
/etc/quagga/daemons の編集コメント除けば
zebra=yes bgpd=no ospfd=2 ospf6d=no ripd=no ripngd=no isisd=no
/etc/quagga/zebra.conf と/etc/quagga/ospfd.conf - zebra.conf
hostname zebra@<適当なホスト名> password zebra enable password zebra log file /var/log/quagga/zebra.log !service password-encryption ! ip forwarding ipv6 forwarding ! line vty
- ospfd.conf こんなんでも動いているらしい
- パーミッション
ちょっとウルサイらしく
debian.conf とdaemons の他は
quagga 所有で 0640# cd /etc/quagga # chown quagga.quagga zebra.conf ospfd.conf # chmod 0640 *.conf
- 再起動と確認
# /etc/init.d/quagga restart # # (しばらく待って...) # ip route ls 10.6.36.0/24 via 172.27.193.1 dev wlan0 proto zebra metric 20 172.27.202.0/24 dev br2 proto kernel scope link src 172.27.202.1 172.27.129.0/24 via 172.27.193.1 dev wlan0 proto zebra metric 20 172.27.68.0/24 via 172.27.193.1 dev wlan0 proto zebra metric 30 172.27.193.0/24 dev wlan0 proto kernel scope link src 172.27.193.17 172.27.201.0/24 dev br1 proto kernel scope link src 172.27.201.1 192.168.27.0/24 via 172.27.193.1 dev wlan0 proto zebra metric 20 172.27.1.0/24 via 172.27.193.1 dev wlan0 proto zebra metric 30 111.22.3.0/22 via 172.27.193.1 dev wlan0 proto zebra metric 20 default via 172.27.193.1 dev wlan0
この proto zebra が quagga 経由。あるいは (なっがいけど)# telnet localhost ospfd Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Hello, this is Quagga (version 0.99.17). Copyright 1996-2005 Kunihiro Ishiguro, et al. User Access Verification Password: ospfd@myhost> show ip ospf route ============ OSPF network routing table ============ N 10.6.36.0/24 [20] area: 0.0.0.0 via 172.27.193.1, wlan0 N 172.27.129.0/24 [20] area: 0.0.0.0 via 172.27.193.1, wlan0 N 172.27.193.0/24 [10] area: 0.0.0.0 directly attached to wlan0 N 172.27.201.0/24 [10] area: 0.0.0.0 directly attached to br1 N 172.27.202.0/24 [10] area: 0.0.0.0 directly attached to br2 N 192.168.27.0/24 [20] area: 0.0.0.0 via 172.27.193.1, wlan0 N 111.22.3.0/22 [20] area: 0.0.0.0 via 172.27.193.1, wlan0 ============ OSPF router routing table ============= R 172.27.129.1 [10] area: 0.0.0.0, ASBR via 172.27.193.1, wlan0 ============ OSPF external routing table =========== N E1 172.27.1.0/24 [40] tag: 0 via 172.27.193.1, wlan0 N E1 172.27.68.0/24 [40] tag: 0 via 172.27.193.1, wlan0 ospfd@myhost> exit Connection closed by foreign host.
とか
hostname ospfd@<適当なホスト名> password zebra enable password zebra log file /var/log/quagga/ospfd.log !service password-encryption ! router ospf ospf router-id <(自分の主たる) IP アドレス - 例えば 192.168.10.1 とか> redistribute kernel redistribute static redistribute connected network 0.0.0.0/0 area 0.0.0.0 ! line vty
- quagga のインストール
2011年4月23日土曜日
オレオレ証明書の証明書更新
完全なる備忘録。プロバイダから付与された IP アドレス間でトランスペアレントモード
IPSec するにあたって racoon を certificate_type x509 で動かしているんだけど、この
証明書の更新、および更新方法を都度忘れて調べ直すので、ここにメモ。CRL のハッシュ
がわからず「証明書を取り扱う」を多々参考にさせてもらいました。ありがとうございます
IPSec するにあたって racoon を certificate_type x509 で動かしているんだけど、この
証明書の更新、および更新方法を都度忘れて調べ直すので、ここにメモ。CRL のハッシュ
がわからず「証明書を取り扱う」を多々参考にさせてもらいました。ありがとうございます
- CSR の作成
- openssl req -new -keyout server_key.pem -out server_csr.pem -nodes
- オレオレ CA で sigh
- openssl ca -config /etc/ssl/openssl.cnf -in server_csr.pem -out server_cert.pem
- CRL の発行
- openssl ca -config /etc/ssl/openssl.cnf -gencrl -out crl.pem
- 証明書のハッシュ
- ln -s server_cert.pem `openssl x509 -in server_cert.pem -noout -hash`.0
- CRL のハッシュ
- ln -s crl.pem `openssl crl -in crl.pem -noout -hash`.r0
- テキスト出力
- openssl x509 -in csr.pem -text
- verify
- openssl verify -CAfile ca.pem csr.pem
- nodes 付け忘れ
- openssl rsa -in server_key.pem -out server_nodes_key.pem
port mirror on linux
だいぶ以前にここに書いたと思ったら、書いていなかった... のでメモ。
実際に使える例ではないけれど、例えば wlan0 を dummy 0 にミラーするのであれば
root になって長いコマンド。wlan0 からの出ていく方は
その 10 を親として 10番という順番で u32 すべてマッチのフィルタを追加。
結果は 10:1 に流すけど 10:1 という qdisc はないのでデフォルト何もせず。
アクションとして dummy0 にミラーを送出。確認は
実際に使える例ではないけれど、例えば wlan0 を dummy 0 にミラーするのであれば
root になって長いコマンド。wlan0 からの出ていく方は
disc prio を wlan0 の最初 (root) として 10 という ID 割り当て。# tc qdisc add dev wlan0 root handle 10: prio # tc filter add dev wlan0 parent 10: prio 10 \ > protocol all u32 match u32 0 0 flowid 10:1 \ > action mirred egress mirror dev dummy0
その 10 を親として 10番という順番で u32 すべてマッチのフィルタを追加。
結果は 10:1 に流すけど 10:1 という qdisc はないのでデフォルト何もせず。
アクションとして dummy0 にミラーを送出。確認は
wlan0 に入ってくる方は# tc qdisc ls dev wlan0 qdisc prio 10: root refcnt 5 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 # tc filter ls dev wlan0 handle 10: filter parent 10: protocol all pref 10 u32 filter parent 10: protocol all pref 10 u32 fh 800: ht divisor 1 filter parent 10: protocol all pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 10:1 match 00000000/00000000 at 0 action order 1: mirred (Egress Mirror to device dummy0) pipe index 1 ref 1 bind 1
こちら ingress は ID が ffff と決まっている他は、入ってくる方と同じ。確認は# tc qdisc add dev wlan0 ingress # tc filter add dev wlan0 parent ffff: prio 10 \ > protocol all u32 match u32 0 0 flowid ffff:1 \ > action mirred egress mirror dev dummy0
これで wlan0 を promisc モードにして dummy0 で tcpdump# tc qdisc ls dev wlan0 ingress qdisc prio 10: root refcnt 5 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 qdisc ingress ffff: parent ffff:fff1 ---------------- # tc filter ls dev wlan0 handle ffff: filter protocol all pref 10 u32 filter protocol all pref 10 u32 fh 800: ht divisor 1 filter protocol all pref 10 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid ffff:1 match 00000000/00000000 at 0 action order 1: mirred (Egress Mirror to device dummy0) pipe index 2 ref 1 bind 1
とか。ドキュメントとして iproute-doc にも含まれていないのでソースを# ip link set wlan0 promisc on # tcpdump -nevxi dummy0
とかapt-get source iproute
とかで持ってきた $SRC/doc/actions/mirred-usage を参照。iproute 全般はで、以下その mirred-usage の抜粋意訳、中途訳git clone git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git
普通のイーサネットスイッチでのミラーやリダイレクトの違いは u32 フィ ルタ (classifier) でミラーするフローを選択できること。 mirred アクションの使い方: mirred <DIRECTION> <ACTION> [index INDEX] <dev DEVICENAME> DIRECTION := ingreee か egress ACTION := mirror か redirect INDEX は特定のポリシ ID DEVICENAME はデバイス名 ACTION - mirror はコピーを指定されたデバイスに送る ACTION - redirect はパケットを横取りして指定されたデバイスに送る (なのでローカルプロセスには渡らない) * 禁止事項 A. ループさせない eth0 を eth1 にリダイレクト。更に eth1 を eth0 にリダイレクトなど B. IFB デバイスから別の IFB デバイスにリダイレクトしない ホストはクラッシュしないけどパケット全てが drop される A は再帰によるデバイスキューのロック輻輳。 B は送信ロック (の輻輳?) ---- サンプル 1. eth0 に入ってくるパケットを eth1 にミラー # tc qdisc add dev eth0 ingress # tc filter add dev eth0 parent ffff: protocol ip prio 10 u32 \ > match u32 0 0 flowid 1:2 action mirred egress mirror dev eth1 mirror を redirect に変えるとコピーせずオリジナルパケットを eth1 に送出する 2. lo から eth0 に横取り lo の ingress に届く全てのパケットを eth0 にリダイレクト # tc qdisc add dev lo ingress # tc filter add dev lo parent ffff: protocol ip prio 10 u32 \ > match u32 0 0 flowid 1:2 action mirred egress redirect dev eth0 この設定をしたホストで ping -c 127.0.0.1 としても失敗する。 eth0 の先に接続したホストで tcpdump してみると... XXX このフィルタ内 redirect を mirror に置き換えて # tc filter add dev lo parent ffff: protocol ip u32 \ > match u32 0 0 flowid 1:2 action mirred egress mirror dev eth0 とすると tc 設定をしたホストと、この eth0 の先にある両方のホスト で、パケットを見ることができる。つまりは ping が成功する 3. もうちょっとイカしたサンプル lo の ingress にて 10個の内 1個のパケットがランダムに別ホストへ --- eth0 へ --- 送る (ランダムは netrand generator を使う) XXX: action drop --- 少し違う気がする... # tc filter add dev lo parent ffff: protocol ip prio 10 u32 \ > match u32 0 0 flowid 1:2 \ > action drop random determ ok 10 > action mirred egress mirror dev eth0 4. 10.0.0.9 から来て eth0 に出ていくパケット (ローカルの IP か forwarding するか) が 100Kbps を超えると eth1 にリダイレクト # tc qdisc add dev eth0 handle 1:0 root prio # tc filter add dev eth0 parent 1:0 protocol ip prio 6 u32 \ > match ip src 10.0.0.9/32 flowid 1:16 \ > action police rate 100kbit burst 90 ok \ > action mirred egress mirror dev eth1 5. もっと面白いサンプルとしてフローを (デフォルト全て drop する) dummy デバイスにミラーして tcpdump 192.168.200.200/32 からのパケットをポリシングして、この送出が 100Kbps を超えてほしくないとか # tc qdisc add dev eth0 handle 1:0 root prio # tc filter add dev eth0 pareht 1: protocol ip prio 10 u32 \ > match ip src 192.168.200.200/32 flowid 1:2 \ > action police rate 100kbit burst 90 drop eth0 で tcpdump を実行すると 192.168.200.200/32 からのパケット送 出がドロップされようと、されまいと全て見ることができる (tcpdump は egress される全てのパケットを見せるから)。ルールを少しだけ拡張 して make out したパケットを見るためには # tc qdisc add dev eth0 handler 1:0 root prio # tc filter add dev eth0 parent 1: protocol ip prio 10 u32 \ > match ip src 192.168.200.200/32 flowid 1:2 \ > action police rate 100kbit burst 90 drop \ > action mirred egress mirror dev dummy0 dummy0 で tcpdump を動かして、make out されたパケットだけを見る # tcpdump -n -i dummy0 -x -e -t mirror を redirect に置き換えると、これらパケットは XXX 一切 make out できなくなる
2011年4月18日月曜日
obs600-tools.deb # utils の方が良かった?
obs600 で debian squeeze の続編。deb パッケージにない
バイナリはこんなイメージ
ソースはこんなイメージ
SSDLinux のソースから autotools 環境作成のスクリプトと言うかコマンド列挙は
こんなイメージ
zlib1g zlib1g-dev が必要なのでそれぞれ powerpc のdeb バイナリ
apt-cross というツールはなくなってしまい、pdebuild-cross は使い方わからず...
- flashcfg
- runled
- pshd
バイナリはこんなイメージ
ソースはこんなイメージ
SSDLinux のソースから autotools 環境作成のスクリプトと言うかコマンド列挙は
こんなイメージ
zlib1g zlib1g-dev が必要なのでそれぞれ powerpc のdeb バイナリ
- zlib1g_1.2.3.4.dfsg-3_powerpc.deb
- zlib1g-dev_1.2.3.4.dfsg-3_powerpc.deb
とするんだけど、バージョン上がった場合の確認が面倒。$ dpkg-cross --build --arch powerpc *.deb
apt-cross というツールはなくなってしまい、pdebuild-cross は使い方わからず...
2011年4月16日土曜日
softdog / CONFIG_WATCHDOG_NOWAYOUT - 勘違い
nowayout と Magic Close の関係を思いっきり勘違い。先日のエントリでは
何とでも読み取り可。nowayout 指定しても Magic Close はできると思い込
んでた。が、nowayout の方が強いと言うか、nowayout を指定してしまうと
Magic Close すらできない。
drivers/watchdog/softdog.c の中 MODULE_PARM で探すと
で Magic Close の場合は
/dev/watchdog
が開きっぱになっているので、続けて
/dev/watchdog に送ったけどリブート。で最初の通り nowayout 指定
すると Magic Close も何のその。書き込みなくば再起動という結果。
とってもシンプルだけど先の swd.sh は
せずの停止は
何とでも読み取り可。nowayout 指定しても Magic Close はできると思い込
んでた。が、nowayout の方が強いと言うか、nowayout を指定してしまうと
Magic Close すらできない。
- soft_margin: int
- Watchdog soft_margin in seconds.
(0 < soft_margin < 65536, default=60) - nowayout: int
- Watchdog cannot be stopped once started
(default= [config WATCHDOG_NOWAYOUT?]) - soft_noboot: int
- Softdog action, set to 1 to ignore reboots, 0 to reboot
SIG_INT で止められたら Magic Close。root になってまずは nowayout なし#!/bin/sh exec 3> /dev/watchdog trap "echo 'send V'; echo -n V >&3; exit 0" INT while :; do echo >&3 sleep 4 done
で Magic Close の場合は
Magic Close しない場合は (rmmod しないで引き続き)# modprobe softdog soft_margin=10 nowayout=0 soft_noboot=1 # ./swd.sh ^Csend V (しばらく待った後に Ctrl-c) # dmesg | tail ... [ 3010.493992] Software Watchdog Timer: 0.07 initialized. soft_noboot=1 soft_margin=10 sec (nowayout= 0)
リブートだけど soft_noboot 指定したのでメッセージだけ。# ./swd.sh ^Z (Ctrl-z) [1]+ Stopped ./swd.sh # (しばらく - soft_margin で指定した10 秒以上待つ) # dmesg | tail ... [ 3010.493992] Software Watchdog Timer: 0.07 initialized. soft_noboot=1 soft_margin=10 sec (nowayout= 0) [ 3241.819563] SoftDog: Triggered - Reboot ignored.
次に nowayout 指定すると# fg ./swd.sh ^Csend V (Ctrl-c) # rmmod softdog
'V' を# modprobe softdog soft_margin=10 nowayout=1 soft_noboot=1 # ./swd.sh ^Csend V (Ctrl-c) # (10 秒以上待って) # dmesg | tail ... [ 3757.016487] Software Watchdog Timer: 0.07 initialized. soft_noboot=1 soft_margin=10 sec (nowayout= 1) [ 3811.572991] SoftDog: Unexpected close, not stopping watchdog! [ 3821.580111] SoftDog: Triggered - Reboot ignored.
すると Magic Close も何のその。書き込みなくば再起動という結果。
とってもシンプルだけど先の swd.sh は
でソレナリには動くらしい。nowayout 指定せず Magic Close 使ってリブートnohup ./swd.sh > /var/log/watchdog.log 2>&1 &
せずの停止は
# killall -INT swd.sh # cat /var/log/swd.log nohup: ignoring input send V
2011年4月13日水曜日
PIL で bin2png - その 2
昔? telnet しか許されていないホストで base64 したバイナリをコピペしたこと
思い出した...鶏卵、ブートストラップ。ソレやるか? で昨日の
てないし、ムダな事ばっかじゃん。と思った方は是非メンテしてやってください。
コピペして bin2png.py とかで保存した後は、こちらも昨日のイメージを保存して
サイズ大きいファイルはシャレになりませんが、ブログに貼り付ける程度なら...
思い出した...鶏卵、ブートストラップ。ソレやるか? で昨日の
> 超てきとーいいかげんにパディングを貼り付けた結果、ながいブログエントリぃー。pack / unpack の使い方もわかっ
てないし、ムダな事ばっかじゃん。と思った方は是非メンテしてやってください。
コピペして bin2png.py とかで保存した後は、こちらも昨日のイメージを保存して
とかで。$ ./bin2png.py -d patch-2.6.38.2.gz.png -o patch-2.6.38.2.gz
サイズ大きいファイルはシャレになりませんが、ブログに貼り付ける程度なら...
#!/usr/bin/python import sys, os, math, struct import getopt, logging import Image log = logging.getLogger() def sqrint(n): r = math.ceil(math.sqrt(n) + 0.1) return (int(r), int(math.pow(r, 2) - n)) def encode(srcfp, dstfp): # calc sizes fsize = os.fstat(srcfp.fileno()).st_size log.debug("encode size: %d" % fsize) qfsize = fsize / 4 sides, padlen = sqrint(qfsize) tupad = struct.unpack('BBBB', struct.pack('!L', fsize)) # create data data = [tupad] for i in range(qfsize): data.append(struct.unpack('BBBB', srcfp.read(4))) nremain = fsize % 4 data.append(struct.unpack('BBBB', srcfp.read(nremain) + '\x00' * (4 - nremain))) data.extend(((0, 0, 0, 0),) * (padlen / 4 - 1)) # write out im = Image.new('RGBA', (sides, sides)) im.putdata(data) im.save(dstfp, 'PNG') def decode(srcfp, dstfp): im = Image.open(srcfp) imgcore = im.getdata() # needs checking mode? fsize = struct.unpack("!L", struct.pack("BBBB", *imgcore[0]))[0] log.debug("decode size: %d" % fsize) data = list(imgcore)[1:] b = bytearray() [b.extend(d) for d in data] dstfp.write(b[:fsize]) def usage(): print >> sys.stderr, '''%s - convert file to png image -e | --encode specify encoding file -d | --decode specify decoding file -o | --outfile stdout if not specified -h | --help show (this) usage message -v | --verbose set logging level to DEBUG [default is INFO] ''' % sys.argv[0] def main(): try: opts, args = getopt.getopt(sys.argv[1:], 'e:d:o:hv', ['encode', 'decode', 'outfile', 'help', 'verbose']) except getopt.GetoptError, err: log.error(err) usage() sys.exit(2) isencode = False isdecode = False srcfp = None # 3.0: dstfp = sys.stdout.buffer? dstfp = os.fdopen(sys.stdout.fileno(), 'wb') for o, a in opts: if o in ("-h", "--help"): usage() sys.exit(0) elif o in ("-v", "--verbose"): log.setLevel(logging.DEBUG) elif o in ("-e", "--encode"): isencode = True srcfp = file(a, 'rb') elif o in ("-d", "--decode"): isdecode = True srcfp = file(a, 'rb') elif o in ("-o", "--outfile"): dstfp = file(a, 'wb') if not (isencode ^ isdecode): log.error("invalid action") usage() sys.exit(1) isencode and encode(srcfp, dstfp) isdecode and decode(srcfp, dstfp) if __name__ == "__main__": logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s') main()
PIL で bin2png
ちょっと驚き... こちら blogger 然りでバイナリデータをブログに載せたい時って
どうすれば良いやら。長いテキストとかであれば a2ps | enscript で PostScript
にした後 ps2pdf とか。で PDF がアップロードできるか知らないし、やっぱイメー
ジデータでしょう。
と探すもステガノグラフィ (outguess steghide snowdrop) まで凝った話でもなく、
サイズも大きくなるし a2png だって? と試すもそのまま a2ps の png 版だったり。
sourceforge にあるも Java だったり...
むーん libpng とか使って自作? とか思い始めたところ # 長い前置き
Python Imaging Library (PIL) のハンドブック眺めてみたところ、ソレらしきメソ
ッドが。でお試し
探すのも面倒がってサイズもおかしいど、もちろん可逆で
いいかげんにパディングしたものを貼ってみるテスト
どうすれば良いやら。長いテキストとかであれば a2ps | enscript で PostScript
にした後 ps2pdf とか。で PDF がアップロードできるか知らないし、やっぱイメー
ジデータでしょう。
と探すもステガノグラフィ (outguess steghide snowdrop) まで凝った話でもなく、
サイズも大きくなるし a2png だって? と試すもそのまま a2ps の png 版だったり。
sourceforge にあるも Java だったり...
むーん libpng とか使って自作? とか思い始めたところ # 長い前置き
Python Imaging Library (PIL) のハンドブック眺めてみたところ、ソレらしきメソ
ッドが。でお試し
PNG フォーマットとか全く知らないので new() のモードわからないし、最大約数を$ python Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) [GCC 4.4.5] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> fname = "patch-2.6.38.2.gz" >>> import os >>> os.stat(fname).st_size 52847 >>> f = open(fname) >>> b = bytearray() >>> b.extend(f.read()) >>> len(b) 52847 >>> import Image >>> im = Image.new('L', (52847, 1)) >>> im.putdata(b) >>> im.save("2.6.38.2.png") >>> (Ctrl-D) $ ls -l 2.6.38.2.png -rw-r--r-- 1 chamaken chamaken 52921 2011-04-12 23:35 2.6.38.2.png
探すのも面倒がってサイズもおかしいど、もちろん可逆で
おどろいた。この 2.6.38.2.png を貼ると大変なことになりそうなので超てきとー$ python Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48) [GCC 4.4.5] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import Image >>> im = Image.open("2.6.38.2.png") >>> f = open("write.back", 'wb') >>> f.write(bytearray(im.getdata())) >>> f.close() >>> (Ctrl-d) $ cmp patch-2.6.38.2.gz write.back $
いいかげんにパディングしたものを貼ってみるテスト
2011年4月7日木曜日
obs600 で 再度 debian squeeze - その 3 - で一段落
お待ちかね。OBS600 側
- CF 積んで
- ETHER-0 に UTP ケーブル接続して
- INIT ボタンをボールペンで押さえて
- パーティション分割 & ファイルシステム作成 8G を 6G / 2G に分割。冗長だけど全部
- マウント & ファイル取得準備
- 開発機側のファイルツリーをごっそり取得
- チルっと
- /uImage.initrd-cfboot の作成
$SSDSRC/usr/src/contrib/debootstrap/post-debootstrap $SSDSRC/usr/src/contrib/developers/kimura/lenny_based_firmware/uimage/create_uImage.sh - 普通の? 必須修正
- オリジナルツールのコピー 後でやっつけパッケージ作るけど、とり急ぎ
- CF ブートとしてリブート
# fdisk /dev/sda Command (m for help): p Disk /dev/sda: 8019 MB, 8019099648 bytes 247 heads, 62 sectors/track, 1022 cylinders Units = cylinders of 15314 * 512 = 7840768 bytes Device Boot Start End Blocks Id System Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-1022, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-1022, default 1022): +6144M Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (786-1022, default 786): Using default value 786 Last cylinder or +size or +sizeM or +sizeK (786-1022, default 1022): Using default value 1022 Command (m for help): p Disk /dev/sda: 8019 MB, 8019099648 bytes 247 heads, 62 sectors/track, 1022 cylinders Units = cylinders of 15314 * 512 = 7840768 bytes Device Boot Start End Blocks Id System /dev/sda1 1 785 6010714 83 Linux /dev/sda2 786 1022 1814709 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. sd 0:0:0:0: [sda] 15662304 512-byte hardware sectors: (8.01 GB/7.46 GiB) sd 0:0:0:0: [sda] Write Protect is off sd 0:0:0:0: [sda] Assuming drive cache: write through sda: sda1 sda2 sd 0:0:0:0: [sda] 15662304 512-byte hardware sectors: (8.01 GB/7.46 GiB) sd 0:0:0:0: [sda] Write Protect is off sd 0:0:0:0: [sda] Assuming drive cache: write through sda: sda1 sda2 Syncing disks. # mke2fs -j -b 4096 -L / /dev/sda1 mke2fs 1.39 (29-May-2006) Filesystem label=/ OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) 752192 inodes, 1502678 blocks 75133 blocks (5.00%) reserved for the super user First data block=0 46 block groups 32768 blocks per group, 32768 fragments per group 16352 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 28 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
# mount /dev/sda1 /mnt kjournald starting. Commit interval 5 seconds EXT3 FS on sda1, internal journal EXT3-fs: mounted filesystem with ordered data mode. # ip link ls eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:1a:88:0c3:12:bb brd ff:ff:ff:ff:ff:ff inet 192.168.253.254/24 brd 192.168.253.255 scope global eth0 # ping -c 4 192.168.253.1 PING 192.168.253.1 (192.168.253.1): 56 octets data 64 octets from 192.168.253.1: icmp_seq=0 ttl=64 time=2.2 ms 64 octets from 192.168.253.1: icmp_seq=1 ttl=64 time=0.3 ms 64 octets from 192.168.253.1: icmp_seq=2 ttl=64 time=0.3 ms 64 octets from 192.168.253.1: icmp_seq=3 ttl=64 time=0.3 ms --- 192.168.253.1 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.3/0.7/2.2 ms
(長いコマンドライン) # ssh chamaken@192.168.253.1 \ > "cd ~/obs600/rootfs && tar -cp --numeric-owner -f - *" \ > | tar -xpv --numeric-owner -f - -C /mnt The authenticity of host '192.168.253.1 (192.168.253.1)' can't be established. RSA key fingerprint is d1:72:98:8b:42:11:e6:a6:7b:c8:6f:8b:95:ba:a3:a8. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.253.1' (RSA) to the list of known hosts. Password: ... var/cache/debconf/ var/spool/
# chroot /mnt I have no name!@ssd-linux:/# ls -1 bin boot debootstrap dev etc home lib lib64 lost+found mnt proc sbin selinux sys tmp usr var I have no name!@ssd-linux:/# cd /debootstrap I have no name!@ssd-linux:/debootstrap# ./debootstrap --second-stage I: Installing core packages... ... I: Base system installed successfully. I have no name!@ssd-linux:/debootstrap#
いろいろ叱られるし、長いけどI have no name!@ssd-linux:/debootstrap# cd I have no name!@ssd-linux:~# ls -1 linux-image-2.6.32_0.91_powerpc.deb obs600.dtb vmlinux.bin.gz
また長いコマンドライン。くどいけど参照I have no name!@ssd-linux:~# dpkg -i linux-image-2.6.32_0.91_powerpc.deb Selecting previously deselected package linux-image-2.6.32. (Reading database ... 9174 files and directories currently installed.) Unpacking linux-image-2.6.32 (from linux-image-2.6.32_0.91_powerpc.deb) ... Done. Setting up linux-image-2.6.32 (0.91) ... Hmm. There is a symbolic link /lib/modules/2.6.32/build However, I can not read it: No such file or directory Therefore, I am deleting /lib/modules/2.6.32/build Hmm. The package shipped with a symbolic link /lib/modules/2.6.32/source However, I can not read the target: No such file or directory Therefore, I am deleting /lib/modules/2.6.32/source Running depmod. Examining /etc/kernel/postinst.d. run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.32 /boot/vmlinux-2.6.32 update-initramfs: Generating /boot/initrd.img-2.6.32 df: Warning: cannot read table of mounted file systems: No such file or directory warning: can't open /etc/mtab: No such file or directory warning: can't open /etc/mtab: No such file or directory I have no name!@ssd-linux:~#
I have no name!@ssd-linux:~# mkimage -n "original.$(date +'%FT%T')" \ > -A ppc -O linux -T multi -C gzip \ > -d vmlinux.bin.gz:/boot/initrd.img-2.6.32:obs600.dtb \ > /uImage.initrd-cfboot Image Name: original.2011-04-01T12:34:56 Created: Tue Apr 1 12:34:56 2011 Image Type: PowerPC Linux Multi-File Image (gzip compressed) Data Size: 3847277 Bytes = 3757.11 kB = 3.67 MB Load Address: 00000000 Entry Point: 00000000 Contents: Image 0: 1925764 Bytes = 1880.63 kB = 1.84 MB Image 1: 1913443 Bytes = 1868.60 kB = 1.82 MB Image 2: 8053 Bytes = 7.86 kB = 0.01 MB I have no name!@ssd-linux:~#
そのほかI have no name!@ssd-linux:~# passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully I have no name!@ssd-linux:~# cd /etc I have no name!@ssd-linux:/etc# cp inittab inittab.dpkg-dist I have no name!@ssd-linux:/etc# vi inittab ... I have no name!@ssd-linux:/etc# diff -uw inittab.dpkg-dist inittab --- inittab.dpkg-dist 2011-03-31 12:34:56.000000000 +0000 +++ inittab 2011-03-31 12:34:56.000000000 +0000 @@ -51,16 +51,16 @@ # Note that on most Debian systems tty7 is used by the X Window System, # so if you want to add more getty's go ahead but skip tty7 if you run X. # -1:2345:respawn:/sbin/getty 38400 tty1 -2:23:respawn:/sbin/getty 38400 tty2 -3:23:respawn:/sbin/getty 38400 tty3 -4:23:respawn:/sbin/getty 38400 tty4 -5:23:respawn:/sbin/getty 38400 tty5 -6:23:respawn:/sbin/getty 38400 tty6 +# 1:2345:respawn:/sbin/getty 38400 tty1 +# 2:23:respawn:/sbin/getty 38400 tty2 +# 3:23:respawn:/sbin/getty 38400 tty3 +# 4:23:respawn:/sbin/getty 38400 tty4 +# 5:23:respawn:/sbin/getty 38400 tty5 +# 6:23:respawn:/sbin/getty 38400 tty6 # Example how to put a getty on a serial line (for a terminal) # -#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 +T0:23:respawn:/sbin/getty -L ttyS0 115200 vt100 #T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100 # Example how to put a getty on a modem line. I have no name!@ssd-linux:/etc#
必要に応じて作成、変更 - in debian's way で
I have no name!@ssd-linux:/etc# exit # cd /usr/sbin # cp flashcfg runled pshd /mnt/usr/sbin/
# flashcfg -h usage: flashcfg Show this. flashcfg -b Show current boot setting flashcfg -c rootdev Change root file system [initrd|cf|sda-sdd[1-8]] initrd - Boot from FlashROM, / on Ramdisk sda-sdd[1-8] - Boot from FlashROM, / on CF cf - Boot from CF, / on CF flashcfg -f boot_image Load boot image to flash flashcfg -s list_file Save files to Parameter area flashcfg -S list_file Save files to User area flashcfg -x Restore files from Parameter area flashcfg -X Restore files from User area flashcfg -d Delete saved files from Parameter area flashcfg -D Delete saved files from User area flashcfg -E env_file Save params to U-Boot Environment area flashcfg -L env_file Load params from U-Boot Environment area flashcfg -h Show this. # flashcfg -c cf # shutdown -r now
2011年4月6日水曜日
obs600 で 再度 debian squeeze - その 2
また引用。
OpenBlockS 600D - 開発環境の構築
クロス開発 (VMware等のx86環境上での開発)
- ベースとなる環境の用意 タイトル通り squeeze (amd64) で
- emdebian のリポジトリを追加します
- sources.list の準備
-
/etc/apt/sources.list.d に以下emdebian.list というファイルを追加# cat /etc/apt/sources.list.d/emdebian.list deb http://www.emdebian.org/debian/ squeeze main deb-src http://www.emdebian.org/debian/ squeeze main
- アップデート
$ sudo aptitude update
- キーリングを追加
-
$ sudo aptitude install emdebian-archive-keyring
- 必要なパッケージを追加します
- カーネルのソースコードを展開します ありがたいことに SSDLinux のパッチもあるので上記通り linux-source-2.6.32 で。
- 開発用ディレクトリの作成と SSD/Linux のソース取得、展開
- テンポラリディレクトリ作成
$ mkdir -p $HOME/obs600/tmp
- src.tgz の取得
$ wget -nd -N -P $HOME/obs600/tmp \ > http://ftp.plathome.co.jp/pub/ssdlinux/0.5-LATEST/source/src.tgz
- 各種展開
$ cd $HOME/obs600 $ tar xzf tmp/src.tgz -C tmp $ tar xjf /usr/src/linux-source-2.6.32.tar.bz2 -C .
- カーネルパッケージ作成
- カーネルパッチあて
- SSD/Linux のソース usr/src/mkdist/kernel/2.6.32/patches/ に各種パッチあり
$ cd linux-source-2.6.32 $ for i in ../tmp/usr/src/mkdist/kernel/2.6.32/patches/*.patch; do > patch -p1 $i > done ... patching file Makefile Reversed (or previously applied) patch detected! Assume -R? [n] Apply anyway? [n] (ここはエンター。デフォルトの n で OK) Skipping patch. 4 out of 4 hunks ignored -- saving rejects to file Makefile.rej patching file scripts/Makefile.modinst
- ごめんなさい -
scripts.patch
なので make 時に -D NOGZIP する+ifdef NOGZIP cmd_modules_install = mkdir -p $(2); cp $@ $(2) ; $(mod_strip_cmd) $(2)/$(notdir $@) +else + cmd_modules_install = mkdir -p $(2); cp $@ $(2) ; $(mod_strip_cmd) $(2)/$(notdir $@) ;gzip -9 $(2)/$(notdir $@) +endif
- .config などのコピー
- ワーキングディレクトリは
$HOME/obs600/linux-source-2.6.32 のままで$ cp ../tmp/usr/src/mkdist/kernel/2.6.32/dot.config.powerpc-obs600 dot.config $ cp dot.config .config $ cp ../tmp/usr/src/mkdist/kernel/2.6.32/obs600.dts arch/powerpc/boot/dt $ cp ../tmp/usr/src/mkdist/kernel/2.6.32/obs600.dts arch/powerpc/boot/dts/
- menuconfig
menuconfig はお好みで gconfig とか。DRBD 使ってみるので$ make-kpkg -j4 --arch powerpc --config menuconfig configure
その他お好みで。個人的には cgroup と namespace veth など。diff 取ると- Device Drivers ---> Connector を M に
- Device Drivers ---> Block Devices ---> DRBD も M に
といったあたり。削除されてる$ diff -uw dot.config .config +CONFIG_CONNECTOR=m +CONFIG_BLK_DEV_DRBD=m
は http://download.filesystems.org/unionfs/unionfs-2.x/-CONFIG_UNION_FS=y
あたりからパッチ持ってきてあてる必要あり。でも CF ブートなので割愛。- kernel_image
$ MAKEFLAGS="NOGZIP=1" make-kpkg -j4 --rootcmd=fakeroot --arch=powerpc \ > --revision 0.91 --initrd kernel_image
- その他 uImage に必要なもの
- dtb
- 参照:
$SSDSRC/usr/src/contrib/debootstrap/post-debootstrap $SSDSRC/usr/src/contrib/developers/kimura/lenny_based_firmware/uimage/create_uImage.sh
$ make ARCH=powerpc obs600.dtb /home/chamaken/obs600/linux-source-2.6.32/scripts/dtc/dtc -O dtb -o arch/powerpc/boot/obs600.dtb -b 0 -p 1024 /home/chamaken/obs600/linux-source-2.6.32/arch/powerpc/boot/dts/obs600.dts DTC: dts->dtb on file "/home/chamaken/obs600/linux-source-2.6.32/arch/powerpc/boot/dts/obs600.dts" $ cp arch/powerpc/boot/obs600.dtb ../
- vmlinux.bin.gz
$ powerpc-linux-gnu-objcopy -O binary vmlinux ../vmlinux.bin $ cd .. $ gzip vmlinux.bin $ ls -1 linux-image-2.6.32_0.91_powerpc.deb linux-source-2.6.32 obs600.dtb tmp vmlinux.bin.gz
- (何と言えばよいのか) 開発機側で OBS600 バイナリのファイルツリー準備 include のパッケージは最低限。お好みで... drbb8-utils も
最後の二行は今後のモロモロのために$ sudo aptitude install \ > build-essential u-boot libc6-powerpc-cross \ > libc6-dev-powerpc-cross binutils-powerpc-linux-gnu gcc-4.4-powerpc-linux-gnu \ > g++-4.4-powerpc-linux-gnu \ > autoconf dpkg-cross linux-headers-2.6.32-5-common linux-source-2.6.32 \ > kernel-package libncurses5-dev
ここまでやっておくと次回 obs600 側になるので
最後の chmod 忘れずに$ su # debootstrap --foreign --arch=powerpc \ > --include "ssh less u-boot initramfs-tools" \ > squeeze rootfs http://ftp.jp.debian.org/debian I: Retrieving Release I: Retrieving Packages I: Validating Packages ... I: Extracting xz-utils... I: Extracting zlib1g... # ls -1 linux-image-2.6.32_0.91_powerpc.deb linux-source-2.6.32 obs600.dtb rootfs tmp vmlinux.bin.gz # cp linux-image-2.6.32_0.91_powerpc.deb obs600.dtb vmlinux.bin.gz rootfs/root/ # chmod 0755 rootfs/root
2011年4月5日火曜日
obs600 で 再度 debian squeeze - その 1
まずはおかしくなった時の準備。tftp サーバを適当な debian マシンにインストールしておく
Q. ファームウェアアップデートを実行したら起動しなくなりました。どうすれば復旧できますか。
A. TFTP サーバを利用したファームウェアのアップデートを行うことで復旧できます。
ファームウェアアップデートを実行したら起動しなくなりました。どうすれば復旧できますか。からの引用
Q. ファームウェアアップデートを実行したら起動しなくなりました。どうすれば復旧できますか。
A. TFTP サーバを利用したファームウェアのアップデートを行うことで復旧できます。
- パッケージのインストール
- ファームウェアをダウンロードしておき TFTP サーバ側で指定した場所におきます。 TFTP サーバのディレクトリに置く
- ETHER-0 と PC を添付のクロス・ケーブル (緑色) で接続します。 アドレス追加。ハブやスイッチ介しても同じ L2 ドメインであればクロスケーブルじゃなくてもOK
- 本体の ディップ・スイッチ 2 を ON にします。
- 電源を入れます。 待つことしばし
- ファームウェアのアップデートが完了しますと本体の緑色の LED が点滅します。
- 電源を抜き、ディップ・スイッチ 2 を OFF にします。
- 追記 - INIT ボタンを押しながら電源を入れる いや、CF 起動でおかしな状態にして数日放置。で tftp ブートでイメージ読み込んだ後、度々忘れるので...
IPv6 無効にしていると上記エラー。$ sudo apt-get install tftpd-hpa (ディレクトリはデフォルトの /srv/tftp) Starting HPA's tftpd: in.tftpdinvoke-rc.d: initscript tftpd-hpa, action "start" failed. dpkg: error processing tftpd-hpa (--configure): subprocess installed post-installation script returned error exit status 71 configured to not write apport reports Errors were encountered while processing: tftpd-hpa E: Sub-process /usr/bin/dpkg returned an error code (1)
なんて出力があるのでApr 5 21:06:29 devobs600 in.tftpd[16485]: cannot open IPv6 socket, disable IPv6: Address family not supported by protocol Apr 5 21:06:29 devobs600 in.tftpd[16485]: Cannot set nonblock flag on socket: Bad file descriptor
# diff -uw tftpd-hpa.dpkg-dist tftpd-hpa --- tftpd-hpa.dpkg-dist 2011-04-05 08:09:46.000000000 +0900 +++ tftpd-hpa 2011-04-05 08:09:56.000000000 +0900 @@ -3,4 +3,4 @@ TFTP_USERNAME="tftp" TFTP_DIRECTORY="/srv/tftp" TFTP_ADDRESS="0.0.0.0:69" -TFTP_OPTIONS="--secure" +TFTP_OPTIONS="--secure -4"
$ su # wget -nd -N -P /srv/tftp \ > http://ftp.plathome.co.jp/pub/OBS600/0.5-LATEST/powerpc-obs600/installation/uImage.initrd
# ip addr ls eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:ed:cb:a9:87:65 brd ff:ff:ff:ff:ff:ff inet 10.1.2.3/16 brd 10.1.255.255 scope global eth0 # ip addr add 192.168.253.1/24 dev eth0 # ip addr ls eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:ed:cb:a9:87:65 brd ff:ff:ff:ff:ff:ff inet 10.1.2.3/16 brd 10.1.255.255 scope global eth0 inet 192.168.253.1/24 scope global eth0
登録:
投稿 (Atom)
ブログ アーカイブ
-
▼
2011
(21)
-
▼
4月
(11)
- freeradius rlm_pap on debian squeeze
- TIPS: KVM (qemu) for debian squeeze - その 1
- オレオレ証明書の証明書更新
- port mirror on linux
- obs600-tools.deb # utils の方が良かった?
- softdog / CONFIG_WATCHDOG_NOWAYOUT - 勘違い
- PIL で bin2png - その 2
- PIL で bin2png
- obs600 で 再度 debian squeeze - その 3 - で一段落
- obs600 で 再度 debian squeeze - その 2
- obs600 で 再度 debian squeeze - その 1
-
▼
4月
(11)