ISO ファイルの構造

ISO ファイルの中身

debian-live-8.3.0-amd64-lxde-desktop.iso の例

  • .
    ├── .disk/
    │ ├── archive_trace
    │ ├── base_components
    │ ├── base_installable
    │ ├── cd_type
    │ ├── info
    │ └── udeb_include
    ├── debian -> ./
    ├── dists/
    │ ├── jessie/
    │ ├── stable -> jessie/
    │ ├── testing -> jessie/
    │ └── unstable -> jessie/
    ├── install/
    │ ├── gtk/
    │ ├── initrd.gz
    │ ├── install.bat
    │ └── vmlinuz
    ├── isolinux/
    │ ├── advanced.cfg
    │ ├── boot.cat
    │ ├── hdt.c32
    │ ├── install.cfg
    │ ├── isolinux.bin
    │ ├── isolinux.cfg
    │ ├── ldlinux.c32
    │ ├── libcom32.c32
    │ ├── libutil.c32
    │ ├── live.cfg
    │ ├── menu.cfg
    │ ├── splash.png
    │ ├── stdmenu.cfg
    │ └── vesamenu.c32
    ├── live/
    │ ├── filesystem.packages
    │ ├── filesystem.packages-remove
    │ ├── filesystem.squashfs
    │ ├── initrd.img
    │ └── vmlinuz
    ├── pool/
    │ └── main/
    ├── tools/
    │ ├── loadlin.exe
    │ └── loadlin.txt
    ├── autorun.inf
    ├── g2ldr
    ├── g2ldr.mbr
    ├── md5sum.txt
    ├── setup.exe
    └── win32-loader.ini


ISO ファイルの中身の解説


ディレクトリ




































  • 名前

    要/否

    説明

    .disk

    必須

    詳細不明

    debian

    HDDにインストールする場合は必要

    dists

    HDDにインストールする場合は必要

    install

    HDDにインストールする場合は必要

    isolinux

    必須

    ブートローダー

    live

    必須

    Debian本体

    pool

    HDDにインストールする場合は必要

    tools

    DOSから起動するには必要

  • ファイル




























  • 名前

    要/否

    説明

    autorun.inf

     

    Windows用

    g2ldr

     

     

    g2ldr.mbr

     

     

    md5sum.txt

     

    setup.exe

     

    Windows用

    win32-loader.ini

     

    Windows用


  • 必要なファイルの取り出し


    マウントするのが正式かつ確実な方法でしょう。

    • コマンド例:mount -t iso9660 -o loop debian-live-xxxxx.iso /mnt

    わたしは、File-Roller で必要な部分だけ取り出します。

    • File-Roller は、gnome のツールです。
    • ツールによっては、.disk のディレクトリが扱えないかもしれません。
    • 作業用ディレクトリに、必要なファイルを取り出します。
    • 最小構成の場合:
       /working/directory/
      ├── .disk/
      ├── isolinux/
      ├── live/
      └── md5sum.txt


    ブートパラメターの修正


    isolinux のディレクトリ内にあるファイル一式が、isolinuxです。

    isolinux のマニュアルどおり修正すれば、OKです。

    気の短い人は、live.cfg の最初のエントリーの append に、persistence だけ付け加えれば良いでしょう。

    timeout は、0で無限に待つ、1以上で0.1秒単位で待つ時間を設定できます。 <!> 50で5秒です、要注意。


    ISO ファイルの書出し



    hybrid ISO 形式


    作ったと言うほどのものではないですが、このシェルスクリプトで
    ./build.sh /working/directory target.iso とします。
    build.sh
    #!/bin/sh

    if [ $# -ne 2 ]
    then
    fail "Usage: $0 <source dirctory> <iso filename>"
    fi

    #xorriso -as mkisofs \
    # -o $2 \
    # -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin \
    # -c isolinux/boot.cat \
    # -b isolinux/isolinux.bin \
    # -no-emul-boot -boot-load-size 4 -boot-info-table \
    # $1

    xorriso -as mkisofs \
    -o $2 \
    -R -r -J \
    -joliet-long -l \
    -cache-inodes \
    -partition_offset 16 \
    -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin \
    -c isolinux/boot.cat \
    -b isolinux/isolinux.bin \
    -no-emul-boot -boot-load-size 4 -boot-info-table \
    $1

    Debian マシンを USBメモリ から立ち上げるようにすると、OSのバージョンアップが有った時等、USBメモリ を準備し差し替えれば良いのでとても便利です。

    何か問題があっても元の USBメモリ に戻せば良いので安心です。

    • SDメモリをUSBカードリーダーに刺して使用した場合は、ハードディスクと同じに扱えばなんなく思った通りの事ができます。
    • USBメモリの場合は、色々上手くいかず、散々試行錯誤したところ、「Live USBの技法」を使うと上手くいくことを発見しました。

    Live USBの技法

    • ハイブリッド形式のISOイメージを作成して、デバイスにコピーし、その後、デバイスの空き領域にパーティションを作成して利用するもの。
    • デバイスの初めの部分からべったり書き込まれるせいか、今のところ確実にブートする。公式のLive USBが採用しているのだから、充分に検証されているのだろう。
    • 但し、ISOイメージの部分は当然書き込みできない。従って、カーネルとラムディスク(initramfs)の更新だけは出来なくなる。
    • そこで、
    • の2通りの方法を検証した。

    [Live USB のパーティションの例]
    • Partition1 => ブートローダーとDebian本体
        ハイブリッド形式のISOイメージ(Read only)
        Debian本体は、squashfsで圧縮されている

      マージン
      (任意)

      Partition2 => 読み書きエリア
        ファイルシステム:ext4等
        LABEL=persistence(予約語)

      Partition3
        => swap

      • <!> カーネルのブートパラメータに persistence が指定され、persistence というラベルの付いたパーティションのルートに persistence.conf がないと、読み書きエリアは使えるようにならない。

      • (!) ここで言っている読み書きエリアとは、単なるユーザーエリアではなく、リードオンリーのdebian本体に加えた変更を記録するためのエリア。

    • 作成方法
      1. 公式サイトからLiveシステムのISOファイルをダウンロード。
      2. cp コマンドでUSBメモリに直接書込み。
        • コマンド:cp debianXXXXXXXXX.iso /dev/sdx
        • (コピーするだけで、MBR、パーテションテーブル、Partition1まで書き込まれる)
      3. 読み書きエリアのパーティションを切り、ラベルを persistence に設定し、mkfsでフォーマットする。
      4. 読み書きエリアをマウントし、ルートに persistence.conf を作成する。
        • コマンド:echo '/ union' > /mount/point/persistence.conf

        • (persistence.conf は行末に改行コードが必須)
      5. ブートするとisolinuxが立ち上がるので、Tabキーでブートパラメーターに persistence を書き加えてブートする。
        • ブートする毎に書き加えるのが面倒

    [ブートローダーに応用した方法のパーティションの例]
    • Partition1 => ブートローダー
        ハイブリッド形式のISOイメージ(Read only)

      マージン
      (任意)

      Partition2 => Debian本体
        ファイルシステム:ext4等
        LABEL=UsbOnDebian(例)

      Partition3
        => swap

      作成方法
      1. isolinux から grub4dos を呼び出す形式で、ハイブリッドISOファイルを作成。
      2. cp コマンドでUSBメモリに直接書込み。
      3. コマンド:cp bootloader.iso /dev/sdx
      4. (コピーするだけで、MBR、パーテションテーブル、Partition1まで書き込まれる)
      1. parted で Debian 用パーティションを切り、フォーマット。
      2. /dev/sdx2 にDebian のファイルシステム全体を展開する。
      3. ブート時の動作は、grub4dos の設定で自由に出来る。

    Live USB をカスタマイズする方法

    Live USB をスクラッチから作成する事も出来ますが、ツールがバギーな上、時間がやたらと掛かります。

    Level 1(成功)

    Level 2(成功)

    • ダウンロードしてきた Live USB のisoファイルの中身のうち、Debian本体をカスタマイズする。(アカウント作成、パスワード設定、パッケージ追加削除、等)

    Level 3(成功)

    パーティションの切り方を改善する

    • ハイブリッドISOファイルを何らかの事情で作り直したい場合を考慮して、パーティションを工夫すると手間が省ける。

    ブートローダーのみ hybrid ISO にする方法

    isolinux と grub4dos による方法(成功)

    参考ページ

    syslinux のメモ   grub4dos のメモ

    作成方法
    1. isolinux から grub4dos を呼び出す形式で、ハイブリッドISOファイルを作成。
    2. cp コマンドでUSBメモリに直接書込み。
      • コマンド:cp bootloader.iso /dev/sdx
      • コピーするだけで、MBR、パーテションテーブル、第一パーティションまで書き込まれる。
    3. gparted で Debian 用パーティションを切り、フォーマット。
    4. /dev/sdx2 にDebian のファイルシステム全体を展開する。

    設定方法
    • grub4dos の設定ファイル menu.lst から、Debian 本体を起動するには以下の方法がある。
      • パーテションのラベルから起動する
      • Debian 本体の Grub2、extlinux などをチェーンロードする

    kexec-loader による方法(ほぼ成功)

    1. kexec-loader に必要なモジュール(ext2.tldとか)を組み込んで isoイメージを作成する。(kexec-loader のshファイルはそのままでは、Debian - Wheezy で動かない)(mkiso.sh kexec-loader.iso)

    2. isohybrid コマンドにより、USBメモリでもブートできるようにする。(isohybrid kexec-loader.iso)
    3. cp コマンドでUSBメモリに直接書込み。(cp kexec-loader.iso /dev/sdx)
    4. fdisk で Debian 用パーティションを切り、フォーマット。(fdisk /dev/sdx ; mkfs.ext4 /dev/sdx2)
    5. /dev/sdx2 にDebian のファイルシステム全体を展開する。
    6. /boot/grub/menu.list を編集して、ブートメニューを構成する。

    isolinux と grub2 による方法(放置中)

    grub-mkrescue を応用する方法(失敗)

    SDメモリをUSBカードリーダーに刺して使用した場合

    syslinux と kexec-loader による方法

    • syslinux は、syslinux と同じパーティションにあるカーネルと initramfs しかブートできない。
    • そこで、syslinux から kexec-loader を起動し、そこから目的のパーティションを起動する。検証中。[1]

    grub4dosによる方法


    Web ページ エラーの詳細

    ユーザー エージェント: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
    タイムスタンプ: Wed, 24 Feb 2016 06:53:08 UTC


    メッセージ: オブジェクトがありません。
    ライン: 631
    文字: 5
    コード: 0
    URI: http://ultra.tank.jp/moinmoin/moin_htdocs/common/js/common.js


    脚注


    base_tux_g_v_linux-555px

    まずはアイコンを http://clipartist.net/svg/base-tux-g-v-linux-svg/ここから貰いました。
    Public Domain と書いてあるから、著作権上の問題はないはず、だよねー

    ↑このページのトップヘ