ONTAP 9.x環境でActive DirectoryとNISとでユーザ名マッピングを行わせた場合の確認手法


Windows Active Direcotry環境とNISによるユーザ管理を行っているSolaris/Linux環境の両方からONTAP 9.9上の共有にアクセスする場合、ユーザ名マッピング設定を行う。

ただ、指定したマッピングが正しく動いているかを確認する方法がわかりにくいのでメモ書き。

(関連資料「ONTAP 9.xでntpやDNSの動作確認」)

今回はStorage VM:netapp103に対して、 Active Directory:VM2 (vm2.adosakana.local) と NISドメイン:nisdom を接続した。

NISに接続できているかを確認

「vserver services name-service nis-domain show」で設定を確認

netapp101::> vserver services name-service nis-domain show
                                  NIS
Vserver       Domain              Server
------------- ------------------- ------------------------------------
netapp103     nisdom              172.17.44.49

netapp101::>

接続できているかを確認するには「vserver services name-service nis-domain show-bound」を実行する。接続できている場合は「Bound NIS Server」に接続出来ているNISサーバのIPアドレスが表示される。

netapp101::> vserver services name-service nis-domain show-bound
                                  Bound
Vserver       Domain              NIS Server
------------- ------------------- -----------------
netapp103     nisdom              172.17.44.49

netapp101::>

接続できていない場合は、「-」という表示になる

netapp101::> vserver services name-service nis-domain show-bound
                                  Bound
Vserver       Domain              NIS Server
------------- ------------------- -----------------
netapp103     nisdom              -

netapp101::>

なぜ接続出来ていないかを確認するには権限をdiagに変更した上で「vserver services name-service nis-domain show-bound-debug」を実行して確認する。(advancedでは使えない)

netapp101::*> vserver services name-service nis-domain show-bound-debug
                                  Bound              Bound
Vserver       Domain              NIS Server         Status
------------- ------------------- -----------------  -------------------
netapp103     nisdom              172.17.44.49       Could not connect to server

netapp101::*>

今回は「Could not connect to server」ということで、NISサーバへの接続がうまくいかない、ということだった。確認したところ、途中のfirewall設定の問題でNISに関するポートが空いていないためだった。

設定変更後、手動でNISの再接続を行う場合は、ypbindの再起動を行う。このコマンドはノード名を指定することに注意

netapp101::*> vserver services name-service ypbind restart -node ノード名

netapp101::*>

再度「vserver services name-service nis-domain show-bound-debug」を実行して「Status: Success」となっていれば問題ない。

netapp101::*> vserver services name-service nis-domain show-bound-debug
                                  Bound              Bound
Vserver       Domain              NIS Server         Status
------------- ------------------- -----------------  -------------------
netapp103     nisdom              172.17.44.49       Success

netapp101::*>

ネームサービススイッチ設定

/etc/nsswitch.confに相当する設定をStorage VMに対して行い、ユーザ名とグループ名に関してNISから情報を持ってくるように設定する。

設定を確認するには「vserver services ns-switch show」を実行する

netapp101::> vserver services ns-switch show
                               Source
Vserver         Database       Order
--------------- ------------   ---------
netapp103       hosts          files,
                               dns
netapp103       group          files,
                               nis
netapp103       passwd         files,
                               nis
netapp103       netgroup       files
netapp103       namemap        files
netapp101     hosts          files,
                               dns
netapp101     group          files
netapp101     passwd         files
8 entries were displayed.
netapp101::>

UNIX側でLDAP情報を使っていない場合は、LDAPを登録する必要は無い。(Windows側だけでActive Directory/LDAPを使っている場合はnsswitchには登録しない)

なお、ONTAP 9.xでは、NISを使用できるのは passwd, group, netgroup となっており、hosts では使用できない。

情報取得の確認

まず、UNIX側のユーザ名とUIDに関する情報がひけるかを確認するため「vserver services name-service getxxbyyy getpwbyname」と「vserver services name-service getxxbyyy getpwbyuid」を実行する。

これらはadvanced権限が必要となっているので「set adv」で切り替えてから実行する。

netpp101::*> vserver services name-service getxxbyyy getpwbyname -vserver netapp103 -username osakanataro
pw_name: osakanataro
pw_passwd: !!
pw_uid: 1000
pw_gid: 1000
pw_gecos:
pw_dir: /home/osakanataro
pw_shell: /bin/bash


netpp101::*> vserver services name-service getxxbyyy getpwbyuid -vserver netapp103 -userID 1000
pw_name: osakanataro
pw_passwd: !!
pw_uid: 1000
pw_gid: 1000
pw_gecos:
pw_dir: /home/osakanataro
pw_shell: /bin/bash


netpp101::*>

このような形で情報が引けたら問題ない

うまく取得出来ていない場合は、下記の様な出力となる

netapp101::*> vserver services name-service getxxbyyy getpwbyname -vserver netapp103 -username osakanataro

Error: command failed: Failed to resolve osakanataro. Reason: Entry not found for
       "username: osakanataro".

netapp101::*>

マッピング設定

UNIX/Linuxのユーザ名/UIDとWindowsのユーザ名/SIDを変換するには ONTAPにネームマッピング設定を行う必要がある。

WindowsからUNIX/Linuxに対するマッピング(win-unix)と、UNIX/Linuxに対するマッピング(unix-win)の2種類を設定する必要がある。

netapp101::> vserver name-mapping show

Vserver:   netapp103
Direction: win-unix
Position Hostname         IP Address/Mask
-------- ---------------- ----------------
1       -                 -                   Pattern: VM2\\*
                                          Replacement: *

Vserver:   netapp103
Direction: unix-win
Position Hostname         IP Address/Mask
-------- ---------------- ----------------
1       -                 -                   Pattern: *
                                          Replacement: VM2\\*
2 entries were displayed.

netapp101::>

基本的に1対1となるようであれば、「ADドメイン\Windowsユーザ名」→「UNIXユーザ名」というルール(win-unixにある「VM2\\* → *」)と「UNIXユーザ名」→「ADドメイン\Windowsユーザ名」(unix-winにある「* → VM2\\*」)を設定することになる。

なお、”\”は2つ指定する必要がある。

マッピングの確認

実際にどのようなマッピングが行われているのかを確認するには「vserver services access-check name-mapping show」を使います。このコマンドもadvanced権限が必要です。

netapp101::*> vserver services access-check name-mapping show -vserver netapp103 -direction win-unix -name osakanataro

ATTENTION: Mapping of Data ONTAP "admin" users to UNIX user "root" is enabled, but the following information does not reflect this mapping.

'osakanataro' maps to 'osakanataro'


netapp101::*> 
Windowsの名前からUNIXを探すときはにユーザ名を「-name "vm2\\osakanataro"」というように"でくくると正常な動作とならないので注意。
また、ドメインとユーザの区切りは「\\」と2つ続ける必要がある。
netapp101::*> vserver services access-check name-mapping show -vserver netapp103 -direction win-unix -name vm2\\osakanataro

ATTENTION: Mapping of Data ONTAP "admin" users to UNIX user "root" is enabled, but the following information does not reflect this mapping.

'vm2\\osakanataro' maps to 'osakanataro'


netapp101::*> vserver services access-check name-mapping show -vserver netapp103 -direction unix-win -name osakanataro

'osakanataro' maps to 'VM2\osakanataro'


netapp101::*>

なお、NISサーバにアクセスできない場合にこのコマンドを実行すると、以下の様な結果になります。

netapp101::*> vserver services access-check name-mapping show -vserver netapp103 -direction unix-win -name osakanataro

Vserver: netapp103 (internal ID: 3)

Error: RPC map name request procedure failed
  [  4 ms] Mapping Successful for Unix-user 'osakanataro' to Windows
           user 'VM2*' at position 1
  [    11] Successfully connected to ip 172.17.44.49, port 445 using
           TCP
  [    59] Unknown error: 12
  [    59] Failed to initiate Kerberos authentication. Trying NTLM.
  [    70] Encountered NT error (NT_STATUS_MORE_PROCESSING_REQUIRED)
           for SMB command SessionSetup
  [    95] Successfully authenticated with DC
           samba.adosakana.local
  [   109] Encountered NT error (NT_STATUS_PENDING) for SMB command
           Read
  [   117] Could not find Windows name 'VM2*'
**[   120] FAILURE: Name mapping for UNIX user 'osakanataro' failed.
**         Explicit Mapping failed and no default mapping found

Error: command failed: Failed to find mapping for the user. Reason: "SecD
       Error: The mapped user does not exist and no default user is defined".

netapp101::*>

ファイル権限確認

ONTAP上に置かれているファイルの権限をONTAP OS上から確認する「vserver security file-directory show-effective-permissions」がadvanced権限にあります。

確認したいファイル/ディレクトリをフルパスで指定します。

Windows側ユーザ名でアクセスした場合の確認。このコマンドではドメインとユーザの区切りは「\」が1つとなる。

netapp101::*> vserver security file-directory show-effective-permissions -vserver netapp103 -win-user-name VM2\osakanataro -path /sharevol/testfile.txt

                        Vserver: netapp103
              Windows User Name: VM2\osakanataro
                 Unix User Name: osakanataro
                      File Path: /sharevol/testfile.txt
                CIFS Share Path: -
          Effective Permissions:
                                 Effective File or Directory Permission: 0x1f01ff
                                        Read
                                        Write
                                        Append
                                        Read EA
                                        Write EA
                                        Execute
                                        Delete Child
                                        Read Attributes
                                        Write Attributes
                                        Delete
                                        Read Control
                                        Write DAC
                                        Write Owner
                                        Synchronize

netapp101::*>

UNIX/Linux側からアクセスした場合の確認

netapp101::*> vserver security file-directory show-effective-permissions -vserver netapp103 -unix-user-name osakanataro -path /sharevol/testfile.txt

                        Vserver: netapp103
              Windows User Name: VM2\osakanataro
                 Unix User Name: osakanataro
                      File Path: /sharevol/testfile.txt
                CIFS Share Path: -
          Effective Permissions:
                                 Effective File or Directory Permission: 0x1f01ff
                                        Read
                                        Write
                                        Append
                                        Read EA
                                        Write EA
                                        Execute
                                        Delete Child
                                        Read Attributes
                                        Write Attributes
                                        Delete
                                        Read Control
                                        Write DAC
                                        Write Owner
                                        Synchronize

netapp101::*>

細かい動作確認

ユーザ名/UID/SID変換の詳細を確認したい場合は、advanced権限にある「vserver services access-check authentication」を使います

UNIX用ユーザ名からUNIX UIDを検索

netapp101::*> vserver services access-check authentication translate -vserver netapp103 -unix-user-name osakanataro
1000


netapp101::*>

UNIX UIDからUNIX用ユーザ名を検索

netapp101::*> vserver services access-check authentication translate -vserver netapp103 -uid 1000
osakanataro


netapp101::*>

UNIX UIDからWindows用SIDを検索

netapp101::*> vserver services access-check authentication uid-to-sid -vserver netapp103 -uid 1000
SID: S-1-5-21-937304154-1581684492-536532533-1180


netapp101::*>

SIDからUNIX用ユーザ名 と Windows用ユーザ名を検索

netapp101::*> vserver services access-check authentication sid-to-unix-name -vserver netapp103 -sid S-1-5-21-937304154-1581684492-536532533-1180
    SID Type: User
   Unix Name: osakanataro
 Domain Name: VM2
Windows Name: osakanataro


netapp101::*>

Windows用ユーザ名からSIDを検索。このコマンドではドメインとユーザの区切りは「\」が1つとなる。

netapp101::*> vserver services access-check authentication translate -vserver  netapp103 -win-name osakanataro
S-1-5-21-937304154-1581684492-536532533-1180


netapp101::*> vserver services access-check authentication translate -vserver  netapp103 -win-name vm2\osakanataro
S-1-5-21-937304154-1581684492-536532533-1180


netapp101::*>

Commvault で NDMPバックアップするときのポート設定


CommvaultでNetAppをNDMPバックアップする設定をした時にエラーコード 39:424「テープサーバー に接続できませんでした」というエラーが出た

2023/05/10追記 commvault 2022E(11.28)環境でNDMPバックアップを行ったところエラーコード 39:501「テープサーバー に接続できませんでした」というエラーだった。

MediaAgent側のネットワークルート構成に対して「Configuring a Firewall Between a File Server and MediaAgent」にある追加ポートの設定をして解決した。

追加ポートは「50000-50010」とした。

また、インカミング接続で対象となるNetAppのエントリを「制限」として登録する

そして、MediaAgent側のWindows Firewall設定で、50000-50010 を許可する設定を追加する。

ちなみに、これとは別に重複排除DBにアクセスできないというエラーがでている場合は、Windows Firewall設定で、プログラムの「C:\Program Files\Commvault\ContentStore\Base\SID2.exe」を許可することで解決できる。


2023/11/10追記

Media Agentでのネットワークルート設定後、該当するMAの右クリックメニューから[すべてのタスク]-[ネットワーク構成のプッシュ]を選択して情報更新をしないと、指定した範囲でのポート設定でバックアップを行ってくれなかった。

Arcserve UDPで出来ないことのメモ 2024/04/23版


Arcserve UDPが使いたい、と言われて確認したけど、それはできないことだったんだけど、どこにもサポートしてない、という明示的な記述はなかったことをメモする。

「AWS EC2上のインスタンスをバックアップして、OSまるごとリストアする」ことはできない(エージェントなしでの話)

「Amazon S3などのブロックストレージに直接バックアップ保存はできない」

まず、公式資料について

ARCSERVE UNIFIED DATA PROTECTION 8.x ナレッジ センター
 ドキュメントについて調べる時の起点

UDP のクラウド機能の理解
 Arcserve UDPで使えるクラウド関連機能についての説明

2023/06/19追記:UDP 9.0が出ていたので「新機能および機能拡張」を確認したがこのページにかいてある項目に関連する変更は見当たらなかった

2024/04/23追記:UDP 9.2が出ていたので確認。
ARCSERVE UNIFIED DATA PROTECTION 9.x ナレッジ センター
UDP のクラウド機能の理解
Arcserve Unified Data Protection 9.x 動作要件
確認する限りでは、これまでと状況は変わっていない模様。

変更履歴

2022/07/27 初版作成
2023/06/19 UDP 9.0について追記
2024/04/23 UDP 9.2について追記

AWS EC2上のインスタンスに対してできること

・EC2上のインスタンスにUDP Agentをインストールしてバックアップすること

arcserve Unified Data Protection Support with Amazon EC2 VMs」に「arcserve UDP agent for Windows and Linux supports working on Amazon EC2 VMs」とある

ただ、「Agent for Windows ユーザ ガイド」と「Agent for Linux ユーザ ガイド」を比較すると、Linux側は明示的に書かれているが、WindowsについてはAWS EC2対応について記載されていないためサポートしているのかが不明瞭である。

・EC2上のインスタンスをバックアップして、オンプレ側にある仮想環境にリストアする

Arcserve UDP8.xのマニュアル「Arcserve UDP エージェント(Linux) の使用」に「Amazon EC2 からローカルの Linux マシンに対してマイグレーション BMR を実行する方法」というサポートしている記述がある。

AWS EC2インスタンスでは実践していないがAzureのWindows/LinuxインスタンスでUDP agent経由でバックアップしたものをオンプレHyper-V上で起動させるという検証はしたことがあるので、おそらくEC2上のWindowsインスタンスも同様にいけると思われる。

・EC2上のLinuxインスタンスをBMRを使ってリストアすること

Arcserve UDP8.xのマニュアル「Arcserve UDP エージェント(Linux) の使用」に「AWS クラウドへの Arcserve UDP エージェント(Linux)のインストール」というサポートしている記述がある。

・バックアップしたデータからファイル/ディレクトリを抜き出してリストアすること

これは、UDP Agentとしてバックアップしているので、普通にファイルリストアができる、という話である。

・EC2上にEC2 APIを使って仮想スタンバイもしくはインスタント仮想マシンのインスタンスを作成する

Arcserve UDPでは災害発生時に即座に別の場所でサーバが復帰できるように「仮想スタンバイ(Windows用)」と「インスタント仮想マシン(Linux用)」という機能がある

これを使って、AWS EC2上に別のインスタンスを作成し、そこに対してデータをリストアし続ける、ということを行える。

Amazon EC2 のクラウド アカウントの追加」にあるようにEC2アカウントを登録することで、インスタンス作成を含めて勝手にやってくれる。

・EC2上に作成されたLinuxのインスタント仮想マシンを通常のインスタンスにする

マニュアルに「Linux インスタント仮想マシンを独立した仮想マシンに変換する」という項目があるのでできるのでしょう・・・

AWS EC2上のインスタンスに対して出来ないこと

・EC2のAPIを使って、インスタンスまるごとバックアップすること

EC2上のインスタンスを、EC2 API側からバックアップするような機能は搭載されていない。

・EC2のAPIを使って、インスタンスをまるごとリストアすること

仮想スタンバイもしくはインスタント仮想マシンのインスタンスを作成する機能があるくせに、連動しないで単独でインスタンスを作成しリストアする機能は搭載されていない。

・EC2上のWindowsインスタンスをBMRを使ってリストアすること

Arcserve UDP8.xのマニュアル側には「Arcserve UDP エージェント(Linux) の使用」側には「AWS クラウドへの Arcserve UDP エージェント(Linux)のインストール」というサポートしている記述がある。

しかし「Arcserve UDP エージェント(Windows)の使用」にはクラウド上にBMRでリストアできるような記述がない。

・Amazon S3などのブロックストレージに直接バックアップできない

マニュアルに「復旧ポイントのコピー、ファイル コピー、またはファイル アーカイブのタスクを作成するときに、このアカウントを使用できます。」と書いてある。

つまり、復旧ポイントを最初に作成するときのストレージとしては利用できない、ということになり、ローカルなどで作成した復旧ポイントのコピーをクラウド上に作成する、というイメージとなる。

Azure上のインスタンスに対して出来ること

基本的にはAmazon EC2インスタンスと同様。

・仮想スタンバイの注意点

Azure blobストレージを作成して、そこにディスクイメージをまるごと保管するので料金が掛かる。

仮想スタンバイを起動する場合、Azure blobストレージ上のデータを使って、新規のインスタンスを作成する。つまり、新規インスタンス+そのストレージ料金が新しく料金が掛かる。(Azure blobストレージは残り続ける)

・インスタント仮想マシンの注意点

インスタント仮想マシンを起動する場合、新規インスタンスを作成し、そのインスタンスに対して 同じネットワーク内にあるUDP Linuxサーバを経由してデータを送り込みリストアする。

仮想スタンバイと違ってAzure blobストレージは使わないが、起動時に全リストアをかけるので時間がかかる。

テープ装置連動の注意点

・Arcserve UDPサーバとArcserve Backupサーバの2種類が必要

UDPにはテープにアクセスする機能がなく、Arcseve Backupを利用するため2種類のバックアップソフトをインストールする必要がある。

それぞれ別のMicrosoft SQLインスタンスが稼働することになる。

Arcserve UDP側が ARCSERVE_APP で、Arcserve Backup側がARCSERVE_DB

・テープには毎回フルバックアップされる

Arcserve UDPから直接テープに対してバックアップすることはできない。

Arcserve Backupを別途インストールして、そこと連動してテープに保存する仕組みとなっている。

テープに保存できるのは「復旧ポイント」という塊でのもの

Arcserve UDP側は増分でバックアップしているのだが、Arcserve Backup側でテープにバックアップする際は、全22GBが毎回バックアップされている。

UDPで毎日バックアップしているけど、テープに落とすのは週1回でいい、という場合は、まず最初のUDPバックアップのスケジュールで毎日ではなく「毎週」でスケジュールを1つつくって、それをテープに落とす、という形になる

・ファイルシステムカタログを作成するとArcserve Backup側でファイルリストア可能

Arcserve UDPのプラン設定で、ファイル システム カタログ 生成すると、Arcserve Backup側のGUIでファイルリストアができる

Arcserve BackupのリストアUIを見るとファイルツリーが確認出来る

使用するバックアップ世代も選択できる

・vSphere仮想マシンのファイルリストア取り扱いの違い

Arcserve UDPでvSphere仮想マシンをバックアップした場合、Windows仮想マシンであればArcserve UDP側でファイルシステムカタログを作成しておけば、Arcserve Backup側でファイル単位のリストアが可能。

Linux仮想マシンの場合は、Arcserve UDP側でファイルシステムカタログを作成する、と設定してもファイルシステムカタログは作成されない。Arcserve Backup側でバックアップは取られるもののリストアツリーではWindowsに分類されており、ファイルツリーは見えない

これは、おそらくArcserve Backup側でLinux仮想マシンについてのファイル単位のリストアがサポートされていないためではないかと考えられる。

Samba 4.16.x をOracle Linux 8環境でコンパイルする


Oracle Linux 8.6環境でSamba 4.16.3をコンパイルしようとしたら面倒だったのでメモ書き。

まず、「Package Dependencies Required to Build Samba」にあるVerified Package DependenciesのSamba master / CentOS 8 のリンクが使えない。

これは、CentOS8ではなく、CentOS8Streamにリンクが変わったためである。

ただ、Oracle Linux 8ではレポジトリ名が異なっているため、実行が失敗する。

Oracle Linux 8でのレポジトリ対応は下記となる。

RHEL 8CentOS 8Oracle Linux 8
BaseBaseol8_baseos_latest
AppStreamAppStreamol8_appstream
CodeReady Linux Builder*PowerToolsol8_codeready_builder
EPEL**EPEL**ol8_developer_EPEL

なので、Oracle Linux 8では下記を実行してレポジトリを有効化する

# yum config-manager --set-enabled ol8_codeready_builder
# yum config-manager --set-enabled ol8_developer_EPEL

次に、「Red Hat Enterprise Linux 8 / CentOS 8」に記載があるパッケージ群をインストール

# yum install docbook-style-xsl gcc gdb gnutls-devel gpgme-devel jansson-devel \
      keyutils-libs-devel krb5-workstation libacl-devel libaio-devel \
      libarchive-devel libattr-devel libblkid-devel libtasn1 libtasn1-tools \
      libxml2-devel libxslt lmdb-devel openldap-devel pam-devel perl \
      perl-ExtUtils-MakeMaker perl-Parse-Yapp popt-devel python3-cryptography \
      python3-dns python3-gpg python36-devel readline-devel rpcgen systemd-devel \
      tar zlib-devel

エラー対処1: dbus-devel

configure中にエラー発生

Checking for library nscd                                                                       : no
Checking for nscd_flush_cache                                                                   : not found
VFS_STATIC: vfs_default,vfs_not_implemented,vfs_posixacl,vfs_dfs_samba4
VFS_SHARED: vfs_recycle,vfs_audit,vfs_extd_audit,vfs_full_audit,vfs_fake_perms,vfs_default_quota,vfs_readonly,vfs_cap,vfs_expand_msdfs,vfs_shadow_copy,vfs_shadow_copy2,vfs_readahead,vfs_xattr_tdb,vfs_streams_xattr,vfs_streams_depot,vfs_acl_xattr,vfs_acl_tdb,vfs_preopen,vfs_catia,vfs_media_harmony,vfs_unityed_media,vfs_fruit,vfs_shell_snap,vfs_commit,vfs_worm,vfs_crossrename,vfs_linux_xfs_sgid,vfs_time_audit,vfs_offline,vfs_virusfilter,vfs_widelinks,vfs_snapper,vfs_posix_eadb,vfs_syncops,vfs_dirsort,vfs_fileid,vfs_aio_fork,vfs_aio_pthread,vfs_gpfs,vfs_btrfs,vfs_glusterfs_fuse
PDB_STATIC: pdb_smbpasswd,pdb_tdbsam,pdb_samba_dsdb,pdb_ldapsam
PDB_SHARED:
AUTH_STATIC: auth_builtin,auth_sam,auth_winbind,auth_unix,auth_samba4
AUTH_SHARED:
NSS_INFO_STATIC: nss_info_template
NSS_INFO_SHARED:
CHARSET_STATIC:
CHARSET_SHARED:
IDMAP_STATIC: idmap_tdb,idmap_passdb,idmap_nss,idmap_ldap
IDMAP_SHARED: idmap_ad,idmap_rfc2307,idmap_autorid,idmap_rid,idmap_hash,idmap_tdb2,idmap_script
GPEXT_STATIC:
GPEXT_SHARED:
PERFCOUNT_STATIC:
PERFCOUNT_SHARED:
Checking for dbus                                                                               : not found
vfs_snapper is enabled but prerequisite dbus-1 package not found. Use --with-shared-modules='!vfs_snapper' to disable vfs_snapper support.
(complete log in /root/samba-4.16.3/bin/config.log)
# 

これは「dnf install dbus-devel」のインストールで対応

# dnf install dbus-devel
メタデータの期限切れの最終確認: 0:08:21 時間前の 2022年07月19日 09時59分33秒 に 実施しました。
依存関係が解決しました。
================================================================================
 パッケージ      Arch        バージョン                リポジトリー       サイズ
================================================================================
インストール:
 dbus-devel      x86_64      1:1.12.8-18.0.1.el8       ol8_appstream       68 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 68 k
インストール後のサイズ: 127 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
dbus-devel-1.12.8-18.0.1.el8.x86_64.rpm          54 kB/s |  68 kB     00:01
--------------------------------------------------------------------------------
合計                                             54 kB/s |  68 kB     00:01
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
  インストール中   : dbus-devel-1:1.12.8-18.0.1.el8.x86_64                  1/1
  scriptletの実行中: dbus-devel-1:1.12.8-18.0.1.el8.x86_64                  1/1
  検証             : dbus-devel-1:1.12.8-18.0.1.el8.x86_64                  1/1

インストール済み:
  dbus-devel-1:1.12.8-18.0.1.el8.x86_64

完了しました!
#

エラー対処2: python3-markdown

configure中にエラー発生

Checking for openpty                                                                            : not found
Checking for library util                                                                       : yes
Checking for openpty in util                                                                    : ok
Checking for system installation of Python module markdown                                      : not found
        Unable to find Python module 'markdown'. Please install the system package: python3-markdown'.
#

これは書かれている通りにpython3-markdownをインストール

# dnf install python3-markdown
メタデータの期限切れの最終確認: 0:09:33 時間前の 2022年07月19日 09時59分33秒 に 実施しました。
依存関係が解決しました。
================================================================================
 パッケージ          Arch      バージョン        リポジトリー             サイズ
================================================================================
インストール:
 python3-markdown    noarch    2.6.11-2.el8      ol8_codeready_builder    133 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 133 k
インストール後のサイズ: 418 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
python3-markdown-2.6.11-2.el8.noarch.rpm        108 kB/s | 133 kB     00:01
--------------------------------------------------------------------------------
合計                                            108 kB/s | 133 kB     00:01
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
  インストール中   : python3-markdown-2.6.11-2.el8.noarch                   1/1
  scriptletの実行中: python3-markdown-2.6.11-2.el8.noarch                   1/1
  検証             : python3-markdown-2.6.11-2.el8.noarch                   1/1

インストール済み:
  python3-markdown-2.6.11-2.el8.noarch

完了しました!
#

エラー対処3: perl-JSON

make中にエラー発生

third_party/heimdal/lib/asn1/der_free.c third_party/heimdal/lib/asn1/der_format.c third_party/heimdal/lib/asn1/der_length.c third_party/heimdal/lib/asn1/der_copy.c third_party/heimdal/lib/asn1/der_cmp.c third_party/heimdal/lib/asn1/der_print.c third_party/heimdal/lib/asn1/extra.c third_party/heimdal/lib/asn1/timegm.c third_party/heimdal/lib/asn1/template.c third_party/heimdal/lib/asn1/oid_resolution.c -> bin/default/third_party/heimdal/lib/asn1/der-protos.h
Can't locate JSON.pm in @INC (you may need to install the JSON module) (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /root/samba-4.16.3/third_party/heimdal/cf/make-proto.pl line 7.
BEGIN failed--compilation aborted at /root/samba-4.16.3/third_party/heimdal/cf/make-proto.pl line 7.

Waf: Leaving directory `/root/samba-4.16.3/bin/default'
Build failed
 -> task in '../heimdal/lib/asn1/der-protos.h' failed with exit status 2 (run with -v to display more information)
make: *** [Makefile:7: all] エラー 1
PYTHONHASHSEED=1 WAF_MAKE=1  ./buildtools/bin/waf install
Waf: Entering directory `/root/samba-4.16.3/bin/default'
        Selected embedded Heimdal build
Checking project rules ...
Project rules pass
[1/1] Compiling VERSION
+ install /usr/local/samba/lib/pkgconfig/samba-hostconfig.pc (from bin/default/lib/param/samba-hostconfig.pc)
+ install /usr/local/samba/lib/pkgconfig/dcerpc_samr.pc (from bin/default/source4/librpc/dcerpc_samr.pc)
+ install /usr/local/samba/lib/pkgconfig/dcerpc.pc (from bin/default/source4/librpc/dcerpc.pc)
+ install /usr/local/samba/lib/pkgconfig/samdb.pc (from bin/default/source4/dsdb/samdb.pc)
+ install /usr/local/samba/lib/pkgconfig/samba-credentials.pc (from bin/default/auth/credentials/samba-credentials.pc)
+ install /usr/local/samba/lib/pkgconfig/wbclient.pc (from bin/default/nsswitch/libwbclient/wbclient.pc)
+ install /usr/local/samba/lib/pkgconfig/samba-util.pc (from bin/default/lib/util/samba-util.pc)
+ install /usr/local/samba/lib/pkgconfig/dcerpc_server.pc (from bin/default/source4/rpc_server/dcerpc_server.pc)
+ install /usr/local/samba/lib/pkgconfig/ndr_krb5pac.pc (from bin/default/librpc/ndr_krb5pac.pc)
+ install /usr/local/samba/lib/pkgconfig/ndr_standard.pc (from bin/default/librpc/ndr_standard.pc)
+ install /usr/local/samba/lib/pkgconfig/ndr_nbt.pc (from bin/default/librpc/ndr_nbt.pc)
+ install /usr/local/samba/lib/pkgconfig/ndr.pc (from bin/default/librpc/ndr.pc)
+ install /usr/local/samba/lib/pkgconfig/samba-policy.cpython-36m-x86_64-linux-gnu.pc (from bin/default/source4/lib/policy/samba-policy.cpython-36m-x86_64-linux-gnu.pc)
+ install /usr/local/samba/sbin/samba_downgrade_db (from bin/default/source4/scripting/bin/samba_downgrade_db.inst)
+ install /usr/local/samba/sbin/samba_dnsupdate (from bin/default/source4/scripting/bin/samba_dnsupdate.inst)
+ install /usr/local/samba/sbin/samba_spnupdate (from bin/default/source4/scripting/bin/samba_spnupdate.inst)
+ install /usr/local/samba/sbin/samba_upgradedns (from bin/default/source4/scripting/bin/samba_upgradedns.inst)
+ install /usr/local/samba/sbin/samba_kcc (from bin/default/source4/scripting/bin/samba_kcc.inst)
+ install /usr/local/samba/sbin/samba-gpupdate (from bin/default/source4/scripting/bin/samba-gpupdate.inst)
+ install /usr/local/samba/bin/samba-tool (from bin/default/source4/scripting/bin/samba-tool.inst)
+ install /usr/local/samba/lib/pkgconfig/netapi.pc (from bin/default/source3/libnet/netapi.pc)
+ install /usr/local/samba/lib/pkgconfig/smbclient.pc (from bin/default/source3/libsmb/smbclient.pc)
[306/306] Linking bin/default/third_party/heimdal_build/compile_et.inst
[317/322] Processing ../heimdal/lib/asn1/der-protos.h: third_party/heimdal/lib/asn1/der_get.c third_party/heimdal/lib/asn1/der_put.c third_party/heimdal/lib/asn1/der_free.c third_party/heimdal/lib/asn1/der_format.c third_party/heimdal/lib/asn1/der_length.c third_party/heimdal/lib/asn1/der_copy.c third_party/heimdal/lib/asn1/der_cmp.c third_party/heimdal/lib/asn1/der_print.c third_party/heimdal/lib/asn1/extra.c third_party/heimdal/lib/asn1/timegm.c third_party/heimdal/lib/asn1/template.c third_party/heimdal/lib/asn1/oid_resolution.c -> bin/default/third_party/heimdal/lib/asn1/der-protos.h
Can't locate JSON.pm in @INC (you may need to install the JSON module) (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /root/samba-4.16.3/third_party/heimdal/cf/make-proto.pl line 7.
BEGIN failed--compilation aborted at /root/samba-4.16.3/third_party/heimdal/cf/make-proto.pl line 7.

Waf: Leaving directory `/root/samba-4.16.3/bin/default'
Build failed
 -> task in '../heimdal/lib/asn1/der-protos.h' failed with exit status 2 (run with -v to display more information)
make: *** [Makefile:10: install] エラー 1
#

「dnf install perl-JSON」で対処

# dnf install perl-JSON
メタデータの期限切れの最終確認: 0:24:56 時間前の 2022年07月19日 09時59分33秒 に 実施しました。
依存関係が解決しました。
================================================================================
 パッケージ      Arch         バージョン              リポジトリー        サイズ
================================================================================
インストール:
 perl-JSON       noarch       2.97.001-2.el8          ol8_appstream        96 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 96 k
インストール後のサイズ: 245 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
perl-JSON-2.97.001-2.el8.noarch.rpm              70 kB/s |  96 kB     00:01
--------------------------------------------------------------------------------
合計                                             70 kB/s |  96 kB     00:01
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1
  インストール中   : perl-JSON-2.97.001-2.el8.noarch                        1/1
  scriptletの実行中: perl-JSON-2.97.001-2.el8.noarch                        1/1
  検証             : perl-JSON-2.97.001-2.el8.noarch                        1/1

インストール済み:
  perl-JSON-2.97.001-2.el8.noarch

完了しました!
#

以上でsamba-4.16.3のコンパイルが正常に終了した。

Oracle Cloud上のLinuxサーバからOracle Cloudのオブジェクトストレージをs3fsを使ってファイルシステムとして使う


Oracle Cloud上で運用しているファイルサーバのディスク使用率がいつのまにか96%を超えていた。

え?と思って調べてみたら、外部コンテンツを取り込む際に、コンテンツのバージョンも残しておこうと軽い気持ちで設定したgitが容量を使っていた。

遅くてもいいや、ということで、使っていない50GBのオブジェクトストレージ領域をs3fsでファイルシステムとして使うこととした。

参考文献
s3fs配布元
・Oracle Cloud Infrastructure Blog「Mounting an Object Storage Bucket as File System on Oracle Linux
・Oracle Cloud Infrastructureドキュメント「Amazon S3互換API
・Cloudii「Oracle Cloud オブジェクトストレージをOracle Linuxのファイルシステムとして直接マウントする方法。

基本的には、Oracle Cloud Infrastructure Blogの記述通りにやるだけなのだが、いろいろ勘違いしていて上手くいかなかった。

手順0: Oracle Cloud上でバケット作成

Oracle blog上では手順に書かれていないので手順0として書きます。

オブジェクトストレージにてバケットの作成を行います。

バケット作成後にバケットの詳細を確認し、一般のところにある「ネームスペース」もあとで使用します。

手順1: s3fs-fuseをインストール

epelを有効にしている状態であれば、「yum install s3fs-fuse」を実行するだけでインストール完了。

# yum install s3fs-fuse
読み込んだプラグイン:langpacks, ulninfo
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ s3fs-fuse.x86_64 0:1.91-1.el7 を インストール
--> 依存性の処理をしています: fuse >= 2.8.4 のパッケージ: s3fs-fuse-1.91-1.el7.x86_64
--> 依存性の処理をしています: fuse-libs >= 2.8.4 のパッケージ: s3fs-fuse-1.91-1.el7.x86_64
--> 依存性の処理をしています: libfuse.so.2(FUSE_2.2)(64bit) のパッケージ: s3fs-fuse-1.91-1.el7.x86_64
--> 依存性の処理をしています: libfuse.so.2(FUSE_2.5)(64bit) のパッケージ: s3fs-fuse-1.91-1.el7.x86_64
--> 依存性の処理をしています: libfuse.so.2(FUSE_2.6)(64bit) のパッケージ: s3fs-fuse-1.91-1.el7.x86_64
--> 依存性の処理をしています: libfuse.so.2(FUSE_2.8)(64bit) のパッケージ: s3fs-fuse-1.91-1.el7.x86_64
--> 依存性の処理をしています: libfuse.so.2()(64bit) のパッケージ: s3fs-fuse-1.91-1.el7.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ fuse.x86_64 0:2.9.4-1.0.9.el7 を インストール
---> パッケージ fuse-libs.x86_64 0:2.9.4-1.0.9.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

===================================================================================================================================
 Package                     アーキテクチャー         バージョン                        リポジトリー                          容量
===================================================================================================================================
インストール中:
 s3fs-fuse                   x86_64                   1.91-1.el7                        ol7_developer_EPEL                   257 k
依存性関連でのインストールをします:
 fuse                        x86_64                   2.9.4-1.0.9.el7                   ol7_latest                            88 k
 fuse-libs                   x86_64                   2.9.4-1.0.9.el7                   ol7_latest                            97 k

トランザクションの要約
===================================================================================================================================
インストール  1 パッケージ (+2 個の依存関係のパッケージ)

総ダウンロード容量: 442 k
インストール容量: 1.1 M
Is this ok [y/d/N]: y
Downloading packages:
<略>
インストール:
  s3fs-fuse.x86_64 0:1.91-1.el7

依存性関連をインストールしました:
  fuse.x86_64 0:2.9.4-1.0.9.el7                                 fuse-libs.x86_64 0:2.9.4-1.0.9.el7

完了しました!
#

手順2: 認証情報の設定

Oracle Cloudにログインした状態で右上のユーザアイコンから[プロファイル]-[ユーザー設定]を選択します。

画面が変わって、下の方にある[リソース]-[顧客秘密キー]を選択します。

この「顧客秘密キー」がS3 compatibleとして使う場合の認証情報となります。

「秘密キーの生成」をクリックして、何か名前を決めて作成します。

次の画面で表示される「生成されたキー」は「SECRET_ACCESS_KEY」として使いますので、かならず「コピー」してください。

これを忘れた場合は再作成する必要があります。

なお、キーはこんな感じですね。

で・・・Oracle blogだとACCESS_KEY_IDは何を使えばいいのかハッキリ書いていないので、しばらく名前として設定したs3-accessを使ってアクセスを試みていました。

正しくは上記の「アクセスキー」のところの文字列を使います。

Oracle blogでは下記の様に個人ユーザのディレクトリに認証情報を配置しています。

$ echo ACCESS_KEY_ID:SECRET_ACCESS_KEY > ${HOME}/.passwd-s3fs
$ chmod 600 ${HOME}/.passwd-s3fs

今回は個人用ではなく起動時から使えるような形にしたいので /etc/passwd-s3fs として設定しました。

# echo ~b66e06:KZyW~~~BDho= >  /etc/passwd-s3fs 
# chmod 600  /etc/passwd-s3fs 
#

手順3: マウントする

Oracle blogでは個人権限でマウントするための下記が書かれています。

$ s3fs [bucket] [destination directory] -o endpoint=[region] -o passwd_file=${HOME}/.passwd-s3fs -o url=https://[namespace].compat.objectstorage.[region].oraclecloud.com/ -onomultipart -o use_path_request_style

最初はアクセスできることを検証するため、このコマンドで実行します。

各要素は以下のようになっています。

[bucket]=手順0で作成したバケット名
[destination directory]=ローカルLinuxのマウントポイント
[namespace]=手順0で作成したバケットの詳細で確認できるネームスペース

テストとしてホームディレクトリ内にあるs3fsというディレクトリにマウントするべく実行

$ s3fs tw~t ./s3fs -o endpoint=us-phoenix-1 -o passwd_file=/etc/passwd-s3fs -o url=https://ax~b7.compat.objectstorage.us-phoenix-1.oraclecloud.com -onomultipart -o use_path_request_style
fuse: failed to exec fusermount: Permission denied
$

これはfusermountに権限がないためマウントできないというもので、下記で対処します。

$ sudo chmod a+x /usr/bin/fusermount
$ 

再実行

$ s3fs tw~t ./s3fs -o endpoint=us-phoenix-1 -o passwd_file=/etc/passwd-s3fs -o url=https://ax~b7.compat.objectstorage.us-phoenix-1.oraclecloud.com -onomultipart -o use_path_request_style
$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         460M     0  460M    0% /dev
tmpfs            486M  380K  486M    1% /dev/shm
tmpfs            486M   19M  467M    4% /run
tmpfs            486M     0  486M    0% /sys/fs/cgroup
/dev/sda3         39G   37G  2.0G   95% /
/dev/sda1        200M  7.4M  193M    4% /boot/efi
tmpfs             98M     0   98M    0% /run/user/0
tmpfs             98M     0   98M    0% /run/user/993
tmpfs             98M     0   98M    0% /run/user/1001
$

マウントされていない??/var/log/messages を確認すると認証情報の関連でマウントに失敗していました。

Jul  9 23:07:06 oralinux s3fs[22545]: s3fs version 1.91(unknown) : s3fs -o endpoint=us-phoenix-1 -o passwd_file=/etc/passwd-s3fs -o url=https://ax~fb7.compat.objectstorage.us-phoenix-1.oraclecloud.com -onomultipart -o use_path_request_style twsearch-git ./s3fs
Jul  9 23:07:06 oralinux  s3fs[22545]: Loaded mime information from /etc/mime.types
Jul  9 23:07:06 oralinux  s3fs[22546]: init v1.91(commit:unknown) with OpenSSL
Jul  9 23:07:06 oralinux  s3fs[22546]: s3fs.cpp:s3fs_check_service(3572): Failed to connect by sigv4, so retry to connect by signature version 2.
Jul  9 23:07:06 oralinux  s3fs[22546]: s3fs.cpp:s3fs_check_service(3584): Bad Request(host=https://ax~fb7.compat.objectstorage.us-phoenix-1.oraclecloud.com) - result of checking service.

これは /etc/passwd-s3fsに書いた access-key定義が誤っていた場合のログです。

修正して再実行すると今度はマウントできました。

$ s3fs tw~t ./s3fs -o endpoint=us-phoenix-1 -o passwd_file=/etc/passwd-s3fs -o url=https://ax~b7.compat.objectstorage.us-phoenix-1.oraclecloud.com -onomultipart -o use_path_request_style
$ df -h
ファイルシス   サイズ  使用  残り 使用% マウント位置
devtmpfs         460M     0  460M    0% /dev
tmpfs            486M  400K  486M    1% /dev/shm
tmpfs            486M   19M  467M    4% /run
tmpfs            486M     0  486M    0% /sys/fs/cgroup
/dev/sda3         39G   37G  1.9G   96% /
/dev/sda1        200M  7.4M  193M    4% /boot/efi
tmpfs             98M     0   98M    0% /run/user/0
tmpfs             98M     0   98M    0% /run/user/993
tmpfs             98M     0   98M    0% /run/user/1001
s3fs              16E     0   16E    0% /home/users/s3fs
$

成功した場合は /var/log/messagesは下記の様な感じでした

Jul  9 23:30:18 oralinux s3fs[23933]: s3fs version 1.91(unknown) : s3fs -o endpoint=us-phoenix-1 -o passwd_file=/etc/passwd-s3fs -o url=https://ax~fb7.compat.objectstorage.us-phoenix-1.oraclecloud.com -onomultipart -o use_path_request_style twsearch-git ./s3fs
Jul  9 23:30:18 oralinux s3fs[23933]: Loaded mime information from /etc/mime.types
Jul  9 23:30:18 oralinux s3fs[23936]: init v1.91(commit:unknown) with OpenSSL
Jul  9 23:30:26 oralinux systemd: Configuration file /etc/systemd/system/oracle-cloud-agent.service is marked executable. Please remove executable permission bits. Proceeding anyway.

ただ、この設定だとs3fsを実行したユーザだけがアクセスでき、他のユーザではアクセスできません。

これは「allow_other」というオプションをつけることでアクセスできるようになります。

手順4: /etc/fstab に書く

再起動してもマウントされるようにするには /etc/fstab に書きます。 (/etc/rc.local とかに書く、という手順は不適切です)

上記で使った例であれば /etc/fstab に下記の様に書きます。

tw~it /home/users/s3fs fuse.s3fs use_path_request_style,url=https://axd~fb7.compat.objectstorage.us-phoenix-1.oraclecloud.com,use_path_request_style,_netdev,allow_other

これで、再起動してもマウントされるようになりました。