tomy_125: Note

tomy_125 の個人的なメモ

Oracle TDE暗号化ウォレットの作成と暗号化アルゴリズムの変更

目次

構成

  • Single DB
  • マルチテナント構成
  • キーストア配置先:ファイルシステム
  • キーストア:統合モード
  • キーストア配置先の指定:sqlnet.ora の ENCRYPTION_WALLET_LOCATION
  • 自動ログインウォレット:あり

設定確認

SQL> select con_id, name from v$pdbs;

    CON_ID NAME
---------- --------------------
         2 PDB$SEED
         3 PDB1
  • 初期化パラメータ確認
SQL> set line 200 pages 100 tab off
SQL> col name for a20
SQL> col value for a40
SQL> select name, value, con_id from v$system_parameter where name in ('tde_configuration','wallet_root');

NAME                 VALUE                                        CON_ID
-------------------- ---------------------------------------- ----------
wallet_root                                                            0
tde_configuration                                                      0
tde_configuration                                                      2
tde_configuration                                                      3
  • sqlnet.ora
 cat $ORACLE_HOME/network/admin/sqlnet.ora
cat: /u01/app/oracle/product/19.0.0/dbhome_1/network/admin/sqlnet.ora: No such file or directory
  • wallet 状態確認(キーストア作成前)
SQL> set line 200 pages 100 tab off
SQL> col wrl_parameter for a60
SQL> select * from v$encryption_wallet;

WRL_TYPE             WRL_PARAMETER                                                STATUS                         WALLET_TYPE          WALLET_OR KEYSTORE FULLY_BAC     CON_ID
-------------------- ------------------------------------------------------------ ------------------------------ -------------------- --------- -------- --------- ----------
FILE                 /u01/app/oracle/admin/cdb1/wallet                            NOT_AVAILABLE                  UNKNOWN              SINGLE    NONE     UNDEFINED          1
FILE                                                                              NOT_AVAILABLE                  UNKNOWN              SINGLE    UNITED   UNDEFINED          2
FILE                                                                              NOT_AVAILABLE                  UNKNOWN              SINGLE    UNITED   UNDEFINED          3

キーストア作成

キーストア配置先作成

$ mkdir -p /u01/app/oracle/admin/cdb1/wallet
$ ls -dl /u01/app/oracle/admin/cdb1/wallet
drwxr-xr-x. 2 oracle oinstall 6 Nov  7 08:45 /u01/app/oracle/admin/cdb1/wallet
  • sqlnet.ora作成
cat << EOF > $ORACLE_HOME/network/admin/sqlnet.ora

ENCRYPTION_WALLET_LOCATION = 
 (SOURCE=
  (METHOD=FILE)
   (METHOD_DATA=
    (DIRECTORY=/u01/app/oracle/admin/cdb1/wallet)))
EOF

キーストア作成

SQL> ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/oracle/admin/cdb1/wallet' IDENTIFIED BY "Welcome1234!Welcome1234!";

keystore altered.

自動ログインウォレット作成

SQL> ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/u01/app/oracle/admin/cdb1/wallet'IDENTIFIED BY "Welcome1234!Welcome1234!";

keystore altered.
  • hash確認(キーストア作成後)
$ ls -l /u01/app/oracle/admin/cdb1/wallet/*
-rw-------. 1 oracle oinstall 2600 Nov  7 08:54 /u01/app/oracle/admin/cdb1/wallet/cwallet.sso
-rw-------. 1 oracle oinstall 2555 Nov  7 08:52 /u01/app/oracle/admin/cdb1/wallet/ewallet.p12
$ md5sum /u01/app/oracle/admin/cdb1/wallet/*
acf747b5d50a0b183f4defc5c9f7cd7c  /u01/app/oracle/admin/cdb1/wallet/cwallet.sso
9ba05e5df3cbc3f058a50cdc05b79dfb  /u01/app/oracle/admin/cdb1/wallet/ewallet.p12
  • wallet 状態確認(キーストア作成後)
SQL> set line 200 pages 100 tab off
SQL> col wrl_parameter for a60
SQL> select * from v$encryption_wallet;

WRL_TYPE             WRL_PARAMETER                                                STATUS                         WALLET_TYPE          WALLET_OR KEYSTORE FULLY_BAC     CON_ID
-------------------- ------------------------------------------------------------ ------------------------------ -------------------- --------- -------- --------- ----------
FILE                 /u01/app/oracle/admin/cdb1/wallet/                           OPEN_NO_MASTER_KEY             AUTOLOGIN            SINGLE    NONE     UNDEFINED          1
FILE                                                                              OPEN_NO_MASTER_KEY             AUTOLOGIN            SINGLE    UNITED   UNDEFINED          2
FILE                                                                              OPEN_NO_MASTER_KEY             AUTOLOGIN            SINGLE    UNITED   UNDEFINED          3

マスター鍵作成(CDB)

SQL> select * from V$ENCRYPTION_KEYS;

no rows selected


SQL> ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY 
USING TAG 'tag0'
FORCE KEYSTORE
IDENTIFIED BY "Welcome1234!Welcome1234!"
WITH BACKUP USING 'backup0';

keystore altered.

マスター鍵作成(PDB)

SQL> alter session set container = pdb1;
SQL> show con_name
CON_NAME
------------------------------
PDB1

SQL> ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY 
USING TAG 'tag1'
FORCE KEYSTORE
IDENTIFIED BY "Welcome1234!Welcome1234!"
WITH BACKUP USING 'backup1';
  • hash確認(マスター鍵作成後)
$ ls -l /u01/app/oracle/admin/cdb1/wallet/*
-rw-------. 1 oracle oinstall 5864 Nov  7 09:14 /u01/app/oracle/admin/cdb1/wallet/cwallet.sso
-rw-------. 1 oracle oinstall 2555 Nov  7 09:06 /u01/app/oracle/admin/cdb1/wallet/ewallet_2022110709060456_backup0.p12
-rw-------. 1 oracle oinstall 4171 Nov  7 09:14 /u01/app/oracle/admin/cdb1/wallet/ewallet_2022110709142272_backup1.p12
-rw-------. 1 oracle oinstall 5819 Nov  7 09:14 /u01/app/oracle/admin/cdb1/wallet/ewallet.p12
$ md5sum /u01/app/oracle/admin/cdb1/wallet/*
a1840d67634bb173d30f7521081d6d42  /u01/app/oracle/admin/cdb1/wallet/cwallet.sso
9ba05e5df3cbc3f058a50cdc05b79dfb  /u01/app/oracle/admin/cdb1/wallet/ewallet_2022110709060456_backup0.p12
74be09571afa669e0ba083f4b4c952a2  /u01/app/oracle/admin/cdb1/wallet/ewallet_2022110709142272_backup1.p12
2d1a2ee92aeedf74bd418791eb506d49  /u01/app/oracle/admin/cdb1/wallet/ewallet.p12
  • マスター鍵確認(CDB, PDB)
SQL> col key_id for a60
SQL> col tag for a10
SQL> col CREATOR_PDBNAME for a10
SQL> select key_id, creation_time, activation_time, tag, CREATOR_PDBNAME from V$ENCRYPTION_KEYS;

KEY_ID                                                       CREATION_TIME                                                               ACTIVATION_TIME                                                             TAG        CREATOR_PD
------------------------------------------------------------ --------------------------------------------------------------------------- --------------------------------------------------------------------------- ---------- ----------
AU1LHvHFk0+Iv8/79pk6GdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA         07-NOV-22 09.06.04.730520 AM +00:00                                         07-NOV-22 09.06.04.730523 AM +00:00                                         tag0       CDB$ROOT
AewNE+jX8U+evxCHpOnIzj8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA         07-NOV-22 09.14.22.919688 AM +00:00                                         07-NOV-22 09.14.22.919690 AM +00:00                                         tag1       PDB1

暗号化表領域作成

SQL> alter session set container = pdb1;
SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u02/oradata/CDB1/pdb1/system01.dbf
/u02/oradata/CDB1/pdb1/sysaux01.dbf
/u02/oradata/CDB1/pdb1/users01.dbf
/u02/oradata/CDB1/pdb1/undo_fix_10m.dbf

SQL> CREATE TABLESPACE ts_aes128 DATAFILE '/u02/oradata/CDB1/pdb1/ts_aes128.dbf' SIZE 10M ENCRYPTION USING 'AES128' DEFAULT STORAGE(ENCRYPT);

Tablespace created.

SQL> select ts#, name from v$datafile;

       TS# NAME
---------- ----------------------------------------
         0 /u02/oradata/CDB1/pdb1/system01.dbf
         1 /u02/oradata/CDB1/pdb1/sysaux01.dbf
         5 /u02/oradata/CDB1/pdb1/users01.dbf
         7 /u02/oradata/CDB1/pdb1/undo_fix_10m.dbf
         8 /u02/oradata/CDB1/pdb1/ts_aes128.dbf
SQL> set line 300 pages 100 tab off
SQL> col name for a40
SQL> select e.ts#, d.name, e.encryptionalg, e.encryptedts, e.encryptedkey, e.masterkeyid, e.key_version, e.status, e.con_id 
from V$ENCRYPTED_TABLESPACES e, v$datafile d
where e.ts#=d.ts#
;

       TS# NAME                                     ENCRYPT ENC ENCRYPTEDKEY                                                     MASTERKEYID                      KEY_VERSION STATUS         CON_ID
---------- ---------------------------------------- ------- --- ---------------------------------------------------------------- -------------------------------- ----------- ---------- ----------
         8 /u02/oradata/CDB1/pdb1/ts_aes128.dbf     AES128  YES 6425018322B6C79A1DAA97FD459DE36500000000000000000000000000000000 EC0D13E8D7F14F9EBF1087A4E9C8CE3F           0 NORMAL              3
  • データ作成
SQL> grant dba to user01 identified by "Welcome123!Welcome123!";
SQL> create table user01.t1 ( c1 number(10), c2 varchar2(100)) tablespace ts_aes128;
SQL> insert into user01.t1 values (1, 'TEST');
SQL> commit;

暗号化アルゴリズム変更

SQL> alter session set container = pdb1;
SQL> alter tablespace ts_aes128 encryption online using 'AES256' rekey;


Tablespace altered.
SQL> set line 300 pages 100 tab off
SQL> col name for a40
SQL> select e.ts#, d.name, e.encryptionalg, e.encryptedts, e.encryptedkey, e.masterkeyid, e.key_version, e.status, e.con_id 
from V$ENCRYPTED_TABLESPACES e, v$datafile d
where e.ts#=d.ts#;

       TS# NAME                                     ENCRYPT ENC ENCRYPTEDKEY                                                     MASTERKEYID                      KEY_VERSION STATUS         CON_ID
---------- ---------------------------------------- ------- --- ---------------------------------------------------------------- -------------------------------- ----------- ---------- ----------
         8 /u02/oradata/CDB1/pdb1/ts_aes128.dbf     AES256  YES 2B1E5943759E3D48A23A56A029DFE958D317BFBBB34D8FB5D7304466E5F0739E EC0D13E8D7F14F9EBF1087A4E9C8CE3F           1 NORMAL              3
  • マスター鍵確認(PDB)
SQL> col key_id for a60
SQL> col tag for a10
SQL> col CREATOR_PDBNAME for a10
SQL> select key_id, creation_time, activation_time, tag, CREATOR_PDBNAME from V$ENCRYPTION_KEYS;

KEY_ID                                                       CREATION_TIME                                                               ACTIVATION_TIME                                                             TAG        CREATOR_PD
------------------------------------------------------------ --------------------------------------------------------------------------- --------------------------------------------------------------------------- ---------- ----------
AewNE+jX8U+evxCHpOnIzj8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA         07-NOV-22 09.14.22.919688 AM +00:00                                         07-NOV-22 09.14.22.919690 AM +00:00                                         tag1       PDB1
[oracle@db01 ~]$ ls -l /u01/app/oracle/admin/cdb1/wallet/*
-rw-------. 1 oracle oinstall 5864 Nov  7 09:14 /u01/app/oracle/admin/cdb1/wallet/cwallet.sso
-rw-------. 1 oracle oinstall 2555 Nov  7 09:06 /u01/app/oracle/admin/cdb1/wallet/ewallet_2022110709060456_backup0.p12
-rw-------. 1 oracle oinstall 4171 Nov  7 09:14 /u01/app/oracle/admin/cdb1/wallet/ewallet_2022110709142272_backup1.p12
-rw-------. 1 oracle oinstall 5819 Nov  7 09:14 /u01/app/oracle/admin/cdb1/wallet/ewallet.p12
[oracle@db01 ~]$ md5sum /u01/app/oracle/admin/cdb1/wallet/*
a1840d67634bb173d30f7521081d6d42  /u01/app/oracle/admin/cdb1/wallet/cwallet.sso
9ba05e5df3cbc3f058a50cdc05b79dfb  /u01/app/oracle/admin/cdb1/wallet/ewallet_2022110709060456_backup0.p12
74be09571afa669e0ba083f4b4c952a2  /u01/app/oracle/admin/cdb1/wallet/ewallet_2022110709142272_backup1.p12
2d1a2ee92aeedf74bd418791eb506d49  /u01/app/oracle/admin/cdb1/wallet/ewallet.p12

ハッシュ値が 2d1a2ee92aeedf74bd418791eb506d49 から変わらない

参考

透過的データ暗号化の構成

以上

VNCでGnome Desktopを起動するメモ

目次

リモートサーバーの準備

Gnomeインストール

$ sudo su -
#  yum group list hidden
・・・
GNOME
・・・

# yum -y groupinstall GNOME

VNCサーバーインストール

# yum -y install vnc-server

VNCサーバーの起動・停止

# exit
$ whoami
opc

$ vncserver 

You will require a password to access your desktops.

Password:    <---- パスワードの入力
Verify:    <---- パスワードの入力
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
xauth:  file /home/opc/.Xauthority does not exist

New 'bast0:1 (opc)' desktop is bast0:1

Creating default startup script /home/opc/.vnc/xstartup
Creating default config /home/opc/.vnc/config
Starting applications specified in /home/opc/.vnc/xstartup
Log file is /home/opc/.vnc/bast0:1.log

$ vncserver -list

TigerVNC server sessions:

X DISPLAY #     PROCESS ID
:1              16359

$ vncserver -kill :1
Killing Xvnc process ID 16359

VNCサーバー設定

$ cp -ip .vnc/xstartup .vnc/xstartup.bk
$ vi .vnc/xstartup
----
#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
# /etc/X11/xinit/xinitrc    <---- コメントアウト
exec gnome-session    <---- 追記

# Assume either Gnome or KDE will be started by default when installed
# We want to kill the session automatically in this case when user logs out. In case you modify
# /etc/X11/xinit/Xclients or ~/.Xclients yourself to achieve a different result, then you should
# be responsible to modify below code to avoid that your session will be automatically killed
if [ -e /usr/bin/gnome-session -o -e /usr/bin/startkde ]; then
    vncserver -kill $DISPLAY
fi
----

$ diff .vnc/xstartup .vnc/xstartup.bk
5,7c5
< # /etc/X11/xinit/xinitrc
< exec gnome-session
<
---
> /etc/X11/xinit/xinitrc

VNCサーバー起動

$ vncserver

New 'bast0:1 (opc)' desktop is bast0:1

Starting applications specified in /home/opc/.vnc/xstartup
Log file is /home/opc/.vnc/bast0:1.log

$ cat /home/opc/.vnc/bast0:1.log

Xvnc TigerVNC 1.8.0 - built Nov 10 2020 08:31:57
Copyright (C) 1999-2017 TigerVNC Team and many others (see README.txt)
See http://www.tigervnc.org for information on TigerVNC.
Underlying X server release 12004000, The X.Org Foundation


Wed Oct 26 14:16:27 2022
 vncext:      VNC extension running!
 vncext:      Listening for VNC connections on all interface(s), port 5901   <---- Port番号を確認
 vncext:      created VNC server for screen 0

Wed Oct 26 14:16:31 2022
 ComparingUpdateTracker: 0 pixels in / 0 pixels out
 ComparingUpdateTracker: (1:nan ratio)

ssh ポートフォワーディング設定

  • ローカルの5901 Port を、リモートの5901 Port に転送する

ローカルでVNCクライアント起動し接続

  • 設定したパスワードを入力

Gnome デスクトップの表示

GUIアプリケーションの起動

以上

Python からAPIで Google Calendar を操作する

目次

進め方

Python Quickstart  |  Google Calendar API  |  Google Developers に沿って行う。

手順

プロジェクトの作成

  • プロジェクトのプルダウンから新規のプロジェクトを作成

  • 新しいプロジェクトから、MyCalendar プロジェクトを作成

Google Calendar API の有効化

  • 左のメニューから 有効なAPIとサービス を選択

  • APIとサービスの有効化

OAuth同意

  • APIを認証するために OAuth認証に同意する
  • Google Workspace を利用していない場合は 外部 のみが選択できる

  • OAuth同意画面 ではアプリ名 に任意の名称を入力し、
    ユーザーサポートメール、デベロッパーの連絡先情報 には自信の Gmail アドレスを入力

  • スコープ では何も入力せず 保存して次へ

  • テストユーザー 自身の Gmailアドレスを追加

  • 概要 で結果を確認

認証情報の作成

  • 認証情報から CREATE CREDENTIALS をクリック

  • OAuthクライアントID を選択

  • アプリケーションの種類に デスクトップアプリ を選択

  • JSONをダウンロード

pipでライブラリをインストール

# pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

サンプルコードの配置

from __future__ import print_function

import datetime
import os.path

from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/calendar.readonly']


def main():
    """Shows basic usage of the Google Calendar API.
    Prints the start and name of the next 10 events on the user's calendar.
    """
    creds = None
    # The file token.json stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    # If there are no (valid) credentials available, let the user log in.
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        # Save the credentials for the next run
        with open('token.json', 'w') as token:
            token.write(creds.to_json())

    try:
        service = build('calendar', 'v3', credentials=creds)

        # Call the Calendar API
        now = datetime.datetime.utcnow().isoformat() + 'Z'  # 'Z' indicates UTC time
        print('Getting the upcoming 10 events')
        events_result = service.events().list(calendarId='primary', timeMin=now,
                                              maxResults=10, singleEvents=True,
                                              orderBy='startTime').execute()
        events = events_result.get('items', [])

        if not events:
            print('No upcoming events found.')
            return

        # Prints the start and name of the next 10 events
        for event in events:
            start = event['start'].get('dateTime', event['start'].get('date'))
            print(start, event['summary'])

    except HttpError as error:
        print('An error occurred: %s' % error)


if __name__ == '__main__':
    main()
  • ダウンロードしたJSON をcredentials.json というファイル名で、サンプルコードと同じディレクトリに配置
# ls -l quickstart.py credentials.json 
-rw-r--r-- 1 root root  406 Aug 20 05:06 credentials.json
-rw-r--r-- 1 root root 2611 Aug 20 05:07 quickstart.py

サンプルコードの実行

  • サンプルコードの実行
# python /mnt/quickstart.py
  • 初回実行時は、ブラウザで認証画面が開く(1つ目はVSCodeから実行した場合の確認画面)

  • 続行を選択

  • さらに続行を選択

  • ブラウザに "The authentication flow has completed. You may close this window."と表示される

  • サンプルコードを実行したターミナルに戻ると、結果が取得されている

Getting the upcoming 10 events
2022-08-23 <予定1>
2022-08-26 <予定2>
2022-08-26 <予定3>
2022-09-17 <予定4>
2022-09-18 <予定5>
2022-10-08 <予定6>
2022-10-18 <予定7>
2022-10-22 <予定8>
2022-11-18 <予定9>
2022-12-18 <予定10>
# ls -l quickstart.py credentials.json token.json
-rw-r--r-- 1 root root  406 Aug 20 05:06 credentials.json
-rw-r--r-- 1 root root 2611 Aug 20 05:07 quickstart.py
-rw-r--r-- 1 root root  650 Aug 21 11:24 token.json

参考

pam_fally2 でログイン失敗回数の制限

※こちらのページは断片的な情報のメモです。
※実際は、ここに記載されている設定以外も挙動に影響します。

sshからのログイン失敗回数を制限したい

設定ファイル

  • /etc/pam.d/sshd
    • pam_tally2 を使用してパスワード複数回失敗場合の動作を制御する
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
auth [success=1 default=ignore] pam_succeed_if.so user in user1
# auth       required     pam_tally2.so deny=5 onerr=fail lock_time=600 serialize
auth       required     pam_tally2.so deny=2 onerr=fail unlock_time=15 serialize

pam_tally2のパラメーター

  • deny=n

    • Deny access if tally for this user exceeds n.
  • lock_time=n

    • Always deny for n seconds after failed attempt.
  • unlock_time=n

    • Allow access after n seconds after failed attempt. If this option is used the user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts. Otherwise the account is locked until the lock is removed by a manual intervention of the system administrator.
  • auth [success=1 default=ignore] pam_succeed_if.so user in user1:user2:user3
    • ログインに何度も失敗してもシステムがユーザーをロックアウトしないようにするには、/etc/pam.d/system-auth と /etc/pam.d/password-authの両方で、pam_faillock が初めて呼び出される行のすぐ上に次の行を追加します。また、user1、user2、よび user3を実際のユーザー名に置き換えてください。

失敗回数の確認・リセット

## 確認
pam_tally2 -u <user>
Login           Failures Latest failure     From
<user>            4    07/25/22 20:28:34  gateway

## リセット
pam_tally2 -u <user> --reset

参考

第4章 ツールとサービスでシステムを強化する Red Hat Enterprise Linux 7 | Red Hat Customer Portal
* 4.1.2. アカウントのロック

pam_tally2(8) - Linux manual page

【SSH】任意の回数ログイン失敗でアカウントをロックする方法 | server-memo.net

Dockerコンテナで systemctl で sshd起動して接続

コンテナ起動

docker run -d --rm -p 127.0.0.1:10022:22 --privileged oraclelinux:7.9 /sbin/init

コンテナに接続

  • コンテナのssh関連設定を実施
docker exec -it <container_name> bash
  • コンテナ内で
useradd newuser
passwd newuser

コンテナにssh接続

  • ホストからコンテナにssh
ssh newuser@localhost -p 10022

以上

yumリポジトリが無い環境に必要なパッケージをダウンロードして持込みたい時のメモ

目次

概要

  • yumリポジトリが無い環境に、必要なパッケージをダウンロードして持ち込もうとした場合、
    依存関係のあるパッケージを調べ、それを全てダウンロードするのは結構大変
  • パッケージ・バージョンまでケアしようとすると、もう少し考えることはあるが、
    おおよそ楽にできる方法を思いついたのでメモ
  • Docker でminimal install の環境を簡単に用意することで、
    yum によるパッケージダウンロード、依存関係の確認、インストールの検証が簡単にできる。

docker image のダウンロードと、コンテナの起動

  • ここでは oracle linux のイメージを利用
  • 7-slim は最低限yum が使えるだけのパッケージが入った、ほぼ minimal install されたイメージ
  • docker を起動する環境の CPU アーキテクチャ は、パッケージ持ち込み先の環境に合わせる  
$ docker pull oraclelinux:7-slim
$ docker run -it --rm -v "$PWD:/mnt" oraclelinux:7-slim

Docker Hub
Differences between oraclelinux:7 and oraclelinux:7-slim For images that want an Oracle Linux 7 user space, Oracle recommends using oraclelinux:7-slim as the base layer as it contains just enough packages for yum to be able to install more packages. The oraclelinux:7 images is based on the package set of what would be installed on a bare-metal server when performing a minimal install of Oracle Linux.

  • OSバージョンの確認
$ cat /etc/os-release

yum リポジトリの確認

  • yum リポジトリの参照先を確認
  • 変更の必要があれば、/etc/yum.repo/ のファイルを編集
# yum repoinfo
Loaded plugins: ovl
ol7_latest                                                                                                                | 3.6 kB  00:00:00     
(1/3): ol7_latest/aarch64/group_gz                                                                                        | 133 kB  00:00:00     
(2/3): ol7_latest/aarch64/updateinfo                                                                                      | 2.2 MB  00:00:00     
(3/3): ol7_latest/aarch64/primary_db                                                                                      |  93 MB  00:00:08     
Repo-id      : ol7_latest/aarch64
Repo-name    : Oracle Linux 7Server Latest (aarch64)
Repo-revision: 1657639913
Repo-updated : Tue Jul 12 15:31:59 2022
Repo-pkgs    : 17228
Repo-size    : 38 G
Repo-baseurl : https://yum.oracle.com/repo/OracleLinux/OL7/latest/aarch64/
Repo-expire  : 21600 second(s) (last: Wed Jul 13 14:36:20 2022)
  Filter     : read-only:present
Repo-excluded: 5290
Repo-filename: /etc/yum.repos.d/oracle-linux-ol7.repo

repolist: 17228

現在のrpm リストを取得

  • ファイルを取得できる様、ホストのディレクトリをマウントした /mntcd しておく
# cd /mnt
# rpm -qa | sort > rpm_list_full_before.txt
# rpm -qa --queryformat "%{name}.%{arch}¥n" | sort > rpm_list_name-arch_before.txt

yum パッケージをダウンロード

  • ここでは java-1.8.0-openjdk と 必要な依存パッケージをダウンロード
# yum install --downloadonly --downloaddir=./ java-1.8.0-openjdk
# ls
acl-2.2.51-15.el7.aarch64.rpm                      libXext-1.3.3-3.el7.aarch64.rpm
alsa-lib-1.1.8-1.el7.aarch64.rpm                   libXfixes-5.0.3-1.el7.aarch64.rpm
....

依存関係のチェック・インストール

# rpm --test -ivh *.rpm
Preparing...                          ################################# [100%]
# rpm -ivh *.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:libjpeg-turbo-1.2.90-8.el7       ################################# [  1%]
   2:libpng-2:1.5.13-8.el7            ################################# [  2%]
   3:freetype-2.8-14.el7_9.1          ################################# [  3%]
   ....
   99:java-1.8.0-openjdk-headless-1:1.8################################# [ 99%]
   100:java-1.8.0-openjdk-1:1.8.0.332.b0################################# [100%]

rpm リストを再度取得

# rpm -qa | sort > rpm_list_full_after.txt
# rpm -qa --queryformat "%{name}.%{arch}¥n" | sort > rpm_list_name-arch_after.txt
  • 追加されたパッケージリストを確認
# grep -x -v -f rpm_list_full_before.txt rpm_list_full_after.txt > rpm_list_add.txt

この後の作業

  • この後は、ダウンロードした rpmrpm リストファイルを目的の環境に持ち込み
  • 持ち込み先の環境で取得した、rpmリストファイルと、持ち込んだリストファイルを比較
  • 必要な rpm ファイルのみをインストール

参考

yum を使用して、パッケージをインストールせずにダウンロードだけ行う - Red Hat Customer Portal

以上

OCI - Compute Instance 起動・停止スクリプトのサンプル

sample

o=${1^^}
ocid="ocid1.instance.oc1.ap-tokyo-1.abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"

function get_status(){

        s=`oci compute instance get --instance-id ${ocid}| jq -r '.data."lifecycle-state" '`
        echo $s

}


function start_instance(){
        oci compute instance action --action start --instance-id ${ocid}
}

function stop_instance(){
        oci compute instance action --action stop --instance-id ${ocid}
}

if [ ${o} == "STATUS" ]; then

        get_status

elif [ ${o} == "START"  ]; then

        start_instance

elif [ ${o} == "STOP"  ]; then

        stop_instance

else

        echo "Usage: $0 [STATUS|START|STOP]"

fi

参考

action — OCI CLI Command Reference 3.10.5 documentation