= どこでもモモンガ

== どこでもモモンガ (DocoMomo) とは
((<DocoMomo|URL:http://zunda.freeshell.org/docomomo/>))は、512MB
程度以上のあるix86マシンで512MB程度以上のUSBメモリからGNU/Linuxを
起動できるようにするツールです。DocoMomoを作成する環境と同様の、
使い慣れた環境をUSBメモリ上に構築できます。

== どこでもモモンガの動作に必要な環境
手元では、xfce4の上で、rxvtをひとつとfirefoxを起動してscim-skkを
使った状態で、メインメモリを480MB強使用しました。xfce4に同梱の
Terminalを使うと必要なメモリの量は増えます。swapはありません。

バージョン0.9.22では、USBメモリに格納されたファイルは、合計450MB
弱でした。

== どこでもモモンガの使い方
一般的なLinuxの起動プロセスの概要を、
((<linux-boot-process.ja|URL:linux-boot-process.ja.html>))に記し
ました。

どこでもモモンガでは、デフォルトでは、runlevel 4に起動し、ユーザー
docomomoとしてstartxし、xfceが起動するようになっています。この環
境からログアウトした後には、runlevel 3の場合と同様、loginプロンプ
トからのログインと、startxなどのコマンドを使ったXの起動ができます。

新しいマシンでXがうまく起動しない場合には、リブートして、grubのメ
ニューから矢印キーで2つ目の「DocoMomo on a new hardware」を選んで
リターンを押してください。Xなどが適切に再設定されるはずです。

自動的にログインしないようにするには、runlevel 3に起動してくださ
い。デフォルトでrunlevel 3に起動するようにするには、USBメモリ内の
/boot/grub/grub.confを編集するか、どこでもモモンガを起動してから
/etc/inittabを編集してください。grubのメニューからeを押して一時的
にデフォルトではないrunlevelに起動することもできます。runlevel 5
に起動するには、必要なパッケージが足りない可能性が大きいです。

システム全体のタイムゾーンはUTCになります。常用するユーザーのタイ
ムゾーンは、~/.bashrcに、例えば、
  export TZ=Japan
などいう行を追加して設定してください。

起動時にネットワークにつながっていた場合、時計はNTPサーバ(pool.ntp.org)
に同期されます。ネットワークにつながっていなかった場合は、
DocoMomoの走っているマシンの時計(RTC)の時刻がそのままUTCの時刻と
して使われます。

=== インストーラパッケージのダウンロード元
DocoMomoの環境をUSBメモリに構築するのに必要なファイルは、
((<URL:http://docomomo.sourceforge.jp/>))からダウンロードできます。
.tar.gzの拡張子があるもののうち最新のものをダウンロードしてくださ
い。ファイルの内容が正しいかどうかは、.md5sumの拡張子のファイルを
ダウンロードして、例えば下記のように確かめることができます。

  md5sum -c docomomo-0.9.28-linux-installer-080123.md5sum

Linuxに似た環境でファイルを解凍し、インストール先となるUSBメモリ
をマシンに挿し、下記のようにしてブートローダとブート後に必要なフ
ァイルをUSBメモリにインストールしてください。

  su
  make install

USBメモリのファイルシステムはvfatなどでかまいません。

DocoMomoを使いたいマシンのBIOSを設定してUSBメモリから起動するよう
にして、上記でインストールしたUSBメモリを挿し、電源を入れることで
DocoMomoが起動するはずです。

=== ソースコードのダウンロード元
DocoMomoのインストーラに含まれるプログラムのソースコードは、
((<URL:http://docomomo.sourceforge.jp/>))以下からダウンロードする
ことができます。

== どこでもモモンガの作成に必要な環境
DocoMomoの作成には下記のRPMパッケージがインストールされて
適切に設定されている環境が必要です。
* yum
* rpm
* python
* lftp - RPMパッケージをダウンロードするのに使います。Makefileを
  編集すれば他のプログラムも使えるはずです
* squashfs
* gawk
* patch
* make
* grub
* nkf

DocoMomoの作成の際には、1.5GB程度のファイルが生成されます。

== どこでもモモンガの作成手順
まずは((<URL:http://zunda.freeshell.org/docomomo/dist/>))から最新
版のtar ballをダウンロードしてください。

各バージョンの変更点については、((<ChangeLog|URL:ChangeLog.txt>))
をご覧ください。

=== 作業の流れ
どこでもモモンガの作成手順は、Makefileに記されています。それぞれ
のターゲットで、下記の順に作業を進めていきいます。

==== ターゲットツリーの作成
: prepare-root
  作成されるOSのルートディレクトリを作り、yumが稼働できるように整
  えます。
: install-packages 
  yumを使って、作成されるOSに必要なRPMパッケージをインストールし
  ます。
: update-packages
  yumを使って、作成されるOSのRPMパッケージを最新のものにします。
: configure-root
  キーボード、ネットワーク、タイムゾーン、サービスなどの設定をし
  ます。
: setup-users
  ユーザーの設定をします。また、/home/docomomoと/home/skelに一般
  的なユーザーの設定ファイルを作成します。

ここまでで、どこでもモモンガのrunlevel 3で再現されるツリーが構築
されたことになります。次に、このツリーからいくつかのファイルシス
テムを作ります。

stripの際には、BFDがinternal errorを出す場合があります。その場合、
エラーの出たstripコマンドに-vオプションをつけてmakeしなおし、エラー
の出た時に読んでいたファイルを、conf以下のお使いのリリースのディ
レクトリの下の、no-strip.list に、カレントディレクトリからの相対
パス(最初のドットを含む)として、加えてください。次回からはそのフ
ァイルはstripしないようになります。

==== runlevel 1に必要なファイルの抽出とinitrdの作成
: create-initrd
  runlevel 1に必要なファイルを抽出します。
: strip-initrd
  抽出したファイルをstripします。
: create-initrd-image
  抽出したファイルをinitrdのイメージにします。

==== runlevel 3のための/usrの作成
: create-usr
  /usrを抽出し、不必要なファイルを削除します。
: strip-usr
  抽出したファイルをstripします。
: create-usr-image
  抽出したファイルをsquashfsのイメージにします。

==== runlevel 3のための/homeの作成
: create-home-image
  /homeをext2のイメージにします。

==== 作成したイメージのUSBメモリへのインストール
: mount-usb
  USBメモリをマウントします。
: install
  作成したイメージやブートローダをUSBメモリにインストールします。
: umount-usb
  USBメモリをアンマウントします。

=== 作業手順
まず、準備をします。

* tar ballを解凍する
* できたディレクトリに移動する
* conf/users.txtを編集して、常用ユーザーのユーザー名と本名を設定
  する。パスワードについては下記を参照してください。
* 必要なら、
  * Makefileの最初を編集して、下記の変数をDocoMomoの作成に使うシ
    ステムに合わせる:
    * system_release: *-releaseというRPMパッケージの名前、バージ
      ョン、リリース
    * system_release_url: そのRPMパッケージのダウンロード元
    * mbr_dev: grubをインストールする先のデバイスファイル名
    * target_dev: DocoMomoをインストールする先のデバイスファイル
      名。このデバイスの/bootに全てのファイルが置かれます。
      mbr_devとtarget_devはデフォルトでは最後に計算機にとりつけら
      れた外部記憶装置となります。
  * lists以下に、system_releaseと同じ名前のディレクトリを用意し、
    パッケージに付いてきたファイルをコピーして編集する。それぞれ
    のファイルには下記のような内容が記載されています
    * rpms.list: DocoMomoに必要なRPMパッケージ名。yumが処
      理しますので依存パッケージを書く必要はありません
    * initrd-copy-files.list: initrdにコピーするファイルやディレ
      クトリ
    * initrd-empty-dirs.list: intirdに用意しておく空ディレクトリ
  * patches以下に、system_releaseと同じ名前のディレクトリを用意し、
    パッケージに付いてきたファイルをコピーして編集する
  * conf以下に、system_releaseと同じ名前のディレクトリを用意し、
    * yum.confを元にするディストリビューションからコピーする
    * no-strip.listという空ファイルを用意する
    * skel以下に、ユーザーの設定ファイルの見本を置く。/home/skel
      以下にコピーされてどこでもモモンガのブート後に参照できます。
      またユーザーdocomomoはこれらのファイルを参照することになり
      ます
    * etc以下に、/etc以下にコピーするファイルを置く

準備ができたら、下記のようにUSBメモリに入れるディレクトリツリーを
構築し、initrdイメージとその他のイメージを作成して、USBメモリにコ
ピーします。

* su してスーパーユーザーになる
* make setup-users してユーザーの作成までを終わらせる。最後に常用
  ユーザーのパスワードを入力してください。なお、「docomomo」とい
  うユーザーIDのユーザーとルートのパスワードは、Makefileの中で
  「docomomo」と設定されます。必要な場合は、
  /usr/sbin/chroot ./root /usr/bin/passwd docomomo
  などとして変更してください
* 必要なら、できあがった常用ユーザーのホームディレクトリ
  (root/home/<username>) に設定ファイルなどをコピーする。chownコ
  マンドでuseridとgrpidを適宜設定してください
* 必要なら、root/initrd/etc以下のファイルなどを編集して設定する
* make -j2 create-images してinitrdと/usrや/homeのイメージを作成する
* USBメモリを挿し、make install してブートローダやDocoMomoをUSBメ
  モリにコピーする

== どこでもモモンガの開発に必要な環境
Makefile.develはレポジトリの操作やWWWサーバへのどこでもモモンガの
公開のためのターゲットを提供します。

DocoMomoの作成には下記のRPMパッケージがインストールされて
適切に設定されている環境が必要です。

* rsync - ファイルのWWWサーバへのアップロードに使います
* yum-utils - ソースコードのダウンロードに使います
* ruby-rdtool - ドキュメントのHTMLへの変換に使います

=== 開発のためのターゲット
: commit
  ChangeLogからメッセージを抽出して、svn commitに相当のことをしま
  す。レポジトリへの書き込める必要があります。ChangeLogにバージョ
  ンの記述があれば、tagも付けます。
: dist
  このパッケージに必要なファイルをレポジトリからcheck outして、
  tar ballにまとめます。
: upload
  このパッケージに必要なファイルと文書をWWWサーバにコピーします。
: create-linux-installer
  Linux上で動くインストーラとファイルをまとめたtar ballを作成します。
: download-sources
  インストーラに含まれるプログラムのソースコードをダウンロードします。
: upload-sources
  ダウンロードしたソースコードをWWWサーバにコピーします。

== バグなどのレポート先
((<SouceForge.jpのトラッキング|URL:https://sourceforge.jp/tracker/?group_id=3331>))
にお願いします。

== 謝辞
このプロジェクトの構想段階から、((<おくじさん|URL:http://www.enbug.org/>))
にいくつかの有用なツッコミをいただきました。USBメモリからのOSの起
動を試したり、initrdなどのファイルの構成を考える際に参考になりま
した。ありがとうございました。

ソースコードやインストーラパッケージのサーバを提供してくださる
((<SourceForge.jp|URL:http://sourceforge.jp>))に感謝します。

また、USBメモリからも問題なくOSを起動してくれる
((<GNU GRUB|URL:http://http://www.gnu.org/software/grub/>))
の開発者のみなさま、その他有用なソフトウェアの開発者のみなさまに
感謝します。

== Copyright
Copyright (C) 2006 zunda <zunda at freeshell.org> unless
otherwise stated in the ((<COPYING|URL:COPYING.txt>)) file.

Permission is granted for copying, modification, distribution,
and distribution of modified versions of this work under the
terms of GPL version 2 or later. Read the ((<GPL|URL:GPL.txt>))
file or ((<GPL3|URL:gpl-3.0.txt>)) file for more details.

((:<a href="http://sourceforge.jp/"><img src="http://sourceforge.jp/sflogo.php?group_id=3331" width="96" height="31" border="0" alt="SourceForge.jp"></a>:))
