Skip to content

Instantly share code, notes, and snippets.

@kyuden
Forked from ay65535/install_jman.sh
Created June 11, 2016 17:38
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save kyuden/cbf4f9a15752cc36dae647f513fc9334 to your computer and use it in GitHub Desktop.
Save kyuden/cbf4f9a15752cc36dae647f513fc9334 to your computer and use it in GitHub Desktop.
日本語manページをインストールするスクリプト (Mac用,というか自分用)
#!/usr/bin/env bash
# 参考サイト: http://tukaikta.blog135.fc2.com/blog-entry-224.html
# ================各種設定================
# ダウンロードするファイル (GNU 日本語man)
#
# http://linuxjm.sourceforge.jp/ からダウンロードするファイルを指定します。
#export GNUJMAN=man-pages-ja-20120915.tar.gz
#export GNUJMAN=man-pages-ja-20150315.tar.gz
export GNUJMAN=man-pages-ja-20151215.tar.gz
# ダウンロードするファイル (BSD 日本語man)
#
# http://home.jp.freebsd.org/~kogane/ からダウンロードするファイルを指定します。
#export BSDJMAN_URLPATH=JMAN9/ja-man-doc-9.0.20120115.tbz
#export BSDJMAN_URLPATH=JMAN10/ja-man-doc-10.0.20140121.tbz
export BSDJMAN_URLPATH=
# ダウンロード場所
export DLPATH=~/Downloads
# インストール場所
#
# 日本語manページの検索優先順位は
# /usr/local/share/man/ja_JP.UTF-8 > /usr/local/share/man/ja
# となります。
# 初期設定では、まずGNUのmanが検索され、そこになければBSDのmanが検索されます。
export GNUJMAN_PREFIX=/usr/local/share/man/ja_JP.UTF-8
export BSDMAN_PREFIX=/usr/local/share/man/ja
# gプレフィックス付加の有無
#
# brew install coreutils などで GNUのコマンドをgプレフィックス付きでインストールしている人向け
# 例: gls, gmv など
# gプレフィックスを付けずにインストールしている場合は以下をfalseにしてください。
export G_PREFIX='true' # (true|false)
# ========================================
function err_and_exit() {
echo -e "ERROR: $@\nexsiting..."
exit 1
}
# check already installed
if [ "$(ls -1 /usr/local/share/man/ja_JP.UTF-8/man1/ 2>/dev/null | wc -l)" -gt "200" -a "$(ls -1 /usr/local/share/man/ja/man1/ 2>/dev/null | wc -l)" -gt "200" ]; then
echo -e "jams is already installed\nexsiting..."
exit 0
fi
echo "日本語manualをインストールします。"
# install require packages
if ! which brew >/dev/null; then
echo 'Homebrew is not installed'
err_and_exit "status: $?"
fi
echo "Homebrew で groff をインストールします。"
brew tap homebrew/dupes 2>/dev/null && \
brew install groff 2>/dev/null && \
# edit /etc/man.conf
if ! grep '^JNROFF /usr/local/bin/groff' /etc/man.conf >/dev/null; then
echo "/etc/man.conf を編集します。(オリジナルは /etc/man.conf.orig としてバックアップ)"
sudo sed -i.orig \
-e 's,^JNROFF[ '$'\t'']*/usr/bin/groff -Tnippon -mandocj -c$,JNROFF /usr/local/bin/groff -M /usr/share/groff/1.19.2/tmac -mtty-char -Dutf8 -Tutf8 -mandoc -mja -E,' \
-e 's,^PAGER[ '$'\t'']*/usr/bin/less -is$,PAGER /usr/bin/less -isr,' \
-e 's,^BROWSER[ '$'\t'']*/usr/bin/less -is$,BROWSER /usr/bin/less -isr,' \
/etc/man.conf && \
grep '^JNROFF[ '$'\t'']*/usr/local/bin/groff' /etc/man.conf >/dev/null || err_and_exit "status: $?"
grep '^PAGER[ '$'\t'']*/usr/bin/less -isr' /etc/man.conf >/dev/null || err_and_exit "status: $?"
grep '^BROWSER[ '$'\t'']*/usr/bin/less -isr' /etc/man.conf >/dev/null || err_and_exit "status: $?"
fi
## GNU JMAN
echo
echo 'JM Project の man-pages-ja(GNU、Linux)をインストールします.[Y/n]' && read ANS
if ! echo "$ANS" | grep '^[Nn]' >/dev/null; then
cd $DLPATH
# man-pages-jaをダウンロード
#mkdir $DLPATH/${GNUJMAN%%.*} && \
#cd $DLPATH/${GNUJMAN%%.*} || err_and_exit
if [ ! -e $DLPATH/$GNUJMAN ]; then
curl http://linuxjm.sourceforge.jp/$GNUJMAN -o $DLPATH/$GNUJMAN
fi
test -e $DLPATH/$GNUJMAN || err_and_exit
# 落としたファイルを解凍
#gzip -dc $DLPATH/$GNUJMAN | tar xvf - || err_and_exit
tar xvf $DLPATH/$GNUJMAN || err_and_exit "status: $?"
# 解凍したフォルダの中に移動
#mkdir $DLPATH/${GNUJMAN%%.*} && \
test -d $DLPATH/${GNUJMAN%%.*}/script && cd $DLPATH/${GNUJMAN%%.*} || err_and_exit "status: $?"
# pkgs.list を修正
# TODO: 修正したいやつを指定できるオプション作る
sed -i '' -e 's,Y$,N,' script/pkgs.list
for i in GNU_coreutils GNU_bash GNU_binutils GNU_ed GNU_findutils GNU_gawk GNU_gcc GNU_gdb GNU_gdbm GNU_grep GNU_groff GNU_gzip GNU_indent GNU_less GNU_patch GNU_rcs GNU_screen GNU_sed GNU_tar GNU_texinfo bind byacc cdparanoia expect fetchmail logrotate mpg123 ncftp rdate rpm rssh rsync smartmontools tcpdump tcsh uudeview vsftpd ; do
sed -i '' -e "s,^$i.*[YN]$,$i"$'\t'"Y," script/pkgs.list
done && \
# make config スクリプトを修正
i=0
while ! cp -n script/configure.perl script/configure.perl.bak${i}; do
i=$(( $i + 1 ))
done && \
sed -i '' \
-e 's,use Env qw (PATH LANG);,use Env qw (PATH LANG GNUJMAN_PREFIX);,' \
-e 's,$MANROOT = "/usr/share/man/$LANG";,$MANROOT = "$GNUJMAN_PREFIX";,' \
-e 's,if ($ans eq "") {$ans = 0;},if ($ans eq "") {$ans = 1;},' \
-e 's,$OWNER = "root";,$OWNER = \"'"$USER"'\";,' \
-e 's,$GROUP = "root";,$GROUP = "admin";,' \
-e 's,\^\[yYcC\]/,^[yYcC]|^$/,' \
-e 's,\[yYnNcCrR\]/,[yYnNcCrR]|^$/,' \
-e 's,\[yYnNcCrR\]\.\*/,[yYnNcCrR].*|^$/,' \
script/configure.perl && \
# make を実行 (常にEnterを入力)
yes '' | make config && \
make install || err_and_exit
fi
## BSD JMAN
echo 'FreeBSD の日本語manページ集 ja-man-doc をインストールします.[Y/n]' && read ANS
if ! echo "$ANS" | grep '^[Nn]' >/dev/null; then
# ダウンロードするファイル名
# $BSDJMAN_URLPATH から自動で設定されます
export BSDJMAN=${BSDJMAN_URLPATH##*/}
# ja-man-docをDL
cd $DLPATH && \
test -e $DLPATH/$BSDJMAN || \
curl http://home.jp.freebsd.org/~kogane/$BSDJMAN_URLPATH -o $DLPATH/$BSDJMAN && \
test -e $DLPATH/$BSDJMAN || err_and_exit
# DLしたファイルを解凍
mkdir $DLPATH/${BSDJMAN%.*}
cd $DLPATH/${BSDJMAN%.*}
#test -d $DLPATH/${BSDJMAN%.*}/share/man || \
#bzip2 -dc $DLPATH/$BSDJMAN | tar xf - || true
tar xf $DLPATH/$BSDJMAN 2>/dev/null # return not 0 due to extracting bad symlink
# share/man/に移動
cd $DLPATH/${BSDJMAN%.*}/share/man || err_and_exit
# gzipで圧縮されてるので解凍
gunzip -fr ./* # return status is 1 due to unknown suffix
# UTF-8に変換
find ja -name "*.[0-9]" -exec nkf --overwrite -w {} \;
# gzipに圧縮
find ja -name '*.[0-9]' -exec gzip {} \;
# manページを移動
#mkdir -p $BSDMAN_PREFIX && \
rsync -rltD ./ja/ $BSDMAN_PREFIX || err_and_exit "status: $?"
fi
## OPENSSH JMAN
echo
echo 'OpenSSH 日本語マニュアルページの 日本語man をインストールします.[Y/n]' && read ANS
if ! echo "$ANS" | grep '^[Nn]' >/dev/null; then
cd $DLPATH
# openssh-jmanをダウンロード
SSHVER=$(ssh -V 2>&1 | grep -o '[0-9]\.[0-9]p'| sed 's/[.p]//g')
while [[ ! -e $DLPATH/openssh-jman-${SSHVER}0p1.tar.gz ]]; do
HTTP_STATUS=$(curl http://www.unixuser.org/~euske/doc/openssh/jman/openssh-jman-${SSHVER}0p1.tar.gz \
-sS \
-o $DLPATH/openssh-jman-${SSHVER}0p1.tar.gz \
-w "%{http_code}\n")
echo "HTTP_STATUS=$HTTP_STATUS"
if ! echo "$HTTP_STATUS" | grep '200' >/dev/null; then
SSHVER=$(( $SSHVER + 1 ))
fi
done
# 落としたファイルを解凍
mkdir $DLPATH/openssh-jman-${SSHVER}0p1
cd $DLPATH/openssh-jman-${SSHVER}0p1 && \
tar xvf $DLPATH/openssh-jman-${SSHVER}0p1.tar.gz || err_and_exit "status: $?"
# ちゃんと解凍されたかチェック
test $(ls -la ~/.Trash/openssh-jman-630p1\ \(1\)/*.[158] | wc -l) = 13 || \
err_and_exit "status: $?: no man file!"
# UTF-8に変更
find . -name '*.[1-8]' -exec nkf --overwrite -w '{}' ';' && \
# gzipで圧縮
find . -name '*.[1-8]' -exec gzip '{}' ';' && \
# manページを移動
#rsync -rltgoD ./*.1.gz $GNUMAN_PREFIX/man1 || err_and_exit "status: $?"
mv *.1.gz $GNUJMAN_PREFIX/man1 && \
mv *.5.gz $GNUJMAN_PREFIX/man5 && \
mv *.8.gz $GNUJMAN_PREFIX/man8 || err_and_exit
fi
# coreutilsの g プレフィックスのためにファイル名修正
# gプレフィックスを付けずにインストールしている場合は
if [[ "$G_PREFIX" == "true" ]]; then
cd /usr/local/share/man/ja_JP.UTF-8/man1
#brew list coreutils | grep '/bin/' | grep -o 'g.*$' | sed -e 's,^g,,' -e 's,$,.1.gz,' | xargs -I% mv % g%
for i in '[' base64 basename cat chcon chgrp chmod chown chroot cksum comm cp csplit cut date dd df dir dircolors dirname du echo env expand expr factor false fmt fold groups head hostid id install join kill link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink realpath rm rmdir runcon seq sha1sum sha224sum sha256sum sha384sum sha512sum shred shuf sleep sort split stat stdbuf stty sum sync tac tail tee test timeout touch tr true truncate tsort tty uname unexpand uniq unlink uptime users vdir wc who whoami yes find locate oldfind updatedb xargs grep egrep fgrep dbus dbus-codegen perl resource settings tester tester-report view vim vimdiff vimex; do
mv "${i}.1.gz" "g${i}.1.gz" # || err_and_exit "status: $?: $i cannot rename to g${i}."
done
fi
echo 'install successfully finished'
echo '以下のような設定を .bashrc や .zshrc などに書いておくと便利です。'
echo
echo "# man コマンド名 で英語manualを表示"
echo "alias man='env LANG=C man'"
echo "# jman コマンドで 日本語manualを表示"
echo "alias jman='env LANG=ja_JP.UTF-8 man'"
echo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment