Linuxのディストリビューションを判別する

最近、Linux の dotfile を Github で管理しているのですが、
ディストリビューションごとに設定を変えるのが面倒ですので、自動判定方法を調査しました。

dotfile や vim 用の設定方法は、また別の記事で書こうかと思います。

##Linuxのディストリビューションを判定する
基本的には　`/etc/[ディストリビューション名]-release` というファイルがそれぞれ存在しているはずなので、ファイルの存在チェックをすればよいみたいです

```shell-session:/etc/fedora-release 
Fedora release 20 (Heisenbug)
```

Arch Linux以外はおそらく大丈夫かと思われます。
DebianとかUbuntuの区切りがアンダーバーだったりしますのでちょっと注意。

あと Ubuntu は `/etc/lsb-release`というファイルでさらに判別が必要

```shell-session:/etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"
```

####参考:
[[Linux]インストールした Linux ディストリビューション名とバージョンを確認するには](http://d.hatena.ne.jp/PRiMENON/20080119/1200750903)

##OSのbitの判定
OSが32bitか64bitかは`uname`で取得できます

```bash:bitの判定
uname -m
```

結果は以下になります

```bash:実行結果
#32bit 
i686
#64bit
x86_64
```

####参考:
[Linuxが32ビット版か64ビット版かの確認Add Star](http://d.hatena.ne.jp/tech_memo/20110224/1298527712)

##作成した shell script
一応汎用的に使えるように、scriptも作成しました
いっぱい列挙してありますが、fedoraとubuntuしか動作確認してません。

https://github.com/koara-local/dotfiles/blob/master/bin/get_os_info

```bash:get_os_info.sh
#!/bin/bash

# Copyright (c) 2016 Kohei Arao
# https://github.com/koara-local/dotfiles/edit/master/bin/get_os_info
# Released under the Unlicense
# http://unlicense.org/

# Get OS bit
# 32bit : i686
# 64bit : x86_64
get_os_bit() {
    echo $(uname -m);
}

# Get Linux distribution name
get_os_distribution() {
    if   [ -e /etc/debian_version ] ||
         [ -e /etc/debian_release ]; then
        # Check Ubuntu or Debian
        if [ -e /etc/lsb-release ]; then
            # Ubuntu
            distri_name="ubuntu"
        else
            # Debian
            distri_name="debian"
        fi
    elif [ -e /etc/fedora-release ]; then
        # Fedra
        distri_name="fedora"
    elif [ -e /etc/redhat-release ]; then
        if [ -e /etc/oracle-release ]; then
            # Oracle Linux
            distri_name="oracle"
        else
            # Red Hat Enterprise Linux
            distri_name="redhat"
        fi
    elif [ -e /etc/arch-release ]; then
        # Arch Linux
        distri_name="arch"
    elif [ -e /etc/turbolinux-release ]; then
        # Turbolinux
        distri_name="turbol"
    elif [ -e /etc/SuSE-release ]; then
        # SuSE Linux
        distri_name="suse"
    elif [ -e /etc/mandriva-release ]; then
        # Mandriva Linux
        distri_name="mandriva"
    elif [ -e /etc/vine-release ]; then
        # Vine Linux
        distri_name="vine"
    elif [ -e /etc/gentoo-release ]; then
        # Gentoo Linux
        distri_name="gentoo"
    else
        # Other
        distri_name="unkown"
    fi

    echo ${distri_name}
}

# Get distribution and bit
get_os_info() {
   echo $(get_os_distribution) $(get_os_bit)
}

get_os_info
```

```bash:get_os_info使用例
#!/bin/bash -eu

declare -a info=($(./bin/get_os_info))

case ${info[0]} in
ubuntu)
    echo "ubuntu"

    if [[ ${info[1]} == "x86_64" ]]; then
        echo x86_64
    fi
    ;;
*)
    echo "unsupported"
    ;;
esac
```

####参考:
[Linuxのディストリビューションとバージョンの確認方法をまとめてみた](http://note.kurodigi.com/linux-version/)
[シェルスクリプト Tips](http://shellscript.sunone.me/tips.html)
[bash 配列まとめ - Qiita](http://qiita.com/b4b4r07/items/e56a8e3471fb45df2f59)