tanaka's Programming Memo

プログラミングについてのメモ。

Lubuntuで環境構築のシェルを作ったメモ

Lubuntuで、Phaserをやるのに必要な最低限の環境を構築するためのシェルスクリプトを作りました。作業中なのでドキュメントも中途半端ですがこちら

今後もメンテナンスをしないといけないものなので、調べたことを片っ端から備忘録としてまとめておきます。

目次

文字に色をつける

エラーや完了メッセージを目立たせるために、赤の太字と緑の太字の設定をしました。

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 Chromeapt-getでインストールすると、余計な設定が残るようで、それ以降にapt-get updateでワーニングが表示されるようになります。エラー箇所をコメントアウトするようなのですが、この辺気持ち悪いので、よりよい方法があれば差し替えます。

Atomもよくタイムアウトでエラーが発生しましたが、aptを同期設定にしたら今のところエラーは出ていません。

参考URL