0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CentOS の Zoom レポジトリを作る

Posted at

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 の OptionsIndexes はオフ(ディレクトリが指定された時にファイル名の一覧を表示しない)でも大丈夫です。

クライアントから使う

以下のファイルを作ります。

/etc/yum.repos.d/my-zoom.repo
[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/repofile:// プロトコルでローカルファイルを指定できるので、NASでファイル共有する場合でも大丈夫です。
  • gpgkey= には、配布ページに書いてあるパブリックキーの URI を書き写しました。

レポジトリを公開する

せっかく作ったレポジトリなので、一般に公開することを考えました。ところが Zoom の RPM の再配布が許されるのか、記述を見つけきれませんでした。そこで Apache の設定で、rpm はダウンロード元サイトにリダイレクトしてみます。これなら「配布してない」と言い張れます。

~/public_html/my-zoom/.htaccess
RewriteEngine on
RewriteRule ^zoom-([0-9\.\-]+)-1.x86_64.rpm$ https://zoom.us/client/$1/zoom_x86_64.rpm

これでレポジトリを公開できるので、CentOS なら以下の記述で利用できます。(Fedora, RedHat などは未確認です。)自宅サーバなので、信頼性は期待しないでください。

/etc/yum.repos.d/my-zoom.repo
[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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?