タグ別アーカイブ: CentOS

CentOS 8のサポート期間の考え方は6や7とは異なります

CentOS 8.x (クローン元であるRHEL 8も含む)では CentOS 6 や 7 までとはいくつかサポート期間(サポート期限)の扱いが異なっています。

BaseOSリポジトリとAppStreamリポジトリ

CentOS 8 ではOSとしての機能を提供する「BaseOS」リポジトリと、開発言語やデータベースサーバー等を提供するアプリケーションストリームのリポジトリである「AppStream」リポジトリの2つのリポジトリで構成されます。また、パッケージ管理を行うdnf(これまでと同様にyumコマンドを実行した場合もdnfが呼ばれる)にはモジュールという仕組みが有り、モジュールの切り替えという概念が追加されています。

BaseOS リポジトリ:
CentOS 8 のOSとその周辺機能が提供されます。
サポート期限は2029年5月末まで。

About/Product – CentOS Wiki
https://wiki.centos.org/About/Product

OSとその周辺機能は10年間のサポートが提供されます。この期間はCentOS 7と同様です。

AppStream(アプリケーションストリーム)リポジトリ:
各種開発言語やRDBMS、サーバーアプリケーションやその他の各種ツール類等が提供されます。
サポート期限はアプリごとのストリームにより異なります。

Red Hat Enterprise Linux 8 Application Streams Life Cycle – Red Hat Customer Portal
https://access.redhat.com/support/policy/updates/rhel8-app-streams-life-cycle

主な内容とそれぞれのサポート期限は上記リンクを参照してください。RHELでの情報ですがクローンであるCentOSも同じ扱いになるかと思います。AppStreamでは例えばWebサーバーのApache、Nginx、ソフトウェア開発関連ではPHP、Ruby、Python、Perl、OpenJDK、データベースサーバーとしてはMySQL、MariaDB、PostgreSQL、Redisなどが提供されています。

アプリケーションによっては複数バージョンから選択して導入する事が出来るようになっており、どのバージョンを導入するかはモジュールの有効化・無効化で選択する事が可能です。モジュールはPHPであればCentOS 8.0 1905時点では7.2のみの提供でしたがCentOS 8.1 1911でPHP 7.3のモジュールが選択できるようになり、同様にNodeJSでは10に加え12が、Rubyでは2.5に加え2.6が選択出来るようになるなど、ある程度新しいバージョンをキャッチアップしていく事が可能なようです。

現在利用可能なモジュールは
dnf module list (yum module listでも可)
を実行する事で表示されます。また、
dnf module list –enabled
を実行する事で現在有効なモジュールのみが一覧表示されます。

なお、AppStreamで提供されているすべてがモジュールになっている訳ではなく、例えばgitコマンドなど複数バージョンから選択して導入するという要素が薄いようなものはモジュールの選択は有りません(上記のリンク先に掲載されていないアプリ・ツール類が多く存在します) (*1) 。

変化していくCentOSの立ち位置

つまりCentOS はCentOS 7までの

・サポート期間が開発言語やRDB、Webサーバー等含めディストリビューション全体で長大で、本家でサポート期間が終了していてるソフトウェアでもある程度のセキュリティフィックスが提供される。
・そのサポート期間を目的にする場合は化石のようなバージョンを使い続ける必要が有る(例えばCentOS 7ではPHPは5.4、Rubyは2.0.0が導入される)。それが困るので有れば別途リポジトリを追加するなりコンパイルするなりして導入する。

というディストリビューションからCentOS 8では

・OSとその周辺機能のサポート期間は10年確保しつつ、開発言語やRDBMS等の各種アプリケーションのサポート期間はそれよりも短い期間。
・各種アプリケーションは比較的新しいバージョンに能追従可能(追従していく必要が有る、とも言う)で、公式リポジトリのみでバージョンの切り替えができる。

というディストリビューションに変化します。

「化石バージョンでいいなら全てが長期間サポートされる一枚岩のLinuxディストリビューション」ではなくなったので、利用ソフトウェアの運用方針に注意しましょう。

Using AppStream :: CentOS Docs Site
https://docs.centos.org/en-US/8-docs/managing-userspace-components/assembly_using-appstream/

Managing versions of Application Stream content :: CentOS Docs Site
https://docs.centos.org/en-US/8-docs/managing-userspace-components/assembly_managing-versions-of-appstream-content/

※1: メール関連ではPostfixはBaseOSリポジトリで提供される一方でDovecotはAppStreamリポジトリ内に含まれています。何とも言えない基準。


CentOS 7.x の systemd、firewalld、nmcli関連まとめ

CentOS 7.x要点

  • LinuxカーネルCentOS5/62.6.xから3.10.xになりました。
  • デフォルトのファイルシステムがXFSになりました。ext4ではありません。併せてLVMのスナップショットをサポートしました。
  • システム管理やOSやデーモンの起動プロセスがSysV initからsystemdに置き換わりました。分散していた設定の一元化や並列処理による起動の高速化、ログのジャーナルファイル化が特徴です。
  • ファイアウォールの管理設定がiptablesからfirewalldに置き換わりました。iptablesはバックエンドとして使われていますがiptables自体は起動されず、共存も出来ません。
  • ネットワーク設定がNetworkManagerに一元化されました。設定のセットを「コネクション」としてまとめ、インタフェースごとに付け替えるような設定が可能です(本番用のネットワーク設定、開発用のネットワーク設定等)。
  • ネットワーク関係のツールコマンドがiproute2に置き換わりました。従来のnet-toolsは推奨されず、初期状態ではインストールもされません。 具体的にはifconfig、route、netstat、arpコマンドが無くなり、代わりにipコマンドとssコマンドを使います。
  • 時刻合わせのデーモンはntpdではなくchronydが動きます。ntpdよりも高速かつ正確に同期するようです。
  • タイムゾーンの変更はtimedatectlコマンドです。
  • ロケールの変更はlocalectlコマンドです。
  • ホスト名の確認、変更はhostnamectlコマンド、もしくはsystemdと同期しているNetworkManagerのnmcliコマンドを利用します。/etc/sysconfig/network を編集しても反映されません。
  • Linux Containerのサポート。Dockerも標準リポジトリから利用できます。
  • ブートローダーがGRUBからGRUB2に変更。
  • CentOS公式としてはipv6の無効化は非推奨です。
  • UEFI Secure Bootのサポート。
  • その他いろいろなライブラリのバージョンが変わっていたり。

公式レポジトリのメジャーどころパッケージバージョン

  • PHPは 5.4 PHP公式のサポートが終わっていてもCentOSによるサポート対象となる。
  • MariaDB 5.5
  • Postgresql 9.2
  • Apache 2.4

systemd

コマンドとしては主にsystemctl、journalctlを利用します。従来の /etc/init.d/etc.. では操作できない物も多く、利用できないものと思った方がいいです。また、chekconfigでも表示されない項目が多々存在します。同様にsystemctlを使ってください。

systemctl

systemctl
サービス名指定の .serviceは省略可。

サービス起動
# systemctl start dhcpd.service

サービス停止
# systemctl stop dhcpd.service

サービス状態確認
# systemctl status dhcpd.service

サービス状態確認(起動しているかどうかだけ欲しい)
# systemctl is-active httpd.service

自動起動させる場合
# systemctl enable dhcpd.service

自動起動させない場合
# systemctl disable dhcpd.service

自動起動確認
# systemctl list-unit-files

OS再起動
# systemctl reboot

OSシャットダウン
# systemctl poweroff

Q. Apacheをgracefulしたいんだけど
A. reloadでいい模様
# systemctl reload httpd.service
http://blog.cles.jp/item/7392

Q. list-unit-filesした際のページングが要らない
A. –no-pagerを付ける
# systemctl list-units –no-pager

journalctl

systemctlコマンドでサービスを起動しようと思ったが失敗した時等に、journalctlコマンドで見てとそのまま実行できるコマンドを提示してくれます。親切。
今まで /var/log/messages に出ていた内容がこちらに出ている事も有るので、問題調査時も要チェック。

何かしらsystemctlコマンドで失敗した起動の確認
# journalctl -xn

timedatectl

タイムゾーンを確認する。
# timedatectl

localectl

ロケールを確認する。
# localectl

hostnamectl

ホスト名を確認する。
# hostnamectl

firewalld

インタフェース毎に仮想的なファイアウォールを構築します。コマンドとしてはfirewall-cmdを利用します。

  1. 許可するサービスをまとめたゾーンを作成する。
  2. 接続元IP(ソース)ごとにどのゾーンを割り当てるか指定。
  3. インタフェースに適用するゾーンを指定。

の3段階で制御します。ネットワークインタフェースが1つだけの環境の場合は3番目は行わなくてもOKです。他にもIPマスカレードやポートフォワード等いろいろ出来ますが上記3点のみ説明します。変更系のコマンドは後述する –permanent を付けないと恒久的な変更とならないので注意。

ゾーン回りの設定・確認

現在のゾーン設定を確認
# firewall-cmd –list-all

指定したゾーンの設定を確認
# firewall-cmd –list-all –zone=work

全てのゾーン設定を確認
# firewall-cmd –list-all-zones

現在のデフォルトゾーンを確認
# firewall-cmd –get-default-zone

デフォルトゾーンを変更
# firewall-cmd –set-default-zone=dmz

ゾーンのインタフェースを変更
# firewall-cmd –zone=dmz –change-interface=ens192

ゾーンにインタフェースを割り当てない場合はデフォルトゾーンが割り当てられます。
ゾーンは新しく追加する事もできます。また、デフォルトで用意されているゾーン設定は、 /usr/lib/firewalld/services/
に配置されています。

ゾーンへ許可するサービスを追加・削除

定義済みサービスの一覧表示
# firewall-cmd –get-services

publicゾーンで許可されているサービスを確認
# firewall-cmd –list-service –zone=public

ゾーンに許可サービスを追加する
# firewall-cmd –add-service=http –zone=public

ゾーンに恒久的に許可サービスを追加する
# firewall-cmd –add-service=http –zone=public –permanent

ゾーンから許可サービスを削除する
# firewall-cmd –remove-service=ssh –zone=public
恒久的でない変更はOSやfirewalldの再起動によって初期化される。

ゾーンへ許可するICMPタイプの追加・削除

定義済みICMPタイプの一覧を表示
# firewall-cmd –get-icmptypes

ゾーンで禁止されているICMPタイプを表示
# firewall-cmd –list-icmp-blocks –zone=public

ゾーンに禁止するICMPタイプを追加
# firewall-cmd –add-icmp-block=echo-request –zone=public

ゾーンから禁止するICMPタイプを削除
# firewall-cmd –remove-icmp-block=echo-request
恒久的に変更する場合は–permanentを付ける

ゾーンへ許可するポートを追加・削除

サービスとして定義されているものはサービスで制御する事。よく使うものであれば自分でサービスとして定義を追加してもいいかもしれない。

ゾーンで許可されているサービスの一覧を確認
# firewall-cmd –zone=public –list-ports

ゾーンにポート TCP:8080 の許可を追加
# firewall-cmd –zone=public –add-port=8080/tcp

ゾーンにポート TCP: 8080 ~ 9090 の許可を追加
# firewall-cmd –zone=public –add-port=8080-9090/tcp

ゾーンでポート TCP:8080 が許可されているか確認
# firewall-cmd –zone=public –query-port=8080/tcp

ゾーンからポート TCP:8080 の許可を削除
# firewall-cmd –zone=public –remove-port=8080/tcp

恒久的に変更する場合は–permanentを付ける

接続元IPアドレスによるゾーン振り分け

接続元IPアドレス(ソース)によって振り分け先のゾーンを変える事で、許可サービスの制御をします。ソース設定で振り分けられなかった接続はデフォルトゾーンに振り分けられます。デフォルトゾーンのpublicではhttpだけを許可し、特定のIP(ソース)をworkゾーンに振り分け、workではhttpとsshを許可する、といった指定で制御します。

ゾーンに設定されている許可ソースを確認
# firewall-cmd –list-sources –zone=work

ソースに指定のゾーンが設定されているかを確認
# firewall-cmd –query-source=1xx.1xx.xx.xxx –zone=work

ソースに指定されているゾーンを確認
# firewall-cmd –get-zone-of-source=1xx.1xx.xx.xxx

特定のソースを特定のゾーンに振り分ける
# firewall-cmd –add-source=1xx.1xx.xx.xxx –zone=work

特定のソースの振り分け先ゾーンを変更
# firewall-cmd –change-source=1xx.1xx.xx.xxx –zone=public

ソースの振り分け設定を削除
# firewall-cmd –remove-source=1xx.1xx.xx.xxx

恒久的に変更する場合は–permanentを付ける

反映

この辺りの設定は/etc/firewalld/zones/の中にxml形式で作られている。

デフォルトで用意されているゾーンについて

  •  drop:全ての受信パケットを破棄する。
  •  block:全ての受信パケットに受信拒否を返す。内部から開始した通信の返信パケットは受信できる。
  • trusted:すべての受信パケットを受け入れる。
  • 上記3つのゾーンについては設定を変更できない。

参考:http://www.slideshare.net/enakai/firewalld-study-v10

上記以外のファイアウォール設定

とりあえず表示するコマンドのみを記載。

より柔軟な設定が設定できるリッチルール:確認
# firewall-cmd –list-rich-rules

iptablesと同じ書式で設定するダイレクトルール:確認
# firewall-cmd –direct –get-all-rules

NetworkManager

コマンドとしてはnmcliを利用します。またコンソール上でTUIベースの設定が行える、nmtuiコマンドが有ります。

nmcli

connectionはcon、またはc、modifyはmod、またはmといった形で簡略化できるパラメータも多いです。

現在のコネクションを表示
# nmcli connection

コネクションを有効化
# nmcli connection up ens160

なお、設定変更の反映もupを使います。

コネクションを無効化
# nmcli connection down ens160

コネクションの状態を表示
# nmcli connection show

connection showはかなりたくさんの情報が出てくるので、特定のフィールドだけ確認したい時は–fieldsを使う。以下はipv4関連情報の確認例
# nmcli –fields ipv4 connection show ens160

各パラメータの内容は
# man nm-settings
で確認できる。

設定値の変更はmodify。ipv4.addressesは、”アドレス/プレフィックス長 デフォルトゲートウェイ”のフォーマットで指定する。
# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.0.196/24 ipv4.gateway 192.168.0.1

パラメータの追加は+。以下はIPエイリアスの追加。
# nmcli connection modify ens160 ipv4.method manual +ipv4.addresses “192.168.0.197/24 192.168.0.1”

デバイスの一覧を表示
# nmcli device

デバイスに紐づいた情報の表示
# nmcli device show ens160