AIX tips: ファイルセット更新、OSレベル・アップデート時の構成ファイルの保管、削除 - (/etc/check_config.files)

#### はじめに


AIX でファイルセット更新、アップデートの際に構成ファイルの保管を AIX の機能で行う方法を確認しました。

<br>

geninstall コマンドが実行されるアップデート(ファイルセット更新)が行われる場合、
/etc/check_config.files　に記載された対象ディレクトリ、ファイルの保存、削除が可能であることを利用しています。


https://www.ibm.com/docs/ja/aix/7.3?topic=updates-checking-modifications-configuration-files


----

#### 環境


* OS : AIX 7.3 TL2 SP2 


```
# oslevel -s
7300-02-02-2420
```

<br>

* 検証モジュール：OpenSSH　8.1.112.2000

```
# lslpp -l | grep openssh
  openssh.base.client   8.1.112.2000  COMMITTED  Open Secure Shell Commands
  openssh.base.server   8.1.112.2000  COMMITTED  Open Secure Shell Server
  openssh.man.en_US     8.1.112.2000  COMMITTED  Open Secure Shell
```


----


#### /etc/check_config.files 設定


/etc/check_config.files ファイルのデフォルトの状態は以下の内容です。


```
# cat /etc/check_config.files
# @(#)78  1.2  src/bos/etc/check_config.files/check_config.files, cmdinstl, bos730, initial_extract 3/21/06 15:19:34
# IBM_PROLOG_BEGIN_TAG
# This is an automatically generated prolog.
#
# bos730 src/bos/etc/check_config.files/check_config.files 1.2
#
# Licensed Materials - Property of IBM
#
# Restricted Materials of IBM
#
# COPYRIGHT International Business Machines Corp. 2004,2006
# All Rights Reserved
#
# US Government Users Restricted Rights - Use, duplication or
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
#
# IBM_PROLOG_END_TAG
# Watched File List:
# "d" = delete old file when finished
# "s" = save old file to /var/adm/config
# This file may be edited
#---------------------------------------
d /etc/check_config.files
d /etc/csh.cshrc
d /etc/csh.login
d /etc/diskpartitions
d /etc/environment
d /etc/filesystems
d /etc/group
d /etc/inittab
d /etc/motd
d /etc/passwd
d /etc/profile
d /etc/rc
d /etc/services
d /etc/shells
d /etc/swapspaces
d /etc/vfs
d /sbin/rc.boot
#
````

以下の設定に変更しました。/work/test1111/test1, /work/test1111/test2 ファイルを保存する指定です。

```
# cat /etc/check_config.files
#---------------------------------------
s /work/test111/test1
s /work/test111/test2
#
````

保管先となる /var/adm/config はファイルシステム容量に注意が必要ですね。

```
# df -m /var
Filesystem    MB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd9var     1024.00    977.14    5%      926     1% /var
#
```

977 MB 程度余裕があります。

<br>


対象ディレクトリ、ファイル実在の確認

```
# ls -l /work/test111/
total 0
-rw-r--r--    1 root     system            0 Nov 27 08:20 test1
-rw-r--r--    1 root     system            0 Nov 27 08:20 test2
```

```
# cksum /work/test111/test1
4294967295 0 /work/test111/test1
# cksum /work/test111/test2
4294967295 0 /work/test111/test2
```

/work/test1111/test1,/work/test1111/test2 は存在しています。 

----

#### geninstall　コマンドを使用するファイルセット更新の実行


検証用アップデート・モジュールは、OpenSSH 9.2.112.2000 です。

```
# ls -l
total 34920
-rw-r--r--    1 root     system     17876893 Nov 18 20:25 OpenSSH_9.2.112.2000.tar.Z
```

解凍

```
# zcat OpenSSH_9.2.112.2000.tar.Z | tar xf -
# ls -l
total 34928
drwxr-xr-x    2 root     system         4096 Jun 26 2023  OpenSSH_9.2.112.2000
-rw-r--r--    1 root     system     17876893 Nov 18 20:25 OpenSSH_9.2.112.2000.tar.Z
```

---

解凍された内容を確認します。

```
# cd OpenSSH_9.2.112.2000
# ls
openssh.base       openssh.msg.FR_FR  openssh.msg.RU_RU  openssh.msg.de_DE  openssh.msg.pl_PL
openssh.license    openssh.msg.HU_HU  openssh.msg.SK_SK  openssh.msg.en_US  openssh.msg.pt_BR
openssh.man.en_US  openssh.msg.IT_IT  openssh.msg.ZH_CN  openssh.msg.es_ES  openssh.msg.ru_RU
openssh.msg.CA_ES  openssh.msg.JA_JP  openssh.msg.ZH_TW  openssh.msg.fr_FR  openssh.msg.sk_SK
openssh.msg.CS_CZ  openssh.msg.Ja_JP  openssh.msg.Zh_CN  openssh.msg.hu_HU  openssh.msg.zh_CN
openssh.msg.DE_DE  openssh.msg.KO_KR  openssh.msg.Zh_TW  openssh.msg.it_IT  openssh.msg.zh_TW
openssh.msg.EN_US  openssh.msg.PL_PL  openssh.msg.ca_ES  openssh.msg.ja_JP
openssh.msg.ES_ES  openssh.msg.PT_BR  openssh.msg.cs_CZ  openssh.msg.ko_KR
```

smit でアップデートを実行します。
ソフトウェア・ディレクトリにはカレント・ディレクトリ(.) を指定


```
# smitty update_all
----------------------------------------------------------------
             Update Installed Software to Latest Level (Update All)

Type or select a value for the entry field.
Press Enter AFTER making all desired changes.

                                                        [Entry Fields]
* INPUT device / directory for software              [.]                     +
```

ACCEPT new license agreements? を yes にして実行します。

```
                       Update Installed Software to Latest Level (Update All)

Type or select values in entry fields.
Press Enter AFTER making all desired changes.

[TOP]                                                   [Entry Fields]
* INPUT device / directory for software               .
* SOFTWARE to update                                  _update_all
  PREVIEW only? (update operation will NOT occur)     no                                        +
  COMMIT software updates?                            yes                                        +
  SAVE replaced files?                                no                                         +
  AUTOMATICALLY install requisite software?           yes                                        +
  EXTEND file systems if space needed?                yes                                        +
  VERIFY install and check file sizes?                no                                         +
  DETAILED output?                                    no                                         +
  Process multiple volumes?                           yes                                        +
  ACCEPT new license agreements?                      yes                                        +
  PREVIEW new LICENSE agreements?                     no                                         +

  WPAR Management

```

実行後、成功の結果で返ってきています。

```
                                           COMMAND STATUS

Command: OK            stdout: yes           stderr: no

Before command completion, additional instructions may appear below.

[TOP]
geninstall -I "a -cgNqwXY -J"  -Z   -d . -f File 2>&1

File:
    openssh.base.client            9.2.112.2000
    openssh.base.server            9.2.112.2000
    openssh.man.en_US              9.2.112.2000


+-----------------------------------------------------------------------------+
                    Pre-installation Verification...
+-----------------------------------------------------------------------------+
Verifying selections...done
Verifying requisites...done
[MORE...167]


~ 省略 ~ 


Finished processing all filesets.  (Total time:  11 secs).

+-----------------------------------------------------------------------------+
                                Summaries:
+-----------------------------------------------------------------------------+

Installation Summary
--------------------
Name                        Level           Part        Event       Result
-------------------------------------------------------------------------------
openssh.base.server         9.2.112.2000    USR         APPLY       SUCCESS
openssh.base.client         9.2.112.2000    USR         APPLY       SUCCESS
openssh.base.server         9.2.112.2000    ROOT        APPLY       SUCCESS
openssh.base.client         9.2.112.2000    ROOT        APPLY       SUCCESS
openssh.man.en_US           9.2.112.2000    USR         APPLY       SUCCESS

---- end ----

```

ファイルセット・レベル確認

```
# lslpp -l | grep openssh
  openssh.base.client   9.2.112.2000  COMMITTED  Open Secure Shell Commands
  openssh.base.server   9.2.112.2000  COMMITTED  Open Secure Shell Server
  openssh.man.en_US     9.2.112.2000  COMMITTED  Open Secure Shell
```

OpenSSH を変更したため、sshd の停止起動を行なっておきます。

```
# stopsrc -s sshd
0513-044 The sshd Subsystem was requested to stop.
# startsrc -s sshd
0513-059 The sshd Subsystem has been started. Subsystem PID is 4325742.

```


----

#### 結果

 /var/adm/config 下に対象のファイルが保存されたかどうかを確認します。

```
# ls -l /var/adm/config
total 8
drwxrwxr-x    2 root     system         4096 Sep 03 20:59 etc
drwxrwxr-x    2 root     system          256 Sep 03 20:59 sbin
drwxr-xr-x    3 root     system          256 Nov 27 08:26 work
# ls -l /var/adm/config/work/
total 0
drwxr-xr-x    2 root     system          256 Nov 27 08:26 test111
# ls -l /var/adm/config/work/test111
total 0
-rw-r--r--    1 root     system            0 Nov 27 08:20 test1
-rw-r--r--    1 root     system            0 Nov 27 08:20 test2

# cksum /var/adm/config/work/test111/test1
4294967295 0 /var/adm/config/work/test111/test1
# /var/adm/config/work/test111/test2
ksh: /var/adm/config/work/test111/test2: cannot execute
# cksum /var/adm/config/work/test111/test2
4294967295 0 /var/adm/config/work/test111/test2
#
```

/var/adm/config/下に work ディレクトリが追加されて、対象ファイルが保管されていることが確認できました。


元の /work ディレクトリ下にもファイルは残ったままです。

```
# ls -l /work/test111
total 0
-rw-r--r--    1 root     system            0 Nov 27 08:20 test1
-rw-r--r--    1 root     system            0 Nov 27 08:20 test2
#
# cksum /work/test111/test1
4294967295 0 /work/test111/test1
# cksum /work/test111/test2
4294967295 0 /work/test111/test2
#
```


---


#### /var/adm/ras/config.diffの確認

geninstall での更新で変更された内容は /var/adm/ras/config.diff ファイルに書かれます。

ただし今回保存対象としたファイルは、ファイルセット更新で変更されるファイルではないため、config.diff ファイルは作成されていません。


```
# ls -l /var/adm/ras/config.diff*
-rw-r--r--    1 root     system         1508 May 02 2023  /var/adm/ras/config.diff.11403656
-rw-r--r--    1 root     system          603 Nov 21 2021  /var/adm/ras/config.diff.16711998
-rw-r--r--    1 root     system         4488 Sep 03 20:50 /var/adm/ras/config.diff.9044248
#
````

上記は全て以前のアップデートで作成されています。

----

#### おわりに


ファイルセット更新、AIX アップデートの際にシステム構成ファイルなど保管しておきたい際などのユースケースで使用できます。

<br>

<font color="Silver">検証用ファイルが0バイトであったため、検証用に何か書き込みをしておいた方が良かったと検証後に気づきました..。ただ、指定ファイルが保存はされるという動きは確認できました。</font>

<br>

以上です。