andLinux 自動設定スクリプト

andLinux

このページでは, andLinux の設定を自動で行うスクリプトについて紹介しています.

Contents

目的

andLinux を複数の場所で使用する場合,設定をあわせるのは比較的面倒なもの. そこで,自動的に設定を行うスクリプトを作成しました.

望みの環境になるように一度スクリプトを作成しておけば,他の場所での設定 は one click で済みます.

ダウンロード

準備

SSH サーバの設定

andLinux のターミナルを開いて,SSH ログインできるようにする.

% sudo su -
# vi /etc/ssh/sshd_config
- UsePAM no
+ UsePAM yes
# /etc/init.d/ssh restart

SSH クライアントの設定

SSH Agent の設定をして,秘密鍵認証を使った場合にパスフレーズが不要にな るようにしておく.

% ssh-keygen
% eval `ssh-agent`
% ssh-add ~/.ssh/id_rsa

自動設定

スクリプトを適時編集したあと実行する.引数は特にありません.

% ./setup_andlinux.sh

スクリプト本体

#!/usr/bin/env zsh
###############################################################################
# AndLinux をセットアップするスクリプト
###############################################################################
# 準備
# o SSH サーバの設定
#   AndLinux のターミナルを開いて,SSH ログインできるようにする.
#   # sudo su -
#   # vi /etc/ssh/sshd_config
#   - UsePAM no
#   + UsePAM yes
#   # /etc/init.d/ssh restart
# o SSH クライアントの設定
#   SSH Agent の設定をして,秘密鍵認証を使った場合にパスフレーズが不要になる
#   ようにしておく.
###############################################################################

zmodload zsh/zpty
unsetopt FUNCTION_ARGZERO

run() {
    echo "$0: running \`$@'" >&2
    { $@ } || exit -1
}

zpty_run() {
    run zpty -r ssh param "*${host}*"
    run zpty -w ssh $@
}

###########################################################################
# 設定
###########################################################################
host=${1:-andLinux}
user=${USER}
key=${3:-~/.ssh/id_rsa}

lang=ja_JP.EUC-JP
# Emacs および Zsh の設定ファイルの場所
etc_path=../etc
# インストールするパッケージ
set -A install screen emacs22-nox org-mode texlive \
    texlive-latex-extra latex-xft-fonts okumura-clsfiles \
    latex-cjk-japanese latex-cjk-japanese-wadalab jbibtex-bin mendexk \
    cmap-adobe-japan1 cmap-adobe-japan2 cmap-adobe-cns1

###########################################################################
# パスワードの入力
echo -n "password: "
read -s pass
echo

###########################################################################
# SSH の準備
if [[ $(ssh-keygen -F andlinux | wc -l) == 0 ]] then
    ssh-keyscan ${host} >> ${HOME}/.ssh/known_hosts
fi

if [[ $(ssh -o "NumberOfPasswordPrompts 0" ${user}@${host} uname | wc -l) == 0 ]] then
    # $HOME/.ssh の作成
    run zpty ssh ssh ${host} mkdir --parents --mode=700 .ssh
    run zpty -r ssh param '*Password: '
    zpty -w ssh ${pass}
    sleep 0.5
    run zpty -d ssh
    # Cygwin には ssh-copy-id が無いので,コピーしたものを使う
    run zpty ssh ./ssh-copy-id -i ${key} ${user}@${host}
    run zpty -r ssh param '*Password: '
    zpty -w ssh ${pass}
    sleep 0.5
    run zpty -d ssh
fi

###########################################################################
# /etc/sudoers の準備
run scp =(echo 'root    ALL=(ALL)       ALL';
          echo '%admin  ALL=(ALL)       NOPASSWD: ALL') ${user}@${host}:sudoers
run zpty ssh ssh ${user}@${host}
run zpty -r ssh param "*${user}*"
run zpty -w ssh 'sudo su'
sleep 0.5 # パスワード要求されない場合を考慮
zpty -w ssh ${pass}
sleep 0.5 # パスワード要求されない場合を考慮
{
    local user_orig=${user}
    user=root
    zpty_run -w ssh 'mv -f sudoers /etc'
    zpty_run -w ssh 'chmod 440 /etc/sudoers'
    zpty_run -w ssh 'chown root:root /etc/sudoers'
    user=${user_orig}
    run zpty -d ssh
}

###########################################################################
# SSH 接続 (以下を実行するのに必要)
run zpty ssh ssh ${user}@${host}

###########################################################################
# apt の準備
zpty_run 'sudo apt-get -y update'
zpty_run 'sudo apt-get -y dist-upgrade'

###########################################################################
# シェルの設定
run zpty -w ssh 'LANG=C chsh --shell /bin/zsh'
run zpty -r ssh param '*Password:*'
zpty -w ssh ${pass}
run scp ${etc_path}/zshrc.txt ${user}@${host}:.zshrc
run scp ${etc_path}/zshenv.txt ${user}@${host}:.zshenv
zpty_run 'zsh'

###########################################################################
# locale の設定
zpty_run 'sudo apt-get -y install language-pack-ja'
zpty_run 'rehash'
zpty_run 'grep sudo dpkg-reconfigure locales'
zpty_run 'sudo dpkg-reconfigure locales'
{
    local locale_ja=/var/lib/locales/supported.d/ja
    zpty_run "sudo zsh -c 'grep ${lang} /usr/share/i18n/SUPPORTED >> ${locale_ja}'"
    zpty_run "sudo zsh -c 'sort ${locale_ja} | uniq > ${locale_ja}'"
}
zpty_run "sudo locale-gen ${lang}"
zpty_run "sudo update-locale LANG=${lang}"

###########################################################################
# Emacs の設定
run scp ${etc_path}/emacs.txt ${user}@${host}:.emacs.el

run ssh ${user}@${host} mkdir -p .emacs
run ssh ${user}@${host} mkdir -p tmp/emacs
run ssh ${user}@${host} mkdir -p .site_lisp

for i in ${etc_path}/emacs/*.txt; do
    run scp $i ${user}@${host}:.emacs/${i:t:r}.el;
done
for i in ${etc_path}/site_lisp/*.txt; do
    run scp $i ${user}@${host}:.site_lisp/${i:t:r}.el;
done

###########################################################################
# locale の設定
zpty_run 'sudo cp -pf /usr/share/zoneinfo/Japan /etc/localtime'

###########################################################################
# 必要なパッケージのインストール
for package in ${install[*]}; do
    zpty_run "sudo apt-get -y install ${package}"
done
run zpty -r ssh param "*${host}*"
run zpty -d ssh