CentOS 8で、OpenLDAPから389 Directory Serverを使うようになったという話

# What's？

CentOS 8から、OpenLDAPが標準で入らなくなったと聞いて。

代わりに使う389 Directory Serverあたりも含めて、少し調べてみようかなと。


# RHEL 7.4で非推奨になったOpenLDAPサーバー

Red Hat Enterprise Linux 7.4のRelease Notesの中で、OpenLDAPサーバーが非推奨になったと書かれています。

[第39章 非推奨の機能](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/7.4_release_notes/chap-red_hat_enterprise_linux-7.4_release_notes-deprecated_functionality)

> Identity Management に関連する非推奨機能
> 以下の機能は将来削除されるか、または他のコンポーネントに置き換えられる予定です。

> OpenLDAP サーバー

実際、RHEL 8、そしてCentOS 8には含まれなくなったようです。

で、LDAPを使いたかったらなにを使うべきか？という話へ。

[What is the support status of the LDAP servers shipped with Red Hat Enterprise Linux?](https://access.redhat.com/solutions/2440481)

389-dsというものがあるらしいです。

> The 389-ds packages provide the core directory services components for Identity Management (IdM) in Red Hat Enterprise Linux and the Red Hat Directory Server (RHDS). The package is not supported as a stand-alone solution to provide LDAP services.

Red Hat Directory Serverの一部として提供されるようですが、スタンドアロンでは提供されません、と。

ところで、どうしてOpenLDAPサーバーが含まれなくなったのかは、以下に理由が書かれています。

> Starting with Red Hat Enterprise Linux 7.4, the openldap-servers package has been deprecated and will not be included in a future major release of Red Hat Enterprise Linux. There is a variety of open source tools and solutions that provide directory services. With the raise of the adoption of the Identity Management in Red Hat Enterprise Linux (IdM) solution and decline in use of the OpenLDAP server for the enterprise use cases Red Hat made a decision to focus on the technologies that Red Hat historically had deep understanding, expertise and been investing into for more than a decade. 

ここが知りたかったのですが、OpenLDAPの使用が減少し、RHELでのIdMの採用が増えていることからRed Hatが深く理解しているテクノロジーにフォーカスすることを決定した、と。

IdMとは、以下のドキュメントに載っているもののようですね。

[Identity Management のインストール](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html-single/installing_identity_management/index)

あと、Red Hat Directory Server自体も記載がありましたね。

[Red Hat Directory Server](https://access.redhat.com/products/red-hat-directory-server)


で。CentOSではどうしましょうかというところで。

389 Directory Serverを使うことになるようです。

## CentOS 7,8でのOpenLDAPサーバーの状況を見てみる

まずは、現状確認をしてみましょう。


## CentOS 7

CentOS 7.8の場合。

```shell
$ cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)
```

`openldap`でリポジトリを検索してみます。

```shell
$ yum search openldap
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
=========================================================================== N/S matched: openldap ============================================================================
compat-openldap.i686 : OpenLDAP compatibility shared libraries
compat-openldap.x86_64 : OpenLDAP compatibility shared libraries
openldap-servers-sql.x86_64 : SQL support module for OpenLDAP server
openldap.i686 : LDAP support libraries
openldap.x86_64 : LDAP support libraries
openldap-clients.x86_64 : LDAP client utilities
openldap-devel.i686 : LDAP development libraries and header files
openldap-devel.x86_64 : LDAP development libraries and header files
openldap-servers.x86_64 : LDAP server
perl-Mozilla-LDAP.x86_64 : LDAP Perl module that wraps the OpenLDAP C SDK

  Name and summary matches only, use "search all" for everything.


$ yum list *openldap*
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
Installed Packages
openldap.x86_64                                                                         2.4.44-21.el7_6                                                              @anaconda
Available Packages
compat-openldap.i686                                                                    1:2.3.43-5.el7                                                               base     
compat-openldap.x86_64                                                                  1:2.3.43-5.el7                                                               base     
openldap.i686                                                                           2.4.44-21.el7_6                                                              base     
openldap-clients.x86_64                                                                 2.4.44-21.el7_6                                                              base     
openldap-devel.i686                                                                     2.4.44-21.el7_6                                                              base     
openldap-devel.x86_64                                                                   2.4.44-21.el7_6                                                              base     
openldap-servers.x86_64                                                                 2.4.44-21.el7_6                                                              base     
openldap-servers-sql.x86_64                                                             2.4.44-21.el7_6                                                              base     
```

まあ、見つかります、と。


## CentOS 8の場合

CentOS 8.2の場合。

```shell
$ cat /etc/redhat-release 
CentOS Linux release 8.2.2004 (Core)
```

ところで、CentOS 8だと`yum`コマンドは`dnf`のエイリアスなんですね。

```shell
$ ll /usr/bin/yum
lrwxrwxrwx. 1 root root 5 Jul 21 18:46 /usr/bin/yum -> dnf-3
```

`openldap`でリポジトリを検索。

```shell
$ dnf search openldap
Last metadata expiration check: 0:00:18 ago on Tue Oct 27 03:03:31 2020.
======================================================================= Name Exactly Matched: openldap =======================================================================
openldap.x86_64 : LDAP support libraries
openldap.i686 : LDAP support libraries
====================================================================== Name & Summary Matched: openldap ======================================================================
collectd-openldap.x86_64 : OpenLDAP plugin for collectd
=========================================================================== Name Matched: openldap ===========================================================================
openldap-devel.i686 : LDAP development libraries and header files
openldap-devel.x86_64 : LDAP development libraries and header files
openldap-clients.x86_64 : LDAP client utilities
========================================================================= Summary Matched: openldap ==========================================================================
perl-Mozilla-LDAP.x86_64 : LDAP Perl module that wraps the OpenLDAP C SDK


$ dnf list *openldap*
Last metadata expiration check: 0:03:06 ago on Tue Oct 27 03:03:31 2020.
Installed Packages
openldap.x86_64                                                                         2.4.46-11.el8_1                                                                @BaseOS
Available Packages
collectd-openldap.x86_64                                                                5.9.0-5.el8                                                                    epel   
openldap.i686                                                                           2.4.46-11.el8_1                                                                BaseOS 
openldap-clients.x86_64                                                                 2.4.46-11.el8_1                                                                BaseOS 
openldap-devel.i686                                                                     2.4.46-11.el8_1                                                                BaseOS 
openldap-devel.x86_64                                                                   2.4.46-11.el8_1                                                                BaseOS 
```

クライアントや開発用のパッケージは見つかるのですが、`openldap-servers`パッケージがなくなっています。

ちなみに、OpenLDAPサーバーは後述する389 Directory Serverを使うのですが、クライアントツールに関してはOpenLDAPのものを使うみたいですよ。

389 Directory Serverは、サーバー側のみのようなので。

[Client Software](https://directory.fedoraproject.org/docs/389ds/FAQ/client-software.html)

# 389 Directory ServerをCentOS 8にインストールする

389 Directory Serverは、オープンソースのLDAPサーバーです。

[389 Directory Server](https://directory.fedoraproject.org/)

サーバーのみなようなので、クライアントは別に必要です。

[Client Software](https://directory.fedoraproject.org/docs/389ds/FAQ/client-software.html)

こちらを、CentOS 8にインストールしてみましょう。

```shell
$ cat /etc/redhat-release 
CentOS Linux release 8.2.2004 (Core)
```

あくまで、パッケージインストールのコマンド実行にとどめます。今回は、それ以上のことはやりません。

ダウンロードページに、インストール方法が書かれています。EPELを使うようですね。

[Download 389 Directory Server / CentOS 8.1+ (ds 1.4.x)](https://directory.fedoraproject.org/docs/389ds/download.html)

`dnf`を使って、モジュールを検索してみると、AppStreamとEPELのものが見つかります。

```shell
$ dnf module list 389*
Last metadata expiration check: 0:22:33 ago on Tue Oct 27 03:03:31 2020.
CentOS-8 - AppStream
Name                                        Stream                        Profiles                                           Summary                                          
389-ds                                      1.4                                                                              389 Directory Server (base)                      

Extra Packages for Enterprise Linux Modular 8 - x86_64
Name                                        Stream                        Profiles                                           Summary                                          
389-directory-server                        stable                        default [d], legacy, minimal                       389 Directory Server                             
389-directory-server                        testing                       default [d], legacy, minimal                       389 Directory Server                             

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```

今回は、両方とも実行してみます。


## AppStreamのものを使う

`dnf list`の時点では、389 Directory Serverに関するものは見つかりません。

```shell
$ dnf list 389*
Last metadata expiration check: 0:16:49 ago on Tue Oct 27 03:10:34 2020.
Error: No matching Packages to list
```

モジュールのリストをもう1度見てみます。

```shell
$ dnf module list 389*
Last metadata expiration check: 0:22:33 ago on Tue Oct 27 03:03:31 2020.
CentOS-8 - AppStream
Name                                        Stream                        Profiles                                           Summary                                          
389-ds                                      1.4                                                                              389 Directory Server (base)                      

Extra Packages for Enterprise Linux Modular 8 - x86_64
Name                                        Stream                        Profiles                                           Summary                                          
389-directory-server                        stable                        default [d], legacy, minimal                       389 Directory Server                             
389-directory-server                        testing                       default [d], legacy, minimal                       389 Directory Server                             

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```

これを有効にします。

```shell
389-ds                                      1.4                                                                              389 Directory Server (base)    
```

モジュールで`389-ds`を有効にします。

```shell
$ sudo dnf module enable 389-ds
```

すると、一覧に現れるようになります。

```shell
$ dnf list 389*
Last metadata expiration check: 1:20:08 ago on Tue Oct 27 03:03:31 2020.
Available Packages
389-ds-base.x86_64                                                             1.4.2.4-10.module_el8.2.0+489+38ed056a                                                AppStream
389-ds-base-devel.x86_64                                                       1.4.2.4-10.module_el8.2.0+489+38ed056a                                                AppStream
389-ds-base-legacy-tools.x86_64                                                1.4.2.4-10.module_el8.2.0+489+38ed056a                                                AppStream
389-ds-base-libs.x86_64                                                        1.4.2.4-10.module_el8.2.0+489+38ed056a                                                AppStream
389-ds-base-snmp.x86_64                                                        1.4.2.4-10.module_el8.2.0+489+38ed056a                                                AppStream
```

モジュールとしても有効（`[e]`）になりました。

```shell
$ dnf module list 389*
Last metadata expiration check: 1:22:15 ago on Tue Oct 27 03:03:31 2020.
CentOS-8 - AppStream
Name                                       Stream                           Profiles                                          Summary                                         
389-ds                                     1.4 [e]                                                                            389 Directory Server (base)                     

Extra Packages for Enterprise Linux Modular 8 - x86_64
Name                                       Stream                           Profiles                                          Summary                                         
389-directory-server                       stable [x]                       default [d], legacy, minimal                      389 Directory Server                            
389-directory-server                       testing [x]                      default [d], legacy, minimal                      389 Directory Server                            

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```

`389-ds-base`をインストール。

```shell
$ sudo dnf install 389-ds-base
```

バージョン確認。

```shell
$ /usr/sbin/ns-slapd --version
389 Project
389-Directory/1.4.2.4 B2020.255.2048
```

今回は、こちらがインストールされたようです。

http://mirror.centos.org/centos/8.2.2004/AppStream/x86_64/os/Packages/

確認が終わったので削除。

```shell
$ sudo dnf remove 389-ds-base
$ sudo dnf module disable 389-ds
```


## EPELのものを使う

EPELのものを使う場合は、こちらの手順に従います。

[Download 389 Directory Server / CentOS 8.1+ (ds 1.4.x)](https://directory.fedoraproject.org/docs/389ds/download.html)

`yum`を`dnf`に読み替えるくらいですね。

```shell
$ sudo dnf module install 389-directory-server:stable/default
```

インストールと同時に、モジュールとしても有効になります。

```shell
$ dnf module list 389*
Last metadata expiration check: 0:36:21 ago on Tue Oct 27 03:03:31 2020.
CentOS-8 - AppStream
Name                                      Stream                          Profiles                                             Summary                                        
389-ds                                    1.4 [x]                                                                              389 Directory Server (base)                    

Extra Packages for Enterprise Linux Modular 8 - x86_64
Name                                      Stream                          Profiles                                             Summary                                        
389-directory-server                      stable [e]                      default [d] [i], legacy, minimal                     389 Directory Server                           
389-directory-server                      testing                         default [d], legacy, minimal                         389 Directory Server                           

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```

バージョンを確認。

```shell
$ /usr/sbin/ns-slapd -v
389 Project
389-Directory/1.4.2.16 B2020.217.1124
```

こちらのものがインストールされたようです。

https://dl.fedoraproject.org/pub/epel/8/Modular/x86_64/Packages/3/


削除。

```shell
$ sudo dnf module remove 389-directory-server:stable/default
```

これだけだとモジュールとしては有効化されたままのようなので

```shell
$ dnf module list 389*
Last metadata expiration check: 0:46:15 ago on Tue Oct 27 03:03:31 2020.
CentOS-8 - AppStream
Name                                       Stream                           Profiles                                          Summary                                         
389-ds                                     1.4 [x]                                                                            389 Directory Server (base)                     

Extra Packages for Enterprise Linux Modular 8 - x86_64
Name                                       Stream                           Profiles                                          Summary                                         
389-directory-server                       stable [e]                       default [d], legacy, minimal                      389 Directory Server                            
389-directory-server                       testing                          default [d], legacy, minimal                      389 Directory Server                            

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```

`disable`にしておきます。

```shell
$ sudo dnf module disable 389-directory-server:stable/default
```

元に戻りました、と。

```shell
$ dnf module list 389*
Last metadata expiration check: 0:46:37 ago on Tue Oct 27 03:03:31 2020.
CentOS-8 - AppStream
Name                                       Stream                           Profiles                                          Summary                                         
389-ds                                     1.4 [x]                                                                            389 Directory Server (base)                     

Extra Packages for Enterprise Linux Modular 8 - x86_64
Name                                       Stream                           Profiles                                          Summary                                         
389-directory-server                       stable [x]                       default [d], legacy, minimal                      389 Directory Server                            
389-directory-server                       testing [x]                      default [d], legacy, minimal                      389 Directory Server                            

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
```

ざっくり、CentOS 8からOpenLDAPサーバーがなくなった理由や、389 Directory Serverのパッケージインストール方法を調べてみました。