1. Oracle Autonomous Linuxの発表
2019年9月に開催された「Oracle OpenWorld 2019」で、驚いたトピックの1つが「Oracle Autonomous Linuxの発表」だ。Autonomousが近年Oracle社のキーメッセージになっているとはといえ、まさかLinuxだとは思わなかった。
- In an Industry First, Oracle Brings Autonomous Operation to Linux
- Oracle Autonomous Linux for Oracle Cloud
- Getting Started with Oracle Autonomous Linux
いずれの記事も説明は抽象的だが、おそらく以下のようなスペックだと思われる。そこで実際に触って機能をあきらかにしたい。
- Oracle Autonomous LinuxはOracle Cloud Infrastructureで提供
- 自動RPMパッケージ・アップデート
- 自動セキュリティパッチ適用
- Kspliceによるゼロ・ダウンタイム・アップグレード
2. Oracle Autonomous Linuxを作成する
Oracle Autonomous Linuxインスタンスを作成してみよう。マニュアルはOracle Cloud Infrastructure ComputeのMarketplaceページにある(要Oracle Cloud Infrastructureアカウント)。
ただし、現時点のマニュアルは難解でタイポも散見される。今後の機能向上とともに、マニュアルも改善されることを期待したい。
2020/05時点では以下のページが最良のマニュアルのようだ。
- Getting Started: Deploying and Configuring Oracle Autonomous Linux on Oracle Cloud Infrastructure
- Tips for Using Oracle Autonomous Linux on Oracle Cloud
愚痴モードで言うなら、少なくとも2019/9/7のファーストバージョンでは、IAMの構文に複数の間違いがあり、構文エラーを直すのに時間がかかった。使わせないために、わざとやっていると思うほど。
2-1. 設定の流れ
マニュアルに書かれている設定手順は以下のとおり。これはインスタンス・プリンシパルを利用する手順で、ほかにAPIキーを利用する手順もある。
1. Notifications(通知)のセットアップ
- トピックの作成
- トピックにemailアドレスの関連付け
2. インスタンス・プリンシパルのセットアップ
- ダイナミック・グループの作成
- ダイナミック・グループにポリシー割り当て
3. Oracle Autonomous Linuxインスタンスの作成
- Oracle Autonomous Linuxイメージを使用してインスタンスを作成
- al-configコマンドでインスタンスとトピックを関連付け
2-2. Notifications(通知)のセットアップ
メッセージング・サービスのNotifications(Amazon SQS相当)をセットアップする。
- OCI管理コンソールのメニューから**[Application Integration]-[Notifications]**を選択する。
- **[Create Topic]**をクリックしてトピックを作成する。今回は「AL_Notifications」という名前で作成。
- 作成したトピックをクリックして詳細を表示する。
- **[Create Subscription]**をクリックしてサブスクリプションを作成する。今回は
通知先emailアドレスを設定する。email以外にSlackやPagerDuty、URLも指定できる。 - サブスクリプションを作成すると、通知先のアドレスにメールが送信される。送信されたメール内のリンクをクリックして有効化する。有効化すると、ステータスがPENDINGからACTIVEに変わる。
2-3. インスタンス・プリンシパルのセットアップ
Oracle Autonomous Linuxインスタンスが存在するコンパートメント内からメッセージを通知できるように、ダイナミック・グループとポリシーを構成する。
- OCI管理コンソールから**[Identity]-[Dynamic Groups]**を選択する。
- 以下の内容でダイナミック・グループを作成する。
項目 | 値 |
---|---|
NAME | AL_Notifications_comp1_grp |
DESCRIPTION | for Autonomous Linux Notifications |
Matching Rules | ALL {instance.compartment.id = '<compartment OCID>'} |
3.OCI管理コンソールから**[Identity]-[Policies]**を選択する。
4.以下の内容でポリシーを作成する。
項目 | 値 |
---|---|
NAME | AL_Notifications_pol |
DESCRIPTION | for Autonomous Linux Notifications |
Policy Statements | Allow dynamic-group <dynamic group name> to use ons-topics in compartment <topic compartment name> where request.permission='ONS_TOPIC_PUBLISH' |
2-4. Oracle Autonomous Linuxインスタンスの作成
インスタンスの作成方法は、通常のComputeインスタンスと同じだ。以前はOracle Imagesから選択していたが、現在はPlatform Imagesから選択する。
-
作成が完了したら、次のコマンドを実行してトピックを関連付ける。インスタンス作成時のUser Dataで指定してもよい。成功すると登録したメールアドレスにメールが送信される。OCIDは、サブスクリプションではなくトピックなので気をつけること。
$ sudo al-config -T <topic OCID>
インスタンス作成時のUser Dataで指定するときは以下のようにするとよい。
#cloud-config
timezone: Asia/Tokyo
locale: ja_JP.utf8
runcmd:
- systemctl restart rsyslog
- al-config -T <topic OCID>
3. Oracle Autonomous Linuxの設定を調べる
まずはOSの設定を確認する。ディストリビューションのバージョンや起動しているサービスなど、基本的な設定を確認する。
3-1. OS基本設定
ベースはOracle Linux 7.7で、UEK Release 5カーネルを使用している。
$ cat /etc/oracle-release
Oracle Linux Server release 7.7
$ uname -a
Linux <ホスト名> 4.14.35-1902.4.8.el7uek.x86_64 #2 SMP Sun Aug 4 22:25:18 GMT 2019 x86_64 x86_64 x86_64 GNU/Linux
#ファイアウォール有効
$ systemctl is-active firewalld.service
active
#SELinux有効
$ getenforce
Enforcing
3-2. 自動起動するサービス
デフォルトで起動しているサービスを調べる。
$ systemctl list-units --type=service
有効になっているサービス一覧(クリックすると開く)
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting
al-config.service loaded active exited Autonomous Linux configuratio
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
bnxt-set-channel.service loaded active exited (null)
chronyd.service loaded active running NTP client/server
cloud-config.service loaded active exited Apply the settings specified
cloud-final.service loaded active exited Execute cloud user/final scri
cloud-init-local.service loaded active exited Initial cloud-init job (pre-n
cloud-init.service loaded active exited Initial cloud-init job (metad
crond.service loaded active running Command Scheduler
dbus.service loaded active running D-Bus System Message Bus
firewalld.service loaded active running firewalld - dynamic firewall
getty@tty1.service loaded active running Getty on tty1
gssproxy.service loaded active running GSSAPI Proxy Daemon
irqbalance.service loaded active running irqbalance daemon
iscsi-boot-volume.service loaded active exited Set boot volume startup to on
iscsi-shutdown.service loaded active exited Logout off all iSCSI sessions
iscsi.service loaded active exited Login and scanning of iSCSI d
iscsid.service loaded active running Open-iSCSI
kdump.service loaded active exited Crash recovery kernel arming
kmod-static-nodes.service loaded active exited Create list of required stati
libstoragemgmt.service loaded active running libstoragemgmt plug-in server
lvm2-lvmetad.service loaded active running LVM2 metadata daemon
lvm2-monitor.service loaded active exited Monitoring of LVM2 mirrors, s
network.service loaded active running LSB: Bring up/down networking
oci-yum-repo-mapper.service loaded active exited Oracle Cloud Infrastructure Y
ocid.service loaded active running Oracle Cloud Infrastructure u
oracle-cloud-agent-updater.service loaded active running Oracle Cloud Infrastruc
oracle-cloud-agent.service loaded active running Oracle Cloud Infrastructure a
polkit.service loaded active running Authorization Manager
rhel-dmesg.service loaded active exited Dump dmesg to /var/log/dmesg
rhel-domainname.service loaded active exited Read and set NIS domainname f
rhel-import-state.service loaded active exited Import network configuration
rhel-readonly.service loaded active exited Configure read-only root supp
rhnsd.service loaded active running LSB: Starts the Spacewalk Dae
rngd.service loaded active running Hardware RNG Entropy Gatherer
rpcbind.service loaded active running RPC bind service
rsyslog.service loaded active running System Logging Service
selinux-policy-migrate-local-changes@targeted.service loaded active exited Migr
serial-getty@ttyS0.service loaded active running Serial Getty on ttyS0
smartd.service loaded active running Self Monitoring and Reporting
sshd.service loaded active running OpenSSH server daemon
sysstat.service loaded active exited Resets System Activity Logs
systemd-hwdb-update.service loaded active exited Rebuild Hardware Database
systemd-journal-catalog-update.service loaded active exited Rebuild Journal Cat
systemd-journal-flush.service loaded active exited Flush Journal to Persistent
systemd-journald.service loaded active running Journal Service
systemd-logind.service loaded active running Login Service
systemd-machine-id-commit.service loaded active exited Commit a transient machi
systemd-random-seed.service loaded active exited Load/Save Random Seed
systemd-remount-fs.service loaded active exited Remount Root and Kernel File
systemd-sysctl.service loaded active exited Apply Kernel Variables
systemd-tmpfiles-setup-dev.service loaded active exited Create Static Device No
systemd-tmpfiles-setup.service loaded active exited Create Volatile Files and D
systemd-udev-settle.service loaded active exited udev Wait for Complete Device
systemd-udev-trigger.service loaded active exited udev Coldplug all Devices
systemd-udevd.service loaded active running udev Kernel Device Manager
systemd-update-done.service loaded active exited Update is Completed
systemd-update-utmp.service loaded active exited Update UTMP about System Boot
systemd-user-sessions.service loaded active exited Permit User Sessions
systemd-vconsole-setup.service loaded active exited Setup Virtual Console
tuned.service loaded active running Dynamic System Tuning Daemon
vdo.service loaded active exited VDO volume services
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
66 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
Autonomous LinuxだけでActiveなサービスは以下のとおり。ocid.serviceはOracle Linux 7にもあるので、al-config.serviceがAutonomous Linux固有のサービスだと思われる。
- al-config.service:Autonomous Linux configuration service
- ocid.service:Oracle Cloud Infrastructure utilities daemon
- serial-getty@ttyS0.service:Serial Getty on ttyS0
- systemd-hwdb-update.service:Rebuild Hardware Database
3-3. ファイアウォール設定
ファイアウォール設定はOracle Linux 7と同じだ。
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
3-4. Yumリポジトリ設定
Yumリポジトリは「Autonomous Linux専用」と「ユーザー空間用Ksplice(glibcとopenssl)」が有効になっている。
$ sudo yum repolist enabled
Loaded plugins: langpacks, ulninfo
repo id repo name status
★al7/x86_64 Autonomous Linux 7Server (x86_64) 1,360
ol7_x86_64_userspace_ksplice Ksplice aware userspace packages for Oracle 432
repolist: 1,783
参考までにOracle Linux 7.7では以下のようになっている。al7リポジトリのパッケージ数が1,360であるのに対し、ol7_latestが15,430と差が大きい。al7リポジトリは、提供しているパッケージを絞っているようだ。
repo id repo name
ol7_UEKR5/x86_64 Latest Unbreakable Enterprise Kernel Release 5 for Oracle Linux 7Se 162
ol7_addons/x86_64 Oracle Linux 7Server Add ons (x86_64) 370
ol7_developer/x86_64 Oracle Linux 7Server Development Packages (x86_64) 980
ol7_developer_EPEL/x86_64 Oracle Linux 7Server Development Packages (x86_64) 28,157
ol7_ksplice Ksplice for Oracle Linux 7Server (x86_64) 1,093
★ol7_latest/x86_64 Oracle Linux 7Server Latest (x86_64) 15,430
ol7_oci_included/x86_64 Oracle Software for OCI users on Oracle Linux 7Server (x86_64) 33
ol7_optional_latest/x86_64 Oracle Linux 7Server Optional Latest (x86_64) 11,437
ol7_software_collections/x86_64 Software Collection Library release 3.0 packages for Oracle Linux 7 14,024
repolist: 71,686
list availableでインストール可能なパッケージ数をカウントしてみると、標準リポジトリだけでも差が大きい。al7リポジトリにはtreeコマンドも含まれていなかった。
Oracle Autonomous Linuxで実行
# yum --disablerepo=* --enablerepo=al7 list available | wc -l
227
Oracle Linux 7.7で実行
# yum --disablerepo=* --enablerepo=ol7_latest list available | wc -l
4928
3-5. インストールされているパッケージ
インストールされているパッケージでめぼしいものを探してみる。--lastを指定すると、新しくインストールしたパッケージから降順に表示できる。
なお、日を変えてインスタンスを作成したところバラツキがあった。Autonomous Linuxは絶賛開発中なので、実行時期によって変わるのだろう。
気になる部分に★を付けた。Autonomous Linux専用サービスのal-config、PythonのOracle DB/OCI系のライブラリ、Oracleインスタント・クライアント、tunedのOCI専用プロファイルあたりだろうか。
# rpm -qa --last |less
★al-config-1.0-1.0.26.el7.noarch Sun Sep 8 12:52:15 2019
python-oci-cli-2.6.3-1.el7.noarch Sun Sep 8 12:52:13 2019
python2-jmespath-0.9.3-1.el7.noarch Sun Sep 8 12:52:11 2019
python-oci-sdk-2.3.3-1.el7.x86_64 Sun Sep 8 12:52:11 2019
pytz-2016.10-2.el7.noarch Sun Sep 8 12:52:03 2019
python2-packaging-16.8-5.el7.noarch Sun Sep 8 12:52:03 2019
python2-click-6.7-6.el7.noarch Sun Sep 8 12:52:03 2019
python-terminaltables-3.1.0-1.el7.noarch Sun Sep 8 12:52:03 2019
python-retrying-1.3.3-1.el7.noarch Sun Sep 8 12:52:03 2019
python-jwt-1.5.3-1.0.1.el7.noarch Sun Sep 8 12:52:03 2019
python-configparser-3.5.0-0.2.el7.noarch Sun Sep 8 12:52:03 2019
python-certifi-2017.4.17-1.el7.noarch Sun Sep 8 12:52:03 2019
python-asn1crypto-0.22.0-1.el7.noarch Sun Sep 8 12:52:03 2019
pyparsing-2.0.3-1.el7.noarch Sun Sep 8 12:52:03 2019
python-ndg_httpsclient-0.3.2-1.el7.noarch Sun Sep 8 12:52:02 2019
python-cx_Oracle-7.0-1.0.1.el7.x86_64 Sun Sep 8 12:52:02 2019
★oracle-instantclient18.3-basic-18.3.0.0.0-2.x86_64 Sun Sep 8 12:52:01 2019
python2-arrow-0.10.0-1.el7.noarch Sun Sep 8 12:51:55 2019
python-httpsig_cffi-15.0.0-1.el7.noarch Sun Sep 8 12:51:55 2019
python-dateutil-2.7.3-2.el7.noarch Sun Sep 8 12:51:55 2019
yum-cron-3.4.3-163.0.1.el7.noarch Sun Sep 8 12:51:52 2019
openssl-libs-1.0.2k-19.0.1.ksplice1.el7.x86_64 Sun Sep 8 12:51:50 2019
openssl-1.0.2k-19.0.1.ksplice1.el7.x86_64 Sun Sep 8 12:51:50 2019
glibc-2.17-292.0.1.ksplice1.el7.x86_64 Sun Sep 8 12:51:49 2019
glibc-common-2.17-292.0.1.ksplice1.el7.x86_64 Sun Sep 8 12:51:48 2019
ksplice-helper-1.0.42-1.el7.x86_64 Sun Sep 8 12:51:45 2019
ksplice-known-exploit-detection-1.0.42-1.el7.x86_64 Sun Sep 8 12:51:43 2019
★tuned-profiles-oci-recommend-2.11.0-5.0.2.el7_7.1.noarch Sun Sep 8 12:51:33 201
9
★tuned-profiles-oci-2.11.0-5.0.2.el7_7.1.noarch Sun Sep 8 12:51:33 2019
3-6. cron設定
Oracle Autonomous Linuxでは各種自動化が行われているのでcron設定を確認する。
# ls -F /etc/cron*
/etc/cron.deny /etc/crontab
/etc/cron.d:
0hourly al-update ksplice raid-check sysstat uptrack
/etc/cron.daily:
0yum-daily.cron* logrotate* man-db.cron* mlocate*
/etc/cron.hourly:
0anacron* 0yum-hourly.cron*
/etc/cron.monthly:
/etc/cron.weekly:
Oracle Autonomous Linux専用コマンドの1つ、al-updateが毎日12時29分に実行される。時間を変更するときは直接変更するのではなくal-config -w
で変更する。オプションなしで実行するとヘルプが表示される。
# Daily cron job for AL updates
# Created by al-config, do not modify this file.
# If you want to change update time, use
# 'sudo al-config -w <time window>' to set auto update time window
29 12 * * * root /usr/sbin/al-update &>/dev/null
Ksplice用のcronファイルはあるが、2つともコメントアウトされている。
# 5,35 * * * * root export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin && [ -x /usr/bin/ksplice ] && (/usr/bin/ksplice --cron user upgrade; /usr/bin/ksplice --cron xen upgrade)
# 16,46 * * * * root export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin && [ -x /usr/sbin/uptrack-upgrade ] && /usr/sbin/uptrack-upgrade --cron
Yumアップデートの自動化ツールyum-cronの設定ファイルは、毎時と毎日の2つがある。
# ls -F /etc/cron*/*yum*
/etc/cron.daily/0yum-daily.cron* /etc/cron.hourly/0yum-hourly.cron*
if [[ ! -f /var/lock/subsys/yum-cron ]]; then
exit 0
fi
# Action!
exec /usr/sbin/yum-cron
if [[ ! -f /var/lock/subsys/yum-cron ]]; then
exit 0
fi
# Action!
exec /usr/sbin/yum-cron /etc/yum/yum-cron-hourly.conf
それぞれの設定ファイルでapply_updates = no
になっている。そのためyum-cronを実行しても、RPMパッケージはアップデートされないハズだ。
# grep apply_updates /etc/yum/yum-cron*conf
/etc/yum/yum-cron.conf:apply_updates = no
/etc/yum/yum-cron-hourly.conf:apply_updates = no
しかし/var/log/yum.log
を見ると、アップデートされているように見える。このあたりは次回以降の課題にする。
Oct 02 12:29:13 Updated: python-oci-sdk.x86_64 2.5.1-1.el7
Oct 02 12:29:14 Updated: python-oci-cli.noarch 2.6.6-1.el7
Oct 02 12:29:15 Updated: sg3_utils-libs.x86_64 1.37-18.0.1.el7_7.1
Oct 02 12:29:16 Updated: kernel-tools-libs.x86_64 3.10.0-1062.1.2.el7
Oct 02 12:29:17 Updated: kernel-tools.x86_64 3.10.0-1062.1.2.el7
Oct 02 12:29:18 Updated: sg3_utils.x86_64 1.37-18.0.1.el7_7.1
Oct 02 12:29:28 Updated: al-config.noarch 1.0-1.0.28.el7
Oct 02 12:29:34 Installed: kernel-uek.x86_64 4.14.35-1902.5.2.2.el7uek
Oct 02 12:29:35 Updated: python-perf.x86_64 3.10.0-1062.1.2.el7
Oct 02 12:29:45 Installed: kernel.x86_64 3.10.0-1062.1.2.el7
Oct 02 12:29:46 Updated: bpftool.x86_64 3.10.0-1062.1.2.el7
Oct 02 12:29:46 Updated: tzdata.noarch 2019c-1.el7
3-7. tuned設定
自動チューニングサービスのtunedは、Oracle Cloud Infrastructure独自のものが設定されている。
# tuned-adm active
Current active profile: oci-rps-xps oci-busy-polling oci-cpu-power
profile_info
を指定するとプロファイル情報が表示されるが、サマリーなのでよく分からない。RPS/XPSだからネットワーク系か。
# tuned-adm profile_info oci-rps-xps
Profile name:
oci-rps-xps
Profile summary:
Enable RPS/XPS conditionally in OCI
それぞれのプロファイルの実体は、以下のファイルで確認できる。本題では無いので説明しないが、どのような設定になっているか興味のある人は確認してほしい。
# ls -F /usr/lib/tuned/
balanced/ latency-performance/ oci-cpu-power/ throughput-performance/
desktop/ network-latency/ oci-rps-xps/ virtual-guest/
functions network-throughput/ powersave/ virtual-host/
hpc-compute/ oci-busy-polling/ recommend.d/
おわりに
長くなったので、ひと区切り付けることにする。次回はKsplice設定やOracle Autonomous Linux固有の機能を調査する。