以前、s3fsでsamba共有するネタを書きました。
s3fsの場合、S3互換ということも有り、ある程度制限があるようです。
だったら、ネイティブ接続(SDK)が可能な rcloneだったら良い感じになるのではと思い、調査しました。
rcloneは、最新の v1.68.1 を使えば、OracleCloud Object Storageに完全対応しているようで安心ですな。
マウントするとなると、fuseを使うことになるので、dockerでやる時は、特権が必要になります。
で、今回も rclone でマウントしたオブジェクトストレージをsambaで共有して、Windows11とかで使ってみましょう。
使用するOSは、Oracle Linux 8.10 にします。たぶん、Ubuntuでも問題無いと思います。
で、今回も、Dockerを使います。
早速、Dockerを定義しましょう。
Dockerfile
EXPOSE 139/tcp
EXPOSE 137/udp
EXPOSE 138/udp
rcloneは、OCIの認証を利用することになるので、認証情報を作成します。
oci/config
[DEFAULT]
user=ocid1.user.oc1..aaccaaaa4hogeojl4pjhogenlm7qvvbbaipmj7895mkhoge6ig5hoge7v87q
fingerprint=48:b7:78:09:7a:a7:b0:bb:ac:59:eb:ff:c0:ea:23:12
key_file=/root/.oci/oci_api_key.pem
tenancy=ocid1.tenancy.oc1..aaaaaaaacosd4hogejphogeehgpcihogeb56vpj6fv2vuvvvgeukjhhogebq
region=ap-tokyo-1
oci/oci_api_key.pem
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCosqid1yl2BjDY
~~~
fw0X5YxX4U5UZFh862lNSMk=
-----END PRIVATE KEY-----
rcloneの定義も必要です。
rclone/rclone/rclone.conf
[hogeobs]
type = oracleobjectstorage
provider = user_principal_auth
namespace = hogehogenames
compartment = ocid1.compartment.oc1..aaavvaaamgmw22eshogeqnkkirbhogeqpff4ihdgfhogejkv2sahogehogea
region = ap-tokyo-1
出来ましたー
後は、起動です。
docker compose up -d
ということで、簡単でしたね。
流石に、ちょっと説明が要りますよね。
OracleLinuxイメージに、sambaとfuse3とpythonとoci cliをセットアップしてます。
rcloneは、パッケージからインストールしても、OCIのオブジェクトストレージに対応していないバージョンとなるので、公式よりイントールしています。
rcloneでマウントしたとこをsambaで共有しているだけです。
マウント場所:/mnt/share
マウントユーザー:hogeuser
マウントパスワード:hogepw
OCIリージョン:ap-tokyo-1
OCIテナンシ:ocid1.tenancy.oc1..aaaaaaaacosd4hogejphogeehgpcihogeb56vpj6fv2vuvvvgeukjhhogebq
OCI認証ネームスペース:hogehogenames
OCIコンパートメント:ocid1.compartment.oc1..aaavvaaamgmw22eshogeqnkkirbhogeqpff4ihdgfhogejkv2sahogehogea
OCI顧客秘密キー:oci_api_key.pem
OCIユーザー:ocid1.user.oc1..aaccaaaa4hogeojl4pjhogenlm7qvvbbaipmj7895mkhoge6ig5hoge7v87q
一応、OCIとrcloneの定義が無かった場合、setupを実行します。
色々と聞かれて面倒なので、事前に定義しています。
別のとこで作成してから、コピーしても問題無いです。
それと、顧客秘密キーは、APIキーは、必要になるので、OCIで事前に作成しておいて下さいませ。
OCI認証ネームスペースは、プロファイルでテナンシのとこに表示がある オブジェクト・ストレージ・ネームスペース です。
さてさて、この手のネタも、ここまでなら よくあるネタですね。
さらなら、進化系として、ActiveDirectoryに参加するパターンにしてみましょう。
ここからは、Dockerでないですけど、Docker化することも可能ですので、頑張って組み込んで下さい。
今回は、我が家にドメインが無いし、面倒なんでやりませんよ。
まず、追加パッケージです。
dnf install samba-client-libs samba-common samba-common-libs
dnf install krb5-workstation oddjob-mkhomedir samba-winbind samba-winbind-clients samba-winbind-krb5-locator krb5-workstation pam_krb5
dnf install authconfig
次にドメイン参加用の定義です。
サンプルは、HOGEHOGE.CO.JP ドメインにしときます。
ドメインコントローラーは、2つで、dc1をプライマリと仮定しています。
次に、ドメイン参加用のSamba定義です。
/etc/samba/smb.conf
[global]
workgroup = HOGEHOGE
realm = HOGEHOGE.CO.JP
server string = OCI RClone Server
netbios name = HOGEHOGE
security = ads
idmap config * : range = 16777216-33554431
idmap config HOGEHOGE:backend = rid
idmap config HOGEHOGE:range = 10000-199999
idmap config TRUSTED:backend = rid
idmap config TRUSTED:range = 200000-299999
obey pam restrictions = yes
template homedir = /home/%D/%U
template shell = /bin/bash
kerberos method = secrets only
winbind use default domain = true
winbind offline logon = false
dos charset = CP932
unix charset = UTF-8
wins support = yes
load printers = no
disable spoolss = yes
[homes]
browseable = No
comment = Home Directories
valid users = %S, %D%w%S
read only = No
inherit acls = Yes
[share]
path = /mnt/share/
valid users = +%D%w"Domain Users"
browsable = Yes
writable = Yes
read only = No
public = Yes
kernel oplocks = no
dfree command = /usr/local/bin/smbdiskfree.sh
dfree cache time = 60
とどめのドメイン参加です。
この作業には、ドメイン管理者が必要です。
kinit
net ads join -S dc1.hogehoge.co.jp -U
authconfig --enablekrb5 --enablewinbind --enablewinbindauth --enablemkhomedir --update
share 共有は、Domain Usersグループに解放しています。
なので、rcloneのマウントユーザーも合わせないと読み書き出来なくなってしまいます。
以下のコマンドで、Domain Usersグループのgidを調査して、rcloneのマウントグループに指定します。
wbinfo --sid-to-uid=`wbinfo --name-to-sid='Domain Users'`
同様にユーザーも指定しないといけないので、Domain Usersの適当なメンバーのユーザーをマウントユーザーに指定する必要があります。
wbinfo --sid-to-uid=`wbinfo --name-to-sid='user1'`
rclone mount の uid と gid にwbinfoの結果を指定すればOkです。
どうですか、無限容量の共有が完成ですね。
でも、こんなのを解放すると、管理が大変になりそうです。
home共有は、無くても良いです