今更ながら Linux についてのメモ

最近、Linux サーバ (RHEL) を構築する機会があったのですが、今までほとんど触る機会がなく知らないことばかりでしたので、今更ながら Linux について調べたことをまとめてみました。

認識誤り等あれば、ぜひコメントや編集リクエストにてご指摘願います。
2017.07.22 Slackware について修正しました。

# Linux とは
  __OS__ の一種で、UNIX を参考にしてリーナス・トーバルズより開発されました。
  __OSS__ であることより、無料でインストール出来るのが特徴です。

  なお、厳密に言うと Linux OS とは一般的には __OS の中核であるカーネル__ のことを指しています。

  Windows では OS 機能の一部として配布されている __GUI__ や__Webブラウザ__などの機能は、Linux では__ディストリビューション__に含めて配布されています。


# ディストリビューション
  
Linux の配布パッケージセットであるディストリビューションには主に以下が含まれています。

  * __Linux カーネル__ (OS)
  * __シェル__
  * __デーモン__
  * __GUI__
  * __クライアントソフトウェア__
  * __サーバソフトウェア__

ディストリビューションに含まれる個々のソフトウェアは__パッケージ化__されており、__パッケージ管理システム__により管理されています。
パッケージ管理システムの詳細については後述します。


# ディストリビューションの種類
  OSS 故に色々とカスタマイズされた数多くのディストリビューションが存在します。

  大きく分けると __Debian__、__Red Hat Linux__、__Slackware__ の 3 つに別れ、その他のディストリビューションの多くはこれら 3 種の派生系がほとんどとのことです。

## 主要 3 種
  * __Debian__  
      * 自由な改変と再配布を目的とする __GNU GPL__ のソフトウェアで構成。  
      * 商用向けの__有償サポートはなし__。  
      * 基本的には、GPL 以外のライセンスのソフトウェアはインストールできない。
    


  * __RHEL__ (Red Hat Enterprise Linux)   
      * __商用向けの有償サポート__があり、大規模システムのサーバとしての利用が多い。  
      * 日本市場での商用 Linux シェアは約 85 % を占める。


  * __Slackware__  
      * Linux 史上最古。__シンプルで堅実な作り__になっており、__高い安定性__がある。  
      * パッケージ管理システムの機能(後述)である__パッケージ間の依存情報の管理__が__ユーザマニュアル__。  
      * ただし全パッケージをインストールするのが基本であり、__公式パッケージの依存関係は解決される__。


Linux の仕組みを深く理解するには、シンプルかつ自分で依存性の解決をしなければならない Slackware は良い教材になりそうですね。


## 派生系
### Debian 系
  * __Ubuntu__ 
      * Debian の派生だが、__GPL 以外__のライセンスのソフトウェアでもインストール可能。
      * Canonical 社による__[有償サポート](https://www.ubuntu.com/support)もある__(電話、メールのみ)。
      * GUI が充実。

### Red Hat 系
  * __CentOS__
      * RHEL から商用向けの要素を取り除いている。
      * __RHEL との完全互換__を目指し、バイナリが異なるなどを除き、ほとんどの機能が RHEL と同じ。
      * __安定性重視__。
     
  * __Fedora__
      * CentOS と同じく商用向けの要素を取り除いている。
      * RHEL の__バージョンアップ時の検証用__。
      * __最新技術の取り込みが早い。__(Fedora → RHEL → CentOS の順)

  * __Scientific Linux__
      * 同じく商用向けの要素を取り除いている。
      * 欧州原子核共同研究所などが開発に関わっており__研究機関や大学施設で利用される__ことが多い。
      * 上記故か、__独自開発__されたパッケージが充実。





# パッケージ管理システム
### 主な機能
ディストリビューションに含まれる個々の__ソフトウェアの実行ファイル・設定ファイルやライブラリ__を__リポジトリ管理__します。

主な機能としては、以下の 4 つが挙げられます。

* __パッケージリポジトリの読込・検索__

* __パッケージのインストール・更新・削除__

* __パッケージ間の依存情報の管理__

* __競合機能の優先使用設定管理__


### パッケージ管理システム比較( [Wikipedia](https://ja.wikipedia.org/wiki/Linux%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E6%AF%94%E8%BC%83) より)


|ディストリビューション|ベース| 有償サポート |パッケージ管理システム|パッケージ形式|
|:-----------|:-----------|:-----------|:-----------|:-----------|
| Debian          | -     |無|APT    | deb |
| RHEL            | -     |有|RPM, Yum|RPM|
| Slackware       |-      |無|pkgtool、slackpkg、sbopkg等 |txz|
| Ubuntu          | Debian|有|APT     |deb|
| CentOS          |RHEL   |無|RPM, Yum|RPM|
| Fedora          |RHEL   |無|DNF, Yum|RPM|
| Scientific Linux|RHEL   |無|APT, Yum|RPM|

  
  Linux では、ディストリビューションに含まれる各ソフトウェアを使用するためには__個別にリポジトリからインストール__する必要があります。

  インストール方法は各ディストリビューションが採用しているパッケージ管理システムごとに異なります。(どれも基本はコマンド 1 行)
    
# 各パッケージ管理システムの特徴
  RHEL しか触ったことがないためインストールの手軽さなどは比較できませんが、一般的に言われる各システムの特徴をまとめます。

## Red Hat 系
  * __RPM__
    * __ローカル__及び HTTP や FTP を通じた__ネットワーク__からのパッケージ管理に対応。
    * 依存性の情報は保持しているものの、__依存性の解決は行わない__。
    * __パッケージ個々のカスタマイズ時__に RPM コマンドを使用。
  
  * __Yum__
    * RPM を統合管理するマネージャのことで、__依存性の解決を行う__。
    * 基本的には Yum コマンドを利用してインストールを行う。
    * RHEL 7.x / CentOS 7.x のデフォルトである __Python 2 のみ__に対応。
    
  * __DNF(Dandified Yum)__
    * Yum の後継。
    * Yum が Python 2 にしか対応していないのに対し、__Python 3__ にも対応。
    * 既に Python 3 がデフォルトとなっている Fedora では DNF が使用される。

## Debian 系
  * __APT__
    * __RPM + Yum__ の機能をもち、依存性の解決も行う。    

## Slackware 系
  
  * __pkgtool__
    * Slackware の__標準__で、__ローカル__リポジトリのみに対応。
    * バージョン管理や__依存性の解決は対応していない__。
  
  * __slackpkg__
    * バージョン 12.2 より公式パッケージとして採用。  
    ~~標準ではインストールされていないため、公式パッケージからインストールする必要あり。~~ 
    * __Slackware の標準のパッケージ__のみオンラインに対応。
    * バージョン管理は行うが__依存性の解決には対応していない__。

  * __sbopkg__
    * slackpkg と同じく標準ではないため個別にインストールする必要がある。
    * __Slackware のサードパーティ__である SlackBuilds.org のオンラインパッケージに対応。
    * ご多分に漏れず、__依存性の解決には対応していない__。


Red Hat 系 である Scientific Linux では Debian 系と Red Hat 系 双方のパッケージ管理システムを採用しているようですね。
  
研究機関向けの独自開発が進んでいる所以でしょうか。。。



## 参考
  * [今更聞けない！CentOSとRed Hatの違いとは？](https://eng-entrance.com/centos_redhat)

  * [CentOS 7 : Oracle Database 12c : インストール ： Server World](https://www.server-world.info/query?os=CentOS_7&p=oracle12c&f=2)

  * [Linuxをはじめから \- Linuxの超基礎を解説](http://www.infraeye.com/study/linuxz0.html)

  * [ディストリビューション（パッケージセット）](http://www.garunimo.com/program/linux/distribution.xhtml)

  * [無償Linuxディストリビューション](https://jp.linux.com/resources/use/non-commercial-distribution)

  * [Linuxディストリビューションの比較 \- Wikipedia](https://ja.wikipedia.org/wiki/Linux%E3%83%87%E3%82%A3%E3%82%B9%E3%83%88%E3%83%AA%E3%83%93%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E6%AF%94%E8%BC%83)


  * [【パッケージ管理システムとは？】Linuxでのパッケージ管理の使い方まとめました](https://eng-entrance.com/category/linux/linux-package)
  
  * [yumからDNFへの移行 \- Qiita](http://qiita.com/yunano/items/eedd3da40d67394881a2)

  * [Slackware14\.1でsbopkgを使いパッケージを管理する](http://note.kurodigi.com/slackware141-sbopkg/)