タイトル/名前 | 更新者 | 更新日 |
---|---|---|
日記/2009/12/23/ようやくportsとpackageが分かりかけてきた・・・ | msakamoto-sf | 2009-12-23 00:55:05 |
日記/2009/12/21/今更FreeBSD-4.4のpackageを取って来るには | msakamoto-sf | 2009-12-21 23:40:19 |
日記/2009/12/21/HDDのパーティションとMBRメモ | msakamoto-sf | 2009-12-21 20:45:21 |
日記/2009/12/11/本日付けで退職しました。 | msakamoto-sf | 2009-12-16 16:43:33 |
日記/2009/12/10/「ふつうのコンパイラをつくろう」読了 | msakamoto-sf | 2009-12-10 15:18:47 |
技術/Linux | msakamoto-sf | 2009-12-08 13:10:01 |
日記/2009/12/08/x86のPUSHはスタックの低位方向に進む | msakamoto-sf | 2009-12-08 10:36:48 |
技術/UNIX/grep, fgrep, egrep, zgrep | msakamoto-sf | 2009-12-07 01:09:18 |
日記/2009/12/06/呼び出し規約のメモ | msakamoto-sf | 2009-12-06 18:37:02 |
日記/2009/12/05/kernel-2.6.xで"make fdimage"するには syslinux と mtools が必要。 | msakamoto-sf | 2009-12-05 23:55:47 |
インストールCDに入ってるpackageというのは、要するにCDが作成された時点での、portsの中でバイナリ配布可能なやつなんだな・・・きっとそうだ・・・多分。
いや、今までportsとpackagesって全く別物なのかと勘違いしてたので。・・・やっぱり、慣れないと「それって常識」な事すら知らないものなんすよ・・・。
FreeBSDハンドブックの"4.2 Overview of Software Installation"から引用:
In fact, the ports system can also be used to generate packages which can later be manipulated with pkg_add and the other package management commands that will be introduced shortly.
ということで、packageというのはportsから生成されたバイナリですよー、と言うことがようやく理解出来ました。
で、なんでわざわざportsとpackageに分けたかについては、同ハンドブック中の
Given that the two technologies are quite similar, you might be wondering why FreeBSD bothers with both. Packages and ports both have their own strengths, and which one you use will depend on your own preference.
に続いて、それぞれメリット・デメリットがあるからですよ、というのが書いてありました。
packageについては、FTPやCD-ROMからなりで直接tgzファイルをpkg_addしても良いし、sysinstallからグラフィカルに追加するのも有り。
ちょっとややこしいのはportsの方で、そもそもインストール自体が何種類かある。
このうち、portsnapについては5.5 or 6.0以上でないと入ってこない。
さらにportsの更新はさらにややこしいので後日調査。ちなみに、最新のFreeBSDハンドブックでは更新系のツールのportsのパスが
/ports-mgmt/portupgrade /ports-mgmt/portcheckout
となっているが、該当する4.4-RELEASEのportsは
/sysutils/portupgrade /devel/portcheckout
となっていたので注意。またportupgradeはruby使ってる・・・一気に試す気失せた。普通にCVSupの方がわかりやすくね?
古いリリースの場合、ftpサイトの位置が
ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/i386/
から
ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/
に移ってしまっている為、PACKAGESITE環境変数を設定しておく。
setenv PACKAGESITE \ ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/i386/4.4-RELEASE/packages/
しかもその上で、単に
# pkg_add -r zsh
とすると
ftp://.../4.4-RELEASE/packages/zsh
をDLしようとしてしまう。
予め別のターミナルなりFTPクライアントなりで、"shells/zsh-4.0.2.tgz"であることを突き止め、
# pkg_add -r shells/zsh-4.0.2.tgz
とするとインストール出来た。
依存関係がある場合は分からないが、PACKAGESITE環境変数は弄らずに、"ftp://..."からフルパス指定した方が単純で分かりやすいかも知れない。
FreeBSDのsysinstallでのfdiskとdisklabelの違いについて解説を読んでいて、ちょっと気になってMBRやパーティション周りをぐぐった。
なるほど、MBRの中の固定領域中にパーティションテーブルが存在して、そのエントリ数(=予約レコード数)が4つだから、基本パーティション(+拡張パーティション)は4つまでなのね・・・。
しかしこの情報は・・・だれがどう使ってるのかな・・・。BIOSの割り込みハンドラかしらん、それともブートローダが独自に使ってるのかしらん。
公私でお世話になった方々へ:
本日付で msakamoto-sf こと坂本昌彦は某Webサービス開発会社を退社致しました。
ご縁があって2009年9月よりお世話になったのですが、一身上の都合でわずか3ヶ月で去ることになってしまい、残念です。
2009/12/12より暫くの間休養します。
簡単ではありますが、これにてご挨拶と致します。
この調子ですと、次回作は「ふつうのOSをつくろう」とかだったりして。
色々てんこ盛りなだけに、読み手を選ぶ「良い本」な気がしました。
というか、もう実行時リンクのGOTやPLTあたりはついて行けませんでした・・・(´Д⊂グスン
ただ、コンパイラやOSと実行ファイル、リンクなどについて最初から最後まで解説してくれていますので、キーとなる概念を整理するにはうってつけだと思います。
自分の読み方としては、「漫画日本の歴史」「漫画世界の歴史」みたいな読み物として楽しみました。
この本で一通りのキーとなる概念を見知った上で、それぞれの興味の向く方向で専門書を読み込む、という楽しみ方も有りだと思います。
ある程度C言語やアセンブラ、Linuxカーネル、lexやyaccなどを嗜んだ上で、更にプログラミング言語の制作やOSカーネル内部を見てみたい、というステップアップに丁度良いと思います。
これだけ幅のある知識を最初から最後まで繋げてみせたのはスゴイと個人的には思いますし、また読み物として楽しめたことに感謝してます。3年かけて執筆されたそうですが、それだけの中身・価値はあると思います。
Amazonのレビューでは個別技術の詳細や字句解析・構文解析への踏み込みが甘い、というのもありますが、一つの読み物、物語りとして「あらまし」を頭に入れるには最適だと思います。
lexとyaccを使った構文解析については「プログラミング言語を作る」(前橋和弥)がありますので併せて読むと良いかも知れません。
すこしあやふやになったので確認。スタックのPUSHでアドレスの大きい方(高位)に進むのか、小さい方(低位)に進むのかは実装依存。
x86の場合は、PUSHするとアドレスの小さい方(低位)に進む。つまり、PUSHする度にESPの値は小さくなっていく。アドレス0x0の方向へ向かってESPの値は小さくなっていく。
スタックが「伸びる」とか「縮む」とか書くと印象によって逆方向になってしまうので注意。
PUSHすると「伸びる」んじゃないか、とかPOPすると「縮む」んじゃないか、というイメージがある。
しかし書籍によっては、x86に限定して、PUSHすると0x0の方向に進むので「縮む」、POPするとアドレスが大きくなるので「伸びる」と表記するものもあった。
「伸びる」「縮む」ではなくて「進む」「戻る」の方が良いかな?
「x86ではPUSHするとアドレス低位方向にスタックが伸びる」
「x86ではPUSHするとアドレス低位方向にスタックが進む」
・・・あんまり変わらないか・・・。
時々使い分けたくなるのでメモ。
fgrep = grep -F : 正規表現パターンではなく、固定文字列としてマッチング egrep = grep -E : 拡張正規表現として処理 zgrep = grep -Z : 検索する前に入力データをzlibで伸長
他:
-I : バイナリファイルを無視(= --binary-files=without-match) -n : マッチした行の先頭に行番号を表示する
あるディレクトリの下の、特定の拡張子のファイル群に対してだけ再帰的にgrepしたい場合:
$ find <directory> *.<extension> | xargs grep <options> <pattern>
↓あるいは
$ grep <options> <pattern> `find <directory> *.<extension>`
ただし、findコマンドの時点で該当ファイルが一つも無かった場合は入力ファイルが未指定ということになるため、標準入力からの入力待ちになってしまう点に注意する。
参考:
呼び出し規約(Calling Conventions)メモ、というか参考リンク
他にもGoogleで検索すれば、分かりやすく解説してくれるサイトが沢山ありました。
そういえば暫くWindows上のCコンパイラ触ってないですね・・・。
ようやく、FD2枚でのLinuxKernel + Ext2rootファイルシステム(with BusyBox)がBochs上で動いた!
Embedded UNIX vol.6 での、SYSLINUXによるLinuxブート、ようやく起動した。2枚目用のルートファイルシステムについては、vol.2の記事に挑戦した時のrootfs.imgがあったのでもう一度試してみたところ、(root)/linuxrcというのを試しにmvしてみたらちゃんと(root)/sbin/init が起動した。
kernel-2.6になって、コンパイル時の画面も随分見やすくなった気がする・・・。あと、
make fdimage
するには mtools と syslinux がホストマシンに入っている必要があるので注意。
ホストマシンにフロッピーが装着されていない場合でも、"arch/i386/boot/mtools.conf"というファイルに
# 1.44 MB floppy disk image drive v: file="arch/i386/boot/fdimage" cylinders=80 heads=2 sectors=18 filter
という設定が生成されて、これを元にして
MTOOLSRC=arch/i386/boot/mtools.conf mcopy arch/i386/boot/bzImage v:linux
としてくれるので、ちゃんと fdimage というファイルをFATディスクとみなして操作してくれるので安心。
最終的にfdimageをどこかフロッピーディスクが装着されているマシン上で書き込んでも良いし、VMwareやBochs上で動かしたいだけであればそのまま使えばOK。
よし、とりあえず西田亙の追っかけ終了。