AIX への sudo コマンド導入

# AIX への sudo コマンド導入

sudo の導入です。なぜ唐突に sudo の導入なのか？ですが、
依頼があり手順をまとめる必要があったからです。
ネット等で調べましたが、意外にまとまった手順は無いように思い、せっかくなので久しぶりに、と
筆を執りました（キーボードをとった？）
ところで「筆を執る」って今も言いますかね。言わない。。。？

#環境
AIX 6.1 TL7 SP6  　　（※2020/03時点でサポート切れです。。 7.1 or 7.2 を使いましょう！）

#導入の流れ
1. 前提パッケージ・メディアの入手
2. AIX の rpm コマンドの更新
3. OpenSSL の導入（または更新）
4. バーチャルパッケージの更新
5. sudo の導入

##1.前提パッケージ・メディアの入手

意外に手間取るメディアの入手です。
探すのも面倒ですし、バージョンもURL も結構変わる？ので何を導入するにしても困りますね。
下記の情報もすぐに古くなるだろうとは思いますが、無いよりはましということで。

必要なメディアは以下の通りです。

| 概要                       | ファイル名 | 配置場所（例） |
|:---------------------------|:--|:---|
| AIX 用 rpmコマンドパッケージ | rpm.rte.4.13.0.10 | /work/sudo/AIX-rpm |
| OpenSSL | openssl.base | /work/sudo/openssl |
| | openssl.license | |
| | openssl.man.en_US | |
| sudo 関連 rpm ファイル | bash-5.0-1.aix6.1.ppc.rpm | /work/sudo/sudo |
| |cyrus-sasl-2.1.26-3.aix6.1.ppc.rpm | |
| |db-6.2.32-2.aix6.1.ppc.rpm| |
| |gettext-0.19.8.1-3.aix6.1.ppc.rpm | |
| |glib2-2.56.1-2.aix6.1.ppc.rpm | |
| |info-6.4-1.aix6.1.ppc.rpm| |
| |libffi-3.2.1-3.aix6.1.ppc.rpm | |
| |libgcc-6.3.0-2.aix6.1.ppc.rpm | |
| |libiconv-1.14-2.aix6.1.ppc.rpm | |
| |libstdcplusplus-6.3.0-2.aix6.1.ppc.rpm | |
| |libunistring-0.9.9-2.aix6.1.ppc.rpm | |
| |libxml2-2.9.9-1.aix6.1.ppc.rpm | |
| |ncurses-6.1-2.aix6.1.ppc.rpm | |
| |openldap-2.4.46-2.aix6.1.ppc.rpm | |
| |sudo-1.8.27-2.aix6.1.ppc.rpm | |
| |xz-libs-5.2.4-1.aix6.1.ppc.rpm | |
| |zlib-1.2.11-1.aix6.1.ppc.rpm | |

入手元ですが、 頑張れば [AIX Toolbox for Linux applications](https://www.ibm.com/support/pages/aix-toolbox-linux-applications-downloads-alpha) ページからたどれたりします。 (FAQ 参照）
が、そんなところは普通見ませんよね。

- AIX 用 rpm コマンドパッケージ
    - https://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/INSTALLP/ppc/
- OpenSSL
    - https://www.ibm.com/support/pages/downloading-and-installing-or-upgrading-openssl-and-openssh?mhsrc=ibmsearch_a&mhq=openssl
- sudo 用 rpm パッケージ
    - https://www.ibm.com/support/pages/aix-toolbox-linux-applications-downloads-alpha

※補足
・ OpenSSL のページは時々止まっていたりするようです。やれやれです。
・ OpenSSL のページは IBM ID が必要ですので、なければ作成しましょう。
・ 各ファイルのバージョンに関しては完全に一致していなくても大丈夫です。導入時点で新しいものを一通りそろえればよいでしょう。
　（上の表の情報は 2019年の終わりごろの情報？かもしれません？）

※さらに補足
AIX-rpm は rpm コマンドを提供するだけではなく、 rpm パッケージから AIX のネイティブライブラリ等を見えるようにします（だそうです。。。　だそうだ、と理解しています。。。）
OpenSSL は sudo 関連の rpm パッケージの前提ライブラリ  libcrypt.a のために入れますが、 これは AIX 用のパッケージです。

##2.AIX の rpm コマンドの更新

オープンソース系のパッケージを扱う場合、 AIX の rpm コマンドは新しい方が良いようです。

###(1) .toc ファイル作成

ダウンロードしてきた AIX 用のファイルからインストール・更新する場合、まぁ一応 .toc ファイル（要はファイルリスト）を作成します。　やらなくても大丈夫だとは思いますが念のため。

なお、以下の作業はすべて root で実行します。

````
# cd ＜該当ディレクトリ＞
# rm -f .toc
# inutoc .
# ls -l .toc
````
.toc ファイルができていることを確認します。

###(2)ソフトウェアの更新

smit から更新します。

````
# cd ＜該当ディレクトリ＞
# smitty update_all
````

入力ディレクトリーはカレントディレクトリを指定します。(. : ピリオド)

````
                                       インストール済みソフトウェアを最新レベルに更新 (すべて更新)

入力フィールドに値を入力または選択してください。
必要な変更を行った後、ENTER キーを押してください。

                                                        [入力フィールド]
* ソフトウェアの入力デバイス/ディレクトリー          [.]                                                                              +

````

まずはプレビューです。 一部だけ色を変える方法がわからないので抜粋しますが、以下のように指定します。

- プレビューだけ行う (更新操作は行わない)  : はい
- ソフトウェアの更新をコミットする : いいえ
- 置換ファイルを保存する : はい
- 新規ご使用条件に同意する : はい

````
                                       インストール済みソフトウェアを最新レベルに更新 (すべて更新)

フィールドの値を入力または選択してください。
変更を完了したら ENTER キーを押してください。

                                                        [入力フィールド]
* ソフトウェアの入力デバイス/ディレクトリー           .
* 更新するソフトウェア                                _update_all
  プレビューだけ行う (更新操作は行わない)             はい                                                                            +
  ソフトウェアの更新をコミットする                    いいえ                                                                          +
  置換ファイルを保存する                              はい                                                                            +
  必要条件ソフトウェアを自動的にインストールする      はい                                                                            +
  スペースが必要な場合にファイルシステムを拡張する    はい                                                                            +
  インストールを検証してファイル・サイズを確認する    いいえ                                                                          +
  詳細出力する                                        いいえ                                                                          +
  複数ボリュームを処理する                            はい                                                                            +
  新規ご使用条件に同意する                            はい                                                                            +
  新規ご使用条件をプレビューする                      いいえ                                                                          +

````

エンターを押すと、　「よろしいですか？」　と確認画面が表示されますので、再度エンターでプレビューを実行します。
プレビューが問題なく 「OK」で終われば、  Esc + 3 で上記の画面に戻ってきます。
戻った画面上で、　「プレビューだけ行う」　を　「はい」→「いいえ」に変更し、エンターを押します。（確認画面もエンター）
これで実際に導入されます。

##3.OpenSSL の導入（または更新）

OpenSSL の導入も、基本的には AIX-rpm　と同様に実施します。

###(1) .toc ファイル作成

OpenSSL 関連ファイルの場所で、 .toc ファイルを作成します（手順は前述の AIX-rpm　部分を参照）

###(2) OpenSSL の導入
更新の場合は AIX-rpm の手順と全く同じです。
新規導入の場合、たどるメニュー構成がやや異なりますが、それ以外は同じです。

````
# smitty install	
→ ソフトウェアのインストールおよび更新
→ ソフトウェアのインストール
````

次に、「ソフトウェアの入力デバイス/ディレクトリー」　の指定画面が表示されますので、
AIX-rpm のケースと同じく　カレント (".") を指定します。

導入前の画面も、ほぼ同じです。　インストールするソフトウェア欄が [_all_latest] となっているぐらいです。

````
                                                       ソフトウェアのインストール

フィールドの値を入力または選択してください。
変更を完了したら ENTER キーを押してください。

                                                        [入力フィールド]
* ソフトウェアの入力デバイス/ディレクトリー           .
* インストールするソフトウェア                       [_all_latest]                                                                    +
  プレビューだけ行う (インストール操作は行わない)     はい     　(※プレビュー OK 後、いいえ）                       +
  ソフトウェアの更新をコミットする                    いいえ                                                                          +
  置換ファイルを保存する                              はい                                                                            +
  必要条件ソフトウェアを自動的にインストールする      はい                                                                            +
  スペースが必要な場合にファイルシステムを拡張する    はい                                                                            +
  同一または新規バージョンを上書きする                いいえ                                                                          +
  インストールを検証してファイル・サイズを確認する    いいえ                                                                          +
  対応する言語のファイルセットを含める                はい                                                                            +
  詳細出力する                                        いいえ                                                                          +
  複数ボリュームを処理する                            はい                                                                            +
  新規ご使用条件に同意する                            はい                                                                            +
  新規ご使用条件をプレビューする                      いいえ                                                                          +
````

ここで、プレビュー、並びに導入を実施します。


##4.バーチャルパッケージの更新

バーチャルパッケージ、といっても何のことかわかりませんね。
興味がある方はこちらをどうぞ。
・[Understanding the AIX Virtual RPM Package for rpm.rte](https://www.ibm.com/support/pages/understanding-aix-virtual-rpm-package-rpmrte)

AIX では、 上記のように smit ( installp コマンド ) で各種パッケージ類を管理しますが、
オープンソース系のパッケージは rpm で管理します。
rpm 系のパッケージからも、 AIX ネイティブのライブラリーなどを参照するのですが、
管理方法が違うため、 rpm の世界から installp の世界をのぞけない、という問題が発生します。
それを解消するのが AIX-rpm コマンドパッケージです。（だと理解しています）
通常、 AIX-rpm パッケージを導入する際に、内部的に以下の手順の updtvpkg コマンドが発行されるはずですが
効いていないこともあるらしく、手動で実行するのがおすすめです。

````
# /usr/sbin/updtvpkg
お待ちください...
````

そっけないです。

##5. sudo の導入

ここまでくればあとは rpm コマンドで入れるだけです。
sudo 関連のファイルが配置されているディレクトリに移動し、 rpm 実行です。

一応先にテストしましょう

````
# rpm -ivh --test *.rpm
````

正常な場合は以下のような表示になります。

````
# rpm -ivh --test *.rpm
Preparing...                          ################################# [100%]
````

前提条件に不備がある場合は以下のようになることがあります。（不備内容によりメッセージは異なります）

````
# rpm -ivh --test *.rpm
Preparing...                          ################################# [100%]
        installing package libstdc++-6.3.0-2.ppc needs 64MB on the /opt filesystem
        installing package ncurses-6.1-2.ppc needs 86MB on the /opt filesystem
        installing package glib2-2.56.1-2.ppc needs 208MB on the /opt filesystem
        installing package gettext-0.19.8.1-3.ppc needs 237MB on the /opt filesystem
        installing package libiconv-1.14-2.ppc needs 240MB on the /opt filesystem
        installing package bash-5.0-1.ppc needs 250MB on the /opt filesystem
        installing package info-6.4-1.ppc needs 252MB on the /opt filesystem
        installing package xz-libs-5.2.4-1.ppc needs 255MB on the /opt filesystem
        installing package libxml2-2.9.9-1.ppc needs 274MB on the /opt filesystem
        installing package libunistring-0.9.9-2.ppc needs 278MB on the /opt filesystem
        installing package sudo-1.8.27-2.ppc needs 284MB on the /opt filesystem
````

上記の例は /opt のファイルシステム容量不足ですね。
`chfs -a size=3G /opt`  などで拡張しましょう
なお、依存関係エラーが出た場合はファイルが足りませんので、足りないものを AIX toolbox for Linux Applications からとってきましょう。

実際の導入は以下のような感じです。

````
# rpm -ivh *.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:libgcc-6.3.0-2                   ################################# [  6%]
   2:zlib-1.2.11-1                    ################################# [ 12%]
   3:db-6.2.32-2                      ################################# [ 18%]
   4:cyrus-sasl-2.1.26-3              ################################# [ 24%]
3004-686 グループ "ldap" は存在しません。
   5:openldap-2.4.46-2                ################################# [ 29%]
   6:libffi-3.2.1-3                   ################################# [ 35%]
   7:libstdc++-6.3.0-2                ################################# [ 41%]
   8:ncurses-6.1-2                    ################################# [ 47%]
   9:glib2-2.56.1-2                   ################################# [ 53%]
  10:gettext-0.19.8.1-3               ################################# [ 59%]
  11:libiconv-1.14-2                  ################################# [ 65%]
add shr4.o shared members from /usr/lib/libiconv.a to  /opt/freeware/lib/libiconv.a
add shr.o shared members from /usr/lib/libiconv.a to  /opt/freeware/lib/libiconv.a
add shr4_64.o shared members from /usr/lib/libiconv.a to  /opt/freeware/lib/libiconv.a
/
  12:bash-5.0-1                       ################################# [ 71%]

        ## Binary "bash" is avaible in 32bit and 64bit ##

        The default used is 64bit

        If 32bit is needed, please change symbolic link
        for "bash" in /bin directory
        To do that type:
                # rm -f /bin/bash
                # ln -sf /opt/freeware/bin/bash_32 /bin/bash
  13:info-6.4-1                       ################################# [ 76%]
Please check that /etc/info-dir does exist.
You might have to rename it from /etc/info-dir.rpmsave to /etc/info-dir.
  14:xz-libs-5.2.4-1                  ################################# [ 82%]
  15:libxml2-2.9.9-1                  ################################# [ 88%]
  16:libunistring-0.9.9-2             ################################# [ 94%]
  17:sudo-1.8.27-2                    ################################# [100%]

````

完了後、コマンドが使えるようになっていることがわかります。

````
# which sudo
/usr/bin/sudo

# which visudo
/usr/sbin/visudo

````

---
sudo 自体の使い方は割愛です。というか、正直知りません。
常に root を使う悪の SE ですので。

Linuxだと単に rpm や yum、dnf で入れればOKという世界だと思いますので、
意外にめんどくさくはありますが、まぁそもそも違う OS ですのである程度は仕方がないと思います。
（というか、まぁよく頑張っているのではないでしょうか。。。？ ）
Linux も、 libc とかで依存関係が狂った日には もう手も足も出ないですし…

というわけで、 sudo でした！
最後は sudo 恒例のおまじない？で。
$ sudo su -

---