OSを焼いて初回設定した後に必ずやる設定をバッチ化した。
成果物
まだ全体を通して動かしてない。
ソースコード
#!/bin/bash
# =======================================
# 題名: Raspbian stretch 初期セットアップ自動化バッチ
# セットアップ概要:
# * スワップ停止
# * RAMディスク設定
# * aptのソースを日本サーバに設定
# * ログ出力の抑制
# * システム更新
# * 日本語フォント+日本語入力のインストール
# 実行タイミング: SDカードにRaspbianをインストールし、初回ブートし、ダイアログでセットアップした後に1度だけ実行する。
#
# 対象: Raspbian stretch 2018-06-27
# 作成日: 2018-10-12
# 作成者: ytyaru
# =======================================
# コマンドをsudo権限で実行する
# $1: some linux command.
function 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
function 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
function 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カード書込上限対策)
function stop_swap() {
sudo swapoff --all
sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile
}
# RAMディスク作成(SDカード書込上限対策)
function 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"
}
# システム更新の高速化(日本用)
function write_apt_sources_list() {
text='
deb http://ftp.jaist.ac.jp/raspbian/ jessie main contrib non-free rpi
deb http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian/ jessie main contrib non-free rpi
deb http://ftp.yz.yamagata-u.ac.jp/pub/linux/raspbian/raspbian/ jessie main contrib non-free rpi
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
# firmwar update
deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ jessie 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
function 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
*.=info;*.=notice;*.=warn;
auth,authpriv.none;
cron,daemon.none;
mail,news.none
'
write_sharp "/tmp/work/base" "${text}"
}
# システム&ファームウェア更新
function update_system() {
sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y
}
# 日本語化
function japanese() {
sudo apt-get install -y fonts-ipafont fonts-ipaexfont
sudo apt-get install -y fcitx-mozc
}
# 実行する
stop_swap
write_fstab
write_apt_sources_list
comment_out_rsyslog_conf
update_system
japanese
# 再起動する
reboot