mkusb でちょっと凝った USB 起動 Linux を作成する

# ビデオサイネージを作ります

## 要件

- PCをビデオサイネージに再利用
  - ハードディスクが壊れて物理的に抜いている状態のものを活用
  - USB 起動はできる
- 動画ファイルを全画面リピート再生
- 動画ファイルはユーザーで入れ替え可能
  - Windows マシンで USB メモリに動画ファイルをコピーする

これを、 USB 起動 Linux で実現します。


## USB 起動 Linux の概略

- Ubuntu 22.04
- USB メモリ上の Ubuntu インストーラを Live Linux として使う
- カスタマイズは persistent-filesystem で記録する


## カスタマイズの内容

- VLCをインストール
- VLCを自動起動
- 動画を全画面でリピート自動再生

# 先行研究

「mkusb を使って ワークショップ用USB起動システムを作る」
https://qiita.com/nanbuwks/items/e9cd162e95a9636a2a2c

では、mkusb で persistent-filesystem 付きの USB メモリを作成しました。

課題として、以下の問題がありました。

- 起動時に一旦インストール画面をスキップしないといけない
- Windows マシンに刺すとフォーマットが促される

今回はそれを解消し、USBメモリでPCのビデオサイネージを作ってみます。

# 環境

- Ubuntu22.04 Ja LTS
- Sandisk Ultra Fit USB3.0  8GBytes


#  mkusb

前回は、mkusb のフレーバーとして mkusb-plug を使いました。
mkusb-plug は USB デバイスの操作にフェールセーフが取り込まれたりしていました。総じて簡単操作のフレーバーぽかったです。
今回は mkusb を試してみます。

インストールなどは先の記事のとおりやっておきます。

mkusb を選んで起動

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/dc8b159d-c312-d9a6-978f-ad57e501e2cf.png)

Yes
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/9928c7c6-5598-a13d-d9f3-88862cb9e8bc.png)


i を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/7d222cab-de35-5871-bd82-907183fb774c.png)
pを選びます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d82542d7-36f0-8b37-dcac-1330e4432de3.png)


# 分岐ルート

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/6ce64a9a-3906-4449-f9cb-2260f3c3d7ac.png)

ここから先は persistent filesystem の作り方によって分岐します。結果も変わります今回のような用途だと旧来の dus-Persistent が正解でした。

しかしながらこの記事では dus-Iso2usb / dus-Persistent 両方を解説します。


ちなみに、それぞれは以下のメリットデメリットは 以下のとおりです。

- dus-Iso2usb
  - persistent 内容は EXT4 にファイル単位で保管される
    - 変更内容をファイル単位でアクセスできる
  - Windows からUSBメモリにアクセスできない 
- dus-Persistent
  - persistent 内容は 単一ファイルで保管される
    - ファイルシステムの整合性がとれないと脆弱? 
  - Windows からアクセスできる領域を作成できる


## dus-Iso2usb 
この分岐ルートでは、dus-iso2usb を選びます。


iso ファイルを選んで


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/eb72e517-b3bd-820c-ef0b-6fbf9796b9a0.png)

間違いないことを確認して

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a8470e77-11a8-313d-2ff5-fedbb9a5b110.png)

ここでは何も選択せずに

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/17bd89c0-e35a-be3e-2e0f-562b2f730d91.png)

このような仕上がりになるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f9a8e792-7944-ef18-ce43-1253048115e2.png)


```
$ sudo fdisk -l /dev/sdb
.
.
.
デバイス   開始位置 最後から   セクタ サイズ タイプ
/dev/sdb1      1953     3906     1954   977K BIOS 起動
/dev/sdb2      3907   503906   500000 244.1M EFI システム
/dev/sdb3    505856 15185919 14680064     7G Linux ファイルシステム
/dev/sdb5  15185920 29507583 14321664   6.8G Linux ファイルシステム
.
.
.
$ lsblk -f /dev/sdb
NAME   FSTYPE FSVER LABEL     UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sdb                                                                               
├─sdb1                                                                            
├─sdb2 vfat   FAT32 usbboot   02D3-7915                                           
├─sdb3 ext4   1.0   isodevice 01a5f0fc-634a-44fa-bad7-59126c3b779d                
└─sdb5 ext4   1.0   writable  4d1c0d97-b070-4b65-b441-9b54494a021e     
```

### dus-Iso2usb の問題点


sdb1,sdb2,sdb3,sdb5  でいっぱいです。基本パーティーションと拡張パーティションの区別はいまどきはどうなっているのかな? 
サイネージの要件に以下のようなのがありますが、このパーティション構成だと Windows マシンではアクセスできなさそうです。

> - 動画ファイルはユーザーで入れ替え可能
>    - Windows マシンで USB メモリに動画ファイルをコピーする

試しに、GpartED を使って sdb5 を縮小し、NTFS パーティションを作ってみましたが
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/6964a30c-f0ba-5fea-93c3-073091572afe.png)

アンマウントしてからパーティションを作ると /dev/sdb4 になってしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f3c348b6-cc80-0ddc-bdc5-555a00f1ad3f.png)

これを Windows10 Pro マシンに差し込むと Explorer が停止してしまいました。

##  dus-Persistent

さて、 dus-Iso2usb はうまくいかなさそうなので分岐点まで戻り、 dus-Persistent でやり直してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/07a87b88-0237-2261-41a7-5a6bb9a7567b.png)

しばらく後にこれが出てきました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/9c354f33-8fd5-edb4-aab0-e7878c0e5425.png)

こちらはよくわからないけどこのまま OK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/38a5bea5-718d-aa2a-8ad9-f3661456bae7.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/d798867d-5976-10f6-4be0-a050985fd002.png)

できたもの

```
$ sudo fdisk /dev/sdb -l
ディスク /dev/sdb: 28.64 GiB, 30752636928 バイト, 60063744 セクタ
Disk model: Ultra Fit       
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: 3678146B-1757-4FD3-A029-163F393382C8

デバイス   開始位置 最後から   セクタ サイズ タイプ
/dev/sdb1  33650688 60061695 26411008  12.6G Microsoft 基本データ
/dev/sdb2      1953     3906     1954   977K BIOS 起動
/dev/sdb3      3907   503906   500000 244.1M EFI システム
/dev/sdb4    503907  7236328  6732422   3.2G Linux ファイルシステム
/dev/sdb5   7236329 33650687 26414359  12.6G Linux ファイルシステム

パーティション情報の項目がディスクの順序と一致しません。
$ lsblk -f /dev/sdb
NAME   FSTYPE  FSVER            LABEL                 UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
sdb                                                                                                       
├─sdb1 ntfs                     usbdata               60D1D62443B90639                       12.5G     1% /media/nanbuwks/usbdata
├─sdb2                                                                                                    
├─sdb3 vfat    FAT32            usbboot               4C2B-A37F                                           
├─sdb4 iso9660 Joliet Extension Ubuntu 22.04 ja amd64 2022-05-02-03-06-06-00                     0   100% /media/nanbuwks/Ubuntu 22.04 ja amd64
└─sdb5 ext4    1.0              writable              647985f1-a157-4808-9dd9-47fea5961528   10.9G     6% /media/nanbuwks/writable

$ ls /media/nanbuwks/usbdata
backup  restore
$ ls /media/nanbuwks/writable/
lost+found  upper  work
$ 
```

この、usbdata が Wineows で読み書きできるようになっているために、ここに videos フォルダを作り、底に保存した動画ファイルを再生するようにしました。

# USBメモリ内のLinuxの設定

最初に起動すると以下のメッセージが出てくるので「okay」
![Screenshot from 2023-05-24 17-44-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/65453f0c-4d4f-d28c-e438-80d70d2c4c25.png)

- sudo apt update
- キーボードは英語になってましたので変更
  - 以下の記事の逆の設定を行う
  - cf.,「Ubuntu20.04 で US キーボードに変更」 https://qiita.com/nanbuwks/items/bcd6c838487c906a70e1
- vlc 、その他必要なものをインストール

## autoexec の設定

ログオン時に自動で動かすために、以下の設定をした

`/home/ubuntu/autorun.sh`

```
sleep 10
vlc /media/ubuntu/usbdata/videos/* -f -L

```
sleep 10 は /media/ubuntu/usbdata がオートマウントするのを待つため。

`/home/ubuntu/.config/autostart/autovideo.desktop`

```
[Desktop Entry]
Type=Application
Name=Video AutoRun
Exec=/home/ubuntu/autorun.sh
Icon=system-run
X-GNOME-Autostart-enabled=true
```

Exec を ~/autorun.sh とするとダメでした。


これで、 usbdata パーティション videos フォルダ内の動画が再生されます。