Raspberry Pi SSDにRaspbian Lite(デスクトップ)

Raspbianデスクトップを導入するには公式のRaspbianとRaspbian LiteからGUIを構築する方法があります。

参考 [GUIDE] Raspbian Lite with RPD/LXDE/XFCE/MATE/i3/Openbox/X11 GUI

今回は前回購入したSSDにRaspbian LiteからRaspbianデスクトップを構築してみました。

従来通りRaspbianの機能を活かすためにはメモリの大幅な節減効果はあまり期待できませんが必要なアプリケーションだけを入れることが可能になりディスクの節約には効果があります。

インストール
SSDをSATA-USB変換アダプタで接続するとUSBメモリ同様/dev/sdx形式で認識されます。
購入したSSDは一切フォーマットされていないようです。一旦適当な形式(ext4)でフォーマットしてみました。無事フォーマット完了、/dev/sdaで認識できています。
インストール方法はいろいろありますが今回は新規インストールということで従来通りDDでインストールしてみます。

# dd if=2018-06-27-raspbian-stretch-lite.img of=/dev/sda bs=1M

ここで起動をするとパーテーションを拡張されてしまうのでgpartedでパーテーションを切り直します。(OS領域と個人データを分けたい)

画像はインストール直後では無く現時点のものですがOS領域/dev/sda2を30000MiB残りを/dev/sd3に割り当てました。

注意することはパーテーションを手動でいじった場合はPTUUIDも適切に書き換えてやる必要があります。

# blkid /dev/sda
/dev/sda: PTUUID="3705c585" PTTYPE="dos"

/boot/cmdline.txt(該当箇所)
拡張領域が無いので拡張されることはないのですがinit_resize.shの部分も削除しています。

root=PARTUUID=3705c585-02
init=/usr/lib/raspi-config/init_resize.sh 削除

/etc/fstab

PARTUUID=3705c585-01  /boot      vfat    defaults          0       2
PARTUUID=3705c585-02  /          ext4    defaults,noatime  0       1

作業マシンのPi3から必要な設定をコピーします。
SSDは/media/pi/rootfsにマウントされているとします。

# cp /etc/dhcpcd.conf /media/pi/rootfs/etc
# cp /etc/wpa_supplicant/wpa_supplicant.conf /media/pi/rootfs/etc/wpa_supplicant
# cp /etc/hosts /media/pi/rootfs/etc
# cp /etc/hostname /media/pi/rootfs/etc

取り敢えずこんなとこでしょうか
準備ができたらスロットからマイクロSDを外して起動してみます。
無事起動してネットワークも繋がったらOK
ネットワークはip aで確認

$ ip a(省略しています)
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.3/24 brd 192.168.0.255 scope global wlan0
       valid_lft forever preferred_lft forever

取り敢えずupdate

$ sudo apt update && sudo apt -y upgrade

再起動

# reboot

Guiのインストール
Raspbian Lite Guide – Guiに沿ってインストールを進めますがコンソール画面だけでコマンドを打つのはしんどいです。
というわけで予め次のテキストファイルを用意しておきます。SSDで起動する前に/media/pi/rootfs/home/piに放り込んでおきます。
ファイル名は適当に(setup.sh)

#!/bin/sh
sudo apt install -y --no-install-recommends xserver-xorg
sudo apt install -y --no-install-recommends xinit
sudo apt install -y raspberrypi-ui-mods
sudo apt install -y lxde-core lxappearance
sudo apt install -y lightdm
sudo apt install -y fonts-ipafont fonts-ricty-diminished fcitx-mozc

ログインしたら実行〜(コーヒーブレイク)

$ sh ./setup.sh

再起動する前にraspi-config

$ sudo raspi-config


3 Boot Options
 B1 Desktop / CLI
  B4 Desktop Autologin
4 Localisation Options
 I1 Change Locale
  [*] ja_JP.UTF-8 UTF-8
    ja_JP.UTF-8
I2 Change Timezone
 Asia  Tokyo

I3 Change Keyboard Layout
 Generic 105-key(Intl)
  Other
   Japanese
    Japanese – Japanese(OADG 109A)
    Enter Enter

再起動
再起動すると日本語と日本語入力も有効で起動してくるはずです。

いつもの見慣れた画面ですがアプリケーションの類はほとんど入っていません。
基本はターミナル(termit)とファイルマネージャー(pcmanfm)ですがなぜかgnome-screenshotとxscreensaverが入っていたりします。
公式raspbianに含まれるアプリケーションはパッケージやPIホームページに情報があると思うので追加することは可能でしょう。

フォント設定
65-fonts-ipa-mincho.conf
65-fonts-ipa-pgothic.conf
65-fonts-monospace.conf
font_set.sh

#!/bin/sh
sudo cp *conf /etc/fonts/conf.avail
cd /etc/fonts/conf.d
sudo ln -s ../conf.avail/65-fonts-ipa-mincho.conf
sudo ln -s ../conf.avail/65-fonts-ipa-pgothic.conf
sudo ln -s ../conf.avail/65-fonts-monospace.conf

上記の65xxx.confとfont_set.shを適当なディレクトリ(~/font_set)を作成、保存して実行

$ sh ~/font_set/font_set.sh

/dev/sda3のマウント
パーテーション分けしたsda3はホームディレクトリやデータ保存に使います。
ホームディレクトリは使い回しの効くリンクを張って変更することにしました。
マウントは/home/dataとします。

# mkdir /home/data
# chown pi:pi /home/data
/etc/fstab
PARTUUID=3705c585-03  /home/data    ext4  defaults,noatime  0   1
# mount -a

ホームディレクトリをコピー
SSD起動後スロットにSDをセットすると認識します。

$ cp -Rp /media/pi/rootfs/home/pi /home/data

ここで一旦ログアウトしてCtrl+Alt+F2でコンソールからログイン、piディレクトリをリネームしてコピーしたに/home/data/piリンクを張ってやります。

$ cd /home
$ sudo mv pi pi.bak
$ sudo ln -s /home/data/pi

Ctrl+Alt+F7で再度Xからログイン、アプリケーションは歯抜けになっていますが今までの画面設定が戻りました。

アプリケーションインストール
初期にインストールしたアプリケーションは大体こんなもん。
これでディスク使用量は約4GBになりました。
–archiver xarchiver zip
–browser chromium-browser-l10n firefox-esr-l10n-ja
–desktop lxpolkit lxsession-edit alacarte xdotool devilspie gdevilspie
–editor  vim leafpad geany
–font   fonts-ipafont fonts-ipaexfont fonts-ricty-diminished
–graphics gimp imagemagick xsane gpicview geeqie mupdf epdfview evince
–japanese fcitx-mozc convmv
–mail   sylpheed
–multimedia pavucontrol gstreamer0.10-pulseaudio audacious mpv
   mplayer swftools libxml2-utils rtmpdump ffmpeg easytag
–net  samba dnsutils whois
–office libreoffice libreoffice-l10n-ja
–print cups system-config-printer
–programing kicad pigpio wiringpi gcc-avr avr-libc avrdude
–terminal lxterminal gnome-terminal terminator guake
–tool  gparted tmux lv kpartx numlockx galculator gnome-calculator

起動について
前回設定したUSB Boot Modeはboot開始まで約10秒強とSSDの魅力が半減してしまいます。やはりここは従来の方法でマイクロSDのbootを利用して起動することにしました。
当サイトのPiはシャットダウンにzenityを利用しているのでこのダイアログに追加することにします。
#編集を謝ると起動できなくなります。(参考までに願います)

メニューはSSDからの通常起動、STM32F103を利用する際のSSD(UART)起動、MicroSDからの起動となっています。boot領域の編集はMicroSD側になるのでPi3のUSB Boot Modeが有効であればMicroSDをスロットから外すことによりSSDは通常起動します。
起動選択はわかりやすくするため安易にファイルを上書きしています。

またMicroSDの/bootを書き込するため実行時のみマウントしています。
マウント位置はほとんど使っていない/srvにしました。
MicroSD起動も同じメニューを使う際は同様の設定をします。
SSDで運用しているとMicroSD起動はエマージェンシー的な役割になるのでSD側は専用の簡単なメニューでいいかもしれません。
/srv/mmcblk0をマウントする際はnoautoを指定すること。SDを外すと起動できなくなります。
fstabに記載することによって不要なオートマウントを抑制することができます。(下記はSSD側の設定)

# mkdir /srv/mmcblk0p1
# mkdir /srv/mmcblk0p2
/etc/fstab
PARTUUID=8fcce167-01    /srv/mmcblk0p1  vfat    defaults,noauto 0  2
PARTUUID=8fcce167-02    /srv/mmcblk0p2  ext4    defaults,noauto,noatime  0  1

MicroSDの/bootに各起動に応じたcmdline.txtを別名で用意します。初回起動用のconfig.txtとcmdline.txtも置いておきます。
違いはPARTUUIDの値とuartはconsole=serial0,115200を削除
cmdline.txt.ssd
cmdline.txt.uart
cmdline.txt.msd
SSD(UART)起動はconfig.txtも変更になります。
config.txt.def(デフォルト)
config.txt.uart
下記のスクリプトを実行権限を付けて適当なディレクトリ(~/bin)に保存、メニューに登録しておきます。

$ chmod 755 poweroff-helper
#!/bin/sh
LIGHTDM="Exit to command line"
if [ -e /etc/init.d/lightdm ]; then
  if ! service lightdm status | grep -q inactive; then
    LIGHTDM="Logout"
  fi
fi
RET=0
ACTION=$(zenity --list --radiolist \
  --width=300 --height=220 \
  --hide-header \
  --title="End session" \
  --text="What would you like to do?" \
  --column "Select" --column="Action" \
  TRUE  "Power OFF" \
  FALSE "Reboot(Now DeskTop)" \
  FALSE "LXDE(SSD)" \
  FALSE "LXDE(Uart)" \
  FALSE "Micro SD" \
  FALSE "$LIGHTDM")
RET=$?
echo $SOUND
if [ "$ACTION" = "Power OFF" ]; then
  sleep 1
  sudo shutdown -h now
elif [ "$ACTION" = "Reboot(Now DeskTop)" ]; then
  sleep 1
  sudo reboot
elif [ "$ACTION" = "LXDE(SSD)" ]; then
  sudo mount /srv/mmcblk0p1
  sudo cp /srv/mmcblk0p1/cmdline.txt.ssd /srv/mmcblk0p1/cmdline.txt
  sudo cp /srv/mmcblk0p1/config.txt.def /srv/mmcblk0p1/config.txt
  sleep 1
  sudo reboot
elif [ "$ACTION" = "LXDE(Uart)" ]; then
  sudo mount /srv/mmcblk0p1
  sudo cp /srv/mmcblk0p1/cmdline.txt.uart /srv/mmcblk0p1/cmdline.txt
  sudo cp /srv/mmcblk0p1/config.txt.uart /srv/mmcblk0p1/config.txt
  sleep 1
  sudo reboot
elif [ "$ACTION" = "Micro SD" ]; then
  sudo mount /srv/mmcblk0p1
  sudo cp /srv/mmcblk0p1/cmdline.txt.msd /srv/mmcblk0p1/cmdline.txt
  sudo cp /srv/mmcblk0p1/config.txt.def /srv/mmcblk0p1/config.txt
  sleep 1
  sudo reboot
elif [ "$ACTION" = "$LIGHTDM" ]; then
  pkill lxsession
else
   echo "cancel"
fi

劇的に早くなった訳ではないのですがやはりSSDは快適ですね〜 docker始めました。