2013年7月14日日曜日

Haltとcast

物理学者(見習い)は、数学とコンピュータにお世話になっております。

最近行ったドイツとグーテンベルク博物館で「この言葉はっ!!」と思ったものがいくつかあったので、紹介します。 (さらっと並列に書きましたが、グーテンベルク博物館はドイツに含まれるという関係です)

HALT

マイクロプロセッサの命令で「MPU停止!」の命令です。 ( HALT - 通信用語の基礎知識) Z80だと機械語は76hでしたね。

ドイツの街ではバス停が「Halt」なのです。バス停のマークが「H」で、何でなのかなと思っていたら、Haltの頭文字でした。
Z80の方のHaltは昔から知っていたので、すごく合点がいきしました。
nullだけでなく、haltもドイツから入ってきた言葉だったのですね。ふむふむ。

cast

プログラミング言語において、型変換することです。 ( キャストとは: - IT用語辞典バイナリ) type conversionとも言います。schemeのstring->numberみたいなのはcastと言うのでしょうか。

活版印刷用語でのcastは、matrixと呼ばれる活字の型(鋳型)に、鉛などの金属を融かして注ぎ、活字(type、AとかBとか)を作る工程です。活字(type)を並べてインクを活字につけて、紙を載せて押し付けると紙に文字が印刷されます。

Matrixとtypeは、もちろん凹凸、左右が逆だけれど、同じ意味をもっています。プログラミングでの「型変換」と雰囲気が似てると感じます。

(おまけ)Still

"Extra Still"と書いてある水を買ったら、炭酸でした。
Still waterは、ぶくぶくしていない(炭酸の入っていない)水をさすのに、ぶくぶくだったのです。
よく読むと"wasser mit sehr wenig kohlensäure"(water with very weak carbonic acid、とても弱い炭酸入りの水 の意味)と書いてあります。
私には全然弱く感じません。ばっちり炭酸水です。うーん。

結局、ペットボトルを振って二酸化炭素を追い出しました。でも硬い水でした。味がします。
水よりビールがおいしい国でした。

LibreOfficeでの文字化け(character encodingの指定法)

背景

Microsoft Office からexportした、テキストファイルがある。
(FreeBSD 9.1上の)emacsで書き進めようと思って、テキストファイルにexportしたのだけれど、やっぱりLibreOfficeで作業をしようと、気が変わった。

起きた問題

$ libreoffice hoge.txt
で開いたら、文字化けしている。
character encodingの問題だと思うのだけど、設定するところが見当たらない。
$ emacs hoge.txt
は問題なく、「適当に」encodeを解釈して、きちんと日本語で表示されるのに。
お、左下を見るとS(DOS)と表示されている。
encodingがShift-JIS (S)で、改行コードがCR+LF(DOS)なのね。
Sの代わりにU(UTF-8)、E(EUC)はよく見かける。
(DOS)の代わりに:だと、改行コードはLF。

解決法

$ LANG=ja_JP.SJIS libreoffice hoge.txt
でLibreOfficeを起動する。ふだんは、LANG=Cで暮らしているのでそのままでは開けなかったらしい。
LANGとして選べるものは、FreeBSDでは、/usr/share/nls/の下にあるディレクトリの名前になっているもの。
日本語だと、ja_JP.SJIS ja_JP.UTF-8 ja_JP.eucがあった。
これで、LibreOfficeで文字化けせずに開ける。

改行コード

で、LibreOfficeで編集して、テキスト形式で保存したのだけど、追記した部分の改行コードがLFになっていた。もとからある部分はCR+LFのまま。
部分ごとに改行コードが違うのはよろしくないので、sedで直す。
$ gsed s/'\r'//g hoge.txt >tmp
$ gsed 's/$/\r/' tmp > hoge_new.txt
BSD sedではうまくいかなかったのでgsedを使う。Linuxユーザはもちろん普通のsedでOK。
この形式ならMicrosoft Officeでも問題なく開けるはず。

以上

2013年7月6日土曜日

CentOS 6.3 on VirtualBox 4.2.12で Gnomeを起動するまで

Virtual Box上にCentOSを入れるのが、結構大変だったので、
はまりポイントを中心に記録しておく。

1. HostOS上にVirtualBoxをinstallする。

親マシン(ホスト)はFreeBSD 9.1。portupgrade -Nで
emulators/virtualbox-ose
emulators/virtualbox-ose-kmod
をインストールする。ただのvirtualbox-oseが先。
何か、gusetをinstallしようとして怒られて、virtualbox-ose-kmodを入れたのだけど、何があったかの記録が見つからない。

!! emulators/virtualbox-ose-kmodはkernel moduleなので、/usr/src/などを参照する。
したがって、「/usr/src/はkernelを作るときにしかマウントしない」とか運用していると/usr/src/が見つからなくて、installに失敗する。

!! portupgradeは*.koを作るところまでやってくれる。
まずは、kldloadで手動でkernel panicしないか試してみるよろし。
もし、panicしてもrebootしたら元に戻る。

!! 自動でkernel moduleを読み込みたいなら、/etc/rc.conf.localにkld_list="vboxdrv"のように追加する。
FreeBSD 9.1から/boot/loader.confに書かなくてもよくなったので、事故があっても、single user modeであがって助かれる(はず)。
(参考:Toshio Uchiyama's Diary(http://www.uchi-yama.info/wp/?p=57) http://lists.freebsd.org/pipermail/freebsd-hackers/2012-February/037780.html(FreeBSDのメーリングリスト)

2. Virtual Machineを用意する。

「New」のアイコンをクリックして、GUIで作る。

Type/VersionをLinux/other Linuxとすると、64bitを選べないように見えるが、実際は、64bit仮想マシンになる。
(64bitのinstalldiscでインストールできたのだから)
ここで選ぶ内容はアイコンにしか関係ないのか?

Memoryをデフォルトの256MByteにしたら、installするときに「メモリが小さすぎ」と怒られた。512MByteにしたら大丈夫。Memory sizeはいつでも大きくできる。
普通は、Hostの半分位にするものらしい。

Execution CapはGuestがどんだけ物理マシンのCPUを食ってよいか。
ホストが2core 2thereadなので、1CPU(core)を100%食ってよいことにした。
この数字もあとから変えられる。

HDDの大きさは20GBにした。GnomeとX用のフォントが入った段階で、
半分強埋まっている。HDDの拡大は少し面倒らしいので( くしゃみ日記(http://kei-pon.cocolog-nifty.com/blog/2013/04/virtualbox-hdd-.html))、
もう少し大きめにしたほうがよかったかもしれない。
dynamically allocatedなら、物理HDDを占領するわけでもないし。
あるいは、物理マシンでの大きなHDDへの引越しと同じことはできるはずので、
そんなに心配はいらないかもしれない。
(FreeBSDなら、新しいHDDのpartitionを手で切って、dumpとrestoreでごにょごにょとやるんだけど、linuxはどうやるんだろう??)

3. CentOSをinstall discからインストール

CentOS本家(http://www.centos.org) からリンクをたどって、CentOS-6.4-x86_64-bin-DVD1.isoとCentOS-6.4-x86_64-bin-DVD2.isoをダウンロードする。
Virtual Boxの設定画面で、CentOS-6.4-x86_64-bin-DVD1.isoをCDに入れて、電源Onする。

discのcheckは省略してよい。

時計は、親(ホスト)のSystem ClockがUTCなので、Use system clock UTCを選んだ。

CentOSで自宅サーバー構築(http://centossrv.com/centos6.shtml) を参考にしようとしたのだけど、VMだからか「赤と青と灰色の昔ながらのUnixのインストール画面」になる。
参考ページのように、色々聞かれたりしない。
discからインストールできるのは、kernelまで。gnomeを含むpackageはこの段階ではインストールできない。
Congratulations, your CentOS installation is complete.となったら、Rebootする。

Rebootすると、ログイン画面が出る。install時に決めたパスワードで、rootログインできたら、うまく行っている。

4. CentOS最低限の環境整備

まず初めに、一般ユーザーを追加した。
uidを親(ホスト)と合わせておくと、将来的に苦労しなさそうな気がする。
(親の環境でのuidは
$ id
とすれば表示される。)
# adduser -u 8888 username (8888は自分のユーザーidにする。)
# passwd username

他、最低限のpackageを入れる。
うちのCentOSは、目的があって、完全ローカルで運用する。
なので、yumもinstall disc頼り。
think-tの晴耕雨読 RSSフィード(http://d.hatena.ne.jp/think-t/20101207/1291733637 )が参考になった。
CentOS-6.4-x86_64-bin-DVD1.isoをCDに入れてmountする。
# mkdir /media/CentOS
# mount /dev/cdrom /mdeia/CentOS

# yum --disablerepo=\* --enablerepo=c6-media search emacs
で正しく動くか確かめよう。

うまく動いたら、次のコマンドで色々インストールする。
# yum --disablerepo=\* --enablerepo=c6-media install <package name>
次のものを入れた。
emacs(依存関係でいろいろなものが入る。)
man
rsync(このあと使うのだ)
sudo (rootでの作業気持ち悪い)

5. Gnomeのインストールまで

install discは2枚になっていて、2枚目の中身は、そのままでは使えない。
1枚目と2枚目の中身を同じディレクトリにおいておく必要がある。

CentOS-6.4-x86_64-bin-DVD1.isoをCDに入れた状態で、
# umount /media/CentOS
# mount /dev/cdrom /mnt/
# rsync -av /mnt/ /media/CentOS/
# umount /mnt/

CentOS-6.4-x86_64-bin-DVD2.isoに入れ替えて
# mount /dev/cdrom /mnt/
# rsync -av /mnt/ /media/CentOS/

さあ、gnomeをインストールしよう。
# yum --disablerepo=\* --enablerepo=c6-media groupinstall "X windows system"
# yum --disablerepo=\* --enablerepo=c6-media groupinstall "Desktop"

!!古い参考文献には、"Gnome Desktop Envrionment"と書いてあるけれど、今は"Desktop"です。要注意。
東の森(http://morrey22.hatenablog.com/entry/2013/04/14/212837) さんに感謝を。

!! ここでおもむろに
# startx
すると、文字が豆腐になるので、ちょっと待て。豆腐のgnomeからlogoutするの大変。

X用のフォントを追加したら出来上がり。
# yum --disablerepo=\* --enablerepo=c6-media install xorg-x11-font*

# startx
するとgnomeが立つ。「rootでXやめろよ」と警告が出るけど気にしない。
一般ユーザでも
$ startx
でgnome が立つ。ふう。
!! なお、この段階でも
# X -configure
はerrorしてしまう。これは気にしないことにした。

runlevelは上げると、起動時にXが起動するのは知っているのだけれど、テストマシンで不安定な見込みなので、しばらくは黒画面でブートさせる予定。

ふう、一仕事。

!! 私は、OS、Gnomeは英語環境で運用しているし、今回のCentOSも英語版のものしか入れていない。(エラーとかが文字化けで読めなかったりするのが嫌だから)
なので、日本語環境を整えたい人は、追加の情報が必要だと思う。
もちろん、普段の環境では、font、emacs、tex、firefoxなどは日本語対応にして生活しているけど、逆にそれ以外のアプリケーションが日本語である必要はあんまり感じないので。

参考にさせていただいたみなさま、どうもありがとうございます。