2021/05/10

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

前回のその1に続いて Apache Guacamole の構築手順「その2」になります。

今回はWebアプリの部分である guacamole-client のインストール(というかデプロイ)手順になります。Alibaba Cloud の Server Load Balancer (SLB) の設定も一部含みます。

Guacamole サーバー構成(Web/AP)

環境は Alibaba Cloud で OS は CentOS 7.9 を使いました。
Apache Guacamole のバージョンは 1.3.0 です。

guacamole-client は Java アプリケーションサーバー上で稼働しますので、JDKやAPサーバー、ビルドに使うMavenが必要になります。

こちらの構築手順は以下をご参照ください。動かしてみるだけなら yum での導入でも大丈夫です。
なお、guacamole-client のビルドには Java 1.8 が必要になります。

guacamole-client はwarファイルが公開されていますが、今回は試しにソースコードからビルドしてみます。

Guacamole ソースコードの入手

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

あとはASF公式のダウンロードページやミラー( https://downloads.apache.org/ とか https://ftp.riken.jp )からの取得も可能です。
こちらではビルド済みのwarファイルも置いてあります。

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

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

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

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

# cd guacamole-client-1.3.0

# ls -la
合計 88
drwxrwxr-x   9 1001  1001  4096 12月 29 08:04 .
dr-xr-x---.  6 root root   4096  4月 21 18:33 ..
-rw-r--r--   1 1001 users    72 11月  1 06:37 .dockerignore
-rw-r--r--   1 1001 users    11 12月 12 17:46 .gitignore
-rw-r--r--   1 1001 users  1984  9月  1  2020 CONTRIBUTING
-rw-r--r--   1 1001 users  1921 11月  1 06:37 Dockerfile
-rw-r--r--   1 1001 users 15705  9月  1  2020 LICENSE
-rw-r--r--   1 1001 users   165 10月 26 14:32 NOTICE
-rw-r--r--   1 1001 users  2484  9月  1  2020 README
drwxrwxr-x   4 1001  1001  4096  7月  6  2020 doc
drwxrwxr-x  12 1001  1001  4096 12月 22 07:07 extensions
drwxrwxr-x   5 1001  1001  4096  4月 21 18:33 guacamole
drwxrwxr-x   3 1001  1001  4096  4月 21 18:33 guacamole-common
drwxrwxr-x   3 1001  1001  4096  4月 21 18:33 guacamole-common-js
drwxr-xr-x   3 1001 users  4096  4月 21 18:33 guacamole-docker
drwxrwxr-x   3 1001  1001  4096  4月 21 18:33 guacamole-ext
-rw-r--r--   1 1001 users  4908 12月 22 07:07 pom.xml
-rw-r--r--   1 1001 users  1977  9月  1  2020 project-assembly.xml

guacamole-client のビルド

今回はソースコードを持ってきたのでビルドをしていきます。Java と Maven が必要なので事前に導入してください。

展開したguacamole-client-1.3.0 ディレクトリの直下で mvn package を実行しアーティファクトを作成します。

# mvn package
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] guacamole-common                                                   [jar]
[INFO] guacamole-ext                                                      [jar]
[INFO] guacamole-common-js                                                [pom]
[INFO] guacamole                                                          [war]
[INFO] guacamole-auth-cas                                                 [jar]
[INFO] guacamole-auth-duo                                                 [jar]
[INFO] guacamole-auth-header                                              [jar]
[INFO] guacamole-auth-jdbc                                                [pom]
[INFO] guacamole-auth-jdbc-base                                           [jar]
[INFO] guacamole-auth-jdbc-mysql                                          [jar]
[INFO] guacamole-auth-jdbc-postgresql                                     [jar]
[INFO] guacamole-auth-jdbc-sqlserver                                      [jar]
[INFO] guacamole-auth-jdbc-dist                                           [jar]
[INFO] guacamole-auth-ldap                                                [jar]
[INFO] guacamole-auth-openid                                              [jar]
[INFO] guacamole-auth-quickconnect                                        [jar]
[INFO] guacamole-auth-saml                                                [jar]
[INFO] guacamole-auth-totp                                                [jar]
[INFO] guacamole-example                                                  [war]
[INFO] guacamole-playback-example                                         [war]
[INFO] guacamole-client                                                   [pom]
[INFO] 
[INFO] ---------------< org.apache.guacamole:guacamole-common >----------------
[INFO] Building guacamole-common 1.3.0                                   [1/21]
[INFO] --------------------------------[ jar ]---------------------------------

<中略>

[INFO] --- maven-assembly-plugin:2.5.3:single (make-source-archive) @ guacamole-client ---
[INFO] Reading assembly descriptor: project-assembly.xml
[INFO] Building tar: /root/guacamole-client-1.3.0/target/guacamole-client-1.3.0.tar.gz
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] guacamole-common 1.3.0 ............................. SUCCESS [01:44 min]
[INFO] guacamole-ext 1.3.0 ................................ SUCCESS [  7.072 s]
[INFO] guacamole-common-js 1.3.0 .......................... SUCCESS [ 15.820 s]
[INFO] guacamole 1.3.0 .................................... SUCCESS [01:09 min]
[INFO] guacamole-auth-cas 1.3.0 ........................... SUCCESS [ 16.991 s]
[INFO] guacamole-auth-duo 1.3.0 ........................... SUCCESS [  2.884 s]
[INFO] guacamole-auth-header 1.2.0 ........................ SUCCESS [  1.801 s]
[INFO] guacamole-auth-jdbc 1.3.0 .......................... SUCCESS [  0.028 s]
[INFO] guacamole-auth-jdbc-base 1.3.0 ..................... SUCCESS [  4.102 s]
[INFO] guacamole-auth-jdbc-mysql 1.3.0 .................... SUCCESS [  2.728 s]
[INFO] guacamole-auth-jdbc-postgresql 1.3.0 ............... SUCCESS [  2.599 s]
[INFO] guacamole-auth-jdbc-sqlserver 1.3.0 ................ SUCCESS [  2.473 s]
[INFO] guacamole-auth-jdbc-dist 1.3.0 ..................... SUCCESS [  3.354 s]
[INFO] guacamole-auth-ldap 1.3.0 .......................... SUCCESS [  8.983 s]
[INFO] guacamole-auth-openid 1.3.0 ........................ SUCCESS [  2.131 s]
[INFO] guacamole-auth-quickconnect 1.3.0 .................. SUCCESS [  2.622 s]
[INFO] guacamole-auth-saml 1.3.0 .......................... SUCCESS [  5.058 s]
[INFO] guacamole-auth-totp 1.3.0 .......................... SUCCESS [  6.922 s]
[INFO] guacamole-example 1.3.0 ............................ SUCCESS [  1.049 s]
[INFO] guacamole-playback-example 1.3.0 ................... SUCCESS [  0.367 s]
[INFO] guacamole-client 1.3.0 ............................. SUCCESS [  3.428 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  04:24 min
[INFO] Finished at: 2021-04-21T18:39:45+08:00
[INFO] ------------------------------------------------------------------------

BUILD SUCCESS が表示されていればアーティファクトが作成されています。
war ファイルを探すと以下にあるようですね。

# find -name *1.3.0.war -not -path "./doc/*" -ls
1070495 11992 -rw-r--r--   1 root     root     12277217  4月 21 18:38 ./guacamole/target/guacamole-1.3.0.war

あとで使う拡張機能も以下のような所に生成されています。

# find extensions/ -name *1.3.0.jar -ls
791507 3652 -rw-r--r--   1 root     root      3739151  4月 21 18:38 extensions/guacamole-auth-duo/target/guacamole-auth-duo-1.3.0.jar
664165  220 -rw-r--r--   1 root     root       221392  4月 21 18:39 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/target/guacamole-auth-jdbc-base-1.3.0.jar
664652    4 -rw-r--r--   1 root     root         2611  4月 21 18:39 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-dist/target/guacamole-auth-jdbc-dist-1.3.0.jar
664639 5584 -rw-r--r--   1 root     root      5717087  4月 21 18:39 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/target/guacamole-auth-jdbc-sqlserver-1.3.0.jar
796047 5592 -rw-r--r--   1 root     root      5723346  4月 21 18:39 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/target/guacamole-auth-jdbc-mysql-1.3.0.jar
664517 5588 -rw-r--r--   1 root     root      5720551  4月 21 18:39 extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/target/guacamole-auth-jdbc-postgresql-1.3.0.jar
1192718 1000 -rw-r--r--   1 root     root      1019956  4月 21 18:39 extensions/guacamole-auth-openid/target/guacamole-auth-openid-1.3.0.jar
1074427 4872 -rw-r--r--   1 root     root      4986175  4月 21 18:39 extensions/guacamole-auth-totp/target/guacamole-auth-totp-1.3.0.jar
533809   24 -rw-r--r--   1 root     root        24523  4月 21 18:39 extensions/guacamole-auth-quickconnect/target/guacamole-auth-quickconnect-1.3.0.jar
1192695 7408 -rw-r--r--   1 root     root      7582202  4月 21 18:39 extensions/guacamole-auth-ldap/target/guacamole-auth-ldap-1.3.0.jar
665518 3960 -rw-r--r--   1 root     root      4053779  4月 21 18:39 extensions/guacamole-auth-saml/target/guacamole-auth-saml-1.3.0.jar
1189984 3772 -rw-r--r--   1 root     root      3858939  4月 21 18:38 extensions/guacamole-auth-cas/target/guacamole-auth-cas-1.3.0.jar

guacamole-client (Web アプリ) のデプロイ

デプロイ先に Java のアプリケーションサーバーが必要です。
今回は Tomcat を使用しています。warファイルを配置します。

# cp guacamole/target/guacamole-1.3.0.war /opt/tomcat/webapps/guacamole.war

# ls -la /opt/tomcat/webapps/
合計 12024
drwxr-x---  8 tomcat tomcat     4096  4月 21 21:09 .
drwxr-xr-x  9 tomcat tomcat     4096  4月 21 15:52 ..
drwxr-x---  3 tomcat tomcat     4096  4月 20 14:04 ROOT
drwxr-x--- 15 tomcat tomcat     4096  4月 20 14:04 docs
drwxr-x---  7 tomcat tomcat     4096  4月 20 14:04 examples
drwxr-x--- 11 tomcat tomcat     4096  4月 21 21:09 guacamole
-rw-r--r--  1 root   root   12277217  4月 21 21:09 guacamole.war
drwxr-x---  6 tomcat tomcat     4096  4月 20 14:04 host-manager
drwxr-x---  6 tomcat tomcat     4096  4月 20 14:04 manager

以下の画面が表示出来ればデプロイは成功です。webサーバーがいれば https://xxxxxxx/guacamole Tomcatに直接であれば http://localhost:8080/guacamole でアクセスします。

Guacamole ログイン画面

Alibaba Cloud SLB (CLB)の設定

ここからは少し Alibaba Cloud の話が入ります。今回はECSにグローバルIPを持たせていないので、サーバーの前段にロードバランサーを配置します。今回はそこの設定手順も見ていきたいと思います。
※必要な人だけ行ってください。

Guacamole サーバー構成(Web/AP)

Alibaba Cloud の管理コンソールから「Server Load Balancer」のページへ遷移して「Create CLB」を選択します。

Alibaba Cloud CLB の作成

リージョンやインスタンスタイプなどを選択して「Buy Now」を選択します。

Alibaba Cloud CLB の作成詳細

設定内容の確認が出るので「Terms of Service」をチェックして「Activate Now」を選択します。

Alibaba Cloud CLB の作成確認画面

「Server Load Balancer」のページへ戻り一覧から作成した SLB(CLB)の「Configure」を選択します。

Alibaba Cloud CLB の一覧画面

リスナーのプロトコルを選ぶのですが、今回はHTTPSを選択して「Next」を選択します。
なお、HTTPSを使うにはSSL証明書が必要になります。

Alibaba Cloud CLB の設定(プロトコル)

ここで、取込済みの証明書を選択するか、新たに取込んだSSL証明書を選択して「Next」を選択します。
※今回は割愛しますが、必要であれば別途手順を書きます。

Alibaba Cloud CLB の設定(SSL証明書)

バックエンドのサーバーを選択する画面になります。
「VServer Groupe」と「Default server group」がありますが、今回は「Default server group」を選択して「Add More」を選択します。
※「VServer Groupe」は一つのSLBで複数のドメインやURLの宛先に応じて異なるバックエンドに振り分ける場合に使用します。

Alibaba Cloud CLB の設定(バックエンドサーバー)

SLB(CLB)に紐付けるECSを選択します。

Alibaba Cloud CLB の設定(サーバー選択)

今回は1台だけなので「Weight」は100にして「Add」を選択します。

Alibaba Cloud CLB の設定(サーバー追加)

今回バックエンドのTomcatは8080ポートのままなので「port」に8080を入力し「Next」を選択します。

Alibaba Cloud CLB の設定(バックエンドポート指定)

ヘルスチェックはバックのTomcatの設定による部分はありますが・・・デフォルトであればこのままで大丈夫なはずです。
「Next」を選択します。

Alibaba Cloud CLB の設定(ヘルスチェック)

設定内容が表示されるので問題がなければ「Submit」を選択します。

Alibaba Cloud CLB の設定確認画面

こんな感じで表示されれば作成は成功です。

Alibaba Cloud CLB の設定成功

「OK」を選択すると作成したSLB(CLB)が表示されます。
グローバルIPが表示されるので、このIPアドレスをドメインを管理しているDNSにてAレコードとして設定してあげてください。
※この部分は今回割愛させて頂きます。

Alibaba Cloud CLB の一覧画面

一応このままIPでアクセスすることも可能ですが、SSL証明書と合わないので怒られると思います。
DNSの設定前に確認が必要であれば「X.X.X.Xにアクセスする(安全ではありません)」を選択して表示できるかは確認できます。

Alibaba Cloud CLB アクセス(IP直接)

ちなみに、まだ東京リージョンに来ていない且つベータ版ですが、新しく出た Application Load Balancer(ALB) の方はAlibabaが持つドメイン名での提供となります。
※実際に使用されるときはDNSでCNAMEを設定することになるかと思いますが。

Alibaba Cloud ALB のサンプル画面

まずはWebアプリにアクセスできる所まで来ました。
ただし、このままだとログインユーザーや接続先の設定などは出来ていないので、そちらの準備をしていきます。

Guacamole を利用するにはデフォルトの user-mapping.xml を使った方法と別途DBを使う方法があります。
今回はコストは掛かりますが管理のしやすいDBを使った方法でいきたいと思います。

DBを立てられない、一人で簡単に使いたいだけであれば /etc/guacamole/user-mapping.xml に以下のような設定をすることで利用可能です。
詳しくは公式の手順をご確認ください。

https://guacamole.apache.org/doc/gug/configuring-guacamole.html#basic-auth

<user-mapping>
  <!-- ログイン用ID/Pass -->
  <authorize username="guacuser" password="y7eQkJKZME#oW6jc4E">
    <!-- ログイン先のサーバー情報 -->
    <connection name="Win">
      <protocol>rdp</protocol>
      <!-- hostname または プライベートIP -->
      <param name="hostname">10.100.10.120</param>
      <param name="port">3389</param>
      <param name="username">Administrator</param>
      <param name="password">4NU&*34M8LX5fZ8LL@</param>
    </connection>
    <connection name="Win2">
      <protocol>rdp</protocol>
      <param name="hostname">10.100.10.153</param>
      <param name="port">3389</param>
      <param name="username">Administrator</param>
      <param name="password">4NU&*34M8LX5fZ8LL@</param>
    </connection>
  </authorize>
</user-mapping>

次回は DB を使った部分の設定をご紹介していきます。
DB は ECS に立てても良いのですが
Alibaba Cloud の Relational Database Service (RDS) を使用する予定です。

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アプリ) のインストール・・・というかデプロイをしていきます。

2021/05/03

[備忘録] Centos 7 に Maven 3.8 をインストールする

ちょっと Apache Maven が必要な事があり、久しぶりにインストールしたので備忘録として残します。

環境は Alibaba Cloud の ECS で OS は CentOS 7.9 を使いました。

Maven の取得

公式 またはミラーからファイルを取得します

# wget https://downloads.apache.org/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz
--2021-04-21 18:12:44--  https://downloads.apache.org/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz
downloads.apache.org (downloads.apache.org) をDNSに問いあわせています... 88.99.95.219, 2a01:4f8:10a:201a::2
downloads.apache.org (downloads.apache.org)|88.99.95.219|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 9536838 (9.1M) [application/x-gzip]
`apache-maven-3.8.1-bin.tar.gz' に保存中

100%[===========================================================================================================================================>] 9,536,838   3.11MB/s 時間 2.9s   

2021-04-21 18:12:48 (3.11 MB/s) - `apache-maven-3.8.1-bin.tar.gz' へ保存完了 [9536838/9536838]

Maven の配置

取得したファイルを展開します。
今回は /opt に配置します。

# sudo tar -zxvf apache-maven-3.8.1-bin.tar.gz -C /opt/
apache-maven-3.8.1/README.txt
apache-maven-3.8.1/LICENSE
apache-maven-3.8.1/NOTICE
apache-maven-3.8.1/lib/
apache-maven-3.8.1/lib/cdi-api.license
apache-maven-3.8.1/lib/commons-cli.license
apache-maven-3.8.1/lib/commons-io.license
apache-maven-3.8.1/lib/commons-lang3.license
apache-maven-3.8.1/lib/guava.license
apache-maven-3.8.1/lib/guice.license
apache-maven-3.8.1/lib/jansi.license
apache-maven-3.8.1/lib/javax.inject.license
apache-maven-3.8.1/lib/jcl-over-slf4j.license
apache-maven-3.8.1/lib/jsoup.license
apache-maven-3.8.1/lib/jsr250-api.license
apache-maven-3.8.1/lib/org.eclipse.sisu.inject.license
apache-maven-3.8.1/lib/org.eclipse.sisu.plexus.license
apache-maven-3.8.1/lib/plexus-cipher.license
apache-maven-3.8.1/lib/plexus-component-annotations.license
apache-maven-3.8.1/lib/plexus-interpolation.license
apache-maven-3.8.1/lib/plexus-sec-dispatcher.license
apache-maven-3.8.1/lib/plexus-utils.license
apache-maven-3.8.1/lib/slf4j-api.license
apache-maven-3.8.1/boot/
<以下略>

シンボリックリンクの作成

展開したディレクトリにはバージョン表記などが含まれているので /opt/maven にシンボリックリンクを貼ります。

# sudo ln -s /opt/apache-maven-3.8.1 /opt/maven

# ls -la /opt/
合計 16
drwxr-xr-x.  4 root   root   4096  4月 21 18:16 .
dr-xr-xr-x. 18 root   root   4096  4月 19 10:33 ..
drwxr-xr-x   6 root   root   4096  4月 21 18:14 apache-maven-3.8.1
drwxr-xr-x   9 tomcat tomcat 4096  4月 21 15:52 apache-tomcat-9.0.45
lrwxrwxrwx   1 root   root     23  4月 21 18:16 maven -> /opt/apache-maven-3.8.1
lrwxrwxrwx   1 tomcat tomcat   20  4月 20 10:23 tomcat -> apache-tomcat-9.0.45

環境変数 PATH の設定

PATHに配置したMavenの場所を追加します。

# sudo  echo 'export PATH=$PATH:/opt/maven/bin' >> /etc/profile

# source /etc/profile

# env |grep maven
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/maven/bin

# mvn -version
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: /opt/maven
Java version: 1.8.0_282, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.15.2.el7.x86_64", arch: "amd64", family: "unix"

Maven のインストールは完了です。
あとは実際にビルドをしてみましょう。

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

前回のその1に続いて  Apache Guacamole の構築手順 「その2」になります。 今回はWebアプリの部分である  guacamole-client  のインストール(というかデプロイ)手順になります。Alibaba Cloud の Server Load Balan...