Lubuntuで、Phaserをやるのに必要な最低限の環境を構築するためのシェルスクリプトを作りました。作業中なのでドキュメントも中途半端ですがこちら。
今後もメンテナンスをしないといけないものなので、調べたことを片っ端から備忘録としてまとめておきます。
目次
- 目次
- 文字に色をつける
- 時間の出力
- apt-get updateのタイムアウトを防ぐ
- エラー中断
- Atomを起動しようとしたら「許可がありません」と言われた
- インストールされていない時のみ処理
- 未解決のこと
- 参考URL
文字に色をつける
エラーや完了メッセージを目立たせるために、赤の太字と緑の太字の設定をしました。
RED="\e[31;40;1m" GREEN="\e[32;40;1m" COLEND="\e[m" echo -e "${RED}赤字${COLEND}普通の文字${GREEN}緑字${COLEND}普通の文字"
といった感じ。\e[
で指定を開始して、3x
で文字色、4x
で背景色、最後の1
が太字です。こちらを参考にしました↓
シェル - echoで文字に色をつける その1 - Miuran Business Systems
時間の出力
現在時間を、年-月-日 時:分:秒
の形式で出力する例です。
now=$(date "+%Y-%m-%d %H:%M:%S") echo "${now}"
apt-get updateのタイムアウトを防ぐ
apt-get update
は並列にリクエストを発行するのですが、ネットワークが弱いなどの環境ではタイムアウトになりやすくなります。そこで、以下の設定をして同期処理にすることでエラーの発生を減らします。
設定開始
if [ -f /etc/apt/apt.conf.d/75download ] ; then sudo mv -u /etc/apt/apt.conf.d/75download /etc/apt.conf.d/75download.bk fi echo 'Acquire::Queue-Mode "access";' | sudo tee /etc/apt/apt.conf.d/75download
これで、/etc/apt/apt.conf.d/75download
があれば、最後に.bk
を付けてバックアップをした後に、同期処理にするための設定を同ファイルに行います。
こちらを参考にしました↓
apticronのタイムアウトを防ぐ – 備忘録 for myself in the future
設定解除
元の環境に戻しておくために、以下の関数を定義して、終了時に呼び出すようにしておきます。
function fin { sudo rm -f /etc/apt/apt.conf.d/75download if [ -f /etc/apt/apt.conf.d/75download.bk ] ; then sudo mv /etc/apt/apt.conf.d/75download.bk /etc/apt/apt.conf.d/75download fi }
この関数を呼び出す時は、通常であればfin
とすればOKです。関数内から呼び出す時は、$(fin)
とします。
エラー中断
処理がエラーだった時に、エラーメッセージを画面とログファイルに出力して、シェルを中断する処理です。以下のような関数を定義します。
function abort { echo -e "${now} ${RED}$@:エラーが発生しました。ネットワーク環境を確認して、再度実行してみてください。何度やってもこのエラーが出続ける場合は、このフォルダー内のinstall-gdev.logを添付して開発者に連絡してください。${COLEND}" |& tee -a install-gdev.log $(fin) exit 1 }
以下のような呼び出し方で使います。
command || abort "コメント"
||
を使うと、command
がエラーコードを返すと、||
以降の処理を実行します。
参考にしたのはこちら↓
bashでちょっと高度なシェルスクリプトを書くときの Tips - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -
bash: 標準出力、標準エラー出力をファイル、画面それぞれに出力する方法 - Qiita
Atomを起動しようとしたら「許可がありません」と言われた
~/.atom
フォルダーのパーミッションが自分になっていないからのようです。以下、参考ブログです。
Atomで「Uncaught Error: EACCES: permission denied」が表示されたので解決する | Ystk Log 【ヨシタカログ】
以下で治りました。
sudo chown -R $(whoami) ~/.atom
インストールされていない時のみ処理
バージョンの確認やヘルプなどの害のない(?)処理を実行して、エラーが発生していたら未インストールなので、インストールの処理をするという方法です。例えばnode
の場合は以下の通りです。
node -v &> /dev/null if [ $? -ne 0 ] ; then インストール作業 fi
昔、自分で記事書いてました。
Linux(やmacで)のbashでインストール済みか確認する方法 - tanaka's Programming Memo
-v
が使えないコマンド(http-server
)や、実行ファイルがどこにあるのかよく分からないツール(Chrome
)などあるので、インストール後、ちゃんとそのコマンドが動くか確認する必要があります。
未解決のこと
Google Chromeをapt-get
でインストールすると、余計な設定が残るようで、それ以降にapt-get update
でワーニングが表示されるようになります。エラー箇所をコメントアウトするようなのですが、この辺気持ち悪いので、よりよい方法があれば差し替えます。
Atomもよくタイムアウトでエラーが発生しましたが、apt
を同期設定にしたら今のところエラーは出ていません。
参考URL
- シェル - echoで文字に色をつける その1 - Miuran Business Systems
- Atomで「Uncaught Error: EACCES: permission denied」が表示されたので解決する | Ystk Log 【ヨシタカログ】
- シェルスクリプトで関数を利用する - Qiita
- シェルスクリプトでエラー時の処理を行う方法 - Qiita
- bashでちょっと高度なシェルスクリプトを書くときの Tips - ぴょぴょぴょ? - Linuxとかプログラミングの覚え書き -
- bash: 標準出力、標準エラー出力をファイル、画面それぞれに出力する方法 - Qiita
- apticronのタイムアウトを防ぐ – 備忘録 for myself in the future
- Linux(やmacで)のbashでインストール済みか確認する方法 - tanaka's Programming Memo