#!/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