2021/05/07

[備忘録] CentOS 7 に Apache Guacamole 1.3.0 をインストールする ~ その1

Apache Guacamole をさわってみたのでインストール手順を残してみます。
複数回に分けて書いていきます。今回は Guacamole Server (guacd) の部分になります。

環境は Alibaba Cloud で OS は CentOS 7.9 を使いました。
Apache Guacamole のバージョンは 1.3.0 です。
Apache Guacamole は Kubernetes への展開もサポートしていますが、今回は普通にインストールする方法です。
※他のパブリッククラウドでもインストール手順はほぼ変わらんと思います。

Apache Guacamole はブラウザから利用できるクライアントレスのリモートデスクトップゲートウェイです。

Guacamole を使う事でプライベートネットワークにいるサーバーなどへブラウザから接続する事が出来る様になります。

公式のイメージ図は以下の様になります。

Guacamole

出典:https://guacamole.apache.org/doc/gug/guacamole-architecture.html

今回の環境ですが、一旦以下の様な構成になります。
Guacamole on AlibabaCloud

Guacamole Server

Guacamole はユーザー向けのWebアプリケーションを提供するguacamole-client とリモートアクセスのプロトコルを中継する guacamole-server (guacd) の二つの機能に分かれます。

guacamole-client に関してはwarファイルが公開されていますが、guacamole-server は公式にはソースコードのみ公開されているのでコンパイルが必要です。
コンパイルするための諸々をまずは準備していきます。

必須の依存関係をインストールします

# sudo yum install cairo-devel libjpeg-turbo-devel libpng-devel uuid-devel libtool

オプションの依存関係をインストールします

全部入れる必要はなく利用する予定の機能に合わせて取捨選択しても良いです。
今回は全部入れますが、それぞれの用途は以下の通りです。

    RDP:
        * FreeRDP (http://www.freerdp.com/)

    SSH:
        * libssh2 (http://www.libssh2.org/)
        * OpenSSL (https://www.openssl.org/)
        * Pango (http://www.pango.org/)

    Telnet:
        * libtelnet (https://github.com/seanmiddleditch/libtelnet)
        * Pango (http://www.pango.org/)

    VNC:
        * libVNCserver (http://libvnc.github.io/)

    Support for audio within VNC:
        * PulseAudio (http://www.freedesktop.org/wiki/Software/PulseAudio/)

    Support for SFTP file transfer for VNC or RDP:
        * libssh2 (http://www.libssh2.org/)
        * OpenSSL (https://www.openssl.org/)

    Support for WebP image compression:
        * libwebp (https://developers.google.com/speed/webp/)

    "guacenc" video encoding utility:
        * FFmpeg (https://ffmpeg.org/)

出典:https://github.com/apache/guacamole-server

# sudo yum install freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel

ffmpeg に関しては、RPMFusionからパッケージを入れるか、ソースコードからビルドするか、どちらかの方法でのインストールになります。
※ffmpegは操作の録画機能で使われます。

# sudo yum localinstall --nogpgcheck https://mirrors.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
# sudo yum update
# sudo yum install ffmpeg ffmpeg-devel

Guacamole ソースコードの入手

ソースコードは Apache Guacamole のリリースページ又は、GitHub から取得します。

あとはASF公式のダウンロードページやミラー(https://downloads.apache.org/ とか https://ftp.riken.jp)からの取得も可能です。

任意のディレクトリでソースコードを取得します。

# wget https://ftp.riken.jp/net/apache/guacamole/1.3.0/source/guacamole-server-1.3.0.tar.gz

# wget https://ftp.riken.jp/net/apache/guacamole/1.3.0/source/guacamole-client-1.3.0.tar.gz

圧縮ファイルを展開します。

# tar -zxvf guacamole-server-1.3.0.tar.gz

# cd guacamole-server-1.3.0

# ls -la
合計 756
drwxr-xr-x   8 1001 users   4096 12月 29 08:03 .
dr-xr-x---.  8 root root    4096  4月 22 13:08 ..
-rw-r--r--   1 1001 users    637  7月  1  2020 .dockerignore
-rw-r--r--   1 1001 users   1984  7月  1  2020 CONTRIBUTING
-rw-r--r--   1 1001 users   6084 12月 29 07:56 Dockerfile
-rw-r--r--   1 1001 users  11358  1月 26  2020 LICENSE
-rw-r--r--   1 1001 users   2612 12月 22 07:21 Makefile.am
-rw-r--r--   1 1001 users  30946 12月 29 08:03 Makefile.in
-rw-r--r--   1 1001 users    165 12月 11 14:54 NOTICE
-rw-r--r--   1 1001 users   6108  7月 11  2020 README
-rw-r--r--   1 1001 users  55738 12月 29 08:03 aclocal.m4
drwxr-xr-x   2 1001 users   4096 12月 29 08:03 bin
drwxr-xr-x   2 1001 users   4096 12月 29 08:03 build-aux
-rw-r--r--   1 1001 users   6341 12月 29 08:03 config.h.in
-rwxr-xr-x   1 1001 users 555917 12月 29 08:03 configure
-rw-r--r--   1 1001 users  37030 12月 29 07:56 configure.ac
drwxr-xr-x   2 1001 users   4096 12月 29 08:03 doc
drwxr-xr-x   2 1001 users   4096 12月 29 08:03 m4
drwxr-xr-x  12 1001 users   4096 12月 29 08:03 src
drwxr-xr-x   2 1001 users   4096 12月 29 08:03 util

guacamole-server (guacd)のインストール

コンパイルします。

# sudo ./configure --with-systemd-dir=/usr/lib/systemd/system

<省略>
------------------------------------------------
guacamole-server version 1.3.0
------------------------------------------------

   Library status:

     freerdp2 ............ yes
     pango ............... yes
     libavcodec .......... yes
     libavformat.......... yes
     libavutil ........... yes
     libssh2 ............. yes
     libssl .............. yes
     libswscale .......... yes
     libtelnet ........... yes
     libVNCServer ........ yes
     libvorbis ........... yes
     libpulse ............ yes
     libwebsockets ....... yes
     libwebp ............. yes
     wsock32 ............. no

   Protocol support:

      Kubernetes .... yes
      RDP ........... yes
      SSH ........... yes
      Telnet ........ yes
      VNC ........... yes

   Services / tools:

      guacd ...... yes
      guacenc .... yes
      guaclog .... yes

   FreeRDP plugins: /usr/lib64/freerdp2
   Init scripts: no
   Systemd units: /usr/lib/systemd/system

Type "make" to compile guacamole-server.

設定や Library status に問題なければインストールしていきます。

# sudo make

# sudo make install

guacd というサービスがインストールされているはずなので起動してみます。
あとついでに自動起動も設定しておきます。

# sudo systemctl start guacd

# sudo systemctl status guacd
● guacd.service - Guacamole Server
   Loaded: loaded (/usr/lib/systemd/system/guacd.service; disabled; vendor preset: disabled)
   Active: active (running) since 木 2021-04-22 14:02:00 CST; 3s ago
     Docs: man:guacd(8)
 Main PID: 29690 (guacd)
   CGroup: /system.slice/guacd.service
           └─29690 /usr/local/sbin/guacd -f

 4月 22 14:02:00 guacamole2 systemd[1]: Started Guacamole Server.
 4月 22 14:02:00 guacamole2 guacd[29690]: Guacamole proxy daemon (guacd) version 1.3.0 started
 4月 22 14:02:00 guacamole2 guacd[29690]: guacd[29690]: INFO:        Guacamole proxy daemon (guacd) version 1.3.0 started
 4月 22 14:02:00 guacamole2 guacd[29690]: guacd[29690]: INFO:        Listening on host 127.0.0.1, port 4822
 4月 22 14:02:00 guacamole2 guacd[29690]: Listening on host 127.0.0.1, port 4822

# sudo systemctl enable guacd
Created symlink from /etc/systemd/system/multi-user.target.wants/guacd.service to /usr/lib/systemd/system/guacd.service.

ここまでこれば guacamole-server (guacd) のインストールはできました。

暫定対応

コレでOK・・・と思っていた貴方実はこんなエラーが発生していませんか?

guacamole2 guacd[7900]: FreeRDP initialization may fail: The current user's home directory ("/sbin") is not writable, but FreeRDP generally requires a writable home directory for storage of configuration files and certificates.

guacamole2 guacd[7813]: guacd[7900]: WARNING:        FreeRDP initialization may fail: The current user's home directory ("/sbin") is not writable, but FreeRDP generally requires a writable home directory for storage of configuration files and certificates.

systemd にインストールした場合、実行ユーザーが daemon になっています。
そしてdaemonユーザーのホームディレクトリが/sbin(/usr/sbin) で書き込めない様です。

問題を深く追っていないのですが、configure オプションの --with-systemd-dir を指定すると以下のファイルが使われるのですが、それがどうも今回の環境だと合わない様です。
※CentOSで一般的に起こる問題なのか、Alibaba固有なのかまでは追ってないんですが・・・

# cat /usr/lib/systemd/system/guacd.service
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

[Unit]
Description=Guacamole Server
Documentation=man:guacd(8)
After=network.target

[Service]
User=daemon
ExecStart=/usr/local/sbin/guacd -f
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

https://github.com/apache/guacamole-server/blob/master/src/guacd/systemd/guacd.service.in


仕方ないので実行ユーザーをちょっと変えてみます。
専用の実行ユーザー(guacamole)などを作ってもいいと思いますが、今回はrootユーザーで許してください。

systemctl edit で上書き用の設定ファイルを記述します。
※自動的に override.conf というファイルが生成されます。

# sudo systemctl edit guacd

以下のみ入力して保存します。
※[Service] はもしかしたら要らないかも

[Service]
User=root

設定をリロードして再起動すると、override.conf を読み込む様になっていることが確認できます。

# sudo systemctl daemon-reload

# sudo systemctl restart guacd

# sudo systemctl status guacd
● guacd.service - Guacamole Server
   Loaded: loaded (/usr/lib/systemd/system/guacd.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/guacd.service.d
           └─override.conf
   Active: active (running) since 木 2021-04-22 15:31:23 CST; 8s ago
     Docs: man:guacd(8)
 Main PID: 8227 (guacd)
   CGroup: /system.slice/guacd.service
           └─8227 /usr/local/sbin/guacd -f

 4月 22 15:31:23 guacamole2 systemd[1]: Started Guacamole Server.
 4月 22 15:31:23 guacamole2 guacd[8227]: Guacamole proxy daemon (guacd) version 1.3.0 started
 4月 22 15:31:23 guacamole2 guacd[8227]: Listening on host 127.0.0.1, port 4822
 4月 22 15:31:23 guacamole2 guacd[8227]: guacd[8227]: INFO:        Guacamole proxy daemon (guacd) version 1.3.0 started
 4月 22 15:31:23 guacamole2 guacd[8227]: guacd[8227]: INFO:        Listening on host 127.0.0.1, port 4822

実行ユーザーが root になっていることが確認できます。

# ps -ef |grep [g]uacd
root      8227     1  0 15:31 ?        00:00:00 /usr/local/sbin/guacd -f

もし、Webアプリ(guacamole-client)が起動していれば、APサーバー(Tomcatなど)も再起動して接続を再確認しましょう。


今回は一旦ここまでとなります、次回は Guacamole Client (Webアプリ) のインストール・・・というかデプロイをしていきます。

0 件のコメント:

コメントを投稿

[備忘録] CentOS 7 に Apache Guacamole 1.3.0 をインストールする ~ その3

前回のその2に続いて「その3」になります。 今回は  guacamole-client の情報を保存するための 拡張オプションとDBの設定 部分を実施していきます。 環境は Alibaba Cloud の RDS で MySQL 8.0 を使いました。 ECS、SLB と合わせた...