goo blog サービス終了のお知らせ 

ttt

getttyent

Windows 8.1でWake on LAN (WoL)

2014-02-17 23:59:00 | デジタル・インターネット

ようやく最近になって、Windows 8.1なパソコンを、ちょっとだけまじめに使っています。

ふと気がつくと、8.1になったらWake on LAN (WoL)ができなくなっていました。Vista(笑)だったときはできていたのに・・・

いつもと同じように、デバイスマネージャーのネットワークアダプターの設定はしてありました。

201402171

「電源の管理」と「詳細」のところなどを設定済み。

201402172

なぜWoLできないのだろう?と思ってネット検索してすぐに判明。

なにやら、Windows8からは、もう一カ所、設定すべきところが増えているそうです。

電源オプションのところ。

201402173

「高速スタートアップを有効にする」をオフにしておかないと、WoLできないそうです。

・・・意味不明ですが、とりあえず、これでWoLできるようになりました。

Windows 8.1、慣れの問題だとは思うのですけど、たしかに使いにくいのですが、左端の「スタートボタンもどき」を右クリックすると、使いそうなものがあれこれ詰まっているショートカットメニューが出てきて、ここだけはWindows 7よりも便利かも?と思いました。

あと、アプリケーションの起動がなんともめんどくさいと思っていたのですが、「Windowsキー+Q」で、アプリケーション名だかコマンド名の一部を入力して検索すればよい、という技を覚えたので、スタートメニューなんかいらないな、と思うようになりました。
GUIからCLIの時代へもどりました

自分は8.1でさえ使いにくいと思っているのですが、8はもっと使いにくかったそうですね

Windows 8はほとんど触らなかったです。

 


FreeBSD 10-RELEASE

2014-02-11 23:14:10 | デジタル・インターネット

もうバージョン10なんですね
はじめてインストールしたのは、雑誌の付録CD-ROMに収録されていた1.1-BETAとかだったような…

メーリングリストにアナウンスが出る前に、たまたまWebサイトをみたら、リリース情報が掲載されていたので、以前ためしにHyper-Vな仮想マシンにインストールしてあった8.xとか9.1-RCとかなの2つを、freebsd-updateで10.0-RELEASEにアップデートしてみました。

freebsd-update、遅いな・・・と思ったら、どうやら、/usr/src/以下にソースがあるとダウンロードするファイル数がド~ンと増えるので、遅くなるみたいです。/usr/src/以下を消して、freebsd-updateをやりなおしました。

・・・で、freebsd-updateといえば、あれですよ、あれ。/etc以下のファイルで、あれこれ手作業で差分の修正をさせられる、超いやんなる作業。あれ、どういう仕組みになっているのか、まったくわからないんですけど…
ぜったいにそんなファイル修正していない!っていうファイルを、手作業で直させられるっていう、不毛な作業

今回、2つのFreeBSDを、並行作業で10.0-RELEASEへfreebsd-updateでアップデートしてみたのですが、あれ?おかしいな・・・
1つ、あんまり手作業で修正させられることなくスムーズにアップデートできたのに、
もう1つは、やたらとたくさんのファイルを修正させられました。

それで、後者のほうは、なんかやたらと調子悪いんです。NFSがささりまくったり。おかしいなと思って、2つのホストの/etc以下を比較してみたら、調子悪い方は、なぜかけっこう違ってるんですよ。も~、意味わかんないです。手作業で修正させられたあげく、手作業なので間違えた、ってことでしょうか。

設定ファイルで、このファイルは絶対に置き換えるな、と指定しておいて、それ以外は全部自動的に置き換えちゃいますよ機能、ってのが欲しいです。

う~ん、新規インストールすればよかった・・・

以前から、Hyper-Vで動かすとNFSが刺さりまくって調子悪いな、と思っていたのですが、それってHyper-Vのせいではなくて、/etc以下のファイルがおかしくなっていた、っていうことだったような気がします。今現在、とても順調に動作中です。

ちなみに10-RELEASEから、amd64版では標準でHyper-Vの準仮想化なネットワークのドライバが入っているそうなので、けっこうカンタンにインストールできるようになってました。

10-RELEASEになったことで、かつてpkgngとよばれていた新しいパッケージ管理ツールも使い始めました。たまたまタイミングが悪かったのか、妙な不具合で悩まされたりもしましたが、その後は、ぜんぜん問題なし。

もともと、バイナリパッケージは使わず(大昔は、変な不具合で悩まされることが多かった)、portsで自分でビルドしてインストールする派だったのですが、バイナリパッケージだけでもいけるかな?という気がしました。
ただ、どうしてもこのツールはこのバージョンじゃなきゃ嫌だ!というときは、portsを使わざるを得ない感じはします。

ついでに、portupgradeをやめて、portmasterに乗り換えそうかな、という気もしてきました。これまで、コマンドラインオプションがぜんぜん違ってしまっていて、portmasterワケワカランと食わず嫌いでいたのですが、使い方がわかってしまえば、なんだportmasterのほうが、サクサク動くじゃないかとなりました。portupgradeって、/var/db/pkg/pkgdb.db だかなんだかのファイルをいじくるので数十秒ほどダンマリになったりしませんかね?それが、portmasterだとぜんぜん無くて、とても気持ちよく動いてくれます。

/usr/local/etc/portmaster.rcで、いくつかのオプションを有効にするだけで、すぐにportupgradeと遜色なく使えるようになりました。/usr/local/etc/pkgtools.confのHOLD_PKGSに相当する機能がまだ見つけられてませんが…

20140211


Intel Galileo

2014-02-06 23:49:24 | デジタル・インターネット

先月の1月11日でしたか、秋葉原に行ったら、IntelのGalileoが売られていたので衝動買いしてしまいました。

201402061

201402062

案の定、ほとんどいじくる時間がなくて・・・もったいないです。

201402063

中は、たいしたもん、入ってません
マニュアルもなくて、ウェブで見てね、という感じ。

201402064

201402065

なぜか、ACの電源コネクタだけ、やたらとたくさんの種類が入ってました。

201402066

201402067

mini PCIeなコネクタがついてて、ここにWiFiなカードをさして、WiFiも使えるそうです。

Centrino Wireless-N 135というのが公式にサポートされているそうでして・・・いや、実はそれも購入済みなんですが・・・、時間がなくて・・・

まず最初にファームウェアのアップデートをしろ、っていうので、CentOS6なPCがあまっていたのでそれでやったら、mkdirがなんとか、というエラーが出てうまくいかない。なぜなんでしょうね。

仕方ないので、Macにつないでやってみたら、うまくいきました。

サンプルのBlinkを試してみたら、LEDが点滅したので、正しく動作しているようです。

ちなみにCentOSなPCではファームウェアのアップデートはできなかったのですが、Blinkは動かすことができました。

そのほかにやったことといえば、

  • microSDにLinuxのファイルをコピーして、microSDでブートさせてみた
  • 有線LAN経由で、SSHログインしてみた
  • Linuxでちょこちょこ見てみる。あ~、ふつうのLinuxとはけっこう違うね、という感想をもったり
  • Centrino Wireless-N 135が認識されて、wlan0もはえてきた、ところまで確認済み

それくらいでしょうか

Arduino、頭ではなんとなくあんなもんかな、というイメージはあるのですが、実際の所ぜんぜん使い方をわかっていないので、勉強しなくちゃな~というところです。でもって、Arduinoの本とキットも買ってしまったっていう…


(FreeBSD) pkg updateとかすると、pkg: Unable to find catalogs

2014-01-17 23:59:00 | デジタル・インターネット

そろそろFreeBSD 10も試してみようと、ちょっと前に、VirtualBoxでFreeBSD 10のRC1くらいのものをインストールして、とりあえず利用可能な環境を構築してみたことがありました。

しかも、「よ~し、portsを使わずに、バイナリパッケージだけでどこまでできるか試してみよう!」ということで、pkgコマンドを使いました。pkgngとも呼ばれる、FreeBSDの新しいパッケージ管理の仕組みの勉強にもなって、いいかなと思いまして。

そのときは、なぜかemulators/virtualbox-ose-additionsのバイナリパッケージがなかったので、それだけはportsを使ってインストールしました。たしかちょっとしたコンパイルエラーが出ていたと思います(現在は大丈夫のようです)。

でもって、動く環境ができたら、もうそれで興味が薄れてしまい、放置していたのですが、正式リリース時期が近づいてきたので、再び、動かしてみることが増えてきました。

とりあえず、freebsd-updateで、RC3、RC4、RC5と順調にあげてきまして、そしてそういえばパッケージのアップデートをしていなかったな、と思い出して、pkgコマンドでアップデートしよう!と思ったら・・・

どうもうまくいきません。

# pkg upgrade
Updating repository catalogue
digests.txz                         100%  996KB 996.3KB/s 996.3KB/s   00:01   
packagesite.txz                     100% 4549KB   4.4MB/s   4.4MB/s   00:00   
Incremental update completed, 21327 packages processed:
0 packages updated, 0 removed and 21327 added.
pkg: Unable to find catalogs

わかりにくいんですが、どうやら最後に表示されている「pkg: Unable to find catalogs」が、エラーを意味するメッセージのようです。

ネット検索してみると、freebsd-portsのメーリングリストに投稿された、以下のメールが、自分と同じ症状を訴えているようです(Webのアーカイブのリンクをクリックすると、なぜか全然別のメールが表示されるので、リンクをはれなかった)。

From:    Lundberg, Johannes <johannes@brilliantservice.co.jp>
Date:    16 Jan 2014 06:20:50
Subject: Re: since 10.0rc5 - pkg: Unable to find catalogs

いくらネット検索しても解決方法が見つからないので、pkgコマンドのソースコードを追っかけてみました。gdbとか使わずに、printfデバッグなんですけどね

ちなみに、pkgコマンドで、デバッグメッセージを出させるには、env DEBUG_LEVEL=9 pkg -d update とかやればいいようです。デバッグレベルはいろいろ変えられます。

エラーで終了する最後のほうか、こんな感じのメッセージが見られます。

DBG(3)> Manifest: parsing array
DBG(2)> Manifest: found key: 'flatsize'
DBG(2)> Manifest: found key: 'pkgsize'
DBG(2)> Manifest: found key: 'desc'
DBG(2)> Manifest: found key: 'deps'
DBG(3)> Manifest: parsing object
DBG(2)> Found p5-Moose
DBG(3)> Pkg: add a new dependency origin: devel/p5-Moose, name: p5-Moose, version: 2.1005,1
DBG(2)> Found p5-Try-Tiny
DBG(3)> Pkg: add a new dependency origin: lang/p5-Try-Tiny, name: p5-Try-Tiny, version: 0.18
DBG(2)> Found perl5
DBG(3)> Pkg: add a new dependency origin: lang/perl5.16, name: perl5, version: 5.16.3_6
DBG(2)> Manifest: found key: 'categories'
DBG(3)> Manifest: parsing array
DBG(2)> Parsing manifest from buffer
DBG(2)> Falling back on yaml
Incremental update completed, 21327 packages processed:
0 packages updated, 0 removed and 21327 added.
DBG(4)> Pkgdb: running 'ROLLBACK TRANSACTION'
pkg: Unable to find catalogs


徐々に場所を追い詰めていって、問題箇所、わかりました。

結論から言ってしまうと、

http://pkg.FreeBSD.org/freebsd:10:x86:64/latest/packagesite.txz
のファイルがぶっ壊れていた!

でした。

後で確認したら、この問題が修正されちゃったようで、現在は問題なくなっているかもしれません。ありがたい

packagesite.txzを展開すると、packagesite.yamlというファイルが出てくるのですが、これをemacsで開いて眺めていると、以下の箇所に、不正な文字が混じっていました。

{"name":"p5-MooseX-Attribute-ENV","origin":"devel/p5-MooseX-Attribute-ENV","version":"0.02_1","comment":"Set default of an attribute to a value from ^NV","arch":"freebsd:10:x86:64","maintainer":"Alan@Wave2.org","prefix":"/usr/local","www":"http://search.cpan.org/dist/MooseX-Attribute-ENV/","path":"All/p5-MooseX-Attribute-ENV-0.02_1.txz","sum":"2e5a3e43d483165474dc56b87ade527bf8618bd7be56cfe2afc692df7251818c","licenselogic":"or","licenses":["ART10","GPLv1"],"flatsize":28898,"pkgsize":15208,"desc":"MooseX-Attribute-ENV is a Moose attribute trait that you use when\nyou want the default value for an attribute to be populated from\nthe %25ENV hash.\n\nWWW: http://search.cpan.org/dist/MooseX-Attribute-ENV/","deps":{"p5-Moose":{"origin":"devel/p5-Moose","version":"2.1005,1"},"perl5":{"origin":"lang/perl5.16","version":"5.16.3_6"}},"categories":["devel","perl5"]}

commentのところが
「Set default of an attribute to a value from ^NV」
のようになっていて、「Ctrl+N」という制御コードが入ってます。ここは本来
「Set default of an attribute to a value from %ENV」
となるべきところなんですが、「%EN」がCtrl+Nに置き換えられてしまったようです。ああ、なんかそうなりそう・・・ってところですね

エラーが出るきっかけは、libucfというライブラリだったので、とりあえず「Ctrl+N」という1文字だけはエラーにしないで無視させる小細工をして・・・

    while (p < chunk->end) {
        c = *p;
        if (c < 0x1F) {
            /* Unmasked control character */
            if (c == '\n') {
                ucl_set_err (chunk, UCL_ESYNTAX, "unexpected newline", &parser-\
>err);
            }
            else if ( c == 0x0e ) {
                printf("HOGEHOGE: skip 0x0e\n");
                ucl_chunk_skipc (chunk, p);
                continue;
            }
            else {

portsのpkgをビルドしなおし、pkg updateを実行。うまくいきました

うまく動いていなかったとき、/var/db/pkg/repo-FreeBSD.sqlite というファイルが

-rw-r--r--  1 root  wheel     38912  1月 16 04:51 repo-FreeBSD.sqlite

だったのが、

小細工したpkgコマンドでは

-rw-r--r--  1 root  wheel  32433152  1月 16 04:51 repo-FreeBSD.sqlite

と、サイズが大きくなりました。
pkg statというコマンドでも、何やら表示されます。

# pkg stat
Local package database:
    Installed packages: 616
    Disk space occupied: 3 GB

Remote package database(s):
    Number of repositories: 1
    Packages available: 21327
    Unique packages: 21327
    Total size of packages: 91 GB

エラーでうまくいってなかったときは、Remoteのほうがこんな感じでした。

Remote package database(s):
    Number of repositories: 1
    Packages available: 0
    Unique packages: 0
    Total size of packages: 0 B

これでようやくpkgコマンドがまともに動くようになりました。

さて、パッケージをアップデート・・・

# pkg upgrade
Updating repository catalogue
pkg: Missing dependency matching 'sysutils/policykit-gnome'
pkg: Missing dependency matching 'sysutils/upower'
pkg: Missing dependency matching 'x11/zenity'
pkg: Missing dependency matching 'x11-wm/metacity'
pkg: Missing dependency matching 'x11/zenity'
pkg: Missing dependency matching 'x11-servers/xorg-server'
pkg: Missing dependency matching 'x11-servers/xorg-server'
pkg: Missing dependency matching 'x11-servers/xorg-server'
pkg: Error while trying to install/upgrade packages, as there are unresolved dependencies:
sysutils/gnome-mount: sysutils/policykit-gnome
x11/gnome-session: sysutils/upower, sysutils/gnome-settings-daemon
x11-themes/gnome-themes: x11-wm/metacity
x11-wm/metacity: x11/zenity
emulators/virtualbox-ose-additions: x11-servers/xorg-server
x11-drivers/xf86-input-keyboard: x11-servers/xorg-server
x11-drivers/xf86-input-mouse: x11-servers/xorg-server


ん???

# pkg install x11-servers/xorg-server
Updating repository catalogue
pkg: No packages matching 'x11-servers/xorg-server' available in the repositories

なんだか、足りないバイナリパッケージがいくつかあるようです。なぜ?

20140117


(FreeBSD) panic: Bad entry start/end for new stack entry

2014-01-14 22:43:11 | デジタル・インターネット

ここ最近、FreeBSDで、portsでインストールしたopenjdk7のせいで、kernel panicすることがある、という困った不具合がでています。

http://docs.freebsd.org/cgi/getmsg.cgi?fetch=545943+0+archive/2013/freebsd-current/20131229.freebsd-current
Subject:   latest openjdk7 triggers kernel panic

一応、パッチが出ているようなので、パッチをあててカーネル再構築すればよさそうなんですが、freebsd-updateでバイナリアップデートできるようにならないんでしょうかね。
この不具合、かなり深刻だと思うのですけど。

たとえば、portupgradeでopenjdk7をアップデートすると、kernel panicします

それはやばいと、HOLD_PKGSにopenjdk*を入れておいたのですが、今日は別のportsでportupgrade実行中に、どうやらconfigureスクリプトからJavaを使ったコマンドを実行したらしく、それでkernel panic

portupgrade中にkernel panicすると、かなりの高確率でファイルシステム不整合がおきて、/var/db/pkg/のファイルが消えたりして、かなりのダメージをくらうんですけど・・・

20140114


(FreeBSD) ports/security/gnutls3 にて tar: info/gnut

2013-11-15 21:00:09 | デジタル・インターネット

portsのsecurity/gnutls3 でmake installすると、最後の方で、こんなエラー。

====> Compressing man pages (compress-man)
===>   Installing ldconfig configuration file
===>  Building package for gnutls3-3.1.16_1
Creating package /work/usr/ports/security/gnutls3/work/gnutls3-3.1.16_1.tbz
Registering depends: libgpg-error-1.12 libidn-1.28_1 gettext-0.18.3.1 libiconv-1.14_1 p11-kit-0.20.1 libffi-3.0.13 nettle-2.7.1 gmp-5.1.3 ca_root_nss-3.15.2_1 libtasn1-3.3.
Creating bzip'd tar ball in '/work/usr/ports/security/gnutls3/work/gnutls3-3.1.16_1.tbz'
tar: info/gnutls3/gnutls.info-5: Cannot stat: No such file or directory
tar: Error exit delayed from previous errors.
pkg_create: make_dist: tar command failed with code 256
*** [do-package] Error code 1

Stop in /usr/ports/security/gnutls3.

gnutls.info-5 というファイルがないらしいです。

# cd /usr/ports.work/security/gnutls3/work/gnutls-3.1.16/doc
# ls gnutls.info*
gnutls.info     gnutls.info-1   gnutls.info-2   gnutls.info-3   gnutls.info-4

なるほど、gnutls.info-4 までしか無いですね。

ログメッセージを見てると、これらのファイルは、こんなコマンドで作られるようです。

makeinfo -I ../doc/ -I . -o gnutls.info gnutls.texi

なんとなく、直感が働きました

# which makeinfo
/usr/bin/makeinfo

もしも /usr/local/bin/makeinfo を使わせたらどうなる???

# rm gnutls.info*

/usr/local/bin/makeinfo -I ../doc/ -I . -o gnutls.info gnutls.texi
./cha-intro-tls.texi:378: warning: @ref node name should not contain `:'
./cha-cert-auth.texi:201: warning: @ref node name should not contain `:'
./cha-cert-auth.texi:289: warning: @ref node name should not contain `:'
./cha-tokens.texi:356: warning: @ref node name should not contain `:'

# ls gnutls.info*
gnutls.info     gnutls.info-2   gnutls.info-4
gnutls.info-1   gnutls.info-3   gnutls.info-5

gnutls.info-5 まで作られました。な~んだ。
ということで、PATHを変更。

# cd /usr/ports/security/gnutls3/
# make clean
===>  Cleaning for gnutls3-3.1.16_1
# env PATH=/usr/local/bin/:$PATH make package clean
===> Fetching all distfiles required by gnutls3-3.1.16_1 for building
===>  Extracting for gnutls3-3.1.16_1
=> SHA256 Checksum OK for gnutls-3.1.16.tar.xz.

途中省略

install  -o root -g wheel -m 444 /work/usr/ports/security/gnutls3/work/gnutls-3.1.16/THANKS /work/usr/ports/security/gnutls3/work/stage/usr/local/share/doc/gnutls3
====> Compressing man pages (compress-man)
===>   Installing ldconfig configuration file
===>  Building package for gnutls3-3.1.16_1
Creating package /work/usr/ports/security/gnutls3/work/gnutls3-3.1.16_1.tbz
Registering depends: libgpg-error-1.12 libidn-1.28_1 gettext-0.18.3.1 libiconv-1.14_1 p11-kit-0.20.1 libffi-3.0.13 nettle-2.7.1 gmp-5.1.3 ca_root_nss-3.15.2_1 libtasn1-3.3.
Creating bzip'd tar ball in '/work/usr/ports/security/gnutls3/work/gnutls3-3.1.16_1.tbz'
===>  Cleaning for gnutls3-3.1.16_1

うまくいってしまいました。

ところで、make packageだと、installされないですね。前はインストールまでされたのに・・・いつからそうなった?

ちなみに、infoファイルは、通常とは1階層だけ違うところにインストールされていました。

# ls /usr/local/info/gnutls3/gnutls.info*
/usr/local/info/gnutls3/gnutls.info     /usr/local/info/gnutls3/gnutls.info-3
/usr/local/info/gnutls3/gnutls.info-1   /usr/local/info/gnutls3/gnutls.info-4
/usr/local/info/gnutls3/gnutls.info-2   /usr/local/info/gnutls3/gnutls.info-5

余談ですが、gnutls3の配布パッケージ内には、gnutls.info-5が存在します。

# make clean
===>  Cleaning for gnutls3-3.1.16_1
# make patch
===> Fetching all distfiles required by gnutls3-3.1.16_1 for building
===>  Extracting for gnutls3-3.1.16_1
=> SHA256 Checksum OK for gnutls-3.1.16.tar.xz.
===>  Patching for gnutls3-3.1.16_1
===>   gnutls3-3.1.16_1 depends on package: libtool>=2.4 - found
# ls /usr/ports.work/security/gnutls3/work/gnutls-3.1.16/doc/gnutls.info*
/usr/ports.work/security/gnutls3/work/gnutls-3.1.16/doc/gnutls.info
/usr/ports.work/security/gnutls3/work/gnutls-3.1.16/doc/gnutls.info-1
/usr/ports.work/security/gnutls3/work/gnutls-3.1.16/doc/gnutls.info-2
/usr/ports.work/security/gnutls3/work/gnutls-3.1.16/doc/gnutls.info-3
/usr/ports.work/security/gnutls3/work/gnutls-3.1.16/doc/gnutls.info-4
/usr/ports.work/security/gnutls3/work/gnutls-3.1.16/doc/gnutls.info-5

makeすると、消されて、作り直されるようです。

20131115


ATOK for Android

2013-11-14 23:59:00 | デジタル・インターネット

買ってみたものの、用途が無くて、もったいないことになっている、そんなnexus7・・・

20131114

なんだかよくわからないけど、買ったときに、オマケで2000円分の何かをもらっていたのを思い出し、「ATOK for Android」を購入。1500円也

フリック入力にしてみたら、iPod touchのとは、文字が出てくる位置が違っていて、ミスタイプだらけになってしまってイライラしたので、キーボードにしておきました。設定変更できるのかもしれないけど

まだ3分くらいしか使っていないけど…

■ 過去記事

 


(FreeBSD) 4KセクタHDDでは、ZFSのzpoolをashift 12にすべきらしい

2013-11-07 23:59:00 | デジタル・インターネット

先日、

(FreeBSD) zpool replaceするつもりがzpool addしてしまって、ゲゲゲな結果になった

という、うっかり、をしてしまいまして、全ファイルを別のZFSに待避して、プールを作り直し、ということになりました。復旧するまで、3日かかりました

そんなわけで、プールを作り直したのですが・・・

プールを作って
# zpool create storage raidz ada1 ada2 ada3 ada4

zdbというコマンドを実行
# zdb
storage:
    version: 28
    name: 'storage'
    state: 0
    txg: 4
    pool_guid: ほにゃらら
    hostid: ほにゃらら
    hostname: 'ほにゃらら'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: ほにゃらら
        create_txg: 4
        children[0]:
            type: 'raidz'
            id: 0
            guid: ほにゃらら
            nparity: 1
            metaslab_array: 30
            metaslab_shift: 36
            ashift: 9
以下省略

というように、zdbコマンドで見ると、「ashift: 9」と出てきます。

しばらく前に知ったことなんですが、従来の512バイトセクタのハードディスクではこれでよいが、4K(4096バイト)セクタのハードディスクでは、ashiftは12にした方が性能がよくなるそうです。

2の9乗は512、2の12乗は4096ですが、ashift 12にしておくと、ZFSが4096バイト単位で、ディスクを扱ってくれるようになる、とかなんとかいう話でした

使っている2TBディスクなので、せっかくの機会だし、ashift 12にしたい!ということで、ネット検索して見つけた情報のとおりにやってみました。

ちなみに、9.2-RELEASEにアップデートしても ashift: 9 でした。

作ったばかりですが、プールを削除
# zpool destroy storage

gnopというコマンドを実行
# gnop create -S 4096 /dev/ada1
# gnop create -S 4096 /dev/ada2
# gnop create -S 4096 /dev/ada3
# gnop create -S 4096 /dev/ada4

gnopってコマンドを初めて知りました。

本物のハードディスクは
# diskinfo /dev/ada1
/dev/ada1       512     2000398934016   3907029168      4096    0       387602116       63
というように、512バイトセクタになっていますが、
gnopで作ったほうのディスク(ada1.nop)は
# diskinfo /dev/ada1.nop
/dev/ada1.nop   4096    2000398934016   488378646       0       0       484502 16       63
というように、4096バイトセクタに見せかけることができる、という仕組みらしいです。

そしてプールを作成
# zpool create storage raidz ada1.nop ada2.nop ada3.nop ada4.nop

zdbで確認
# zdb
storage:
    version: 5000
    name: 'storage'
    state: 0
    txg: 4
    pool_guid: ほにゃらら
    hostid: ほにゃらら
    hostname: 'ほにゃらら'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: ほにゃらら
        create_txg: 4
        children[0]:
            type: 'raidz'
            id: 0
            guid: ほにゃらら
            nparity: 1
            metaslab_array: 33
            metaslab_shift: 36
            ashift: 12
以下省略

というように、今度はashiftが12になりました。

# zpool list -v
NAME           SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
storage       7.25T  1.10M  7.25T     0%  1.00x  ONLINE  -
  raidz1      7.25T  1.10M  7.25T         -
    ada1.nop      -      -      -         -
    ada2.nop      -      -      -         -
    ada3.nop      -      -      -         -
    ada4.nop      -      -      -         -

# zpool status
  pool: storage
state: ONLINE
  scan: none requested
config:

        NAME          STATE     READ WRITE CKSUM
        storage       ONLINE       0     0     0
          raidz1-0    ONLINE       0     0     0
            ada1.nop  ONLINE       0     0     0
            ada2.nop  ONLINE       0     0     0
            ada3.nop  ONLINE       0     0     0
            ada4.nop  ONLINE       0     0     0

errors: No known data errors

プールができてしまった後は、「なんとか.nop」という変換する仕組みは不要らしいので、もとのada1などに戻します。

こんな感じ。

いったんプールをexportします。
# zpool export storage

プールが見えなくなります。
# zpool list
no pools available

「なんとか.nop」をやめます。
# gnop destroy ada1.nop ada2.nop ada3.nop ada4.nop

プールをimportします。
# zpool import storage

プールが見えるようになります。
# zpool status
  pool: storage
state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        storage     ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            ada1    ONLINE       0     0     0
            ada2    ONLINE       0     0     0
            ada3    ONLINE       0     0     0
            ada4    ONLINE       0     0     0

errors: No known data errors

というわけで、ada1とかに戻りました。

一応確認。

# zdb
storage:
    version: 5000
    name: 'storage'
    state: 0
    txg: 25
    pool_guid: ほにゃらら
    hostid: ほにゃらら
    hostname: 'ほにゃらら'
    vdev_children: 1
    vdev_tree:
        type: 'root'
        id: 0
        guid: ほにゃらら
        children[0]:
            type: 'raidz'
            id: 0
            guid: ほにゃらら
            nparity: 1
            metaslab_array: 33
            metaslab_shift: 36
            ashift: 12
以下省略。

ashiftは12になってます。

さて、これで速くなったのかどうか…計測していないのでわかりません。

20131107


(pkgsrc) net/libsoup24で、undefined reference to `WIFEXITED'

2013-11-06 23:59:00 | デジタル・インターネット

自分用メモ

pkgsrcのnet/libsoup24で、いつもでる(?)エラー

make[3]: Entering directory `/var/tmp/pkgsrc/net/libsoup24/work/libsoup-2.42.2/tests'
  CCLD     xmlrpc-server-test
xmlrpc-server-test.o: In function `xmlrpc_test_exited':
xmlrpc-server-test.c:(.text+0x288): undefined reference to `WIFEXITED'
xmlrpc-server-test.c:(.text+0x29a): undefined reference to `WEXITSTATUS'
collect2: ld returned 1 exit status
make[3]: *** [xmlrpc-server-test] Error 1
make[3]: Leaving directory `/var/tmp/pkgsrc/net/libsoup24/work/libsoup-2.42.2/tests'

よく使われるマクロだと思うけど。
ソースコードはここ。

static void
xmlrpc_test_exited (GPid pid, int status, gpointer data)
{
        errors = WIFEXITED (status) ? WEXITSTATUS (status) : 1;
        g_main_loop_quit (loop);
}

ざっくりgrepで探すと、WIFEXITEDは、stdlib.hとsys/wait.hで定義されているっぽかった。

そこで
#include <stdlib.h>
を追加してみたら、だめだった。

#include <sys/wait.h>
を追加してみたら、うまくいった。

よくわからないけど結果オーライ。

20131106


(FreeBSD) portsnapで認証付きproxyサーバを使う

2013-11-05 23:59:00 | デジタル・インターネット

portsnapを、ユーザー名とパスワードで認証が必要なproxyサーバ経由で使おうと思ったら、うまくいかない・・・

よくあるように環境変数http_proxyで

setenv http_proxy http://ユーザー名:パスワード@proxyサーバ名:ポート番号/

と指定していたのですが、コレジャナイ、だったようです。

ネット検索してみたらすぐ判明。

setenv HTTP_PROXY http://proxyサーバ名:ポート番号/
setenv HTTP_PROXY_AUTH "basic:*:ユーザー名:パスワード"

と設定するそうです。

portsnapでは、phttpgetを使っていて、こんな感じになっているようです。

# grep HTTP_PROXY_AUTH /usr/src/usr.sbin/portsnap/phttpget/*
/usr/src/usr.sbin/portsnap/phttpget/phttpget.c:static char *            env_HTTP_PROXY_AUTH;
/usr/src/usr.sbin/portsnap/phttpget/phttpget.c: env_HTTP_PROXY_AUTH = getenv("HTTP_PROXY_AUTH");
/usr/src/usr.sbin/portsnap/phttpget/phttpget.c:     (env_HTTP_PROXY_AUTH != NULL) &&
/usr/src/usr.sbin/portsnap/phttpget/phttpget.c:     (strncasecmp(env_HTTP_PROXY_AUTH, "basic:" , 6) == 0)) {
/usr/src/usr.sbin/portsnap/phttpget/phttpget.c:         (void) strsep(&env_HTTP_PROXY_AUTH, ":");
/usr/src/usr.sbin/portsnap/phttpget/phttpget.c:         (void) strsep(&env_HTTP_PROXY_AUTH, ":");
/usr/src/usr.sbin/portsnap/phttpget/phttpget.c:         proxy_auth_user = strsep(&env_HTTP_PROXY_AUTH, ":");
/usr/src/usr.sbin/portsnap/phttpget/phttpget.c:         proxy_auth_pass = env_HTTP_PROXY_AUTH;


あ~あ、またか。

ちょっと探してみたのですが、このやり方の説明が、マニュアルで見つからないんですよね。

20131105