Ubuntu

Ubuntu20.04 Live DVDから起動したときに便利に使いたい

Windows 10をセキュアブートさせるにあたり、ディスクの操作を担当してくれたUbuntu Live DVD。とても便利でいい。

もう少しだけGrubとか、パーティションとか、セキュアブートとかの知識を整理しようとしていて、VMware Playerで色々と試しているのだけれど、少しだけカスタマイズできないものかと考えた。



広告


今まで、インストールしたUbuntuには、とりあえずopen-vm-toolsをインストールさえすればOKみたいな考え方でいたけれども、Live DVDの場合は反映タイミングとかを整理しておく必要がある。また、これを何度か繰り返したら、Live DVDをカスタマイズしたくなってきたので、やってみた。

Live DVDのカスタマイズは少しやり過ぎ?と思ったけれども、丁寧な解説ページがあったので、なんとか作ることができた。

キーボード配列の変更

キーボードが英語配列になっている。ちょっとした操作なら、適当に探れば入力したいキーにあたるけれども、少し本格的に操作したいときには日本語キーボード配列になっている方が楽。

VMware Toolsの活用

仮想PCにISOを設定して使うときに、VMware Toolsが使えるととても便利。

クリップボードの共有

クリップボードが共有できると、ホストで用意しておいた設定をペーストできたりして、色々と楽。

Live DVDから起動しているので、再起動で反映というわけにもいかず、ディスプレイマネージャーを再起動することで反映させた。
Github / vmware – open-vm-tools / is reboot required. #249
ask ubuntu / How to restart X Window Server from command line?

$ sudo apt install open-vm-tools-desktop
$ sudo systemctl restart display-manager

open-vm-tools-desktopをインストールした後、display-managerを再起動しないと、次のホストのディレクトリを共有する操作でハングアップのような挙動になってしまった。確実に再起動しておくのが良いと思われる。

ホストのフォルダを共有

ホストのフォルダを共有するために、共有フォルダにしてsambaでマウントしたけれども、転送速度が強烈に遅い。
そこで、ホストのフォルダを共有する方向を試してみた。
kashiの日記 / Ubuntu 20.04 インストール (2)
Qiita / [備忘録] open-vm-toolsでwindowsディレクトリのマウント

まず、open-vm-tools-desktopをインストールしておくのが前提。

仮想マシン設定のオプションで共有フォルダを作る。

システムを起動し、open-vm-toolsがインストールされた状態で、以下を実行。

$ sudo mkdir /mnt/vmware
$ sudo mount -t fuse.vmhgfs-fuse -o allow_other .host:/VMware /mnt/vmware

共有フォルダをsambaでマウントしてコピーするよりも、圧倒的に転送速度が速くて便利。

Live DVDのカスタマイズ

ここまでに書いたカスタマイズの他、grub-installで署名されたモジュールを書き込めるようにしたLive DVDを作り、それをUSBフラッシュメモリーから起動できたら、メインPCで発生する起動に関する問題はすぐに解消できるように思った。

作り方はこちらに書かれていて、今すぐにでもできそうな雰囲気。
Community Help Wiki / LiveCDCustomization

こちらを見ていると、どうもGUIが必要というわけでもなさそうなので、Ubuntu 20.04 Serverを立ち上げて試してみる。

準備

必要パッケージをインストール。

$ sudo apt install squashfs-tools genisoimage xorriso

変更のベースは、以前にダウンロードしてきている ubuntu-20.04.1-desktop-amd64.iso とした。

$ sudo mkdir /mnt/live
$ sudo mount -o loop /mnt/vmware/ubuntu-20.04.1-desktop-amd64.iso /mnt/live
mount: /mnt/live: WARNING: device write-protected, mounted read-only.

ISOの中身を展開。

$ mkdir -p ~/work/livedvd/extract-cd
$ cd work/livedvd/
$ sudo rsync --exclude=/casper/filesystem.squashfs -a /mnt/live/ extract-cd/

SquashFSを展開。

$ sudo unsquashfs /mnt/live/casper/filesystem.squashfs
$ sudo mv squashfs-root edit
$ ll
total 16
drwxrwxr-x  4 rohhie rohhie 4096 Nov  7 06:50 ./
drwxrwxr-x  5 rohhie rohhie 4096 Nov  7 06:40 ../
drwxr-xr-x 18 root   root   4096 Aug  1  2020 edit/
dr-xr-xr-x 12 root   root   4096 Aug  1  2020 extract-cd/

カスタマイズ

編集開始の手続き。一度準備をして、繰り返し操作をするときには、ここからはじめれば良い。

$ cd ~/work/livedvd/
$ sudo mount -o bind /run/ edit/run/
$ sudo mount --bind /dev/ edit/dev/
$ sudo chroot edit
# mount -t proc none /proc
# mount -t sysfs none /sys
# mount -t devpts none /dev/pts
# export HOME=/root
# export LC_ALL=C

最初にすべてをアップデート。

# apt update; apt -y dist-upgrade; apt -y autoremove

キーボードレイアウトを日本語にしたい。

# dpkg-reconfigure keyboard-configuration

コンソールに設定画面が表示されるので、日本語キーボードを設定する。
日本語キーボードを選択するところ以外はすべてデフォルトにしている。

続いて、open-vm-tools-desktopをインストールしておきたい(これは、仮想PCで起動しないと使えないけれど)。

# apt install open-vm-tools-desktop

タイムゾーンを東京にしたい。

# dpkg-reconfigure tzdata
設定画面が開くので、Asia→Tokyoの順で選択。

# timedatectl set-local-rtc true ← これは効果を出せていない。Live DVDを起動するとシステム時間がUTCとして扱われている。

システム時間をローカルタイム扱いにする。

ArchLinux / How to set timezone from chroot? (tzselect makes no effect).

/etc/adjtime ※新規作成

0.0 0 0
0
LOCAL

※このファイルがなければシステム時間はUTC扱い、あれば、ローカル時間扱いになるようだった。
※timedatectl set-local-rtc で設定をすると、このファイルができたりなくなったり…なるほど、という感じ。
timedatectl はsystemdのツールで、chrootされていてもシステム本体の状態が変わるだけだった。

署名付きのgrubをインストールできるようにする。

# apt install grub-efi-amd64-signed shim-signed

起動時にログインサウンドを鳴らしたい。
ubuntu mate community / How To Activate Ubuntu Login Sound
ask ubuntu / Configuring startup apps during ISO customization in UCK

# mkdir -p /etc/skel/.config/autostart

/etc/skel/.config/autostart/canberra-gtk-play.desktop ※新規作成

[Desktop Entry]
Type=Application
Exec=/usr/bin/canberra-gtk-play --id="desktop-login" --description="GNOME Login"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[C]=Gnome Login Sound
Name=Gnome Login Sound
Comment[C]=Play a sound at login
Comment=Play a sound at login

このファイル、Live DVDから起動した後、Startup Applicationsでコマンドを追加した後、
/home/ubuntu/.config/autostart にできあがったファイルを転記してきている。
同じ方法で必要なプログラムを起動時に実行させることができそうなので、メモしておく。

さて…やっておきたいカスタマイズが終わったら、クリーンアップしておく。

# apt clean
# rm -rf /tmp/*
# umount /proc || umount -lf /proc
# umount /sys
# umount /dev/pts
# umount /dev

# exit
$ sudo rm edit/root/.bash_history

カスタマイズ その2

インストーラーを起動せずに、直接デスクトップを起動したい。
また、タイムアウトをなくしたい。

extract-cd/boot/grub/grub.cfg

#set timeout=5

menuentry "Try Ubuntu without installing" {
        set gfxpayload=keep
        linux   /casper/vmlinuz  file=/cdrom/preseed/ubuntu.seed quiet splash ---
        initrd  /casper/initrd
}
menuentry "Ubuntu" {
        set gfxpayload=keep
        linux   /casper/vmlinuz  file=/cdrom/preseed/ubuntu.seed maybe-ubiquity quiet splash ---
        initrd  /casper/initrd
}
…

※読み込み専用のため、書き込みは:w!で。

ISOイメージ作成

ISOイメージを作っていく。

$ sudo chmod +w extract-cd/casper/filesystem.manifest
$ sudo su -
# cd /home/<username>/work/livedvd
# chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extract-cd/casper/filesystem.manifest
# exit
$ sudo cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
$ sudo sed -i '/ubiquity/d' extract-cd/casper/filesystem.manifest-desktop
$ sudo sed -i '/casper/d' extract-cd/casper/filesystem.manifest-desktop
$ sudo rm extract-cd/casper/filesystem.squashfs
rm: cannot remove 'extract-cd/casper/filesystem.squashfs': No such file or directory
$ sudo mksquashfs edit extract-cd/casper/filesystem.squashfs

※extract-cd/casper/filesystem.squashfsは、編集2回目以降で削除が必要になってくる。

最後のmksquashfsはかなり重い感じで、圧縮しているようなので時間がそれなりに掛かる。
コア1つの割り当てで12分程度掛かったが、コアを増やしたら早くなるのかどうかは不明。

さらに続く…

$ sudo su -
# cd /home/<username>/work/livedvd
# printf $(du -sx --block-size=1 edit | cut -f1) > extract-cd/casper/filesystem.size
# exit

ディスクの情報を書き込む。
~/extract-cd/README.diskdefines

#define DISKNAME  Ubuntu 20.04.1 LTS "Focal Fossa + Custom" - Release amd64
#define TYPE  binary
#define TYPEbinary  1
#define ARCH  amd64
#define ARCHamd64  1
#define DISKNUM  1
#define DISKNUM1  1
#define TOTALNUM  0
#define TOTALNUM0  1

※読み込み専用のため、書き込みは:w!で。

続く。

$ cd extract-cd/
$ sudo rm md5sum.txt
$ find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt

いよいよISOの書き出し。
最初、UEFI起動ができずにいたが、黄色にした部分を追加することで問題が解消した。
ask ubuntu / HOWTO create UEFI/BIOS bootable ISO

$ sudo xorriso -as mkisofs -D -r -V "Ubuntu 20.04.1 LTS amd64 custom" -cache-inodes -J -l \
-no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat \
-eltorito-alt-boot -e --interval:appended_partition_2:all:: -append_partition 2 0xEF boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat \
-o /mnt/vmware/ubuntu-20.04.1-desktop-amd64-custom.iso ./

BIOS起動の場合、xorrisoが必要なく、ディスクへの書き出しがとても早かった。
また、ISOイメージを作り直すとき、既にファイルがあっても、上書きすることができた。

xorrisoを使うとディスクへの書き出しが遅くなり、ISOイメージは事前に消しておく必要があるが、UEFI起動できるようにするにはパーティションを追加する必要があり、これにはどうしても必要だった。

動作テスト

できあがったISOを仮想PCにセットして試す。
BIOS、UEFI+セキュアブートの環境、どちらからも起動することを確認した。

ただし、幾つか課題が残った。

  • ファイルチェック終了後に
    Check finished: errors found in 3 files! You might encounter errors.
    というメッセージが表示されていた。作り直した後も1つ残っていたりして。
    ask ubuntu / Check finished errors found in 1 file
  • /root/.bash_historyが残ったままだった(操作ミスか…)。
    → 削除タイミングを変えてきれいにした。
  • システム時間がUTCに書き換えられてしまう。
    → コマンド実行の結果として作られるファイルを手作りして対応。
  • aptによるパッケージ更新を入れたが…
    • エラー表示が出る。Live DVDの動作に問題はないようだが気になる。
    • DVDのサイズが200MB位増えて、2.9GBになった。
    • ログインサウンドが鳴らなくなった。あの音、とても気に入っているのに。
      → スタートアップにサウンドを鳴らすためのコマンドを追加して対応。

いずれきれいにするとして、今回は割り切り。

さいごに

キーボードの配列が日本語になっていると、いざというときに楽な気がする。
しばらくLive DVDで作業しそうだ…という時に、ちょっと頑張って作っておくと良いのではないだろうか。

コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他