やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

VNCからRPI4B Raspbian Busterをセットアップする

 スワップやミラーサーバ等。

3B+のときのセットアップ方法

手順

  1. スワップ拡張
  2. RAMディスク設定
  3. aptのソースを日本サーバに設定
  4. ログ出力の抑制
  5. .bashrcに自作スクリプト呼出を追記
  6. システム更新
  7. 日本語フォント+日本語入力のインストール
  8. アプリのインストール

1. スワップ拡張

 現状確認。

free -h
              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       171Mi       3.2Gi        24Mi       253Mi       3.3Gi
Swap:          99Mi          0B        99Mi

 メインメモリ4GiB、スワップ99MiB。

 以下の手順にてスワップ容量を変更する。

sudo vi /etc/dphys-swapfile
CONF_SWAPSIZE=4096
CONF_MAXSWAP=8196

 設定を有効化する。

sudo systemctl stop dphys-swapfile
sudo systemctl start dphys-swapfile

 確認する。

free -h
              total        used        free      shared  buff/cache   available
Mem:          3.6Gi       173Mi       3.2Gi        24Mi       255Mi       3.3Gi
Swap:         4.0Gi          0B       4.0Gi

 スワップが4GiBになった。

2. RAMディスク

sudo mousepad /etc/fstab

 標準テキストエディタleafpadでなくmousepadに改名されていた。

/etc/fstab

tmpfs /tmp            tmpfs   defaults,size=2048m,noatime,mode=1777      0       0
tmpfs /var/tmp        tmpfs   defaults,size=16m,noatime,mode=1777      0       0
tmpfs /var/log        tmpfs   defaults,size=32m,noatime,mode=0755      0       0
tmpfs /home/pi/.cache/chromium/Default/  tmpfs  defaults,size=2048m,noatime,mode=1777  0  0
tmpfs /home/pi/.cache/lxsession/LXDE-pi  tmpfs  defaults,size=1m,noatime,mode=1777  0  0

 パスに含まれる半角スペースは\040で表す。Chromiumの自作プロファイルはスペースが含まれるクソ仕様なのでそこで使う。

tmpfs /home/pi/.cache/chromium/Profile\0401/  tmpfs  defaults,size=2048m,noatime,mode=1777  0  0
tmpfs /home/pi/.cache/chromium/Profile\0402/  tmpfs  defaults,size=2048m,noatime,mode=1777  0  0
tmpfs /home/pi/.cache/chromium/Profile\0403/  tmpfs  defaults,size=2048m,noatime,mode=1777  0  0
tmpfs /home/pi/.cache/chromium/Profile\0404/  tmpfs  defaults,size=2048m,noatime,mode=1777  0  0

 再起動してdf -hで確認できると思う。

reboot
df -h

3. システム更新ミラー

sudo vi /etc/apt/sources.list

 先頭に日本のミラーを追記する。

deb http://ftp.jaist.ac.jp/raspbian/ buster main contrib non-free rpi
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

4. ログ出力の抑制

 以下ファイルで任意の箇所をコメントアウトする。

sudo vi /etc/rsyslog.conf

コメントアウト箇所の抜粋

###############
#### RULES ####
###############

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*         /var/log/auth.log
*.*;auth,authpriv.none      -/var/log/syslog
#cron.*             /var/log/cron.log
daemon.*            -/var/log/daemon.log
kern.*              -/var/log/kern.log
lpr.*               -/var/log/lpr.log
mail.*              -/var/log/mail.log
user.*              -/var/log/user.log

#
# Logging for the mail system.  Split it up so that
# it is easy to write scripts to parse these files.
#
mail.info           -/var/log/mail.info
mail.warn           -/var/log/mail.warn
mail.err            /var/log/mail.err

#
# Some "catch-all" log files.
#
*.=debug;\
    auth,authpriv.none;\
    news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
    auth,authpriv.none;\
    cron,daemon.none;\
    mail,news.none      -/var/log/messages

#
# Emergencies are sent to everybody logged in.
#
*.emerg             :omusrmsg:*

 今回は*.emerg以外、行頭に#を追記してコメントアウトした。が、ログ出力したほうがいい場合もあるため任意。デフォルトは上記。

5. システム更新

5-1. ミラーサイト設定

 まずはミラーサイトを日本にすることでダウンロードを高速化する。

sudo vi /etc/apt/sources.list

 先頭行に以下のように日本のミラーサイトを追記して上書き終了する。

deb http://ftp.jaist.ac.jp/raspbian/ buster main contrib non-free rpi

 確認する。

cat /etc/apt/sources.list
deb http://ftp.jaist.ac.jp/raspbian/ buster main contrib non-free rpi
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

5-2. システム更新する

time sudo apt update -y
time sudo apt full-upgrade -y
time sudo apt install rpi-eeprom -y
  • full-upgradeは保留されたパッケージをアップグレードする
  • rpi-eepromはPi4Bのブートローダを最新に更新してくれるツール

ログ

$ time sudo apt update -y
...
26.5 MB を 36秒 で取得しました (730 kB/s)     
...
アップグレードできるパッケージが 127 個あります。表示するには 'apt list --upgradable' を実行してください。
...
real    0m41.644s
user    0m14.759s
sys 0m2.996s
$ time sudo apt full-upgrade -y
...
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  point-rpi
これを削除するには 'sudo apt autoremove' を利用してください。
以下のパッケージが新たにインストールされます:
  bubblewrap eject xdg-dbus-proxy
以下のパッケージはアップグレードされます:
  arandr base-files cron dhcpcd5 distro-info-data e2fsprogs file firmware-atheros firmware-brcm80211 firmware-libertas
  firmware-misc-nonfree firmware-realtek freetype2-doc gldriver-test gtk2-engines-pixflat libarchive13 libcom-err2 libegl-mesa0
  libext2fs2 libfm-data libfm-extra4 libfm-gtk-data libfm-gtk4 libfm-modules libfm4 libfreetype6 libfreetype6-dev libfribidi0 libgbm1
  libgl1-mesa-dri libglapi-mesa libgles2-mesa libglib2.0-0 libglib2.0-bin libglib2.0-data libglx-mesa0 libgs9 libgs9-common
  libjavascriptcoregtk-4.0-18 libmagic-mgc libmagic1 libmp3lame0 libmtdev1 libncurses6 libncursesw5 libncursesw6 libobrender32v5
  libobt2v5 libogg0 libpam-systemd libpython2.7 libpython2.7-dev libpython2.7-minimal libpython2.7-stdlib libraspberrypi-bin
  libraspberrypi-dev libraspberrypi-doc libraspberrypi0 libraw1394-11 libsord-0-0 libspeex1 libspeexdsp1 libss2 libssl1.1 libsystemd0
  libtinfo5 libtinfo6 libudev1 libvpx5 libwebkit2gtk-4.0-37 libxaw7 libxcb-util0 libxdamage1 libxml2 libxmu6 libxmuu1 libxslt1.1
  libxt6 lxpanel lxpanel-data lxplug-bluetooth lxplug-ejecter lxplug-ptbatt lxplug-volume mesa-va-drivers mesa-vdpau-drivers
  ncurses-base ncurses-bin ncurses-term obconf openbox openssh-client openssh-server openssh-sftp-server openssl pcmanfm pi-bluetooth
  piclone pipanel piwiz python-cryptography python-piglow python-werkzeug python2.7 python2.7-dev python2.7-minimal
  python3-cryptography python3-piglow python3-werkzeug raspberrypi-bootloader raspberrypi-kernel raspberrypi-sys-mods
  raspberrypi-ui-mods raspi-config raspi-gpio rc-gui rp-prefapps rpcbind rpi-chromium-mods rpi-eeprom rpi-eeprom-images ssh sudo
  systemd systemd-sysv udev wpasupplicant
アップグレード: 127 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
226 MB のアーカイブを取得する必要があります。
この操作後に追加で 3,639 kB のディスク容量が消費されます。
...
real    23m24.909s
user    2m46.569s
sys 1m13.038s
$ time sudo apt install rpi-eeprom -y
...
rpi-eeprom はすでに最新バージョン (2.4-1) です。
...

6. 日本語化する

  • 日本語フォント
  • IME(キーボード入力で日本語変換できるソフト)
sudo apt install -y fonts-vlgothic fonts-ipafont fonts-ipaexfont
sudo apt install -y fcitx-mozc

ログ抜粋

...
18.5 MB のアーカイブを取得する必要があります。
この操作後に追加で 51.1 MB のディスク容量が消費されます。
...
43.6 MB のアーカイブを取得する必要があります。
この操作後に追加で 97.4 MB のディスク容量が消費されます。
...

 有効化するには以下。

  1. 再起動する
  2. デスクトップのタスクバー右上にIMEアイコン?(キーボードっぽい奴)があるのでクリックする
  3. Mozcのアイコンになるはず(丸いオレンジ色のと書いている奴)

 Mozcの細かい設定は以下。別にデフォルトでも使える。

  1. システムメニュー
  2. 設定
  3. Mozc の設定

 動作テスト。

  1. システムメニュー
  2. アクセサリ
  3. Text Editor
  4. 適当に入力してひらがなが入力できることを確認する
  5. スペースキーで漢字への変換候補が出ることを確認する

7. アプリ

sudo apt install -y gimp
sudo apt install -y libreoffice
sudo apt install -y libreoffice-help-ja
sudo apt install -y libreoffice-l10n-ja
この操作後に追加で 122 MB のディスク容量が消費されます。
この操作後に追加で 649 MB のディスク容量が消費されます。

8. ブラウザの初期設定

 メニューの設定からダウンロードパスを/tmpに変更する。

 UIはコロコロ変わるので説明できない。頑張って探せ。設定できるCLIコマンドもないため自動化できない。

3B+のときに書いた手順

  1. スワップ拡張
  2. RAMディスク設定
  3. aptのソースを日本サーバに設定
  4. ログ出力の抑制
  5. .bashrcに自作スクリプト呼出を追記
  6. システム更新
  7. 日本語フォント+日本語入力のインストール
  8. アプリのインストール

raspbian_first_setup.sh

#!/bin/bash
# ===================================================
# 題名: Raspbian stretch 初期セットアップ自動化バッチ
# 対象OS: Raspbian buster 10.0 2019-09-26
# 作成日: 2019-12-04
# 作成者: ytyaru
# セットアップ概要: 
#   * スワップ(拡張 or 停止)
#   * RAMディスク設定
#   * aptのソースを日本サーバに設定
#   * ログ出力の抑制
#   * .bashrcに自作スクリプト呼出を追記
#   * システム更新
#   * 日本語フォント+日本語入力のインストール
#   * アプリのインストール
# 実行タイミング:
#   SDカードにRaspbianをインストールし、
#   初回ブートし、
#   ダイアログに従ってセットアップ
#   した後に1度だけ実行する。
#   なお、システム更新はダイアログの時点ではスキップし、このバッチで行うほうが高速に完了するはず。
# ===================================================

# コマンドをsudo権限で実行する
# $1: some linux command.
run_sudo() {
    sudo sh -c "${1}"
}
# 指定したテキストを指定したファイルに追記する
# $1: text: new line text.
# $2: file: target file path.
# http://yut.hatenablog.com/entry/20111013/1318436872
# https://qiita.com/b4b4r07/items/e56a8e3471fb45df2f59
# http://wannabe-jellyfish.hatenablog.com/entry/2015/01/10/004554
# http://pooh.gr.jp/?p=6311
write_line() {
    for i in "${1}"; do
        local command="echo '${i}'"
        sudo sh -c "${command} >> \"${2}\""
    done
}
# 指定ファイルのうち先頭が指定テキストの場合、先頭に#を付与する
# $1: file: target file path.
# $2: text: target text(ヒアドキュメントで複数行指定されることを想定)
#http://linux-bash.com/archives/3745148.html
write_sharp() {
    #IFS_backup=IFS
    #IFS=$'\n'
    for i in ${2}; do
        # 末尾の改行を除去(しないと次のエラーが出る。"sed: -e expression #1, char 2: アドレスregexが終了していません")
        local line=`echo ${i} | sed -e "s/[\r\n]\+//g"`
        local sed_script="/^${line}/s/^/#/"
        local sed_cmd="sed -e \"${sed_script}\" -i.bak \"${1}\""
        run_sudo "${sed_cmd}"
    done
    #IFS=IFS_backup
}

# スワップ停止(SDカード書込上限対策)
stop_swap() {
    sudo swapoff --all
    sudo systemctl stop dphys-swapfile
    sudo systemctl disable dphys-swapfile
}
# スワップのサイズを100MBから2GBに変更する
setup_swap() {
    local SwapFilePath=/etc/dphys-swapfile
    write_sharp "${SwapFilePath}" "CONF_SWAPSIZE=100"
    write_line "CONF_SWAPSIZE=2048" "${SwapFilePath}"
    sudo systemctl stop dphys-swapfile
    sudo systemctl start dphys-swapfile
}
# RAMディスク作成(SDカード書込上限対策)
write_fstab() {
    text='
tmpfs /tmp            tmpfs   defaults,size=768m,noatime,mode=1777      0       0
tmpfs /var/tmp        tmpfs   defaults,size=16m,noatime,mode=1777      0       0
tmpfs /var/log        tmpfs   defaults,size=32m,noatime,mode=0755      0       0
tmpfs /home/pi/.cache/chromium/Default/  tmpfs  defaults,size=768m,noatime,mode=1777  0  0
tmpfs /home/pi/.cache/lxsession/LXDE-pi  tmpfs  defaults,size=1m,noatime,mode=1777  0  0
'
    write_line "${text}" "/etc/fstab"
}
# システム更新の高速化(日本用)
write_apt_sources_list() {
    text='
deb http://ftp.jaist.ac.jp/raspbian/ stretch main contrib non-free rpi
deb http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian/ stretch main contrib non-free rpi
deb http://ftp.yz.yamagata-u.ac.jp/pub/linux/raspbian/raspbian/ stretch main contrib non-free rpi
deb http://mirrordirector.raspbian.org/raspbian/ stretch main contrib non-free rpi
# firmwar update
deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ stretch main ui
'
    write_line "${text}" "/etc/apt/sources.list"
}

# ログ出力を抑制する(SDカード書込上限対策)
#http://linux-bash.com/archives/3745148.html
#http://momijiame.tumblr.com/post/92049916671/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E7%89%B9%E5%AE%9A%E8%A1%8C%E3%82%92-sed-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%A2%E3%82%A6%E3%83%88%E3%81%99%E3%82%8B
#/etc/rsyslog.conf
comment_out_rsyslog_conf() {
    text='
auth,authpriv.*
*.*;auth,authpriv.none
cron.*
daemon.*
kern.*
lpr.*
mail.*
user.*
mail.info
mail.warn
mail.err
*.=debug;\
    auth,authpriv.none;\
    news.none;mail.none -/var/log/debug
*.=info;*.=notice;*.=warn;\
    auth,authpriv.none;\
    cron,daemon.none;\
    mail,news.none      -/var/log/messages
'

    write_sharp "/etc/rsyslog.conf" "${text}"
}

# .bashrcに自作スクリプト呼出を追記
append_bashrc() {
    timestamp=`date +"%Y-%m-%d %H:%M:%S"`
#    text='
## ${timestamp} 自作スクリプト呼出
#. "$HOME/root/script/sh/_called/bash/bashrc.sh"
#'
    text=$(cat <<EOS
# ${timestamp} 自作スクリプト呼出
. "$HOME/root/script/sh/_called/bash/bashrc.sh"
EOS
)
    write_line "${text}" "/etc/apt/sources.list"
}
# システム&ファームウェア更新
update_system() {
    sudo apt update -y
    sudo apt upgrade -y
    sudo apt dist-upgrade -y
}
# 日本語化
japanese() {
    sudo apt install -y fonts-vlgothic fonts-ipafont fonts-ipaexfont
    sudo apt install -y fcitx-mozc
}

# アプリケーションのインストール
install_apps() {
    install_general
    install_sdk
}
# 汎用系アプリケーションインストール
install_general() {
    sudo apt install -y pluma
    sudo apt install -y gimp
#   install_libreoffice
}
install_libreoffice() {
    sudo apt install libreoffice
    sudo apt install libreoffice-help-ja
}
# 開発系アプリケーションインストール
install_sdk() {
    install_sdk_mono
    install_sdk_monodevelop
}
install_sdk_mono() {
    time sudo apt install -y apt-transport-https dirmngr
    time sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
    echo "deb https://download.mono-project.com/repo/debian stable-raspbianstretch main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list
    time sudo apt install -y mono-devel
}
install_sdk_monodevelop() {
    time sudo apt install -y monodevelop
# MonoDevelop拡張機能のインストール
# https://github.com/picoe/Eto/releases
}
# ブラウザの設定
# * 起動時:`前回開いていたページを開く`
# * ダウンロード 保存先:`/tmp`
# ブラウザ拡張機能のインストール
# [ublock-origin](https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm?hl=ja)|広告ブロック
# [stylus](https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne)|ユーザスタイルシート
# [authenticator](https://chrome.google.com/webstore/detail/authenticator/bhghoamapcdpbohphigoooaddinpkbai?hl=ja)|二段階認証アプリ

# 実行する
#stop_swap
setup_swap
write_fstab
write_apt_sources_list
comment_out_rsyslog_conf
append_bashrc
update_system
japanese
install_apps
# 再起動する
reboot

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで

 ハード。

 ソフト。

 設定。

 企業。