UbuntuとCentOSの違いと共通化された部分
UbuntuとCentOSの違うところをここでまとめておきます。両方で動くようになるのがよいですね。
シェルのシェバン「/bin/sh」
CentOSでは「/bin/sh」は「/bin/bash」にシンボリックリンクが張られているので、bashで実行されます。
Ubuntuでは「/bin/sh」で実行されます。実装は「dash」と呼ばれるシェルになっています。
シェバンを以下のように書いているとCentOSでは、bashで実行されるのに対して、Ubuntuでは「/bin/sh」で実行されます。
#!/bin/sh
そして、bashの文法を使っていると以下のように文法エラーになる。
./morbo: 10: ./morbo: Syntax error: "(" unexpected
Linux間ポータビリティを持たせるためには、明示的にbashとシェバンと明示的に書きます。
#!/bin/bash
Unix間ともポータビリティを持たせる場合はshの文法で書き直す必要があるでしょう。
Perlで書けば、Unix/Linux間で、ポータブルなプログラムが書けます。
パッケージ管理
パッケージ管理ツールUbuntuではapt、CentOSではyumの違いがあります。
CentOS 8からはdnfがyumを置き換えます。yumはdnfのエイリアスになります。
パッケージ名も異なります。パッケージ管理は現在のところ共通化できなさそうです。
sudo
Ubuntuは、sudoがデフォルトで利用可能です。
sudoを許可するには、Ubuntuでは、ユーザーをsudoグループに追加します。
# Ubuntuでsudoを許可 gpasswd -a myapp sudo
CentOSでは、sudoが有効になっていません。visudoでsudoが利用可能になる設定を行います。(CentOS 7の場合)
「%wheel ALL=(ALL) ALL」のコメントを外します。
## Allows people in group wheel to run all commands #%wheel ALL=(ALL) ALL %wheel ALL=(ALL) ALL
sudoを許可するには、ユーザーをwheelグループに追加します。
# CentOSでsudoを許可 gpasswd -a myapp wheel
サーバー
Apache
Apacheは名前が異なります。CentOSではhttpdなのに対して、Ubuntuでは、apache2です。
設定ファイルの場所や、systemctlコマンドを実行するときの名前が異なっています。
設定ファイルの構成も、CentOSとUbuntuで異なっています。
UbuntuのApacheには、a2ensite, a2enmod, a2enconfなどの、設定ファイル有効化コマンドがあります。
コマンドを使って設定ファイルを有効化・無効可するといったことが、Ubuntuでは、やりやすくなっています。
ファイアーウォール
ファイアーウォールは、Ubuntuはufw、CentOSはfirewalldです。
ファイアーウォールは、コマンドラインでの設定は、非常にややこしく、やりたくないという気持ちは強い。
VPS、クラウドサービスには、たいてい、ファイアーウォールの設定が存在するので、それで設定すると、Linux自体のファイアーウォールを意識しないですむ。ネットワークの設定でパケット制御を行う部分があります。
オンプレミスの場合は、コマンドでファイアーウォール管理を行う。
cron
Ubuntuの場合は、デフォルトでcronがインストールされていて、普通のcronです。自然にcronを使えます。
CentOSの場合は、デフォルトのcronがanacronです。普通のcronが欲しい場合は、anacronをアンインストールして、普通のcronをインストールする必要があります。
SeLinux
Ubuntuの場合は、CentOSのSeLinuxに該当する機能は、デフォルトでoffになっています。
CentOSの場合は、SeLinuxがデフォルトでonになっている。この機能、リバースプロキシでの接続で、プロキシエラーになっちゃうので、SeLinuxを無効にするか、リバースプロキシができる設定にする必要があります。
Let's EncryptによるSSL証明書
Ubuntuでは、certbotがaptからインストールできます。
CentOSでは、以下のようにcertbotをインストールします。
# Cent OS 7 yum install epel-release yum install --enablerepo=epel certbot
新しいCent OSのバージョンが出たばかりなど、certbotがepelレポジトリに含まれていない場合は、ソースコードからインストールしする必要があります。またcertbotは、certbot-autoという名前です。
UbuntuとCentOSで共通になったもの
CentOSとUbuntuで、ここ最近共通になったもの。
systemctl
CentOSもUbuntuもサービス(サーバーとして起動する者)は、systemdで管理するようになって、管理コマンドもsystemctlになりました。
CentOS 7からはsystemctlコマンドをUbuntuと共通で使うことができます。
journalctl
systemdのログ管理もjournalctlがUbuntuとCentOSで共通で使える。
CentOS 7からはjournalctlコマンドをUbuntuと共通で使うことができます。
Perl
Ubuntuの一般的な構成ではデフォルトでPerlがインストールされています。
CentOSの一般的な構成ではデフォルトでPerlがインストールされていないことが多いです。さらに、付け加えておくと、Perlのコアモジュールがperlパッケージから分離されて別になっています。
# CentOSにおけるPerlのインストール yum install perl yum install perl-core
パッケージのインストール後のサーバーの状態
サーバーアプリケーションをインストールした場合は、Ubuntuの場合は、起動されます。
サーバーアプリケーションをインストールした場合は、CentOSの場合は、起動されていません。
標準パッケージの種類
Ubuntuでは標準パッケージでLet's Encryptのクライアントであるcertbotと、Redisサーバーが提供されています。
CentOSの場合は(CentOS 7の場合)は、上記が提供されていません。Linux 用の拡張パッケージ(EPEL)リポジトリをインストールすることで利用可能になります。
sudo yum -y install epel-release
バージョン間の変化の大きさ
Ubuntuは、変化はあれども、なるべく互換性が保たれ、大きな変更は少ない感じがします。
CentOSの方が変化が大きく。バージョン間の差分は大きく感じる。CentOS 5, 6, 7, 8で、変化は多い。