2014年7月15日火曜日

UEFIシステムパーティション

# gdisk /dev/sda
パーティションタイプはEF00
# mkfs.vfat -F 32 /dev/sda1


おわり

LinuxでもrEFIndしたい!

以前UEFIについてpostした時はGRUBで説明しました.
しかし,そもそもが複数ブートローダーをインストールでき,しかもブートメニューそのものをもつUEFIにとって,GRUBのような旧来のマルチブートの巨大な仕組みは必要でしょうか.

それと,MacユーザーがrEFInt/rEFIndつかってるのかっこいい

ということでrEFIndをLinuxでもつかおう!


2014年7月5日土曜日

Linux カーネルコンフィグ 晒し

TLで今カーネルコンフィグの話になってたから自分のカーネルコンフィグ置いてみる.
マシンはThinkPad Edge E145 (A4-5000) です

今回はこれだけのネタでした.
他の人はどんなコンフィグにしてるとか,このコンフィグこうしたらいいんじゃない?とか,募集してます.

2014年6月19日木曜日

UNIX and 2BSD on PDP11(SIMH) その2

前回からの続きなので前回から読んでること前提です

BSDを入れる前に

BSD関連についてはこちらを参考にした
http://gitter.matrix.jp/simh-for-unix/v6-unix-on-simh/
情報がよくまとまって非常にかりやすいサイトである.

インストールしたUNIXv6に2BSDをインストールする.
また阪大のミラーから
ftp://ftp.ics.es.osaka-u.ac.jp/pub/mirrors/UnixArchive/PDP-11/Distributions/ucb/2bsd.tar.gz
2BSDのtarballを入手.

ftp://ftp.ics.es.osaka-u.ac.jp/mirrors/UnixArchive/PDP-11/Bug_Fixes/V6enb/v6enb.tar.gz
からv6enbを入手し,解凍.cc -o enblock enblock.cとすることでenblockコマンドを作成.

gunzip -d 2bsd.tar.gz | ./enblock > 2bsd.tap
とすることで,tar形式でアーカイブされた2bsdのテープイメージ(simh用形式に変換済み)が手に入る.これを,UNIXv6に入れてアーカイブを解凍するだけ……なのだが問題がある.
tarコマンドはUNIXv7より追加されたコマンドでUNIXv6にはtpコマンドしかない.
tpコマンドも使うとtarにかなりよくにたオプションであることがわかる.

とりあえず,前回の記事にあるSoftwareKitからもってきたUNIXv7のイメージを用いる.
その前に起動スクリプトであるUV7に修正が必要.
2bsd.tapをUV7とかと同じフォルダにコピーしてきて,
UV7に
att tm0 2bsd.tap
att tm1 tape.tap
と書く.これで2bsd.tapはtm0にアタッチされ,tape.tapというテープイメージは新しく作られた上でtm1にアタッチされる.
そして,
# cd /tmp
# tar xv0 tar
# tp rm1 tar
としてやるとtm1にあるtape.tapにtarが書き込まれる.

ちょっとウンチク.
tarのxvは現代のオプションと同様.その後ろファイル名を指定して特定のファイルだけ取り出している.tpのオプションrmも現代のtarのrmと同様で,rはappendでmはmodification-timeだ.もっとも新しいアーカイブを作るときは専らcを使うのでrをつかわない人は多いはず.
後ろの0や1という数字は単純にテープデバイスの番号である.
当時はtarもtpもテープに対するコマンドで,*.tarのようなファイルをつくるわけでなかったからこうだった.後にファイルを作ったりファイルから解凍するときの特殊ケースとして,0や1といった数字の変わりにfオプションを使うようになったがそちらのほうが今では主になってしまっている.

閑話休題

何はともあれ,tape.tapというテープイメージがつくられたので,これをUNIXv6のフォルダに持っていき,起動スクリプトにatt tm0 tape.tapと書いてアタッチしよう.
あとはUNIXv6を起動し
# chdir /tmp
# tp xm0 tar # mv tar /usr/bin
とでもしてやればtape.tapからtarコマンドが取り出され,/usr/binに配置される.これでtarコマンドがUNIXv6に導入された.これで2BSDのインストール準備が整う.

2BSDインストール
とりあえずUNIXv6の起動スクリプトのatt tm0 tape.tapをatt tm0 2bsd.tapにする.
次に,起動してから適当なフォルダ(/mntとか)に2bsdというフォルダをつくり,
# tar x0 bin
とすると2bsd.tarからbinフォルダが解凍される.
あとは,
# chdir bin
# sh install
としインストールスクリプトを走らせると,/usr/bin/ucbにコマンド群がインストールされる.

もしかしてディスクの容量が足りない時は,simhのattでrkNのディスク増やして,mkfsでフォーマットして,mountをしてやれば良い.
/etc/rcに起動時のスクリプト(run command? たぶん今のrc.confとかの原型)があるので,そこにmountコマンドとかを書いてやると起動時にマウントしてくれる.
/etc/fstabは存在しない.

UNIXv6のテープからインストールした時は/usr/share/manにman pageがはいっててもmanコマンドがなく,nroffとかをするしかなかったはずだが/usr/bin/ucb/manが増える.

また,cr3というpagerも増えるのでmanページ等がまともに読めるようになるし,
 他にもviやらMailやらcshやら現在に続くコマンド群が使えるようになる.
問題は,PATHが通っておらず使えないので,まず/bin/cshにインストールされたcshを起動して,set path=(/foo /bar)のような形でPATH環境変数を設定しなければならない.

最後に,viをつかうには/etc/termcapにxtermのtermcapを追加した上で,
sttyで通信速度を9660にする必要がある.

最後に他にいくつか参考になりそうな場所があるサイトたち
2238クラブ,いろいろな過去の情報があつめてある
http://www.tom-yam.or.jp/2238/index.html

日記だけれども有用な情報多し
http://space.geocities.jp/hamesspam/hhwA/100805.html

ここではUNIXv7のテープイメージからインストールの手順紹介されている
http://pcmemo.take-uma.net/unixv7/install-v7-1

2014年6月6日金曜日

UNIX and 2BSD on PDP11(SIMH) その1

2010年ぐらいに初めてsimh-pdp11に触れてから,
ちょいちょいancient UNIXで遊ぶのですが毎回色々忘れてググってるのでメモ

まず普通にsoftware kitからUNIX v7を実行する方法
http://simh.trailing-edge.com/software.html
SIMHの公式ページの,Software Kitは様々なアーキテクチャの様々なOSをアーカイブしている
ここからUNIX v5〜v7を入手可能

uv7swre.zipをダウンロードしたら解凍し,
simh-pdp11(ArchLinux以外でビルドしたりしたらpdp11ってコマンドだと思う)をつかって,
$ simh-pdp11 UV7
で起動.UV7は起動スクリプト,simhのコマンド用のスクリプト
@プロンプトが表示されたら,
@boot
で起動
そして
:プロンプトで
:rl(0,0)rl2unix
として
RL11な0番目のディスクの,ルートにあるrl2unixというカーネルファイルを指定することで,
カーネルをブート

まずは#なプロンプトに落ちてシングルユーザーモードになるので,
^D(Ctrl-D)でマルチユーザーモードに移行
user:root password:root
でログイン可能.
あとはmailもつかえるし各種UNIXコマンドもつかえるし,困らない

exitコマンドではexitせず,^Dでログアウト

エミュレータの終了はCtrl-Eでsimhのプロンプトに抜けた後,simhのqコマンドを発行



次にUNIXv6をテープイメージからインストールする方法
http://d.hatena.ne.jp/oraccha/20101101/1288582382
を参考.oracchaさんが紹介されてるインストール手順のファイルは消えちゃってるけど,
http://shuntavista.jimdo.com/2013/01/05/unix-v6-%E3%82%92-simh-pdp11-%E4%B8%8A%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%E3%83%A1%E3%83%A2-%E7%B0%A1%E7%95%A5%E7%89%88/
のブログで手順を公開されてる方がおられたので再現可能

http://gunkies.org/wiki/Installing_Unix_v6_(PDP-11)_on_SIMH
のほうでもテープからのインストール手順が公開されてる

http://wwwlehre.dhbw-stuttgart.de/~helbig/os/v6/dist.tap
がテープイメージ
上にあるsimhのSoftware KitでUNIX v6をインストールすると何故か
/usr/sysのカーネルソースが抜け落ちているが,このテープからインストールすると
完全な形で当時の環境が入手できる

ftp://ftp.ics.es.osaka-u.ac.jp/pub/mirrors/UnixArchive/PDP-11/Distributions/research/Dennis_v6/
阪大のUnixArchiveのミラーから入手できるUNIXv6のファイルセットからもカーネルソースは入手可能(これは普通にtarball形式)
このミラーには起動可能なsimh用の2.9BSDや2.11BSDだったりとか,
まだソフトウェアディストリビューションに過ぎなかった時代の2BSDとか,
はたまたPDP11を作ったDEC自身が開発したUNIXであるUltrixとか
資料的価値の高い物を大量にアーカイブしているので非常に興味深い

手順は,

simhの起動コマンドスクリプトでUNIXv6のテープイメージを起動するところからはじめる
d cpuはsimhのコマンドで機械語を直接メモリに置いてるが,
実機だとここでディップスイッチ操作でブートローダーを設定してたらしい.
今回はテープから起動するようにする

このスクリプトは途中で無限ループになるので,
Ctrl-Eで一度実行を停止した後にsimhのコマンドg 0で0番地に飛ぶ.

すると=プロンプトが出てくるはずである.
UNIXv6のmkfs(8) (そう,この時代はmkfsがsection VIIIだった!)は,
ファイルシステムを作る時先頭にブートローダーを埋め込む.
テープイメージはここでディスクへテープイメージを書き込むローダーが入っている
いくつか種類があるが,今回はtm(テープデバイス)からRK05なディスクデバイス(rk)に
インストールするので,tmrkコマンドで実行.
=tmrk
disk offset?
0
tape offset?
100
count?
1
=tmrk
disk offset?
1
tape offset? 101
count?
3999
と入力してテープからディスクにインストール.とりあえずこれでrk0ディスクにシステムインストール終了.
やっぱりCtrl-Eの後qで実行を終了し一度simhをリセット



ディスクからブート

とし先程同様ディップスイッチでブートローダーを設定しRK05ディスクからブートするか,

とsimhの機能(bootコマンド)で起動してしまうか.
どうやらsimhのbootコマンドはsimhの内部で汎用のブートローダーを持ってるらしい.
そしてbootコマンドのオペランドによってどのブートローダー(tmかrkかデバイスを見る)を呼ぶか判別し,呼び出してるらしいので,結局ディップスイッチ設定とやることは同じ

とりあえず起動したら@プロンプトが表示される.
UNIX v7と違いここで/にあるファイル名を指定することでカーネルを指定し,カーネルをブートしてしまう.
今回はRK05ディスクにインストールしてるのでrkunixというカーネルを起動.
user名はrootのみ最初は存在.passwordはなし.
起動するといきなりマルチユーザーモードログイン.つまりシングルユーザーモードにいかない.
また,これまた違う部分としてはcdコマンドが存在せずchdirコマンドでディレクトリ移動.
これは不便な上驚きである.

また,/devにmemやkmem以外のデバイスファイルがないのでmknodコマンドでデバイスファイルを
作成する必要がある.
現在もこのコマンドでデバイスファイル作成は可能だが,
当時はmknodやmkfs,mountにinitといった今だと/sbinや/usr/sbin相当のコマンドが/etc/に存在し,
/etcにはPATHが通ってないのでフルパスでコマンドを入力しなければならない.
/etc/mknod /dev/rk0 b 0 0
/etc/mknod /dev/rk1 b 0 1
/etc/mknod /dev/rk2 b 0 2
/etc/mknod /dev/mt0 b 3 0
/etc/mknod /dev/tap0 b 4 0
/etc/mknod /dev/rrk0 c 9 0
/etc/mknod /dev/rrk1 c 9 1
/etc/mknod /dev/rrk2 c 9 2
/etc/mknod /dev/rmt0 c 12 0
/etc/mknod /dev/lp0 c 2 0
/etc/mknod /dev/tty0 c 3 0
/etc/mknod /dev/tty1 c 3 1
/etc/mknod /dev/tty2 c 3 2
/etc/mknod /dev/tty3 c 3 3
/etc/mknod /dev/tty4 c 3 4
/etc/mknod /dev/tty5 c 3 5
/etc/mknod /dev/tty6 c 3 6
/etc/mknod /dev/tty7 c 3 7
chmod 640 /dev/*rk*
chmod 640 /dev/*mt*
chmod 640 /dev/*tap*
これでおーけー.
また,カーネルのリビルドもしておこう.
# chdir /usr/sys/conf
# cc mkconf.c
# mv a.out mkconf
# ./mkconf
rk
tm
tc
8dc
lp
done
# as m40.s
# mv a.out m40.o
# cc -c c.c
# as l.s
# ld -x a.out m40.o c.o ../lib1 ../lib2
# mv a.out /unix
mkconfコマンドで周辺機器(デバイス)は何があるのか自分で入力,設定し,
その後に/usr/sys/confに生成される各種ファイルをコンパイル,
最後に/usr/sys/lib1と/usr/sys/lib2とリンクすることでカーネルが生成される.
今回は/unixという名前で置いてるので,次回起動時にはrkunixでなくunixを指定すれば良い
なお,lib1やlib2の中のモジュールも含め完全にカーネルリビルドしたければ,
/usr/sysに移動しsh runを実行すると,runというシェルスクリプトがビルドしてくれる.
runにはすでにmkconfとその設定も記述されてしまっているので,
デバイスを増やしたり減らしたりしたければrun自体をedで編集する必要がある.

# dd if=/dev/mt0 of=/dev/rk1 count=4000 skip=4100
# /etc/mount /dev/rk1 /usr/source
# dd if=/dev/mt0 of=/dev/rk2 count=4000 skip=8100
# mkdir /usr/doc
# /etc/mount /dev/rk2 /usr/doc
これは必須ではないが,テープイメージからコマンド類のソースとドキュメントを
ddで持ってきて,別のディスク(rk1,rk2)にコピーし,これらをマウントさせておくと楽しくなると思われる.
ただ次回起動時にはマウントされなくなるので,

# cat >> /etc/rc
# /etc/mount /dev/rk1 /usr/source
# /etc/mount /dev/rk2 /usr/doc
として,rcスクリプト(起動時に実行)にmountコマンドを追加しておこう.
catとリダイレクトでテキストファイルを書く時は^D(EOF)で追記終了.

ここには書かないので先に挙げたURL達を参考にして貰いたいが,
dfコマンドは参照するデバイスがハードコードされてるので,
/usr/source/s1にあるdf.cの最初の関数のところを適当にdfで空き領域が見たいデバイスファイルに書き換えたり追加してリビルドしよう.
おそらく今回の場合は/dev/rk0,/dev/rk1,/dev/rk2を書く必要がある.

また,/usr/source/s2のsh.cの中の,
if(equal(cp1, "chdir"))としている行で,chdirをcpに変更した後リビルドすると,
今度からchdirコマンドでなくcdコマンドになってちょっぴり便利かもしれない.

これで初期設定は一度終了だが終了の前には
# sync
# sync
# sync
と適当にsyncを繰り返しディスクにバッファをフラッシュする必要がある
そうでないとまれにファイルやディスクが壊れる.
そしてCtrl-Eとqでsimhを終了

そしてインストールも終わったので起動スクリプトを変更しておく

これは今後毎回起動時にこれを呼ぶとする.
なお,カーネルに8dcを追加しこのスクリプトでもdcについていくつか設定したので,
simhでUNIXv6を起動してる最中はそのマシンのホストOSからtelnetでログイン可能である.
このスクリプトではdciを5555に設定してるのでポート5555番からtelnetログイン可能


……その2につづく

2014年5月31日土曜日

Google Summer of Code starting up now



今年のGoogle Summer of Codeもはじまって2週間が経ちました.


私も今年のGSoCに参加することになりまして,libcと格闘しています.
どうにか死なない程度にがんばって完遂させたいと思います.

2014年5月30日金曜日

マシンの更新

ThinkPad x121e(E-300)を愛用していましたが,
実家のマシンがWindows XPしかなかったのでこいつを実家のマシンにする変わりに
ThinkPad Edge E145(A4-5000)を使いはじめました

奥がThinkPad x121e,手前がThinkPad Edge E145

(わざとですが)パッと見よく似てます

EFI System Partitionが/dev/sda2にあるのはびっくりしました,が,問題ありません

RadeonなGPUですしx121eからほぼそのままE145にLinux環境移しても問題なく動作しています

ただ,wi-fiのドライバがOSSが存在せずプロプライエタリなものを使うことになりました
broadcom-wlです.

以上雑記