ネットワーク機器などの設定値はshow run
などコマンド実行結果をテキストファイルとして残すことで、変更作業を行った前後のファイルでdiffツールによる比較を行うことができる。
OSの設定については、設定内容が多岐にわたるため、なかなかテキストファイルに残すといったことは難しく、都度コマンドを実行して情報を取得するというパターンが多い。
※Red Hat系のLinuxであれば、ログの取得ツールとしてsosreport
がある。こちらは必要な設定やファイルを1つの圧縮ファイルにまとめるものとなり、設定の比較という観点では使いづらい。
そこで今回は、Red Hat系のLinuxの設定情報を1つのテキストファイルに出力し、一括取得するスクリプトを作ってみた。このスクリプトを使うことで、OSの設定に関しても、ネットワーク機器のように設定変更時の差分をdiffツールにて比較できるようにする。
環境
本スクリプトの動作確認をしたOSは以下の通り。Red Hat系のLinuxディストリビューションであるCentOS、AlmaLinux、Rocky Linuxでも動作するはずだ。
- OS : Red Hat Enterprise Linux 8 または 7
- 実行シェル : Bash
Linux設定項目一覧
本スクリプトで取得する設定項目は以下となる。
取得設定項目 | 取得設定内容 |
---|---|
ホスト名・OSバージョン情報 | OSのバージョン、カーネル番号、稼働時間など |
ハードウェア情報 | CPUのコアやソケット数、メモリ容量、PCIデバイス一覧 |
インストール設定 | インストール時の設定 (/root/anaconda-ks.cfg ) |
OS基本設定 | grub 、kdump 、SELinuxの設定 |
カーネルパラメータ | カーネルパラメータとシステムリソース制限(ulimit )設定 |
ネットワーク設定 | 各種ネットワーク関連設定。DNSやhosts ファイルの設定を含む |
ディスク設定 | 各種ディスク情報、LVM関連設定、fstab の設定 |
ユーザ・グループ設定 | ユーザー一覧、グループ一覧、sudo の設定 |
sshd設定 | sshdに関する設定 |
時刻設定 | 時刻同期 (Chrony) に関する設定 |
OS言語設定 | 使用している言語とインストール済み言語 |
サービス設定 | systemd のサービス一覧 |
パッケージ設定 | yum ・dnf の設定、インストールされているrpm 一覧 |
rsyslog設定 | rsyslogに関する設定 |
logrotate設定 | logrotateに関する設定 |
Postfix設定 | Postfixに関する設定 |
Dovecot設定 | Dovecotに関する設定 |
Squid設定 | Squidに関する設定 |
Unbound設定 | Unboundに関する設定 |
Apache (httpd) 設定 | Apache (httpd) に関する設定 |
Zabbix Agent設定 | Zabbix Agentに関する設定 |
PostfixやDovecotなどのソフトウェアについては、パッケージのインストール有無によって設定値の取得判断をする。これ以外にもインストールしているソフトウェアがある場合は、適宜追加するといったカスタマイズが必要となる。
スクリプト
今回作成したスクリプトはGitHubに置いてあるので、そちらを参照いただきたい。
スクリプトには以下の関数を用意しており、効率よく設定値を取得できるようにしている。以下に関数の動作概要を記載する。
関数名 | 内容 |
---|---|
show_title |
取得対象の設定項目のタイトルを表示 |
get_command |
コマンドを実行して、その結果を取得 |
get_config |
設定ファイルからコメント(# から始まる行)及び空行を削除して内容を取得 |
get_config_files |
ディレクトリを指定し、その中のファイル及びシンボリックリンクの内容を取得 |
check_install_package |
パッケージのインストール状況を確認 |
使い方
任意のディレクトリに配置しroot権限にて以下の通り実行する。実行時間は環境にもよるが、10秒程度もあれば終了する。
# chmod +x get_linux_config.sh
# ./get_linux_config.sh
同じディレクトリ内に以下のファイル名でログが出力される。
[ホスト名]_config_[yyyyMMdd-HHmmss].log
情報取得結果のサンプル
以下に取得とした設定情報を例として記載する。コマンドによる情報取得の場合は(command)# [実行コマンド]
、設定ファイルの情報取得の場合は(config)# [ファイルのフルパス]
と表示することで、どのように情報取得をしたかわかるようにしている。
################################
情報取得開始 2022/05/22 11:55:25
################################
################################
ホスト名・OSバージョン情報
################################
(command)# uname -n
rhel8
(command)# uname -a
Linux rhel8 4.18.0-240.el8.x86_64 #1 SMP Wed Sep 23 05:13:10 EDT 2020 x86_64 x86_64 x86_64 GNU/Linux
(config)# /etc/redhat-release
Red Hat Enterprise Linux release 8.3 (Ootpa)
(command)# uptime
11:55:25 up 63 days, 20:09, 1 user, load average: 0.00, 0.00, 0.00
~(中略)~
################################
ディスク設定
################################
(command)# ls -l /dev/?da*
brw-rw---- 1 root disk 8, 0 5月 22 10:51 /dev/sda
brw-rw---- 1 root disk 8, 1 5月 22 10:51 /dev/sda1
brw-rw---- 1 root disk 8, 2 5月 22 10:51 /dev/sda2
brw-rw---- 1 root disk 8, 3 5月 22 10:51 /dev/sda3
(command)# ls -l /dev/mapper/*
crw------- 1 root root 10, 236 3月 19 15:46 /dev/mapper/control
lrwxrwxrwx 1 root root 7 3月 19 15:46 /dev/mapper/rhel-root -> ../dm-0
lrwxrwxrwx 1 root root 7 3月 19 15:46 /dev/mapper/rhel-swap -> ../dm-1
(command)# fdisk -l
ディスク /dev/sda: 16 GiB, 17179869184 バイト, 33554432 セクタ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: gpt
ディスク識別子: A18174EE-DDA9-4DD9-8999-D1225E510848
デバイス 開始位置 終了位置 セクタ サイズ タイプ
/dev/sda1 2048 1230847 1228800 600M EFI システム
/dev/sda2 1230848 3327999 2097152 1G Linux ファイルシステム
/dev/sda3 3328000 33552383 30224384 14.4G Linux LVM
~(以下略)~
以上。
0 件のコメント:
コメントを投稿