Skip to content

Instantly share code, notes, and snippets.

@ay65535
Last active August 22, 2025 06:59
Show Gist options
  • Select an option

  • Save ay65535/513f4738a04080ff106d to your computer and use it in GitHub Desktop.

Select an option

Save ay65535/513f4738a04080ff106d to your computer and use it in GitHub Desktop.

Revisions

  1. ay65535 revised this gist Dec 28, 2015. 1 changed file with 4 additions and 2 deletions.
    6 changes: 4 additions & 2 deletions install_jman.sh
    Original file line number Diff line number Diff line change
    @@ -7,13 +7,15 @@
    #
    # 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-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=JMAN10/ja-man-doc-10.0.20140121.tbz
    export BSDJMAN_URLPATH=

    # ダウンロード場所
    export DLPATH=~/Downloads
  2. ay65535 revised this gist Apr 3, 2015. 1 changed file with 0 additions and 0 deletions.
    Empty file modified install_jman.sh
    100644 → 100755
    Empty file.
  3. ay65535 revised this gist Mar 30, 2015. No changes.
  4. ay65535 created this gist Mar 30, 2015.
    222 changes: 222 additions & 0 deletions install_jman.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,222 @@
    #!/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

    # ダウンロードするファイル (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 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