このページでは, andLinux の設定を自動で行うスクリプトについて紹介しています.
Contents
andLinux を複数の場所で使用する場合,設定をあわせるのは比較的面倒なもの. そこで,自動的に設定を行うスクリプトを作成しました.
望みの環境になるように一度スクリプトを作成しておけば,他の場所での設定 は one click で済みます.
andLinux のターミナルを開いて,SSH ログインできるようにする.
% sudo su - # vi /etc/ssh/sshd_config - UsePAM no + UsePAM yes # /etc/init.d/ssh restart
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