UEFIブートのサーバでWindows Server 2016のインストール用USBメモリが起動しない

hpeのProLiantサーバにWindows Server 2016をインストールする場合、通常はIntelligent Provisioning を使う。

しかし、Administratorパスワードが不明な場合、Windows Server 2016の標準ISOイメージのレスキューモードで起動することになるのだが、Smart Array B140i用のドライバが含まれていないため、内蔵ディスクが見えない。

対処するためにはISOイメージ内のsources\boot.wim にDSIMコマンドを使ってAdd-driverすることになる。

手順は「Windows インストールメディアにドライバーを追加する」にあるものをほぼそのまま使い、下記の様に実施した。

カスタマイズしたWindows Server 2016ISOイメージの作り方

1. 作業用Windows10を用意
2. Windows ADK 1709の「Deployment Tools」と「Windows Preinstallation Environment (Windows PE)」をインストール
3. メニューの登録されている「展開およびイメージング ツール環境」を選択してコマンドプロンプトを起動
4. 「copype amd64 c:\work\pe_x64」(今回、C:\work を作業用ディレクトリとした)でWindows PE環境を展開
5. C:\work\iso にWindows Server 2016 ISOの中身をコピー
6. マウント用ディレクトリ c:\work\offline を作成
7. 「dism /get-imageInfo /imagefile:”C:\work\iso\sources\boot.wim”」でインデックス番号を確認
 インデックス1とインデックス2があることを確認
 レスキューの際にどちらを使うかわからないので、とりあえず両方使う

8. まずインデックス1をc:\work\offlineにマウント
「dism /mount-image /imagefile:”C:\work\iso\sources\boot.wim” /index:1 /mountdir:”C:\work\offline”」

9. smart array b140i用のドライバをc:\work\hpedriver に展開

10. ドライバを追加。複数ある場合も考慮して、/recurseオプション付きで実行
「dism /add-driver /image:”c:\work\offline” /driver:”c:\work\hpedriver” /recurse」

11. ドライバが追加されたことを確認
「dism /get-drivers /image:”c:\work\offline”」

12. アンマウントする
「dism /unmount-image /mountdir:”c:\work\offline” /commit」

13. 今度はインデックス2に対して実行
「dism /mount-image /imagefile:”C:\work\iso\sources\boot.wim” /index:2 /mountdir:”C:\work\offline”」

14. ドライバを追加。複数ある場合も考慮して、/recurseオプション付きで実行
「dism /add-driver /image:”c:\work\offline” /driver:”c:\work\hpedriver” /recurse」

15. ドライバが追加されたことを確認
「dism /get-drivers /image:”c:\work\offline”」

16. アンマウントする
「dism /unmount-image /mountdir:”c:\work\offline” /commit」

17. oscdimgコマンドを実行してISOイメージの作成
「oscdimg -m -o -u2 -udfver102 -bootdata:2#p0,e,bc:\work\PE_x64\fwfiles\etfsboot.com#pEF,e,bc:\work\PE_x64\fwfiles\efisys.bin c:\work\iso c:\work\win2016-new.iso」

これで、作成したISOイメージをFAT32でフォーマットしたUSBメモリにコピーしようとしたところ、install.wimのコピーで失敗した。

原因はinstall.wimのサイズがFAT32制限である4GB以上の約6GBであるためです。

NTFSもしくはexFATでフォーマットしなおしたところ、コピーはできたものの、サーバ側で起動ディスクとして認識せず、起動できなかった。

確認したところ、 UEFIの場合、ファイルシステムがFAT32であること、という前提があった。 この制限については、マイクロソフトの「起動可能な USB フラッシュ ドライブを作成します。」に記載がされている。

サーバー プラットフォームが Unified Extensible Firmware Interface (UEFI) をサポートする場合は、NTFS ではなく FAT32 として、USB フラッシュ ドライブをフォーマットする必要があります。 フォーマットするパーティションを FAT32 として、次のように入力します。 format fs=fat32 quick、し、[入力] をクリックします。

ブート可能な USB フラッシュ ドライブの作成

この記事を書くきっかけとなった件ではiLO Advancedライセンスがあったため、isoイメージをiLOからマウントすることで、DVDを作成する必要はなく対応することができた。

しかし、USBメモリを使ってWindows Server 2016のインストールを行う手法があるかどうか
つまりは4GBを超えてしまったinstall.wimをダイエットすることができるのか、分割することはできるのか、という点は不明なままであった・・・


2018/03/13追記

Microsoftの公式記述を発見した。

手法1「WinPE: Store or split images to deploy Windows using a single USB drive
 USBメモリにパーテーションを2つ作り、FAT32のメイン領域と、NTFSのinstall.wimのみをおく領域を作る、というもの

手法2「Split a Windows image file (.wim) to span across multiple DVDs
Dism /Split-Imageコマンドを使ってinstall.wimをinstall.swmに分割するというもの

Dism /Split-Image /ImageFile:C:\work\iso\sources\install.wim /SWMFile:C:\work\iso\sources\install.swm /FileSize:4000

(上記ページだと4700となっているけど、4GB超えてて大丈夫なの?と心配なので余裕をもって)

2020/12/21 追記

これを再度hpe dl360 gen10環境で実施する必要があったので確認した。

(1) FAT32フォーマットのUSBドライブ(Eドライブにマウント)にISOの中身(Dドライブにマウント)を全部コピーするも install.wim のみエラー
(2) コマンドプロンプト開いて「 dism /split-image /imagefile:d:\sources\install.wim /swmfile:e:\sources\install.swm /filesize:4000」を実行
(3) e:\sources\ にinstall.swm とinstall2.swm ができていることを確認
(4) できたUSBメモリで起動

KaiOS搭載のJioPhoneの型番がよくわかんない件

Firefox OSの派生とも言えるKaiOSを搭載しているというJioPhone

調べて見ると、youtubeにキーロックされたものをリカバリーモードで起動してファクトリーリセットする、というやつが大量に出てくるんだけど、型番がたくさんあって謎過ぎる・・・

JioPhone F30C

JioPhone F81E

JioPhone LF-2403N

JioPhone F61f

JioPhone F90M

JioPhone F101K

Samba 4.7.xでActive Directoryを1から立てる

2019/06/14追記

Samba 4.10.xでActive Directoryを1から立てる」という記事を更新版の記事を作成しています。違いは必要となるパッケージが増えたことについてです。


CentOS7とSamba 4.7.5で環境を作成しなおしたので、記事更新

過去の記事はこちら
2014年2月版「Samba 4.xでActive Directoryを1から立てる
2016年7月版「Samba 4.4.xでActive Directoryを1から立てる


Linux上でSambaを使ってActive Directoryサーバを立てるメリット
Windows Serverを買わなくてもActive Directoryを作れる
 ライセンス費用の低減
Active Directoryユーザの作成などのユーザ管理をWindowsマシンからWindows標準ツールで行える
 ユーザ作成/変更、コンピュータアカウントの作成、DNS管理など、Active Directoryの管理を行う際に
 良く使う動作については、Linuxのコマンドではなく、WindowsのActive Directory管理ツールで行える
 具体的にはADに参加しているWindowsマシンにWindows機能のActive Directory管理ツールを追加インストールしたあと、
 ADの管理者ユーザでログオンすることでAD管理を行うことができる
設定が難しくない
 いまのsambaは、DNSサーバとLDAPサーバ機能が統合されており、AD名とAD上の役割と
 管理者パスワードを決めてしまえば、あとは良きに計らってくれるので
 設定の難易度が非常に低い

もちろん、デメリット、もあります
ActiveDirectoryの全機能が搭載されていない
 ドメイン/フォレストの機能レベルが「Windows Server 2008 R2」までとなっている。
 なお、フェールオーバクラスタについては作成できるようになっていました。
 →「samba 4.7.4で作ったActive Directory環境でWindowsServer2016フェールオーバークラスターを動作させた」というわけで動作することを確認しました

それでは、実際の手順について・・・
元ネタは公式ページの「Setting up Samba as an Active Directory Domain Controller」となります。

0. CentOS7の最小インストールを実施

1. /etc/hostsの修正
自ホスト名を/etc/hostsに追加
追加の際は、ショートのホスト名と、ドメイン付きのFQDNの両方を列挙すること。

[root@adserver ~]# cat /etc/hosts&lt;br&gt;<br>
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4&lt;br&gt;<br>
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6&lt;br&gt;<br>
172.17.44.40    adserver adserver.adosakana.local&lt;br&gt;<br>
[root@adserver ~]#

2. 好みに応じて使うツールをインストール
セッションが途中で切れても良い様に「screen」と、ファイルダウンロードするためにwget(curlでもいいのですが)をインストールします。

[root@adserver ~]# yum install wget screen&lt;br&gt;<br>
<略>&lt;br&gt;<br>
[root@adserver ~]#

3. 必要なパッケージをインストール
Samba公式の「Operating system requirements/Dependencies – Libraries and programs」に記載されているパッケージをインストール

[root@adserver ~]# yum install attr bind-utils docbook-style-xsl gcc gdb krb5-workstation \&lt;br&gt;<br>
       libsemanage-python libxslt perl perl-ExtUtils-MakeMaker \&lt;br&gt;<br>
       perl-Parse-Yapp perl-Test-Base pkgconfig policycoreutils-python \&lt;br&gt;<br>
       python-crypto gnutls-devel libattr-devel keyutils-libs-devel \&lt;br&gt;<br>
       libacl-devel libaio-devel libblkid-devel libxml2-devel openldap-devel \&lt;br&gt;<br>
       pam-devel popt-devel python-devel readline-devel zlib-devel systemd-devel&lt;br&gt;<br>
<略>&lt;br&gt;<br>
[root@adserver ~]#

4. sambaのtar.gzをダウンロード

[root@adserver ~]# wget https://download.samba.org/pub/samba/stable/samba-4.7.5.tar.gz&lt;br&gt;<br>
--2016-xx-xx xx:xx:xx--  https://download.samba.org/pub/samba/stable/samba-4.7.5.tar.gz&lt;br&gt;<br>
download.samba.org をDNSに問いあわせています... 144.76.82.156&lt;br&gt;<br>
download.samba.org|144.76.82.156|:443 に接続しています... 接続しました。&lt;br&gt;<br>
HTTP による接続要求を送信しました、応答を待っています... 200 OK&lt;br&gt;<br>
長さ: 20715838 (20M) [application/gzip]&lt;br&gt;<br>
`samba-4.7.5.tar.gz' に保存中&lt;/p&gt;<br>
&lt;p&gt;100%[======================================&amp;gt;] 16,862,398  3.71MB/s 時間 5.5s&lt;/p&gt;<br>
&lt;p&gt;2018-03-xx xx:xx:xx (2.93 MB/s) - `samba-4.7.5.tar.gz' へ保存完了 [16862398/16862398]&lt;/p&gt;<br>
&lt;p&gt;[root@adserver ~]#

5. configure実施

[root@adserver ~]# tar xfz samba-4.7.5.tar.gz&lt;br&gt;<br>
[root@adserver ~]# cd samba-4.7.5&lt;br&gt;<br>
[root@adserver samba-4.7.5]# ./configure&lt;br&gt;<br>
Checking for program gcc or cc           : /usr/bin/gcc&lt;br&gt;<br>
Checking for program cpp                 : /usr/bin/cpp&lt;br&gt;<br>
<略>&lt;br&gt;<br>
Checking if toolchain accepts -fstack-protector                                                 : yes&lt;br&gt;<br>
'configure' finished successfully (2m43.587s)&lt;br&gt;<br>
[root@adserver samba-4.7.5]#

6. make & make install

[root@adserver samba-4.7.5]# make&lt;br&gt;<br>
WAF_MAKE=1 python ./buildtools/bin/waf build&lt;br&gt;<br>
Waf: Entering directory `/root/samba-4.7.5/bin'&lt;br&gt;<br>
<略>&lt;br&gt;<br>
Note: Writing nmblookup4.1&lt;br&gt;<br>
Waf: Leaving directory `/root/samba-4.7.5/bin'&lt;br&gt;<br>
'build' finished successfully (22m56.876s)&lt;br&gt;<br>
[root@adserver samba-4.7.5]# make install&lt;br&gt;<br>
WAF_MAKE=1 python ./buildtools/bin/waf install&lt;br&gt;<br>
Waf: Entering directory `/root/samba-4.7.5/bin'&lt;br&gt;<br>
<略>&lt;br&gt;<br>
* installing bin/default/pidl/Parse::Pidl::Wireshark::NDR.3pm as /usr/local/samba/share/man/man3/Parse::Pidl::Wireshark::NDR.3pm&lt;br&gt;<br>
Waf: Leaving directory `/root/samba-4.7.5/bin'&lt;br&gt;<br>
'install' finished successfully (6m48.094s)&lt;br&gt;<br>
[root@adserver samba-4.7.5]#

7. インストール完了確認

sambaのバージョン確認

[root@adserver ~]# /usr/local/samba/sbin/samba -V&lt;br&gt;<br>
Version 4.7.5&lt;br&gt;<br>
[root@adserver ~]#

8. Active Directoryのセットアップ
ドメイン「adosakana.local」を作成します。
また、sambaの機能を使ってAD DNSを構築するので「SAMBA_INTERNAL」を選択します。

なお、「–use-rfc2307」はADにNIS連携機能を追加するオプションです。AD上にUnix用のUID/GID/shell情報なども格納できるようにします。Samba環境では有効にしておくべきものです。

[root@adserver ~]# /usr/local/samba/bin/samba-tool domain provision --use-rfc2307 --interactive&lt;br&gt;<br>
Realm [ADOSAKANA.LOCAL]:&lt;br&gt;<br>
 Domain [ADOSAKANA]:&lt;br&gt;<br>
 Server Role (dc, member, standalone) [dc]:&lt;br&gt;<br>
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:&lt;br&gt;<br>
 DNS forwarder IP address (write 'none' to disable forwarding) [172.30.50.100]:&lt;br&gt;<br>
Administrator password:&lt;br&gt;<br>
Retype password:&lt;br&gt;<br>
Looking up IPv4 addresses&lt;br&gt;<br>
Looking up IPv6 addresses&lt;br&gt;<br>
No IPv6 address will be assigned&lt;br&gt;<br>
Setting up secrets.ldb&lt;br&gt;<br>
Setting up the registry&lt;br&gt;<br>
Setting up the privileges database&lt;br&gt;<br>
Setting up idmap db&lt;br&gt;<br>
Setting up SAM db&lt;br&gt;<br>
Setting up sam.ldb partitions and settings&lt;br&gt;<br>
Setting up sam.ldb rootDSE&lt;br&gt;<br>
Pre-loading the Samba 4 and AD schema&lt;br&gt;<br>
Adding DomainDN: DC=adosakana,DC=local&lt;br&gt;<br>
Adding configuration container&lt;br&gt;<br>
Setting up sam.ldb schema&lt;br&gt;<br>
Setting up sam.ldb configuration data&lt;br&gt;<br>
Setting up display specifiers&lt;br&gt;<br>
Modifying display specifiers&lt;br&gt;<br>
Adding users container&lt;br&gt;<br>
Modifying users container&lt;br&gt;<br>
Adding computers container&lt;br&gt;<br>
Modifying computers container&lt;br&gt;<br>
Setting up sam.ldb data&lt;br&gt;<br>
Setting up well known security principals&lt;br&gt;<br>
Setting up sam.ldb users and groups&lt;br&gt;<br>
Setting up self join&lt;br&gt;<br>
Adding DNS accounts&lt;br&gt;<br>
Creating CN=MicrosoftDNS,CN=System,DC=adosakana,DC=local&lt;br&gt;<br>
Creating DomainDnsZones and ForestDnsZones partitions&lt;br&gt;<br>
Populating DomainDnsZones and ForestDnsZones partitions&lt;br&gt;<br>
Setting up sam.ldb rootDSE marking as synchronized&lt;br&gt;<br>
Fixing provision GUIDs&lt;br&gt;<br>
A Kerberos configuration suitable for Samba AD has been generated at /usr/local/samba/private/krb5.conf&lt;br&gt;<br>
Setting up fake yp server settings&lt;br&gt;<br>
Once the above files are installed, your Samba AD server will be ready to use&lt;br&gt;<br>
Server Role:           active directory domain controller&lt;br&gt;<br>
Hostname:              adserver&lt;br&gt;<br>
NetBIOS Domain:        ADOSAKANA&lt;br&gt;<br>
DNS Domain:            adosakana.local&lt;br&gt;<br>
DOMAIN SID:            S-1-5-21-98280047-2622333268-1688910966&lt;/p&gt;<br>
&lt;p&gt;[root@adserver ~]#

なお、password_hashでエラーとなるとおもいます。
現状の /etc/krb5.conf の内容が問題で発生しています。
この後の手順で正しいものに置き換えるので、この段階では単純に「mv /etc/krb5.conf /etc/krb5.conf.org」などの手段で別の名前として使わなくすれば大丈夫です。

Setting up sam.ldb users and groups&lt;br&gt;<br>
ERROR(ldb): uncaught exception - operations error at ../source4/dsdb/samdb/ldb_modules/password_hash.c:3132&lt;br&gt;<br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/__init__.py", line 176, in _run&lt;br&gt;<br>
    return self.run(*args, **kwargs)&lt;br&gt;<br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/netcmd/domain.py", line 474, in run&lt;br&gt;<br>
    nosync=ldap_backend_nosync, ldap_dryrun_mode=ldap_dryrun_mode)&lt;br&gt;<br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 2175, in provision&lt;br&gt;<br>
    skip_sysvolacl=skip_sysvolacl)&lt;br&gt;<br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 1787, in provision_fill&lt;br&gt;<br>
    next_rid=next_rid, dc_rid=dc_rid)&lt;br&gt;<br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/__init__.py", line 1447, in fill_samdb&lt;br&gt;<br>
    "KRBTGTPASS_B64": b64encode(krbtgtpass.encode('utf-16-le'))&lt;br&gt;<br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/provision/common.py", line 55, in setup_add_ldif&lt;br&gt;<br>
    ldb.add_ldif(data, controls)&lt;br&gt;<br>
  File "/usr/local/samba/lib64/python2.7/site-packages/samba/__init__.py", line 229, in add_ldif&lt;br&gt;<br>
    self.add(msg, controls)

9. sambaを起動

[root@adserver ~]# ps -ef|grep samba&lt;br&gt;<br>
root     11129 23028  0 16:01 pts/0    00:00:00 grep --color=auto samba&lt;br&gt;<br>
[root@adserver ~]# /usr/local/samba/sbin/samba&lt;br&gt;<br>
[root@adserver ~]# ps -ef|grep samba&lt;br&gt;<br>
root     11131     1 14 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11132 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11133 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11134 11132  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11135 11134 19 16:01 ?        00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground&lt;br&gt;<br>
root     11136 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11137 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11138 11131 21 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11139 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11140 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11141 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11142 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11143 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11144 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11145 11142  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11146 11131  2 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11147 11145 18 16:01 ?        00:00:00 /usr/local/samba/sbin/winbindd -D --option=server role check:inhibit=yes --foreground&lt;br&gt;<br>
root     11148 11131  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11151 11146  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11152 11151 17 16:01 ?        00:00:00 python /usr/local/samba/sbin/samba_dnsupdate&lt;br&gt;<br>
root     11153 11146  0 16:01 ?        00:00:00 /usr/local/samba/sbin/samba&lt;br&gt;<br>
root     11154 11153 17 16:01 ?        00:00:00 python /usr/local/samba/sbin/samba_spnupdate&lt;br&gt;<br>
root     11157 11135  0 16:01 ?        00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground&lt;br&gt;<br>
root     11158 11135  0 16:01 ?        00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground&lt;br&gt;<br>
root     11160 23028  0 16:01 pts/0    00:00:00 grep --color=auto samba&lt;br&gt;<br>
root     11161 11147  0 16:01 ?        00:00:00 /usr/local/samba/sbin/winbindd -D --option=server role check:inhibit=yes --foreground&lt;br&gt;<br>
[root@adserver ~]#

10.動作確認
CentOS内部からSMB接続を行うテストを実施。

[root@adserver ~]# /usr/local/samba/bin/smbclient --version&lt;br&gt;<br>
Version 4.7.5&lt;br&gt;<br>
[root@adserver ~]# /usr/local/samba/bin/smbclient -L localhost -U%&lt;/p&gt;<br>
&lt;p&gt;        Sharename       Type      Comment&lt;br&gt;<br>
        ---------       ----      -------&lt;br&gt;<br>
        netlogon        Disk&lt;br&gt;<br>
        sysvol          Disk&lt;br&gt;<br>
        IPC$            IPC       IPC Service (Samba 4.7.5)&lt;br&gt;<br>
Reconnecting with SMB1 for workgroup listing.&lt;/p&gt;<br>
&lt;p&gt;        Server               Comment&lt;br&gt;<br>
        ---------            -------&lt;/p&gt;<br>
&lt;p&gt;        Workgroup            Master&lt;br&gt;<br>
        ---------            -------&lt;br&gt;<br>
[root@adserver ~]#

以前は「Domain=[ADOSAKANA.LOCAL] OS=[Unix] Server=[Samba x.y.z]」という出力もあったのですが、Samba 4.7.5では無くなったようです。

netlogon共有にAdministrator権限でアクセスできるか確認。

[root@adserver ~]# /usr/local/samba/bin/smbclient //localhost/netlogon -UAdministrator -c 'ls'&lt;br&gt;<br>
Enter Administrator's password:&lt;br&gt;<br>
  .                                   D        0  Fri Mar  2 15:53:48 2018&lt;br&gt;<br>
  ..                                  D        0  Fri Mar  2 15:58:16 2018&lt;/p&gt;<br>
&lt;p&gt;                14034944 blocks of size 1024. 11789628 blocks available&lt;br&gt;<br>
[root@adserver ~]#

11.AD DNSの動作テスト
AD DNSが想定通りに動作しているかテストします。

まず、どんなzoneが登録されているのか確認

[root@adserver ~]# /usr/local/samba/bin/samba-tool dns zonelist 127.0.0.1 -U Administrator&lt;br&gt;<br>
Password for [ADOSAKANA\Administrator]:&lt;br&gt;<br>
  2 zone(s) found&lt;/p&gt;<br>
&lt;p&gt;  pszZoneName                 : adosakana.local&lt;br&gt;<br>
  Flags                       : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE&lt;br&gt;<br>
  ZoneType                    : DNS_ZONE_TYPE_PRIMARY&lt;br&gt;<br>
  Version                     : 50&lt;br&gt;<br>
  dwDpFlags                   : DNS_DP_AUTOCREATED DNS_DP_DOMAIN_DEFAULT DNS_DP_ENLISTED&lt;br&gt;<br>
  pszDpFqdn                   : DomainDnsZones.adosakana.local&lt;/p&gt;<br>
&lt;p&gt;  pszZoneName                 : _msdcs.adosakana.local&lt;br&gt;<br>
  Flags                       : DNS_RPC_ZONE_DSINTEGRATED DNS_RPC_ZONE_UPDATE_SECURE&lt;br&gt;<br>
  ZoneType                    : DNS_ZONE_TYPE_PRIMARY&lt;br&gt;<br>
  Version                     : 50&lt;br&gt;<br>
  dwDpFlags                   : DNS_DP_AUTOCREATED DNS_DP_FOREST_DEFAULT DNS_DP_ENLISTED&lt;br&gt;<br>
  pszDpFqdn                   : ForestDnsZones.adosakana.local&lt;br&gt;<br>
[root@adserver ~]#

Active Directoryで使用するDNSのSRVレコードが登録されているかをhostコマンドを使って確認。

[root@adserver ~]# host -t SRV _ldap._tcp.adosakana.local 127.0.0.1&lt;br&gt;<br>
Using domain server:&lt;br&gt;<br>
Name: 127.0.0.1&lt;br&gt;<br>
Address: 127.0.0.1#53&lt;br&gt;<br>
Aliases:&lt;/p&gt;<br>
&lt;p&gt;_ldap._tcp.adosakana.local has SRV record 0 100 389 adserver.adosakana.local.&lt;br&gt;<br>
[root@adserver ~]# host -t SRV _kerberos._udp.adosakana.local 127.0.0.1&lt;br&gt;<br>
Using domain server:&lt;br&gt;<br>
Name: 127.0.0.1&lt;br&gt;<br>
Address: 127.0.0.1#53&lt;br&gt;<br>
Aliases:&lt;/p&gt;<br>
&lt;p&gt;_kerberos._udp.adosakana.local has SRV record 0 100 88 adserver.adosakana.local.&lt;br&gt;<br>
[root@adserver ~]#

ADサーバのホスト名が登録されているか確認

[root@adserver ~]# host -t A adserver.adosakana.local 127.0.0.1&lt;br&gt;<br>
Using domain server:&lt;br&gt;<br>
Name: 127.0.0.1&lt;br&gt;<br>
Address: 127.0.0.1#53&lt;br&gt;<br>
Aliases:&lt;/p&gt;<br>
&lt;p&gt;adserver.adosakana.local has address 172.17.44.40&lt;br&gt;<br>
[root@adserver ~]#

12. DNSサーバの変更
ADサーバの/etc/resolv.confを、ADサーバ自身を使う様に書き換え

13. /etc/krb5.conf の変更
/usr/local/samba/private/krb5.conf に元となるものがあるので、それを使用する。

[root@adserver ~]# cat /etc/krb5.conf&lt;br&gt;<br>
[logging]&lt;br&gt;<br>
 default = FILE:/var/log/krb5libs.log&lt;br&gt;<br>
 kdc = FILE:/var/log/krb5kdc.log&lt;br&gt;<br>
 admin_server = FILE:/var/log/kadmind.log&lt;/p&gt;<br>
&lt;p&gt;[libdefaults]&lt;br&gt;<br>
 default_realm = EXAMPLE.COM&lt;br&gt;<br>
 dns_lookup_realm = false&lt;br&gt;<br>
 dns_lookup_kdc = false&lt;br&gt;<br>
 ticket_lifetime = 24h&lt;br&gt;<br>
 renew_lifetime = 7d&lt;br&gt;<br>
 forwardable = true&lt;/p&gt;<br>
&lt;p&gt;[realms]&lt;br&gt;<br>
 EXAMPLE.COM = {&lt;br&gt;<br>
  kdc = kerberos.example.com&lt;br&gt;<br>
  admin_server = kerberos.example.com&lt;br&gt;<br>
 }&lt;/p&gt;<br>
&lt;p&gt;[domain_realm]&lt;br&gt;<br>
 .example.com = EXAMPLE.COM&lt;br&gt;<br>
 example.com = EXAMPLE.COM&lt;br&gt;<br>
[root@adserver ~]# cat /usr/local/samba/private/krb5.conf&lt;br&gt;<br>
[libdefaults]&lt;br&gt;<br>
        default_realm = ADOSAKANA.LOCAL&lt;br&gt;<br>
        dns_lookup_realm = false&lt;br&gt;<br>
        dns_lookup_kdc = true&lt;br&gt;<br>
[root@adserver ~]# cp /usr/local/samba/private/krb5.conf /etc/krb5.conf&lt;br&gt;<br>
cp: `/etc/krb5.conf' を上書きしてもよろしいですか(yes/no)? y&lt;br&gt;<br>
[root@adserver ~]# cat /etc/krb5.conf&lt;br&gt;<br>
[libdefaults]&lt;br&gt;<br>
        default_realm = ADOSAKANA.LOCAL&lt;br&gt;<br>
        dns_lookup_realm = false&lt;br&gt;<br>
        dns_lookup_kdc = true&lt;br&gt;<br>
[root@adserver ~]#

14. Kerberosの動作確認

kinitコマンドを実行して確認します。

[root@adserver ~]# kinit administrator@ADOSAKANA.LOCAL&lt;br&gt;<br>
Password for administrator@ADOSAKANA.LOCAL:&lt;br&gt;<br>
Warning: Your password will expire in 41 days on 2018年04月13日 15時58分15秒&lt;br&gt;<br>
[root@adserver ~]#

正常に設定されていれば、上記の様にAdministratorユーザのパスワード有効期限が表示されます。

ドメイン名指定の大文字/小文字を間違えると下記の様なエラーとなります。

[root@adserver ~]# kinit administrator@adosakana.local&lt;br&gt;<br>
Password for administrator@adosakana.local:&lt;br&gt;<br>
kinit: KDC reply did not match expectations while getting initial credentials&lt;br&gt;<br>
[root@adserver ~]#

また、DNSサーバ指定が誤っている場合は下記の様なエラーです。

[root@adserver ~]# kinit administrator@ADOSAKANA.LOCAL&lt;br&gt;<br>
kinit: Cannot resolve servers for KDC in realm "ADOSAKANA.LOCAL" while getting initial credentials&lt;br&gt;<br>
[root@adserver ~]#

「klist」コマンドを実行することでも確認出来ます。

[root@adserver ~]# klist&lt;br&gt;<br>
Ticket cache: FILE:/tmp/krb5cc_0&lt;br&gt;<br>
Default principal: administrator@ADOSAKANA.LOCAL&lt;/p&gt;<br>
&lt;p&gt;Valid starting       Expires              Service principal&lt;br&gt;<br>
2018-03-02T16:06:21  2018-03-03T02:06:21  krbtgt/ADOSAKANA.LOCAL@ADOSAKANA.LOCAL&lt;br&gt;<br>
        renew until 2018-03-03T16:06:18&lt;br&gt;<br>
[root@adserver ~]#

15. フォレストとドメインの機能レベル確認
作成したActive Directoryのドメインの機能レベルとフォレストの機能レベルを確認します。

[root@adserver ~]# /usr/local/samba/bin/samba-tool domain level show&lt;br&gt;<br>
Domain and forest function level for domain 'DC=adosakana,DC=local'&lt;/p&gt;<br>
&lt;p&gt;Forest function level: (Windows) 2008 R2&lt;br&gt;<br>
Domain function level: (Windows) 2008 R2&lt;br&gt;<br>
Lowest function level of a DC: (Windows) 2008 R2&lt;br&gt;<br>
[root@adserver ~]#

Samba 4.7.5では、Windows Sevrer 2008R2と設定されているようです。

16. firewalldの設定

CentOS7ではfirewalldによりポートが制限されています。
現状を「firewall-cmd –list-all」で確認。

# firewall-cmd --list-all&lt;br&gt;<br>
public (active)&lt;br&gt;<br>
  target: default&lt;br&gt;<br>
  icmp-block-inversion: no&lt;br&gt;<br>
  interfaces: ens160&lt;br&gt;<br>
  sources:&lt;br&gt;<br>
  services: ssh dhcpv6-client&lt;br&gt;<br>
  ports:&lt;br&gt;<br>
  protocols:&lt;br&gt;<br>
  masquerade: no&lt;br&gt;<br>
  forward-ports:&lt;br&gt;<br>
  source-ports:&lt;br&gt;<br>
  icmp-blocks:&lt;br&gt;<br>
  rich rules:&lt;br&gt;<br>
# 

開けるべきポートのテンプレートがあらかじめ用意されているので「firewall-cmd –get-services」を実行して確認します。

# firewall-cmd --get-services&lt;br&gt;<br>
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server&lt;br&gt;<br>
#

SambaをADとして使う場合のポートを「Samba AD DC Port Usage」で確認します。

CentOS7のfirewalldで定義されているものと待避させてみると・・・

サービス ポート プロトコル firewalld定義
DNS 53 tcp/udp dns
Kerberos 88 tcp/udp kerberos,freeipa-ldap,freeipa-ldaps
End Point Mapper (DCE/RPC Locator Service) 135 tcp freeipa-trust
NetBIOS Name Service 137 udp samba,samba-client
NetBIOS Datagram 138 udp samba,samba-client,freeipa-trust
NetBIOS Session 139 tcp samba,freeipa-trust
LDAP 389 tcp/udp freeipa-trust(ldap,freeipa-ldapはtcpのみ)
SMB over TCP 445 tcp samba,freeipa-trust(freeipa-trustはudpも含む)
Kerberos kpasswd 464 tcp/udp kpasswd,freeipa-ldap,freeipa-ldaps
LDAPS 636 tcp ldaps,freeipa-ldaps
Dynamic RPC Ports(4.7以前) 1024-1300 tcp freeipa-trust
Dynamic RPC Ports(samba 4.7以降) 49152-65535 tcp ?
Global Catalog 3268 tcp freeipa-trust
Global Catalog SSL 3269 tcp なし

・firewalldの定義「samba」「dns」「freeipa-ldaps」「freeipa-trust」を使用
・「Dynamic RPC Ports(samba 4.7以降):49152-65535」を追加するか、smb.confで「rpc server port」を定義するか。
・「Global Catalog SSL:3269」を追加

# firewall-cmd --permanent --zone=public --add-service=samba&lt;br&gt;<br>
success&lt;br&gt;<br>
# firewall-cmd --permanent --zone=public --add-service=dns&lt;br&gt;<br>
success&lt;br&gt;<br>
# firewall-cmd --permanent --zone=public --add-service=freeipa-ldaps&lt;br&gt;<br>
success&lt;br&gt;<br>
# firewall-cmd --permanent --zone=public --add-service=freeipa-trust&lt;br&gt;<br>
success&lt;br&gt;<br>
# firewall-cmd --reload&lt;br&gt;<br>
success&lt;br&gt;<br>
# firewall-cmd --list-all&lt;br&gt;<br>
public (active)&lt;br&gt;<br>
  target: default&lt;br&gt;<br>
  icmp-block-inversion: no&lt;br&gt;<br>
  interfaces: ens160&lt;br&gt;<br>
  sources:&lt;br&gt;<br>
  services: ssh dhcpv6-client samba dns freeipa-ldaps freeipa-trust&lt;br&gt;<br>
  ports:&lt;br&gt;<br>
  protocols:&lt;br&gt;<br>
  masquerade: no&lt;br&gt;<br>
  forward-ports:&lt;br&gt;<br>
  source-ports:&lt;br&gt;<br>
  icmp-blocks:&lt;br&gt;<br>
  rich rules:&lt;/p&gt;<br>
&lt;p&gt;#

# firewall-cmd --permanent --zone=public --add-port=49152-65535/tcp&lt;br&gt;<br>
success&lt;br&gt;<br>
# firewall-cmd --permanent --zone=public --add-port=3269/tcp&lt;br&gt;<br>
success&lt;br&gt;<br>
# firewall-cmd --reload&lt;br&gt;<br>
success&lt;br&gt;<br>
# firewall-cmd --list-all&lt;br&gt;<br>
public (active)&lt;br&gt;<br>
  target: default&lt;br&gt;<br>
  icmp-block-inversion: no&lt;br&gt;<br>
  interfaces: ens160&lt;br&gt;<br>
  sources:&lt;br&gt;<br>
  services: ssh dhcpv6-client samba dns freeipa-ldaps freeipa-trust&lt;br&gt;<br>
  ports: 49152-65535/tcp 3269/tcp&lt;br&gt;<br>
  protocols:&lt;br&gt;<br>
  masquerade: no&lt;br&gt;<br>
  forward-ports:&lt;br&gt;<br>
  source-ports:&lt;br&gt;<br>
  icmp-blocks:&lt;br&gt;<br>
  rich rules:&lt;br&gt;<br>
#

17. systemdへの登録
systemdへの登録については「Managing the Samba AD DC Service Using Systemd」を参照のこと
CentOS6の場合は「Managing the Samba AD DC Service Using an Init Script

以上で設定は終了です。

Firefox OSから派生したKaiOS

Firefox OSから派生した「KaiOS」というのがMWC2018でいろいろ発表しているらしい。
NOKIAのスライド端末「Nokia 8110 4G」でも使われているとのこと。

このKaiOS、Intel向けに14MBの軽量Linuxディストリビューション「KaiOS」という既存のプロダクトと名前かぶりで、Firefox OS派生のKaiOSの方はソース公開してないせいで、ソース寄こせ要求で迷惑を被っているようで、サイトに注意書きがあったり・・・

さて、モバイルのKaiOSのサイトを見ていたら「JioPhone」というストレート型携帯をすでにインドでリリースしているらしい
KaiOS Transforms the Indian Market through Launch of JioPhone」(2018/01/10)

Firefox OS向けにSpreadtrumも開発してて、いくつか開発機が開発ツリーに登録されてたけど・・・と思って、記事を漁ってみたら、JioPhoneで使っているSoCはSpreadtrumのSC9820Aだった模様。
KaiOS Partners with Spreadtrum to Integrate with Newest Chipsets and Offer Advanced Functionality on Lite Phones」(2018/02/26)

2017年春に発売されたLava Connect M1とは別物である模様(インド向けガラホLava Connect M1登場。Spreadtrum SoCでVoLTE対応)

マニュアルを読むと、Jio Appsというアプリストアがあり、ソフトウェアが追加できるようだ。
まだ、Jio Payという支払いソフトウェア用のボタンが用意されているようだ。
バンド対応がイマイチなので、日本で買うにはちょっときつい感じです。


2019/01/16追記

最近の状況を確認してみたら、2018年8月6日に「Can I access the source code?」という形で「https://github.com/kaiostech」におけるソース公開を始めていた。

ただ、置いてあるもののベースがえらく古いように見えるんですが・・・

既存のSamba 4.5以前を4.7へアップデートする場合の注意点

あまり考えずに既存のSamba 4.4.x環境を最新のSamba 4.7.xにアップデートをした。
ようは、configure;make;make install。

が・・・「Updating Samba」を見ると、Samba 4.5.0で「replPropertyMetaData」の取り扱いが変わったので修正しなければならない、という記載が・・・

修正が必要かどうかは「samba-tool dbcheck –cross-ncs」で確認出来る、とのこと

問題なければ、下記の出力・・・

# samba-tool dbcheck --cross-ncs
Checking 3602 objects
Checked 3602 objects (0 errors)
#

問題がある場合は下記の様な形でエラーが報告されます。
ちなみに、エラーのテキスト出力が6.5MBありました・・・

# samba-tool dbcheck --cross-ncs --fix --yes
Checking 3602 objects
CN=MHS-OR-Address,CN=Schema,CN=Configuration,DC=adosakana,DC=local: 0x0009030e
CN=MHS-OR-Address,CN=Schema,CN=Configuration,DC=adosakana,DC=local: 0x00090177
<略>
Checked 3602 objects (3467 errors)
#

「samba-tool dbcheck –cross-ncs –fix –yes」を実行することで修正されました。

また、4.0以前のバージョンからアップデートした場合にSYSVOLの修復を行うために「samba-tool ntacl sysvolreset」を実行するという記述があったので、試しにSYSVOLのチェック「samba-tool ntacl sysvolcheck」を実行してみると、下記のエラーが発生。

# samba-tool ntacl sysvolcheck

ERROR(<class 'samba.provision.ProvisioningError'>): uncaught exception - ProvisioningError: DB ACL on GPO directory /usr/local/samba/var/locks/sysvol/adosakana.local/Policies/{20AA5877-2399-4CBC-8BA4-7F23D8810774} O:DAG:DAD:PAI(A;OICI;0x001f01ff;;;DA)(A;OICI;0x001f01ff;;;EA)(A;OICIIO;0x001f01ff;;;CO)(A;OICI;0x001f01ff;;;DA)(A;OICI;0x001f01ff;;;SY)(A;OICI;0x001200a9;;;AU)(A;OICI;0x001200a9;;;ED) does not match expected value O:DAG:DAD:P(A;OICI;0x001f01ff;;;DA)(A;OICI;0x001f01ff;;;EA)(A;OICIIO;0x001f01ff;;;CO)(A;OICI;0x001f01ff;;;DA)(A;OICI;0x001f01ff;;;SY)(A;OICI;0x001200a9;;;AU)(A;OICI;0x001200a9;;;ED) from GPO object
  File "/usr/local/samba/lib64/python2.6/site-packages/samba/netcmd/__init__.py", line 176, in _run
    return self.run(*args, **kwargs)
  File "/usr/local/samba/lib64/python2.6/site-packages/samba/netcmd/ntacl.py", line 270, in run
    lp)
  File "/usr/local/samba/lib64/python2.6/site-packages/samba/provision/__init__.py", line 1723, in checksysvolacl
    direct_db_access)
  File "/usr/local/samba/lib64/python2.6/site-packages/samba/provision/__init__.py", line 1674, in check_gpos_acl
    domainsid, direct_db_access)
  File "/usr/local/samba/lib64/python2.6/site-packages/samba/provision/__init__.py", line 1621, in check_dir_acl
    raise ProvisioningError('%s ACL on GPO directory %s %s does not match expected value %s from GPO object' % (acl_type(direct_db_access), path, fsacl_sddl, acl))
#

「samba-tool ntacl sysvolreset」を実行して修正。

# samba-tool ntacl sysvolreset
# samba-tool ntacl sysvolcheck
#
モバイルバージョンを終了