[メモ] ちいさな Raspbian Stretch イメージの作成

# 概要
- こちら https://github.com/niklasf/build-raspbian-image のスクリプトを**そのまま**使い、ちいさな Raspbian Stretchイメージを作成。

- ユーザ/パスワード = `root / raspberry`
- Raspberry Pi Zero1.3, Zero W , 3B, 3B+ にて、起動確認
- よくわからん人は、[公式の](https://www.raspberrypi.org/downloads/raspbian/)を使おう。そのスジの方は、[`buildroot`](https://buildroot.org)とか使ってるか?!
- [minibian](https://minibianpi.wordpress.com)から、新しいのを出してくれないだろうか...


# イメージファイル
githubで、(今回はじめて)、LFS使用。制限とかに引っかかったら(?)、消す.

- (2018/8/23)古くなったので削除: [<del>2018-04-04-raspbian-stretch-mini_mt08.img.bz2</del>](https://media.githubusercontent.com/media/mt08xx/raspbian_mt08/master/2018-04-04-raspbian-stretch-mini_mt08.img.bz2) 　(180MB、展開時1024MB)

    ```shell-session:初回起動時、こんな感じ
root@raspberry:~# uname -a
Linux raspberry 4.14.32+ #1106 Wed Apr 4 17:54:59 BST 2018 armv6l GNU/Linux
root@raspberry:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       888M  522M  305M  64% /
devtmpfs        213M     0  213M   0% /dev
tmpfs           217M     0  217M   0% /dev/shm
tmpfs           217M  7.1M  210M   4% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           217M     0  217M   0% /sys/fs/cgroup
tmpfs           100M     0  100M   0% /tmp
/dev/mmcblk0p1   59M   22M   37M  38% /boot
tmpfs            44M     0   44M   0% /run/user/0
root@raspberry:~#
```

# 使用手順
## 起動前作業
1. ファイルのダウンロード
2. いつものツールで、いつも通り、SDカードに焼く
    - [Etcher](https://etcher.io)だと、bz2を展開せず、そのまま指定すればよい
3. できたSDカードをらずぱいに入れて、電源ON

## ラズパイでの作業
### パーティション拡張
- とりあえずやらないと、すぐにDiskFull

```bash
# fdiskにて、rootパーティション削除、開始位置を同じにして再作成
fdisk /dev/mmcblk0
p
d
2
n
p
2
119141

n
w

# 再起動
reboot

# 再起動後、resize2fs
resize2fs /dev/mmcblk0p2
```


### apt レポジトリの登録


```bash:こぴぺ
# キーの登録
apt install -y dirmngr && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 82B129927FA3303E

# 以下、Raspbian Stretchから拝借したものを入れる

cat <<'EOF' > /etc/apt/sources.list
deb http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
EOF

cat <<'EOF' > /etc/apt/sources.list.d/raspi.list
deb http://archive.raspberrypi.org/debian/ stretch main ui
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://archive.raspberrypi.org/debian/ stretch main ui
EOF

# レポジトリ情報更新
apt update
```


### Wifi を使う
- Zero W, 3Bにて確認. 
- USB WiFiドングルは<font color='red'>**未確認**</font>. (RTL-8xxxとか..)

```bash:Wifiのとパスフレーズは適宜
# 必要なパッケージ
apt-get install -y firmware-brcm80211 pi-bluetooth wpasupplicant

# 設定ファイル編集
cat <<EOF >> /etc/network/interfaces
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
EOF

# wpa_supplicant.conf
cat << 'EOF' > /etc/wpa_supplicant/wpa_supplicant.conf
network={
	ssid="Pi3-AP"
	psk="raspberry"
}
EOF
```



### その他設定
- ホスト名 変更。再起動で有効
`hostname set-hostname NEW-HOST-NAME` 

    ```bash:例"rpi-ラズパイのシリアル番号下6桁"
hostnamectl set-hostname rpi-`cat /proc/cpuinfo | grep Serial | rev | cut -b 1-6 | rev`
reboot
```
- ほかの機器から、ホスト名で検索(Avahi, Zeroconf, Bonjour)
`apt install avahi-daemon`

- キーボードレイアウト選択
`apt install console-common` <br> `dpkg-reconfigure console-data` #再設定


- タイムゾーン選択
`dpkg-reconfigure tzdata`


- ロケール選択
`apt install locales && dpkg-reconfigure locales`


- swapを使用(メモリが足りないとき?)

	```bash
	# パッケージインストール
	apt install dphys-swapfile

	# swapサイズ指定.
	vi /etc/dphys-swapfile
	CONF_SWAPSIZE=512

	# 有効化
	dphys-swapfile setup   # swapファイル作成
	dphys-swapfile swapon  # 有効化


	# 無効化
	dphys-swapfile swapoff   # 無効化
	dphys-swapfile uninstall # swapファイル削除
	```



	```shell-session:実行例
	root@rpi-mini:~# free
				  total        used        free      shared  buff/cache   available
	Mem:         949452       32520      851148        7788       65784      860680
	Swap:             0           0           0
	root@rpi-mini:~# dphys-swapfile setup   # swapファイル作成
	want /var/swap=512MByte, checking existing: keeping it
	root@rpi-mini:~# dphys-swapfile swapon  # 有効化
	root@rpi-mini:~# free
				  total        used        free      shared  buff/cache   available
	Mem:         949452       32432      851092        7788       65928      860760
	Swap:        524284           0      524284
	root@rpi-mini:~# # 
	root@rpi-mini:~# # Swapが 524284 
	root@rpi-mini:~# # 
	root@rpi-mini:~# # 
	root@rpi-mini:~# dphys-swapfile swapoff   # 無効化
	root@rpi-mini:~# dphys-swapfile uninstall # swapファイル削除
	root@rpi-mini:~# free
				  total        used        free      shared  buff/cache   available
	Mem:         949452       32368      852180        7788       64904      860832
	Swap:             0           0           0
	root@rpi-mini:~# 
	```





## イメージ作成作業メモ

- だいたい80分。

    ```
real    79m41.112s
user    48m35.280s
sys     1m30.896s
```

- ホスト環境:Windows 10 64bit, CPU 2.1GHz HDD. 
    - VirtualBox
    - Vagrant debian/stretch64をそのまま使用

		```rb:Vagrantfile
		Vagrant.configure("2") do |config|
			config.vm.box = "debian/stretch64"
			config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
		end
		```


- 以下を実行

	```bash
	sudo -s   #rootに

	# 必要パッケージ
	apt-get update && apt-get install -y vmdebootstrap binfmt-support qemu-user-static ca-certificates curl binutils git-core kmod

	# gitクローン
	cd
	git clone https://github.com/niklasf/build-raspbian-image
	cd build-raspbian-image

	# apt-cacher-ngのサーバ指定
	#sed -i -e 's/localhost:3142/apt-cache-server:3142/g'  ./*.sh

	time sudo ./bootstrap.sh
	```

- `bootstrap.sh`のオプション変更
    - `--size 2000M` => `--size 1024M`


# その他


- これくらいのサイズ(200MB)のものは、どこに置くのがよいのだろうか？
- TODO: 次回(あるのか?)は...
    - レポジトリの設定を取り込む