2024/05/07追記
結局VzLinuxは死んだものの CentOS7ベースの仮想基盤Virtuozzo Hybrid Server はまだとりあえずメンテナンスを続けている模様。(RHEL9ベースのVirtuozzo Hybrid Server 9も作りかけたけどやめた模様)
それとは別ラインで openstack系の仮想基盤 Virtuozzo Hybrid Infrastructure を出している模様。
また、openvz 9.0なんてISOもあるようだ。
2023/07/10追記
結局、VzLinuxは、2021年11月にVzLinux 8.5とVzLinux 9.0 Betaを出して以後、公式な更新としてはしていないようです。
2021/07/13追記
急にアクセスが増えてきたのでVzLinux 8.4の簡単な評価を先に書いておくと、Alma Linux, Rocky Linux, Oracle Linux の3つに対する優位点が、2021/07/13時点のVzLinuxには無いので、特に採用するべきではないと思います。
個人的にはOracle Cloudも使っているので、Oracle Linux 8を使っています。
仮想コンテナであるOpenVZに対応したvzlinux kernelが提供されているのであればVzLinuxを選択する理由にもなるのですが、インストールしてみた限りでは使えない
そして、VzLinux 8.4を「日本語」でインストールするとロケール関連の動作が怪しくなる、という明確な問題があるので、現時点ではプラスポイント0、むしろマイナス、という感じです。
2021/11/29コメント追加
VzLinux 8の他に、VzLinux 7の提供も開始されたが、VzLinux 7の方は2021/11/29時点ではISOファイルが提供されていない模様である。
2022/08/12コメント追加
VzLinux8は8.5ベースのISO提供、VzLinux7は7.2ベースのISO提供のままでした。VzLinux9については9.0ベースのISOがありますが日付が2021年11月22日と、RHEL9の正式リリース日 2022年5月よりずっと前なのでベータ版時代のまま更新されていないようです。
また、この記事でインストールしたVzLinux8環境を最新にアップデートしたところ、RHEL8.5相当でkernelは 4.18.0-348.20.1.vl8.x86_64でした
HPEサポートページにあるドライバ対応表 – Red Hat Enterprise Linux 8で確認すると、RHEL8.5のアップデートではあるものの最新版ではない、という感じでした。
というわけで、普通のユーザであれば使う必要のないもの、という結論は現状でも変わらないようです。
以下本文です
このblogのOracle Linux関連記事にこんな広告が表示された。
「VzLinux」なんてものがあるのかと別途ググってアクセスしてみた。(直接リンク飛ぶと規約上微妙なので)
VzLinuxは、Linuxベースの仮想コンテナのVirtuozzo とそのオープンソース版OpenVZ の作っているLinux ディストリビューションで、この仮想コンテナを動かすにはRHEL/CentOSやUbuntuのデフォルトカーネル設定ではダメなので、稼働できる形でコンパイルしたものを提供していたものをディストリビューションとしても提供し始めたような感じである。
これに関連してか「Virtuozzo Linux 8 Quick Start Guide」の「3.3. Updating the Kernel」には、カーネルのアップデートのために「yum update vzkernel vzkernel-devel」を実行する、とあるが、実際のVzLinux 8上しても、vzkernelというパッケージは存在せず実行できない。
おそらくは、仮想コンテナVirtuozzo/OpenVZ用に提供されているバージョンであればvzkernelを使う、という話なんだろう、と思われる。
それはさておき、仮想環境にインストールしてみた。
VzLinux 8.3の時点ではセキュアブート非対応であるため、仮想マシンもそのように設定して起動。(VzLinux 8.4でもセキュアブート非対応であった)
言語の選択で「日本語」を選ぶことができるが、インストール完了後、X-Windowアプリの一部でアプリ起動に失敗するので、基本的には「English」で進めた方が良いようだ。
(画像は日本語で進めた時のもの)
基本的にはRHEL8/CentOS8そのままの表示である
選択が終わったらインストール開始
Server with GUIでインストールした場合は下記の様になる。
「日本語」を選択した場合、「端末」を選択すると、こんな感じでぐるぐる表示がされるものの端末は開かない。
/var/log/messagesを開くと「failback ‘C’ locale」という表示が出ているので「localectl list-locales」で確認すると、日本語に関するlocaleがインストールされていない。
というわけで、日本語に設定している場合は「dnf install glibc-langpack-ja」で日本語localeを追加するか、「localectl set-locale en_US.utf8」を実行して英語設定にする必要がある。
英語環境であれば下記の様に端末が正常に開く。
日本語localeを追加した場合も正常に端末が開くようになる。
画面を比較してみると、日本語locale追加以前は時刻表記が英語のまま、などの動作していましたね・・・
さて、kernel 4.18.0-305.vl8.x86_64 で起動してきている。
また、2021/06/16時点ではISOは8.3であったものの、updateすると8.4になった。
VzLinux 8のデフォルトレポジトリはこんな感じで、理由がよく分からないが「BaseOS」や「AppStream」などが無効化されており、「VirtuozzoLinux Base」と「VirtuozzoLinux Updates」のみが有効となっている。
ちなみにbaseos,appstream,plus,powertoolsを有効にしてみたが、vzkernelというパッケージは存在しませんでした。
とりあえずは、セキュアブート不要であれば使えるCentOS8代替としては使えそうです。
vzkernelはやはりOpenVZ対応カーネルな模様で https://src.openvz.org/projects/OVZ/repos/vzkernel/browse で開発されていました。(ブランチの選択肢に branch-rh8-4.18.0-240.1.1.vz8.6.x-ovz なんてものが見える。
また、 https://download.openvz.org/virtuozzo/releases/7.0/x86_64/iso/ で openvz-iso-7.0.16-552.iso という形でOpenVZ用カーネルで起動するRHEL7互換のものが配布されている。
2021/10/11追記
https://download.openvz.org/virtuozzo/releases/8.0/x86_64/iso/ に openvz-iso-8.0.0-1336.iso が置かれていた。
ダウンロードしてインストールしてみたら下記の様な感じだった。(update済)
[root@openvz t]# uname -a
Linux openvz 4.18.0-240.1.1.vz8.5.62 #1 SMP Tue Jul 27 16:10:46 MSK 2021 x86_64 x86_64 x86_64 GNU/Linux
[root@openvz t]# rpm -qa|grep kernel|sort
abrt-addon-kerneloops-2.10.9-20.vl8.1.x86_64
kernel-core-4.18.0-240.1.1.vz8.5.62.x86_64
kernel-headers-4.18.0-240.1.1.vz8.5.62.x86_64
kernel-tools-4.18.0-240.1.1.vz8.5.62.x86_64
kernel-tools-libs-4.18.0-240.1.1.vz8.5.62.x86_64
readykernel-scan-0.14-2.vl8.noarch
[root@openvz t]#
vzkernel というパッケージは無いらしい
[root@openvz t]# yum search vzkernel
Last metadata expiration check: 0:19:37 ago on Mon 11 Oct 2021 04:24:09 PM JST.
No matches found.
[root@openvz t]#
登録されているレポジトリを確認
[root@openvz ~]# dnf repolist --all
repo id repo name status
appstream Virtuozzo Linux 8 - AppStream disabled
baseos Virtuozzo Linux 8 - BaseOS disabled
cr Virtuozzo Linux 8 - ContinuousR disabled
extras Virtuozzo Linux 8 - Extras disabled
factory Build Factory packages for Cont disabled
factory-debuginfo Debug packages for Containers f disabled
fasttrack Virtuozzo Linux 8 - FastTrack disabled
ha Virtuozzo Linux 8 - HighAvailab disabled
obsoleted_tmpls Virtuozzo obsoleted EZ-template disabled
openvz-os OpenVZ enabled
openvz-os-debuginfo OpenVZ os Debug packages disabled
openvz-updates OpenVZ Updates enabled
openvz-updates-debuginfo OpenVZ updates Debug packages disabled
plus Virtuozzo Linux 8 - Plus disabled
powertools Virtuozzo Linux 8 - PowerTools disabled
virtuozzolinux-base VirtuozzoLinux Base enabled
virtuozzolinux-base-debuginfo VirtuozzoLinux Base debug packa disabled
virtuozzolinux-factory VirtuozzoLinux Factory disabled
virtuozzolinux-factory-debuginfo VirtuozzoLinux Factory debug pa disabled
virtuozzolinux-openvz-factory VirtuozzoLinux Factory disabled
virtuozzolinux-openvz-factory-debuginfo VirtuozzoLinux Factory debug pa disabled
virtuozzolinux-updates VirtuozzoLinux Updates enabled
virtuozzolinux-updates-debuginfo VirtuozzoLinux Updates debug pa disabled
vz7-guest-tools Virtuozzo Guest Tools for VHS7 disabled
vz8-guest-tools Virtuozzo Guest Tools for VHS8 disabled
[root@openvz ~]#
/etc/yum.repos.d/ には下記のファイルがあった
[root@openvz ~]# ls -l /etc/yum.repos.d/
total 24
-rw-r–r– 1 root root 1276 Aug 1 15:42 factory.repo
-rw-r–r– 1 root root 300 Aug 1 15:42 obsoleted_tmpls.repo
-rw-r–r– 1 root root 1208 Aug 1 15:42 openvz.repo
-rw-r–r– 1 root root 297 Sep 29 19:35 vz-guest-tools.repo
-rw-r–r– 1 root root 7770 Oct 11 16:19 vzlinux.repo
[root@openvz ~]#
各ファイルを確認してみる
[root@openvz ~]# cat /etc/yum.repos.d/factory.repo
# These repositories are for internal use by developers only
# Enable them on your own risk!!!
[factory]
name=Build Factory packages for Containers
mirrorlist=http://download.openvz.org/virtuozzo/mirrorlists/8.0/factory-os.mirrorlist
#baseurl=http://download.openvz.org/virtuozzo/factory/x86_64/os/
enabled=0
gpgcheck=1
module_hotfixes=True
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Virtuozzo-8
[factory-debuginfo]
name=Debug packages for Containers from Build Factory
mirrorlist=http://download.openvz.org/virtuozzo/mirrorlists/8.0/factory-debug.mirrorlist
#baseurl=http://download.openvz.org/virtuozzo/factory/x86_64/debug/
enabled=0
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Virtuozzo-8
[virtuozzolinux-openvz-factory]
name=VirtuozzoLinux Factory
mirrorlist=http://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-factory
#baseurl=http://repo.virtuozzo.com/vzlinux/8/$basearch/factory/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY
[virtuozzolinux-openvz-factory-debuginfo]
name=VirtuozzoLinux Factory debug packages
mirrorlist=http://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-factory-debug
#baseurl=http://repo.virtuozzo.com/vzlinux/8/$basearch/factory-debug/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY
[root@openvz ~]# cat /etc/yum.repos.d/obsoleted_tmpls.repo
[obsoleted_tmpls]
name=Virtuozzo obsoleted EZ-templates
mirrorlist=http://download.openvz.org/virtuozzo/mirrorlists/7.0/obsoleted_tmpls.mirrorlist
#baseurl=http://download.openvz.org/virtuozzo/obsoleted_tmpls/7.0/x86_64/os/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Virtuozzo-7
[root@openvz ~]# cat /etc/yum.repos.d/openvz.repo
[openvz-os]
name=OpenVZ
mirrorlist=http://download.openvz.org/virtuozzo/mirrorlists/8.0/releases-os.mirrorlist
#baseurl=http://download.openvz.org/virtuozzo/releases/8.0/x86_64/os/
enabled=1
gpgcheck=1
module_hotfixes=True
priority=50
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Virtuozzo-8
[openvz-updates]
name=OpenVZ Updates
mirrorlist=http://download.openvz.org/virtuozzo/mirrorlists/8.0/updates-os.mirrorlist
#baseurl=http://download.openvz.org/virtuozzo/updates/8.0/x86_64/os/
enabled=1
gpgcheck=1
module_hotfixes=True
priority=50
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Virtuozzo-8
[openvz-os-debuginfo]
name=OpenVZ os Debug packages
mirrorlist=http://download.openvz.org/virtuozzo/mirrorlists/8.0/releases-debug.mirrorlist
#baseurl=http://download.openvz.org/virtuozzo/releases/8.0/x86_64/debug/
enabled=0
gpgcheck=1
priority=50
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Virtuozzo-8
[openvz-updates-debuginfo]
name=OpenVZ updates Debug packages
mirrorlist=http://download.openvz.org/virtuozzo/mirrorlists/8.0/updates-debug.mirrorlist
#baseurl=http://download.openvz.org/virtuozzo/updates/8.0/x86_64/debug/
enabled=0
gpgcheck=1
priority=50
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Virtuozzo-8
[root@openvz ~]# cat /etc/yum.repos.d/vz-guest-tools.repo
[vz7-guest-tools]
name=Virtuozzo Guest Tools for VHS7
baseurl=http://repo.virtuozzo.com/vz-guest-tools-lin/vz7/latest/centos8/
gpgcheck=0
enabled=0
[vz8-guest-tools]
name=Virtuozzo Guest Tools for VHS8
baseurl=http://repo.virtuozzo.com/vz-guest-tools-lin/vz8/latest/centos8/
gpgcheck=0
enabled=0
[root@openvz ~]# cat /etc/yum.repos.d/vzlinux.repo
# virtuozzolinux.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for VirtuozzoLinux updates
# unless you are manually picking other mirrors.
#
[virtuozzolinux-base]
name=VirtuozzoLinux Base
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-os
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/os/
enabled=1
gpgcheck=1
priority=90
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Virtuozzo-8
#released updates
[virtuozzolinux-updates]
name=VirtuozzoLinux Updates
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-updates
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/updates/
enabled=1
gpgcheck=1
priority=90
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Virtuozzo-8
[virtuozzolinux-base-debuginfo]
name=VirtuozzoLinux Base debug packages
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-os-debug
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/debug/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Virtuozzo-8
[virtuozzolinux-updates-debuginfo]
name=VirtuozzoLinux Updates debug packages
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-updates-debug
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/updates-debug/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Virtuozzo-8
# These -factory repositories are for internal use by developers only
# Enable them on your own risk!!!
[virtuozzolinux-factory]
name=VirtuozzoLinux Factory
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-factory
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/factory/
priority=90
enabled=0
gpgcheck=0
[virtuozzolinux-factory-debuginfo]
name=VirtuozzoLinux Factory debug packages
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-factory-debug
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/factory-debug/
priority=90
enabled=0
gpgcheck=0
#
# Mimic names & ids of CentOS repos
#
[appstream]
name=Virtuozzo Linux $releasever - AppStream
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-os
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY
[baseos]
name=Virtuozzo Linux $releasever - BaseOS
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-os
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY
[cr]
name=Virtuozzo Linux $releasever - ContinuousRelease
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-os
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY
[extras]
name=Virtuozzo Linux $releasever - Extras
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-os
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY
[fasttrack]
name=Virtuozzo Linux $releasever - FastTrack
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-os
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY
[ha]
name=Virtuozzo Linux $releasever - HighAvailability
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-os
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY
[plus]
name=Virtuozzo Linux $releasever - Plus
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-os
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY
[powertools]
name=Virtuozzo Linux $releasever - PowerTools
exclude=kernel,kernel-core,kernel-devel,kernel-debug,libvirt,seabios,libguestfs,libguestfs-appliance,python3-libvirt,OVMF,anaconda*,kdump-anaconda-addon,blivet-data,python3-blivet,criu,crit,libcompel,python-criu,python3-criu,disp-helper-scripts-vz
mirrorlist=https://repo.virtuozzo.com/vzlinux/mirrorlist/mirrors-8-os
#baseurl=https://repo.virtuozzo.com/vzlinux/8/$basearch/os/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/VZLINUX_GPG_KEY
[root@openvz ~]#