2022年5月22日日曜日

Linuxの設定情報を一括取得するスクリプト

ネットワーク機器などの設定値は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基本設定 grubkdump、SELinuxの設定
カーネルパラメータ カーネルパラメータとシステムリソース制限(ulimit)設定
ネットワーク設定 各種ネットワーク関連設定。DNSやhostsファイルの設定を含む
ディスク設定 各種ディスク情報、LVM関連設定、fstabの設定
ユーザ・グループ設定 ユーザー一覧、グループ一覧、sudoの設定
sshd設定 sshdに関する設定
時刻設定 時刻同期 (Chrony) に関する設定
OS言語設定 使用している言語とインストール済み言語
サービス設定 systemdのサービス一覧
パッケージ設定 yumdnfの設定、インストールされている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 件のコメント:

コメントを投稿

人気の投稿