先月のことですが、あれ、これって安い?
と思って、衝動買い
Windows 8.1 64bit DSP版
といっても、買っただけで、放置したまんまですけど・・・
まだXPのPCがあるんですけどね・・・
めんどくさくって・・・
1年くらい前にも1本買ったんですが、そっちは仮想マシンで動かしてみたものの、なぜか、再アクティベーションしろ、みたいなことになってしまって、あとで考えようって思ってから、すっかり忘れて放置中。
先月のことですが、あれ、これって安い?
と思って、衝動買い
Windows 8.1 64bit DSP版
といっても、買っただけで、放置したまんまですけど・・・
まだXPのPCがあるんですけどね・・・
めんどくさくって・・・
1年くらい前にも1本買ったんですが、そっちは仮想マシンで動かしてみたものの、なぜか、再アクティベーションしろ、みたいなことになってしまって、あとで考えようって思ってから、すっかり忘れて放置中。
ちょっと前の話。
これまでFreeBSD 9.xで使っていたマシンを、そろそろFreeBSD 10.xにしようと思ったけど、バージョンアップしたら動かなくなった、みたいなことになると困ります。
というわけで、FreeBSD 10をdisklessブートさせて、問題なく動作するか確かめてから、バージョンアップしようかな、ということにしました。
ファイルシステムをNFSで用意して、FreeBSDをdisklessでブートするのは、
https://www.freebsd.org/doc/handbook/network-diskless.html
Diskless Operation with PXE
にて説明してあることを、てきと~にはしょりながらやって、けっこう、かんたんにできてしまいます。
どうせなら、ファイルシステムをNFSではなくiSCSIにできたらいいんじゃね~?と思いまして、ちょっとやってみました。
ファイルシステムがNFSだと、chflagsができないので、freebsd-updateするとエラーになっちゃうんです・・・
root@HOST:~ # freebsd-update --debug install
Installing updates...install: rename: ///lib/INS@VZw2 to ///lib/libc.so.7: Operation not permitted
install: rename: ///sbin/INS@XLr3 to ///sbin/init: Operation not permitted
install: rename: ///usr/lib32/INS@LIyh to ///usr/lib32/libc.so.7: Operation not permitted
done.
だからiSCSIなら、普通のHDDと同じようにできますよね?、というわけです。
FreeBSD iSCSI bootとかでネット検索すると、iSCSIブートできるようにするコードを開発している人がおられるのですが、FreeBSD 9と書いてあったので、10だとどうなる???そもそも、そういうのは公式にサポートして欲しいな~、とか思いまして、今回はそちらはパス。
とりあえず、root filesystemをNFSとしてsingle user modeで起動して、
iscsid
とやってiSCSIしてみると、/var/run/iscsid.pid が作成できなくてエラー終了するので
iscsid -P /dev/null
としてみると、これならうまくいく
iscsictl -Aa
で、あー、iSCSIで見えました。
そこで、
mount -o rw,union /dev/gpt/rootFS /
したら(/dev/gpt/rootFS はiSCSIで見えるパーティション)、うまくいったように見えたのですが、viを起動したときkernel panic。
union FSてば、だめな子?
次のアイデア。
mount /dev/gpt/rootFS /mnt
mount_nullfs /dev /mnt/dev
chroot /mnt /bin/sh
sh /etc/rc
すると、/をmountしようとしてエラー終了する。
う~ん、/をrwマウントするタイミングで、まったく別のファイルシステムをマウントすることって、不可能なんですかね?
/etc/fstabで、/ の行はコメントアウト。もうマウントされているから不要だし、それがあるとエラーになるので。
sh /etc/rc
したらできた。
さて、どうやってマルチユーザーモードに移行するのだ?
・・・とか考えている間に、かってにリブートしていた。
kernel panicしていた。
mount_nullfsがいけないらしい。devfsをmountすればOK
こんな感じ
--------------
iscsid -P /dev/null
iscsictl -Aa
sleep 3
mount /dev/gpt/rootFS /mnt
mount -t devfs devfs /mnt/dev
swapon /dev/gpt/swapP
chroot /mnt /bin/sh
--------------
ということは
上記を/etc/rc.iscsiboot とかにしておいて、
/sbin/initが、最初にそれを実行し、
/sbin/initが、chrootしてしまえばいいのでは?
・・・という気がしてきました。
というわけで、/sbin/initのソースコードを見ますか。
このあたり使えそう。というか、それっぽいコードが書かれている!
if (kenv(KENV_GET, "init_script", kenv_value, sizeof(kenv_value)) > 0) {
state_func_t next_transition;
if ((next_transition = run_script(kenv_value)) != 0)
initial_transition = (state_t) next_transition;
}
if (kenv(KENV_GET, "init_chroot", kenv_value, sizeof(kenv_value)) > 0) {
if (chdir(kenv_value) != 0 || chroot(".") != 0)
warning("Can't chroot to %s: %m", kenv_value);
https://wiki.freebsd.org/AvgLiveCD
を読んでみたら、なんとなく、できました。
NFS rootとなる場所に、とりあえず、init_iscsiというファイル名で、こんなファイルを作っておく。
#!/bin/sh -vx
PATH=/sbin:/bin:/usr/sbin:/usr/bin
iscsid -P /dev/null
iscsictl -Aa
sleep 5
mount /dev/gpt/rootFS /mnt
mount -t devfs devfs /mnt/dev
swapon /dev/gpt/swapP
echo "init_iscsi done"
exit 0
同じくNFS rootとなる場所の/boot/loader.confにて、
init_script="/init_iscsi"
init_chroot="/mnt"
と書いておく。
これで、なんとなく動きました。
というわけで、こんな、ヘンテコなことをすれば、なんちゃってiSCSIブートができる!!
・・・う~ん、でも、最初にNFSを使ってるじゃん
1. 最初、ルートファイルシステムをNFSでマウントしてブートさせておいてから
2. iSCSIなファイルシステムをマウント
3. iSCSIなファイルシステムにchrootして、そこでinitを実行
問題点は、
freebsd-update install
したとき
iscsi側のファイルは置き換わるが、
NFS root側の
/sbin/init
が置き換わらない、ってこと。
/boot以下のファイルも、ブートローダでNFSなところを読みに行ってしまうので、portsでインストールしたものがあっても、反映されない。
うーん、MFSを使う方法が良さそうです。
そういえば、Linuxって、initramfsうんたら、でブートさせてるんですよね。
そんな感じのこと、FreeBSDでもできると思うのですが・・・
昔のFreeBSDのインストーラって、MFSをつかってましたよね。あれ、どうやるんだったけかな。
あとで考えよう
2ヶ月くらい前、php-mode.elか何かでトラブったことの、自分用メモ。
emacs-24で、symbol's definition is void cl-macroexpand-allというのが出た。
ネット検索したら、まったく同じ話がでてた。
http://emacs.stackexchange.com/questions/2864/symbols-function-definition-is-void-cl-macroexpand-all-when-trying-to-instal
(require 'cl)
を入れておけばいいそうだ。
ふ~ん。
ところで、最近の人はEmacsを使わないそうだ。そうですか。そうですか。
ちょっと前から、pythonを始めました
いや、ほんと、恥ずかしいくらいに、よくわかっていません。
ipythonが便利だっていうので、ipythonをインストールしたり、matplotlibがいいというのでインストールしてみたり。
ん~、グラフ、表示されないんですけど???
こうするみたいです。
% ipython --matplotlib=gtk
Python 2.7.8 (default, Oct 30 2014, 15:27:24)
Type "copyright", "credits" or "license" for more information.
IPython 2.0.0 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
Gtk-Message: Failed to load module "canberra-gtk-module"
Gtk-Message: Failed to load module "gnomesegvhandler"
または
% python
import matplotlib
matplotlib.use('GTK')
とか。
matplotlib.use("GTKAgg") がいいみたいですが、よくわかりません
pkgsrcで、py-qt4をインストールしたら
% ipython --matplotlib=qt
% python
import matplotlib
matplotlib.use("QT4Agg")
もできるようになりました。
よくわかんないけど、まあ結果オーライ
FreeBSD 10から、pkgというパッケージ管理システムが全面的に導入され、また、portsじゃなくて、バイナリパッケージでも、けっこう使い物になるじゃん!
という感じになりました。
それでもやっぱり、portsを使って、ビルドオプションを変更してインストールしたいソフトウェアがあります。
というわけで、たいていはpkgでバイナリパッケージを使ってインストールやアップデートをするけど、ごく一部だけは、portsを使って、portmasterしてました。
しばらくの間は、なんとなくテキトーに手動でやりくりしていたのですが、pkg lockというコマンドを知りました。
マニュアル読めよ・・・RTFM
これはいい!と思ったのですが、pkg installとかしたとき
・・・省略・・・
apr-1.5.1.1.5.4 is locked and may not be modified
Checking integrity... done (1 conflicting)
pkg: Cannot solve problem using SAT solver:
cannot install package ja-libreoffice, remove it from request? [Y/n]:
だめじゃん、pkgコマンド、使えないじゃん。なにそれ、「Cannot solve problem using SAT solver」ってのは・・・
それにしても、SAT solverなんて、使ってたんですね、へー
先月のことでしたか。悪夢のようなトラブル。
24時間運用しているとあるサーバの電源を落として、その後、電源オン。
ZFS: i/o error - all block copies unavailable
ZFS: i/o error - all block copies unavailable
Can't find /boot/zfsloader
FreeBSD/x86 boot
Default: zroot/ほにゃらら:/boot/kernel/kernel
boot:
ZFS: i/o error - all block copies unavailable
・・・は???
ブートしませんでした。
これ、全部ZFSだけにしてしまったマシンです。
別のサーバの力を借りて、disklessでブートさせてみました。
zpool import ほにゃらら すると、ちゃんとZFSなファイルシステムが見えてます。ZFSが壊れているってわけではないようです。
ただ、ブートしなくなっただけ。
ブートローダが壊れた?と思って
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ほげ
うんぬん
とかやって、ブートローダを書き込んでみたけどだめ。
うーん、困った。
さらにネット検索して、解決方法を探る。
https://forums.freebsd.org/threads/zfs-i-o-error-all-block-copies-unavailable-after-upgrading-after-make-installkerne.26073/
/bootをコピーするとなおる、という話がでている
藁をもすがるつもりで、
mv /boot /boot-
mkdir /boot
cd /boot-
tar cf - . | tar xvf - -C /boot/
えい!
ブートしました。
えー!?
なぜなんでしょね
まだZFSには怖いところが残っているのか…
とあるPC serverで、ZFSを使いたくってFreeBSDで動かしていたのですが、ZFSとファイルサーバだけじゃ暇しているので、仮想マシンでもうごかしましょ、ってことでVirtualBox。
ところが、なぜか、妙に動きが遅い。数秒動いて、数秒固まる、って感じ。固まっている間はCPUがブンブン回ってる。
これまで、けっこうVirtualBoxを使ってきているのですが、これは初めての現象。なんだこりゃ・・・、ということで、いつか直るだろうと思い、見なかったことにしていました
なんですが、ふと、bhyveのことを思い出して、
http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/virtualization-host-bhyve.html
を見ながら、やってみました。
このドキュメントですが、bridgeとかtapとか、ちょっとハードルが高いかもしれませんが、1~2回、試行錯誤しつつ、なんとか動きました。
いや、なんとか、といいますか、いったん覚えてしまえば、けっこー、あっさりと動いてしまいます。
というわけで、Ubuntu Server 14.04 LTSとかCentoS 7とかも、えっ?こんなにカンタンなの?というくらいに、何個も仮想マシンを立ち上げてしまいました。
VMwareとかVirtualboxとかと比べると、bhyveは、舞台裏がそのまんますべて表に見えてしまっている、ってかんじで、中身むき出しの仮想化ソリューション、ってゆーかんじです。
今のところは、わかっている人だけ使って下さい、という感じでしょうか。
先日のこと。
昔書いたPHPのコードを、ひさしぶりに実行しようとして、動かん!
httpdのエラーログを見ると
PHP Fatal error: Call to undefined function http_redirect()
と出てる。
pecl-httpが有効になっていないのかな?
と思い、php -i したり、phpinfo()を実行してみると、有効になっている。
おかしいな~ということで、FreeBSDなのでportsにて、make patchして、ソースコードを眺めたり、strings http.soとかやってみると、http_redirectがどこにも無いような感じ。
うーん、どうなってんの?
?
?
?
わかりました。
以前はpecl-http-1.7.6だったのが、いつのまにか、pecl-http-2.1.4に変わってました。
でもって、バージョン1系とバージョン2系は、もうまったくの別物、っていうくらい変わってるようです。
というわけで、portsのディレクトリを見てみると、www/pecl-http1 なるものがあったので、そっちに入れ替えました。
これで解決。
☆
あとで気がついたのですが、ports/UPDATINGにも、そういうことが書いてありました。
なんだかなーもー
自分用メモ
SSDのプチフリがひどい~、もうだめだSSDをやめてHDDに戻ろう!
と思ったら、どうやらSSDが壊れてたっぽい、の件のつづき。
FreeBSDでddコマンドで、SSDにあったCドライブのパーティションを、まるごとHDDへコピーした。
そもそも、HDDのCドライブにあったパーティションをSSDにコピーしたものなので、パーティションサイズも、きっかり同じ。
そして、SSDを外して、HDDで起動。
ログオンしてみると、なんか感じがおかしい。
あれれ?
「このWindowsのコピーは正規品ではありません」
・・・そんなばかな
エクスプローラーもでない。
うーん。
おっ、タスクマネージャーは出せたぞ。
いろいろいじってたら、どうやらCドライブになるべきドライブが、Hドライブになってしまっているようだ。
あ~、つい先日あった
(Windows) ログオンすると、すぐにログオフしてしまう
と同じ現象じゃないですか。
これはレジストリを書き換えれば直るはず。
regeditを実行・・・
・・・できませんね
Cドライブが無い状態では、コマンドの実行とかできないんでしょうね。
うーん。
おや、コマンドプロンプトは出せたぞ。まー、何もできないけど、たしかにHドライブだ。
☆
この問題を直すには、「レジストリを不用意に書き換えてWindowsが正常に起動しなくなった場合のレジストリの修正方法」と同じでいいみたい。
ネット検索してやってみました。
Windows7を起動するときに、F8キーを連打(?)して、「スタートアップ修復」(?)とかいうので立ち上げる。
すると、HDDではなく、RAMディスクみたいなやつで、Windowsが起動してくる。
そのWindowsでregeditを実行。
そこで見えているレジストリは、別のWindowsなので、そこを見てもしかたない。
メニューコマンドの「ハイプの読み込み」で、HDD上にあるレジストリのファイルを読み込む。このときに、読み込み場所を指定しろ、って言われるけど、適当でいいらしい。
レジストリのファイルはいくつかあるらしいけど、今回はここのSYSTEMが該当する。
あとは、MountedDevicesのところを、この前と同様に書き換え。
「ハイプのアンロード」をすると、HDDに書き戻されるらしい。
そして、再起動。
直りました
自宅で一番よく使うPCのシステム用のHDDをSSDに交換して、快適になった~と思ってから、1年ちょっと経過したころ。
WebブラウザのFirefoxを使っているとき、とくにGoogleマップを表示させたりとか、Thunderbirdを立ち上げたあととか、妙に動作が遅い、いや、反応がなくなる、という現象が起きることに気がつき、
う~ん、これが「ぷちフリ」ってやつですか
と思ってたのですが、直す方法もわからないので(ファームウェアもすでに最新バージョンだった)、そのままだましだまし使い続けること、さらに1年ちょっと。
先日、とうとうたまりかねて、SSDやめて、HDDにもどす!
ということで、ネットワークブートでFreeBSDを立ち上げて、ddでコピー。
すると!
(ada2:ahcich5:0:0:0): READ_FPDMA_QUEUED. ACB: 60 40 00 7e 1b 40 04 00 00 00 00 00
(ada2:ahcich5:0:0:0): CAM status: ATA Status Error
(ada2:ahcich5:0:0:0): ATA status: 41 (DRDY ERR), error: 40 (UNC )
(ada2:ahcich5:0:0:0): RES: 41 40 00 7e 1b 00 04 00 00 40 00
(ada2:ahcich5:0:0:0): Retrying command
(ada2:ahcich5:0:0:0): READ_FPDMA_QUEUED. ACB: 60 40 00 7e 1b 40 04 00 00 00 00 00
(ada2:ahcich5:0:0:0): CAM status: ATA Status Error
(ada2:ahcich5:0:0:0): ATA status: 41 (DRDY ERR), error: 40 (UNC )
(ada2:ahcich5:0:0:0): RES: 41 40 00 7e 1b 00 04 00 00 40 00
(ada2:ahcich5:0:0:0): Retrying command
(ada2:ahcich5:0:0:0): READ_FPDMA_QUEUED. ACB: 60 40 00 7e 1b 40 04 00 00 00 00 00
(ada2:ahcich5:0:0:0): CAM status: ATA Status Error
(ada2:ahcich5:0:0:0): ATA status: 41 (DRDY ERR), error: 40 (UNC )
(ada2:ahcich5:0:0:0): RES: 41 40 00 7e 1b 00 04 00 00 40 00
(ada2:ahcich5:0:0:0): Retrying command
(ada2:ahcich5:0:0:0): READ_FPDMA_QUEUED. ACB: 60 40 00 7e 1b 40 04 00 00 00 00 00
(ada2:ahcich5:0:0:0): CAM status: ATA Status Error
(ada2:ahcich5:0:0:0): ATA status: 41 (DRDY ERR), error: 40 (UNC )
(ada2:ahcich5:0:0:0): RES: 41 40 00 7e 1b 00 04 00 00 40 00
(ada2:ahcich5:0:0:0): Retrying command
(ada2:ahcich5:0:0:0): READ_FPDMA_QUEUED. ACB: 60 40 00 7e 1b 40 04 00 00 00 00 00
(ada2:ahcich5:0:0:0): CAM status: ATA Status Error
(ada2:ahcich5:0:0:0): ATA status: 41 (DRDY ERR), error: 40 (UNC )
(ada2:ahcich5:0:0:0): RES: 41 40 00 7e 1b 00 04 00 00 40 00
(ada2:ahcich5:0:0:0): Error 5, Retries exhausted
SSDで、エラーでてるじゃん・・・
ぷちフリじゃなくて、障害だったんですか?!
Windows7では何もエラーはでてませんでしたけど。