# on debian squeeze ## Apache WebDAV 調子芳しくなく... ## 素直な設定のままでいろいろイジらん方が良さげ また唐突、絶対に覚えられないのでメモ。地味に必要なヒトいるかも。KVM と言 うか QEMU の話で、-usbdevice オプションは古いから -device オプションを使 おう。調べたところ本家? に指定方法アリ。ドキュメント眺めたり debian git のソース取ってきたりしたところ -drive 側で -drive id=usbmem,file=thinstick.img,serial=01234567890ABCDEF でイケると思いきや、常に "1" に。また調べると、こんなパッチ があったけど debian のソース - git://git.debian.org/git/collab-maint/qemu-kvm.git ではバージョン 0.14.0+dfsg-1~tl からで squeeze にバックポートもないし、 このバージョンでバイナリパッケージ作るも依存関係、他パッケージのバージョ ン合わずインストールできず。で、いつものよぉおーに...ムリヤリ --- hw/usb-msd.c.dpkg-dist 2011-05-19 22:52:54.000000000 +0900 +++ hw/usb-msd.c 2011-05-19 22:53:00.000000000 +0900 @@ -296,7 +296,11 @@ break; case 3: /* serial number */ + if (s->dinfo && s->dinfo->serial) { + ret = set_usb_string(data, s->dinfo->serial); + } else { ret = set_usb_string(data, "1"); + } break; default: goto fail; 多分モニタからは指定できず、起動時のオプション指定のみしか有効にならない。 でもまぁ kvm -m 512M -net tap -net nic,model=e1000 \ -device piix3-usb-uhci -device usb-storage,drive=usbmem \ -drive id=usbmem,file=memstick.img,serial=0123456789ABCDEF で動くことは動いてる。根性ナシで手抜き、こっちも忘れそうだけど $ dpkg-buildpackage -b -rfakeroot -us -uc ... $ su ... # mv /usr/bin/kvm /usr/bin/kvm.dpkg-dist # cp debian/qemu-kvm/usr/bin/kvm /usr/bin でゴマカシ。
2011年5月19日木曜日
USB Storage iSerial for KVM
2011年5月3日火曜日
WebDAV quota on linux
あまり apache に限った話ではなく、いくつか方法があると思うのだけど、思い 付いたところ。ユーザ WebDAV 用のローカル側にてディレクトリを 1. オーナーをユーザ、グループを www-data。合わせて SUID して user quota chmod 4770 $HOME/public_html/webdavdir でもディレクトリの SUID は意味がないと言うか、許されちゃいない。ここで も少し触れられているし、じゃったら FreeBSD をつかえぇ。位の話らしい。 できる、できないではなくパッチもあり、そんなに難しいことではなさそうな ので、セキュリティの問題で、やらないっぽい。あるいは GFS2 なら mount オプションにあるらしいけど、そこまでやる元気もなし 2. オーナーを www-data として SGID & group quota グループを各ユーザ毎に --- chamaken ユーザに chamaken グループなど作 成してグループで group quota は umask を変更すれば可能。 変更しないとディレクトリ掘られた場合に削除できなくなってしまう。 Dealing With Dashcode, Part 2: Apache, WebDAV, and umasks と同じ事かな umask を 022 から 002 に変更するには、シェルユーザとしては /etc/profile や $HOME/.profile あるいは /etc/login.defs の UMASK など。 apache の場合は /etc/apache2/envvars に umask 002 を追記してあげれば ば良い ``らしい'' 3. POSIX ACL & group quota 上の ``Dealing With Dashcode'' 眺めていて、何とかならんのかい。と試し ていたらできちゃった程度なので見識ある方ご意見いただけると、とっても ありがたいです。 先日の /etc/fstab に acl オプション追加 # diff -uw fstab.old fs --- fstab.old 2011-05-03 08:08:59.000000000 +0900 +++ fstab 2011-05-03 08:39:53.000000000 +0900 @@ -7,7 +7,9 @@ # proc /proc proc defaults 0 0 # / was on /dev/sda1 during installation -/dev/sda1 / ext3 errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1 +/dev/sda1 / ext3 errors=remount-ro,acl,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1 # swap was on /dev/sda5 during installation acl パッケージのインストール # aptitude install acl の後に root 権限不要。一般ユーザで $ mkdir g+ws $HOME/public_html/webdavdir $ chmod g+ws $HOME/public_html/webdavdir $ setfacl -m user:www-data:rwx $HOME/public_html/webdavdir $ setfacl -d -m user:www-data:rwx $HOME/public_html/webdavdir 実際に group quota が効くかまでは試してないです...
長いけど umask を変更しなかった場合のお試し chamaken$ cd ~/public_html chamaken$ mkdir davtest chamaken$ ls -ld davtest drwxr-xr-x 2 chamaken chamaken 4096 May 3 18:05 davtest この配下のファイルはオーナを chamaken グループとしたいので、ディレクト リに SGID して group writable に chamaken$ chmod g+ws davtest chamaken$ ls -ld davtest drwxr-sr-x 2 chamaken chamaken 4096 May 3 18:05 davtest WebDAV でアクセスするためにオーナユーザを www-data に # root がユーザホームに手を入れるのは今一つ root# chown www-data davtest root# ls -ld davtest drwxr-sr-x 2 www-data chamaken 4096 May 3 18:05 davtest www-data になってお試し www-data$ cd /home/chamaken/public_html/davtest www-data$ touch www_file www-data$ ls -l www_file -rw-r--r-- 1 www-data chamaken 0 May 3 18:11 www_file www-data$ mkdir www_dir www-data$ ls -ld www_dir drwxr-sr-x 2 www-data chamaken 4096 May 3 18:11 www_dir www-data$ cd www_dir www-data$ touch www_file_in_www_dir www-data$ ls -l file_in_www_dir -rw-r--r-- 1 www-data chamaken 0 May 3 18:12 file_in_www_dir ずっと SGID が効いてるねぇ。同じ事を chamaken で chamaken$ pwd /home/chamaken/public_html chamaken$ cd davtest chamaken$ touch chamaken_file chamaken$ ls -l chamaken_file -rw-r--r-- 1 chamaken chamaken 0 May 3 18:17 chamaken_file この時点で怪しいけど www-data で、このファイルを消すことは消せる www-data$ pwd /home/chamaken/public_html/davdir/www_dir www-data$ cd .. www-data$ ls -l chamaken_file -rw-r--r-- 1 chamaken chamaken 0 May 3 18:17 chamaken_file www-data$ rm chamaken_file rm: remove write-protected regular empty file `chamaken_file'? y でもディレクトリ掘っちゃうと chamaken$ mkdir chamaken_dir chamaken$ cd chamaken_dir chamaken$ touch file_in_chamaken_dir chamaken$ ls -la total 8 drwxr-sr-x 2 chamaken chamaken 4096 May 3 18:43 . drwxrwsr-x 4 www-data chamaken 4096 May 3 18:39 .. -rw-r--r-- 1 chamaken chamaken 0 May 3 18:43 file_in_chamaken_dir www-data にて削除できず www-data$ rm -rf chamaken_dir rm: cannot remove `chamaken_dir/file_in_chamaken_dir': Permission denied 逆もしかりで chamaken$ rm www_file rm: remove write-protected regular empty file `www_file'? y chamaken$ rm -rf www_dir rm: cannot remove `www_dir/file_in_www_dir': Permission denied
また長いけど POSIX ACL でのお試し chamaken$ cd /home/chamaken/public_html/ chamaken$ mkdir davacl chamaken$ chmod g+ws davacl chamaken$ ls -ld davacl drwxrwsr-x 2 chamaken chamaken 4096 May 3 19:55 davacl chamaken$ setfacl -m user:www-data:rwx davacl chamaken$ ls -ld davacl drwxrwsr-x+ 2 chamaken chamaken 4096 May 3 19:55 davacl chamaken$ getfacl davacl # file: davacl # owner: chamaken # group: chamaken # flags: -s- user::rwx user:www-data:rwx group::rwx mask::rwx other::r-x chamaken$ setfacl -d -m user:www-data:rwx davacl chamaken$ cd davacl chamaken$ touch chamaken_file chamaken$ mkdir chamaken_dir chamaken$ touch chamaken_dir/file_in_chamaken_dir chamaken$ ls -ld chamaken_dir drwxrwsr-x+ 2 chamaken chamaken 4096 May 3 19:57 chamaken_dir chamaken$ getfacl chamaken_dir # file: chamaken_dir # owner: chamaken # group: chamaken # flags: -s- user::rwx user:www-data:rwx group::rwx mask::rwx other::r-x default:user::rwx default:user:www-data:rwx default:group::rwx default:mask::rwx default:other::r-x www-data 側でも www-data$ cd /home/chamaken/public_html/ www-data$ cd davacl www-data$ touch www_file www-data$ mkdir www_dir www-data$ touch www_dir/file_in_www_dir www-data$ ls -ld www_dir drwxrwsr-x+ 2 www-data chamaken 4096 May 3 19:59 www_dir www-data$ getfacl www_dir # file: www_dir # owner: www-data # group: chamaken # flags: -s- user::rwx user:www-data:rwx group::rwx mask::rwx other::r-x default:user::rwx default:user:www-data:rwx default:group::rwx default:mask::rwx default:other::r-x www-data$ ls -l total 8 drwxrwsr-x+ 2 chamaken chamaken 4096 May 3 19:57 chamaken_dir -rw-rw-r--+ 1 chamaken chamaken 0 May 3 19:57 chamaken_file drwxrwsr-x+ 2 www-data chamaken 4096 May 3 19:59 www_dir -rw-rw-r--+ 1 www-data chamaken 0 May 3 19:59 www_file www-data$ で chamaken で作ったモノを削除 www-data$ rm -r chamaken_* www-data$ 他方 chamaken 側でも www-data で作ったモノを削除 chamaken$ ls -l total 4 drwxrwsr-x+ 2 www-data chamaken 4096 May 3 19:59 www_dir -rw-rw-r--+ 1 www-data chamaken 0 May 3 19:59 www_file chamaken$ rm -r * で、前に作った実際の WebDAV 用ディレクトリに適用してみる chamaken$ mv .webdav old.webdav chamaken$ mkdir .webdav chamaken$ chmod g+ws .webdav chamaken$ setfacl -m user:www-data:rwx .webdav chamaken$ setfacl -d -m user:www-data:rwx .webdav 外からアクセスしてみる another_host# aptitude install davfs2 another_host# mkdir davmount another_host# mount.davfs https://testing_webserver/webdav davmount Please enter the username to authenticate with server https://testing_webserver/webdav or hit enter for none. Username: chamaken Please enter the password to authenticate user chamaken with server https://testing_webserver/webdav or hit enter for none. Password: mount.davfs: the server certificate does not match the server name (オレオレ使ってるぜ... と Warning) ... You only should accept this certificate, if you can verify the fingerprint! The server might be faked or there might be a man-in-the-middle-attack. Accept certificate for this session? [y,N] y another_host# ls davmount lost+found another_host# cp /etc/fstab davmount/ 長くなるので割愛。双方でディレクトリ掘ってファイルコピーしてみたりした後 の削除も可能で、まぁ動いた
2011年5月1日日曜日
apt-cacher-ng
インストールマニアのつもりはないけど、仮想マシンを度々作るにあたって何か 手軽にできないかな。えーっと g4u だっけ? の debian 版は。と探してみたら FAI (Fully Automatic Installation) というモノがあった。いつものごとく Quickstart - For the impatient user コレコレ。と眺め始めるも 明確な計画先 に立たず一旦保留。ドキュメントの中で apt-proxy 使うみたいなことが書かれて いたけど squeeze になく、他をあたったところと似たようなパッケージを発見。確かに epoch 時間は読みヅラいけど、まぁ。 サーバ側は何もせず、クライアント側だけ /etc/apt を少々
- /etc/apt/apt.conf.d/02proxy
Acquire::http { Proxy "http://CacheServerIp:3142"; };
- sources.list を
- 前 deb http://ftp.uni-kl.de/debian etch main
- 後 deb http://192.168.0.17:3142/ftp.uni-kl.de/debian etch main
...の前にごめんなさい。以前 dhcpd.conf で二つ誤り。一点はファイル名 filename "pxelinux.0"; ルートのスラッシュが必要らしく、正しくは filename "/pxelinux.0"; もう一点は failover らしき内容調子に乗って書いていたけど、できないそうで す。加えて isc-dhcpd の仕様でもないそうで、無理矢理稼動させようとしたと ころ /etc/dhcp/master.conf line 1259: dynamic-bootp flag is not permitted for address range dynamic-bootp 172.27.101.193 172.27.101.220; ^ range declarations where there is a failover peer in scope. If you wish to declare an address range from which dynamic bootp leases can be allocated, please declare it within a pool declaration that also contains the "no failover" statement. The failover protocol itself does not permit dynamic bootp - this is not a limitation specific to the ISC DHCP server. Please don't ask me to defend this until you have read and really tried to understand the failover protocol specification. と叱られてしまいました。さて... と僅かばかりの試行錯誤、格闘してみたとこ ろの結果としては、当該 subnet では failover 使わない。が無難そう ignore bootp; ... subnet 172.27.101.0 netmask 255.255.255.0 { option routers 172.27.101.1; option broadcast-address 172.27.101.255; option domain-name-servers 172.27.1.1, 172.27.129.1; option domain-name "mydomain.or.jp"; pool { # ignore unknown-clients; deny dynamic bootp clients; failover peer "poolish"; range 172.27.101.65 172.27.101.190; } } としてあったところを allow bootp; ... subnet 172.27.101.0 netmask 255.255.255.0 { option routers 172.27.101.1; option broadcast-address 172.27.101.255; option domain-name-servers 172.27.1.1, 172.27.129.1; option domain-name "mydomains.or.jp"; filename "/pxelinux.0"; next-server 172.27.1.1; range 172.27.101.65 172.27.101.190; range dynamic-bootp 172.27.101.193 172.27.101.220; } として。こんなんで failover のよくある設定方法、dhcpd.conf と master.conf での master.conf があっちとこっちで違ってくると言う悲しい結 果。他にも間違いあったら指摘いただけると嬉しいです。
と、気を取り直して # kvm -net nic,model=virtio -net tap -boot n -curses netest.img とすると virtio で PXE が稼動開始して下記テキスト画面 Starting SeaBIOS (version 0.5.1-20101112_103537-polaris) Booting from virtio-net.zrom 5.4.4 (GPL) ether... ROM segment 0xc900 length 0x8000 reloc 0x00000000 Etherboot 5.4.4 (GPL) http://etherboot.org Drivers: VIRTIO-NET Images: NBI ELF PXE Exports: PXE Protocols: DHCP TFTP Relocating _text from: [00087780,0009f310) to [07ee8470,07f00000) Boot from (N)etwork or (Q)uit? Probing pci nic... Probing isa nic...
apache webdav つづきの Tips
* URL の変更 https://servername/~chamaken/.webdav がちょっと格好悪いので /webdav でアクセス。認証ユーザによって URL を変更する方法。いくつかあるらしい けど、説明ページの多い mod_rewrite を利用。 # ~ をなくすには AliasMatch ^/([^/]+)/(.*) /home/$1/.webdav/$2 だそうだ # a2enmod rewrite Enabling module rewrite. Run '/etc/init.d/apache2 restart' to activate new configuration! # mv default-ssl default-ssl.dpkg-dist # cp default-ssl.dpkg-dist default-ssl # emacs default-ssl # diff -uw default-ssl.dpkg-dist default-ssl --- default-ssl.dpkg-dist 2011-03-23 06:13:14.000000000 +0900 +++ default-ssl 2011-04-30 22:28:06.000000000 +0900 @@ -168,5 +168,13 @@ # MSIE 7 and newer should be able to use keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown + # mod_rewrite + RewriteEngine on + RewriteLog "/var/log/apache2/rewrite.log" + RewriteLogLevel 1 + + RewriteCond %{LA-U:REMOTE_USER} (.*) + RewriteRule ^/webdav(.*) /~%{LA-U:REMOTE_USER}/public_html/.webdav$1 [NS,L] + RewriteRule ^/private(.*) /~%{LA-U:REMOTE_USER}/public_html/private$1 [NS,L] </VirtualHost> </IfModule> これで https://servername/webdav とアクセスすると認証したユーザ名で、 ソレナリの URL に変換される * davfs2 webdab アクセスするユーザの所属するグループを増やしてよいのであれば、 設定ファイルは特段変更せず当該ユーザを davfs2 グループに加えてあげる。 # aptitude install davfs2 ... # adduser chamaken davfs2 Adding user `chamaken' to group `davfs2' ... Adding user chamaken to group davfs2 Done. やっぱり root で引き続き。/etc/fstab に追記 # cd /etc # cp fstab fstab.old # vi fstab # diff -uw fstab.old fstab --- fstab.old 2011-05-01 08:07:33.000000000 +0900 +++ fstab 2011-05-01 08:08:59.000000000 +0900 @@ -11,3 +11,5 @@ # swap was on /dev/sda5 during installation /dev/sda5 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0 +https://localhost/webdav /home/chamaken/webdav davfs defaults,user,noauto 0 0 + # うーん、ちょっと微妙だけど一般ユーザから操作したいので setuid # chmod u+s /usr/sbin/mount.davfs 一般ユーザアカウントで $ mount webdav Please enter the username to authenticate with server https://localhost/webdav or hit enter for none. Username: chamaken Please enter the password to authenticate user chamas with server https://localhost/webdav or hit enter for none. Password: パスワード /sbin/mount.davfs: the server certificate does not match the server name /sbin/mount.davfs: the server certificate is not trusted issuer: oreore subject: oreore identity: oreore.invalid.net fingerprint: aa:bb:cc:dd:ee:ff:11:22:33:44:55:66:77:88:99:00:11:22:33:44 You only should accept this certificate, if you can verify the fingerprint! The server might be faked or there might be a man-in-the-middle-attack. Accept certificate for this session? [y,N] y 何だか自分のホーム配下に間接アクセスはもぞかしいいけど、まぁ * (意味がないけど) quota apache webdav quota で調べるとモジュールがあったり FAQ では obsolute になったモジュール使うかコンパイルし直してハンドラ書けとかあるけど、 何かソコまでやる元気がないと言うか... で、あまり意味がなくなってしまったけど、普通の quota 設定も備忘録とし て残しておこうかと。How To Set Up Journaled Quota On Debian Lenny そのままとはちょっと違っていたので # げっ.../home 切ってないし # aptitude install quota quotatool ... # cp fstab fstab.old # vi fstab # diff -uw fstab.old fs --- fstab.old 2011-05-01 08:08:59.000000000 +0900 +++ fstab 2011-05-01 08:39:53.000000000 +0900 @@ -7,7 +7,9 @@ #proc /proc proc defaults 0 0 # / was on /dev/sda1 during installation -/dev/sda1 / ext3 errors=remount-ro 0 1 +/dev/sda1 / ext3 errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1 # swap was on /dev/sda5 during installation ここで touch /aquota.user /aquota.group すると後でサイズおかしいとか 言われるので作らずに # cd / # mount -o remount / # quotacheck -avugm quotacheck: Scanning /dev/sda1 [/] done quotacheck: Cannot stat old user quota file: No such file or directory quotacheck: Cannot stat old group quota file: No such file or directory quotacheck: Cannot stat old user quota file: No such file or directory quotacheck: Cannot stat old group quota file: No such file or directory quotacheck: Checked 17441 directories and 259009 files quotacheck: Old file not found. quotacheck: Old file not found. # ls -l /aquota.* -rw------- 1 root root 10240 May 1 08:40 /aquota.group -rw------- 1 root root 9216 May 1 08:40 /aquota.user # quotaon -avug /dev/sda1 [/]: group quotas turned on /dev/sda1 [/]: user quotas turned on linux quota で検索すると、ここで edquota になるんだけど、サイズ指定よ くわかんなかったりエディタでの編集煩しく quotatool 使用。quotatool(8) 眺めた後に # id -u chamaken 1000 # quotatool -u 1000 -d / # quotatool -b -u 1000 -q $((1024 * 32))MB -l $((1024 * 32 - 128))MB / # quotatool -u 1000 -d / 1000 / 4022884 33554432 33423360 0 140959 0 0 0
apache webdav
on debian squeeze は省略。ユーザディレクトリ配下に方法変えつつ色々と https アクセス。いわゆる$HOME/public_html はそのまま。その下の private は mod_authz_owner でRequire file-owner。.webdav は文字通り webdav で。 1. apache などのインストール # aptitude install apache2 libapache2-mod-auth-pam \ > libpam-radius-auth libapache2-mod-encoding
- libapache2-mod-auth-pam は認証に PAM を使うため
- libpam-radius-auth PAM にて RADIUS を使うため
- libapache2-mod-encoding Windows をクライアントとした場合のファイル名文字化け対処らしい...
2011年4月30日土曜日
freeradius rlm_pap on debian squeeze
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月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
2011年3月30日水曜日
softdog / CONFIG_WATCHDOG_NOWAYOUT
いつも唐突。
うーん... heartbeat の watchdog か、別立て watchdog デーモンか...
- Documentation/watchdog/src/watchdog-simple.c の抜粋
定期的に書き込みがあればカーネルが大丈夫、問題ないよ。と判断。書き込みがないと...リブート。じゃクローズは? が次int fd = open("/dev/watchdog", O_WRONLY);
while (1) {
ret = write(fd, "\0", 1);
if (ret != 1) {
ret = -1;
break;
}
ret = fsync(fd);
if (ret)
break;
sleep(10);
}
close(fd);- Documentation/watchdog/watchdog-api.txt の抜粋意訳
- モジュールパラメタ nowayout (CONFIG_WATCHDOG_NOWAYOUT)
- "Magic Close" がサポートされていなければデバイスを close すると watchdog も (何もせず) 終了。watchdog デーモンにバグがあってクラッシュした場合なんか考えるとちょっとマズい。この挙動のためいくつかのドライバでは "Disable watchdog shutdown on close", CONFIG_WATCHDOG_NOWAYOUT
というオプション設定ができる。これを Y としてコンパイルすると一度 watchdog が開始した後に watchdog を無効にする方法がなくなる。つまりは watchdog デーモンがクラッシュするとシステムが指定のタイムアウト後にリブートする - Magic Close
- ドライバが Magic Close をサポートしていると close 直前に特定の文字 'V' が /dev/watchdog に送られないと (書き込まれないと) watchdog が無効にならない。ユーザスペースのデーモンが、この特定の文字を送らずに close するとドライバはデーモンが watchdog を無効にする前に亡くなったと見なす。で、時間内に再度 open しないとリブート。softdog も
なんてあったりするif (c == 'V')
expect_close = 42;
...
static long softdog_ioctl(struct file *file, unsigned int cmd,
unsigned long arg)
...
static const struct watchdog_info ident = {
.options = WDIOF_SETTIMEOUT |
WDIOF_KEEPALIVEPING |
WDIOF_MAGICCLOSE,
...
- ha.cf のサンプルコメントから
- ソフトウェア watchdog を使っているならモジュールロードのパラメタに nowayout=0 あるいは CONFIG_WATCHDOG_NOWAYOUT を無効にしてコンパイルするんじゃないかな。さもないと heartbeat をマトモに終了させたとしてもリブートしてしまうって挙動はお望みじゃないと思う
うーん... heartbeat の watchdog か、別立て watchdog デーモンか...
2011年3月28日月曜日
TIPS: squeeze on raw format KVM
さっき作ったイメージ drbd1.img は最初に / 用の sda1 次が何も手を加えていない sda2。最後が swap の sda3。これをホスト側で見るには qcow2 の場合 nbd として扱えるらしけど -f raw でイメージを作成したので...要 root
とまぁ、ホスト側でも操作可能。なので /etc/inittab 書き換え忘れたとか、/etc/default/grub 書き換えたけど update-grub 忘れたとかも後になってでもできる# file drbd1.img
drbd1.img: x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 2048, 11716608 sectors; partition 2: ID=0x83, starthead 115, startsector 11718656, 3905536 sectors; partition 3: ID=0x82, starthead 143, startsector 15624192, 1150976 sectors, code offset 0x63
# losetup -o $((512 * 2048)) /dev/loop1 drbd1.img
# mkdir mnt_drbd1
# mount /dev/loop1 mnt_drbd1/
# ls mnt_drbd1/
bin boot dev etc home initrd.img lib lib32 lib64 lost+found media mnt opt proc root sbin selinux srv sys tmp usr var vmlinuz
# chroot mnt_drbd1/
root@parent:/# ls
bin boot dev etc home initrd.img lib lib32 lib64 lost+found media mnt opt proc root sbin selinux srv sys tmp usr var vmlinuz
root@parent:/# cat /etc/hostname
drbd1
root@parent:/# exit
exit
# umount mnt_drbd1
# losetup -d /dev/loop1
他ネットワーク周りは...現況は tap 使うが良さげ。ホスト側で適当にブリッジ作っておいて...毎度手は面倒なので /etc/network/interface に
とか書いといて、KVM (に限らず、仮想ゲストマシン全て) 最初のブリッジに足のばすとすると /etc/kvm/kvm-ifup はこんな感じauto br0
iface br0 inet static
address 192.168.1.254
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
bridge_ports none
bridge_fd 0
bridge_stp off
でホスト側で isc-dhcp-server を動かすとゆー... 面倒だね#! /bin/sh
BRCTL=/usr/sbin/brctl
uplinks=$(ip link ls | awk -F: '/^[1-9].*UP> / { print $2; }')
for switch in $uplinks; do
if [ -d /sys/class/net/$switch/bridge/. ]; then
$BRCTL addif $switch $1
break
fi
done
ip link set $1 up
ターミナルで kvm, debian squeeze
obs600 休憩。間違いもあるので、後日直すコト > 自分
で、唐突めいているけど、あちこち調べながら X なしで squeeze を KVM にてインストールする方法。あちこち調べたのは良いけど、ポロポロ忘れるので...
目的としては DRBD や heartbeat 試したく lxc 使おうとしたけど、今々は lxc 上で DRBD 動かず。ちょっと挑戦した けど、8.4 で connector 止めて genetlink 使う予定だそうなので、素直に? 挫折、待たせてもらうことに。d-i をイジる手もあるそうだけど、素の netinst.iso で何度か試してみて忘れがちなコト
-f qcow2 が正統? なのだろうけど、後々ホスト側からイジるにあたって
kvm-nbd とか面倒なので...で起動
で、唐突めいているけど、あちこち調べながら X なしで squeeze を KVM にてインストールする方法。あちこち調べたのは良いけど、ポロポロ忘れるので...
目的としては DRBD や heartbeat 試したく lxc 使おうとしたけど、今々は lxc 上で DRBD 動かず。ちょっと挑戦した けど、8.4 で connector 止めて genetlink 使う予定だそうなので、素直に? 挫折、待たせてもらうことに。d-i をイジる手もあるそうだけど、素の netinst.iso で何度か試してみて忘れがちなコト
- 真っ黒画面でスペース & linux test
- /etc/default/grub の編集 & update-grub
- /etc/inittab の編集
$ kvm-img create -f raw drbd1.img 8G
Formatting 'drbd1.img', fmt=raw size=8589934592
$ ls
debian-6.0.0-amd64-netinst.iso drbd1.img
-f qcow2 が正統? なのだろうけど、後々ホスト側からイジるにあたって
kvm-nbd とか面倒なので...で起動
真っ黒画面の真ん中に$ kvm -cdrom debian-6.0.0-amd64-netinst.iso -hda drbd1.img -boot d -curses
640x480で、何も表示されないけどスペース一回押した後に (ここ何押下するかよく忘れる)
linux textとすると...
こんな画面。ここで F8Welcome to Debian GNU/Linux! F1
This is a Debian 6.0 (squeeze) installation CD-ROM.
It was built 20110205-14:31; d-i 20110106+b1.
HELP INDEX
KEY TOPIC
<F1> This page, the help index.
<F2> Prerequisites for installing Debian.
<F3> Boot methods for special ways of using this CD-ROM
<F4> Additional boot methods; rescue mode.
<F5> Special boot parameters, overview.
<F6> Special boot parameters for special machines.
<F7> Special boot parameters for selected disk controllers.
<F8> Special boot parameters for the install system.
<F9> How to get help.
<F10> Copyrights and warranties.
Press F2 through F10 for details, or ENTER to boot:
For example そのままSPECIAL BOOT PARAMETERS - INSTALLATION SYSTEM F8
You can use the following boot parameters at the boot: prompt,
in combination with the boot method (see <F3>). These parameters
control how the installer works.
RESULT PARAMETER
Disable framebuffer vga=normal fb=false
Don't start PCMCIA hw-detect/start_pcmcia=false
Force static network config netcfg/disable_dhcp=true
Set keyboard map bootkbd=es
Select the kde or xfce desktops desktop=kde
Accessibility options (last 2 options not available for all images):
Use high contrast theme theme=dark
Use Braille tty brltty=driver,device,texttable
Use Speakup speakup.synth=driver
For example:
boot: install vga=normal fb=false
Press F1 for the help index, or ENTER to boot:
で進む。イメージファイル名の通り DRBD を試したかったのでパーティションは 6G を / に 2G は何もせず残りを swap として。Software Selection では Standard と SSH。GRUB のインストールまで終ってリブートするから CD 外してね。になったところinstall vga=normal fb=false
で Go Back。Execute Shell を選択して、ちょっと面倒だけど[!!] Finish the installation
Installation complete
Installation is complete, so it is time to boot into your new system.
Make sure to remove the installation media (CD-ROM, floppies), so
that you boot into the new system rather than restarting the
installation.
<Go Back> <Continue>
もう一つ /etc/inittab もBusyBox v1.17.1 (Debian 1:1.17.1-8) built-in shell (ash)
Enter 'help' for a list of built-in commands.
~ # mount
rootfs on / type rootfs (rw)
none on /proc type proc (rw,relatime)
none on /sys type sysfs (rw,relatime)
tmpfs on /dev type tmpfs (rw,relatime,mode=755)
none on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000)
none on /sys/kernel/debug type debugfs (rw,relatime)
/dev/sda1 on /target type ext3 (rw,relatime,errors=remount-ro,data=ordered)
/dev/sda1 on /dev/.static/dev type ext3 (rw,relatime,errors=remount-ro,data=orde
red)
tmpfs on /target/dev type tmpfs (rw,relatime,mode=755)
~ # chroot /target
# cd /etc/default
# cp grub grub.dpkg-dist
# vi grub
....
# diff -uw grub.dpkg-dist grub
--- grub.dpkg-dist 2011-03-28 11:49:36.000000000 +0900
+++ grub 2011-03-28 11:45:39.000000000 +0900
@@ -4,8 +4,8 @@
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
-GRUB_CMDLINE_LINUX_DEFAULT="quiet"
-GRUB_CMDLINE_LINUX=""
+GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8r"
+GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop
=1"
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
@@ -13,7 +13,7 @@
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
-#GRUB_TERMINAL=console
+GRUB_TERMINAL="serial console"
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-5-amd64
Found initrd image: /boot/initrd.img-2.6.32-5-amd64
done
でメニューの Finish the Inistallation & Continue... で再起動しないので、他コンソールから kill して再起動。今度は -curses じゃなくて -nographic で
# cd /etc
# cp inittab inittab.dpkg-dist
# vi inittab
...
# diff -uw inittab.dpkg-dist inittab | head
--- inittab.dpkg-dist 2011-03-28 11:52:02.000000000 +0900
+++ inittab 2011-03-28 11:53:16.000000000 +0900
@@ -52,15 +52,15 @@
# 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
+#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.
# sync
# exit
~ # sync
~ # exit
でクライアントとして使う分にはソレナリ。kvm -nographic drbd1.img
登録:
投稿 (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)