ファイルシステムやLVMの再設定をする為のレスキュー用LiveDVDを作成します。
この記事ではlivecd-rootfs、squashfs、grub-mkresucueを利用します。
Table of Contents
1 LiveDVD作成用パッケージのインストール
以下のパッケージをインストールします。
livecd-rootfs | Ubuntu向けlive-build設定ファイル |
systemd-container | chrootとは違い、systemctlを利用できる |
xorriso | grub-mkrescueで使うiso作成ツール |
$ sudo apt install -y livecd-rootfs systemd-container xorriso
2 ルートファイルシステムの作成
livecd-rootfsの設定ファイルを作業ディレクトリへコピーします。ここではubuntu-coreというデスクトップ環境を持たない最小限のプロジェクトを利用します。
$ mkdir live-build $ cd live-build/ $ cp -a /usr/share/livecd-rootfs/live-build/auto . $ cp -a /usr/share/livecd-rootfs/live-build/ubuntu-core .
PROJECTを設定してコンフィグファイルを作成します。sedでLB_DISTRIBUTIONを直接編集しています。
$ PROJECT=ubuntu-core lb config $ sed -i 's/precise/xenial/g' config/bootstrap
chrootディレクトリを作成してビルドします。chrootディレクトリにルートファイルシステムが展開されます。
$ mkdir chroot $ sudo lb build
この時点でルートファイルシステムは245Mのサイズです。
$ sudo du -sh chroot 245M chroot
3 ルートファイルシステムのカスタマイズ
chrootとsystemd-nspawnをルートファイルシステムをカスタマイズします。
3.1 sources.listのコピー
ホスト側のsources.listを流用します。
$ sudo cp /etc/apt/sources.list chroot/etc/apt/
3.2 ホスト名の設定
ホスト名を設定します。
$ echo "ubuntu-live" | sudo tee chroot/etc/hostname $ echo "127.0.0.1 ubuntu-live" | sudo tee chroot/etc/hosts
3.3 rootパスワードの設定
rootのパスワードを作成します。ここではchrootを利用します。
$ sudo chroot chroot # passwd Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully # exit
3.4 systemd-nspawnの起動
systemd-nspawnでルートファイルシステムを使ってコンテナを起動します。先ほど設定したrootのパスワードでログインします。
$ sudo systemd-nspawn -b -D chroot <snip> [ OK ] Started Update UTMP about System Runlevel Changes. Ubuntu 16.04 LTS localhost.localdomain console localhost login: root Password: Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-22-generic x86_64) * Documentation: https://help.ubuntu.com/ The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@ubuntu-live:~#
3.5 LiveDVDに必要なパッケージのインストール
apt updateでパッケージリストを更新します。
# apt update -y
live-bootパッケージとlive-boot-initramfs-toolsパッケージをインストールし、カーネルパラメータにboot=liveを指定することでLiveDVDが起動するようになります。同様にboot=casperという仕組みもありますが、こちらはシャットダウン時にCDのイジェクトを実行するようなインストーラ向けのものです。
# apt install -y live-boot live-boot-initramfs-tools
GRUB2とlinuxカーネルをインストールします。これはgrub-mkconfig等のツールを使えるようにするのと、カーネルのモジュールとinitrdを作成する為です。
# apt install -y grub2-common # apt install -y linux-image-$(uname -r)
英語以外のキーボードの為にkbdパッケージをインストールします。
# apt install -y kbd # sed -i 's/exit 0/loadkeys jp/g' /etc/rc.local # echo "exit 0" >> /etc/rc.local
3.6 目的に合わせて必要なパッケージをインストールする
ここではファイルシステムとLVMの再設定に必要なツール群をインストールします。
# apt install -y network-manager openssh-server openssh-client \ byobu emacs less lvm2 e2fsprogs net-tools
すでにホスト側でSSHサーバが動いている場合はopenssh-serverのpostinstスクリプトでエラーが発生しますが、放っておいても問題ありません。
Errors were encountered while processing: openssh-server E: Sub-process /usr/bin/dpkg returned an error code (1)
systemd-nspawnを用いているので、systemctlも利用できます。
$ sudo systemctl enable ssh
3.7 ユーザの追加
hashコマンドでPATHのハッシュを再設定している点に留意してください。
# useradd -m -s /bin/bash hiroom2 # gpasswd -a hiroom2 sudo Adding user hiroom2 to group sudo # passwd hiroom2 Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully # su - hiroom2 $ hash -r && hash $ exit
この記事では.sshや.byobu等の設定ファイルも追加しています。
3.8 grub.cfgの作成
grub.cfgを作成します。boot=liveでlive-boot-initramfs-toolsのスクリプトが起動します。シリアルコンソールでもアクセスできるようにします。
# cat <<EOF | tee /boot/grub/grub.cfg set timeout=1 serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1 terminal_input console serial terminal_output console serial menuentry 'ubuntu-live' { linux /boot/vmlinuz-4.4.0-22-generic boot=live console=tty1 console=ttyS0,115200 initrd /boot/initrd.img-4.4.0-22-generic } EOF
設定が済んだらコンテナをシャットダウンし、ホスト側に操作を戻します。
# poweroff
4 LiveDVD作成
squashfsを作成してLiveDVDを作成します。
4.1 iso用ディレクトリの作成
iso用のディレクトリを作成します。
$ mkdir iso $ mkdir iso/live
ルートファイルシステムのbootディレクトリ一式をiso用のディレクトリへコピーします。GRUBはこのディレクトリのカーネルとinitrdを読み込みます。
$ sudo cp -a chroot/boot iso/
4.2 squashfsの作成
chrootに展開したルートファイルシステムからsquashfsを作成し、iso用のディレクトリへ格納します。すでにfilesystem.squashfsを作成している場合は必ずfilesystem.squashfsを削除してから実行してください。すでにfilesystem.squashfsが存在する場合は上書きにならず、/etcや/varの他に/etc_1や/var_1等の重複したディレクトリが展開されることになります。
$ sudo mksquashfs chroot iso/live/filesystem.squashfs
4.3 iso作成
GRUB2をインストールしたisoファイルを作成します。
$ sudo grub-mkrescue -o ubuntu-live.iso iso
このubuntu-live.isoを起動することでLiveDVDが起動します。
5 実行結果
VirtualBoxでubuntu-live.isoを起動するとGRUBのメニューが表示されます。
RAMDISK上に展開されるので、一時的なファイル保存やパッケージの追加も可能です。
マウントポイント/にoverlayfsが使われています。
$ cat /etc/fstab # UNCONFIGURED FSTAB FOR BASE SYSTEM overlay / overlay rw 0 0 tmpfs /tmp tmpfs nosuid,nodev 0 0
512MB程の書き込みが可能です。
$ df -h Filesystem Size Used Avail Use% Mounted on udev 490M 0 490M 0% /dev tmpfs 100M 3.4M 96M 4% /run /dev/sr0 737M 737M 0 100% /lib/live/mount/medium /dev/loop0 708M 708M 0 100% /lib/live/mount/rootfs/filesystem.squashfs tmpfs 497M 0 497M 0% /lib/live/mount/overlay overlay 497M 380K 496M 1% / tmpfs 497M 0 497M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 497M 0 497M 0% /tmp tmpfs 100M 0 100M 0% /run/user/1000