Debianインストール用USBメモリーの作成

# 目的
Debianインストール用USBメモリーの作成作業について残します
# 開発環境
```bash:/etc/os-release
master@sv-server:~$ cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux bookworm/sid"
NAME="Debian GNU/Linux"
VERSION_CODENAME=bookworm
ID=debian
～
```
# USBメモリーの一例
```bash:USBメモリーの確認(lsusb、lsblk、fdisk)
master@sv-server:~$ # /dev/sdbの場合
master@sv-server:~$ lsusb
～
Bus 003 Device 007: ID 125f:c81a A-DATA Technology Co., Ltd. Flash drive
～
master@sv-server:~$ lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
～
sdb             8:16   1  7.5G  0 disk
～
master@sv-server:~$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 7.53 GiB, 8086609920 bytes, 15794160 sectors
Disk model: USB Flash Drive
～
Device     Boot Start      End  Sectors  Size Id Type
/dev/sdb1        2048 15794159 15792112  7.5G  c W95 FAT32 (LBA)
```
# 作業例
:::note alert
<strong>全消去</strong>しても問題の無いUSBメモリーで作業する事
:::
:::note info
ダウンロードするファイル
 * 共通
   * vmlinuz
   * initrd.gz
 * debianの場合
   * debian-testing-amd64-netinst.iso
   * preseed.cfg
   * sub_late_command.sh
 * ubuntu desktopの場合
   * lunar-desktop-legacy-amd64.iso
   * preseed.cfg
   * sub_late_command.sh
   * sub_success_command.sh
 * ubuntu live serverの場合
   * lunar-live-server-amd64.iso
   * user-data
:::note warn
不安定版のISOファイルは作成されたタイミングによってはモジュール内の不整合でインストールに失敗する事があります
:::
:::note warn
今回のコピー先USBメモリーは<strong>/dev/sdb</strong>です
コピー先は各自の環境に合わせて変更して下さい
:::
```bash:作成作業
# =============================================================================
# 参考：https://www.debian.org/releases/testing/amd64/ch04s03.ja.html
# =============================================================================
# --- ファイルダウンロード ----------------------------------------------------
curl -L -# -O -R -S --create-dirs --output-dir "./cfg" "http://deb.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/hd-media/vmlinuz"
curl -L -# -O -R -S --create-dirs --output-dir "./cfg" "http://deb.debian.org/debian/dists/bookworm/main/installer-amd64/current/images/hd-media/initrd.gz"
# *** ↓ debianの場合 *********************************************************
# --- ファイルダウンロード ----------------------------------------------------
curl -L -# -O -R -S --create-dirs --output-dir "./cfg/debian" "https://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/amd64/iso-cd/debian-testing-amd64-netinst.iso"
curl -L -# -O -R -S --create-dirs --output-dir "./cfg/debian" "https://raw.githubusercontent.com/office-itou/Linux/master/installer/source/cfg/debian/preseed.cfg"
curl -L -# -O -R -S --create-dirs --output-dir "./cfg/debian" "https://raw.githubusercontent.com/office-itou/Linux/master/installer/source/cfg/debian/sub_late_command.sh"
# *** ↑ debianの場合 *********************************************************
# --- 必要なアプリのインストール ----------------------------------------------
sudo which syslinux mkdosfs
dpkg -l syslinux dosfstools
sudo apt-get install syslinux dosfstools
# --- USBメモリーのパーティション作成 -----------------------------------------
sudo sfdisk /dev/sdb << _EOT_
,,c
_EOT_
# --- USBメモリーのフォーマットなど -------------------------------------------
sudo bash -c 'cat /usr/lib/syslinux/mbr/mbr.bin > /dev/sdb'
sudo mkdosfs -F32 /dev/sdb1
sudo syslinux /dev/sdb1
# --- 作業ディレクトリーの作成 ------------------------------------------------
mkdir -p ./usb
mkdir -p ./mnt
# --- ファイルコピー ----------------------------------------------------------
sudo mount /dev/sdb1 ./usb/
sudo cp --preserve=timestamps ./cfg/vmlinuz ./usb/
sudo cp --preserve=timestamps ./cfg/initrd.gz ./usb/
sudo bash -c 'echo "default vmlinuz initrd=initrd.gz" > ./usb/syslinux.cfg'
# *** ↓ debianの場合 *********************************************************
# --- DVDのファイルコピー -----------------------------------------------------
sudo mount -r -o loop ./cfg/debian/debian-testing-amd64-netinst.iso ./mnt/
sudo cp -a ./mnt/. ./usb/
sudo umount ./mnt/
# --- 無人インストール用の作業 ------------------------------------------------
sudo mkdir -p ./usb/preseed
sudo cp --preserve=timestamps ./cfg/debian/preseed.cfg ./usb/preseed/
sudo cp --preserve=timestamps ./cfg/debian/sub_late_command.sh ./usb/preseed/
sudo cp --preserve=timestamps ./usb/boot/grub/grub.cfg ./usb/boot/grub/grub.cfg.org
sudo cp --preserve=timestamps ./usb/isolinux/txt.cfg ./usb/isolinux/txt.cfg.org
cat << _EOT_ | sudo tee -a ./usb/boot/grub/grub.cfg > /dev/null
menuentry --hotkey=u 'Unattended installation' {
    set background_color=black
    linux    /install.amd/vmlinuz --- quiet auto=true file=/cdrom/preseed/preseed.cfg
    initrd   /install.amd/initrd.gz
}
_EOT_
cat << _EOT_ | sudo tee -a ./usb/isolinux/txt.cfg > /dev/null
label unattended
	menu label ^unattended installation
	menu default
	kernel /install.amd/vmlinuz
	append vga=788 initrd=/install.amd/initrd.gz --- quiet auto=true file=/cdrom/preseed/preseed.cfg
_EOT_
diff -y -W 100 ./usb/boot/grub/grub.cfg.org ./usb/boot/grub/grub.cfg
diff -y -W 100 ./usb/isolinux/txt.cfg.org ./usb/isolinux/txt.cfg
# *** ↑ debianの場合 *********************************************************
# --- 終了処理 ----------------------------------------------------------------
sudo umount ./usb
# =============================================================================
```
:::note warn
シンボリックリンクのコピーエラーは無視します
```bash:
master@sv-server:~/work$ sudo cp -a ./mnt/. ./usb/
cp: シンボリックリンク './usb/./debian' を作成できません: 許可されていない操作です
cp: シンボリックリンク './usb/./dists/testing' を作成できません: 許可されていない操作です
cp: シンボリックリンク './usb/./doc/FAQ/html/basic-defs.html' を作成できません: 許可されていない操作です
～
```
:::
:::note info
ubuntu desktopの場合は以下の部分と入れ替えて下さい
```bash:
# *** ↓ ubuntu desktopの場合 *************************************************
# --- ファイルダウンロード ----------------------------------------------------
curl -L -# -O -R -S --create-dirs --output-dir "./cfg/ubuntu.desktop" "http://cdimage.ubuntu.com/daily-legacy/current/lunar-desktop-legacy-amd64.iso"
curl -L -# -O -R -S --create-dirs --output-dir "./cfg/ubuntu.desktop" "https://raw.githubusercontent.com/office-itou/Linux/master/installer/source/cfg/ubuntu.desktop/preseed.cfg"
curl -L -# -O -R -S --create-dirs --output-dir "./cfg/ubuntu.desktop" "https://raw.githubusercontent.com/office-itou/Linux/master/installer/source/cfg/ubuntu.desktop/sub_late_command.sh"
curl -L -# -O -R -S --create-dirs --output-dir "./cfg/ubuntu.desktop" "https://raw.githubusercontent.com/office-itou/Linux/master/installer/source/cfg/ubuntu.desktop/sub_success_command.sh"
# *** ↑ ubuntu desktopの場合 *************************************************
```
```bash:
# *** ↓ ubuntu desktopの場合 *************************************************
# --- DVDのファイルコピー -----------------------------------------------------
sudo mount -r -o loop ./cfg/ubuntu.desktop/lunar-desktop-legacy-amd64.iso ./mnt/
sudo cp -a ./mnt/. ./usb/
sudo umount ./mnt/
# --- 無人インストール用の作業 ------------------------------------------------
sudo mkdir -p ./usb/preseed
sudo cp --preserve=timestamps ./cfg/ubuntu.desktop/preseed.cfg ./usb/preseed/
sudo cp --preserve=timestamps ./cfg/ubuntu.desktop/sub_late_command.sh ./usb/preseed/
sudo cp --preserve=timestamps ./cfg/ubuntu.desktop/sub_success_command.sh ./usb/preseed/
sudo cp --preserve=timestamps ./usb/boot/grub/grub.cfg ./usb/boot/grub/grub.cfg.org
cat << _EOT_ | sudo tee -a ./usb/boot/grub/grub.cfg > /dev/null
menuentry "unattended installation" {
	set gfxpayload=keep
	linux	/casper/vmlinuz --- fsck.mode=skip file=/cdrom/preseed/preseed.cfg auto=true automatic-ubiquity noprompt
	initrd	/casper/initrd
}
_EOT_
diff -y -W 100 ./usb/boot/grub/grub.cfg.org ./usb/boot/grub/grub.cfg
# *** ↑ ubuntu desktopの場合 *************************************************
```
※sudo umount ./usbを忘れずに
:::
:::note info
ubuntu live serverの場合は以下の部分と入れ替えて下さい
```bash:
# *** ↓ ubuntu serverの場合 **************************************************
# --- ファイルダウンロード ----------------------------------------------------
curl -L -# -O -R -S --create-dirs --output-dir "./cfg/ubuntu.server" "http://cdimage.ubuntu.com/ubuntu-server/daily-live/current/lunar-live-server-amd64.iso"
curl -L -# -O -R -S --create-dirs --output-dir "./cfg/ubuntu.server" "https://raw.githubusercontent.com/office-itou/Linux/master/installer/source/cfg/ubuntu.server/user-data"
# *** ↑ ubuntu serverの場合 **************************************************
```
```bash:
# *** ↓ ubuntu serverの場合 **************************************************
# --- DVDのファイルコピー -----------------------------------------------------
sudo mount -r -o loop ./cfg/ubuntu.server/lunar-live-server-amd64.iso ./mnt/
sudo cp -a ./mnt/. ./usb/
sudo umount ./mnt/
# --- 無人インストール用の作業 ------------------------------------------------
sudo mkdir -p ./usb/nocloud
sudo cp --preserve=timestamps ./cfg/ubuntu.server/user-data ./usb/nocloud/
sudo cp --preserve=timestamps ./usb/boot/grub/grub.cfg ./usb/boot/grub/grub.cfg.org
sudo touch ./usb/nocloud/meta-data
sudo touch ./usb/nocloud/vendor-data
sudo touch ./usb/nocloud/network-config
cat << _EOT_ | sudo tee -a ./usb/boot/grub/grub.cfg > /dev/null
menuentry "unattended installation" {
	set gfxpayload=keep
	linux	/casper/vmlinuz --- fsck.mode=skip autoinstall "ds=nocloud-net;s=file:///cdrom/nocloud/" ip=dhcp ipv6.disable=1 debian-installer/locale=ja_JP.UTF-8 keyboard-configuration/layoutcode?=jp keyboard-configuration/modelcode?=jp106
	initrd	/casper/initrd
}
_EOT_
diff -y -W 100 ./usb/boot/grub/grub.cfg.org ./usb/boot/grub/grub.cfg
# *** ↑ ubuntu serverの場合 **************************************************
```
※sudo umount ./usbを忘れずに
:::