Ubuntu Weekly Recipe

第114回Debian Liveのlive-helperを使ってUbuntu Liveを作成する (2)

前回最小のUbuntuライブCDを作りましたが、最後に「出来上がったライブCDを起動して『あれっ!?』と思った方もいるかもしれません。」と書きました。おそらくこの画面を見て「あれっ!?」と思ったのではないかと思います。

図1 Ubuntu Liveの起動画面
図1 Ubuntu Liveの起動画面

Ubuntu LiveなのにDebianの画面ですね。live-helperを使ったUbuntu Live作成の2回目はlive-helperのカスタマイズについて解説します。

live-helperカスタマイズの基礎知識

カスタマイズの解説の前にlive-helperの基礎知識を説明してから、カスタマイズの解説に入ります。

live-helperの設定はlh_configコマンドにオプションを与えておこないます。オプションの一覧は--helpオプションで見られますが、非常に長いのでlvなどのページャを通して見るとよいでしょう。

 $ lh_config --help 

lh_configは、初めて実行するとconfigディレクトリを作成して、その中に全体設定のcommonと、bootstrap、chroot、binary、sourceという設定ファイルを作ります。

ライブシステムを構築するlh_buildコマンドは内部で、ベースシステムのインストール(lh_bootstrap)→ベースシステムにchrootして必要なソフトのインストールと設定(lh_chroot)→作成したシステムを一つにまとめ起動可能なバイナリファイルの作成(lh_binary)→ソースアーカイブの作成(lh_source)の4つの段階を経てライブシステムを構築します。bootstrap、chroot、binary、source、4つの設定ファイルはそれぞれの段階に対応しています。設定ファイルはテキストで書かれていますが、lh_configコマンドで自動的に更新されるので、手動で編集してはいけません。

configディレクトリには設定ファイル以外に「chroot_」「binary_」とプリフィクスのついたディレクトリがあります。ここにはlh_chrootとlh_binary実行時に使うファイルを置きます。

他にincludesとtemplatesというディレクトリがありますが、inculedeにはライブシステムのバイナリイメージに含めるドキュメントなどのファイルを置き、templatesにはブートローダーのテンプレートを置きます。includesとtemplatesディレクトリについては、システムが使用しているファイルが/usr/share/live-helper/ディレクトリにあるので参考にしてください。

ライブシステムをカスタマイズをする

それでは場面別にライブシステムカスタマイズの解説をします。

Ubuntuモードとリリースの設定

live-helperのモード初期設定はDebianなので、Ubuntuライブシステムを作成するにはubuntuと設定します。

 $ lh_config --mode "ubuntu"

作成するディストリビューションのリリースは、初期設定では使っているディストリビューションのリリースが使われます。他のリリースのライブシステムを作る場合は変更します。

 $ lh_config --distribution "Karmic"

ミラーサイトとパッケージセクションの設定

パッケージを取得するミラーサイトを指定します。初期設定ではarchive.ubuntu.comに設定されているので日本のサイトを指定します。bootstrap、chroot、binaryそれぞれの設定をします。

 $ lh_config --mirror-bootstrap "http://jp.archive.ubuntu.com/ubuntu/"
 $ lh_config --mirror-chroot "http://jp.archive.ubuntu.com/ubuntu/"
 $ lh_config --mirror-chroot-security "http://security.ubuntu.com/ubuntu/"
 $ lh_config --mirror-binary "http://jp.archive.ubuntu.com/ubuntu/"
 $ lh_config --mirror-binary-security "http://security.ubuntu.com/ubuntu/"

パッケージのセクションは初期設定では自由に再配布ができるmainとuniverseが設定されます。例ではrestrictedとmultiverseも指定していますが、作成したライブシステムの再配布を考えている場合は使用するパッケージの制限を確認しましょう。

 $ lh_config --categories "main restricted universe multiverse"

パッケージのインストール

パッケージのインストールはlh_configの--packagesオプションを使います。パッケージが複数ある場合はパッケージ名をスペースで区切って列挙します。

 $ lh_config --packages "パッケージ名 …"

インストールするパッケージが多い場合は、パッケージ名を列挙したファイルをconfig/chroot_local-packageslists/ディレクトリに置いておくと自動的にインストールされます。パッケージリストの書き方は、/usr/share/live-helper/listsにあるリストを参考にしてください。

--tasksオプションを使うとタスクを指定して一度にパッケージをインストールできます。タスク名も列挙できます。

 $ lh_config --tasks "タスク名 …"

タスク名はtaskselコマンドで調べられます。

 $ tasksel --list-tasks

次のようにタスクを指定するとUbuntuインストールCDと同じパッケージ構成のライブシステムが作成できます。

 $ lh_config --tasks "ubuntu-desktop ubuntu-live"

自作のdebパッケージをインストールするには

自作debパッケージをライブシステムにインストールするには、作成したdebパッケージをconfig/chroot_sources/ディレクトリに置き、lh_configの--packagesオプションにパッケージ名を指定します。

初期設定ではSecure Aptが有効になっているので、GPG署名をしていないdebパッケージはインストールできません。この場合、署名をしたパッケージに作り直すか、lh_configの--apt-secureオプションにdisableを指定してSecure Aptを無効にしてインストールします。

 $ lh_config --apt-secure disable

カーネルパッケージをインストールするには

カーネルパッケージのインストールは、--linux-packagesオプションにカーネル名、--linux-flavoursオプションに用途(フレーバー)を指定してインストールします。

 $ lh_config --linux-pakges "(カーネル名)" --linux-flavours "(フレーバー)"

PAEが有効なカーネル(linux-image-pae)をインストールするには次のようにします。

 $ lh_config --linux-pakges "linux-image" --linux-flavours "generic-pae"

kernel-packageのmake-kpkgを利用して作成した自作カーネルパッケージもインストールできます。インストールをするにはカーネルのdebパッケージをconfig/chroot_sources/ディレクトリに置き、--linux-packagesと--linux-flavoursオプションにカーネル名とフレーバーを指定します。Secure Aptの制限は自作debパッケージのインストールと同じですので参考にしてください。

キーリングを指定する

GPG鍵がキーリングパッケージの形で配布されている場合は、使用するキーリングパッケージを指定できます。

 $ lh_config --keyring-packages "キーリングパッケージ名 …"

Aptリポジトリの追加

Aptリポジトリを追加するには、Apt-lineを書いたファイルをconfig/chroot_sources/ディレクトリに置きます。 リストのファイル名には拡張子をつける必要があり、lh_chrootステージで使うリストには「.chroot⁠⁠、lh_binaryステージで使うリストには「.binary」とつけます。

追加したAptリポジトリからのパッケージインストールにGPG鍵が必要な場合は、GPG公開鍵のファイルも一緒に置きます。GPG公開鍵のファイルにも拡張子をつける必要があり、lh_chrootステージで利用するなら「.chroot.gpg⁠⁠、lh_binaryステージでは「.binary.gpg」とつけます。

Ubuntu Japanese Teamのリポジトリ追加を例に説明します。

config/chroot_sources/ディレクトリに入ります。

 $ cd config/chroot_sources/

wgetでUbuntu Japanese TeamのリポジトリリストとGPG鍵をダウンロードします。

 config/chroot_sources$ wget https://www.ubuntulinux.jp/sources.list.d/karmic.list
 config/chroot_sources$ wget https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg
 config/chroot_sources$ wget https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg

ダウンロードしたリポジトリリストとGPG公開鍵の拡張子を.chrootと.chroot.gpgに変更します。

 config/chroot_sources$ mv karmic.list karmic.list.chroot
 config/chroot_sources$ mv ubuntu-ja-archive-keyring.gpg ubuntu-ja-archive-keyring.chroot.gpg 
 config/chroot_sources$ mv ubuntu-jp-ppa-keyring.gpg ubuntu-jp-ppa-keyring.chroot.gpg 

これで--pacakgesオプションを使ってUbuntu Japanese Teamのパッケージがインストールできます。

ライブシステムにファイルを追加

ライブシステムの中にファイルを追加するには、config/chroot_local-includes/ディレクトリを/(ルート)にファイルを置きます。画像ファイルwallpaper.jpgを/usr/share/backgroundsに置きたい場合は次のようになります。

 $ mkdir -p config/chroot_local-includes/usr/share/backgrounds/
 $ cp wallpaper.jpg config/chroot_local-includes/usr/share/backgrounds/

ブートローダーとスプラッシュ画面の変更

ブートローダーにSyslinuxかGrub(1)を選択できます。UbuntuのインストールCDで使われているGfxbootはまだ対応していません。

 $ lh_config --bootloader "grub"

スプラッシュスクリーンはDebian用しか用意されていないので、差し替えるにはオプションでファイルを指定します。対応画像ファイルはSyslinuxは640x480ピクセル、256色、pngかjpeg形式、Grubは640x480ピクセル、14色、xpm.gz形式です。

 $ lh_config --grub-splash "config/binary_grub/splash.png"
 $ lh_config --syslinux-splash "config/binary_syslinux/splash.png"

LXDEを使った軽量デスクトップの作成

一通り設定を解説したところで、実際に使えるライブシステムを作成してみましょう。最近はLXDEを使った軽量デスクトップ環境が流行っているそうなので、LXDEを使った300MBほどのミニライブCDを作成します。もちろんハードディスクにインストールもできます。

ライブシステム作成を自動化する

lh_configの設定項目は多く、ビルドやクリーンアップのためにいちいちsudoをつけてコマンドを実行するのはとても面倒です。live-helperには自動化のための仕組みが用意されているので、作成の前にmakeと入力するだけでライブシステムの構築ができるようにしましょう。

自動化は、lh_config、lh_build、lh_cleanコマンド実行時、scriptsディレクトリにconfig、build、cleanという名前のスクリプトがあると、自動的に呼び出され実行されるようになっています。これを利用し定番の設定をおこなうようにします。そしてlh_config、lh_build、lh_cleanコマンドはMakefileから実行するようにしましょう。

scripts/config

scripts/configにはモードやミラーサイトの設定などの基本設定を書きます。

#!/bin/sh

MIRROR_UBUNTU="http://jp.archive.ubuntu.com/ubuntu/"
MIRROR_SECURITY="http://security.ubuntu.com/ubuntu/"

lh_config noautoconfig \
        --mode ubuntu \
        --distribution karmic \
        --language ja \
        --mirror-binary ${MIRROR_UBUNTU} \
        --mirror-binary-security ${MIRROR_SECURITY} \
        --mirror-bootstrap ${MIRROR_UBUNTU} \
        --mirror-chroot ${MIRROR_UBUNTU} \
        --mirror-chroot-security ${MIRROR_SECURITY} \
        --categories "main restricted universe multiverse" \
        ${@}

scripts/build

scripts/buildはビルドと同時にbinary.buildlogという名前で作業ログを記録するようにします。

#!/bin/sh

lh_build noautoconfig 2>&1 | tee binary.buildlog

scripts/clean

scripts/cleanはキャッシュファイルの削除と同時に不要な設定ファイルも削除するようにします。

#!/bin/sh

lh_clean noautoconfig --all ${@}

# Remove generated files
rm -f config/binary config/bootstrap config/chroot config/common config/source

# Remove empty directories in config tree
if ls config/*/ > /dev/null 2>&1
then
        rmdir --ignore-fail-on-non-empty config/*/
fi

if [ -d config ]
then
        rmdir --ignore-fail-on-non-empty config
fi

Makefile

Makefileにはscriptsディレクトリのスクリプトを呼び出すためのlh_config、lh_build、lh_cleanコマンドを書きます。lh_configにはscript/configに書いた定番オプション以外に設定するオプションを設定します。

BOOTOPTION_LIVE = quiet splash debian-installer/language=ja console-setup/layoutcode?=jp console-setup/modelcode?=jp106 

all: config build

config: clean
        lh_config \
        --bootloader grub \
        --binary-images iso \
        --bootappend-live "$(BOOTOPTION_LIVE)" \
        --packages "lxde language-pack-ja language-support-ja usplash-theme-ubuntu ubiquity-frontend-gtk gparted"

build: 
        sudo lh_build 

clean:
        sudo lh_clean
        sudo rm -f *.buildlog

これでmake一発でライブシステムが作成できるようになりました。不要なファイルもmake cleanで削除できるので、設定を変更してのライブシステム作成も簡単になりました。

さて、本題のLXDEの軽量デスクトップの設定ですが、設定のオプションは省略していたものを改めて書いただけなので、前回の最小ライブCDとほとんど変わっていません。

変わっているところは、Makefileの1行目と9行目に日本語環境で起動するためのライブCDオプション設定の追加と、10行目の--packagesオプションにインストールするパッケージ、LXDE、日本語のLanguage PackとLanguage Support、スプラッシュ画面のusplash、ハードディスクのインストーラubiquityを設定しています。これだけでオリジナルのインストールCDができるのはすごいですね。

ただ、このライブCDには一つ欠点があって、デスクトップにある「RELEASEのインストール」アイコンをクリックしても起動できません。アイコンに実行属性がついていると、なぜか実行できないので「RELEASEのインストール」アイコンを選択してコンテキストメニューの「プロパティ」を開き、パーミッションタブにある所有者の実行チェックボックスを外してください。(図.2) これで「RELEASEのインストール」アイコンからUbiquityを起動してハードディスクにインストールができます。

図2 ⁠RELEASEのインストール」アイコンのパーミッション
図2 「RELEASEのインストール」アイコンのパーミッション

USBメモリから起動するライブシステムを作るには

最近のライブシステムはCD/DVDからの起動より、USBメモリから起動して利用することが多いと思います。Ubuntuでは「USBスタートアップディスクの作成(usb-creator)」を利用してインストールCDからUSBメモリに転送できますが、live-helperで作成したUbuntuライブCD/DVDはオリジナルのインストールCDと仕様が若干異なるので利用することができません。それでは少し悲しいので、USBメモリから起動できるライブシステムの作成について解説します。

バイナリイメージをISOイメージで作成した場合、UNetBootinを使うとUSBメモリに転送できます。UNetBootinはAptでインストールできます。

 $ sudo apt-get install unetbootin unetbootin-translations

USBメモリをセットしてUNetBootinを起動します。Diskimageに作成したライブISOイメージファイル(binary.iso)を指定して「OK」ボタンを押すとライブUSBメモリが作成されます。

図3 UNetBootin
図3 UNetBootin

あらかじめUSBメモリに書き込んで使うつもりなら、lh_configの作成バイナリイメージのファイルタイプをISOではなく、USB-HDDを指定してライブシステムを作成します。できあがったバイナリイメージはImage Writerを使いUSBメモリに書き込みます。

lh_configのバイナリイメージのファイルタイプ指定は次のようになります。

 $ lh_config --binary-images usb-hdd

Image WriterもAptを使ってインストールできます。

 $ sudo apt-get install usb-imagewriter

バイナリイメージの書き込みは、USBメモリをセットしてImage Writerを起動します。⁠書き込むイメージ:」に作成したライブイメージファイル(binary.img)、⁠to」にUSBメモリを指定して「デバイスへ書き込む」ボタンを押すと、ライブUSBメモリが作成されます。

図4 Image Writer
図4 Image Writer

最後に

2回にわたりlive-helperを使ったUbuntu Liveの作成を解説しましたがいかがでしたでしょうか。

かけ足で解説したので説明の足りない部分も多いと思いますが、live-helperはgrmlPureDyneといったディストリビューションの制作にも使われほど強力にカスタマイズができるので、リマスターに物足りない人はぜひ使って、世界に一つだけのディストリビューションを作ってください。

おすすめ記事

記事・ニュース一覧