最近、Linux の dotfile を Github で管理しているのですが、
ディストリビューションごとに設定を変えるのが面倒ですので、自動判定方法を調査しました。
dotfile や vim 用の設定方法は、また別の記事で書こうかと思います。
##Linuxのディストリビューションを判定する
基本的には /etc/[ディストリビューション名]-release
というファイルがそれぞれ存在しているはずなので、ファイルの存在チェックをすればよいみたいです
Fedora release 20 (Heisenbug)
Arch Linux以外はおそらく大丈夫かと思われます。
DebianとかUbuntuの区切りがアンダーバーだったりしますのでちょっと注意。
あと Ubuntu は /etc/lsb-release
というファイルでさらに判別が必要
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"
####参考:
[Linux]インストールした Linux ディストリビューション名とバージョンを確認するには
##OSのbitの判定
OSが32bitか64bitかはuname
で取得できます
uname -m
結果は以下になります
#32bit
i686
#64bit
x86_64
####参考:
Linuxが32ビット版か64ビット版かの確認Add Star
##作成した shell script
一応汎用的に使えるように、scriptも作成しました
いっぱい列挙してありますが、fedoraとubuntuしか動作確認してません。
#!/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
#!/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のディストリビューションとバージョンの確認方法をまとめてみた
シェルスクリプト Tips
bash 配列まとめ - Qiita