5月 182022
 

AKIBA PC ホットラインをみていたらこんな記事を見つけました。

https://pc.watch.impress.co.jp/docs/column/nishikawa/1408756.html

手頃な大きさと値段で AMD Ryzen7 8 コア / 16 スレッド・メモリ 32GB ・ストレージ 512GB と、そこはかとなく大盛りで、小型な PC。

実は、以前使っていた富士通の PRIMERGY MX130 S2 は計二台あり、一台は自宅サーバ、もう一台はデスクトップで利用していたのですが、デスクトップのほうは新規に HP ProDesk 405 G6 SFF/CT を購入したので二台の MX130 S2 は自宅のサーバとして Vmware ESXi 7.0 をインストールして仮想マシンをドドドと動かして・・。

しかし、所詮は 10年前のマシンです。 CPU 6 コア・メモリは 20GB と 16GB ですが、この二台を本当に引退させて新たに 8 コア / 16 スレッド・メモリ 32GB なマシン 1 台で運用するかなぁ。などと思ったのでありました。

 
と、いうことで、今回、上記記事に載っていたモノをちょいと購入してみた。と、いうことです。ちなみに今はもう既に品切れのようで amazon に商品が表示されていないようです。

さてと。問題は HP ProDesk 405 G6 SFF/CT をサーバにするか、今回購入した Beelink SER4 をサーバにするか・・。

Beelink SER4 はメモリ 32GB 搭載されているけど、拡張性ないし、小さいので 24/365 運用に耐えられるのかがちと不安・・。

まぁ、どちらを自宅サーバにするかはもう少し検討の余地があるかな。と、いう感じ。

 
以上、前置きはさておき、ここからが本題。

まずは今回購入した Beelink SER4 の詳細について。まずは届いた箱の写真など。

ハードウェア的には上記に書いた通り。

  • CPU: AMD Ryzen7 8 コア / 16 スレッド
  • メモリ: 32GB
  • ストレージ: NVMe SSD 512GB (Intel)
  • NIC: RealTek 1000Mbps
  • WiFi: AMD RZ608 Wi-Fi 6E 80MHz

 
変わったところでは WiFi チップが目を引くかな。 AMD と Mediatek が共同で作ったシロモノらしく、今後 Ryzen の NotePC に標準で組み込まれるよになるとかならないとか・・。 802.ax に対応しているようです。当然、FreeBSD にはドライバはありません。

本当に小さい筐体で『よくここまで詰め込んだっ!!』 などと思います。

あ。実際に利用してみると USB Type-A のポートが逆さです・・。USB 機器刺したときの見た感じ変で、刺すとき上下 (『表裏』か?) 悩みます。上記の写真は FreeBSD 13.1-RELEASE をインストールするために作成した USB メモリを刺している状態です。 USB メモリの裏側が上に来ます。そして、裏表のない Type-C はフロントに一個だけ。

 
まずは OS としてプレインストールされている Windows11 Pro を起動します。しかし、この筐体・スペックでこの値段なのに OS は Windows11 Pro となると、こちらをデスクトップとして利用して HP ProDesk 405 G6 SFF/CT をサーバにしたくなりますよねぇ・・。本当に OS も十分におごっています。

が・・。見事に落とし穴がありますっ!!

 
プリインストールされている OS の前に BIOS (UEFI セットアップメニュー) の設定について、感じた点。

  • メニュー項目が多い。基本的に AMI BIOS ですが拡張されていて色々な設定項目があります。
  • RealTek の 1000Mbps NIC のオプションに VLAN タグを設定できる項目があります。僕は BIOS レベルで VLAN 設定できる PC というか BIOS を初めてみました。 iLO や iDRAC ではありません。PC の OS で利用する NIC 側です。
  • secure boot が default で disable です。これまた初めてみました。FreeBSD をインストールするために明示的に disable にする必要があるので、その手間が省けるのは良いことですが、最近の PC では驚きです。

 
なんか、機能多すぎ・怪しさ満点の BIOS です。そして、実は OS はもっと、というか、しっかりと怪しかったりしますX-(。

 
僕は基本的に購入した PC では FreeBSD をインストールして WindowsOS と FreeBSD のデアルブート環境を整えます。そのために WindowsOS 側は事前に回復 USB ディスク作成したり、Windows のライセンスキーを抜きだしたりしています。
例えば Windows のライセンスキーを抜き出すアプリとして Windows Product Key Viewer というのがあります。

http://www.rjlsoftware.com/software/utility/winproductkey/download.shtml

色々な OS をインストールしていると回復パーティションとか飛ばしてしまったり、回復 USB からイントールできなかったときのために、最悪のことを考えてライセンスキーを保存しているのですが、この PC で上記アプリを実行してみると・・。

うひ・・。Windows10 Pro からのアップグレードで、ライセンスキーは B だけがならんでいるじゃん・・。orz
ダメだこら・・。

C:\ 直下は AMD/ Driver/ Power_On_and_WOL/ な名前のドライバが格納されているディレクトリがそのままあったり、設定方法をキャプチャしたイメージが保存されているディレクトリがあったり・・。

 
NIC のデバイス名がなぜ #2 なのだ?と思ってデバイスマネージャ見てみると『あぁ・・。以前は Intel の WiFi/Bt チップ使っていたのね。』みたいな。

もう怖すぎる (ダメすぎる?) OS です。
僕の場合 xkeymacs を利用しているのですが、これをインストールするためには『Visual Studio 2015 の Visual C++ 再頒布可能パッケージ』な vc_redist.x64.exe を先にインストールする必要があるんだけど、それもどうやら既にインストールされている状態だし。
他にも何かインストールされていて、データがガシガシ大陸のほうに飛んでいくんでないの?随時キャプチャしてないと怖くて使えない OS だわ。みたいな雰囲気満載です。

 
と、いうことで Windows11 Pro は非常にもったいないのだけど、サクっと削除して、まずは FreeBSD/amd64 13.1-RELEASE をインストールしてみて、その後 Vmware ESXi7.0 でもインストールしてそっちを利用しようかなぁ。と、言う感じです。
もし、正しいライセンスが入っているのであれば Microsoft から Windows11 の ISO イメージをダウンロードして来て、 Windows Product Key Viewer で表示されるライセンスを入れたりするのですけどねぇ。

本体のスペックが良くてこの価格なので『OS はオマケみたいなモノなので本格的に利用しないでねぇ。』みたいな雰囲気なのでしょうかねぇ? しかし、これって、使い続けると Microsoft のライセンス違反?アクティベーションできていれば問題ないのかな?
あ。けど、MSDN のライセンスは商用 PC で利用できない。あくまで検証用ライセンスだ。ただ、この PC にインストールされている WindowsOS のライセンスが MSDN のライセンスかは知らないけど。

もしかして、アクティベーション先を自社に向けているとか? うひっ。考えたらキリがないっ!!

ふむー・・。

あ。もしかしたら Windows Product Key Viewer が正しいライセンスキーを取得・表示できなかっただけかもしれない。そう思いましょうかねぇ;-P。

 
Beelink SER4 の WindowsOS のお話についてはこれでおしまい。次回は FreeBSD/amd64 13.1-RELEASE についてのお話とか Vmware ESXi7.0 の稼働状況についてお話できれば嬉しく思います。

って・・。今思い出した Vmware ESXi7.0 は RealTek の NIC 動かないじゃん・・。orz
USB NIC ブラブラさせるのか・・。orz

 
#この記事掲載したら、某所から DDoS 受けて閲覧不可になる。とか、ないよねぇ? ;-P

2022/05/23 加筆
一応、amazon のサポートに

『この製品のちゃんとした WindowsOS のライセンスが欲しいのですけど・・。』
『本体やスペツクは好きなので、このまま利用したいと思っているのですけど・・。』

などと、有人チャットで話しあいましたが「返品しましょう。」の一言でした。

まぁ、確かに安心して利用できない OS がバンドルされていても困るだけなので、僕の場合、今回は返品対応をお願いしました。
その他、現在も利用していたり、新規に購入を考えてる方は WindowsOS や Microsoft のライセンスについて、状態が気にならない場合は、今回の僕の事象は気にせずに購入したり、そのまま使い続けも良いのではないかと思われます。

ただ、データが引っこ抜かれているなど、他に色々あったとしても自己責任でお願いします。
加筆ここまで

2月 252022
 

以前に購入した OPPO Reno A は楽天モバイルの SIM を入れていました。購入してからもうずいぶんと経っていて、バッテリーもへたり気味だったのでそろそろ潮時かな?などと思っていました。

そして、海外向けの SONY Xperia 10 II XQ-AU52 は、一応今でも現役ですが、VoLTE が利用できないので、3G 停波なキャリアでは利用不能です。

現在、僕が利用しているのは以下な感じ。

  • iPhone8: Y-mobile / (去年の 9 月にバッテリー交換したので未だ現役;-)
  • AQUOS sense6 SH-M19: 楽天モバイル / (今回の購入したスマートフォン)
  • OPPO Reno A: povo2.0 / (VoLTE 対応なので povo2.0 でも OK)
  • SONY Xperia 10 II XQ-AU52: – / (キャリアなしの自宅内 Wi-Fi 専用端末)

 
とまぁ、こんな感じです。楽天モバイルと povo2.0 は実質お金がかかってないので、SIM が入っているスマートフォン 3 台持ちですが Y-mobile のみ費用が発生している感じ。
まぁ、仕事はテレワークメインなので、自宅 Wi-Fi の利用率が異様に高い。と、いうのも当然ありますが;-)。

 
三つ並べた写真がこんな感じ。

左から AQUOS sense6 SH-M19、SONY Xperia 10 II XQ-AU52、OPPO Reno A。サイズ的には SONY Xperia 10 II XQ-AU52 と近いかな? 5mm ほど横幅が広いです。そして縦長です。このサイズ、結構持ちやすくて好きです。

 
で、今回購入した AQUOS sense6 SH-M19 の簡単なレビューなどを。

今回は Amazon で SIM フリー版である SH-M19 を購入しました。俗に言う『4G/64G』バージョンです。5G に対応していて SoC は Snapdragon690 です。 多少世代がずれますが、比較対象としては Xperia 10 II XQ-AU52 の Snapdragon655 と同等か、それよりちょっと上な CPU パフォーマンスです。あ、CPU の比較『ポケモンGO をしたときの動作』から来ていますf(^^;;。

 
家の近所で楽天モバイルがミリ波・Sub-6 のアンテナを立てました。すげっ!! 自宅では入らないのですが、良く行く飲み屋とか街中華のお店で 5G が体験できます。嬉しいことです。が、しかし、速度が出ない。 楽天モバイルの 5G と AQUOS sense6 の 5G でマッチするのは n77 or n78 だと思いますが、これは Sub-6 ですかね。

あと、楽天モバイルの怪しいのは、アンテナから基地局まで何引いているんだろ?って、感じ。Flet’s かな? ダークファイバーかな?だとすると、電波・アンテナが 5G Ready で高速でも、ラストワンマイル的な地上回線が遅い回線使っていると、中々恩恵受けられないような気がする。
ちなみに google のスピード計測してみたら 40Mbps 程度でした。ふぅ・・。

 
さてと。ここからは AQUOS sense6 本体のレビューを。

あちこちで書かれているのがディスプレーの色使い。確かに変だよ。全体的に暗い。色が濃く見える。カメラで撮った写真もひどく暗く見えるので、ちょっと残念な雰囲気。 IGZO OLED (有機EL) だというのでもっとキラキラしているのかと思いきや・・。

ただ、色々調整して何とか見られる状態にはできた。

「設定」アプリから → [AQUOSトリック] → [リッチカラーテクノロジーモバイル] とたどります。

  • 基本設定: ナチュラル
  • アウトドアビュー: オン
  • リラックスビュー: オン (スライドバーは目分量で大体 20% くらい)
  • はっきりビュー: オフ

 
上記設定のキャプチャはこんな感じ。

これで、暗さ・色の深さ・濃さがなんとか薄まる感じでしょうか。

 
カメラは、あまいかなぁ。カドが立たない。ぼやける感じ。シャッター押すときの腕が悪いのかな?
Xperia 10 II XQ-AU52 のカメラもひどかったけど、それよりちょっと良い?という雰囲気。カメラは持っている中では iPhone8 か OPPO Reno A に軍配かな。

 
普段使いのアプリについて。

おサイフケータイ対応なので購入したのは当然で OPPO Reno A からの機種変更として無事に色々フツーに動作しているかんじ。
「Pay トリガー」とか面白い機能ですかね。ディスプレー上の指紋認証を長押ししていると「PayPay アプリ」が起動します (「PayPay アプリ」を起動するように設定していた場合)。あと、電源ボタン長押しでもアプリを起動できる。こちらには「楽天ペイアプリ」を起動するように設定しています。
なので、お買い物時にサっと支払いができる。

認証は指紋認証と顔認証。冬で指先が荒れている(感想している)からかも知れませんが、指紋認証は反応が鈍いです。顔認証のほうは、当初メガネ(俗にローガンキョーとも言う(^^;;)なしで登録したんだけど、メガネをかけていてもロック解除されるのは嬉しい点かな。

 
基本的に google のアプリが default で動作するようになっているので『僕は google はキライだぁ。だから不要なアプリは無効にしてしまぇー。』とか思っていると、色々なモノがなくなってしまいます。
音楽プレーヤー・写真ギャラリー・ファイルマネージャーなどなど。他にも google のアプリがメインになっているモノが色々あるですな。

まぁ、それは好みの問題として。

 
全体的な動作としてはキビキビしている感があるのだけど、時々フリーズすることがるので電源ボタン長押しで再起動してることがある。もしかしたら「ポケモン GO」アプリと相性が非常に悪いのかも知れない。ただ、Android 素の Xperia 10 II XQ-AU52 ではそんなことなかったし、 ColorOS で毛色がちょっと違いますが OPPO Reno A でもそんなこと無かったのでただ単に AQUOS sense6 の OS の作り込みのせいかも。もしくは、結構色々なアプリを無効化しているのでその影響が出ているのかも・・。

 
当初 AQUOS sense6 と Xperia 10 III のどちらを購入しようかと思っていたのだけど、国内向けの Xperia 10 III は Xperia 10 II を持っているので、ひれなりに魅力的ではあった。が、最近評判の AQUOS を使ってみたいという気分もあった。価格も安かったし。楽天モバイルなどで手に入るのだけど、結局 SIM フリー版を Amazon で購入して、約 36,000yen。これくらいだと手が出るかなぁ。と、いう感じ。

まぁ、どっちを購入したら良かったのか、今となっては不明ですが、飽きが来なければ 2,3 年使ってみたいと思います。

1月 292022
 

ちょっと前に「HP ProDesk 405 G6 SFF/CT 購入。」と、いうエントリを書きました。ことのときから 13.0-STABLE を利用するようになりました。

ただし、CURRENT とか STABLE というのはある意味ナマモノであり『ちゃんと動作するタイミング』というのがあるので、一旦、正常動作しているソースツリーにぶち当たるとそれをずっと使い続ける。と、言う状態だったのですが、最近、風の噂で Intel Wi-Fi 6 AX200 がどうやら動作するようになって来た。と、言う話題が出ていたので、いよいよ試してみようか。と・・。
上のエントリの中でも試しているのですが、このときは見事に玉砕していたのですけどもね。

 
と、いうことで git で STABLE の /usr/src のソースコードをどうやって持ってくるのか、ちっとも解らない。ググッても、ちっとも解らない・・。orz

http://ftp.iij.ad.jp/pub/FreeBSD/snapshots/amd64/13.0-STABLE/

とりあえず、ここにアクセスしてみた。なるほどー。snapshot なので定期的に更新されているようですね。ここから src.txz の たー玉をゲット。 /usr/src に展開したあと make buildworld 系おまじないをかけて、そこはかとなく新しい /usr/src/sys/contrib/dev/iwlwifi/ が存在していて if_iwlwifi.ko カーネルモジュールがインストールされる環境が整ったのでありました。

 
さてと、ここからは実際に kldload if_iwlwifi.ko して利用してみましょう。あ、今回は ThinkPad X13 で試しました。こいつには Intel AX200 が付いているしいよいよいもって使ってみたいのでね。

参考になるのは以下の URL です。

https://wiki.freebsd.org/WiFi/Iwlwifi

と、いうか、今のところ、ここしかない感じ。あと、freebsd-wireless な ML のスレッドを追いかけるしかないです。

https://lists.freebsd.org/archives/freebsd-wireless/

 
まずはじめに /boot/loader.conf に if_iwlwifi_load=”YES” を書くところから始めるのですが、これ書くと以下のエラーがドドドと表示されて iwlwifi のファームウェアが正しくロードできないようです。

<略>
kernel: iwlwifi0: could not load firmware image 'iwlwifi-cc-a0-57.ucode'
kernel: iwlwifi0: File size way too small!
kernel: iwlwifi0: could not load firmware image 'iwlwifi-cc-a0-56.ucode'
kernel: iwlwifi0: File size way too small!
<略>

 
なんか、調べてみると、上記の現象は /boot/loader.conf から if_iwlwifi.ko を kldload した場合、ファームウェアが格納されるメモリが無くなってしまって正しいサイズのファームウェアがロードできない状態らしい。なので /etc/rc.conf に書いたほうが良い。とのことでした。

こんな感じ。

kld_list="amdgpu.ko if_iwlwifi.ko"

 
僕のは Renoir なマシンなので、amdgpu.ko と一緒にロードさせてあげます。で、再起動すると、今度は無事に動作しそうな雰囲気です。とりあえずは pciconf -lv で確認してみましょう。

iwlwifi0@pci0:2:0:0:    class=0x028000 rev=0x1a hdr=0x00 vendor=0x8086 device=0x2723 subvendor=0x8086 subdevice=0x0080
    vendor     = 'Intel Corporation'
    device     = 'Wi-Fi 6 AX200'
    class      = network

 
Wi-Fi 6 AX200 に違うドライバ、例えば iwm0 などが割り当てられていた場合、 WiFi/Iwlwifi にも書いてあったとおり

# devctl detach pci0:2:0:0
# devctl set driver pci0:2:0:0 iwlwifi

 
してみて、ちゃんと iwlwifi0が割り当てられることを確認しましょう。無事に割り当てることができたら第一関門突破です;-)。

 
さてと。無事に認識したようなので、次に /etc/rc.conf に設定を書きます。僕の場合はこかん感じで。

wlans_iwlwifi0="wlan1"
create_args_wlan1="wlanmode sta regdomain JAPAN country JP"
#wlandebug_wlan1="+state +crypto +node +auth +assoc +dot1xsm +wpa"
ifconfig_wlan1="WPA DHCP ssid AP-Point mode 11ac country JP"

 
しかし、全く起動時に反応してくれない。しょーがないので起動時の利用は諦めるしか無い雰囲気・・。

一応、有効化するためのスクリプトと、いうかコマンドを並べてみました。

#!/bin/sh

#devctl set driver pci0:2:0:0 iwlwifi0

ifconfig wlan1 create wlandev iwlwifi0
ifconfig wlan1 mode 11ac country JP
ifconfig wlan1 ssid AP-Point bssid 90:17:c8:ff:ff:ff
ifconfig wlan1 up
ifconfig wlan1 scan
ifconfig wlan1 WPA
ifconfig wlan1 DHCP
/usr/sbin/wpa_supplicant -s -B -i wlan1 -c /etc/wpa_supplicant.conf -D bsd -P /var/run/wpa_supplicant/wlan1.pid

 
上のコマンドを順番に打っていくと・・。

# ifconfig wlan1 mode 11ac country JP
ifconfig: SIOCSIFMEDIA (media): Device not configured
# ifconfig wlan1 WPA
ifconfig: WPA: bad value
# ifconfig wlan1 DHCP
ifconfig: DHCP: bad value

 
mode 11ac を受け付けてくれず、他に WPA と DHCP オプションが機能してくれないようです・・。orz。

一応確認してみると、

# ifconfig wlan1
wlan1: flags=8843 metric 0 mtu 1500
        ether a8:7e:ea:ff:ff:ff
        inet 192.168.1.150 netmask 0xffffff00 broadcast 192.168.1.255
        groups: wlan
        ssid AP-Point channel 36 (5180 MHz 11a) bssid 90:17:c8:ff:ff:ff
        regdomain JAPAN country JP authmode WPA2/802.11i privacy ON
        deftxkey UNDEF AES-CCM 3:128-bit txpower 23 bmiss 7 mcastrate 6
        mgmtrate 6 scanvalid 60 wme roaming MANUAL
        parent interface: iwlwifi0
        media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11a
        status: associated
        nd6 options=29

 
802.11ac で接続してもらって、速さを体験したいのに、なんで 11a でしか接続しないのだろう・・。ちなみに ifconfig は ssid の他に bssid も合わせて指定していて 802.11g ではない 5GHz 帯の AP に接続するように調整しています。ヘタるすと 802.11n とか 802.11g に(『で』が正解か?)接続してしまう場合もあります。

この状態でスピードサイトにアクセスして計測してみると、ダウンロードで 20Mbps 下回る程度、アップロードでも 10Mbps 程度の速度しか出ません。

あれあれ? iwlwifi0 って 802.11ac と ax に対応しているんじゃないの? どうしてこんな遅いの!? ちょっとガクゼンとしてしまいました・・。 orz

 
このブログでは今までもう何回も FreeBSD で動作する WiFi USB ドングルについて記載してきました。

FreeBSD 12.0-RELEASE から if_rtwn が利用可能ななった。」など。

REALTEK の RTL88 系チップは 802.11ac に対応していて、ドライバは rtwn0 を利用するとこにより 5GHz 帯に接続できるぜぃ。みたいな感じで AX200 が利用できない状態においては非常に効果的に機能する WiFi ドングルでした。最近の FreeBSD 12.2-RELEASE 以降では問題なく利用できる状態。

ただ、こちらもやはり 20Mbps 程度と、FreeBSD で利用すると速度が出ていなかった・・。なので、 802.11ac に対応した iwlwifi0 で『Windows 並にバリバリ速度でるのかな? ワクワクっ!!』などと期待感大だったのに、ちょっと裏切られた感じ・・。

 
今まで USB ドングル利用していた WiFi はオンボードのチップが使えるようになって、 USB ポートが一個空いたねぇ。な感じ。速度的には変わらないし、 /etc/rc.conf に記載した内容が起動時に反映されないし・・。

13.1-RELEASE ではもう少しマトモになるかもしれないけど、速度的には望めないとなると、悲しい部分が・・。orz
と、いうことで /etc/rc.conf に記載してブート時に利用可能になるまで、もうすこし rtwn0 を利用し続けるかなぁ・・。

1月 082022
 

ウェブで色々調べてみると、みんな中途半端なネタしかなくて、ウェブ UI まで含めた Docker Registry を作るのにずいぶんと苦労しました。

今回はそれをきれいさっぱりとまとめてみたいと思います。

僕はそれほど Docker に詳しくはないけど、今回のターゲットの読者 (って、いるのかな?;-) は、普段から Docker コンテナを利用していて、 Docker image を自分が作成した Docker Registry で管理したい人向けです。

では始めます。今回のプラットホームは AlmaLinux 8.5 です。 docker は以下です。

$ cat /etc/os-release 
NAME="AlmaLinux"
VERSION="8.5 (Arctic Sphynx)"
ID="almalinux"
ID_LIKE="rhel centos fedora"
VERSION_ID="8.5"
PLATFORM_ID="platform:el8"
PRETTY_NAME="AlmaLinux 8.5 (Arctic Sphynx)"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:almalinux:almalinux:8::baseos"
HOME_URL="https://almalinux.org/"
DOCUMENTATION_URL="https://wiki.almalinux.org/"
BUG_REPORT_URL="https://bugs.almalinux.org/"

ALMALINUX_MANTISBT_PROJECT="AlmaLinux-8"
ALMALINUX_MANTISBT_PROJECT_VERSION="8.5"

$ rpm -qa | grep dock
docker-scan-plugin-0.12.0-3.el8.x86_64
docker-ce-rootless-extras-20.10.12-3.el8.x86_64
docker-ce-cli-20.10.12-3.el8.x86_64
docker-ce-20.10.12-3.el8.x86_64
$

 
まず、Docker image を取ってきます。まぁ、ほぼほぼ標準のイメージです。
あ、 /etc/group の docker グループに自分のアカウントを追加して上げましょう。一般ユーザ権限で docker コマンドが利用可能になります。

$ docker pull registry:2
<略>
$ docker pull konradkleine/docker-registry-frontend:v2
<略>
$ docker pull ekazakov/docker-registry-frontend
<略>

 
一番最初の docker pull は Registry サーバ本体です。
二番目の docker pull は ウェブで検索すると良く出てくる Registry のウェブ UI です。
三番目の docker pull は registry:2 のウェブ UI ですが、なんと、削除ボタンが付いていて不要な Docker image を削除することができます(が、僕はまだ削除したことないですf(^^;;)。

これで Docker image が揃ったので docker run してみます。と、言いつつまだまだ準備ができていません。

と、いうか、最近の docker pull/push は SSL に対応しているので、プライベートで立てる Registry サーパ (『リポジトリサーバ』とも言う) も SSL でアクセスできるようにして上げる必要があります。
つまり、 Docker image の registry:2 を起動するためには SSL 証明書が必要なんですな。 Let’s Encrypt などでまずは証明書を準備してください。

ここ、大切な部分です。この工程をはしょって『プライベートレジストリを構築するーっ!!』って、サイトが多くてイヤになる・・。非常にノイジー。古いコンテンツは消して欲しい。と、思う部分ですな。
とはいいつつ、僕のサイトにも古い記事が今でも残っているけど・・f(^^;;。

と、いうことで registry:2 を run するための証明書の準備です。

# mkdir /opt/docker/repository/certs/
# cd /usr/local/etc/letsencrypt/live/running-dog.net/
# cat cert.pem > /opt/docker/repository/certs/domain.crt
# cat chain.pem > /opt/docker/repository/certs/ca.crt
# cat privkey.pem > /opt/docker/repository/certs/domain.key

 
Let’s Encrypt で取得した証明書を /opt/docker/repository/certs/ と、いうディレクトリにそれぞれの名前で格納しました。自分のドメイン名に照らし合わせてください。
あーぅー。Linux の場合、 Let’s Encrypt のベースディレクトリはどこになるのだろう? 上記の例では FreeBSD 的に /usr/local/etc/letsencrypt/ になっていますな。自分の環境に合わせてくださいf(^^;;。

そして、追加でもう少し。

# cd /usr/local/etc/letsencrypt/live/running-dog.net/
# cat cert.pem > /etc/pki/tls/certs/running-dog.net.crt
# update-ca-trust
# systemctl restart docker

 
証明書を準備したら上記コマンドを実行してください。証明書を更新したときも実行してください。
SSL 証明書を /etc/pki/tls/certs/ に設置したあと update-ca-trust コマンドを叩いて dockerd を再起動しなます。
これをやらないと docker pull や push がエラーになるかもしれません。

 
さてと。これで SSL 証明書関連の準備が完了です。起動するときは以下のような感じ。

# mkdir /opt/docker/repository/data/
$ docker run -d -p 0.0.0.0:5000:5000 --restart=always \
 -v /opt/docker/repository/data:/var/lib/registry \
 -v /opt/docker/repository/certs:/certs \
 -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
 -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
 --name registry-server \
 registry:2

 
-v でレジストリのデータを管理するディレクトリと、証明書が格納されているディレクトリをコンテナから参照できるようにしてあげます。

IP アドレスは 0.0.0.0 を指定してあげまていますが、Docker ホスト側の IP アドレスの Port:5000 に (telnet で) アクセスすると開いているかと思います。
Registry サーバは SSL でアクセスするので、 Docker ホストの IP アドレスに FQDN を指定してあけます。今回は registry.running-dog.net にしました。view internal な DNS ゾーンファイルに設定するか /etc/hosts に指定してください。

curl を利用して以下の要領でアクセスすれば良いです。

$ curl -k https://registry.running-dog.net:5000/v2/_catalog
$ curl -k https://registry.running-dog.net:5000/v2/centos/tags/list

 
上の curl は docker push されている、つまり、プライベートレジストリに登録されている Docker image の一覧が表示されます。
下の curl は、仮にプライベートレジストリに centos という Docker image が push されていたとすると登録してあるタグ番号一覧を返してくれます。

ここまでは Port:5000 でアクセスする Registry サーバ側の設定と起動方法になります。ウェブ UI がなくても上記 curl でイメージとタグ番号の確認はできます。

 
では、ここからはいよいよウェブ UI 側のコンテナの起動です。

インターネット上で検索してみると、docker run してサクっと Registry サーバに接続してその情報を表示してくれる。みたいなサイトがゴマンとありますが、あれ、みんなウソです。全然表示してくれない。なんでやねんっ!?

僕もずいぶんと悩みました。どんなにやってもウェブ UI のコンテナから Registry サーバにアクセスできないっ!! ずっと悩んでいたのですが、ようやっと、問題解決です。

先にタネ明かししますが Registry サーバへは SSL で Port:5000 にアクセスします。 URL 的には https://registry.running-dog.net:5000/ になりますね。
ウェブ UI 側も registry.running-dog.net の Port:5000 にアクセスするように docker run 時に指定するのですが、これは http で registry.running-dog.net の Port:5000 にアクセスしているんですね。プロトコルが https で Port:5000 にアクセスできていないので、ウェブ UI 上に Registry サーバ の情報を表示できなかったんですね。

ここの情報について書いているサイト、ほぼ皆無です。

ウェブ UI 側のコンテナは以下のように docker run してみましょう。

$ docker run -d -p 0.0.0.0:8080:80 \
 --net reg-Segment \
 -e ENV_DOCKER_REGISTRY_HOST=registry.running-dog.net \
 -e ENV_DOCKER_REGISTRY_PORT=5000 \
 -e ENV_DOCKER_REGISTRY_USE_SSL=1 \
 -e DOCKER_REGISTRY_SCHEME \
 --name registry-web \
 ekazakov/docker-registry-frontend:latest

 
今回は削除ボタンのある ekazakov/docker-registry-frontend:latest の Docker image を利用してみました。
-e で環境変数を指定します。よくあるのは ENV_DOCKER_REGISTRY_HOST と ENV_DOCKER_REGISTRY_PORT です。この二つだけの指定では ウェブ UI は http で ENV_DOCKER_REGISTRY_HOST に指定したホストの ENV_DOCKER_REGISTRY_PORT に指定したポート番号にアクセスします。

この瞬間、まさに『ダメだ。こりゃ。』な状態です。

https でアクセスするためには更に追加で DOCKER_REGISTRY_SCHEME と ENV_DOCKER_REGISTRY_USE_SSL=1 を指定してあげます。これで Registry サーバに https でアクセスしに行って、ウェブ UI 上に登録されている情報を表示してくれるようになります。

いやぁ・・。疲れた。あとはひたすらウェブ UI を使い込んでいくことなるかと思います。ふぅ・・。

 
と、いうことで、 https でアクセスする Registry サーバと Registry サーバから https で情報を取りに行ってウェブ UI に表示してくれる Registry サーバのウェブ UI がセットで起動できました。
あ、ウェブ UI 側は http://registry.running-dog.net:8080/ でアクセスできます。こちらのプロトコルは http です;-)。

 
では、どうして今回、ウェブ UI は『どうして表示できないのだ?!』と、悩んでいたのが解決できたか?についてですが『そもそも https でアクセス行ってないからじゃね?』と、思ったから。が、ベースとなっていますが Docker image である registry:2 も ekazakov/docker-registry-frontend:latest も docker exec で中に入ることができないんですねぇ・・。コンテナに与える環境変数は他にはないのか?確認する手段が無かった。と、いうのが大きな点ではありますが、ところがそうではないっ!!

$ docker ps -a
CONTAINER ID   IMAGE                                      COMMAND                  CREATED        STATUS        PORTS                                            NAMES
2f3a138f1b8e   ekazakov/docker-registry-frontend:latest   "/bin/sh -c $START_S…"   23 hours ago   Up 23 hours   443/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp   registry-web
d1e9dbf6e9a5   registry:2                                 "/entrypoint.sh /etc…"   24 hours ago   Up 24 hours   0.0.0.0:5000->5000/tcp                           registry-server
$ docker exec -it d1e9dbf6e9a5 /bin/bash
OCI runtime exec failed: exec failed: container_linux.go:380: starting container process caused: exec: "/bin/bash": stat /bin/bash: no such file or directory: unknown
$ docker exec -it d1e9dbf6e9a5 /bin/sh
/ # ls -l /bin/busybox 
-rwxr-xr-x    1 root     root        841288 Nov 12 11:37 /bin/busybox
/ # exit
$

 
docker ps してから docker exec -it で registry:2 に /bin/bash で入ろうしたけど、/bin/bash がないので、試しに /bin/sh にしてみたらあらは入れた。ついでに registry:2 は busybox で動作しているのねぇ。 i386 i686 系の busybox って、初めて見た。みたいな。

 
konradkleine/docker-registry-frontend:v2 も /bin/bash はないけど /bin/sh で中に入れます。
ekazakov/docker-registry-frontend:latest は /bin/bash で中に入れました。

$ docker exec -it 2f3a138f1b8e /bin/bash
root@2f3a138f1b8e:/# env
HOSTNAME=2f3a138f1b8e
APACHE_RUN_USER=www-data
TERM=xterm
ENV_DOCKER_REGISTRY_PORT=5000
APACHE_LOG_DIR=/var/log/apache2
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
APACHE_RUN_GROUP=www-data
ENV_DOCKER_REGISTRY_USE_SSL=1
SOURCE_DIR=/tmp/source
WWW_DIR=/var/www/html
SHLVL=1
HOME=/root
START_SCRIPT=/root/start-apache.sh
ENV_DOCKER_REGISTRY_HOST=registry.running-dog.net
_=/usr/bin/env
root@2f3a138f1b8e:/# cat /root/start-apache.sh
<略>
root@2f3a138f1b8e:/# exit
$

 
こんな感じです。 ekazakov/docker-registry-frontend:latest の ウェブ UI は apache で起動しているみたいです。 /root/start-apache.sh の中に docker run 時に指定した環境変数を取り込んでホスト名・ポート番号・プロトコルが設定されます。
この /root/start-apache.sh のファイルの中をじっくりと確認することによって、そこから想像する分には『https://でアクセスするようにしないとアカンのねえ・・。』と、思いつくのでありました。
あとは環境変数を見つけてそれをコンテナに渡してあげれば・・。ふぅ。なんとか動き出した。と、いう状態なのでありました。それが 、 DOCKER_REGISTRY_SCHEME と ENV_DOCKER_REGISTRY_USE_SSL なのでありますね。

 
それにしても、有名どころの git で拾ってきた Docker image も docker exec で /bin/bash で中に入れないとき /bin/sh とかだと入れるとか、他にもっと実は色々な入り方 (裏技) があるのかもー。と、関心させられた事象だったのであります。

そして、Port:5000 番でアクセスする Registry サーバと、Port:8080 でアクセスする ウェブ UI 。ふぅ。なんとか構築することができたのであります。

 
今の docker pull/push は SSL が基本です。http でアクセスできていた古いインターネット上の記事には惑わされないようにしてください;-P。