LINSTORのビルド(Oracle Linux 8.3)

LINSTOR SDSを検証したくて、ビルドを試みるもかなりハマったので、メモ。

2021/4/29時点の情報です。

 

#環境

Oracle Linux8.3

 

#必要なパッケージのインストール

sudo dnf install -y zip unzip make git rpm-build wget java-1.8.0-openjdk-devel python2 python3

 

##linstor-serverのrpm作成

#gradle(javaのビルドツール)のインストール

#gradleは6.7でないと、linstor-serverビルドに失敗。
wget https://services.gradle.org/distributions/gradle-6.7-bin.zip
sudo mkdir /opt/gradle
sudo unzip -d /opt/gradle gradle-6.7-bin.zip
export PATH=$PATH:/opt/gradle/gradle-6.7/bin

 

#linstorのソースダウンロード

wget http://www.linbit.com/downloads/linstor/linstor-server-1.12.0.tar.gz
mkdir -p ~/rpmbuild/SOURCES
cp linstor-server-*.tar.gz ~/rpmbuild/SOURCES
tar xvzf linstor-server-1.12.0.tar.gz
cd linstor-server-1.12.0
rpmbuild -bb linstor.spec

 

#ビルドされたrpmの確認

ls ~/rpmbuild/RPMS/noarch/
linstor-common-1.12.0-1.el8.noarch.rpm
linstor-controller-1.12.0-1.el8.noarch.rpm
linstor-satellite-1.12.0-1.el8.noarch.rpm

 

#python-linstorのビルド

wget http://www.linbit.com/downloads/linstor/python-linstor-1.7.0.tar.gz
tar xvf python-linstor-1.7.0.tar.gz
cd python-linstor-1.7.0
make rpm

ls dist
python-linstor-1.7.0-1.noarch.rpm python-linstor-1.7.0.tar.gz
python-linstor-1.7.0-1.src.rpm

 

 

##python-linstorのビルドのビルド
wget http://www.linbit.com/downloads/linstor/linstor-client-1.7.1.tar.gz
tar xvf linstor-client-1.7.1.tar.gz
cd linstor-client-1.7.1/
ls dist
linstor-client-1.7.1-1.noarch.rpm linstor-client-1.7.1.tar.gz
linstor-client-1.7.1-1.src.rpm

 

参考

https://abelog.tech/archives/94

 

日本語環境でroot.sh時に CRS-4003: Resource 'ora.crsd' is registered.

現象

1ノード目のroot.shで以下エラー

PRCT-1011 : Failed to run "crsctl". Detailed error: CRS-4003: Resource 'ora.crsd' is registered.
/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

 

 

環境
Oracle RAC 19.7(19.3+p30899722_190000_Linux-x86-64.zip)
RHEL 8.3

 

 

原因
OSインストール時に日本語でインストールすると、locale en_US.UTF-8がインストールされていないため。
locale -a でen_US.UTF-8 が無ければ、インストールする必要がある。

 

 

対処方法
dns install glibc-langpack-en

Oracle RAC on Azure(2020版)

 この記事は、JPOUG Advent Calendar 2020 / Azure Advent Calendar 2020 の2日目の記事です。

JPOUG Advent Calendar 2020 の1日目は @wrcsus4さんの記事でした。
Azure Advent Calendar 2020 の1日目は @jkudoさんの記事でした。


<前提>
2020年12月時点の情報です。

OS:OracleLinux 8.2
Oracle Database: 19.7
Oracle Grid Infrastructure: 19.7

 

<Azure固有>
・共有ディスク
以前は、iSCSINFSサーバをインスタンス上で構成する必要がありましたが、
Azure マネージドディスクで共有ディスクのサポートが始まりました。
Azure Ultra Disksを使用して、maxSharesを設定します。

・名前解決
以前はプライベート(内部)のDNSは解決できなかったのですが、
現在はAzure DNS Private Zonesがありますので、
VIPやSCANの名前解決はAzure DNS Private Zonesで解決します。


<他のクラウドでも共通>
・ネットワーク(マルチキャスト対応含む)
クラウド環境やコンテナ環境ではネットワークが一本しかない、
固定IPを指定できない、マルチキャスト対応してない など様々な制約があります 。
Azureもマルチキャストに対応していません。
これらの制約に対応する為、仮想ネットワーク(vxlan)を使います。vxlanはユニキャストモード使用します。
vxlanはNetworkManager Dispatcherスクリプトを作成して構成します。


インスタンスメタデータ
169.254.169.254への通信が可能だとOracle Grid Infrastructureのインストール(root.sh)に失敗します。
firewalldで169.254.169.254への通信をrejectします。


・自動化
何度も作って壊すのとクラウド間での構築手順を最大限共通化するために、以下のようなフレームワークを作っています。

マネージドサービス、インスタンス構築・・・・terraform
OS起動後の設定、インストール・・・・ansible
terraform⇒ansinbleの仲介・・・各CLIを用いたシェル


スクリーンショット

※ansibleの実行結果を張り付けた関係上、少々見づらいです。
f:id:KNOPP:20201130215909j:image


f:id:KNOPP:20201130215926j:image


f:id:KNOPP:20201130215943j:image

Oracle Linux 8でServer With GUIをインストールする

Oracle Linux 8.1(GUIなし)に"Server With GUI”をインストールしようとしたときに、

以下のようなエラーがでます。

 

sudo dnf -y group install "Server With GUI"

~略

'dnf clean packages' を実行することでキャッシュパッケージを削除できます。
エラー: トランザクションの確認時にエラー:
ファイル /usr/share/doc/libstoragemgmt/NEWS は libstoragemgmt-1.8.1-2.el8.i686 と libstoragemgmt-1.8.3-1.el8.x86_64 のインストールで競合しています。
ファイル /usr/share/man/man1/lsmcli.1.gz は libstoragemgmt-1.8.1-2.el8.i686 と libstoragemgmt-1.8.3-1.el8.x86_64 のインストールで競合しています。
ファイル /usr/share/man/man1/lsmd.1.gz は libstoragemgmt-1.8.1-2.el8.i686 と libstoragemgmt-1.8.3-1.el8.x86_64 のインストールで競合しています。
ファイル /usr/share/man/man1/simc_lsmplugin.1.gz は libstoragemgmt-1.8.1-2.el8.i686 と libstoragemgmt-1.8.3-1.el8.x86_64 のインストールで競合しています。
ファイル /usr/share/man/man5/lsmd.conf.5.gz は libstoragemgmt-1.8.1-2.el8.i686 と libstoragemgmt-1.8.3-1.el8.x86_64 のインストールで競合しています。 

 

ググってしらべたところ、以下に該当しそうです。

https://bugzilla.redhat.com/show_bug.cgi?id=178289

bugzilla.redhat.com

 

上記のwork aroundに従い、

sudo dnf -y group install "Server With GUI" --nobest

sudo dnf -y group upgrade "Server With GUI"

 

でインストールできました。

 RHEL8/CentOS8も該当すると思います。

advent calendar振り返り

Oracle Cloud always free Advent Calendar 2019の25日目です。


本日はOracle Cloud always free Advent Calendar 2019の最終日ですので、Oracle Cloudを使ってみた感想を書きたいと思います。


・always freeは太っ腹

22日目の記事で分かるように、かなり太っ腹です。CPUがちょっと弱い気もしますが、ちょっとしたVPSであれば、置き換え可能だと思います。転送量月10TBまで無料というのもかなり魅力的です。

また、automonous databaseが使用可能というのも画期的です。

 

・always freeの枯渇

11月は問題なくalways freeのcomputeインスタンスが作成できたのですが、12月に入ってからは、out of host capacityというエラーで作成できなくなりました。2インスタンスなんて太っ腹なことやらず1インスタンスにしておけば、、、と思いつつ、早急な拡充を祈るばかりです。

 

・ポリシーが分かりづらい

ポリシーの考え方がAWSGoogle Cloudに比べてかなり独特で分かりづらいです。また、簡単ポリシー割り当てウィザードみたいなものがないので、そのあたりもつらいです。今後の改善を期待したいところです。

 

Oracle Cloudはまだまだ黎明期

こう書くと怒られる気もしますが、Oracle Cloudはまだまだ黎明期だなーと感じます。理由としては、
 ・Web記事が少ない       

          メジャーな機能については日本語の記事も増えてきましたが、 マイナーな機能や使い方については、英語も含めて記事が少ない(もしくはまったくない)ことがあります。 REST APIJDBC接続(JKS)は手探りで記事を書きました。  

  ・Web記事のほとんどがコンソールベース

           Web記事ではCLIでの手順がほとんどなく、初期のAWSを思い出します。今後、UIの変更が度々走ると、UIの変更に耐えられなくなって、CLIベースの手順が増えるとは思いますが。

 

・automonous databaseへの接続はTNSがカギ

オンプレのOracle Databaseでwalletを使用していないと、接続方法に戸惑います。 基本的にTNSでwalletの位置などを指定することになるので、TNS周りが理解できてないとかなり厳しいと思います。 今回のOracle Cloud always free Advent Calendar 2019では、様々なツールから負荷をかけていますが、 sqlplusの接続から順を追って確認したおかげで、TNSまわりの理解ができ、接続まわりでハマることはありませんでした。

 

Oracle Machine Learningの学習コスト
ノートブックでの言語がPL/SQLのみとなっているため、機械学習の知識+PL/SQLのコーディング力となってしまうため、学習コストがかかります。titanicの予測あたりをやってみたかったのですが、PL/SQLでやるのがしんどくてあきらめてしまいました。
RかPythonサポートしてくれませんかねぇ。。。


以上、取り止めない感じですが、Oracle Cloud always free Advent Calendar 2019の最終日としたいと思います。

oracle notifications を使ってWeb監視結果を通知する

Oracle Cloud always free Advent Calendar 2019の24日目です。

今日は少し趣向を変えてoracle notifications を使ってみようかと思います。

 

oracle notificationsでは、以下のような流れになります。
トピックの作成
サブスクリプションの作成
トピックにメッセージを送信


今回は、トピックにメッセージを送信できる状態になった後、
Web監視の結果、異常があれば、メッセージ送信できるようにします。


トピックの作成
oci ons topic create --name web_monitor
{
・・・・・・
"topic-id": "ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtXXXXXXXXXXXXXX"
},
"etag": "9374236b"
}

 

サブスクリプションの作成
oci ons subscription create --protocol email \
--subscription-endpoint xxxxx@xxx.com \
--topic-id ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtXXXXXXXXXX

以下のようなメールが届くので、メール本文のリンクを押下する。
タイトル:Oracle Cloud Infrastructure Notifications Service Subscription Confirmation
本文:You have chosen to subscribe to the topic: web_monitor (Topic OCID: ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtezXXXXXXXX).
To confirm this subscription, click or visit the link below. If this was in error, you can ignore this message.

 

リンクを押下すると、「Subscription confirmed」と表示される。

 

 

#メッセージの送信
oci ons message publish \
--topic-id ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtez7XXXXXXXXXX \
--body "test message send"

 

Oracle Cloud Notification Message」というタイトルのメールが届くはずです。

 

#web監視用のシェル作成
cat << 'EOF' > web_monitor.sh
#!/bin/bash

target_url="http://yahoo.co.jp/"

## target_url へのアクセスを試みる
message=`curl -o /dev/null -s -w %{http_code} $target_url`

## curl 結果 http_code が 200/3xx だったらスクリプト終了
if [[ "$message" =~ 200 || "$message" =~ 3[0-9]{2} ]]; then
exit 0
fi

echo $message

oci ons message publish \
--topic-id ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtez77chv4sii2y5XXXXXXX \
--body "target url $target_url is down"
EOF

 

#シェルへ実行権限付与

chmod +x web_monitor.sh

 

#シェルの実行
./web_monitor.sh

 

監視対象のWebホストにアクセスできなければ、メールが届きます。

 

このweb_moniter.shをcronか何かで登録すれば簡易Web監視ができます。

 

<参考>

www.s-style.co.jp

qiita.com

unixODBCからautonomous databaseに接続してみる。

Oracle Cloud always free Advent Calendar 2019の23日目です。

今日はunixODBCからautonomous databaseに接続してみようと思います。
15日目のsqlplus接続設定が完了していることが前提となります。

 

#unixODBCのインストール
sudo yum -y install unixODBC


#ODBCドライバのインストール
sudo yum -y install oracle-instantclient18.3-odbc.x86_64

 

#ODBCドライバの確認
#libsqora.so.18.1がODBCドライバ
ls /usr/lib/oracle/18.3/client64/lib
glogin.sql libipc1.so libnnz18.so libocijdbc18.so libsqlplusic.so network
libclntshcore.so.18.1 libmql1.so libocci.so.18.1 libons.so libsqlplus.so ojdbc8.jar
libclntsh.so.18.1 libnfsodm18.so libociei.so liboramysql18.so libsqora.so.18.1 xstreams.jar

 

#ODBCドライバの登録
$cat << EOF > ~/oracle_driver.ini
[odbcOracle18c]
Description = Oracle 18c Odbc Driver
Driver = /usr/lib/oracle/18.3/client64/lib/libsqora.so.18.1
EOF

$sudo odbcinst -i -d -f ~/oracle_driver.ini


#DSN情報
#Driverは先ほど記載したoracle_driver.iniの情報
#ServerNameはtnsnames.oraの接続識別子
cat << EOF > ~/mydsn.ini
[DSN_ORACLE]
Driver = odbcOracle18c
ServerName = adw_high
UserID = ADMIN
Password = XXXXXXX
EOF

#odbc.iniへ登録
odbcinst -i -s -f ~/mydsn.ini


#環境変数設定
export PATH=/usr/lib/oracle/18.3/client64/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib/oracle/18.3/client64/lib:$LD_LIBRARY_PATH
export TNS_ADMIN=~/wallet

 

#接続確認
$isql DSN_ORACLE
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>


SQL> select BANNER from v$version;
+---------------------------------------------------------------------------------+
| BANNER |
+---------------------------------------------------------------------------------+
| Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production |
+---------------------------------------------------------------------------------+
SQLRowCount returns -1
1 rows fetched


<参考>

qiita.com