[OCI]Autonomous Databaseのウォレットをダウンロードして環境に合わせて配置するシェルスクリプトを書いてみた

Autonomous Databaseのウォレットファイルをダウンロードして環境に合わせてファイルを修正、配置するシェルスクリプトを書いてみた時のメモ（OCI CLIがセットアップされている前提）

＜シェルスクリプトの動作＞
1.OCI CLIを使ってAutonomous Databaseのウォレット（Zipファイル）をダウンロード
2.ダウンロードしたZipファイルを解凍
3.sqlnet.oraを環境変数に合わせて書換え
4.解凍したファイル一式を環境変数に合わせて移動

```sh:deploy_wallet.sh
#! /bin/bash

# ADBのOCIDとウォレットのパスワードを入力させる
read -p "OCID of ADB: " OCID
read -p "Password for Wallet: " PASSWORD

# 環境変数の表示
echo "TNS_ADMIN:" $TNS_ADMIN    
echo "ORACLE_HOME:" $ORACLE_HOME

# /tmpに移動
cd /tmp

# OCI CLIでウォレット（Zipファイル）を/tmp/new_wallet.zipとしてダウンロード
oci db autonomous-database generate-wallet --autonomous-database-id $OCID --file /tmp/new_wallet.zip --password $PASSWORD

# Zipファイル解凍用のディレクトリを作成
mkdir new_wallet

# Zipファイルを/tmp/new_walletに解凍
unzip new_wallet.zip -d ./new_wallet

# /tmp/new_walletに移動
cd new_wallet

# 環境変数TNS_ADMINが設定されている場合
if [ $TNS_ADMIN ]; then
        echo "Wallet Location:" $TNS_ADMIN
# sqlnet.oraファイル内のWALLET_LOCATIONのDIRECTORYを$TNS_ADMINの値に変更
        sed -i.bak -e "s|?/network/admin|$TNS_ADMIN|" sqlnet.ora
# 解凍したファイル一式を$TNS_ADMINに移動
        sudo mv ./* $TNS_ADMIN
# 環境変数TNS_ADMINが設定されていない場合
else
        echo "Wallet Location:" $ORACLE_HOME/network/admin
# sqlnet.oraファイル内のWALLET_LOCATIONのDIRECTORYを$ORACLE_HOME/network/adminの値に変更
        sed -i.bak -e "s|?|$ORACLE_HOME|" sqlnet.ora
# 解凍したファイル一式を$ORACLE_HOME/network/admin/に移動
        sudo mv ./* $ORACLE_HOME/network/admin/
fi

# /tmpに移動
cd /tmp

# /tmp/new_walletを削除
rm -r new_wallet
```

パーミッションを変更
```
[opc@tools ~]$ chmod +x deploy_wallet.sh
```

環境変数TNS_ADMINが設定されている場合の実行ログ
```
[opc@tools ~]$ ./deploy_wallet.sh 
OCID of ADB: ocid1.autonomousdatabase.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Password for Wallet: Oracle#1
TNS_ADMIN: /home/opc/wallet
ORACLE_HOME: /usr/lib/oracle/21/client64/lib
Archive:  new_wallet.zip
  inflating: ./new_wallet/ewallet.pem  
  inflating: ./new_wallet/README     
  inflating: ./new_wallet/cwallet.sso  
  inflating: ./new_wallet/tnsnames.ora  
  inflating: ./new_wallet/truststore.jks  
  inflating: ./new_wallet/ojdbc.properties  
  inflating: ./new_wallet/sqlnet.ora  
  inflating: ./new_wallet/ewallet.p12  
  inflating: ./new_wallet/keystore.jks  
Wallet Location: /home/opc/wallet
[opc@tools ~]$
```
実行結果の確認
```
[opc@tools ~]$ cd $TNS_ADMIN
[opc@tools wallet]$ ls
cwallet.sso  ewallet.pem   ojdbc.properties  sqlnet.ora      tnsnames.ora
ewallet.p12  keystore.jks  README            sqlnet.ora.bak  truststore.jks
[opc@tools wallet]$ cat sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/opc/wallet")))
SSL_SERVER_DN_MATCH=yes
[opc@tools wallet]$ 
```

環境変数TNS_ADMINが設定されていない場合の実行ログ
```
[opc@tools ~]$ ./deploy_wallet.sh 
OCID of ADB: ocid1.autonomousdatabase.oc1.ap-tokyo-1.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Password for Wallet: Demo#1Demo#1
TNS_ADMIN:
ORACLE_HOME: /usr/lib/oracle/21/client64/lib
Archive:  new_wallet.zip
  inflating: ./new_wallet/ewallet.pem  
  inflating: ./new_wallet/README     
  inflating: ./new_wallet/cwallet.sso  
  inflating: ./new_wallet/tnsnames.ora  
  inflating: ./new_wallet/truststore.jks  
  inflating: ./new_wallet/ojdbc.properties  
  inflating: ./new_wallet/sqlnet.ora  
  inflating: ./new_wallet/ewallet.p12  
  inflating: ./new_wallet/keystore.jks  
Wallet Location: /usr/lib/oracle/21/client64/lib/network/admin
[opc@tools ~]$
```
実行結果の確認
```
[opc@tools ~]$ cd $ORACLE_HOME/network/admin
[opc@tools admin]$ ls
cwallet.sso  ewallet.pem   ojdbc.properties  sqlnet.ora      tnsnames.ora
ewallet.p12  keystore.jks  README            sqlnet.ora.bak  truststore.jks
[opc@tools admin]$ cat sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/usr/lib/oracle/21/client64/lib/network/admin")))
SSL_SERVER_DN_MATCH=yes
[opc@tools admin]
```