RedHat 系で Zoom をインストールするには、rpm のパッケージが用意されていますが、手動でダウンロードしてからインストールする必要があるので、最新状態を維持するには手間がかかります。
VSCode や slack であればレポジトリが用意されているので、dnf コマンドでの OS アップデートに一体化されていて手間がかかりません。
そこで Zoom のレポジトリを自分で作って、更新作業を dnf に一元化しましょう。(最終的には完成したレポジトリを公開しています。)
- クライアントは RedHat 系で、マシンは複数台ある。
- 作ったファイル(レポジトリ)を Web サーバ (Apache) で公開する(あるいはローカルで共有する)。
- レポジトリを作るOSは、RedHat 系はもちろん、Debian 系でもよい。
以下では、RedHat 系 = CentOS Stream 9 と Debian 系 = Ubuntu 18.04.6 LTS で試しました。
Zoom の最新 RPM を自動ダウンロード
ダウンロードセンター のページは、JavaScript で作られるのか、Web ブラウザで操作した時と wget でダウンロードした時では、内容が随分と違います。自動ダウンロードには都合が悪いです。
ところで、ダウンロードするファイルはいつも https://zoom.us/client/($ver).($rev)/zoom_x86_64.rpm
になっているようですので、バージョンとリビジョンを別のページから取得することを考えます。Release notes for the Zoom Workplace app には、table の中に各アーキテクチャのバージョンとリビジョンが書き込まれているので、これを利用するのが簡単そうです。
コード
#!/usr/bin/perl -w
chomp(my $DIR=`dirname $0`);
chdir $DIR || die;
my $URL = "https://support.zoom.com/hc/en/article?id=zm_kb&sysparm_article=KB0061222";
my @table = ();
my $full_versions = 0;
open(IN, "wget -O - '$URL' |") || die;
while (<IN>) {
for (split(/\\n/)) { # 本当にHTMLに'\n'と書いてある
$full_versions = 1 if />Full versions</;
if ($full_versions && /<table/) {
push @table, split(/<\/t[hd]>/);
last; # 最初の table で十分
}
}
last if scalar(@table) > 0; # 最初の table で十分
}
close(IN);
my @th = grep(/<th/, @table);
my @td = grep(/<td/, @table);
# "Linux"を含む要素が @th に1個だけと信じて、その要素番号を得る
my ($index) = grep { $th[$_] =~ /Linux/ } 0..$#th;
unless ($td[$index] =~ /<td>([\d\.]+)\s*\((\d+)\)/) {
print "Failed to analyze version and revision.\n";
exit 1;
}
my ($ver, $rev) = ($1, $2);
print "ver=$ver, rev=$rev\n";
my $rpm = "zoom-$ver.$rev-1.x86_64.rpm";
if (-e $rpm) {
print "Already downloaded.\n";
exit;
}
system("wget -c https://zoom.us/client/$ver.$rev/zoom_x86_64.rpm -O $rpm");
公開されているファイル名は、常に zoom_x86_64.rpm
(ディレクトリは違う)ですが、ダウンロード先を共通のディレクトリにしたいので、名前を変更して RPM 上のバージョンを含めています。
レポジトリ作成
公開する Web サーバ上で、createrepo_c
(RedHat系)あるいは createrepo
(Debian系)パッケージを用意します。
sudo dnf install createrepo_c (CentOS Stream 9)
sudo apt-get install createrepo (Debian系)
zoom-*.rpm
の存在するディレクトリ(仮に ~/public_html/my-zoom/
とする)で、以下を実行します。
createrepo .
~/public_html/my-zoom/repodata/
以下に repomd.xml
などのファイルが作られます。これでレポジトリの完成です。zoom-*.rpm
をダウンロードするスクリプトと共に、cron で定期的に実行します。
Apache の
Options
のIndexes
はオフ(ディレクトリが指定された時にファイル名の一覧を表示しない)でも大丈夫です。
クライアントから使う
以下のファイルを作ります。
[my-zoom]
name=my-zoom
baseurl=https://my.server/~my-id/my-zoom/
enabled=1
gpgcheck=1
gpgkey=https://zoom.us/linux/download/pubkey?version=6-3-10
これで sudo dnf update
で更新されるようになりました。
-
baseurl=file:///path/to/repo
とfile://
プロトコルでローカルファイルを指定できるので、NASでファイル共有する場合でも大丈夫です。 -
gpgkey=
には、配布ページに書いてあるパブリックキーの URI を書き写しました。
レポジトリを公開する
せっかく作ったレポジトリなので、一般に公開することを考えました。ところが Zoom の RPM の再配布が許されるのか、記述を見つけきれませんでした。そこで Apache の設定で、rpm はダウンロード元サイトにリダイレクトしてみます。これなら「配布してない」と言い張れます。
RewriteEngine on
RewriteRule ^zoom-([0-9\.\-]+)-1.x86_64.rpm$ https://zoom.us/client/$1/zoom_x86_64.rpm
これでレポジトリを公開できるので、CentOS なら以下の記述で利用できます。(Fedora, RedHat などは未確認です。)自宅サーバなので、信頼性は期待しないでください。
[my-zoom]
name=my-zoom
baseurl=https://tutimura.ath.cx/~nob/my-zoom/
enabled=1
gpgcheck=1
gpgkey=https://zoom.us/linux/download/pubkey?version=6-3-10